diff options
460 files changed, 13473 insertions, 6481 deletions
diff --git a/Android.bp b/Android.bp index 8d25704883fd..7bdedc79943d 100644 --- a/Android.bp +++ b/Android.bp @@ -77,7 +77,6 @@ java_defaults { "core/java/android/app/ISearchManager.aidl", "core/java/android/app/ISearchManagerCallback.aidl", "core/java/android/app/IServiceConnection.aidl", - "core/java/android/app/ISmsAppService.aidl", "core/java/android/app/IStopUserCallback.aidl", "core/java/android/app/job/IJobCallback.aidl", "core/java/android/app/job/IJobScheduler.aidl", @@ -288,6 +287,7 @@ java_defaults { "core/java/android/service/carrier/ICarrierService.aidl", "core/java/android/service/carrier/ICarrierMessagingCallback.aidl", "core/java/android/service/carrier/ICarrierMessagingService.aidl", + "core/java/android/service/carrier/ICarrierMessagingClientService.aidl", "core/java/android/service/contentsuggestions/IContentSuggestionsService.aidl", "core/java/android/service/euicc/IDeleteSubscriptionCallback.aidl", "core/java/android/service/euicc/IDownloadSubscriptionCallback.aidl", @@ -909,6 +909,7 @@ aidl_interface { "core/java/android/net/ProxyInfoParcelable.aidl", "core/java/android/net/RouteInfoParcelable.aidl", "core/java/android/net/StaticIpConfigurationParcelable.aidl", + "core/java/android/net/TcpKeepalivePacketDataParcelable.aidl", "core/java/android/net/dhcp/DhcpServingParamsParcel.aidl", "core/java/android/net/dhcp/IDhcpServer.aidl", "core/java/android/net/dhcp/IDhcpServerCallbacks.aidl", diff --git a/api/current.txt b/api/current.txt index 44e9e5e016a6..8458ed33ad5d 100644 --- a/api/current.txt +++ b/api/current.txt @@ -26,6 +26,7 @@ package android { field public static final String BIND_APPWIDGET = "android.permission.BIND_APPWIDGET"; field public static final String BIND_AUTOFILL_SERVICE = "android.permission.BIND_AUTOFILL_SERVICE"; field public static final String BIND_CALL_REDIRECTION_SERVICE = "android.permission.BIND_CALL_REDIRECTION_SERVICE"; + field public static final String BIND_CARRIER_MESSAGING_CLIENT_SERVICE = "android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE"; field @Deprecated public static final String BIND_CARRIER_MESSAGING_SERVICE = "android.permission.BIND_CARRIER_MESSAGING_SERVICE"; field public static final String BIND_CARRIER_SERVICES = "android.permission.BIND_CARRIER_SERVICES"; field public static final String BIND_CHOOSER_TARGET_SERVICE = "android.permission.BIND_CHOOSER_TARGET_SERVICE"; @@ -41,7 +42,6 @@ package android { field public static final String BIND_QUICK_SETTINGS_TILE = "android.permission.BIND_QUICK_SETTINGS_TILE"; field public static final String BIND_REMOTEVIEWS = "android.permission.BIND_REMOTEVIEWS"; field public static final String BIND_SCREENING_SERVICE = "android.permission.BIND_SCREENING_SERVICE"; - field public static final String BIND_SMS_APP_SERVICE = "android.permission.BIND_SMS_APP_SERVICE"; field public static final String BIND_TELECOM_CONNECTION_SERVICE = "android.permission.BIND_TELECOM_CONNECTION_SERVICE"; field public static final String BIND_TEXT_SERVICE = "android.permission.BIND_TEXT_SERVICE"; field public static final String BIND_TV_INPUT = "android.permission.BIND_TV_INPUT"; @@ -645,6 +645,7 @@ package android { field public static final int footerDividersEnabled = 16843311; // 0x101022f field public static final int forceDarkAllowed = 16844172; // 0x101058c field public static final int forceHasOverlappingRendering = 16844065; // 0x1010521 + field public static final int forceUriPermissions = 16844197; // 0x10105a5 field public static final int foreground = 16843017; // 0x1010109 field public static final int foregroundGravity = 16843264; // 0x1010200 field public static final int foregroundServiceType = 16844191; // 0x101059f @@ -6210,11 +6211,6 @@ package android.app { method public void onSharedElementsReady(); } - public class SmsAppService extends android.app.Service { - ctor public SmsAppService(); - method public final android.os.IBinder onBind(android.content.Intent); - } - public class StatusBarManager { } @@ -6742,6 +6738,7 @@ package android.app.admin { method public void setCrossProfileCalendarPackages(@NonNull android.content.ComponentName, @Nullable java.util.Set<java.lang.String>); method public void setCrossProfileCallerIdDisabled(@NonNull android.content.ComponentName, boolean); method public void setCrossProfileContactsSearchDisabled(@NonNull android.content.ComponentName, boolean); + method public void setDefaultSmsApplication(@NonNull android.content.ComponentName, @NonNull String); method public void setDelegatedScopes(@NonNull android.content.ComponentName, @NonNull String, @NonNull java.util.List<java.lang.String>); method public void setDeviceOwnerLockScreenInfo(@NonNull android.content.ComponentName, CharSequence); method public void setEndUserSessionMessage(@NonNull android.content.ComponentName, @Nullable CharSequence); @@ -7252,6 +7249,7 @@ package android.app.backup { ctor public BackupManager(android.content.Context); method public void dataChanged(); method public static void dataChanged(String); + method @Nullable public android.os.UserHandle getUserForAncestralSerialNumber(long); method @Deprecated public int requestRestore(android.app.backup.RestoreObserver); } @@ -11879,6 +11877,7 @@ package android.content.pm { field public static final int FLAG_SINGLE_USER = 1073741824; // 0x40000000 field public String authority; field public int flags; + field public boolean forceUriPermissions; field public boolean grantUriPermissions; field public int initOrder; field @Deprecated public boolean isSyncable; @@ -23747,6 +23746,7 @@ package android.media { ctor public ExifInterface(@NonNull java.io.InputStream) throws java.io.IOException; method public double getAltitude(double); method @Nullable public String getAttribute(@NonNull String); + method @Nullable public byte[] getAttributeBytes(@NonNull String); method public double getAttributeDouble(@NonNull String, double); method public int getAttributeInt(@NonNull String, int); method @Nullable public long[] getAttributeRange(@NonNull String); @@ -23902,6 +23902,7 @@ package android.media { field public static final String TAG_USER_COMMENT = "UserComment"; field public static final String TAG_WHITE_BALANCE = "WhiteBalance"; field public static final String TAG_WHITE_POINT = "WhitePoint"; + field public static final String TAG_XMP = "Xmp"; field public static final String TAG_X_RESOLUTION = "XResolution"; field public static final String TAG_Y_CB_CR_COEFFICIENTS = "YCbCrCoefficients"; field public static final String TAG_Y_CB_CR_POSITIONING = "YCbCrPositioning"; @@ -25009,8 +25010,10 @@ package android.media { field public static final String KEY_LANGUAGE = "language"; field public static final String KEY_LATENCY = "latency"; field public static final String KEY_LEVEL = "level"; + field public static final String KEY_MAX_FPS_TO_ENCODER = "max-fps-to-encoder"; field public static final String KEY_MAX_HEIGHT = "max-height"; field public static final String KEY_MAX_INPUT_SIZE = "max-input-size"; + field public static final String KEY_MAX_PTS_GAP_TO_ENCODER = "max-pts-gap-to-encoder"; field public static final String KEY_MAX_WIDTH = "max-width"; field public static final String KEY_MIME = "mime"; field public static final String KEY_OPERATING_RATE = "operating-rate"; @@ -28606,7 +28609,7 @@ package android.net { field public static final String EXTRA_NETWORK = "android.net.extra.NETWORK"; field @Deprecated public static final String EXTRA_NETWORK_INFO = "networkInfo"; field public static final String EXTRA_NETWORK_REQUEST = "android.net.extra.NETWORK_REQUEST"; - field public static final String EXTRA_NETWORK_TYPE = "networkType"; + field @Deprecated public static final String EXTRA_NETWORK_TYPE = "networkType"; field public static final String EXTRA_NO_CONNECTIVITY = "noConnectivity"; field @Deprecated public static final String EXTRA_OTHER_NETWORK_INFO = "otherNetwork"; field public static final String EXTRA_REASON = "reason"; @@ -34200,7 +34203,6 @@ package android.os { } public static class Build.Partition { - ctor public Build.Partition(); method public long getBuildTimeMillis(); method @NonNull public String getFingerprint(); method @NonNull public String getName(); @@ -41358,6 +41360,11 @@ package android.service.carrier { field public static final android.os.Parcelable.Creator<android.service.carrier.CarrierIdentifier> CREATOR; } + public class CarrierMessagingClientService extends android.app.Service { + ctor public CarrierMessagingClientService(); + method public final android.os.IBinder onBind(android.content.Intent); + } + public abstract class CarrierMessagingService extends android.app.Service { ctor public CarrierMessagingService(); method @Nullable public android.os.IBinder onBind(@NonNull android.content.Intent); @@ -41699,6 +41706,7 @@ package android.service.notification { public static class NotificationListenerService.Ranking { ctor public NotificationListenerService.Ranking(); + method public boolean canBubble(); method public boolean canShowBadge(); method public android.app.NotificationChannel getChannel(); method public int getImportance(); @@ -42452,6 +42460,7 @@ package android.system { method public static java.io.FileDescriptor accept(java.io.FileDescriptor, java.net.InetSocketAddress) throws android.system.ErrnoException, java.net.SocketException; method public static boolean access(String, int) throws android.system.ErrnoException; method public static void bind(java.io.FileDescriptor, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException; + method public static void bind(java.io.FileDescriptor, java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException; method public static void chmod(String, int) throws android.system.ErrnoException; method public static void chown(String, int, int) throws android.system.ErrnoException; method public static void close(java.io.FileDescriptor) throws android.system.ErrnoException; @@ -42520,6 +42529,7 @@ package android.system { method public static long sendfile(java.io.FileDescriptor, java.io.FileDescriptor, android.system.Int64Ref, long) throws android.system.ErrnoException; method public static int sendto(java.io.FileDescriptor, java.nio.ByteBuffer, int, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException; method public static int sendto(java.io.FileDescriptor, byte[], int, int, int, java.net.InetAddress, int) throws android.system.ErrnoException, java.net.SocketException; + method public static int sendto(java.io.FileDescriptor, byte[], int, int, int, java.net.SocketAddress) throws android.system.ErrnoException, java.net.SocketException; method @Deprecated public static void setegid(int) throws android.system.ErrnoException; method public static void setenv(String, String, boolean) throws android.system.ErrnoException; method @Deprecated public static void seteuid(int) throws android.system.ErrnoException; @@ -45161,13 +45171,13 @@ package android.telephony { method @Deprecated public void setVoicemailVibrationEnabled(android.telecom.PhoneAccountHandle, boolean); method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void switchMultiSimConfig(int); method public boolean updateAvailableNetworks(java.util.List<android.telephony.AvailableNetworkInfo>); + field public static final String ACTION_CARRIER_MESSAGING_CLIENT_SERVICE = "android.telephony.action.CARRIER_MESSAGING_CLIENT_SERVICE"; field public static final String ACTION_CONFIGURE_VOICEMAIL = "android.telephony.action.CONFIGURE_VOICEMAIL"; field public static final String ACTION_NETWORK_COUNTRY_CHANGED = "android.telephony.action.NETWORK_COUNTRY_CHANGED"; field @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) public static final String ACTION_PHONE_STATE_CHANGED = "android.intent.action.PHONE_STATE"; field public static final String ACTION_RESPOND_VIA_MESSAGE = "android.intent.action.RESPOND_VIA_MESSAGE"; field public static final String ACTION_SECRET_CODE = "android.telephony.action.SECRET_CODE"; field public static final String ACTION_SHOW_VOICEMAIL_NOTIFICATION = "android.telephony.action.SHOW_VOICEMAIL_NOTIFICATION"; - field public static final String ACTION_SMS_APP_SERVICE = "android.telephony.action.SMS_APP_SERVICE"; field public static final String ACTION_SUBSCRIPTION_CARRIER_IDENTITY_CHANGED = "android.telephony.action.SUBSCRIPTION_CARRIER_IDENTITY_CHANGED"; field public static final String ACTION_SUBSCRIPTION_PRECISE_CARRIER_IDENTITY_CHANGED = "android.telephony.action.SUBSCRIPTION_PRECISE_CARRIER_IDENTITY_CHANGED"; field public static final int APPTYPE_CSIM = 4; // 0x4 @@ -56363,7 +56373,11 @@ package android.widget { method @Nullable public android.graphics.PorterDuff.Mode getIndeterminateTintMode(); method public android.view.animation.Interpolator getInterpolator(); method @android.view.ViewDebug.ExportedProperty(category="progress") public int getMax(); + method @Px public int getMaxHeight(); + method @Px public int getMaxWidth(); method @android.view.ViewDebug.ExportedProperty(category="progress") public int getMin(); + method @Px public int getMinHeight(); + method @Px public int getMinWidth(); method @android.view.ViewDebug.ExportedProperty(category="progress") public int getProgress(); method @Nullable public android.content.res.ColorStateList getProgressBackgroundTintList(); method @Nullable public android.graphics.PorterDuff.Mode getProgressBackgroundTintMode(); @@ -56387,7 +56401,11 @@ package android.widget { method public void setInterpolator(android.content.Context, @InterpolatorRes int); method public void setInterpolator(android.view.animation.Interpolator); method public void setMax(int); + method public void setMaxHeight(@Px int); + method public void setMaxWidth(@Px int); method public void setMin(int); + method public void setMinHeight(@Px int); + method public void setMinWidth(@Px int); method public void setProgress(int); method public void setProgress(int, boolean); method public void setProgressBackgroundTintList(@Nullable android.content.res.ColorStateList); @@ -56651,6 +56669,7 @@ package android.widget { method public boolean isFillViewport(); method public boolean isSmoothScrollingEnabled(); method public boolean pageScroll(int); + method public void scrollToDescendant(android.view.View); method public void setFillViewport(boolean); method public void setSmoothScrollingEnabled(boolean); method public final void smoothScrollBy(int, int); diff --git a/api/system-current.txt b/api/system-current.txt index 139b198b31b2..8d7ec261e52e 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -711,6 +711,7 @@ package android.app.backup { method @Deprecated public int requestRestore(android.app.backup.RestoreObserver, android.app.backup.BackupManagerMonitor); method @Deprecated @RequiresPermission(android.Manifest.permission.BACKUP) public String selectBackupTransport(String); method @RequiresPermission(android.Manifest.permission.BACKUP) public void selectBackupTransport(android.content.ComponentName, android.app.backup.SelectBackupTransportCallback); + method @RequiresPermission(android.Manifest.permission.BACKUP) public void setAncestralSerialNumber(long); method @RequiresPermission(android.Manifest.permission.BACKUP) public void setAutoRestore(boolean); method @RequiresPermission(android.Manifest.permission.BACKUP) public void setBackupEnabled(boolean); method @RequiresPermission(android.Manifest.permission.BACKUP) public void updateTransportAttributes(android.content.ComponentName, String, @Nullable android.content.Intent, String, @Nullable android.content.Intent, @Nullable String); @@ -3912,6 +3913,7 @@ package android.net { public class ConnectivityManager { method @RequiresPermission(android.Manifest.permission.PACKET_KEEPALIVE_OFFLOAD) public android.net.SocketKeepalive createNattKeepalive(@NonNull android.net.Network, @NonNull java.io.FileDescriptor, @NonNull java.net.InetAddress, @NonNull java.net.InetAddress, @NonNull java.util.concurrent.Executor, @NonNull android.net.SocketKeepalive.Callback); + method @RequiresPermission(android.Manifest.permission.PACKET_KEEPALIVE_OFFLOAD) public android.net.SocketKeepalive createSocketKeepalive(@NonNull android.net.Network, @NonNull java.net.Socket, @NonNull java.util.concurrent.Executor, @NonNull android.net.SocketKeepalive.Callback); method public boolean getAvoidBadWifi(); method @RequiresPermission(android.Manifest.permission.LOCAL_MAC_ADDRESS) public String getCaptivePortalServerUrl(); method @RequiresPermission(android.Manifest.permission.TETHER_PRIVILEGED) public void getLatestTetheringEntitlementValue(int, boolean, @NonNull android.net.ConnectivityManager.TetheringEntitlementValueListener, @Nullable android.os.Handler); @@ -5749,6 +5751,10 @@ package android.provider { field public static final String NAMESPACE = "intelligence_attention"; } + public static interface DeviceConfig.MediaNative { + field public static final String NAMESPACE = "media_native"; + } + public static interface DeviceConfig.NotificationAssistant { field public static final String GENERATE_ACTIONS = "generate_actions"; field public static final String GENERATE_REPLIES = "generate_replies"; diff --git a/api/test-current.txt b/api/test-current.txt index 49c4e6853212..f71789d7d552 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -1851,6 +1851,7 @@ package android.provider { field @Deprecated public static final String ENABLED_NOTIFICATION_POLICY_ACCESS_PACKAGES = "enabled_notification_policy_access_packages"; field public static final String LOCATION_ACCESS_CHECK_DELAY_MILLIS = "location_access_check_delay_millis"; field public static final String LOCATION_ACCESS_CHECK_INTERVAL_MILLIS = "location_access_check_interval_millis"; + field public static final String NOTIFICATION_BUBBLES = "notification_bubbles"; field @RequiresPermission(android.Manifest.permission.WRITE_SECURE_SETTINGS) public static final String SYNC_PARENT_SOUNDS = "sync_parent_sounds"; field public static final String USER_SETUP_COMPLETE = "user_setup_complete"; field public static final String VOICE_INTERACTION_SERVICE = "voice_interaction_service"; diff --git a/cmds/idmap2/Android.bp b/cmds/idmap2/Android.bp index 803f83c0bc6f..056add5c71b5 100644 --- a/cmds/idmap2/Android.bp +++ b/cmds/idmap2/Android.bp @@ -16,11 +16,11 @@ cc_defaults { name: "idmap2_defaults", tidy: true, tidy_checks: [ + "modernize-*", + "-modernize-avoid-c-arrays", "android-*", "misc-*", - "modernize-*", "readability-*", - "-modernize-avoid-c-arrays", ], tidy_flags: [ "-system-headers", diff --git a/cmds/idmap2/libidmap2/Idmap.cpp b/cmds/idmap2/libidmap2/Idmap.cpp index 5d449e96663e..fa5ac8ea11dc 100644 --- a/cmds/idmap2/libidmap2/Idmap.cpp +++ b/cmds/idmap2/libidmap2/Idmap.cpp @@ -281,10 +281,10 @@ bool CheckOverlayable(const LoadedPackage& target_package, if (overlayable_info == nullptr) { // If the resource does not have an overlayable definition, allow the resource to be overlaid. // Once overlayable enforcement is turned on, this check will return false. - return true; + return !target_package.DefinesOverlayable(); } - if (!overlay_info.target_name.empty() && overlay_info.target_name != overlayable_info->name) { + if (overlay_info.target_name != overlayable_info->name) { // If the overlay supplies a target overlayable name, the resource must belong to the // overlayable defined with the specified name to be overlaid. return false; diff --git a/cmds/idmap2/tests/FileUtilsTests.cpp b/cmds/idmap2/tests/FileUtilsTests.cpp index 45f84fe341cc..8514e12e8c17 100644 --- a/cmds/idmap2/tests/FileUtilsTests.cpp +++ b/cmds/idmap2/tests/FileUtilsTests.cpp @@ -40,9 +40,14 @@ TEST(FileUtilsTests, FindFilesFindEverythingNonRecursive) { const std::string& path ATTRIBUTE_UNUSED) -> bool { return true; }); ASSERT_THAT(v, NotNull()); ASSERT_EQ(v->size(), 6U); - ASSERT_EQ(std::set<std::string>(v->begin(), v->end()), - std::set<std::string>({root + "/.", root + "/..", root + "/overlay", root + "/target", - root + "/system-overlay", root + "/system-overlay-invalid"})); + ASSERT_EQ(std::set<std::string>(v->begin(), v->end()), std::set<std::string>({ + root + "/.", + root + "/..", + root + "/overlay", + root + "/target", + root + "/system-overlay", + root + "/system-overlay-invalid", + })); } TEST(FileUtilsTests, FindFilesFindApkFilesRecursive) { @@ -51,13 +56,15 @@ TEST(FileUtilsTests, FindFilesFindApkFilesRecursive) { return type == DT_REG && path.size() > 4 && path.compare(path.size() - 4, 4, ".apk") == 0; }); ASSERT_THAT(v, NotNull()); - ASSERT_EQ(v->size(), 6U); - ASSERT_EQ(std::set<std::string>(v->begin(), v->end()), - std::set<std::string>({root + "/target/target.apk", root + "/overlay/overlay.apk", - root + "/overlay/overlay-static-1.apk", - root + "/overlay/overlay-static-2.apk", - root + "/system-overlay/system-overlay.apk", - root + "/system-overlay-invalid/system-overlay-invalid.apk"})); + ASSERT_EQ(v->size(), 9U); + ASSERT_EQ( + std::set<std::string>(v->begin(), v->end()), + std::set<std::string>( + {root + "/target/target.apk", root + "/target/target-no-overlayable.apk", + root + "/overlay/overlay.apk", root + "/overlay/overlay-no-name.apk", + root + "/overlay/overlay-no-name-static.apk", root + "/overlay/overlay-static-1.apk", + root + "/overlay/overlay-static-2.apk", root + "/system-overlay/system-overlay.apk", + root + "/system-overlay-invalid/system-overlay-invalid.apk"})); } TEST(FileUtilsTests, ReadFile) { diff --git a/cmds/idmap2/tests/Idmap2BinaryTests.cpp b/cmds/idmap2/tests/Idmap2BinaryTests.cpp index c550eafe5ffe..1216f9ec736a 100644 --- a/cmds/idmap2/tests/Idmap2BinaryTests.cpp +++ b/cmds/idmap2/tests/Idmap2BinaryTests.cpp @@ -163,8 +163,12 @@ TEST_F(Idmap2BinaryTests, Dump) { TEST_F(Idmap2BinaryTests, Scan) { SKIP_TEST_IF_CANT_EXEC_IDMAP2; + const std::string overlay_static_no_name_apk_path = + GetTestDataPath() + "/overlay/overlay-no-name-static.apk"; const std::string overlay_static_1_apk_path = GetTestDataPath() + "/overlay/overlay-static-1.apk"; const std::string overlay_static_2_apk_path = GetTestDataPath() + "/overlay/overlay-static-2.apk"; + const std::string idmap_static_no_name_path = + Idmap::CanonicalIdmapPathFor(GetTempDirPath(), overlay_static_no_name_apk_path); const std::string idmap_static_1_path = Idmap::CanonicalIdmapPathFor(GetTempDirPath(), overlay_static_1_apk_path); const std::string idmap_static_2_path = @@ -184,11 +188,18 @@ TEST_F(Idmap2BinaryTests, Scan) { ASSERT_THAT(result, NotNull()); ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr; std::stringstream expected; + expected << idmap_static_no_name_path << std::endl; expected << idmap_static_1_path << std::endl; expected << idmap_static_2_path << std::endl; ASSERT_EQ(result->stdout, expected.str()); std::stringstream error; + auto idmap_static_no_name_raw_string = utils::ReadFile(idmap_static_no_name_path); + auto idmap_static_no_name_raw_stream = std::istringstream(*idmap_static_no_name_raw_string); + auto idmap_static_no_name = Idmap::FromBinaryStream(idmap_static_no_name_raw_stream, error); + ASSERT_THAT(idmap_static_no_name, NotNull()); + ASSERT_IDMAP(*idmap_static_no_name, GetTargetApkPath(), overlay_static_no_name_apk_path); + auto idmap_static_1_raw_string = utils::ReadFile(idmap_static_1_path); auto idmap_static_1_raw_stream = std::istringstream(*idmap_static_1_raw_string); auto idmap_static_1 = Idmap::FromBinaryStream(idmap_static_1_raw_stream, error); @@ -201,6 +212,7 @@ TEST_F(Idmap2BinaryTests, Scan) { ASSERT_THAT(idmap_static_2, NotNull()); ASSERT_IDMAP(*idmap_static_2, GetTargetApkPath(), overlay_static_2_apk_path); + unlink(idmap_static_no_name_path.c_str()); unlink(idmap_static_2_path.c_str()); unlink(idmap_static_1_path.c_str()); @@ -218,6 +230,7 @@ TEST_F(Idmap2BinaryTests, Scan) { ASSERT_THAT(result, NotNull()); ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr; ASSERT_EQ(result->stdout, expected.str()); + unlink(idmap_static_no_name_path.c_str()); unlink(idmap_static_2_path.c_str()); unlink(idmap_static_1_path.c_str()); @@ -236,6 +249,7 @@ TEST_F(Idmap2BinaryTests, Scan) { ASSERT_THAT(result, NotNull()); ASSERT_EQ(result->status, EXIT_SUCCESS) << result->stderr; ASSERT_EQ(result->stdout, expected.str()); + unlink(idmap_static_no_name_path.c_str()); unlink(idmap_static_2_path.c_str()); unlink(idmap_static_1_path.c_str()); diff --git a/cmds/idmap2/tests/IdmapTests.cpp b/cmds/idmap2/tests/IdmapTests.cpp index df28918ac9b4..9e27ccd7cfbb 100644 --- a/cmds/idmap2/tests/IdmapTests.cpp +++ b/cmds/idmap2/tests/IdmapTests.cpp @@ -224,7 +224,8 @@ TEST(IdmapTests, CreateIdmapFromApkAssets) { ASSERT_EQ(types[1]->GetEntry(3), 0x0002U); } -TEST(IdmapTests, CreateIdmapFromApkAssetsPolicySystemPublic) { +// Overlays should abide by all overlayable restrictions if enforcement of overlayable is enabled. +TEST(IdmapOverlayableTests, CreateIdmapFromApkAssetsPolicySystemPublic) { const std::string target_apk_path(GetTestDataPath() + "/target/target.apk"); std::unique_ptr<const ApkAssets> target_apk = ApkAssets::Load(target_apk_path); ASSERT_THAT(target_apk, NotNull()); @@ -260,7 +261,8 @@ TEST(IdmapTests, CreateIdmapFromApkAssetsPolicySystemPublic) { ASSERT_EQ(types[0]->GetEntry(2), 0x0002U); // string/policy_system_vendor } -TEST(IdmapTests, CreateIdmapFromApkAssetsPolicySystemPublicInvalid) { +// Overlays should abide by all overlayable restrictions if enforcement of overlayable is enabled. +TEST(IdmapOverlayableTests, CreateIdmapFromApkAssetsPolicySystemPublicInvalid) { const std::string target_apk_path(GetTestDataPath() + "/target/target.apk"); std::unique_ptr<const ApkAssets> target_apk = ApkAssets::Load(target_apk_path); ASSERT_THAT(target_apk, NotNull()); @@ -290,17 +292,15 @@ TEST(IdmapTests, CreateIdmapFromApkAssetsPolicySystemPublicInvalid) { ASSERT_EQ(types[0]->GetTargetTypeId(), 0x02U); ASSERT_EQ(types[0]->GetOverlayTypeId(), 0x01U); - ASSERT_EQ(types[0]->GetEntryCount(), 6U); - ASSERT_EQ(types[0]->GetEntryOffset(), 3U); - ASSERT_EQ(types[0]->GetEntry(0), 0x0000U); // string/not_overlayable - ASSERT_EQ(types[0]->GetEntry(1), kNoEntry); // string/other - ASSERT_EQ(types[0]->GetEntry(2), kNoEntry); // string/policy_product - ASSERT_EQ(types[0]->GetEntry(3), 0x0003U); // string/policy_public - ASSERT_EQ(types[0]->GetEntry(4), 0x0004U); // string/policy_system - ASSERT_EQ(types[0]->GetEntry(5), 0x0005U); // string/policy_system_vendor + ASSERT_EQ(types[0]->GetEntryCount(), 3U); + ASSERT_EQ(types[0]->GetEntryOffset(), 6U); + ASSERT_EQ(types[0]->GetEntry(0), 0x0003U); // string/policy_public + ASSERT_EQ(types[0]->GetEntry(1), 0x0004U); // string/policy_system + ASSERT_EQ(types[0]->GetEntry(2), 0x0005U); // string/policy_system_vendor } -TEST(IdmapTests, CreateIdmapFromApkAssetsPolicySystemPublicInvalidIgnoreOverlayable) { +// Overlays should ignore all overlayable restrictions if enforcement of overlayable is disabled. +TEST(IdmapOverlayableTests, CreateIdmapFromApkAssetsPolicySystemPublicInvalidIgnoreOverlayable) { const std::string target_apk_path(GetTestDataPath() + "/target/target.apk"); std::unique_ptr<const ApkAssets> target_apk = ApkAssets::Load(target_apk_path); ASSERT_THAT(target_apk, NotNull()); @@ -340,6 +340,91 @@ TEST(IdmapTests, CreateIdmapFromApkAssetsPolicySystemPublicInvalidIgnoreOverlaya ASSERT_EQ(types[0]->GetEntry(5), 0x0005U); // string/policy_system_vendor } +// The resources of APKs that do not include an overlayable declaration should not restrict what +// resources can be overlaid. +TEST(IdmapOverlayableTests, CreateIdmapFromApkAssetsNoDefinedOverlayable) { + const std::string target_apk_path(GetTestDataPath() + "/target/target-no-overlayable.apk"); + std::unique_ptr<const ApkAssets> target_apk = ApkAssets::Load(target_apk_path); + ASSERT_THAT(target_apk, NotNull()); + + const std::string overlay_apk_path(GetTestDataPath() + + "/system-overlay-invalid/system-overlay-invalid.apk"); + std::unique_ptr<const ApkAssets> overlay_apk = ApkAssets::Load(overlay_apk_path); + ASSERT_THAT(overlay_apk, NotNull()); + + std::stringstream error; + std::unique_ptr<const Idmap> idmap = + Idmap::FromApkAssets(target_apk_path, *target_apk, overlay_apk_path, *overlay_apk, + PolicyFlags::POLICY_PUBLIC, /* enforce_overlayable */ true, error); + ASSERT_THAT(idmap, NotNull()); + + const std::vector<std::unique_ptr<const IdmapData>>& dataBlocks = idmap->GetData(); + ASSERT_EQ(dataBlocks.size(), 1U); + + const std::unique_ptr<const IdmapData>& data = dataBlocks[0]; + + ASSERT_EQ(data->GetHeader()->GetTargetPackageId(), 0x7fU); + ASSERT_EQ(data->GetHeader()->GetTypeCount(), 1U); + + const std::vector<std::unique_ptr<const IdmapData::TypeEntry>>& types = data->GetTypeEntries(); + ASSERT_EQ(types.size(), 1U); + + ASSERT_EQ(types[0]->GetTargetTypeId(), 0x02U); + ASSERT_EQ(types[0]->GetOverlayTypeId(), 0x01U); + ASSERT_EQ(types[0]->GetEntryCount(), 6U); + ASSERT_EQ(types[0]->GetEntryOffset(), 3U); + ASSERT_EQ(types[0]->GetEntry(0), 0x0000U); // string/not_overlayable + ASSERT_EQ(types[0]->GetEntry(1), 0x0001U); // string/other + ASSERT_EQ(types[0]->GetEntry(2), 0x0002U); // string/policy_product + ASSERT_EQ(types[0]->GetEntry(3), 0x0003U); // string/policy_public + ASSERT_EQ(types[0]->GetEntry(4), 0x0004U); // string/policy_system + ASSERT_EQ(types[0]->GetEntry(5), 0x0005U); // string/policy_system_vendor +} + +// The resources of APKs that do not include an overlayable declaration should not restrict what +// resources can be overlaid. +TEST(IdmapOverlayableTests, CreateIdmapFromApkAssetsNoDefinedOverlayableAndNoTargetName) { + const std::string target_apk_path(GetTestDataPath() + "/target/target-no-overlayable.apk"); + std::unique_ptr<const ApkAssets> target_apk = ApkAssets::Load(target_apk_path); + ASSERT_THAT(target_apk, NotNull()); + + const std::string overlay_apk_path(GetTestDataPath() + "/overlay/overlay-no-name.apk"); + std::unique_ptr<const ApkAssets> overlay_apk = ApkAssets::Load(overlay_apk_path); + ASSERT_THAT(overlay_apk, NotNull()); + + std::stringstream error; + std::unique_ptr<const Idmap> idmap = + Idmap::FromApkAssets(target_apk_path, *target_apk, overlay_apk_path, *overlay_apk, + PolicyFlags::POLICY_PUBLIC, /* enforce_overlayable */ true, error); + ASSERT_THAT(idmap, NotNull()); + + const std::vector<std::unique_ptr<const IdmapData>>& dataBlocks = idmap->GetData(); + ASSERT_EQ(dataBlocks.size(), 1U); + + const std::unique_ptr<const IdmapData>& data = dataBlocks[0]; + + ASSERT_EQ(data->GetHeader()->GetTargetPackageId(), 0x7fU); + ASSERT_EQ(data->GetHeader()->GetTypeCount(), 2U); + + const std::vector<std::unique_ptr<const IdmapData::TypeEntry>>& types = data->GetTypeEntries(); + ASSERT_EQ(types.size(), 2U); + + ASSERT_EQ(types[0]->GetTargetTypeId(), 0x01U); + ASSERT_EQ(types[0]->GetOverlayTypeId(), 0x01U); + ASSERT_EQ(types[0]->GetEntryCount(), 1U); + ASSERT_EQ(types[0]->GetEntryOffset(), 0U); + ASSERT_EQ(types[0]->GetEntry(0), 0x0000U); + + ASSERT_EQ(types[1]->GetTargetTypeId(), 0x02U); + ASSERT_EQ(types[1]->GetOverlayTypeId(), 0x02U); + ASSERT_EQ(types[1]->GetEntryCount(), 4U); + ASSERT_EQ(types[1]->GetEntryOffset(), 9U); + ASSERT_EQ(types[1]->GetEntry(0), 0x0000U); + ASSERT_EQ(types[1]->GetEntry(1), kNoEntry); + ASSERT_EQ(types[1]->GetEntry(2), 0x0001U); + ASSERT_EQ(types[1]->GetEntry(3), 0x0002U); +} + TEST(IdmapTests, FailToCreateIdmapFromApkAssetsIfPathTooLong) { std::string target_apk_path(GetTestDataPath()); for (int i = 0; i < 32; i++) { diff --git a/cmds/idmap2/tests/data/overlay/AndroidManifest.xml b/cmds/idmap2/tests/data/overlay/AndroidManifest.xml index 9f89d3121a82..a7767a6d35e6 100644 --- a/cmds/idmap2/tests/data/overlay/AndroidManifest.xml +++ b/cmds/idmap2/tests/data/overlay/AndroidManifest.xml @@ -17,5 +17,6 @@ xmlns:android="http://schemas.android.com/apk/res/android" package="test.overlay"> <overlay - android:targetPackage="test.target" /> + android:targetPackage="test.target" + android:targetName="TestResources"/> </manifest> diff --git a/cmds/idmap2/tests/data/overlay/AndroidManifestNoName.xml b/cmds/idmap2/tests/data/overlay/AndroidManifestNoName.xml new file mode 100644 index 000000000000..bc6b733e849f --- /dev/null +++ b/cmds/idmap2/tests/data/overlay/AndroidManifestNoName.xml @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2019 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. +--> +<manifest + xmlns:android="http://schemas.android.com/apk/res/android" + package="test.overlay.no.name"> + <overlay + android:targetPackage="test.target"/> +</manifest> diff --git a/cmds/idmap2/tests/data/overlay/AndroidManifestNoNameStatic.xml b/cmds/idmap2/tests/data/overlay/AndroidManifestNoNameStatic.xml new file mode 100644 index 000000000000..ed327ce0e630 --- /dev/null +++ b/cmds/idmap2/tests/data/overlay/AndroidManifestNoNameStatic.xml @@ -0,0 +1,24 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2019 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. +--> +<manifest + xmlns:android="http://schemas.android.com/apk/res/android" + package="test.overlay.no.name.static"> + <overlay + android:targetPackage="test.target" + android:targetName="TestResources" + android:isStatic="true" + android:priority="1" /> +</manifest> diff --git a/cmds/idmap2/tests/data/overlay/AndroidManifestStatic1.xml b/cmds/idmap2/tests/data/overlay/AndroidManifestStatic1.xml index 39336cc7e76b..1c4dae6cf69c 100644 --- a/cmds/idmap2/tests/data/overlay/AndroidManifestStatic1.xml +++ b/cmds/idmap2/tests/data/overlay/AndroidManifestStatic1.xml @@ -18,6 +18,7 @@ package="test.overlay.static1"> <overlay android:targetPackage="test.target" + android:targetName="TestResources" android:isStatic="true" android:priority="1" /> </manifest> diff --git a/cmds/idmap2/tests/data/overlay/AndroidManifestStatic2.xml b/cmds/idmap2/tests/data/overlay/AndroidManifestStatic2.xml index e1cc1758d8cc..70efc8603670 100644 --- a/cmds/idmap2/tests/data/overlay/AndroidManifestStatic2.xml +++ b/cmds/idmap2/tests/data/overlay/AndroidManifestStatic2.xml @@ -18,6 +18,7 @@ package="test.overlay.static2"> <overlay android:targetPackage="test.target" + android:targetName="TestResources" android:isStatic="true" android:priority="2" /> </manifest> diff --git a/cmds/idmap2/tests/data/overlay/build b/cmds/idmap2/tests/data/overlay/build index cba108674005..e60da803388b 100644 --- a/cmds/idmap2/tests/data/overlay/build +++ b/cmds/idmap2/tests/data/overlay/build @@ -26,6 +26,20 @@ aapt2 link \ aapt2 link \ --no-resource-removal \ -I "$FRAMEWORK_RES_APK" \ + --manifest AndroidManifestNoName.xml \ + -o overlay-no-name.apk \ + compiled.flata + +aapt2 link \ + --no-resource-removal \ + -I "$FRAMEWORK_RES_APK" \ + --manifest AndroidManifestNoNameStatic.xml \ + -o overlay-no-name-static.apk \ + compiled.flata + +aapt2 link \ + --no-resource-removal \ + -I "$FRAMEWORK_RES_APK" \ --manifest AndroidManifestStatic1.xml \ -o overlay-static-1.apk \ compiled.flata diff --git a/cmds/idmap2/tests/data/overlay/overlay-no-name-static.apk b/cmds/idmap2/tests/data/overlay/overlay-no-name-static.apk Binary files differnew file mode 100644 index 000000000000..18ee43dc57a4 --- /dev/null +++ b/cmds/idmap2/tests/data/overlay/overlay-no-name-static.apk diff --git a/cmds/idmap2/tests/data/overlay/overlay-no-name.apk b/cmds/idmap2/tests/data/overlay/overlay-no-name.apk Binary files differnew file mode 100644 index 000000000000..7d23c09473ce --- /dev/null +++ b/cmds/idmap2/tests/data/overlay/overlay-no-name.apk diff --git a/cmds/idmap2/tests/data/overlay/overlay-static-1.apk b/cmds/idmap2/tests/data/overlay/overlay-static-1.apk Binary files differindex 9a0f487522c8..642ab90d00ae 100644 --- a/cmds/idmap2/tests/data/overlay/overlay-static-1.apk +++ b/cmds/idmap2/tests/data/overlay/overlay-static-1.apk diff --git a/cmds/idmap2/tests/data/overlay/overlay-static-2.apk b/cmds/idmap2/tests/data/overlay/overlay-static-2.apk Binary files differindex 3fc31c7d11b0..2ec56020c4aa 100644 --- a/cmds/idmap2/tests/data/overlay/overlay-static-2.apk +++ b/cmds/idmap2/tests/data/overlay/overlay-static-2.apk diff --git a/cmds/idmap2/tests/data/overlay/overlay.apk b/cmds/idmap2/tests/data/overlay/overlay.apk Binary files differindex b4cd7cfc3248..5842da4f432e 100644 --- a/cmds/idmap2/tests/data/overlay/overlay.apk +++ b/cmds/idmap2/tests/data/overlay/overlay.apk diff --git a/cmds/idmap2/tests/data/system-overlay/AndroidManifest.xml b/cmds/idmap2/tests/data/system-overlay/AndroidManifest.xml index 8af9064ba64f..5dacebded529 100644 --- a/cmds/idmap2/tests/data/system-overlay/AndroidManifest.xml +++ b/cmds/idmap2/tests/data/system-overlay/AndroidManifest.xml @@ -14,8 +14,9 @@ limitations under the License. --> <manifest - xmlns:android="http://schemas.android.com/apk/res/android" - package="test.overlay.system"> + xmlns:android="http://schemas.android.com/apk/res/android" + package="test.overlay.system"> <overlay - android:targetPackage="test.target" /> + android:targetPackage="test.target" + android:targetName="TestResources"/> </manifest> diff --git a/cmds/idmap2/tests/data/system-overlay/system-overlay.apk b/cmds/idmap2/tests/data/system-overlay/system-overlay.apk Binary files differindex 90f30eb68c15..a0fba4378b57 100644 --- a/cmds/idmap2/tests/data/system-overlay/system-overlay.apk +++ b/cmds/idmap2/tests/data/system-overlay/system-overlay.apk diff --git a/cmds/idmap2/tests/data/target/build b/cmds/idmap2/tests/data/target/build index 8569c4ff0a6b..137ddb5ecaa1 100644 --- a/cmds/idmap2/tests/data/target/build +++ b/cmds/idmap2/tests/data/target/build @@ -15,3 +15,7 @@ aapt2 compile --dir res -o compiled.flata aapt2 link --manifest AndroidManifest.xml -A assets -o target.apk compiled.flata rm compiled.flata + +aapt2 compile res/values/values.xml -o . +aapt2 link --manifest AndroidManifest.xml -A assets -o target_no_overlayable.apk values_values.arsc.flat +rm values_values.arsc.flat
\ No newline at end of file diff --git a/cmds/idmap2/tests/data/target/target-no-overlayable.apk b/cmds/idmap2/tests/data/target/target-no-overlayable.apk Binary files differnew file mode 100644 index 000000000000..8676cbb9dc3f --- /dev/null +++ b/cmds/idmap2/tests/data/target/target-no-overlayable.apk diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index 63f9b5954792..fc3aa91b9e0b 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -238,6 +238,7 @@ message Atom { ProcessStartTime process_start_time = 169; PermissionGrantRequestResultReported permission_grant_request_result_reported = 170; BluetoothSocketConnectionStateChanged bluetooth_socket_connection_state_changed = 171; + DeviceIdentifierAccessDenied device_identifier_access_denied = 172; } // Pulled events will start at field 10000. @@ -5447,3 +5448,22 @@ message DangerousPermissionState { optional bool is_granted = 4; } +/** + * Logs when a package is denied access to a device identifier based on the new access requirements. + * + * Logged from: + * frameworks/base/telephony/java/com/android/internal/telephony/TelephonyPermissions.java + */ +message DeviceIdentifierAccessDenied { + // The name of the package denied access to the requested device identifier. + optional string package_name = 1; + + // The name of the device identifier method the package attempted to invoke. + optional string method_name = 2; + + // True if the package is preinstalled. + optional bool is_preinstalled = 3; + + // True if the package is privileged. + optional bool is_priv_app = 4; +} diff --git a/cmds/statsd/src/external/PullDataReceiver.h b/cmds/statsd/src/external/PullDataReceiver.h index 0d505cb49e8f..b071682f8a59 100644 --- a/cmds/statsd/src/external/PullDataReceiver.h +++ b/cmds/statsd/src/external/PullDataReceiver.h @@ -28,9 +28,15 @@ namespace statsd { class PullDataReceiver : virtual public RefBase{ public: virtual ~PullDataReceiver() {} - virtual void onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& data) = 0; + /** + * @param data The pulled data. + * @param pullSuccess Whether the pull succeeded. If the pull does not succeed, the data for the + * bucket should be invalidated. + */ + virtual void onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& data, + bool pullSuccess) = 0; }; } // namespace statsd } // namespace os -} // namespace android
\ No newline at end of file +} // namespace android diff --git a/cmds/statsd/src/external/StatsPullerManager.cpp b/cmds/statsd/src/external/StatsPullerManager.cpp index c69384c7077f..9b603d6c7957 100644 --- a/cmds/statsd/src/external/StatsPullerManager.cpp +++ b/cmds/statsd/src/external/StatsPullerManager.cpp @@ -358,12 +358,13 @@ void StatsPullerManager::OnAlarmFired(int64_t elapsedTimeNs) { for (const auto& pullInfo : needToPull) { vector<shared_ptr<LogEvent>> data; - if (!Pull(pullInfo.first, &data)) { + bool pullSuccess = Pull(pullInfo.first, &data); + if (pullSuccess) { + StatsdStats::getInstance().notePullDelay( + pullInfo.first, getElapsedRealtimeNs() - elapsedTimeNs); + } else { VLOG("pull failed at %lld, will try again later", (long long)elapsedTimeNs); - continue; } - StatsdStats::getInstance().notePullDelay(pullInfo.first, - getElapsedRealtimeNs() - elapsedTimeNs); // Convention is to mark pull atom timestamp at request time. // If we pull at t0, puller starts at t1, finishes at t2, and send back @@ -380,8 +381,8 @@ void StatsPullerManager::OnAlarmFired(int64_t elapsedTimeNs) { for (const auto& receiverInfo : pullInfo.second) { sp<PullDataReceiver> receiverPtr = receiverInfo->receiver.promote(); if (receiverPtr != nullptr) { - receiverPtr->onDataPulled(data); - // we may have just come out of a coma, compute next pull time + receiverPtr->onDataPulled(data, pullSuccess); + // We may have just come out of a coma, compute next pull time. int numBucketsAhead = (elapsedTimeNs - receiverInfo->nextPullTimeNs) / receiverInfo->intervalNs; receiverInfo->nextPullTimeNs += (numBucketsAhead + 1) * receiverInfo->intervalNs; diff --git a/cmds/statsd/src/guardrail/StatsdStats.cpp b/cmds/statsd/src/guardrail/StatsdStats.cpp index 37ccad5f4a49..a5bd5c6b6364 100644 --- a/cmds/statsd/src/guardrail/StatsdStats.cpp +++ b/cmds/statsd/src/guardrail/StatsdStats.cpp @@ -448,6 +448,11 @@ void StatsdStats::noteConditionChangeInNextBucket(int metricId) { getAtomMetricStats(metricId).conditionChangeInNextBucket++; } +void StatsdStats::noteInvalidatedBucket(int metricId) { + lock_guard<std::mutex> lock(mLock); + getAtomMetricStats(metricId).invalidatedBucket++; +} + StatsdStats::AtomMetricStats& StatsdStats::getAtomMetricStats(int metricId) { auto atomMetricStatsIter = mAtomMetricStats.find(metricId); if (atomMetricStatsIter != mAtomMetricStats.end()) { diff --git a/cmds/statsd/src/guardrail/StatsdStats.h b/cmds/statsd/src/guardrail/StatsdStats.h index 01e9ca17e5fd..cb17061c1ed1 100644 --- a/cmds/statsd/src/guardrail/StatsdStats.h +++ b/cmds/statsd/src/guardrail/StatsdStats.h @@ -365,6 +365,11 @@ public: void noteConditionChangeInNextBucket(int atomId); /** + * A bucket has been tagged as invalid. + */ + void noteInvalidatedBucket(int metricId); + + /** * Reset the historical stats. Including all stats in icebox, and the tracked stats about * metrics, matchers, and atoms. The active configs will be kept and StatsdStats will continue * to collect stats after reset() has been called. @@ -408,6 +413,7 @@ public: long skippedForwardBuckets = 0; long badValueType = 0; long conditionChangeInNextBucket = 0; + long invalidatedBucket = 0; } AtomMetricStats; private: diff --git a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp index c2878f02a691..c9b71659aa58 100644 --- a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp +++ b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp @@ -406,9 +406,10 @@ std::shared_ptr<vector<FieldValue>> GaugeMetricProducer::getGaugeFields(const Lo return gaugeFields; } -void GaugeMetricProducer::onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& allData) { +void GaugeMetricProducer::onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& allData, + bool pullSuccess) { std::lock_guard<std::mutex> lock(mMutex); - if (allData.size() == 0) { + if (!pullSuccess || allData.size() == 0) { return; } for (const auto& data : allData) { diff --git a/cmds/statsd/src/metrics/GaugeMetricProducer.h b/cmds/statsd/src/metrics/GaugeMetricProducer.h index df0877954d70..d480941ed311 100644 --- a/cmds/statsd/src/metrics/GaugeMetricProducer.h +++ b/cmds/statsd/src/metrics/GaugeMetricProducer.h @@ -67,7 +67,8 @@ public: virtual ~GaugeMetricProducer(); // Handles when the pulled data arrives. - void onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& data) override; + void onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& data, + bool pullSuccess) override; // GaugeMetric needs to immediately trigger another pull when we create the partial bucket. void notifyAppUpgrade(const int64_t& eventTimeNs, const string& apk, const int uid, diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.cpp b/cmds/statsd/src/metrics/ValueMetricProducer.cpp index 6aa8e842b021..9fb78e780870 100644 --- a/cmds/statsd/src/metrics/ValueMetricProducer.cpp +++ b/cmds/statsd/src/metrics/ValueMetricProducer.cpp @@ -104,6 +104,7 @@ ValueMetricProducer::ValueMetricProducer( mSkipZeroDiffOutput(metric.skip_zero_diff_output()), mUseZeroDefaultBase(metric.use_zero_default_base()), mHasGlobalBase(false), + mCurrentBucketIsInvalid(false), mMaxPullDelayNs(metric.max_pull_delay_sec() > 0 ? metric.max_pull_delay_sec() * NS_PER_SEC : StatsdStats::kPullMaxDelayNs), mSplitBucketForAppUpgrade(metric.split_bucket_for_app_upgrade()) { @@ -308,6 +309,15 @@ void ValueMetricProducer::onDumpReportLocked(const int64_t dumpTimeNs, } } +void ValueMetricProducer::invalidateCurrentBucket() { + if (!mCurrentBucketIsInvalid) { + // Only report once per invalid bucket. + StatsdStats::getInstance().noteInvalidatedBucket(mMetricId); + } + mCurrentBucketIsInvalid = true; + resetBase(); +} + void ValueMetricProducer::resetBase() { for (auto& slice : mCurrentSlicedBucket) { for (auto& interval : slice.second) { @@ -323,6 +333,7 @@ void ValueMetricProducer::onConditionChangedLocked(const bool condition, VLOG("Skip event due to late arrival: %lld vs %lld", (long long)eventTimeNs, (long long)mCurrentBucketStartTimeNs); StatsdStats::getInstance().noteConditionChangeInNextBucket(mMetricId); + invalidateCurrentBucket(); return; } @@ -346,19 +357,20 @@ void ValueMetricProducer::pullAndMatchEventsLocked(const int64_t timestampNs) { vector<std::shared_ptr<LogEvent>> allData; if (!mPullerManager->Pull(mPullTagId, &allData)) { ALOGE("Gauge Stats puller failed for tag: %d at %lld", mPullTagId, (long long)timestampNs); - resetBase(); + invalidateCurrentBucket(); return; } const int64_t pullDelayNs = getElapsedRealtimeNs() - timestampNs; + StatsdStats::getInstance().notePullDelay(mPullTagId, pullDelayNs); if (pullDelayNs > mMaxPullDelayNs) { ALOGE("Pull finish too late for atom %d, longer than %lld", mPullTagId, (long long)mMaxPullDelayNs); StatsdStats::getInstance().notePullExceedMaxDelay(mPullTagId); - StatsdStats::getInstance().notePullDelay(mPullTagId, pullDelayNs); - resetBase(); + // We are missing one pull from the bucket which means we will not have a complete view of + // what's going on. + invalidateCurrentBucket(); return; } - StatsdStats::getInstance().notePullDelay(mPullTagId, pullDelayNs); if (timestampNs < mCurrentBucketStartTimeNs) { // The data will be skipped in onMatchedLogEventInternalLocked, but we don't want to report @@ -382,9 +394,16 @@ int64_t ValueMetricProducer::calcPreviousBucketEndTime(const int64_t currentTime return mTimeBaseNs + ((currentTimeNs - mTimeBaseNs) / mBucketSizeNs) * mBucketSizeNs; } -void ValueMetricProducer::onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& allData) { +void ValueMetricProducer::onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& allData, + bool pullSuccess) { std::lock_guard<std::mutex> lock(mMutex); if (mCondition) { + if (!pullSuccess) { + // If the pull failed, we won't be able to compute a diff. + invalidateCurrentBucket(); + return; + } + if (allData.size() == 0) { VLOG("Data pulled is empty"); StatsdStats::getInstance().noteEmptyData(mPullTagId); @@ -399,12 +418,13 @@ void ValueMetricProducer::onDataPulled(const std::vector<std::shared_ptr<LogEven // if the diff base will be cleared and this new data will serve as new diff base. int64_t realEventTime = allData.at(0)->GetElapsedTimestampNs(); int64_t bucketEndTime = calcPreviousBucketEndTime(realEventTime) - 1; - if (bucketEndTime < mCurrentBucketStartTimeNs) { + bool isEventLate = bucketEndTime < mCurrentBucketStartTimeNs; + if (isEventLate) { VLOG("Skip bucket end pull due to late arrival: %lld vs %lld", (long long)bucketEndTime, (long long)mCurrentBucketStartTimeNs); StatsdStats::getInstance().noteLateLogEventSkipped(mMetricId); - return; } + for (const auto& data : allData) { LogEvent localCopy = data->makeCopy(); if (mEventMatcherWizard->matchLogEvent(localCopy, mWhatMatcherIndex) == @@ -679,31 +699,13 @@ void ValueMetricProducer::flushCurrentBucketLocked(const int64_t& eventTimeNs) { VLOG("finalizing bucket for %ld, dumping %d slices", (long)mCurrentBucketStartTimeNs, (int)mCurrentSlicedBucket.size()); int64_t fullBucketEndTimeNs = getCurrentBucketEndTimeNs(); - int64_t bucketEndTime = eventTimeNs < fullBucketEndTimeNs ? eventTimeNs : fullBucketEndTimeNs; - if (bucketEndTime - mCurrentBucketStartTimeNs >= mMinBucketSizeNs) { + bool isBucketLargeEnough = bucketEndTime - mCurrentBucketStartTimeNs >= mMinBucketSizeNs; + if (isBucketLargeEnough && !mCurrentBucketIsInvalid) { // The current bucket is large enough to keep. for (const auto& slice : mCurrentSlicedBucket) { - ValueBucket bucket; - bucket.mBucketStartNs = mCurrentBucketStartTimeNs; - bucket.mBucketEndNs = bucketEndTime; - for (const auto& interval : slice.second) { - if (interval.hasValue) { - // skip the output if the diff is zero - if (mSkipZeroDiffOutput && mUseDiff && interval.value.isZero()) { - continue; - } - bucket.valueIndex.push_back(interval.valueIndex); - if (mAggregationType != ValueMetric::AVG) { - bucket.values.push_back(interval.value); - } else { - double sum = interval.value.type == LONG ? (double)interval.value.long_value - : interval.value.double_value; - bucket.values.push_back(Value((double)sum / interval.sampleSize)); - } - } - } + ValueBucket bucket = buildPartialBucket(bucketEndTime, slice.second); // it will auto create new vector of ValuebucketInfo if the key is not found. if (bucket.valueIndex.size() > 0) { auto& bucketList = mPastBuckets[slice.first]; @@ -714,6 +716,58 @@ void ValueMetricProducer::flushCurrentBucketLocked(const int64_t& eventTimeNs) { mSkippedBuckets.emplace_back(mCurrentBucketStartTimeNs, bucketEndTime); } + if (!mCurrentBucketIsInvalid) { + appendToFullBucket(eventTimeNs, fullBucketEndTimeNs); + } + initCurrentSlicedBucket(); + mCurrentBucketIsInvalid = false; +} + +ValueBucket ValueMetricProducer::buildPartialBucket(int64_t bucketEndTime, + const std::vector<Interval>& intervals) { + ValueBucket bucket; + bucket.mBucketStartNs = mCurrentBucketStartTimeNs; + bucket.mBucketEndNs = bucketEndTime; + for (const auto& interval : intervals) { + if (interval.hasValue) { + // skip the output if the diff is zero + if (mSkipZeroDiffOutput && mUseDiff && interval.value.isZero()) { + continue; + } + bucket.valueIndex.push_back(interval.valueIndex); + if (mAggregationType != ValueMetric::AVG) { + bucket.values.push_back(interval.value); + } else { + double sum = interval.value.type == LONG ? (double)interval.value.long_value + : interval.value.double_value; + bucket.values.push_back(Value((double)sum / interval.sampleSize)); + } + } + } + return bucket; +} + +void ValueMetricProducer::initCurrentSlicedBucket() { + for (auto it = mCurrentSlicedBucket.begin(); it != mCurrentSlicedBucket.end();) { + bool obsolete = true; + for (auto& interval : it->second) { + interval.hasValue = false; + interval.sampleSize = 0; + if (interval.seenNewData) { + obsolete = false; + } + interval.seenNewData = false; + } + + if (obsolete) { + it = mCurrentSlicedBucket.erase(it); + } else { + it++; + } + } +} + +void ValueMetricProducer::appendToFullBucket(int64_t eventTimeNs, int64_t fullBucketEndTimeNs) { if (eventTimeNs > fullBucketEndTimeNs) { // If full bucket, send to anomaly tracker. // Accumulate partial buckets with current value and then send to anomaly tracker. if (mCurrentFullBucket.size() > 0) { @@ -751,24 +805,6 @@ void ValueMetricProducer::flushCurrentBucketLocked(const int64_t& eventTimeNs) { mCurrentFullBucket[slice.first] += slice.second[0].value.long_value; } } - - for (auto it = mCurrentSlicedBucket.begin(); it != mCurrentSlicedBucket.end();) { - bool obsolete = true; - for (auto& interval : it->second) { - interval.hasValue = false; - interval.sampleSize = 0; - if (interval.seenNewData) { - obsolete = false; - } - interval.seenNewData = false; - } - - if (obsolete) { - it = mCurrentSlicedBucket.erase(it); - } else { - it++; - } - } } size_t ValueMetricProducer::byteSizeLocked() const { diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.h b/cmds/statsd/src/metrics/ValueMetricProducer.h index a8dfc5ba0e5d..d9bec5d588be 100644 --- a/cmds/statsd/src/metrics/ValueMetricProducer.h +++ b/cmds/statsd/src/metrics/ValueMetricProducer.h @@ -51,7 +51,8 @@ public: virtual ~ValueMetricProducer(); // Process data pulled on bucket boundary. - void onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& data) override; + void onDataPulled(const std::vector<std::shared_ptr<LogEvent>>& data, + bool pullSuccess) override; // ValueMetric needs special logic if it's a pulled atom. void notifyAppUpgrade(const int64_t& eventTimeNs, const string& apk, const int uid, @@ -102,6 +103,9 @@ private: // Calculate previous bucket end time based on current time. int64_t calcPreviousBucketEndTime(const int64_t currentTimeNs); + // Mark the data as invalid. + void invalidateCurrentBucket(); + const int mWhatMatcherIndex; sp<EventMatcherWizard> mEventMatcherWizard; @@ -155,6 +159,11 @@ private: void pullAndMatchEventsLocked(const int64_t timestampNs); + ValueBucket buildPartialBucket(int64_t bucketEndTime, + const std::vector<Interval>& intervals); + void initCurrentSlicedBucket(); + void appendToFullBucket(int64_t eventTimeNs, int64_t fullBucketEndTimeNs); + // Reset diff base and mHasGlobalBase void resetBase(); @@ -186,6 +195,12 @@ private: // diff against. bool mHasGlobalBase; + // Invalid bucket. There was a problem in collecting data in the current bucket so we cannot + // trust any of the data in this bucket. + // + // For instance, one pull failed. + bool mCurrentBucketIsInvalid; + const int64_t mMaxPullDelayNs; const bool mSplitBucketForAppUpgrade; @@ -216,8 +231,13 @@ private: FRIEND_TEST(ValueMetricProducerTest, TestUseZeroDefaultBase); FRIEND_TEST(ValueMetricProducerTest, TestUseZeroDefaultBaseWithPullFailures); FRIEND_TEST(ValueMetricProducerTest, TestTrimUnusedDimensionKey); - FRIEND_TEST(ValueMetricProducerTest, TestResetBaseOnPullFail); + FRIEND_TEST(ValueMetricProducerTest, TestResetBaseOnPullFailBeforeConditionChange); + FRIEND_TEST(ValueMetricProducerTest, TestResetBaseOnPullFailAfterConditionChange); + FRIEND_TEST(ValueMetricProducerTest, TestResetBaseOnPullFailAfterConditionChange_EndOfBucket); FRIEND_TEST(ValueMetricProducerTest, TestResetBaseOnPullTooLate); + FRIEND_TEST(ValueMetricProducerTest, TestInvalidBucketWhenOneConditionFailed); + FRIEND_TEST(ValueMetricProducerTest, TestInvalidBucketWhenInitialPullFailed); + FRIEND_TEST(ValueMetricProducerTest, TestInvalidBucketWhenLastPullFailed); }; } // namespace statsd diff --git a/cmds/statsd/src/stats_log.proto b/cmds/statsd/src/stats_log.proto index cca09ac017a3..5b9148283bdc 100644 --- a/cmds/statsd/src/stats_log.proto +++ b/cmds/statsd/src/stats_log.proto @@ -417,6 +417,7 @@ message StatsdStatsReport { optional int64 skipped_forward_buckets = 4; optional int64 bad_value_type = 5; optional int64 condition_change_in_next_bucket = 6; + optional int64 invalidated_bucket = 7; } repeated AtomMetricStats atom_metric_stats = 17; diff --git a/cmds/statsd/src/stats_log_util.cpp b/cmds/statsd/src/stats_log_util.cpp index 9c9985ed271c..3cb7563b206b 100644 --- a/cmds/statsd/src/stats_log_util.cpp +++ b/cmds/statsd/src/stats_log_util.cpp @@ -78,6 +78,7 @@ const int FIELD_ID_LATE_LOG_EVENT_SKIPPED = 3; const int FIELD_ID_SKIPPED_FORWARD_BUCKETS = 4; const int FIELD_ID_BAD_VALUE_TYPE = 5; const int FIELD_ID_CONDITION_CHANGE_IN_NEXT_BUCKET = 6; +const int FIELD_ID_INVALIDATED_BUCKET = 7; namespace { @@ -494,6 +495,8 @@ void writeAtomMetricStatsToStream(const std::pair<int, StatsdStats::AtomMetricSt (long long)pair.second.badValueType); protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_CONDITION_CHANGE_IN_NEXT_BUCKET, (long long)pair.second.conditionChangeInNextBucket); + protoOutput->write(FIELD_TYPE_INT64 | FIELD_ID_INVALIDATED_BUCKET, + (long long)pair.second.invalidatedBucket); protoOutput->end(token); } diff --git a/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp b/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp index 0ffbb54c8d48..1725160c00c7 100644 --- a/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp +++ b/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp @@ -133,7 +133,7 @@ TEST(GaugeMetricProducerTest, TestPulledEventsNoCondition) { event->init(); allData.push_back(event); - gaugeProducer.onDataPulled(allData); + gaugeProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size()); auto it = gaugeProducer.mCurrentSlicedBucket->begin()->second.front().mFields->begin(); EXPECT_EQ(INT, it->mValue.getType()); @@ -151,7 +151,7 @@ TEST(GaugeMetricProducerTest, TestPulledEventsNoCondition) { event2->write(25); event2->init(); allData.push_back(event2); - gaugeProducer.onDataPulled(allData); + gaugeProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size()); it = gaugeProducer.mCurrentSlicedBucket->begin()->second.front().mFields->begin(); EXPECT_EQ(INT, it->mValue.getType()); @@ -305,7 +305,7 @@ TEST(GaugeMetricProducerTest, TestPulledWithUpgrade) { event->write(1); event->init(); allData.push_back(event); - gaugeProducer.onDataPulled(allData); + gaugeProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size()); EXPECT_EQ(1, gaugeProducer.mCurrentSlicedBucket->begin() ->second.front() @@ -328,7 +328,7 @@ TEST(GaugeMetricProducerTest, TestPulledWithUpgrade) { event->write(3); event->init(); allData.push_back(event); - gaugeProducer.onDataPulled(allData); + gaugeProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(2UL, gaugeProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size()); EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size()); EXPECT_EQ(3, gaugeProducer.mCurrentSlicedBucket->begin() @@ -371,7 +371,7 @@ TEST(GaugeMetricProducerTest, TestPulledWithAppUpgradeDisabled) { event->write(1); event->init(); allData.push_back(event); - gaugeProducer.onDataPulled(allData); + gaugeProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size()); EXPECT_EQ(1, gaugeProducer.mCurrentSlicedBucket->begin() ->second.front() @@ -440,7 +440,7 @@ TEST(GaugeMetricProducerTest, TestPulledEventsWithCondition) { event->write(110); event->init(); allData.push_back(event); - gaugeProducer.onDataPulled(allData); + gaugeProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size()); EXPECT_EQ(110, gaugeProducer.mCurrentSlicedBucket->begin() @@ -541,7 +541,7 @@ TEST(GaugeMetricProducerTest, TestPulledEventsWithSlicedCondition) { event->write(110); event->init(); allData.push_back(event); - gaugeProducer.onDataPulled(allData); + gaugeProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size()); EXPECT_EQ(1UL, gaugeProducer.mPastBuckets.size()); @@ -590,7 +590,7 @@ TEST(GaugeMetricProducerTest, TestPulledEventsAnomalyDetection) { event1->write(13); event1->init(); - gaugeProducer.onDataPulled({event1}); + gaugeProducer.onDataPulled({event1}, /** succeed */ true); EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size()); EXPECT_EQ(13L, gaugeProducer.mCurrentSlicedBucket->begin() ->second.front() @@ -604,7 +604,7 @@ TEST(GaugeMetricProducerTest, TestPulledEventsAnomalyDetection) { event2->write(15); event2->init(); - gaugeProducer.onDataPulled({event2}); + gaugeProducer.onDataPulled({event2}, /** succeed */ true); EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size()); EXPECT_EQ(15L, gaugeProducer.mCurrentSlicedBucket->begin() ->second.front() @@ -619,7 +619,7 @@ TEST(GaugeMetricProducerTest, TestPulledEventsAnomalyDetection) { event3->write(26); event3->init(); - gaugeProducer.onDataPulled({event3}); + gaugeProducer.onDataPulled({event3}, /** succeed */ true); EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size()); EXPECT_EQ(26L, gaugeProducer.mCurrentSlicedBucket->begin() ->second.front() @@ -633,7 +633,7 @@ TEST(GaugeMetricProducerTest, TestPulledEventsAnomalyDetection) { std::make_shared<LogEvent>(tagId, bucketStartTimeNs + 3 * bucketSizeNs + 10); event4->write("some value"); event4->init(); - gaugeProducer.onDataPulled({event4}); + gaugeProducer.onDataPulled({event4}, /** succeed */ true); EXPECT_EQ(1UL, gaugeProducer.mCurrentSlicedBucket->size()); EXPECT_TRUE(gaugeProducer.mCurrentSlicedBucket->begin()->second.front().mFields->empty()); } diff --git a/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp b/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp index c0648ee70032..64045520fb0b 100644 --- a/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp +++ b/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp @@ -160,7 +160,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsNoCondition) { event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; @@ -177,7 +177,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsNoCondition) { event->write(23); event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; @@ -196,7 +196,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsNoCondition) { event->write(36); event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; @@ -256,7 +256,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsWithFiltering) { event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); ValueMetricProducer::Interval curInterval = @@ -274,7 +274,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsWithFiltering) { event->write(23); event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; @@ -292,7 +292,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsWithFiltering) { event->write(36); event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; @@ -341,7 +341,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeAbsoluteValueOnReset) { event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; @@ -357,7 +357,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeAbsoluteValueOnReset) { event->write(10); event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; @@ -373,7 +373,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeAbsoluteValueOnReset) { event->write(36); event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; EXPECT_EQ(true, curInterval.hasBase); @@ -420,7 +420,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeZeroOnReset) { event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; @@ -436,7 +436,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeZeroOnReset) { event->write(10); event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; @@ -451,7 +451,7 @@ TEST(ValueMetricProducerTest, TestPulledEventsTakeZeroOnReset) { event->write(36); event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; EXPECT_EQ(true, curInterval.hasBase); @@ -525,7 +525,7 @@ TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition) { event->write(110); event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); @@ -635,7 +635,7 @@ TEST(ValueMetricProducerTest, TestPulledValueWithUpgrade) { event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); valueProducer.notifyAppUpgrade(bucket2StartTimeNs + 150, "ANY.APP", 1, 1); @@ -650,7 +650,7 @@ TEST(ValueMetricProducerTest, TestPulledValueWithUpgrade) { event->write(150); event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(1UL, valueProducer.mPastBuckets[DEFAULT_METRIC_DIMENSION_KEY].size()); EXPECT_EQ(bucket2StartTimeNs + 150, valueProducer.mCurrentBucketStartTimeNs); EXPECT_EQ(20L, @@ -689,7 +689,7 @@ TEST(ValueMetricProducerTest, TestPulledWithAppUpgradeDisabled) { event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); valueProducer.notifyAppUpgrade(bucket2StartTimeNs + 150, "ANY.APP", 1, 1); @@ -993,7 +993,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryNoCondition) { event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; @@ -1011,7 +1011,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryNoCondition) { event->write(23); event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; @@ -1032,7 +1032,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryNoCondition) { event->write(36); event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; // startUpdated:false sum:12 @@ -1120,7 +1120,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition) { event->write(110); event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; EXPECT_EQ(false, curInterval.hasBase); @@ -1224,7 +1224,7 @@ TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition2) { event->write(110); event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); curInterval = valueProducer.mCurrentSlicedBucket.begin()->second[0]; EXPECT_EQ(true, curInterval.hasBase); @@ -1677,7 +1677,7 @@ TEST(ValueMetricProducerTest, TestUseZeroDefaultBase) { allData.push_back(event1); allData.push_back(event2); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(2UL, valueProducer.mCurrentSlicedBucket.size()); EXPECT_EQ(true, interval1.hasBase); EXPECT_EQ(11, interval1.base.long_value); @@ -1762,7 +1762,7 @@ TEST(ValueMetricProducerTest, TestUseZeroDefaultBaseWithPullFailures) { allData.push_back(event1); allData.push_back(event2); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(2UL, valueProducer.mCurrentSlicedBucket.size()); EXPECT_EQ(true, interval1.hasBase); EXPECT_EQ(11, interval1.base.long_value); @@ -1791,7 +1791,7 @@ TEST(ValueMetricProducerTest, TestUseZeroDefaultBaseWithPullFailures) { event1->write(5); event1->init(); allData.push_back(event1); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(2UL, valueProducer.mCurrentSlicedBucket.size()); EXPECT_EQ(true, interval2.hasBase); @@ -1813,7 +1813,7 @@ TEST(ValueMetricProducerTest, TestUseZeroDefaultBaseWithPullFailures) { event2->write(5); event2->init(); allData.push_back(event2); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(2UL, valueProducer.mCurrentSlicedBucket.size()); EXPECT_EQ(true, interval2.hasBase); @@ -1888,7 +1888,7 @@ TEST(ValueMetricProducerTest, TestTrimUnusedDimensionKey) { allData.push_back(event1); allData.push_back(event2); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(2UL, valueProducer.mCurrentSlicedBucket.size()); EXPECT_EQ(true, interval1.hasBase); EXPECT_EQ(11, interval1.base.long_value); @@ -1918,7 +1918,7 @@ TEST(ValueMetricProducerTest, TestTrimUnusedDimensionKey) { event1->write(5); event1->init(); allData.push_back(event1); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(2UL, valueProducer.mCurrentSlicedBucket.size()); @@ -1941,7 +1941,7 @@ TEST(ValueMetricProducerTest, TestTrimUnusedDimensionKey) { event1->write(13); event1->init(); allData.push_back(event1); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); EXPECT_EQ(true, interval2.hasBase); @@ -1951,7 +1951,60 @@ TEST(ValueMetricProducerTest, TestTrimUnusedDimensionKey) { EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); } -TEST(ValueMetricProducerTest, TestResetBaseOnPullFail) { +TEST(ValueMetricProducerTest, TestResetBaseOnPullFailAfterConditionChange_EndOfBucket) { + ValueMetric metric; + metric.set_id(metricId); + metric.set_bucket(ONE_MINUTE); + metric.mutable_value_field()->set_field(tagId); + metric.mutable_value_field()->add_child()->set_field(2); + metric.set_condition(StringToId("SCREEN_ON")); + metric.set_max_pull_delay_sec(INT_MAX); + + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp<EventMatcherWizard> eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); + sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>(); + sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>(); + EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); + EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return()); + + // Used by onConditionChanged. + EXPECT_CALL(*pullerManager, Pull(tagId, _)) + .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) { + data->clear(); + shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8); + event->write(tagId); + event->write(100); + event->init(); + data->push_back(event); + return true; + })); + + ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex, + eventMatcherWizard, tagId, bucketStartTimeNs, + bucketStartTimeNs, pullerManager); + + valueProducer.onConditionChanged(true, bucketStartTimeNs + 8); + // has one slice + EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); + ValueMetricProducer::Interval& curInterval = + valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(100, curInterval.base.long_value); + EXPECT_EQ(false, curInterval.hasValue); + + vector<shared_ptr<LogEvent>> allData; + valueProducer.onDataPulled(allData, /** succeed */ false); + EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); + EXPECT_EQ(false, curInterval.hasBase); + EXPECT_EQ(false, curInterval.hasValue); + EXPECT_EQ(false, valueProducer.mHasGlobalBase); +} + +TEST(ValueMetricProducerTest, TestResetBaseOnPullFailAfterConditionChange) { ValueMetric metric; metric.set_id(metricId); metric.set_bucket(ONE_MINUTE); @@ -2007,6 +2060,56 @@ TEST(ValueMetricProducerTest, TestResetBaseOnPullFail) { EXPECT_EQ(false, valueProducer.mHasGlobalBase); } +TEST(ValueMetricProducerTest, TestResetBaseOnPullFailBeforeConditionChange) { + ValueMetric metric; + metric.set_id(metricId); + metric.set_bucket(ONE_MINUTE); + metric.mutable_value_field()->set_field(tagId); + metric.mutable_value_field()->add_child()->set_field(2); + metric.set_condition(StringToId("SCREEN_ON")); + metric.set_max_pull_delay_sec(INT_MAX); + + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp<EventMatcherWizard> eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); + sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>(); + sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>(); + EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); + EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return()); + + EXPECT_CALL(*pullerManager, Pull(tagId, _)) + .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) { + data->clear(); + shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8); + event->write(tagId); + event->write(100); + event->init(); + data->push_back(event); + return true; + })); + + ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex, + eventMatcherWizard, tagId, bucketStartTimeNs, + bucketStartTimeNs, pullerManager); + + valueProducer.mCondition = true; + + vector<shared_ptr<LogEvent>> allData; + valueProducer.onDataPulled(allData, /** succeed */ false); + EXPECT_EQ(0UL, valueProducer.mCurrentSlicedBucket.size()); + + valueProducer.onConditionChanged(false, bucketStartTimeNs + 1); + EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); + ValueMetricProducer::Interval& curInterval = + valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(false, curInterval.hasBase); + EXPECT_EQ(false, curInterval.hasValue); + EXPECT_EQ(false, valueProducer.mHasGlobalBase); +} + TEST(ValueMetricProducerTest, TestResetBaseOnPullTooLate) { ValueMetric metric; metric.set_id(metricId); @@ -2052,7 +2155,7 @@ TEST(ValueMetricProducerTest, TestResetBaseOnPullTooLate) { event->write(110); event->init(); allData.push_back(event); - valueProducer.onDataPulled(allData); + valueProducer.onDataPulled(allData, /** succeed */ true); // has one slice EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); @@ -2073,6 +2176,250 @@ TEST(ValueMetricProducerTest, TestResetBaseOnPullTooLate) { EXPECT_EQ(false, valueProducer.mHasGlobalBase); } +TEST(ValueMetricProducerTest, TestInvalidBucketWhenOneConditionFailed) { + ValueMetric metric; + metric.set_id(metricId); + metric.set_bucket(ONE_MINUTE); + metric.mutable_value_field()->set_field(tagId); + metric.mutable_value_field()->add_child()->set_field(2); + metric.set_condition(StringToId("SCREEN_ON")); + metric.set_max_pull_delay_sec(INT_MAX); + + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp<EventMatcherWizard> eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); + sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>(); + sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>(); + EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); + EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return()); + + EXPECT_CALL(*pullerManager, Pull(tagId, _)) + // First onConditionChanged + .WillOnce(Return(false)) + // Second onConditionChanged + .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) { + data->clear(); + shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8); + event->write(tagId); + event->write(130); + event->init(); + data->push_back(event); + return true; + })); + + ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex, + eventMatcherWizard, tagId, bucketStartTimeNs, + bucketStartTimeNs, pullerManager); + + valueProducer.mCondition = true; + + // Bucket start. + vector<shared_ptr<LogEvent>> allData; + allData.clear(); + shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1); + event->write(1); + event->write(110); + event->init(); + allData.push_back(event); + valueProducer.onDataPulled(allData, /** succeed */ true); + + // This will fail and should invalidate the whole bucket since we do not have all the data + // needed to compute the metric value when the screen was on. + valueProducer.onConditionChanged(false, bucketStartTimeNs + 2); + valueProducer.onConditionChanged(true, bucketStartTimeNs + 3); + + // Bucket end. + allData.clear(); + shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1); + event2->write(1); + event2->write(140); + event2->init(); + allData.push_back(event2); + valueProducer.onDataPulled(allData, /** succeed */ true); + + valueProducer.flushIfNeededLocked(bucket2StartTimeNs + 1); + + EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); + // Contains base from last pull which was successful. + EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); + ValueMetricProducer::Interval& curInterval = + valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(140, curInterval.base.long_value); + EXPECT_EQ(false, curInterval.hasValue); + EXPECT_EQ(true, valueProducer.mHasGlobalBase); +} + +TEST(ValueMetricProducerTest, TestInvalidBucketWhenInitialPullFailed) { + ValueMetric metric; + metric.set_id(metricId); + metric.set_bucket(ONE_MINUTE); + metric.mutable_value_field()->set_field(tagId); + metric.mutable_value_field()->add_child()->set_field(2); + metric.set_condition(StringToId("SCREEN_ON")); + metric.set_max_pull_delay_sec(INT_MAX); + + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp<EventMatcherWizard> eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); + sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>(); + sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>(); + EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); + EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return()); + + EXPECT_CALL(*pullerManager, Pull(tagId, _)) + // First onConditionChanged + .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) { + data->clear(); + shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8); + event->write(tagId); + event->write(120); + event->init(); + data->push_back(event); + return true; + })) + // Second onConditionChanged + .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) { + data->clear(); + shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8); + event->write(tagId); + event->write(130); + event->init(); + data->push_back(event); + return true; + })); + + ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex, + eventMatcherWizard, tagId, bucketStartTimeNs, + bucketStartTimeNs, pullerManager); + + valueProducer.mCondition = true; + + // Bucket start. + vector<shared_ptr<LogEvent>> allData; + allData.clear(); + shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1); + event->write(1); + event->write(110); + event->init(); + allData.push_back(event); + valueProducer.onDataPulled(allData, /** succeed */ false); + + valueProducer.onConditionChanged(false, bucketStartTimeNs + 2); + valueProducer.onConditionChanged(true, bucketStartTimeNs + 3); + + // Bucket end. + allData.clear(); + shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1); + event2->write(1); + event2->write(140); + event2->init(); + allData.push_back(event2); + valueProducer.onDataPulled(allData, /** succeed */ true); + + valueProducer.flushIfNeededLocked(bucket2StartTimeNs + 1); + + EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); + // Contains base from last pull which was successful. + EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); + ValueMetricProducer::Interval& curInterval = + valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(true, curInterval.hasBase); + EXPECT_EQ(140, curInterval.base.long_value); + EXPECT_EQ(false, curInterval.hasValue); + EXPECT_EQ(true, valueProducer.mHasGlobalBase); +} + +TEST(ValueMetricProducerTest, TestInvalidBucketWhenLastPullFailed) { + ValueMetric metric; + metric.set_id(metricId); + metric.set_bucket(ONE_MINUTE); + metric.mutable_value_field()->set_field(tagId); + metric.mutable_value_field()->add_child()->set_field(2); + metric.set_condition(StringToId("SCREEN_ON")); + metric.set_max_pull_delay_sec(INT_MAX); + + UidMap uidMap; + SimpleAtomMatcher atomMatcher; + atomMatcher.set_atom_id(tagId); + sp<EventMatcherWizard> eventMatcherWizard = + new EventMatcherWizard({new SimpleLogMatchingTracker( + atomMatcherId, logEventMatcherIndex, atomMatcher, uidMap)}); + sp<MockConditionWizard> wizard = new NaggyMock<MockConditionWizard>(); + sp<MockStatsPullerManager> pullerManager = new StrictMock<MockStatsPullerManager>(); + EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); + EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return()); + + EXPECT_CALL(*pullerManager, Pull(tagId, _)) + // First onConditionChanged + .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) { + data->clear(); + shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8); + event->write(tagId); + event->write(120); + event->init(); + data->push_back(event); + return true; + })) + // Second onConditionChanged + .WillOnce(Invoke([](int tagId, vector<std::shared_ptr<LogEvent>>* data) { + data->clear(); + shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 8); + event->write(tagId); + event->write(130); + event->init(); + data->push_back(event); + return true; + })); + + ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, logEventMatcherIndex, + eventMatcherWizard, tagId, bucketStartTimeNs, + bucketStartTimeNs, pullerManager); + + valueProducer.mCondition = true; + + // Bucket start. + vector<shared_ptr<LogEvent>> allData; + allData.clear(); + shared_ptr<LogEvent> event = make_shared<LogEvent>(tagId, bucketStartTimeNs + 1); + event->write(1); + event->write(110); + event->init(); + allData.push_back(event); + valueProducer.onDataPulled(allData, /** succeed */ true); + + // This will fail and should invalidate the whole bucket since we do not have all the data + // needed to compute the metric value when the screen was on. + valueProducer.onConditionChanged(false, bucketStartTimeNs + 2); + valueProducer.onConditionChanged(true, bucketStartTimeNs + 3); + + // Bucket end. + allData.clear(); + shared_ptr<LogEvent> event2 = make_shared<LogEvent>(tagId, bucket2StartTimeNs + 1); + event2->write(1); + event2->write(140); + event2->init(); + allData.push_back(event2); + valueProducer.onDataPulled(allData, /** succeed */ false); + + valueProducer.flushIfNeededLocked(bucket2StartTimeNs + 1); + + EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); + // Last pull failed so based has been reset. + EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); + ValueMetricProducer::Interval& curInterval = + valueProducer.mCurrentSlicedBucket.begin()->second[0]; + EXPECT_EQ(false, curInterval.hasBase); + EXPECT_EQ(false, curInterval.hasValue); + EXPECT_EQ(false, valueProducer.mHasGlobalBase); +} + } // namespace statsd } // namespace os } // namespace android diff --git a/config/hiddenapi-greylist.txt b/config/hiddenapi-greylist.txt index 11bb38beee87..aad412f15fe2 100644 --- a/config/hiddenapi-greylist.txt +++ b/config/hiddenapi-greylist.txt @@ -328,17 +328,12 @@ Landroid/content/om/IOverlayManager;->getAllOverlays(I)Ljava/util/Map; Landroid/content/om/IOverlayManager;->getOverlayInfo(Ljava/lang/String;I)Landroid/content/om/OverlayInfo; Landroid/content/pm/IPackageDataObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/pm/IPackageDataObserver$Stub$Proxy;->mRemote:Landroid/os/IBinder; -Landroid/content/pm/IPackageDataObserver$Stub$Proxy;->onRemoveCompleted(Ljava/lang/String;Z)V Landroid/content/pm/IPackageDataObserver$Stub;-><init>()V Landroid/content/pm/IPackageDataObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageDataObserver; -Landroid/content/pm/IPackageDataObserver$Stub;->DESCRIPTOR:Ljava/lang/String; -Landroid/content/pm/IPackageDataObserver$Stub;->TRANSACTION_onRemoveCompleted:I Landroid/content/pm/IPackageDataObserver;->onRemoveCompleted(Ljava/lang/String;Z)V Landroid/content/pm/IPackageDeleteObserver$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/pm/IPackageDeleteObserver$Stub;-><init>()V Landroid/content/pm/IPackageDeleteObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageDeleteObserver; -Landroid/content/pm/IPackageDeleteObserver$Stub;->DESCRIPTOR:Ljava/lang/String; -Landroid/content/pm/IPackageDeleteObserver$Stub;->TRANSACTION_packageDeleted:I Landroid/content/pm/IPackageDeleteObserver2$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/pm/IPackageDeleteObserver2$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/pm/IPackageDeleteObserver2$Stub;-><init>()V @@ -437,8 +432,6 @@ Landroid/content/pm/IPackageStatsObserver$Stub$Proxy;-><init>(Landroid/os/IBinde Landroid/content/pm/IPackageStatsObserver$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/content/pm/IPackageStatsObserver$Stub;-><init>()V Landroid/content/pm/IPackageStatsObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageStatsObserver; -Landroid/content/pm/IPackageStatsObserver$Stub;->DESCRIPTOR:Ljava/lang/String; -Landroid/content/pm/IPackageStatsObserver$Stub;->TRANSACTION_onGetStatsCompleted:I Landroid/content/pm/IPackageStatsObserver;->onGetStatsCompleted(Landroid/content/pm/PackageStats;Z)V Landroid/content/pm/IShortcutService$Stub$Proxy;-><init>(Landroid/os/IBinder;)V Landroid/content/pm/IShortcutService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IShortcutService; diff --git a/core/java/android/app/AppOpsManager.java b/core/java/android/app/AppOpsManager.java index ea145f0b9d21..64b94a946489 100644 --- a/core/java/android/app/AppOpsManager.java +++ b/core/java/android/app/AppOpsManager.java @@ -189,9 +189,19 @@ public class AppOpsManager { /** * Special mode that means "allow only when app is in foreground." This is <b>not</b> - * returned from {@link #checkOp}, {@link #noteOp}, {@link #startOp}; rather, when this - * mode is set, these functions will return {@link #MODE_ALLOWED} when the app being - * checked is currently in the foreground, otherwise {@link #MODE_IGNORED}. + * returned from {@link #unsafeCheckOp}, {@link #noteOp}, {@link #startOp}. Rather, + * {@link #unsafeCheckOp} will always return {@link #MODE_ALLOWED} (because it is always + * possible for it to be ultimately allowed, depending on the app's background state), + * and {@link #noteOp} and {@link #startOp} will return {@link #MODE_ALLOWED} when the app + * being checked is currently in the foreground, otherwise {@link #MODE_IGNORED}. + * + * <p>The only place you will this normally see this value is through + * {@link #unsafeCheckOpRaw}, which returns the actual raw mode of the op. Note that because + * you can't know the current state of the app being checked (and it can change at any + * point), you can only treat the result here as an indication that it will vary between + * {@link #MODE_ALLOWED} and {@link #MODE_IGNORED} depending on changes in the background + * state of the app. You thus must always use {@link #noteOp} or {@link #startOp} to do + * the actual check for access to the op.</p> */ public static final int MODE_FOREGROUND = 4; diff --git a/core/java/android/app/NotificationChannel.java b/core/java/android/app/NotificationChannel.java index e95d62fc96eb..cfe27c752581 100644 --- a/core/java/android/app/NotificationChannel.java +++ b/core/java/android/app/NotificationChannel.java @@ -85,7 +85,7 @@ public final class NotificationChannel implements Parcelable { private static final String ATT_FG_SERVICE_SHOWN = "fgservice"; private static final String ATT_GROUP = "group"; private static final String ATT_BLOCKABLE_SYSTEM = "blockable_system"; - private static final String ATT_ALLOW_BUBBLE = "allow_bubble"; + private static final String ATT_ALLOW_BUBBLE = "can_bubble"; private static final String DELIMITER = ","; /** @@ -611,14 +611,6 @@ public final class NotificationChannel implements Parcelable { * shade, in a floating window on top of other apps. */ public boolean canBubble() { - return isBubbleAllowed() && getImportance() >= IMPORTANCE_HIGH; - } - - /** - * Like {@link #canBubble()}, but only checks the permission, not the importance. - * @hide - */ - public boolean isBubbleAllowed() { return mAllowBubbles; } diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index 428c9b01d101..3ff6973a09ff 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -6408,11 +6408,9 @@ public class DevicePolicyManager { * @param admin Which {@link DeviceAdminReceiver} this request is associated with. * @param packageName The name of the package to set as the default SMS application. * @throws SecurityException if {@code admin} is not a device owner. - * - * @hide */ - @UnsupportedAppUsage - public void setDefaultSmsApplication(@NonNull ComponentName admin, String packageName) { + public void setDefaultSmsApplication(@NonNull ComponentName admin, + @NonNull String packageName) { throwIfParentInstance("setDefaultSmsApplication"); if (mService != null) { try { diff --git a/core/java/android/app/backup/BackupManager.java b/core/java/android/app/backup/BackupManager.java index a6f6d06ae71a..868fbfeeee39 100644 --- a/core/java/android/app/backup/BackupManager.java +++ b/core/java/android/app/backup/BackupManager.java @@ -751,6 +751,47 @@ public class BackupManager { } /** + * Returns a {@link UserHandle} for the user that has {@code ancestralSerialNumber} as the + * serial number of the its ancestral work profile or {@code null} if there is none. + * + * <p> The ancestral serial number will have a corresponding {@link UserHandle} if the device + * has a work profile that was restored from another work profile with serial number + * {@code ancestralSerialNumber}. + * + * @see UserManager#getSerialNumberForUser(UserHandle) + */ + @Nullable + public UserHandle getUserForAncestralSerialNumber(long ancestralSerialNumber) { + if (sService != null) { + try { + return sService.getUserForAncestralSerialNumber(ancestralSerialNumber); + } catch (RemoteException e) { + Log.e(TAG, "getUserForAncestralSerialNumber() couldn't connect"); + } + } + return null; + } + + /** + * Sets the ancestral work profile for the calling user. + * + * <p> The ancestral work profile corresponds to the profile that was used to restore to the + * callers profile. + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.BACKUP) + public void setAncestralSerialNumber(long ancestralSerialNumber) { + if (sService != null) { + try { + sService.setAncestralSerialNumber(ancestralSerialNumber); + } catch (RemoteException e) { + Log.e(TAG, "setAncestralSerialNumber() couldn't connect"); + } + } + } + + /** * Returns an {@link Intent} for the specified transport's configuration UI. * This value is set by {@link #updateTransportAttributes(ComponentName, String, Intent, String, * Intent, String)}. diff --git a/core/java/android/app/backup/IBackupManager.aidl b/core/java/android/app/backup/IBackupManager.aidl index eda8981d7e0e..8386c72e3406 100644 --- a/core/java/android/app/backup/IBackupManager.aidl +++ b/core/java/android/app/backup/IBackupManager.aidl @@ -22,6 +22,7 @@ import android.app.backup.IFullBackupRestoreObserver; import android.app.backup.IRestoreSession; import android.app.backup.ISelectBackupTransportCallback; import android.os.ParcelFileDescriptor; +import android.os.UserHandle; import android.content.Intent; import android.content.ComponentName; @@ -685,4 +686,24 @@ interface IBackupManager { * {@link android.app.backup.IBackupManager.cancelBackups} for the calling user id. */ void cancelBackups(); + + /** + * Returns a {@link UserHandle} for the user that has {@code ancestralSerialNumber} as the serial + * number of the it's ancestral work profile. + * + * <p> The ancestral work profile is set by {@link #setAncestralSerialNumber(long)} + * and it corresponds to the profile that was used to restore to the callers profile. + */ + UserHandle getUserForAncestralSerialNumber(in long ancestralSerialNumber); + + /** + * Sets the ancestral work profile for the calling user. + * + * <p> The ancestral work profile corresponds to the profile that was used to restore to the + * callers profile. + * + * <p>Callers must hold the android.permission.BACKUP permission to use this method. + */ + void setAncestralSerialNumber(in long ancestralSerialNumber); + } diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java index 47a4a2dca73d..f1bfe8671eec 100644 --- a/core/java/android/content/ContentResolver.java +++ b/core/java/android/content/ContentResolver.java @@ -2748,6 +2748,19 @@ public abstract class ContentResolver implements ContentInterface { } /** + * @see #setIsSyncable(Account, String, int) + * @hide + */ + public static void setIsSyncableAsUser(Account account, String authority, int syncable, + int userId) { + try { + getContentService().setIsSyncableAsUser(account, authority, syncable, userId); + } catch (RemoteException e) { + throw e.rethrowFromSystemServer(); + } + } + + /** * Gets the master auto-sync setting that applies to all the providers and accounts. * If this is false then the per-provider auto-sync setting is ignored. * <p>This method requires the caller to hold the permission diff --git a/core/java/android/content/IContentService.aidl b/core/java/android/content/IContentService.aidl index 1d0237502812..9f6e236306e0 100644 --- a/core/java/android/content/IContentService.aidl +++ b/core/java/android/content/IContentService.aidl @@ -126,6 +126,7 @@ interface IContentService { * @param syncable, >0 denotes syncable, 0 means not syncable, <0 means unknown */ void setIsSyncable(in Account account, String providerName, int syncable); + void setIsSyncableAsUser(in Account account, String providerName, int syncable, int userId); void setMasterSyncAutomatically(boolean flag); void setMasterSyncAutomaticallyAsUser(boolean flag, int userId); diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 60449145a740..81ed110d15ec 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -5260,6 +5260,10 @@ public class PackageParser { com.android.internal.R.styleable.AndroidManifestProvider_grantUriPermissions, false); + p.info.forceUriPermissions = sa.getBoolean( + com.android.internal.R.styleable.AndroidManifestProvider_forceUriPermissions, + false); + p.info.multiprocess = sa.getBoolean( com.android.internal.R.styleable.AndroidManifestProvider_multiprocess, false); diff --git a/core/java/android/content/pm/ProviderInfo.java b/core/java/android/content/pm/ProviderInfo.java index 379b7833150c..f06a628f1913 100644 --- a/core/java/android/content/pm/ProviderInfo.java +++ b/core/java/android/content/pm/ProviderInfo.java @@ -47,7 +47,13 @@ public final class ProviderInfo extends ComponentInfo * grantUriPermissions} attribute. */ public boolean grantUriPermissions = false; - + + /** If true, always apply URI permission grants, as per the + * {@link android.R.styleable#AndroidManifestProvider_forceUriPermissions + * forceUriPermissions} attribute. + */ + public boolean forceUriPermissions = false; + /** * If non-null, these are the patterns that are allowed for granting URI * permissions. Any URI that does not match one of these patterns will not @@ -112,6 +118,7 @@ public final class ProviderInfo extends ComponentInfo readPermission = orig.readPermission; writePermission = orig.writePermission; grantUriPermissions = orig.grantUriPermissions; + forceUriPermissions = orig.forceUriPermissions; uriPermissionPatterns = orig.uriPermissionPatterns; pathPermissions = orig.pathPermissions; multiprocess = orig.multiprocess; @@ -142,6 +149,7 @@ public final class ProviderInfo extends ComponentInfo out.writeString(readPermission); out.writeString(writePermission); out.writeInt(grantUriPermissions ? 1 : 0); + out.writeInt(forceUriPermissions ? 1 : 0); out.writeTypedArray(uriPermissionPatterns, parcelableFlags); out.writeTypedArray(pathPermissions, parcelableFlags); out.writeInt(multiprocess ? 1 : 0); @@ -171,6 +179,7 @@ public final class ProviderInfo extends ComponentInfo readPermission = in.readString(); writePermission = in.readString(); grantUriPermissions = in.readInt() != 0; + forceUriPermissions = in.readInt() != 0; uriPermissionPatterns = in.createTypedArray(PatternMatcher.CREATOR); pathPermissions = in.createTypedArray(PathPermission.CREATOR); multiprocess = in.readInt() != 0; diff --git a/core/java/android/content/rollback/IRollbackManager.aidl b/core/java/android/content/rollback/IRollbackManager.aidl index d951756bb513..db9fcb6abdfa 100644 --- a/core/java/android/content/rollback/IRollbackManager.aidl +++ b/core/java/android/content/rollback/IRollbackManager.aidl @@ -47,4 +47,8 @@ interface IRollbackManager { // // NOTE: This call is synchronous. boolean notifyStagedSession(int sessionId); + + // Used by the staging manager to notify the RollbackManager of the apk + // session for a staged session. + void notifyStagedApkSession(int originalSessionId, int apkSessionId); } diff --git a/core/java/android/content/rollback/PackageRollbackInfo.java b/core/java/android/content/rollback/PackageRollbackInfo.java index 0ec40183c319..1d0ab5ad2679 100644 --- a/core/java/android/content/rollback/PackageRollbackInfo.java +++ b/core/java/android/content/rollback/PackageRollbackInfo.java @@ -22,6 +22,7 @@ import android.content.pm.VersionedPackage; import android.os.Parcel; import android.os.Parcelable; import android.util.IntArray; +import android.util.SparseLongArray; import java.util.ArrayList; @@ -73,6 +74,18 @@ public final class PackageRollbackInfo implements Parcelable { */ private final boolean mIsApex; + /* + * The list of users the package is installed for. + */ + // NOTE: Not a part of the Parcelable representation of this object. + private final IntArray mInstalledUsers; + + /** + * A mapping between user and an inode of theirs CE data snapshot. + */ + // NOTE: Not a part of the Parcelable representation of this object. + private final SparseLongArray mCeSnapshotInodes; + /** * Returns the name of the package to roll back from. */ @@ -126,15 +139,33 @@ public final class PackageRollbackInfo implements Parcelable { } /** @hide */ + public IntArray getInstalledUsers() { + return mInstalledUsers; + } + + /** @hide */ + public SparseLongArray getCeSnapshotInodes() { + return mCeSnapshotInodes; + } + + /** @hide */ + public void putCeSnapshotInode(int userId, long ceSnapshotInode) { + mCeSnapshotInodes.put(userId, ceSnapshotInode); + } + + /** @hide */ public PackageRollbackInfo(VersionedPackage packageRolledBackFrom, VersionedPackage packageRolledBackTo, @NonNull IntArray pendingBackups, @NonNull ArrayList<RestoreInfo> pendingRestores, - boolean isApex) { + boolean isApex, @NonNull IntArray installedUsers, + @NonNull SparseLongArray ceSnapshotInodes) { this.mVersionRolledBackFrom = packageRolledBackFrom; this.mVersionRolledBackTo = packageRolledBackTo; this.mPendingBackups = pendingBackups; this.mPendingRestores = pendingRestores; this.mIsApex = isApex; + this.mInstalledUsers = installedUsers; + this.mCeSnapshotInodes = ceSnapshotInodes; } private PackageRollbackInfo(Parcel in) { @@ -143,6 +174,8 @@ public final class PackageRollbackInfo implements Parcelable { this.mIsApex = in.readBoolean(); this.mPendingRestores = null; this.mPendingBackups = null; + this.mInstalledUsers = null; + this.mCeSnapshotInodes = null; } @Override diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index ce2de9ac6307..8a141e2bfe6f 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -68,6 +68,7 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.net.InetAddress; import java.net.InetSocketAddress; +import java.net.Socket; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -177,10 +178,10 @@ public class ConnectivityManager { * The lookup key for a {@link NetworkInfo} object. Retrieve with * {@link android.content.Intent#getParcelableExtra(String)}. * - * @deprecated Since {@link NetworkInfo} can vary based on UID, applications - * should always obtain network information through - * {@link #getActiveNetworkInfo()}. - * @see #EXTRA_NETWORK_TYPE + * @deprecated The {@link NetworkInfo} object is deprecated, as many of its properties + * can't accurately represent modern network characteristics. + * Please obtain information about networks from the {@link NetworkCapabilities} + * or {@link LinkProperties} objects instead. */ @Deprecated public static final String EXTRA_NETWORK_INFO = "networkInfo"; @@ -189,7 +190,11 @@ public class ConnectivityManager { * Network type which triggered a {@link #CONNECTIVITY_ACTION} broadcast. * * @see android.content.Intent#getIntExtra(String, int) + * @deprecated The network type is not rich enough to represent the characteristics + * of modern networks. Please use {@link NetworkCapabilities} instead, + * in particular the transports. */ + @Deprecated public static final String EXTRA_NETWORK_TYPE = "networkType"; /** @@ -1243,9 +1248,13 @@ public class ConnectivityManager { * is no current default network. * * {@hide} + * @deprecated please use {@link #getLinkProperties(Network)} on the return + * value of {@link #getActiveNetwork()} instead. In particular, + * this method will return non-null LinkProperties even if the + * app is blocked by policy from using this network. */ @RequiresPermission(android.Manifest.permission.ACCESS_NETWORK_STATE) - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 109783091) public LinkProperties getActiveLinkProperties() { try { return mService.getActiveLinkProperties(); @@ -1881,7 +1890,8 @@ public class ConnectivityManager { * @param callback A {@link SocketKeepalive.Callback}. Used for notifications about keepalive * changes. Must be extended by applications that use this API. * - * @return A {@link SocketKeepalive} object, which can be used to control this keepalive object. + * @return A {@link SocketKeepalive} object that can be used to control the keepalive on the + * given socket. **/ public SocketKeepalive createSocketKeepalive(@NonNull Network network, @NonNull UdpEncapsulationSocket socket, @@ -1910,6 +1920,8 @@ public class ConnectivityManager { * @param callback A {@link SocketKeepalive.Callback}. Used for notifications about keepalive * changes. Must be extended by applications that use this API. * + * @return A {@link SocketKeepalive} object that can be used to control the keepalive on the + * given socket. * @hide */ @SystemApi @@ -1925,6 +1937,34 @@ public class ConnectivityManager { } /** + * Request that keepalives be started on a TCP socket. + * The socket must be established. + * + * @param network The {@link Network} the socket is on. + * @param socket The socket that needs to be kept alive. + * @param executor The executor on which callback will be invoked. This implementation assumes + * the provided {@link Executor} runs the callbacks in sequence with no + * concurrency. Failing this, no guarantee of correctness can be made. It is + * the responsibility of the caller to ensure the executor provides this + * guarantee. A simple way of creating such an executor is with the standard + * tool {@code Executors.newSingleThreadExecutor}. + * @param callback A {@link SocketKeepalive.Callback}. Used for notifications about keepalive + * changes. Must be extended by applications that use this API. + * + * @return A {@link SocketKeepalive} object that can be used to control the keepalive on the + * given socket. + * @hide + */ + @SystemApi + @RequiresPermission(android.Manifest.permission.PACKET_KEEPALIVE_OFFLOAD) + public SocketKeepalive createSocketKeepalive(@NonNull Network network, + @NonNull Socket socket, + @NonNull Executor executor, + @NonNull Callback callback) { + return new TcpSocketKeepalive(mService, network, socket, executor, callback); + } + + /** * Ensure that a network route exists to deliver traffic to the specified * host via the specified network interface. An attempt to add a route that * already exists is ignored, but treated as successful. diff --git a/core/java/android/net/IConnectivityManager.aidl b/core/java/android/net/IConnectivityManager.aidl index 1148ac1bc707..3a405d35e9aa 100644 --- a/core/java/android/net/IConnectivityManager.aidl +++ b/core/java/android/net/IConnectivityManager.aidl @@ -188,6 +188,9 @@ interface IConnectivityManager int intervalSeconds, in Messenger messenger, in IBinder binder, String srcAddr, String dstAddr); + void startTcpKeepalive(in Network network, in FileDescriptor fd, int intervalSeconds, + in Messenger messenger, in IBinder binder); + void stopKeepalive(in Network network, int slot); String getCaptivePortalServerUrl(); diff --git a/core/java/android/net/KeepalivePacketData.java b/core/java/android/net/KeepalivePacketData.java index 16555d8bd488..18726f748d30 100644 --- a/core/java/android/net/KeepalivePacketData.java +++ b/core/java/android/net/KeepalivePacketData.java @@ -96,7 +96,7 @@ public class KeepalivePacketData implements Parcelable { out.writeByteArray(mPacket); } - private KeepalivePacketData(Parcel in) { + protected KeepalivePacketData(Parcel in) { srcAddress = NetworkUtils.numericToInetAddress(in.readString()); dstAddress = NetworkUtils.numericToInetAddress(in.readString()); srcPort = in.readInt(); diff --git a/core/java/android/net/NattKeepalivePacketData.java b/core/java/android/net/NattKeepalivePacketData.java index aa9f799c6f27..5c55a98b874f 100644 --- a/core/java/android/net/NattKeepalivePacketData.java +++ b/core/java/android/net/NattKeepalivePacketData.java @@ -16,6 +16,9 @@ package android.net; +import static android.net.SocketKeepalive.ERROR_INVALID_IP_ADDRESS; +import static android.net.SocketKeepalive.ERROR_INVALID_PORT; + import android.net.SocketKeepalive.InvalidPacketException; import android.net.util.IpUtils; import android.system.OsConstants; @@ -44,11 +47,11 @@ public final class NattKeepalivePacketData extends KeepalivePacketData { throws InvalidPacketException { if (!(srcAddress instanceof Inet4Address) || !(dstAddress instanceof Inet4Address)) { - throw new InvalidPacketException(SocketKeepalive.ERROR_INVALID_IP_ADDRESS); + throw new InvalidPacketException(ERROR_INVALID_IP_ADDRESS); } if (dstPort != NattSocketKeepalive.NATT_PORT) { - throw new InvalidPacketException(SocketKeepalive.ERROR_INVALID_PORT); + throw new InvalidPacketException(ERROR_INVALID_PORT); } int length = IPV4_HEADER_LENGTH + UDP_HEADER_LENGTH + 1; diff --git a/core/java/android/net/NetworkAgent.java b/core/java/android/net/NetworkAgent.java index c37837837a9e..273f8cd4f21d 100644 --- a/core/java/android/net/NetworkAgent.java +++ b/core/java/android/net/NetworkAgent.java @@ -178,6 +178,26 @@ public abstract class NetworkAgent extends Handler { */ public static final int EVENT_SOCKET_KEEPALIVE = BASE + 13; + // TODO: move the above 2 constants down so they are in order once merge conflicts are resolved + /** + * Sent by the KeepaliveTracker to NetworkAgent to add a packet filter. + * + * For TCP keepalive offloads, keepalive packets are sent by the firmware. However, because the + * remote site will send ACK packets in response to the keepalive packets, the firmware also + * needs to be configured to properly filter the ACKs to prevent the system from waking up. + * This does not happen with UDP, so this message is TCP-specific. + * arg1 = slot number of the keepalive to filter for. + * obj = the keepalive packet to send repeatedly. + */ + public static final int CMD_ADD_KEEPALIVE_PACKET_FILTER = BASE + 16; + + /** + * Sent by the KeepaliveTracker to NetworkAgent to remove a packet filter. See + * {@link #CMD_ADD_KEEPALIVE_PACKET_FILTER}. + * arg1 = slot number of the keepalive packet filter to remove. + */ + public static final int CMD_REMOVE_KEEPALIVE_PACKET_FILTER = BASE + 17; + /** * Sent by ConnectivityService to inform this network transport of signal strength thresholds * that when crossed should trigger a system wakeup and a NetworkCapabilities update. @@ -329,6 +349,14 @@ public abstract class NetworkAgent extends Handler { preventAutomaticReconnect(); break; } + case CMD_ADD_KEEPALIVE_PACKET_FILTER: { + addKeepalivePacketFilter(msg); + break; + } + case CMD_REMOVE_KEEPALIVE_PACKET_FILTER: { + removeKeepalivePacketFilter(msg); + break; + } } } @@ -478,6 +506,24 @@ public abstract class NetworkAgent extends Handler { } /** + * Called by ConnectivityService to add specific packet filter to network hardware to block + * ACKs matching the sent keepalive packets. Implementations that support this feature must + * override this method. + */ + protected void addKeepalivePacketFilter(Message msg) { + onSocketKeepaliveEvent(msg.arg1, SocketKeepalive.ERROR_HARDWARE_UNSUPPORTED); + } + + /** + * Called by ConnectivityService to remove a packet filter installed with + * {@link #addKeepalivePacketFilter(Message)}. Implementations that support this feature + * must override this method. + */ + protected void removeKeepalivePacketFilter(Message msg) { + onSocketKeepaliveEvent(msg.arg1, SocketKeepalive.ERROR_HARDWARE_UNSUPPORTED); + } + + /** * Called by ConnectivityService to inform this network transport of signal strength thresholds * that when crossed should trigger a system wakeup and a NetworkCapabilities update. */ diff --git a/core/java/android/net/NetworkUtils.java b/core/java/android/net/NetworkUtils.java index 6a1720353f17..ed410e277a42 100644 --- a/core/java/android/net/NetworkUtils.java +++ b/core/java/android/net/NetworkUtils.java @@ -76,6 +76,18 @@ public class NetworkUtils { throws SocketException; /** + * Attaches a socket filter that drops all of incoming packets. + * @param fd the socket's {@link FileDescriptor}. + */ + public static native void attachDropAllBPFFilter(FileDescriptor fd) throws SocketException; + + /** + * Detaches a socket filter. + * @param fd the socket's {@link FileDescriptor}. + */ + public static native void detachBPFFilter(FileDescriptor fd) throws SocketException; + + /** * Configures a socket for receiving ICMPv6 router solicitations and sending advertisements. * @param fd the socket's {@link FileDescriptor}. * @param ifIndex the interface index. @@ -175,6 +187,16 @@ public class NetworkUtils { private static native void addArpEntry(byte[] ethAddr, byte[] netAddr, String ifname, FileDescriptor fd) throws IOException; + + /** + * Get the tcp repair window associated with the {@code fd}. + * + * @param fd the tcp socket's {@link FileDescriptor}. + * @return a {@link TcpRepairWindow} object indicates tcp window size. + */ + public static native TcpRepairWindow getTcpRepairWindow(FileDescriptor fd) + throws ErrnoException; + /** * @see Inet4AddressUtils#intToInet4AddressHTL(int) * @deprecated Use either {@link Inet4AddressUtils#intToInet4AddressHTH(int)} diff --git a/core/java/android/net/SocketKeepalive.java b/core/java/android/net/SocketKeepalive.java index a47c11af40dc..07728beb9c64 100644 --- a/core/java/android/net/SocketKeepalive.java +++ b/core/java/android/net/SocketKeepalive.java @@ -19,6 +19,7 @@ package android.net; import android.annotation.IntDef; import android.annotation.IntRange; import android.annotation.NonNull; +import android.annotation.Nullable; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; @@ -110,15 +111,43 @@ public abstract class SocketKeepalive implements AutoCloseable { public static final int MAX_INTERVAL_SEC = 3600; /** - * This packet is invalid. - * See the error code for details. + * An exception that embarks an error code. * @hide */ - public static class InvalidPacketException extends Exception { + public static class ErrorCodeException extends Exception { public final int error; - public InvalidPacketException(int error) { + public ErrorCodeException(final int error, final Throwable e) { + super(e); this.error = error; } + public ErrorCodeException(final int error) { + this.error = error; + } + } + + /** + * This socket is invalid. + * See the error code for details, and the optional cause. + * @hide + */ + public static class InvalidSocketException extends ErrorCodeException { + public InvalidSocketException(final int error, final Throwable e) { + super(error, e); + } + public InvalidSocketException(final int error) { + super(error); + } + } + + /** + * This packet is invalid. + * See the error code for details. + * @hide + */ + public static class InvalidPacketException extends ErrorCodeException { + public InvalidPacketException(final int error) { + super(error); + } } @NonNull final IConnectivityManager mService; @@ -127,7 +156,7 @@ public abstract class SocketKeepalive implements AutoCloseable { @NonNull private final SocketKeepalive.Callback mCallback; @NonNull private final Looper mLooper; @NonNull final Messenger mMessenger; - @NonNull Integer mSlot; + @Nullable Integer mSlot; SocketKeepalive(@NonNull IConnectivityManager service, @NonNull Network network, @NonNull Executor executor, @NonNull Callback callback) { diff --git a/core/java/android/net/TcpKeepalivePacketData.java b/core/java/android/net/TcpKeepalivePacketData.java new file mode 100644 index 000000000000..f07dfb64cd01 --- /dev/null +++ b/core/java/android/net/TcpKeepalivePacketData.java @@ -0,0 +1,234 @@ +/* + * Copyright (C) 2019 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 android.net; + +import static android.net.SocketKeepalive.ERROR_INVALID_IP_ADDRESS; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.net.SocketKeepalive.InvalidPacketException; +import android.net.util.IpUtils; +import android.os.Parcel; +import android.os.Parcelable; +import android.system.OsConstants; + +import java.net.Inet4Address; +import java.net.InetAddress; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; +import java.util.Objects; + +/** + * Represents the actual tcp keep alive packets which will be used for hardware offload. + * @hide + */ +public class TcpKeepalivePacketData extends KeepalivePacketData implements Parcelable { + private static final String TAG = "TcpKeepalivePacketData"; + + /** TCP sequence number. */ + public final int tcpSeq; + + /** TCP ACK number. */ + public final int tcpAck; + + /** TCP RCV window. */ + public final int tcpWnd; + + /** TCP RCV window scale. */ + public final int tcpWndScale; + + private static final int IPV4_HEADER_LENGTH = 20; + private static final int IPV6_HEADER_LENGTH = 40; + private static final int TCP_HEADER_LENGTH = 20; + + // This should only be constructed via static factory methods, such as + // tcpKeepalivePacket. + private TcpKeepalivePacketData(TcpSocketInfo tcpDetails, byte[] data) + throws InvalidPacketException { + super(tcpDetails.srcAddress, tcpDetails.srcPort, tcpDetails.dstAddress, + tcpDetails.dstPort, data); + tcpSeq = tcpDetails.seq; + tcpAck = tcpDetails.ack; + // In the packet, the window is shifted right by the window scale. + tcpWnd = tcpDetails.rcvWnd; + tcpWndScale = tcpDetails.rcvWndScale; + } + + /** + * Factory method to create tcp keepalive packet structure. + */ + public static TcpKeepalivePacketData tcpKeepalivePacket( + TcpSocketInfo tcpDetails) throws InvalidPacketException { + final byte[] packet; + if ((tcpDetails.srcAddress instanceof Inet4Address) + && (tcpDetails.dstAddress instanceof Inet4Address)) { + packet = buildV4Packet(tcpDetails); + } else { + // TODO: support ipv6 + throw new InvalidPacketException(ERROR_INVALID_IP_ADDRESS); + } + + return new TcpKeepalivePacketData(tcpDetails, packet); + } + + /** + * Build ipv4 tcp keepalive packet, not including the link-layer header. + */ + // TODO : if this code is ever moved to the network stack, factorize constants with the ones + // over there. + private static byte[] buildV4Packet(TcpSocketInfo tcpDetails) { + final int length = IPV4_HEADER_LENGTH + TCP_HEADER_LENGTH; + ByteBuffer buf = ByteBuffer.allocate(length); + buf.order(ByteOrder.BIG_ENDIAN); + // IP version and TOS. TODO : fetch this from getsockopt(SOL_IP, IP_TOS) + buf.putShort((short) 0x4500); + buf.putShort((short) length); + buf.putInt(0x4000); // ID, flags=DF, offset + // TODO : fetch TTL from getsockopt(SOL_IP, IP_TTL) + buf.put((byte) 64); + buf.put((byte) OsConstants.IPPROTO_TCP); + final int ipChecksumOffset = buf.position(); + buf.putShort((short) 0); // IP checksum + buf.put(tcpDetails.srcAddress.getAddress()); + buf.put(tcpDetails.dstAddress.getAddress()); + buf.putShort((short) tcpDetails.srcPort); + buf.putShort((short) tcpDetails.dstPort); + buf.putInt(tcpDetails.seq); // Sequence Number + buf.putInt(tcpDetails.ack); // ACK + buf.putShort((short) 0x5010); // TCP length=5, flags=ACK + buf.putShort((short) (tcpDetails.rcvWnd >> tcpDetails.rcvWndScale)); // Window size + final int tcpChecksumOffset = buf.position(); + buf.putShort((short) 0); // TCP checksum + // URG is not set therefore the urgent pointer is not included + buf.putShort(ipChecksumOffset, IpUtils.ipChecksum(buf, 0)); + buf.putShort(tcpChecksumOffset, IpUtils.tcpChecksum( + buf, 0, IPV4_HEADER_LENGTH, TCP_HEADER_LENGTH)); + + return buf.array(); + } + + // TODO: add buildV6Packet. + + /** Represents tcp/ip information. */ + // TODO: Replace TcpSocketInfo with TcpKeepalivePacketDataParcelable. + public static class TcpSocketInfo { + public final InetAddress srcAddress; + public final InetAddress dstAddress; + public final int srcPort; + public final int dstPort; + public final int seq; + public final int ack; + public final int rcvWnd; + public final int rcvWndScale; + + public TcpSocketInfo(InetAddress sAddr, int sPort, InetAddress dAddr, + int dPort, int writeSeq, int readSeq, int rWnd, int rWndScale) { + srcAddress = sAddr; + dstAddress = dAddr; + srcPort = sPort; + dstPort = dPort; + seq = writeSeq; + ack = readSeq; + rcvWnd = rWnd; + rcvWndScale = rWndScale; + } + } + + @Override + public boolean equals(@Nullable final Object o) { + if (!(o instanceof TcpKeepalivePacketData)) return false; + final TcpKeepalivePacketData other = (TcpKeepalivePacketData) o; + return this.srcAddress.equals(other.srcAddress) + && this.dstAddress.equals(other.dstAddress) + && this.srcPort == other.srcPort + && this.dstPort == other.dstPort + && this.tcpAck == other.tcpAck + && this.tcpSeq == other.tcpSeq + && this.tcpWnd == other.tcpWnd + && this.tcpWndScale == other.tcpWndScale; + } + + @Override + public int hashCode() { + return Objects.hash(srcAddress, dstAddress, srcPort, dstPort, tcpAck, tcpSeq, tcpWnd, + tcpWndScale); + } + + /* Parcelable Implementation. */ + /* Note that this object implements parcelable (and needs to keep doing this as it inherits + * from a class that does), but should usually be parceled as a stable parcelable using + * the toStableParcelable() and fromStableParcelable() methods. + */ + public int describeContents() { + return 0; + } + + /** Write to parcel. */ + public void writeToParcel(Parcel out, int flags) { + super.writeToParcel(out, flags); + out.writeInt(tcpSeq); + out.writeInt(tcpAck); + out.writeInt(tcpWnd); + out.writeInt(tcpWndScale); + } + + private TcpKeepalivePacketData(Parcel in) { + super(in); + tcpSeq = in.readInt(); + tcpAck = in.readInt(); + tcpWnd = in.readInt(); + tcpWndScale = in.readInt(); + } + + /** Parcelable Creator. */ + public static final Parcelable.Creator<TcpKeepalivePacketData> CREATOR = + new Parcelable.Creator<TcpKeepalivePacketData>() { + public TcpKeepalivePacketData createFromParcel(Parcel in) { + return new TcpKeepalivePacketData(in); + } + + public TcpKeepalivePacketData[] newArray(int size) { + return new TcpKeepalivePacketData[size]; + } + }; + + /** + * Convert this TcpKeepalivePacketData to a TcpKeepalivePacketDataParcelable. + */ + @NonNull + public TcpKeepalivePacketDataParcelable toStableParcelable() { + final TcpKeepalivePacketDataParcelable parcel = new TcpKeepalivePacketDataParcelable(); + parcel.srcAddress = srcAddress.getAddress(); + parcel.srcPort = srcPort; + parcel.dstAddress = dstAddress.getAddress(); + parcel.dstPort = dstPort; + parcel.seq = tcpSeq; + parcel.ack = tcpAck; + return parcel; + } + + @Override + public String toString() { + return "saddr: " + srcAddress + + " daddr: " + dstAddress + + " sport: " + srcPort + + " dport: " + dstPort + + " seq: " + tcpSeq + + " ack: " + tcpAck + + " wnd: " + tcpWnd + + " wndScale: " + tcpWndScale; + } +} diff --git a/telephony/java/android/telephony/ims/RcsPart.java b/core/java/android/net/TcpKeepalivePacketDataParcelable.aidl index da501738a0bf..7329c63b09be 100644 --- a/telephony/java/android/telephony/ims/RcsPart.java +++ b/core/java/android/net/TcpKeepalivePacketDataParcelable.aidl @@ -13,13 +13,14 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package android.telephony.ims; -import android.os.Parcelable; +package android.net; -/** - * A part of a composite {@link RcsMessage}. - * @hide - TODO(sahinc) make this public - */ -public abstract class RcsPart implements Parcelable { +parcelable TcpKeepalivePacketDataParcelable { + byte[] srcAddress; + int srcPort; + byte[] dstAddress; + int dstPort; + int seq; + int ack; } diff --git a/core/java/android/net/TcpRepairWindow.java b/core/java/android/net/TcpRepairWindow.java new file mode 100644 index 000000000000..86034f0a76ed --- /dev/null +++ b/core/java/android/net/TcpRepairWindow.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2019 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 android.net; + +/** + * Corresponds to C's {@code struct tcp_repair_window} from + * include/uapi/linux/tcp.h + * + * @hide + */ +public final class TcpRepairWindow { + public final int sndWl1; + public final int sndWnd; + public final int maxWindow; + public final int rcvWnd; + public final int rcvWup; + public final int rcvWndScale; + + /** + * Constructs an instance with the given field values. + */ + public TcpRepairWindow(final int sndWl1, final int sndWnd, final int maxWindow, + final int rcvWnd, final int rcvWup, final int rcvWndScale) { + this.sndWl1 = sndWl1; + this.sndWnd = sndWnd; + this.maxWindow = maxWindow; + this.rcvWnd = rcvWnd; + this.rcvWup = rcvWup; + this.rcvWndScale = rcvWndScale; + } +} diff --git a/core/java/android/net/TcpSocketKeepalive.java b/core/java/android/net/TcpSocketKeepalive.java new file mode 100644 index 000000000000..8f6ee7bf2950 --- /dev/null +++ b/core/java/android/net/TcpSocketKeepalive.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2019 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 android.net; + +import android.annotation.NonNull; +import android.os.Binder; +import android.os.RemoteException; +import android.util.Log; + +import java.io.FileDescriptor; +import java.net.Socket; +import java.util.concurrent.Executor; + +/** @hide */ +final class TcpSocketKeepalive extends SocketKeepalive { + + private final Socket mSocket; + + TcpSocketKeepalive(@NonNull IConnectivityManager service, + @NonNull Network network, + @NonNull Socket socket, + @NonNull Executor executor, + @NonNull Callback callback) { + super(service, network, executor, callback); + mSocket = socket; + } + + /** + * Starts keepalives. {@code mSocket} must be a connected TCP socket. + * + * - The application must not write to or read from the socket after calling this method, until + * onDataReceived, onStopped, or onError are called. If it does, the keepalive will fail + * with {@link #ERROR_SOCKET_NOT_IDLE}, or {@code #ERROR_INVALID_SOCKET} if the socket + * experienced an error (as in poll(2) returned POLLERR); if this happens, the data received + * from the socket may be invalid, and the socket can't be recovered. + * - If the socket has data in the send or receive buffer, then this call will fail with + * {@link #ERROR_SOCKET_NOT_IDLE} and can be retried after the data has been processed. + * An app could ensure this by using an application-layer protocol where it can receive + * acknowledgement that it will go into keepalive mode. It could then go into keepalive + * mode after having read the acknowledgement, draining the socket. + */ + @Override + void startImpl(int intervalSec) { + try { + final FileDescriptor fd = mSocket.getFileDescriptor$(); + mService.startTcpKeepalive(mNetwork, fd, intervalSec, mMessenger, new Binder()); + } catch (RemoteException e) { + Log.e(TAG, "Error starting packet keepalive: ", e); + stopLooper(); + } + } + + @Override + void stopImpl() { + try { + if (mSlot != null) { + mService.stopKeepalive(mNetwork, mSlot); + } + } catch (RemoteException e) { + Log.e(TAG, "Error stopping packet keepalive: ", e); + stopLooper(); + } + } +} diff --git a/core/java/android/net/ip/IIpClient.aidl b/core/java/android/net/ip/IIpClient.aidl index 7769ec2b65ac..a4a80e1efe6f 100644 --- a/core/java/android/net/ip/IIpClient.aidl +++ b/core/java/android/net/ip/IIpClient.aidl @@ -17,6 +17,7 @@ package android.net.ip; import android.net.ProxyInfoParcelable; import android.net.ProvisioningConfigurationParcelable; +import android.net.TcpKeepalivePacketDataParcelable; /** @hide */ oneway interface IIpClient { @@ -29,4 +30,6 @@ oneway interface IIpClient { void setTcpBufferSizes(in String tcpBufferSizes); void setHttpProxy(in ProxyInfoParcelable proxyInfo); void setMulticastFilter(boolean enabled); + void addKeepalivePacketFilter(int slot, in TcpKeepalivePacketDataParcelable pkt); + void removeKeepalivePacketFilter(int slot); } diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java index 2d61a4ee95d9..83a7654d494b 100755 --- a/core/java/android/os/Build.java +++ b/core/java/android/os/Build.java @@ -1120,11 +1120,9 @@ public class Build { /** The name identifying the system partition. */ public static final String PARTITION_NAME_SYSTEM = "system"; - private String mName; - private String mFingerprint; - private long mTimeMs; - - public Partition() {} + private final String mName; + private final String mFingerprint; + private final long mTimeMs; private Partition(String name, String fingerprint, long timeMs) { mName = name; diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index 22ba74d70c16..be673ad14848 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -614,6 +614,11 @@ public final class PowerManager { * Whether to go into Deep Doze as soon as the screen turns off or not. */ int QUICK_DOZE = 15; + + /** + * Whether to enable night mode when battery saver is enabled. + */ + int NIGHT_MODE = 16; } /** diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 0a60764428dc..e2b5730e10f4 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -734,10 +734,13 @@ public class UserManager { public static final String DISALLOW_SYSTEM_ERROR_DIALOGS = "no_system_error_dialogs"; /** - * Specifies if what is copied in the clipboard of this profile can - * be pasted in related profiles. Does not restrict if the clipboard of related profiles can be - * pasted in this profile. - * The default value is <code>false</code>. + * Specifies if the clipboard contents can be exported by pasting the data into other users or + * profiles. This restriction doesn't prevent import, such as someone pasting clipboard data + * from other profiles or users. The default value is {@code false}. + * + * <p><strong>Note</strong>: Because it's possible to extract data from screenshots using + * optical character recognition (OCR), we strongly recommend combining this user restriction + * with {@link DevicePolicyManager#setScreenCaptureDisabled(ComponentName, boolean)}. * * <p>Key for user restrictions. * <p>Type: Boolean diff --git a/core/java/android/provider/DeviceConfig.java b/core/java/android/provider/DeviceConfig.java index daaa632a5cca..5ac31dc830ce 100644 --- a/core/java/android/provider/DeviceConfig.java +++ b/core/java/android/provider/DeviceConfig.java @@ -190,6 +190,16 @@ public final class DeviceConfig { } /** + * Namespace for all media native related features. + * + * @hide + */ + @SystemApi + public interface MediaNative { + String NAMESPACE = "media_native"; + } + + /** * Namespace for all activity manager related features that are used at the native level. * These features are applied at reboot. * @@ -239,6 +249,14 @@ public final class DeviceConfig { * Whether to show location access check notifications. */ String PROPERTY_LOCATION_ACCESS_CHECK_ENABLED = "location_access_check_enabled"; + + /** + * Whether to disable the new device identifier access restrictions. + * + * @hide + */ + String PROPERTY_DEVICE_IDENTIFIER_ACCESS_RESTRICTIONS_DISABLED = + "device_identifier_access_restrictions_disabled"; } /** diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 3a02e85eee3b..a8976aa56241 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -8294,6 +8294,16 @@ public final class Settings { private static final Validator NOTIFICATION_BADGING_VALIDATOR = BOOLEAN_VALIDATOR; /** + * Whether the notification bubbles are globally enabled + * The value is boolean (1 or 0). + * @hide + */ + @TestApi + public static final String NOTIFICATION_BUBBLES = "notification_bubbles"; + + private static final Validator NOTIFICATION_BUBBLES_VALIDATOR = BOOLEAN_VALIDATOR; + + /** * Whether notifications are dismissed by a right-to-left swipe (instead of a left-to-right * swipe). * @@ -8604,6 +8614,7 @@ public final class Settings { ASSIST_GESTURE_WAKE_ENABLED, VR_DISPLAY_MODE, NOTIFICATION_BADGING, + NOTIFICATION_BUBBLES, NOTIFICATION_DISMISS_RTL, QS_AUTO_ADDED_TILES, SCREENSAVER_ENABLED, @@ -8766,6 +8777,7 @@ public final class Settings { VALIDATORS.put(ASSIST_GESTURE_WAKE_ENABLED, ASSIST_GESTURE_WAKE_ENABLED_VALIDATOR); VALIDATORS.put(VR_DISPLAY_MODE, VR_DISPLAY_MODE_VALIDATOR); VALIDATORS.put(NOTIFICATION_BADGING, NOTIFICATION_BADGING_VALIDATOR); + VALIDATORS.put(NOTIFICATION_BUBBLES, NOTIFICATION_BUBBLES_VALIDATOR); VALIDATORS.put(NOTIFICATION_DISMISS_RTL, NOTIFICATION_DISMISS_RTL_VALIDATOR); VALIDATORS.put(QS_AUTO_ADDED_TILES, QS_AUTO_ADDED_TILES_VALIDATOR); VALIDATORS.put(SCREENSAVER_ENABLED, SCREENSAVER_ENABLED_VALIDATOR); @@ -11442,6 +11454,7 @@ public final class Settings { * <pre> * advertise_is_enabled (boolean) * datasaver_disabled (boolean) + * enable_night_mode (boolean) * launch_boost_disabled (boolean) * vibration_disabled (boolean) * animation_disabled (boolean) diff --git a/core/java/android/app/SmsAppService.java b/core/java/android/service/carrier/CarrierMessagingClientService.java index 3829d7103b07..13f4fc4b0dcb 100644 --- a/core/java/android/app/SmsAppService.java +++ b/core/java/android/service/carrier/CarrierMessagingClientService.java @@ -13,8 +13,9 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package android.app; +package android.service.carrier; +import android.app.Service; import android.content.ComponentName; import android.content.Intent; import android.os.IBinder; @@ -24,10 +25,11 @@ import android.os.IBinder; * it so that the process is always running, which allows the app to have a persistent connection * to the server. * - * <p>The service must have an {@link android.telephony.TelephonyManager#ACTION_SMS_APP_SERVICE} + * <p>The service must have an + * {@link android.telephony.TelephonyManager#ACTION_CARRIER_MESSAGING_CLIENT_SERVICE} * action in the intent handler, and be protected with - * {@link android.Manifest.permission#BIND_SMS_APP_SERVICE}. However the service does not have to - * be exported. + * {@link android.Manifest.permission#BIND_CARRIER_MESSAGING_CLIENT_SERVICE}. + * However the service does not have to be exported. * * <p>The service must be associated with a non-main process, meaning it must have an * {@code android:process} tag in its manifest entry. @@ -45,27 +47,27 @@ import android.os.IBinder; * * <p>Example: First, define a subclass in the application: * <pre> - * public class MySmsAppService extends SmsAppService { + * public class MyCarrierMessagingClientService extends CarrierMessagingClientService { * } * </pre> * Then, declare it in its {@code AndroidManifest.xml}: * <pre> * <service - * android:name=".MySmsAppService" + * android:name=".MyCarrierMessagingClientService" * android:exported="false" * android:process=":persistent" - * android:permission="android.permission.BIND_SMS_APP_SERVICE"> + * android:permission="android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE"> * <intent-filter> - * <action android:name="android.telephony.action.SMS_APP_SERVICE" /> + * <action android:name="android.telephony.action.CARRIER_MESSAGING_CLIENT_SERVICE" /> * </intent-filter> * </service> * </pre> */ -public class SmsAppService extends Service { - private final ISmsAppService mImpl; +public class CarrierMessagingClientService extends Service { + private final ICarrierMessagingClientServiceImpl mImpl; - public SmsAppService() { - mImpl = new ISmsAppServiceImpl(); + public CarrierMessagingClientService() { + mImpl = new ICarrierMessagingClientServiceImpl(); } @Override @@ -73,6 +75,6 @@ public class SmsAppService extends Service { return mImpl.asBinder(); } - private class ISmsAppServiceImpl extends ISmsAppService.Stub { + private class ICarrierMessagingClientServiceImpl extends ICarrierMessagingClientService.Stub { } } diff --git a/core/java/android/app/ISmsAppService.aidl b/core/java/android/service/carrier/ICarrierMessagingClientService.aidl index 1ac2ec6b1c41..dbe7d121d56e 100644 --- a/core/java/android/app/ISmsAppService.aidl +++ b/core/java/android/service/carrier/ICarrierMessagingClientService.aidl @@ -14,10 +14,10 @@ * limitations under the License. */ -package android.app; +package android.service.carrier; /** * @hide */ -interface ISmsAppService { +interface ICarrierMessagingClientService { } diff --git a/core/java/android/service/notification/NotificationListenerService.java b/core/java/android/service/notification/NotificationListenerService.java index d4e887970a47..d3285bb53eb3 100644 --- a/core/java/android/service/notification/NotificationListenerService.java +++ b/core/java/android/service/notification/NotificationListenerService.java @@ -1503,6 +1503,7 @@ public abstract class NotificationListenerService extends Service { private boolean mNoisy; private ArrayList<Notification.Action> mSmartActions; private ArrayList<CharSequence> mSmartReplies; + private boolean mCanBubble; public Ranking() {} @@ -1677,6 +1678,17 @@ public abstract class NotificationListenerService extends Service { return mLastAudiblyAlertedMs; } + /** + * Returns whether the user has allowed bubbles globally, at the app level, and at the + * channel level for this notification. + * + * <p>This does not take into account the current importance of the notification, the + * current DND state, or whether the posting app is foreground.</p> + */ + public boolean canBubble() { + return mCanBubble; + } + /** @hide */ public boolean isNoisy() { return mNoisy; @@ -1693,7 +1705,7 @@ public abstract class NotificationListenerService extends Service { ArrayList<SnoozeCriterion> snoozeCriteria, boolean showBadge, int userSentiment, boolean hidden, long lastAudiblyAlertedMs, boolean noisy, ArrayList<Notification.Action> smartActions, - ArrayList<CharSequence> smartReplies) { + ArrayList<CharSequence> smartReplies, boolean canBubble) { mKey = key; mRank = rank; mIsAmbient = importance < NotificationManager.IMPORTANCE_LOW; @@ -1713,6 +1725,7 @@ public abstract class NotificationListenerService extends Service { mNoisy = noisy; mSmartActions = smartActions; mSmartReplies = smartReplies; + mCanBubble = canBubble; } /** @@ -1766,6 +1779,7 @@ public abstract class NotificationListenerService extends Service { private ArrayMap<String, Boolean> mNoisy; private ArrayMap<String, ArrayList<Notification.Action>> mSmartActions; private ArrayMap<String, ArrayList<CharSequence>> mSmartReplies; + private boolean[] mCanBubble; private RankingMap(NotificationRankingUpdate rankingUpdate) { mRankingUpdate = rankingUpdate; @@ -1796,7 +1810,7 @@ public abstract class NotificationListenerService extends Service { getChannel(key), getOverridePeople(key), getSnoozeCriteria(key), getShowBadge(key), getUserSentiment(key), getHidden(key), getLastAudiblyAlerted(key), getNoisy(key), getSmartActions(key), - getSmartReplies(key)); + getSmartReplies(key), canBubble(key)); return rank >= 0; } @@ -1972,6 +1986,19 @@ public abstract class NotificationListenerService extends Service { return mSmartReplies.get(key); } + private boolean canBubble(String key) { + synchronized (this) { + if (mRanks == null) { + buildRanksLocked(); + } + if (mCanBubble == null) { + mCanBubble = mRankingUpdate.getCanBubble(); + } + } + int keyIndex = mRanks.getOrDefault(key, -1); + return keyIndex >= 0 ? mCanBubble[keyIndex] : false; + } + // Locked by 'this' private void buildRanksLocked() { String[] orderedKeys = mRankingUpdate.getOrderedKeys(); diff --git a/core/java/android/service/notification/NotificationRankingUpdate.java b/core/java/android/service/notification/NotificationRankingUpdate.java index ebaeff8ff33c..230ae2713554 100644 --- a/core/java/android/service/notification/NotificationRankingUpdate.java +++ b/core/java/android/service/notification/NotificationRankingUpdate.java @@ -41,13 +41,14 @@ public class NotificationRankingUpdate implements Parcelable { private final Bundle mSmartReplies; private final Bundle mLastAudiblyAlerted; private final Bundle mNoisy; + private final boolean[] mCanBubble; public NotificationRankingUpdate(String[] keys, String[] interceptedKeys, Bundle visibilityOverrides, Bundle suppressedVisualEffects, int[] importance, Bundle explanation, Bundle overrideGroupKeys, Bundle channels, Bundle overridePeople, Bundle snoozeCriteria, Bundle showBadge, Bundle userSentiment, Bundle hidden, Bundle smartActions, - Bundle smartReplies, Bundle lastAudiblyAlerted, Bundle noisy) { + Bundle smartReplies, Bundle lastAudiblyAlerted, Bundle noisy, boolean[] canBubble) { mKeys = keys; mInterceptedKeys = interceptedKeys; mVisibilityOverrides = visibilityOverrides; @@ -65,6 +66,7 @@ public class NotificationRankingUpdate implements Parcelable { mSmartReplies = smartReplies; mLastAudiblyAlerted = lastAudiblyAlerted; mNoisy = noisy; + mCanBubble = canBubble; } public NotificationRankingUpdate(Parcel in) { @@ -86,6 +88,8 @@ public class NotificationRankingUpdate implements Parcelable { mSmartReplies = in.readBundle(); mLastAudiblyAlerted = in.readBundle(); mNoisy = in.readBundle(); + mCanBubble = new boolean[mKeys.length]; + in.readBooleanArray(mCanBubble); } @Override @@ -112,6 +116,7 @@ public class NotificationRankingUpdate implements Parcelable { out.writeBundle(mSmartReplies); out.writeBundle(mLastAudiblyAlerted); out.writeBundle(mNoisy); + out.writeBooleanArray(mCanBubble); } public static final Parcelable.Creator<NotificationRankingUpdate> CREATOR @@ -192,4 +197,8 @@ public class NotificationRankingUpdate implements Parcelable { public Bundle getNoisy() { return mNoisy; } + + public boolean[] getCanBubble() { + return mCanBubble; + } } diff --git a/core/java/android/view/DisplayListCanvas.java b/core/java/android/view/DisplayListCanvas.java index 03d99553f125..3e749f4ba16f 100644 --- a/core/java/android/view/DisplayListCanvas.java +++ b/core/java/android/view/DisplayListCanvas.java @@ -37,7 +37,7 @@ public abstract class DisplayListCanvas extends BaseRecordingCanvas { } /** @hide */ - @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.O) public abstract void drawRoundRect(CanvasProperty<Float> left, CanvasProperty<Float> top, CanvasProperty<Float> right, CanvasProperty<Float> bottom, CanvasProperty<Float> rx, CanvasProperty<Float> ry, CanvasProperty<Paint> paint); diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 33d42d7d0873..04ffa33d0e22 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -4258,47 +4258,51 @@ public class View implements Drawable.Callback, KeyEvent.Callback, /** * The offset, in pixels, by which the content of this view is scrolled * horizontally. + * Please use {@link View#getScrollX()} and {@link View#setScrollX(int)} instead of + * accessing these directly. * {@hide} */ @ViewDebug.ExportedProperty(category = "scrolling") - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) protected int mScrollX; /** * The offset, in pixels, by which the content of this view is scrolled * vertically. + * Please use {@link View#getScrollY()} and {@link View#setScrollY(int)} instead of + * accessing these directly. * {@hide} */ @ViewDebug.ExportedProperty(category = "scrolling") - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) protected int mScrollY; /** - * The left padding in pixels, that is the distance in pixels between the - * left edge of this view and the left edge of its content. + * The final computed left padding in pixels that is used for drawing. This is the distance in + * pixels between the left edge of this view and the left edge of its content. * {@hide} */ @ViewDebug.ExportedProperty(category = "padding") @UnsupportedAppUsage protected int mPaddingLeft = 0; /** - * The right padding in pixels, that is the distance in pixels between the - * right edge of this view and the right edge of its content. + * The final computed right padding in pixels that is used for drawing. This is the distance in + * pixels between the right edge of this view and the right edge of its content. * {@hide} */ @ViewDebug.ExportedProperty(category = "padding") @UnsupportedAppUsage protected int mPaddingRight = 0; /** - * The top padding in pixels, that is the distance in pixels between the - * top edge of this view and the top edge of its content. + * The final computed top padding in pixels that is used for drawing. This is the distance in + * pixels between the top edge of this view and the top edge of its content. * {@hide} */ @ViewDebug.ExportedProperty(category = "padding") @UnsupportedAppUsage protected int mPaddingTop; /** - * The bottom padding in pixels, that is the distance in pixels between the - * bottom edge of this view and the bottom edge of its content. + * The final computed bottom padding in pixels that is used for drawing. This is the distance in + * pixels between the bottom edge of this view and the bottom edge of its content. * {@hide} */ @ViewDebug.ExportedProperty(category = "padding") @@ -4350,7 +4354,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, private MatchIdPredicate mMatchIdPredicate; /** - * Cache the paddingRight set by the user to append to the scrollbar's size. + * The right padding after RTL resolution, but before taking account of scroll bars. * * @hide */ @@ -4358,7 +4362,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, protected int mUserPaddingRight; /** - * Cache the paddingBottom set by the user to append to the scrollbar's size. + * The resolved bottom padding before taking account of scroll bars. * * @hide */ @@ -4366,7 +4370,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, protected int mUserPaddingBottom; /** - * Cache the paddingLeft set by the user to append to the scrollbar's size. + * The left padding after RTL resolution, but before taking account of scroll bars. * * @hide */ @@ -4388,14 +4392,16 @@ public class View implements Drawable.Callback, KeyEvent.Callback, int mUserPaddingEnd; /** - * Cache initial left padding. + * The left padding as set by a setter method, a background's padding, or via XML property + * resolution. This value is the padding before LTR resolution or taking account of scrollbars. * * @hide */ int mUserPaddingLeftInitial; /** - * Cache initial right padding. + * The right padding as set by a setter method, a background's padding, or via XML property + * resolution. This value is the padding before LTR resolution or taking account of scrollbars. * * @hide */ @@ -4407,12 +4413,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback, private static final int UNDEFINED_PADDING = Integer.MIN_VALUE; /** - * Cache if a left padding has been defined + * Cache if a left padding has been defined explicitly via padding, horizontal padding, + * or leftPadding in XML, or by setPadding(...) or setRelativePadding(...) */ private boolean mLeftPaddingDefined = false; /** - * Cache if a right padding has been defined + * Cache if a right padding has been defined explicitly via padding, horizontal padding, + * or rightPadding in XML, or by setPadding(...) or setRelativePadding(...) */ private boolean mRightPaddingDefined = false; @@ -5321,7 +5329,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, case com.android.internal.R.styleable.View_paddingVertical: paddingVertical = a.getDimensionPixelSize(attr, -1); break; - case com.android.internal.R.styleable.View_paddingLeft: + case com.android.internal.R.styleable.View_paddingLeft: leftPadding = a.getDimensionPixelSize(attr, -1); mUserPaddingLeftInitial = leftPadding; leftPaddingDefined = true; @@ -5787,7 +5795,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, setOverScrollMode(overScrollMode); - // Cache start/end user padding as we cannot fully resolve padding here (we dont have yet + // Cache start/end user padding as we cannot fully resolve padding here (we don't have yet // the resolved layout direction). Those cached values will be used later during padding // resolution. mUserPaddingStart = startPadding; @@ -5802,6 +5810,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mLeftPaddingDefined = leftPaddingDefined; mRightPaddingDefined = rightPaddingDefined; + // Valid paddingHorizontal/paddingVertical beats leftPadding, rightPadding, topPadding, + // bottomPadding, and padding set by background. Valid padding beats everything. if (padding >= 0) { leftPadding = padding; topPadding = padding; @@ -5854,6 +5864,8 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } } + // mPaddingTop and mPaddingBottom may have been set by setBackground(Drawable) so must pass + // them on if topPadding or bottomPadding are not valid. internalSetPadding( mUserPaddingLeftInitial, topPadding >= 0 ? topPadding : mPaddingTop, @@ -16183,7 +16195,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @return true if the View subclass handles alpha (the return value for onSetAlpha()) and * the new value for the alpha property is different from the old value */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 123768435) boolean setAlphaNoInvalidation(float alpha) { ensureTransformationInfo(); if (mTransformationInfo.mAlpha != alpha) { @@ -19532,7 +19544,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, * @param info the {@link android.view.View.AttachInfo} to associated with * this view */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) void dispatchAttachedToWindow(AttachInfo info, int visibility) { mAttachInfo = info; if (mOverlay != null) { @@ -19598,7 +19610,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, notifyAppearedOrDisappearedForContentCaptureIfNeeded(true); } - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) void dispatchDetachedFromWindow() { AttachInfo info = mAttachInfo; if (info != null) { diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java index 94d1b6d0126a..6beae37d6b46 100644 --- a/core/java/android/view/ViewConfiguration.java +++ b/core/java/android/view/ViewConfiguration.java @@ -24,6 +24,7 @@ import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Point; +import android.os.Build; import android.os.RemoteException; import android.provider.Settings; import android.util.DisplayMetrics; @@ -314,7 +315,7 @@ public class ViewConfiguration { private final float mHorizontalScrollFactor; private final boolean mShowMenuShortcutsWhenKeyboardPresent; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 123768915) private boolean sHasPermanentMenuKey; @UnsupportedAppUsage private boolean sHasPermanentMenuKeySet; diff --git a/core/java/android/view/ViewPropertyAnimator.java b/core/java/android/view/ViewPropertyAnimator.java index a0ab362f3985..68c0d9ec465b 100644 --- a/core/java/android/view/ViewPropertyAnimator.java +++ b/core/java/android/view/ViewPropertyAnimator.java @@ -1139,12 +1139,6 @@ public class ViewPropertyAnimator { boolean hardwareAccelerated = mView.isHardwareAccelerated(); - // alpha requires slightly different treatment than the other (transform) properties. - // The logic in setAlpha() is not simply setting mAlpha, plus the invalidation - // logic is dependent on how the view handles an internal call to onSetAlpha(). - // We track what kinds of properties are set, and how alpha is handled when it is - // set, and perform the invalidation steps appropriately. - boolean alphaHandled = false; if (!hardwareAccelerated) { mView.invalidateParentCaches(); } @@ -1159,11 +1153,7 @@ public class ViewPropertyAnimator { for (int i = 0; i < count; ++i) { NameValuesHolder values = valueList.get(i); float value = values.mFromValue + fraction * values.mDeltaValue; - if (values.mNameConstant == ALPHA) { - alphaHandled = mView.setAlphaNoInvalidation(value); - } else { - setValue(values.mNameConstant, value); - } + setValue(values.mNameConstant, value); } } if ((propertyMask & TRANSFORM_MASK) != 0) { @@ -1171,13 +1161,8 @@ public class ViewPropertyAnimator { mView.mPrivateFlags |= View.PFLAG_DRAWN; // force another invalidation } } - // invalidate(false) in all cases except if alphaHandled gets set to true - // via the call to setAlphaNoInvalidation(), above - if (alphaHandled) { - mView.invalidate(true); - } else { - mView.invalidateViewProperty(false, false); - } + + mView.invalidateViewProperty(false, false); if (mUpdateListener != null) { mUpdateListener.onAnimationUpdate(animation); } diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index 97c37b0a8f75..9c21ba60a034 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -3660,7 +3660,7 @@ public class Editor { intent.putExtra(USER_DICTIONARY_EXTRA_LOCALE, mTextView.getTextServicesLocale().toString()); intent.setFlags(intent.getFlags() | Intent.FLAG_ACTIVITY_NEW_TASK); - mTextView.getContext().startActivity(intent); + mTextView.startActivityAsTextOperationUserIfNecessary(intent); // There is no way to know if the word was indeed added. Re-check. // TODO The ExtractEditText should remove the span in the original text instead editable.removeSpan(mMisspelledSpanInfo.mSuggestionSpan); diff --git a/core/java/android/widget/GridView.java b/core/java/android/widget/GridView.java index bf65ec0d5de3..bbbe369d5262 100644 --- a/core/java/android/widget/GridView.java +++ b/core/java/android/widget/GridView.java @@ -123,7 +123,7 @@ public class GridView extends AbsListView { private int mColumnWidth; @UnsupportedAppUsage private int mRequestedColumnWidth; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 123769395) private int mRequestedNumColumns; private View mReferenceView = null; diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java index 3519afd32662..6b48c6584ad2 100644 --- a/core/java/android/widget/ProgressBar.java +++ b/core/java/android/widget/ProgressBar.java @@ -20,6 +20,7 @@ import android.animation.ObjectAnimator; import android.annotation.InterpolatorRes; import android.annotation.NonNull; import android.annotation.Nullable; +import android.annotation.Px; import android.annotation.UnsupportedAppUsage; import android.content.Context; import android.content.res.ColorStateList; @@ -37,6 +38,7 @@ import android.graphics.drawable.LayerDrawable; import android.graphics.drawable.StateListDrawable; import android.graphics.drawable.shapes.RoundRectShape; import android.graphics.drawable.shapes.Shape; +import android.os.Build; import android.os.Parcel; import android.os.Parcelable; import android.util.AttributeSet; @@ -169,12 +171,24 @@ public class ProgressBar extends View { /** Duration of smooth progress animations. */ private static final int PROGRESS_ANIM_DURATION = 80; - @UnsupportedAppUsage + /** + * Outside the framework, please use {@link ProgressBar#getMinWidth()} and + * {@link ProgressBar#setMinWidth(int)} instead of accessing these directly. + */ + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) int mMinWidth; int mMaxWidth; - @UnsupportedAppUsage + /** + * Outside the framework, please use {@link ProgressBar#getMinHeight()} and + * {@link ProgressBar#setMinHeight(int)} instead of accessing these directly. + */ + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) int mMinHeight; - @UnsupportedAppUsage + /** + * Outside the framework, please use {@link ProgressBar#getMaxHeight()} ()} and + * {@link ProgressBar#setMaxHeight(int)} (int)} instead of accessing these directly. + */ + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) int mMaxHeight; private int mProgress; @@ -187,7 +201,7 @@ public class ProgressBar extends View { private int mBehavior; @UnsupportedAppUsage private int mDuration; - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) private boolean mIndeterminate; @UnsupportedAppUsage private boolean mOnlyIndeterminate; @@ -392,6 +406,74 @@ public class ProgressBar extends View { } /** + * Sets the minimum width the progress bar can have. + * @param minWidth the minimum width to be set, in pixels + * @attr ref android.R.styleable#ProgressBar_minWidth + */ + public void setMinWidth(@Px int minWidth) { + mMinWidth = minWidth; + requestLayout(); + } + + /** + * @return the minimum width the progress bar can have, in pixels + */ + @Px public int getMinWidth() { + return mMinWidth; + } + + /** + * Sets the maximum width the progress bar can have. + * @param maxWidth the maximum width to be set, in pixels + * @attr ref android.R.styleable#ProgressBar_maxWidth + */ + public void setMaxWidth(@Px int maxWidth) { + mMaxWidth = maxWidth; + requestLayout(); + } + + /** + * @return the maximum width the progress bar can have, in pixels + */ + @Px public int getMaxWidth() { + return mMaxWidth; + } + + /** + * Sets the minimum height the progress bar can have. + * @param minHeight the minimum height to be set, in pixels + * @attr ref android.R.styleable#ProgressBar_minHeight + */ + public void setMinHeight(@Px int minHeight) { + mMinHeight = minHeight; + requestLayout(); + } + + /** + * @return the minimum height the progress bar can have, in pixels + */ + @Px public int getMinHeight() { + return mMinHeight; + } + + /** + * Sets the maximum height the progress bar can have. + * @param maxHeight the maximum height to be set, in pixels + * @attr ref android.R.styleable#ProgressBar_maxHeight + */ + public void setMaxHeight(@Px int maxHeight) { + mMaxHeight = maxHeight; + requestLayout(); + } + + /** + * @return the maximum height the progress bar can have, in pixels + */ + @Px public int getMaxHeight() { + return mMaxHeight; + } + + /** * Returns {@code true} if the target drawable needs to be tileified. * * @param dr the drawable to check diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java index fc4e9ec3caad..24bc9f1e4985 100644 --- a/core/java/android/widget/ScrollView.java +++ b/core/java/android/widget/ScrollView.java @@ -111,7 +111,7 @@ public class ScrollView extends FrameLayout { * layout is dirty. This prevents the scroll from being wrong if the child has not been * laid out before requesting focus. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 123769715) private View mChildToScrollTo = null; /** @@ -1384,16 +1384,20 @@ public class ScrollView extends FrameLayout { * * @param child the View to scroll to */ - private void scrollToChild(View child) { - child.getDrawingRect(mTempRect); + public void scrollToDescendant(View child) { + if (!mIsLayoutDirty) { + child.getDrawingRect(mTempRect); - /* Offset from child's local coordinates to ScrollView coordinates */ - offsetDescendantRectToMyCoords(child, mTempRect); + /* Offset from child's local coordinates to ScrollView coordinates */ + offsetDescendantRectToMyCoords(child, mTempRect); - int scrollDelta = computeScrollDeltaToGetChildRectOnScreen(mTempRect); + int scrollDelta = computeScrollDeltaToGetChildRectOnScreen(mTempRect); - if (scrollDelta != 0) { - scrollBy(0, scrollDelta); + if (scrollDelta != 0) { + scrollBy(0, scrollDelta); + } + } else { + mChildToScrollTo = child; } } @@ -1488,7 +1492,7 @@ public class ScrollView extends FrameLayout { public void requestChildFocus(View child, View focused) { if (focused != null && focused.getRevealOnFocusHint()) { if (!mIsLayoutDirty) { - scrollToChild(focused); + scrollToDescendant(focused); } else { // The child may not be laid out yet, we can't compute the scroll yet mChildToScrollTo = focused; @@ -1569,7 +1573,7 @@ public class ScrollView extends FrameLayout { mIsLayoutDirty = false; // Give a child focus if it needs it if (mChildToScrollTo != null && isViewDescendantOf(mChildToScrollTo, this)) { - scrollToChild(mChildToScrollTo); + scrollToDescendant(mChildToScrollTo); } mChildToScrollTo = null; diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java index d790c0cab886..659b71f51588 100644 --- a/core/java/android/widget/TextView.java +++ b/core/java/android/widget/TextView.java @@ -435,8 +435,13 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener private ColorStateList mHintTextColor; private ColorStateList mLinkTextColor; @ViewDebug.ExportedProperty(category = "text") - @UnsupportedAppUsage + + /** + * {@link #setTextColor(int)} or {@link #getCurrentTextColor()} should be used instead. + */ + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P) private int mCurTextColor; + @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) private int mCurHintTextColor; private boolean mFreezesText; @@ -11235,6 +11240,22 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener } /** + * Starts {@link Activity} as a text-operation user if it is specified with + * {@link #setTextOperationUser(UserHandle)}. + * + * <p>Otherwise, just starts {@link Activity} with {@link Context#startActivity(Intent)}.</p> + * + * @param intent The description of the activity to start. + */ + void startActivityAsTextOperationUserIfNecessary(@NonNull Intent intent) { + if (mTextOperationUser != null) { + getContext().startActivityAsUser(intent, mTextOperationUser); + } else { + getContext().startActivity(intent); + } + } + + /** * This is a temporary method. Future versions may support multi-locale text. * Caveat: This method may not return the latest text services locale, but this should be * acceptable and it's more important to make this method asynchronous. diff --git a/core/java/com/android/internal/app/ChooserActivity.java b/core/java/com/android/internal/app/ChooserActivity.java index ee96ae985331..119a015cd5ea 100644 --- a/core/java/com/android/internal/app/ChooserActivity.java +++ b/core/java/com/android/internal/app/ChooserActivity.java @@ -54,6 +54,7 @@ import android.graphics.Paint; import android.graphics.Path; import android.graphics.drawable.Drawable; import android.graphics.drawable.Icon; +import android.metrics.LogMaker; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; @@ -186,9 +187,12 @@ public class ChooserActivity extends ResolverActivity { private @interface ContentPreviewType { } - private static final int CONTENT_PREVIEW_IMAGE = 0; - private static final int CONTENT_PREVIEW_FILE = 1; - private static final int CONTENT_PREVIEW_TEXT = 2; + // Starting at 1 since 0 is considered "undefined" for some of the database transformations + // of tron logs. + private static final int CONTENT_PREVIEW_IMAGE = 1; + private static final int CONTENT_PREVIEW_FILE = 2; + private static final int CONTENT_PREVIEW_TEXT = 3; + protected MetricsLogger mMetricsLogger; private final Handler mChooserHandler = new Handler() { @Override @@ -413,11 +417,12 @@ public class ChooserActivity extends ResolverActivity { } }); - MetricsLogger.action(this, MetricsEvent.ACTION_ACTIVITY_CHOOSER_SHOWN); - mChooserShownTime = System.currentTimeMillis(); final long systemCost = mChooserShownTime - intentReceivedTime; - MetricsLogger.histogram(null, "system_cost_for_smart_sharing", (int) systemCost); + + getMetricsLogger().write(new LogMaker(MetricsEvent.ACTION_ACTIVITY_CHOOSER_SHOWN) + .addTaggedData(MetricsEvent.FIELD_SHARESHEET_MIMETYPE, target.getType()) + .addTaggedData(MetricsEvent.FIELD_TIME_TO_APP_TARGETS, systemCost)); if (USE_PREDICTION_MANAGER_FOR_DIRECT_TARGETS) { final IntentFilter filter = getTargetIntentFilter(); @@ -470,6 +475,9 @@ public class ChooserActivity extends ResolverActivity { } int previewType = findPreferredContentPreview(targetIntent, getContentResolver()); + + getMetricsLogger().write(new LogMaker(MetricsEvent.ACTION_SHARE_WITH_PREVIEW) + .setSubtype(previewType)); displayContentPreview(previewType, targetIntent); } @@ -1180,6 +1188,13 @@ public class ChooserActivity extends ResolverActivity { } } + protected MetricsLogger getMetricsLogger() { + if (mMetricsLogger == null) { + mMetricsLogger = new MetricsLogger(); + } + return mMetricsLogger; + } + public class ChooserListController extends ResolverListController { public ChooserListController(Context context, PackageManager pm, @@ -1726,6 +1741,8 @@ public class ChooserActivity extends ResolverActivity { if (show != mShowServiceTargets) { mShowServiceTargets = show; notifyDataSetChanged(); + getMetricsLogger().write( + new LogMaker(MetricsEvent.ACTION_ACTIVITY_CHOOSER_SHOWN_DIRECT_TARGET)); } } @@ -1884,8 +1901,6 @@ public class ChooserActivity extends ResolverActivity { } if (startType == ChooserListAdapter.TARGET_SERVICE) { - holder.row.setBackgroundColor( - getColor(R.color.chooser_service_row_background_color)); int nextStartType = mChooserListAdapter.getPositionTargetType( getFirstRowPosition(rowPosition + 1)); int serviceSpacing = holder.row.getContext().getResources() diff --git a/core/java/com/android/internal/os/Zygote.java b/core/java/com/android/internal/os/Zygote.java index b881aef221ce..8b669d5db8df 100644 --- a/core/java/com/android/internal/os/Zygote.java +++ b/core/java/com/android/internal/os/Zygote.java @@ -99,6 +99,11 @@ public final class Zygote { */ public static final int PROFILE_FROM_SHELL = 1 << 15; + /* + * Enable using the ART app image startup cache + */ + public static final int USE_APP_IMAGE_STARTUP_CACHE = 1 << 16; + /** No external storage should be mounted. */ public static final int MOUNT_EXTERNAL_NONE = IVold.REMOUNT_MODE_NONE; /** Default external storage should be mounted. */ diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index 9f23797d6ccc..e132abd7e4cb 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -41,6 +41,7 @@ import android.system.OsConstants; import android.system.StructCapUserData; import android.system.StructCapUserHeader; import android.text.Hyphenator; +import android.text.TextUtils; import android.util.EventLog; import android.util.Log; import android.util.Slog; @@ -84,6 +85,8 @@ public class ZygoteInit { private static final String PROPERTY_DISABLE_OPENGL_PRELOADING = "ro.zygote.disable_gl_preload"; private static final String PROPERTY_GFX_DRIVER = "ro.gfx.driver.0"; + private static final String PROPERTY_USE_APP_IMAGE_STARTUP_CACHE = + "persist.device_config.runtime_native.use_app_image_startup_cache"; private static final int LOG_BOOT_PROGRESS_PRELOAD_START = 3020; private static final int LOG_BOOT_PROGRESS_PRELOAD_END = 3030; @@ -705,6 +708,13 @@ public class ZygoteInit { parsedArgs.mRuntimeFlags |= Zygote.PROFILE_SYSTEM_SERVER; } + String use_app_image_cache = SystemProperties.get( + PROPERTY_USE_APP_IMAGE_STARTUP_CACHE, ""); + // Property defaults to true currently. + if (!TextUtils.isEmpty(use_app_image_cache) && !use_app_image_cache.equals("false")) { + parsedArgs.mRuntimeFlags |= Zygote.USE_APP_IMAGE_STARTUP_CACHE; + } + /* Request to fork the system server process */ pid = Zygote.forkSystemServer( parsedArgs.mUid, parsedArgs.mGid, diff --git a/core/java/com/android/internal/util/ArrayUtils.java b/core/java/com/android/internal/util/ArrayUtils.java index 397df56a809c..b04ebec77a92 100644 --- a/core/java/com/android/internal/util/ArrayUtils.java +++ b/core/java/com/android/internal/util/ArrayUtils.java @@ -691,6 +691,15 @@ public class ArrayUtils { return result; } + public static boolean startsWith(byte[] cur, byte[] val) { + if (cur == null || val == null) return false; + if (cur.length < val.length) return false; + for (int i = 0; i < val.length; i++) { + if (cur[i] != val[i]) return false; + } + return true; + } + /** * Returns the first element from the array for which * condition {@code predicate} is true, or null if there is no such element diff --git a/core/java/com/android/internal/widget/ResolverDrawerLayout.java b/core/java/com/android/internal/widget/ResolverDrawerLayout.java index b7e656bc9278..ee8637d8c773 100644 --- a/core/java/com/android/internal/widget/ResolverDrawerLayout.java +++ b/core/java/com/android/internal/widget/ResolverDrawerLayout.java @@ -17,15 +17,12 @@ package com.android.internal.widget; -import com.android.internal.R; - import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; -import android.graphics.Color; import android.graphics.Rect; -import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; +import android.metrics.LogMaker; import android.os.Bundle; import android.os.Parcel; import android.os.Parcelable; @@ -45,8 +42,13 @@ import android.view.animation.AnimationUtils; import android.widget.AbsListView; import android.widget.OverScroller; +import com.android.internal.R; +import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.nano.MetricsProto.MetricsEvent; + public class ResolverDrawerLayout extends ViewGroup { private static final String TAG = "ResolverDrawerLayout"; + private MetricsLogger mMetricsLogger; /** * Max width of the whole drawer layout @@ -496,6 +498,9 @@ public class ResolverDrawerLayout extends ViewGroup { final boolean isCollapsedNew = newPos != 0; if (isCollapsedOld != isCollapsedNew) { onCollapsedChanged(isCollapsedNew); + getMetricsLogger().write( + new LogMaker(MetricsEvent.ACTION_SHARESHEET_COLLAPSED_CHANGED) + .setSubtype(isCollapsedNew ? 1 : 0)); } postInvalidateOnAnimation(); return dy; @@ -1037,4 +1042,11 @@ public class ResolverDrawerLayout extends ViewGroup { dispatchOnDismissed(); } } + + private MetricsLogger getMetricsLogger() { + if (mMetricsLogger == null) { + mMetricsLogger = new MetricsLogger(); + } + return mMetricsLogger; + } } diff --git a/core/java/com/android/server/backup/AccountSyncSettingsBackupHelper.java b/core/java/com/android/server/backup/AccountSyncSettingsBackupHelper.java index 1b4049212255..b4610bda2cd9 100644 --- a/core/java/com/android/server/backup/AccountSyncSettingsBackupHelper.java +++ b/core/java/com/android/server/backup/AccountSyncSettingsBackupHelper.java @@ -26,6 +26,7 @@ import android.content.Context; import android.content.SyncAdapterType; import android.os.Environment; import android.os.ParcelFileDescriptor; +import android.os.UserHandle; import android.util.Log; import org.json.JSONArray; @@ -48,6 +49,7 @@ import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; +import java.util.Set; /** * Helper for backing up account sync settings (whether or not a service should be synced). The @@ -76,15 +78,17 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper { private static final String KEY_AUTHORITY_NAME = "name"; private static final String KEY_AUTHORITY_SYNC_STATE = "syncState"; private static final String KEY_AUTHORITY_SYNC_ENABLED = "syncEnabled"; - private static final String STASH_FILE = Environment.getDataDirectory() - + "/backup/unadded_account_syncsettings.json"; + private static final String STASH_FILE = "/backup/unadded_account_syncsettings.json"; private Context mContext; private AccountManager mAccountManager; + private final int mUserId; - public AccountSyncSettingsBackupHelper(Context context) { + public AccountSyncSettingsBackupHelper(Context context, int userId) { mContext = context; mAccountManager = AccountManager.get(mContext); + + mUserId = userId; } /** @@ -94,7 +98,7 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper { public void performBackup(ParcelFileDescriptor oldState, BackupDataOutput output, ParcelFileDescriptor newState) { try { - JSONObject dataJSON = serializeAccountSyncSettingsToJSON(); + JSONObject dataJSON = serializeAccountSyncSettingsToJSON(mUserId); if (DEBUG) { Log.d(TAG, "Account sync settings JSON: " + dataJSON); @@ -123,10 +127,9 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper { /** * Fetch and serialize Account and authority information as a JSON Array. */ - private JSONObject serializeAccountSyncSettingsToJSON() throws JSONException { - Account[] accounts = mAccountManager.getAccounts(); - SyncAdapterType[] syncAdapters = ContentResolver.getSyncAdapterTypesAsUser( - mContext.getUserId()); + private JSONObject serializeAccountSyncSettingsToJSON(int userId) throws JSONException { + Account[] accounts = mAccountManager.getAccountsAsUser(userId); + SyncAdapterType[] syncAdapters = ContentResolver.getSyncAdapterTypesAsUser(userId); // Create a map of Account types to authorities. Later this will make it easier for us to // generate our JSON. @@ -146,7 +149,8 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper { // Generate JSON. JSONObject backupJSON = new JSONObject(); backupJSON.put(KEY_VERSION, JSON_FORMAT_VERSION); - backupJSON.put(KEY_MASTER_SYNC_ENABLED, ContentResolver.getMasterSyncAutomatically()); + backupJSON.put(KEY_MASTER_SYNC_ENABLED, ContentResolver.getMasterSyncAutomaticallyAsUser( + userId)); JSONArray accountJSONArray = new JSONArray(); for (Account account : accounts) { @@ -165,8 +169,9 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper { // Add authorities for this Account type and check whether or not sync is enabled. JSONArray authoritiesJSONArray = new JSONArray(); for (String authority : authorities) { - int syncState = ContentResolver.getIsSyncable(account, authority); - boolean syncEnabled = ContentResolver.getSyncAutomatically(account, authority); + int syncState = ContentResolver.getIsSyncableAsUser(account, authority, userId); + boolean syncEnabled = ContentResolver.getSyncAutomaticallyAsUser(account, authority, + userId); JSONObject authorityJSON = new JSONObject(); authorityJSON.put(KEY_AUTHORITY_NAME, authority); @@ -254,17 +259,18 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper { boolean masterSyncEnabled = dataJSON.getBoolean(KEY_MASTER_SYNC_ENABLED); JSONArray accountJSONArray = dataJSON.getJSONArray(KEY_ACCOUNTS); - boolean currentMasterSyncEnabled = ContentResolver.getMasterSyncAutomatically(); + boolean currentMasterSyncEnabled = ContentResolver.getMasterSyncAutomaticallyAsUser( + mUserId); if (currentMasterSyncEnabled) { // Disable master sync to prevent any syncs from running. - ContentResolver.setMasterSyncAutomatically(false); + ContentResolver.setMasterSyncAutomaticallyAsUser(false, mUserId); } try { - restoreFromJsonArray(accountJSONArray); + restoreFromJsonArray(accountJSONArray, mUserId); } finally { // Set the master sync preference to the value from the backup set. - ContentResolver.setMasterSyncAutomatically(masterSyncEnabled); + ContentResolver.setMasterSyncAutomaticallyAsUser(masterSyncEnabled, mUserId); } Log.i(TAG, "Restore successful."); } catch (IOException | JSONException e) { @@ -272,9 +278,9 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper { } } - private void restoreFromJsonArray(JSONArray accountJSONArray) + private void restoreFromJsonArray(JSONArray accountJSONArray, int userId) throws JSONException { - HashSet<Account> currentAccounts = getAccounts(); + Set<Account> currentAccounts = getAccounts(userId); JSONArray unaddedAccountsJSONArray = new JSONArray(); for (int i = 0; i < accountJSONArray.length(); i++) { JSONObject accountJSON = (JSONObject) accountJSONArray.get(i); @@ -292,14 +298,14 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper { // yet won't be restored. if (currentAccounts.contains(account)) { if (DEBUG) Log.i(TAG, "Restoring Sync Settings for" + accountName); - restoreExistingAccountSyncSettingsFromJSON(accountJSON); + restoreExistingAccountSyncSettingsFromJSON(accountJSON, userId); } else { unaddedAccountsJSONArray.put(accountJSON); } } if (unaddedAccountsJSONArray.length() > 0) { - try (FileOutputStream fOutput = new FileOutputStream(STASH_FILE)) { + try (FileOutputStream fOutput = new FileOutputStream(getStashFile(userId))) { String jsonString = unaddedAccountsJSONArray.toString(); DataOutputStream out = new DataOutputStream(fOutput); out.writeUTF(jsonString); @@ -308,18 +314,20 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper { Log.e(TAG, "unable to write the sync settings to the stash file", ioe); } } else { - File stashFile = new File(STASH_FILE); - if (stashFile.exists()) stashFile.delete(); + File stashFile = getStashFile(userId); + if (stashFile.exists()) { + stashFile.delete(); + } } } /** * Restore SyncSettings for all existing accounts from a stashed backup-set */ - private void accountAddedInternal() { + private void accountAddedInternal(int userId) { String jsonString; - try (FileInputStream fIn = new FileInputStream(new File(STASH_FILE))) { + try (FileInputStream fIn = new FileInputStream(getStashFile(userId))) { DataInputStream in = new DataInputStream(fIn); jsonString = in.readUTF(); } catch (FileNotFoundException fnfe) { @@ -333,7 +341,7 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper { try { JSONArray unaddedAccountsJSONArray = new JSONArray(jsonString); - restoreFromJsonArray(unaddedAccountsJSONArray); + restoreFromJsonArray(unaddedAccountsJSONArray, userId); } catch (JSONException jse) { // Malformed jsonString Log.e(TAG, "there was an error with the stashed sync settings", jse); @@ -343,9 +351,10 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper { /** * Restore SyncSettings for all existing accounts from a stashed backup-set */ - public static void accountAdded(Context context) { - AccountSyncSettingsBackupHelper helper = new AccountSyncSettingsBackupHelper(context); - helper.accountAddedInternal(); + public static void accountAdded(Context context, int userId) { + AccountSyncSettingsBackupHelper helper = new AccountSyncSettingsBackupHelper(context, + userId); + helper.accountAddedInternal(userId); } /** @@ -353,9 +362,9 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper { * * @return Accounts in a HashSet. */ - private HashSet<Account> getAccounts() { - Account[] accounts = mAccountManager.getAccounts(); - HashSet<Account> accountHashSet = new HashSet<Account>(); + private Set<Account> getAccounts(int userId) { + Account[] accounts = mAccountManager.getAccountsAsUser(userId); + Set<Account> accountHashSet = new HashSet<Account>(); for (Account account : accounts) { accountHashSet.add(account); } @@ -391,7 +400,7 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper { * initialization sync, while an adapter that the user had off will be off until the user * enables it on this device at which point it will get an initialization sync. */ - private void restoreExistingAccountSyncSettingsFromJSON(JSONObject accountJSON) + private void restoreExistingAccountSyncSettingsFromJSON(JSONObject accountJSON, int userId) throws JSONException { // Restore authorities. JSONArray authorities = accountJSON.getJSONArray(KEY_ACCOUNT_AUTHORITIES); @@ -406,14 +415,15 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper { int wasSyncable = authority.getInt(KEY_AUTHORITY_SYNC_STATE); ContentResolver.setSyncAutomaticallyAsUser( - account, authorityName, wasSyncEnabled, 0 /* user Id */); + account, authorityName, wasSyncEnabled, userId); if (!wasSyncEnabled) { - ContentResolver.setIsSyncable( + ContentResolver.setIsSyncableAsUser( account, authorityName, wasSyncable == 0 ? - 0 /* not syncable */ : 2 /* syncable but needs initialization */); + 0 /* not syncable */ : 2 /* syncable but needs initialization */, + userId); } } } @@ -422,4 +432,10 @@ public class AccountSyncSettingsBackupHelper implements BackupHelper { public void writeNewStateDescription(ParcelFileDescriptor newState) { } -}
\ No newline at end of file + + private static File getStashFile(int userId) { + File baseDir = userId == UserHandle.USER_SYSTEM ? Environment.getDataDirectory() + : Environment.getDataSystemCeDirectory(userId); + return new File(baseDir, STASH_FILE); + } +} diff --git a/core/java/com/android/server/backup/NotificationBackupHelper.java b/core/java/com/android/server/backup/NotificationBackupHelper.java index 0d225e87d77b..7d4f8f79aa63 100644 --- a/core/java/com/android/server/backup/NotificationBackupHelper.java +++ b/core/java/com/android/server/backup/NotificationBackupHelper.java @@ -18,9 +18,7 @@ package com.android.server.backup; import android.app.INotificationManager; import android.app.backup.BlobBackupHelper; -import android.content.Context; import android.os.ServiceManager; -import android.os.UserHandle; import android.util.Log; import android.util.Slog; @@ -34,9 +32,11 @@ public class NotificationBackupHelper extends BlobBackupHelper { // Key under which the payload blob is stored static final String KEY_NOTIFICATIONS = "notifications"; - public NotificationBackupHelper(Context context) { + private final int mUserId; + + public NotificationBackupHelper(int userId) { super(BLOB_VERSION, KEY_NOTIFICATIONS); - // context is currently unused + mUserId = userId; } @Override @@ -46,8 +46,7 @@ public class NotificationBackupHelper extends BlobBackupHelper { try { INotificationManager nm = INotificationManager.Stub.asInterface( ServiceManager.getService("notification")); - // TODO: http://b/22388012 - newPayload = nm.getBackupPayload(UserHandle.USER_SYSTEM); + newPayload = nm.getBackupPayload(mUserId); } catch (Exception e) { // Treat as no data Slog.e(TAG, "Couldn't communicate with notification manager"); @@ -67,8 +66,7 @@ public class NotificationBackupHelper extends BlobBackupHelper { try { INotificationManager nm = INotificationManager.Stub.asInterface( ServiceManager.getService("notification")); - // TODO: http://b/22388012 - nm.applyRestore(payload, UserHandle.USER_SYSTEM); + nm.applyRestore(payload, mUserId); } catch (Exception e) { Slog.e(TAG, "Couldn't communicate with notification manager"); } diff --git a/core/java/com/android/server/backup/SystemBackupAgent.java b/core/java/com/android/server/backup/SystemBackupAgent.java index 8878421a8016..35e8f56cf36d 100644 --- a/core/java/com/android/server/backup/SystemBackupAgent.java +++ b/core/java/com/android/server/backup/SystemBackupAgent.java @@ -81,7 +81,7 @@ public class SystemBackupAgent extends BackupAgentHelper { private static final String WALLPAPER_IMAGE_KEY = WallpaperBackupHelper.WALLPAPER_IMAGE_KEY; private static final Set<String> sEligibleForMultiUser = Sets.newArraySet( - PERMISSION_HELPER); + PERMISSION_HELPER, NOTIFICATION_HELPER, SYNC_SETTINGS_HELPER); private int mUserId = UserHandle.USER_SYSTEM; @@ -91,9 +91,9 @@ public class SystemBackupAgent extends BackupAgentHelper { mUserId = user.getIdentifier(); - addHelper(SYNC_SETTINGS_HELPER, new AccountSyncSettingsBackupHelper(this)); + addHelper(SYNC_SETTINGS_HELPER, new AccountSyncSettingsBackupHelper(this, mUserId)); addHelper(PREFERRED_HELPER, new PreferredActivityBackupHelper()); - addHelper(NOTIFICATION_HELPER, new NotificationBackupHelper(this)); + addHelper(NOTIFICATION_HELPER, new NotificationBackupHelper(mUserId)); addHelper(PERMISSION_HELPER, new PermissionBackupHelper(mUserId)); addHelper(USAGE_STATS_HELPER, new UsageStatsBackupHelper(this)); addHelper(SHORTCUT_MANAGER_HELPER, new ShortcutBackupHelper()); diff --git a/core/jni/OWNERS b/core/jni/OWNERS index 86342c47c455..774c2242e144 100644 --- a/core/jni/OWNERS +++ b/core/jni/OWNERS @@ -3,7 +3,7 @@ per-file *Camera*,*camera* = cychen@google.com, epeev@google.com, etalvala@googl per-file *Camera*,*camera* = shuzhenwang@google.com, yinchiayeh@google.com, zhijunhe@google.com # Connectivity -per-file android_net_* = ek@google.com, lorenzo@google.com, satk@google.com +per-file android_net_* = codewiz@google.com, jchalard@google.com, lorenzo@google.com, reminv@google.com, satk@google.com # Zygote per-file com_android_inernal_os_Zygote.*,fd_utils.* = chriswailes@google.com, ngeoffray@google.com, sehr@google.com, narayan@google.com, maco@google.com diff --git a/core/jni/android_net_NetUtils.cpp b/core/jni/android_net_NetUtils.cpp index 7eddcfe425d3..cfb2dd199f39 100644 --- a/core/jni/android_net_NetUtils.cpp +++ b/core/jni/android_net_NetUtils.cpp @@ -29,6 +29,7 @@ #include <net/if.h> #include <linux/filter.h> #include <linux/if_arp.h> +#include <linux/tcp.h> #include <netinet/ether.h> #include <netinet/icmp6.h> #include <netinet/ip.h> @@ -226,6 +227,34 @@ static void android_net_utils_attachControlPacketFilter( } } +static void android_net_utils_attachDropAllBPFFilter(JNIEnv *env, jobject clazz, jobject javaFd) +{ + struct sock_filter filter_code[] = { + // Reject all. + BPF_STMT(BPF_RET | BPF_K, 0) + }; + struct sock_fprog filter = { + sizeof(filter_code) / sizeof(filter_code[0]), + filter_code, + }; + + int fd = jniGetFDFromFileDescriptor(env, javaFd); + if (setsockopt(fd, SOL_SOCKET, SO_ATTACH_FILTER, &filter, sizeof(filter)) != 0) { + jniThrowExceptionFmt(env, "java/net/SocketException", + "setsockopt(SO_ATTACH_FILTER): %s", strerror(errno)); + } +} + +static void android_net_utils_detachBPFFilter(JNIEnv *env, jobject clazz, jobject javaFd) +{ + int dummy = 0; + int fd = jniGetFDFromFileDescriptor(env, javaFd); + if (setsockopt(fd, SOL_SOCKET, SO_DETACH_FILTER, &dummy, sizeof(dummy)) != 0) { + jniThrowExceptionFmt(env, "java/net/SocketException", + "setsockopt(SO_DETACH_FILTER): %s", strerror(errno)); + } + +} static void android_net_utils_setupRaSocket(JNIEnv *env, jobject clazz, jobject javaFd, jint ifIndex) { @@ -458,6 +487,41 @@ static jbyteArray android_net_utils_resNetworkResult(JNIEnv *env, jobject thiz, return answer; } +static jobject android_net_utils_getTcpRepairWindow(JNIEnv *env, jobject thiz, jobject javaFd) { + if (javaFd == NULL) { + jniThrowNullPointerException(env, NULL); + return NULL; + } + + int fd = jniGetFDFromFileDescriptor(env, javaFd); + struct tcp_repair_window trw = {}; + socklen_t size = sizeof(trw); + + // Obtain the parameters of the TCP repair window. + int rc = getsockopt(fd, IPPROTO_TCP, TCP_REPAIR_WINDOW, &trw, &size); + if (rc == -1) { + throwErrnoException(env, "getsockopt : TCP_REPAIR_WINDOW", errno); + return NULL; + } + + struct tcp_info tcpinfo = {}; + socklen_t tcpinfo_size = sizeof(tcp_info); + + // Obtain the window scale from the tcp info structure. This contains a scale factor that + // should be applied to the window size. + rc = getsockopt(fd, IPPROTO_TCP, TCP_INFO, &tcpinfo, &tcpinfo_size); + if (rc == -1) { + throwErrnoException(env, "getsockopt : TCP_INFO", errno); + return NULL; + } + + jclass class_TcpRepairWindow = env->FindClass("android/net/TcpRepairWindow"); + jmethodID ctor = env->GetMethodID(class_TcpRepairWindow, "<init>", "(IIIIII)V"); + + return env->NewObject(class_TcpRepairWindow, ctor, trw.snd_wl1, trw.snd_wnd, trw.max_window, + trw.rcv_wnd, trw.rcv_wup, tcpinfo.tcpi_rcv_wscale); +} + // ---------------------------------------------------------------------------- /* @@ -475,6 +539,9 @@ static const JNINativeMethod gNetworkUtilMethods[] = { { "attachDhcpFilter", "(Ljava/io/FileDescriptor;)V", (void*) android_net_utils_attachDhcpFilter }, { "attachRaFilter", "(Ljava/io/FileDescriptor;I)V", (void*) android_net_utils_attachRaFilter }, { "attachControlPacketFilter", "(Ljava/io/FileDescriptor;I)V", (void*) android_net_utils_attachControlPacketFilter }, + { "attachDropAllBPFFilter", "(Ljava/io/FileDescriptor;)V", (void*) android_net_utils_attachDropAllBPFFilter }, + { "detachBPFFilter", "(Ljava/io/FileDescriptor;)V", (void*) android_net_utils_detachBPFFilter }, + { "getTcpRepairWindow", "(Ljava/io/FileDescriptor;)Landroid/net/TcpRepairWindow;", (void*) android_net_utils_getTcpRepairWindow }, { "setupRaSocket", "(Ljava/io/FileDescriptor;I)V", (void*) android_net_utils_setupRaSocket }, { "resNetworkSend", "(I[BII)Ljava/io/FileDescriptor;", (void*) android_net_utils_resNetworkSend }, { "resNetworkQuery", "(ILjava/lang/String;III)Ljava/io/FileDescriptor;", (void*) android_net_utils_resNetworkQuery }, diff --git a/core/jni/android_view_ThreadedRenderer.cpp b/core/jni/android_view_ThreadedRenderer.cpp index 40529191a42c..2c058cd0d6fd 100644 --- a/core/jni/android_view_ThreadedRenderer.cpp +++ b/core/jni/android_view_ThreadedRenderer.cpp @@ -1207,7 +1207,7 @@ static void attachRenderThreadToJvm() { JavaVMAttachArgs args; args.version = JNI_VERSION_1_4; - args.name = (char*) "RenderThread"; + args.name = NULL; args.group = NULL; JNIEnv* env; mJvm->AttachCurrentThreadAsDaemon(&env, (void*) &args); diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp index 5a65028469a8..0ef4f874f583 100644 --- a/core/jni/com_android_internal_os_Zygote.cpp +++ b/core/jni/com_android_internal_os_Zygote.cpp @@ -647,6 +647,23 @@ static void MountPkgSpecificDir(const std::string& mntSourceRoot, static void PreparePkgSpecificDirs(const std::vector<std::string>& packageNames, const std::vector<std::string>& volumeLabels, bool mountAllObbs, userid_t userId, fail_fn_t fail_fn) { + if (volumeLabels.size() > 0) { + std::string sandboxDataDir = StringPrintf("/storage/%s", volumeLabels[0].c_str()); + if (volumeLabels[0] == "emulated") { + StringAppendF(&sandboxDataDir, "/%d", userId); + } + StringAppendF(&sandboxDataDir, "/Android/data/%s", packageNames[0].c_str()); + struct stat sb; + if (TEMP_FAILURE_RETRY(lstat(sandboxDataDir.c_str(), &sb)) == -1) { + if (errno == ENOENT) { + ALOGD("Sandbox not fully prepared for %s", sandboxDataDir.c_str()); + return; + } else { + fail_fn(CREATE_ERROR("Failed to lstat %s: %s", + sandboxDataDir.c_str(), strerror(errno))); + } + } + } for (auto& label : volumeLabels) { std::string mntSource = StringPrintf("/mnt/runtime/write/%s", label.c_str()); std::string mntTarget = StringPrintf("/storage/%s", label.c_str()); diff --git a/core/proto/android/providers/settings/secure.proto b/core/proto/android/providers/settings/secure.proto index f3733fdb3810..6360a5f91013 100644 --- a/core/proto/android/providers/settings/secure.proto +++ b/core/proto/android/providers/settings/secure.proto @@ -321,6 +321,7 @@ message SecureSettingsProto { optional SettingProto badging = 4 [ (android.privacy).dest = DEST_AUTOMATIC ]; optional SettingProto show_note_about_notification_hiding = 5 [ (android.privacy).dest = DEST_AUTOMATIC ]; optional SettingProto in_call_notification_enabled = 6 [ (android.privacy).dest = DEST_AUTOMATIC ]; + optional SettingProto bubbles = 7 [ (android.privacy).dest = DEST_AUTOMATIC ]; } optional Notification notification = 41; diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index c7b528c924dc..60b04cf6c77b 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -4411,8 +4411,8 @@ <permission android:name="android.permission.MONITOR_DEFAULT_SMS_PACKAGE" android:protectionLevel="signature|privileged" /> - <!-- A subclass of {@link android.app.SmsAppService} must be protected with this permission. --> - <permission android:name="android.permission.BIND_SMS_APP_SERVICE" + <!-- A subclass of {@link android.service.carrier.CarrierMessagingClientService} must be protected with this permission. --> + <permission android:name="android.permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE" android:protectionLevel="signature" /> <!-- @hide Permission that allows configuring appops. diff --git a/core/res/res/drawable-nodpi/stat_sys_adb.xml b/core/res/res/drawable-nodpi/stat_sys_adb.xml index 0fde2cc2aba4..6839e39a87d6 100644 --- a/core/res/res/drawable-nodpi/stat_sys_adb.xml +++ b/core/res/res/drawable-nodpi/stat_sys_adb.xml @@ -1,11 +1,11 @@ <!-- -Copyright (C) 2018 The Android Open Source Project +Copyright (C) 2019 The Android Open Source Project - Licensed under the Apache License, Version 2.0 (the "License"); + Licensed under the Apache License, Version 2 (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 + http://www.apache.org/licenses/LICENSE-2 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, @@ -13,24 +13,22 @@ Copyright (C) 2018 The Android Open Source Project See the License for the specific language governing permissions and limitations under the License. --> -<vector - xmlns:android="http://schemas.android.com/apk/res/android" - android:name="vector" - android:width="48dp" - android:height="48dp" - android:viewportWidth="48" - android:viewportHeight="48"> - <group android:name="stat_sys_adb"> - <path - android:name="outer" - android:pathData="M 18 30 L 24 30 C 29.523 30 34 25.523 34 20 C 34 14.477 29.523 10 24 10 C 18.477 10 14 14.477 14 20 L 14 44" - android:strokeColor="#000000" - android:strokeWidth="10"/> - <path - android:name="inner" - android:pathData="M 19 30 L 24 30 C 29.523 30 34 25.523 34 20 C 34 14.477 29.523 10 24 10 C 18.477 10 14 14.477 14 20 L 14 44" - android:strokeColor="#000000" - android:strokeAlpha="0" - android:strokeWidth="6"/> - </group> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:pathData="M12,12m-7,0a7,7,0,1,1,14,0a7,7,0,1,1,-14,0" + android:strokeColor="#FF0000" + android:strokeWidth="4"/> + <path + android:pathData="M19,19 L12,12" + android:strokeLineCap="round" + android:strokeColor="#FF0000" + android:strokeWidth="4" + android:strokeAlpha=".5"/> + <path + android:pathData="M12,12m-2,0a2,2,0,1,1,4,0a2,2,0,1,1,-4,0" + android:fillColor="#FF0000"/> </vector> diff --git a/core/res/res/drawable/autofill_dataset_picker_background.xml b/core/res/res/drawable/autofill_dataset_picker_background.xml index b5617e177feb..d57497037616 100644 --- a/core/res/res/drawable/autofill_dataset_picker_background.xml +++ b/core/res/res/drawable/autofill_dataset_picker_background.xml @@ -16,7 +16,7 @@ <inset xmlns:android="http://schemas.android.com/apk/res/android"> <shape android:shape="rectangle"> - <corners android:radius="2dp" /> + <corners android:radius="@dimen/config_bottomDialogCornerRadius" /> <solid android:color="?attr/colorBackground" /> </shape> </inset> diff --git a/core/res/res/drawable/bottomsheet_background.xml b/core/res/res/drawable/bottomsheet_background.xml new file mode 100644 index 000000000000..bc32ba6e3896 --- /dev/null +++ b/core/res/res/drawable/bottomsheet_background.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2018 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<shape android:shape="rectangle" xmlns:android="http://schemas.android.com/apk/res/android"> + <corners + android:topLeftRadius="?attr/dialogCornerRadius" + android:topRightRadius="?attr/dialogCornerRadius" /> + <solid android:color="?attr/colorBackgroundFloating" /> +</shape> diff --git a/core/res/res/drawable/ic_drag_handle.xml b/core/res/res/drawable/ic_drag_handle.xml new file mode 100644 index 000000000000..67ab84d4080d --- /dev/null +++ b/core/res/res/drawable/ic_drag_handle.xml @@ -0,0 +1,23 @@ +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<vector xmlns:android="http://schemas.android.com/apk/res/android" + android:width="24.0dp" + android:height="24.0dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:pathData="M20.0,9.0L4.0,9.0l0.0,2.0l16.0,0.0L20.0,9.0zM4.0,15.0l16.0,0.0l0.0,-2.0L4.0,13.0l0.0,2.0z"/> +</vector>
\ No newline at end of file diff --git a/core/res/res/layout/chooser_grid.xml b/core/res/res/layout/chooser_grid.xml index f78466168e13..14a5310a4ff2 100644 --- a/core/res/res/layout/chooser_grid.xml +++ b/core/res/res/layout/chooser_grid.xml @@ -25,11 +25,24 @@ android:maxCollapsedHeightSmall="56dp" android:id="@id/contentPanel"> + <RelativeLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alwaysShow="true" - android:background="?attr/colorBackgroundFloating"> + android:background="@drawable/bottomsheet_background"> + + <ImageView + android:id="@+id/drag" + android:layout_width="48dp" + android:layout_height="wrap_content" + android:src="@drawable/ic_drag_handle" + android:clickable="true" + android:paddingTop="@dimen/chooser_edge_margin_normal" + android:tint="?android:attr/textColorSecondary" + android:layout_centerHorizontal="true" + android:layout_alignParentTop="true" /> + <TextView android:id="@+id/profile_button" android:layout_width="wrap_content" android:layout_height="48dp" @@ -41,7 +54,7 @@ android:textAppearance="?attr/textAppearanceButton" android:textColor="?attr/colorAccent" android:gravity="center_vertical" - android:layout_alignParentTop="true" + android:layout_below="@id/drag" android:layout_alignParentRight="true" android:singleLine="true"/> @@ -207,7 +220,6 @@ android:clipToPadding="false" android:scrollbarStyle="outsideOverlay" android:background="?attr/colorBackgroundFloating" - android:elevation="8dp" android:listSelector="@color/transparent" android:divider="@null" android:scrollIndicators="top" @@ -219,7 +231,7 @@ android:layout_alwaysShow="true" android:background="?attr/colorBackgroundFloating" android:text="@string/noApplications" - android:padding="32dp" + android:padding="@dimen/chooser_edge_margin_normal" android:gravity="center" android:visibility="gone"/> diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml index 759fc12dadae..881688bd00c0 100644 --- a/core/res/res/values/attrs_manifest.xml +++ b/core/res/res/values/attrs_manifest.xml @@ -164,6 +164,15 @@ provider.--> <attr name="grantUriPermissions" format="boolean" /> + <!-- If true, the system will always create URI permission grants + in the cases where {@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION} + or {@link android.content.Intent#FLAG_GRANT_WRITE_URI_PERMISSION} would apply. + This is useful for a content provider that dynamically enforces permissions + on calls in to the provider, instead of through the manifest: the system + needs to know that it should always apply permission grants, even if it + looks like the target of the grant would already have access to the URI. --> + <attr name="forceUriPermissions" format="boolean" /> + <!-- Characterizes the potential risk implied in a permission and indicates the procedure the system should follow when determining whether to grant the permission to an application requesting it. {@link @@ -2199,6 +2208,7 @@ <attr name="readPermission" /> <attr name="writePermission" /> <attr name="grantUriPermissions" /> + <attr name="forceUriPermissions" /> <attr name="permission" /> <attr name="multiprocess" /> <attr name="initOrder" /> diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml index 16c074484e2c..02fae4a2c1b3 100644 --- a/core/res/res/values/colors.xml +++ b/core/res/res/values/colors.xml @@ -199,8 +199,6 @@ <color name="Red_700">#ffc53929</color> <color name="Red_800">#ffb93221</color> - <color name="chooser_service_row_background_color">#fff5f5f5</color> - <!-- Status bar color for semi transparent mode. --> <color name="system_bar_background_semi_transparent">#66000000</color> <!-- 40% black --> diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index d65ef03e98e0..9f4fece1ac74 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -2632,6 +2632,7 @@ extractor must come first --> <item>com.android.server.notification.NotificationChannelExtractor</item> <item>com.android.server.notification.NotificationAdjustmentExtractor</item> + <item>com.android.server.notification.BubbleExtractor</item> <!-- depends on AdjustmentExtractor--> <item>com.android.server.notification.ValidateNotificationPeople</item> <item>com.android.server.notification.PriorityExtractor</item> @@ -3660,6 +3661,8 @@ <dimen name="config_dialogCornerRadius">2dp</dimen> <!-- Corner radius of system buttons --> <dimen name="config_buttonCornerRadius">@dimen/control_corner_material</dimen> + <!-- Corner radius for bottom sheet system dialogs --> + <dimen name="config_bottomDialogCornerRadius">@dimen/config_dialogCornerRadius</dimen> <!-- Corner radius of system progress bars --> <dimen name="config_progressBarCornerRadius">@dimen/progress_bar_corner_material</dimen> <!-- Controls whether system buttons use all caps for text --> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index e7d8102ff83e..f84f1f1bdb4f 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -2938,6 +2938,7 @@ <public name="inheritShowWhenLocked" /> <public name="zygotePreloadName" /> <public name="useEmbeddedDex" /> + <public name="forceUriPermissions" /> </public-group> <public-group type="drawable" first-id="0x010800b4"> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 6d4b04c5e66a..401a7fec972a 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2744,7 +2744,6 @@ <java-symbol type="drawable" name="scroll_indicator_material" /> <java-symbol type="layout" name="chooser_row" /> - <java-symbol type="color" name="chooser_service_row_background_color" /> <java-symbol type="id" name="target_badge" /> <java-symbol type="bool" name="config_supportDoubleTapWake" /> <java-symbol type="drawable" name="ic_perm_device_info" /> diff --git a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java index b6f56ada445e..3d59835a6719 100644 --- a/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java +++ b/core/tests/coretests/src/com/android/internal/app/ChooserActivityTest.java @@ -27,7 +27,9 @@ import static com.android.internal.app.ChooserWrapperActivity.sOverrides; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.not; +import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.Mockito.atLeastOnce; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; @@ -43,6 +45,7 @@ import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; +import android.metrics.LogMaker; import android.net.Uri; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -51,11 +54,14 @@ import androidx.test.rule.ActivityTestRule; import com.android.internal.R; import com.android.internal.app.ResolverActivity.ResolvedComponentInfo; +import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.nano.MetricsProto; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.ArgumentCaptor; import org.mockito.Mockito; import java.util.ArrayList; @@ -66,6 +72,11 @@ import java.util.List; */ @RunWith(AndroidJUnit4.class) public class ChooserActivityTest { + + private static final int CONTENT_PREVIEW_IMAGE = 1; + private static final int CONTENT_PREVIEW_FILE = 2; + private static final int CONTENT_PREVIEW_TEXT = 3; + @Rule public ActivityTestRule<ChooserWrapperActivity> mActivityRule = new ActivityTestRule<>(ChooserWrapperActivity.class, false, @@ -402,16 +413,15 @@ public class ChooserActivityTest { createResolvedComponentsForTestWithOtherProfile(1); when(ChooserWrapperActivity.sOverrides.resolverListController.getResolversForIntent( - Mockito.anyBoolean(), - Mockito.anyBoolean(), - Mockito.isA(List.class))).thenReturn(resolvedComponentInfos); + Mockito.anyBoolean(), + Mockito.anyBoolean(), + Mockito.isA(List.class))).thenReturn(resolvedComponentInfos); final ChooserWrapperActivity activity = mActivityRule .launchActivity(Intent.createChooser(sendIntent, null)); waitForIdle(); onView(withId(R.id.copy_button)).perform(click()); - ClipboardManager clipboard = (ClipboardManager) activity.getSystemService( Context.CLIPBOARD_SERVICE); ClipData clipData = clipboard.getPrimaryClip(); @@ -488,8 +498,8 @@ public class ChooserActivityTest { List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2); when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(), - Mockito.anyBoolean(), - Mockito.isA(List.class))).thenReturn(resolvedComponentInfos); + Mockito.anyBoolean(), + Mockito.isA(List.class))).thenReturn(resolvedComponentInfos); mActivityRule.launchActivity(Intent.createChooser(sendIntent, null)); waitForIdle(); onView(withId(R.id.content_preview_image_1_large)).check(matches(isDisplayed())); @@ -498,6 +508,93 @@ public class ChooserActivityTest { onView(withId(R.id.content_preview_image_3_small)).check(matches(isDisplayed())); } + @Test + public void testOnCreateLogging() { + Intent sendIntent = createSendTextIntent(); + sendIntent.setType("TestType"); + + MetricsLogger mockLogger = sOverrides.metricsLogger; + ArgumentCaptor<LogMaker> logMakerCaptor = ArgumentCaptor.forClass(LogMaker.class); + mActivityRule.launchActivity(Intent.createChooser(sendIntent, "logger test")); + waitForIdle(); + verify(mockLogger, atLeastOnce()).write(logMakerCaptor.capture()); + assertThat(logMakerCaptor.getAllValues().get(0).getCategory(), + is(MetricsProto.MetricsEvent.ACTION_ACTIVITY_CHOOSER_SHOWN)); + assertThat(logMakerCaptor + .getAllValues().get(0) + .getTaggedData(MetricsProto.MetricsEvent.FIELD_TIME_TO_APP_TARGETS), + is(notNullValue())); + assertThat(logMakerCaptor + .getAllValues().get(0) + .getTaggedData(MetricsProto.MetricsEvent.FIELD_SHARESHEET_MIMETYPE), + is("TestType")); + } + + @Test + public void testEmptyPreviewLogging() { + Intent sendIntent = createSendTextIntentWithPreview(null, null); + + MetricsLogger mockLogger = sOverrides.metricsLogger; + ArgumentCaptor<LogMaker> logMakerCaptor = ArgumentCaptor.forClass(LogMaker.class); + mActivityRule.launchActivity(Intent.createChooser(sendIntent, "empty preview logger test")); + waitForIdle(); + verify(mockLogger, Mockito.times(2)).write(logMakerCaptor.capture()); + // First invocation is from onCreate + assertThat(logMakerCaptor.getAllValues().get(1).getCategory(), + is(MetricsProto.MetricsEvent.ACTION_SHARE_WITH_PREVIEW)); + assertThat(logMakerCaptor.getAllValues().get(1).getSubtype(), + is(CONTENT_PREVIEW_TEXT)); + } + + @Test + public void testTitlePreviewLogging() { + Intent sendIntent = createSendTextIntentWithPreview("TestTitle", null); + + MetricsLogger mockLogger = sOverrides.metricsLogger; + ArgumentCaptor<LogMaker> logMakerCaptor = ArgumentCaptor.forClass(LogMaker.class); + mActivityRule.launchActivity(Intent.createChooser(sendIntent, null)); + waitForIdle(); + verify(mockLogger, Mockito.times(2)).write(logMakerCaptor.capture()); + // First invocation is from onCreate + assertThat(logMakerCaptor.getAllValues().get(1).getCategory(), + is(MetricsProto.MetricsEvent.ACTION_SHARE_WITH_PREVIEW)); + assertThat(logMakerCaptor.getAllValues().get(1).getSubtype(), + is(CONTENT_PREVIEW_TEXT)); + } + + @Test + public void testImagePreviewLogging() { + Uri uri = Uri.parse("android.resource://com.android.frameworks.coretests/" + + com.android.frameworks.coretests.R.drawable.test320x240); + + ArrayList<Uri> uris = new ArrayList<>(); + uris.add(uri); + + Intent sendIntent = createSendImageIntentWithPreview(uris); + sOverrides.previewThumbnail = createBitmap(); + + List<ResolvedComponentInfo> resolvedComponentInfos = createResolvedComponentsForTest(2); + + when(sOverrides.resolverListController.getResolversForIntent(Mockito.anyBoolean(), + Mockito.anyBoolean(), + Mockito.isA(List.class))).thenReturn(resolvedComponentInfos); + + MetricsLogger mockLogger = sOverrides.metricsLogger; + ArgumentCaptor<LogMaker> logMakerCaptor = ArgumentCaptor.forClass(LogMaker.class); + mActivityRule.launchActivity(Intent.createChooser(sendIntent, null)); + waitForIdle(); + verify(mockLogger, Mockito.times(3)).write(logMakerCaptor.capture()); + // First invocation is from onCreate + assertThat(logMakerCaptor.getAllValues().get(1).getCategory(), + is(MetricsProto.MetricsEvent.ACTION_SHARE_WITH_PREVIEW)); + assertThat(logMakerCaptor.getAllValues().get(1).getSubtype(), + is(CONTENT_PREVIEW_IMAGE)); + assertThat(logMakerCaptor.getAllValues().get(2).getCategory(), + is(MetricsProto.MetricsEvent.ACTION_SHARE_WITH_PREVIEW)); + assertThat(logMakerCaptor.getAllValues().get(2).getSubtype(), + is(CONTENT_PREVIEW_IMAGE)); + } + private Intent createSendTextIntent() { Intent sendIntent = new Intent(); sendIntent.setAction(Intent.ACTION_SEND); diff --git a/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java b/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java index ec8122fb2e47..f60467bd3df2 100644 --- a/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java +++ b/core/tests/coretests/src/com/android/internal/app/ChooserWrapperActivity.java @@ -25,6 +25,8 @@ import android.graphics.Bitmap; import android.net.Uri; import android.util.Size; +import com.android.internal.logging.MetricsLogger; + import java.util.function.Function; public class ChooserWrapperActivity extends ChooserActivity { @@ -94,6 +96,11 @@ public class ChooserWrapperActivity extends ChooserActivity { return super.isImageType(mimeType); } + @Override + protected MetricsLogger getMetricsLogger() { + return sOverrides.metricsLogger; + } + /** * We cannot directly mock the activity created since instrumentation creates it. * <p> @@ -106,6 +113,7 @@ public class ChooserWrapperActivity extends ChooserActivity { public ResolverListController resolverListController; public Boolean isVoiceInteraction; public Bitmap previewThumbnail; + public MetricsLogger metricsLogger; public void reset() { onSafelyStartCallback = null; @@ -113,6 +121,7 @@ public class ChooserWrapperActivity extends ChooserActivity { createPackageManager = null; previewThumbnail = null; resolverListController = mock(ResolverListController.class); + metricsLogger = mock(MetricsLogger.class); } } } diff --git a/graphics/java/android/graphics/FontFamily.java b/graphics/java/android/graphics/FontFamily.java index 229923ca8202..5d8ba938f6d5 100644 --- a/graphics/java/android/graphics/FontFamily.java +++ b/graphics/java/android/graphics/FontFamily.java @@ -36,7 +36,10 @@ import java.nio.channels.FileChannel; * A family of typefaces with different styles. * * @hide + * + * @deprecated Use {@link android.graphics.fonts.FontFamily} instead. */ +@Deprecated public class FontFamily { private static String TAG = "FontFamily"; @@ -51,20 +54,28 @@ public class FontFamily { /** * @hide + * + * This cannot be deleted because it's in use by AndroidX. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(trackingBug = 123768928) public long mNativePtr; // Points native font family builder. Must be zero after freezing this family. private long mBuilderPtr; - @UnsupportedAppUsage + /** + * This cannot be deleted because it's in use by AndroidX. + */ + @UnsupportedAppUsage(trackingBug = 123768928) public FontFamily() { mBuilderPtr = nInitBuilder(null, 0); mNativeBuilderCleaner = sBuilderRegistry.registerNativeAllocation(this, mBuilderPtr); } - @UnsupportedAppUsage + /** + * This cannot be deleted because it's in use by AndroidX. + */ + @UnsupportedAppUsage(trackingBug = 123768928) public FontFamily(@Nullable String[] langs, int variant) { final String langsString; if (langs == null || langs.length == 0) { @@ -83,8 +94,10 @@ public class FontFamily { * * @return boolean returns false if some error happens in native code, e.g. broken font file is * passed, etc. + * + * This cannot be deleted because it's in use by AndroidX. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(trackingBug = 123768928) public boolean freeze() { if (mBuilderPtr == 0) { throw new IllegalStateException("This FontFamily is already frozen"); @@ -98,7 +111,10 @@ public class FontFamily { return mNativePtr != 0; } - @UnsupportedAppUsage + /** + * This cannot be deleted because it's in use by AndroidX. + */ + @UnsupportedAppUsage(trackingBug = 123768928) public void abortCreation() { if (mBuilderPtr == 0) { throw new IllegalStateException("This FontFamily is already frozen or abandoned"); @@ -107,6 +123,10 @@ public class FontFamily { mBuilderPtr = 0; } + /** + * This cannot be deleted because it's in use by AndroidX. + */ + @UnsupportedAppUsage(trackingBug = 123768928) public boolean addFont(String path, int ttcIndex, FontVariationAxis[] axes, int weight, int italic) { if (mBuilderPtr == 0) { @@ -128,7 +148,10 @@ public class FontFamily { } } - @UnsupportedAppUsage + /** + * This cannot be deleted because it's in use by AndroidX. + */ + @UnsupportedAppUsage(trackingBug = 123768928) public boolean addFontFromBuffer(ByteBuffer font, int ttcIndex, FontVariationAxis[] axes, int weight, int italic) { if (mBuilderPtr == 0) { @@ -153,8 +176,10 @@ public class FontFamily { * @param isItalic Whether this font is italic. If the weight is set to 0, this will be resolved * using the OS/2 table in the font. * @return + * + * This cannot be deleted because it's in use by AndroidX. */ - @UnsupportedAppUsage + @UnsupportedAppUsage(trackingBug = 123768928) public boolean addFontFromAssetManager(AssetManager mgr, String path, int cookie, boolean isAsset, int ttcIndex, int weight, int isItalic, FontVariationAxis[] axes) { diff --git a/graphics/java/android/graphics/Typeface.java b/graphics/java/android/graphics/Typeface.java index 91b9e24aaa66..bb04ff3cc9ff 100644 --- a/graphics/java/android/graphics/Typeface.java +++ b/graphics/java/android/graphics/Typeface.java @@ -131,7 +131,11 @@ public class Typeface { static final Map<String, Typeface> sSystemFontMap; // We cannot support sSystemFallbackMap since we will migrate to public FontFamily API. + /** + * @deprecated Use {@link android.graphics.fonts.FontFamily} instead. + */ @UnsupportedAppUsage + @Deprecated static final Map<String, android.graphics.FontFamily[]> sSystemFallbackMap = Collections.emptyMap(); @@ -1025,8 +1029,11 @@ public class Typeface { /** * This method is used by supportlib-v27. + * + * @deprecated Use {@link android.graphics.fonts.FontFamily} instead. */ @UnsupportedAppUsage(trackingBug = 123768395) + @Deprecated private static Typeface createFromFamiliesWithDefault( android.graphics.FontFamily[] families, int weight, int italic) { return createFromFamiliesWithDefault(families, DEFAULT_FAMILY, weight, italic); @@ -1044,8 +1051,11 @@ public class Typeface { * the first family's font is used. If the first family has multiple fonts, the * closest to the regular weight and upright font is used. * @param families array of font families + * + * @deprecated Use {@link android.graphics.fonts.FontFamily} instead. */ @UnsupportedAppUsage + @Deprecated private static Typeface createFromFamiliesWithDefault(android.graphics.FontFamily[] families, String fallbackName, int weight, int italic) { android.graphics.fonts.FontFamily[] fallback = SystemFonts.getSystemFallback(fallbackName); diff --git a/libs/androidfw/LoadedArsc.cpp b/libs/androidfw/LoadedArsc.cpp index 70ce9bc705ef..bdd47061054a 100644 --- a/libs/androidfw/LoadedArsc.cpp +++ b/libs/androidfw/LoadedArsc.cpp @@ -633,6 +633,7 @@ std::unique_ptr<const LoadedPackage> LoadedPackage::Load(const Chunk& chunk, overlayable_info.actor = actor; overlayable_info.policy_flags = policy_header->policy_flags; loaded_package->overlayable_infos_.push_back(std::make_pair(overlayable_info, ids)); + loaded_package->defines_overlayable_ = true; break; } diff --git a/libs/androidfw/include/androidfw/LoadedArsc.h b/libs/androidfw/include/androidfw/LoadedArsc.h index be62f30617bf..b5f4006dbb00 100644 --- a/libs/androidfw/include/androidfw/LoadedArsc.h +++ b/libs/androidfw/include/androidfw/LoadedArsc.h @@ -223,7 +223,7 @@ class LoadedPackage { } } - // Retrieve the overlayable properties of the specified resource. If the resource is not + // Retrieves the overlayable properties of the specified resource. If the resource is not // overlayable, this will return a null pointer. const OverlayableInfo* GetOverlayableInfo(uint32_t resid) const { for (const std::pair<OverlayableInfo, std::unordered_set<uint32_t>>& overlayable_info_ids @@ -235,6 +235,13 @@ class LoadedPackage { return nullptr; } + // Retrieves whether or not the package defines overlayable resources. + // TODO(123905379): Remove this when the enforcement of overlayable is turned on for all APK and + // not just those that defined overlayable resources. + bool DefinesOverlayable() const { + return defines_overlayable_; + } + private: DISALLOW_COPY_AND_ASSIGN(LoadedPackage); @@ -248,6 +255,7 @@ class LoadedPackage { bool dynamic_ = false; bool system_ = false; bool overlay_ = false; + bool defines_overlayable_ = false; ByteBucketArray<TypeSpecPtr> type_specs_; ByteBucketArray<uint32_t> resource_ids_; diff --git a/libs/hwui/hwui/MinikinSkia.cpp b/libs/hwui/hwui/MinikinSkia.cpp index 375f5bc9df37..6a12a203b9f8 100644 --- a/libs/hwui/hwui/MinikinSkia.cpp +++ b/libs/hwui/hwui/MinikinSkia.cpp @@ -65,6 +65,15 @@ float MinikinFontSkia::GetHorizontalAdvance(uint32_t glyph_id, const minikin::Mi return skWidth; } +void MinikinFontSkia::GetHorizontalAdvances(uint16_t* glyph_ids, uint32_t count, + const minikin::MinikinPaint& paint, + const minikin::FontFakery& fakery, + float* outAdvances) const { + SkFont skFont; + MinikinFontSkia_SetSkiaFont(this, &skFont, paint, fakery); + skFont.getWidths(glyph_ids, count, outAdvances); +} + void MinikinFontSkia::GetBounds(minikin::MinikinRect* bounds, uint32_t glyph_id, const minikin::MinikinPaint& paint, const minikin::FontFakery& fakery) const { diff --git a/libs/hwui/hwui/MinikinSkia.h b/libs/hwui/hwui/MinikinSkia.h index ad46b2391cac..90f7d48a47ee 100644 --- a/libs/hwui/hwui/MinikinSkia.h +++ b/libs/hwui/hwui/MinikinSkia.h @@ -35,6 +35,11 @@ public: float GetHorizontalAdvance(uint32_t glyph_id, const minikin::MinikinPaint& paint, const minikin::FontFakery& fakery) const override; + void GetHorizontalAdvances(uint16_t* glyph_ids, uint32_t count, + const minikin::MinikinPaint& paint, + const minikin::FontFakery& fakery, + float* outAdvances) const override; + void GetBounds(minikin::MinikinRect* bounds, uint32_t glyph_id, const minikin::MinikinPaint& paint, const minikin::FontFakery& fakery) const override; diff --git a/libs/hwui/renderthread/RenderThread.cpp b/libs/hwui/renderthread/RenderThread.cpp index 3b37c83a6acc..1f24f0e64eab 100644 --- a/libs/hwui/renderthread/RenderThread.cpp +++ b/libs/hwui/renderthread/RenderThread.cpp @@ -56,7 +56,7 @@ static const nsecs_t DISPATCH_FRAME_CALLBACKS_DELAY = milliseconds_to_nanosecond static bool gHasRenderThreadInstance = false; -static void (*gOnStartHook)() = nullptr; +static JVMAttachHook gOnStartHook = nullptr; class DisplayEventReceiverWrapper : public VsyncSource { public: @@ -111,11 +111,15 @@ bool RenderThread::hasInstance() { return gHasRenderThreadInstance; } -void RenderThread::setOnStartHook(void (*onStartHook)()) { +void RenderThread::setOnStartHook(JVMAttachHook onStartHook) { LOG_ALWAYS_FATAL_IF(hasInstance(), "can't set an onStartHook after we've started..."); gOnStartHook = onStartHook; } +JVMAttachHook RenderThread::getOnStartHook() { + return gOnStartHook; +} + RenderThread& RenderThread::getInstance() { // This is a pointer because otherwise __cxa_finalize // will try to delete it like a Good Citizen but that causes us to crash diff --git a/libs/hwui/renderthread/RenderThread.h b/libs/hwui/renderthread/RenderThread.h index 1ef83fb26c14..d062dba288fc 100644 --- a/libs/hwui/renderthread/RenderThread.h +++ b/libs/hwui/renderthread/RenderThread.h @@ -75,12 +75,15 @@ struct VsyncSource { class DummyVsyncSource; +typedef void (*JVMAttachHook)(); + class RenderThread : private ThreadBase { PREVENT_COPY_AND_ASSIGN(RenderThread); public: // Sets a callback that fires before any RenderThread setup has occurred. - ANDROID_API static void setOnStartHook(void (*onStartHook)()); + ANDROID_API static void setOnStartHook(JVMAttachHook onStartHook); + static JVMAttachHook getOnStartHook(); WorkQueue& queue() { return ThreadBase::queue(); } diff --git a/libs/hwui/thread/TaskManager.cpp b/libs/hwui/thread/TaskManager.cpp index 26ff6ebad3b4..6493d495716e 100644 --- a/libs/hwui/thread/TaskManager.cpp +++ b/libs/hwui/thread/TaskManager.cpp @@ -21,6 +21,7 @@ #include "TaskManager.h" #include "TaskProcessor.h" #include "utils/MathUtils.h" +#include "renderthread/RenderThread.h" namespace android { namespace uirenderer { @@ -84,6 +85,11 @@ bool TaskManager::addTaskBase(const sp<TaskBase>& task, const sp<TaskProcessorBa status_t TaskManager::WorkerThread::readyToRun() { setpriority(PRIO_PROCESS, 0, PRIORITY_FOREGROUND); + auto onStartHook = renderthread::RenderThread::getOnStartHook(); + if (onStartHook) { + onStartHook(); + } + return NO_ERROR; } diff --git a/libs/hwui/thread/TaskManager.h b/libs/hwui/thread/TaskManager.h index c4c1291e755c..6c67222a12d7 100644 --- a/libs/hwui/thread/TaskManager.h +++ b/libs/hwui/thread/TaskManager.h @@ -77,7 +77,8 @@ private: class WorkerThread : public Thread { public: - explicit WorkerThread(const String8& name) : mSignal(Condition::WAKE_UP_ONE), mName(name) {} + explicit WorkerThread(const String8& name) + : Thread(false), mSignal(Condition::WAKE_UP_ONE), mName(name) {} bool addTask(const TaskWrapper& task); size_t getTaskCount() const; diff --git a/media/apex/java/android/media/MediaPlayer2.java b/media/apex/java/android/media/MediaPlayer2.java index f7afa31e6173..c38a83131a6c 100644 --- a/media/apex/java/android/media/MediaPlayer2.java +++ b/media/apex/java/android/media/MediaPlayer2.java @@ -63,6 +63,8 @@ import java.net.URL; import java.nio.ByteOrder; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; +import java.util.Collections; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; @@ -414,6 +416,7 @@ public class MediaPlayer2 implements AutoCloseable synchronized (mDrmEventCallbackLock) { mDrmEventCallback = null; } + clearMediaDrmObjects(); native_release(); @@ -424,6 +427,16 @@ public class MediaPlayer2 implements AutoCloseable mReleased = true; } + void clearMediaDrmObjects() { + Collection<MediaDrm> drmObjs = mDrmObjs.values(); + synchronized (mDrmObjs) { + for (MediaDrm drmObj : drmObjs) { + drmObj.close(); + } + mDrmObjs.clear(); + } + } + private native void native_release(); // Have to declare protected for finalize() since it is protected @@ -448,6 +461,7 @@ public class MediaPlayer2 implements AutoCloseable // This is a synchronous call. public void reset() { clearSourceInfos(); + clearMediaDrmObjects(); stayAwake(false); native_reset(); @@ -4510,7 +4524,7 @@ public class MediaPlayer2 implements AutoCloseable }; // Modular DRM - private final Map<UUID, MediaDrm> mDrmObjs = new HashMap<>(); + private final Map<UUID, MediaDrm> mDrmObjs = Collections.synchronizedMap(new HashMap<>()); private class DrmHandle { static final int PROVISION_TIMEOUT_MS = 60000; @@ -4897,10 +4911,6 @@ public class MediaPlayer2 implements AutoCloseable mDrmObj.closeSession(mDrmSessionId); mDrmSessionId = null; } - if (mDrmObj != null) { - mDrmObj.close(); - mDrmObj = null; - } } void release() throws NoDrmSchemeException { diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java index b9088d417dad..31d22327c79f 100644 --- a/media/java/android/media/ExifInterface.java +++ b/media/java/android/media/ExifInterface.java @@ -31,6 +31,8 @@ import android.system.OsConstants; import android.util.Log; import android.util.Pair; +import com.android.internal.util.ArrayUtils; + import libcore.io.IoUtils; import libcore.io.Streams; @@ -395,6 +397,12 @@ public class ExifInterface { * http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/PanasonicRaw.html */ public static final String TAG_RW2_JPG_FROM_RAW = "JpgFromRaw"; + /** + * Type is byte[]. See <a href= + * "https://en.wikipedia.org/wiki/Extensible_Metadata_Platform">Extensible + * Metadata Platform (XMP)</a> for details on contents. + */ + public static final String TAG_XMP = "Xmp"; /** * Private tags used for pointing the other IFD offsets. @@ -1012,7 +1020,8 @@ public class ExifInterface { new ExifTag(TAG_RW2_SENSOR_BOTTOM_BORDER, 6, IFD_FORMAT_ULONG), new ExifTag(TAG_RW2_SENSOR_RIGHT_BORDER, 7, IFD_FORMAT_ULONG), new ExifTag(TAG_RW2_ISO, 23, IFD_FORMAT_USHORT), - new ExifTag(TAG_RW2_JPG_FROM_RAW, 46, IFD_FORMAT_UNDEFINED) + new ExifTag(TAG_RW2_JPG_FROM_RAW, 46, IFD_FORMAT_UNDEFINED), + new ExifTag(TAG_XMP, 700, IFD_FORMAT_BYTE), }; // Primary image IFD Exif Private tags (See JEITA CP-3451C Section 4.6.8 Tag Support Levels) @@ -1243,6 +1252,8 @@ public class ExifInterface { private static final Charset ASCII = Charset.forName("US-ASCII"); // Identifier for EXIF APP1 segment in JPEG private static final byte[] IDENTIFIER_EXIF_APP1 = "Exif\0\0".getBytes(ASCII); + // Identifier for XMP APP1 segment in JPEG + private static final byte[] IDENTIFIER_XMP_APP1 = "http://ns.adobe.com/xap/1.0/\0".getBytes(ASCII); // JPEG segment markers, that each marker consumes two bytes beginning with 0xff and ending with // the indicator. There is no SOF4, SOF8, SOF16 markers in JPEG and SOFx markers indicates start // of frame(baseline DCT) and the image size info exists in its beginning part. @@ -2046,6 +2057,22 @@ public class ExifInterface { } /** + * Returns the raw bytes for the value of the requested tag inside the image + * file, or {@code null} if the tag is not contained. + * + * @return raw bytes for the value of the requested tag, or {@code null} if + * no tag was found. + */ + public @Nullable byte[] getAttributeBytes(@NonNull String tag) { + final ExifAttribute attribute = getExifAttribute(tag); + if (attribute != null) { + return attribute.bytes; + } else { + return null; + } + } + + /** * Stores the latitude and longitude value in a float array. The first element is * the latitude, and the second element is the longitude. Returns false if the * Exif tags are not available. @@ -2432,40 +2459,32 @@ public class ExifInterface { } switch (marker) { case MARKER_APP1: { - if (DEBUG) { - Log.d(TAG, "MARKER_APP1"); - } - if (length < 6) { - // Skip if it's not an EXIF APP1 segment. - break; - } - byte[] identifier = new byte[6]; - if (in.read(identifier) != 6) { - throw new IOException("Invalid exif"); - } - bytesRead += 6; - length -= 6; - if (!Arrays.equals(identifier, IDENTIFIER_EXIF_APP1)) { - // Skip if it's not an EXIF APP1 segment. - break; - } - if (length <= 0) { - throw new IOException("Invalid exif"); - } - if (DEBUG) { - Log.d(TAG, "readExifSegment with a byte array (length: " + length + ")"); - } - // Save offset values for createJpegThumbnailBitmap() function - mExifOffset = bytesRead; - - byte[] bytes = new byte[length]; - if (in.read(bytes) != length) { - throw new IOException("Invalid exif"); - } + final int start = bytesRead; + final byte[] bytes = new byte[length]; + in.readFully(bytes); bytesRead += length; length = 0; - readExifSegment(bytes, imageType); + if (ArrayUtils.startsWith(bytes, IDENTIFIER_EXIF_APP1)) { + final long offset = start + IDENTIFIER_EXIF_APP1.length; + final byte[] value = Arrays.copyOfRange(bytes, + IDENTIFIER_EXIF_APP1.length, bytes.length); + + readExifSegment(value, imageType); + + // Save offset values for createJpegThumbnailBitmap() function + mExifOffset = (int) offset; + } else if (ArrayUtils.startsWith(bytes, IDENTIFIER_XMP_APP1)) { + // See XMP Specification Part 3: Storage in Files, 1.1.3 JPEG, Table 6 + final long offset = start + IDENTIFIER_XMP_APP1.length; + final byte[] value = Arrays.copyOfRange(bytes, + IDENTIFIER_XMP_APP1.length, bytes.length); + + if (getAttribute(TAG_XMP) == null) { + mAttributes[IFD_TYPE_PRIMARY].put(TAG_XMP, new ExifAttribute( + IFD_FORMAT_BYTE, value.length, offset, value)); + } + } break; } diff --git a/media/java/android/media/MediaFormat.java b/media/java/android/media/MediaFormat.java index 4ca0216c80f2..a76cf1f6ba25 100644 --- a/media/java/android/media/MediaFormat.java +++ b/media/java/android/media/MediaFormat.java @@ -470,7 +470,6 @@ public final class MediaFormat { * The associated value is a float, representing the max frame rate to * feed the encoder at. * - * @hide */ public static final String KEY_MAX_FPS_TO_ENCODER = "max-fps-to-encoder"; @@ -495,7 +494,6 @@ public final class MediaFormat { * important to ensure all frames are captured (rather than captured in the * correct order). * - * @hide */ public static final String KEY_MAX_PTS_GAP_TO_ENCODER = "max-pts-gap-to-encoder"; diff --git a/packages/ExtServices/src/android/ext/services/notification/NotificationCategorizer.java b/packages/ExtServices/src/android/ext/services/notification/NotificationCategorizer.java index 7ba0f7ac1d30..f95891cc8962 100644 --- a/packages/ExtServices/src/android/ext/services/notification/NotificationCategorizer.java +++ b/packages/ExtServices/src/android/ext/services/notification/NotificationCategorizer.java @@ -15,6 +15,7 @@ */ package android.ext.services.notification; +import static android.app.NotificationManager.IMPORTANCE_DEFAULT; import static android.app.NotificationManager.IMPORTANCE_HIGH; import static android.app.NotificationManager.IMPORTANCE_MIN; @@ -91,7 +92,7 @@ public class NotificationCategorizer { } // TODO: is from signature app if (entry.getSbn().getUid() < Process.FIRST_APPLICATION_UID) { - if (entry.getImportance() >= IMPORTANCE_HIGH) { + if (entry.getImportance() >= IMPORTANCE_DEFAULT) { return CATEGORY_SYSTEM; } else { return CATEGORY_SYSTEM_LOW; diff --git a/packages/ExtServices/tests/src/android/ext/services/notification/NotificationCategorizerTest.java b/packages/ExtServices/tests/src/android/ext/services/notification/NotificationCategorizerTest.java index c59885e9f4d2..05af6e7a7b71 100644 --- a/packages/ExtServices/tests/src/android/ext/services/notification/NotificationCategorizerTest.java +++ b/packages/ExtServices/tests/src/android/ext/services/notification/NotificationCategorizerTest.java @@ -18,6 +18,7 @@ package android.ext.services.notification; import static android.app.NotificationManager.IMPORTANCE_DEFAULT; import static android.app.NotificationManager.IMPORTANCE_HIGH; +import static android.app.NotificationManager.IMPORTANCE_LOW; import static android.app.NotificationManager.IMPORTANCE_MIN; import static android.os.Process.FIRST_APPLICATION_UID; @@ -172,23 +173,23 @@ public class NotificationCategorizerTest { public void testSystemCategory() { NotificationCategorizer nc = new NotificationCategorizer(); - when(mEntry.getChannel()).thenReturn(new NotificationChannel("", "", IMPORTANCE_HIGH)); - when(mEntry.getImportance()).thenReturn(IMPORTANCE_HIGH); + when(mEntry.getChannel()).thenReturn(new NotificationChannel("", "", IMPORTANCE_DEFAULT)); + when(mEntry.getImportance()).thenReturn(IMPORTANCE_DEFAULT); when(mSbn.getUid()).thenReturn(FIRST_APPLICATION_UID - 1); assertEquals(NotificationCategorizer.CATEGORY_SYSTEM, nc.getCategory(mEntry)); assertFalse(nc.shouldSilence(NotificationCategorizer.CATEGORY_SYSTEM)); when(mSbn.getUid()).thenReturn(FIRST_APPLICATION_UID); - assertEquals(NotificationCategorizer.CATEGORY_HIGH, nc.getCategory(mEntry)); + assertEquals(NotificationCategorizer.CATEGORY_EVERYTHING_ELSE, nc.getCategory(mEntry)); } @Test public void testSystemLowCategory() { NotificationCategorizer nc = new NotificationCategorizer(); - when(mEntry.getChannel()).thenReturn(new NotificationChannel("", "", IMPORTANCE_DEFAULT)); - when(mEntry.getImportance()).thenReturn(IMPORTANCE_DEFAULT); + when(mEntry.getChannel()).thenReturn(new NotificationChannel("", "", IMPORTANCE_LOW)); + when(mEntry.getImportance()).thenReturn(IMPORTANCE_LOW); when(mSbn.getUid()).thenReturn(FIRST_APPLICATION_UID - 1); assertEquals(NotificationCategorizer.CATEGORY_SYSTEM_LOW, nc.getCategory(mEntry)); diff --git a/packages/NetworkStack/OWNERS b/packages/NetworkStack/OWNERS new file mode 100644 index 000000000000..a395465e5f21 --- /dev/null +++ b/packages/NetworkStack/OWNERS @@ -0,0 +1,5 @@ +codewiz@google.com +jchalard@google.com +lorenzo@google.com +reminv@google.com +satk@google.com diff --git a/packages/NetworkStack/src/android/net/apf/ApfFilter.java b/packages/NetworkStack/src/android/net/apf/ApfFilter.java index 4fa7d6462092..923f162c92a6 100644 --- a/packages/NetworkStack/src/android/net/apf/ApfFilter.java +++ b/packages/NetworkStack/src/android/net/apf/ApfFilter.java @@ -23,6 +23,7 @@ import static android.system.OsConstants.ETH_P_ARP; import static android.system.OsConstants.ETH_P_IP; import static android.system.OsConstants.ETH_P_IPV6; import static android.system.OsConstants.IPPROTO_ICMPV6; +import static android.system.OsConstants.IPPROTO_TCP; import static android.system.OsConstants.IPPROTO_UDP; import static android.system.OsConstants.SOCK_RAW; @@ -38,6 +39,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.net.LinkAddress; import android.net.LinkProperties; +import android.net.TcpKeepalivePacketDataParcelable; import android.net.apf.ApfGenerator.IllegalInstructionException; import android.net.apf.ApfGenerator.Register; import android.net.ip.IpClient.IpClientCallbacksWrapper; @@ -55,6 +57,7 @@ import android.system.Os; import android.text.format.DateUtils; import android.util.Log; import android.util.Pair; +import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; @@ -149,7 +152,9 @@ public class ApfFilter { DROPPED_IPV6_NON_ICMP_MULTICAST, DROPPED_802_3_FRAME, DROPPED_ETHERTYPE_BLACKLISTED, - DROPPED_ARP_REPLY_SPA_NO_HOST; + DROPPED_ARP_REPLY_SPA_NO_HOST, + DROPPED_IPV4_KEEPALIVE_ACK, + DROPPED_IPV6_KEEPALIVE_ACK; // Returns the negative byte offset from the end of the APF data segment for // a given counter. @@ -285,6 +290,7 @@ public class ApfFilter { private static final int IPV4_DEST_ADDR_OFFSET = ETH_HEADER_LEN + 16; private static final int IPV4_ANY_HOST_ADDRESS = 0; private static final int IPV4_BROADCAST_ADDRESS = -1; // 255.255.255.255 + private static final int IPV4_HEADER_LEN = 20; // Without options // Traffic class and Flow label are not byte aligned. Luckily we // don't care about either value so we'll consider bytes 1-3 of the @@ -305,6 +311,8 @@ public class ApfFilter { private static final int UDP_DESTINATION_PORT_OFFSET = ETH_HEADER_LEN + 2; private static final int UDP_HEADER_LEN = 8; + private static final int TCP_HEADER_SIZE_OFFSET = 12; + private static final int DHCP_CLIENT_PORT = 68; // NOTE: this must be added to the IPv4 header length in IPV4_HEADER_SIZE_MEMORY_SLOT private static final int DHCP_CLIENT_MAC_OFFSET = ETH_HEADER_LEN + UDP_HEADER_LEN + 28; @@ -788,7 +796,7 @@ public class ApfFilter { boolean isExpired() { // TODO: We may want to handle 0 lifetime RAs differently, if they are common. We'll - // have to calculte the filter lifetime specially as a fraction of 0 is still 0. + // have to calculate the filter lifetime specially as a fraction of 0 is still 0. return currentLifetime() <= 0; } @@ -847,11 +855,147 @@ public class ApfFilter { } } + // A class to hold keepalive ack information. + private abstract static class TcpKeepaliveAck { + // Note that the offset starts from IP header. + // These must be added ether header length when generating program. + static final int IP_HEADER_OFFSET = 0; + + protected static class TcpKeepaliveAckData { + public final byte[] srcAddress; + public final int srcPort; + public final byte[] dstAddress; + public final int dstPort; + public final int seq; + public final int ack; + // Create the characteristics of the ack packet from the sent keepalive packet. + TcpKeepaliveAckData(final TcpKeepalivePacketDataParcelable sentKeepalivePacket) { + srcAddress = sentKeepalivePacket.dstAddress; + srcPort = sentKeepalivePacket.dstPort; + dstAddress = sentKeepalivePacket.srcAddress; + dstPort = sentKeepalivePacket.srcPort; + seq = sentKeepalivePacket.ack; + ack = sentKeepalivePacket.seq + 1; + } + } + + protected final TcpKeepaliveAckData mPacket; + protected final byte[] mSrcDstAddr; + + TcpKeepaliveAck(final TcpKeepaliveAckData packet, final byte[] srcDstAddr) { + mPacket = packet; + mSrcDstAddr = srcDstAddr; + } + + static byte[] concatArrays(final byte[]... arr) { + int size = 0; + for (byte[] a : arr) { + size += a.length; + } + final byte[] result = new byte[size]; + int offset = 0; + for (byte[] a : arr) { + System.arraycopy(a, 0, result, offset, a.length); + offset += a.length; + } + return result; + } + + public String toString() { + return String.format("%s(%d) -> %s(%d), seq=%d, ack=%d", + mPacket.srcAddress, + mPacket.srcPort, + mPacket.dstAddress, + mPacket.dstPort, + mPacket.seq, + mPacket.ack); + } + + // Append a filter for this keepalive ack to {@code gen}. + // Jump to drop if it matches the keepalive ack. + // Jump to the next filter if packet doesn't match the keepalive ack. + abstract void generateFilterLocked(ApfGenerator gen) throws IllegalInstructionException; + } + + private class TcpKeepaliveAckV4 extends TcpKeepaliveAck { + private static final int IPV4_SRC_ADDR_OFFSET = IP_HEADER_OFFSET + 12; + private static final int IPV4_TCP_SRC_PORT_OFFSET = 0; + private static final int IPV4_TCP_DST_PORT_OFFSET = 2; + private static final int IPV4_TCP_SEQ_OFFSET = 4; + private static final int IPV4_TCP_ACK_OFFSET = 8; + + TcpKeepaliveAckV4(final TcpKeepalivePacketDataParcelable sentKeepalivePacket) { + this(new TcpKeepaliveAckData(sentKeepalivePacket)); + } + TcpKeepaliveAckV4(final TcpKeepaliveAckData packet) { + super(packet, concatArrays(packet.srcAddress, packet.dstAddress) /* srcDstAddr */); + } + + @Override + void generateFilterLocked(ApfGenerator gen) throws IllegalInstructionException { + final String nextFilterLabel = "keepalive_ack" + getUniqueNumberLocked(); + gen.addLoad8(Register.R0, IPV4_PROTOCOL_OFFSET); + gen.addJumpIfR0NotEquals(IPPROTO_TCP, nextFilterLabel); + gen.addLoadImmediate(Register.R0, ETH_HEADER_LEN + IPV4_SRC_ADDR_OFFSET); + gen.addJumpIfBytesNotEqual(Register.R0, mSrcDstAddr, nextFilterLabel); + + // Pass the packet if it's not zero-sized : + // Load the IP header size into R1 + gen.addLoadFromMemory(Register.R1, gen.IPV4_HEADER_SIZE_MEMORY_SLOT); + // Load the TCP header size into R0 (it's indexed by R1) + gen.addLoad8Indexed(Register.R0, ETH_HEADER_LEN + TCP_HEADER_SIZE_OFFSET); + // Size offset is in the top nibble, but it must be multiplied by 4, and the two + // top bits of the low nibble are guaranteed to be zeroes. Right-shift R0 by 2. + gen.addRightShift(2); + // R0 += R1 -> R0 contains TCP + IP headers lenght + gen.addAddR1(); + // Add the Ethernet header length to R0. + gen.addLoadImmediate(Register.R1, ETH_HEADER_LEN); + gen.addAddR1(); + // Compare total length of headers to the size of the packet. + gen.addLoadFromMemory(Register.R1, gen.PACKET_SIZE_MEMORY_SLOT); + gen.addNeg(Register.R0); + gen.addAddR1(); + gen.addJumpIfR0NotEquals(0, nextFilterLabel); + + // Add IPv4 header length + gen.addLoadFromMemory(Register.R1, gen.IPV4_HEADER_SIZE_MEMORY_SLOT); + gen.addLoad16Indexed(Register.R0, ETH_HEADER_LEN + IPV4_TCP_SRC_PORT_OFFSET); + gen.addJumpIfR0NotEquals(mPacket.srcPort, nextFilterLabel); + gen.addLoad16Indexed(Register.R0, ETH_HEADER_LEN + IPV4_TCP_DST_PORT_OFFSET); + gen.addJumpIfR0NotEquals(mPacket.dstPort, nextFilterLabel); + gen.addLoad32Indexed(Register.R0, ETH_HEADER_LEN + IPV4_TCP_SEQ_OFFSET); + gen.addJumpIfR0NotEquals(mPacket.seq, nextFilterLabel); + gen.addLoad32Indexed(Register.R0, ETH_HEADER_LEN + IPV4_TCP_ACK_OFFSET); + gen.addJumpIfR0NotEquals(mPacket.ack, nextFilterLabel); + + maybeSetupCounter(gen, Counter.DROPPED_IPV4_KEEPALIVE_ACK); + gen.addJump(mCountAndDropLabel); + gen.defineLabel(nextFilterLabel); + } + } + + private class TcpKeepaliveAckV6 extends TcpKeepaliveAck { + TcpKeepaliveAckV6(final TcpKeepalivePacketDataParcelable sentKeepalivePacket) { + this(new TcpKeepaliveAckData(sentKeepalivePacket)); + } + TcpKeepaliveAckV6(final TcpKeepaliveAckData packet) { + super(packet, concatArrays(packet.srcAddress, packet.dstAddress) /* srcDstAddr */); + } + + @Override + void generateFilterLocked(ApfGenerator gen) throws IllegalInstructionException { + throw new UnsupportedOperationException("IPv6 Keepalive is not supported yet"); + } + } + // Maximum number of RAs to filter for. private static final int MAX_RAS = 10; @GuardedBy("this") - private ArrayList<Ra> mRas = new ArrayList<Ra>(); + private ArrayList<Ra> mRas = new ArrayList<>(); + @GuardedBy("this") + private SparseArray<TcpKeepaliveAck> mKeepaliveAcks = new SparseArray<>(); // There is always some marginal benefit to updating the installed APF program when an RA is // seen because we can extend the program's lifetime slightly, but there is some cost to @@ -980,6 +1124,8 @@ public class ApfFilter { // drop // if it's IPv4 broadcast: // drop + // if keepalive ack + // drop // pass if (mMulticastFilter) { @@ -1023,6 +1169,9 @@ public class ApfFilter { gen.addJumpIfR0Equals(broadcastAddr, mCountAndDropLabel); } + // If any keepalive filters, + generateKeepaliveFilter(gen); + // If L2 broadcast packet, drop. // TODO: can we invert this condition to fall through to the common pass case below? maybeSetupCounter(gen, Counter.PASSED_IPV4_UNICAST); @@ -1030,6 +1179,8 @@ public class ApfFilter { gen.addJumpIfBytesNotEqual(Register.R0, ETH_BROADCAST_MAC_ADDRESS, mCountAndPassLabel); maybeSetupCounter(gen, Counter.DROPPED_IPV4_L2_BROADCAST); gen.addJump(mCountAndDropLabel); + } else { + generateKeepaliveFilter(gen); } // Otherwise, pass @@ -1037,6 +1188,13 @@ public class ApfFilter { gen.addJump(mCountAndPassLabel); } + private void generateKeepaliveFilter(ApfGenerator gen) throws IllegalInstructionException { + // Drop IPv4 Keepalive acks + for (int i = 0; i < mKeepaliveAcks.size(); ++i) { + final TcpKeepaliveAck ack = mKeepaliveAcks.valueAt(i); + if (ack instanceof TcpKeepaliveAckV4) ack.generateFilterLocked(gen); + } + } /** * Generate filter code to process IPv6 packets. Execution of this code ends in either the @@ -1057,6 +1215,8 @@ public class ApfFilter { // drop // if it's ICMPv6 NA to ff02::1: // drop + // if keepalive ack + // drop gen.addLoad8(Register.R0, IPV6_NEXT_HEADER_OFFSET); @@ -1112,6 +1272,12 @@ public class ApfFilter { maybeSetupCounter(gen, Counter.DROPPED_IPV6_MULTICAST_NA); gen.addJump(mCountAndDropLabel); gen.defineLabel(skipUnsolicitedMulticastNALabel); + + // Drop IPv6 Keepalive acks + for (int i = 0; i < mKeepaliveAcks.size(); ++i) { + final TcpKeepaliveAck ack = mKeepaliveAcks.valueAt(i); + if (ack instanceof TcpKeepaliveAckV6) ack.generateFilterLocked(gen); + } } /** @@ -1489,6 +1655,36 @@ public class ApfFilter { installNewProgramLocked(); } + /** + * Add keepalive ack packet filter. + * This will add a filter to drop acks to the keepalive packet passed as an argument. + * + * @param slot The index used to access the filter. + * @param sentKeepalivePacket The attributes of the sent keepalive packet. + */ + public synchronized void addKeepalivePacketFilter(final int slot, + final TcpKeepalivePacketDataParcelable sentKeepalivePacket) { + log("Adding keepalive ack(" + slot + ")"); + if (null != mKeepaliveAcks.get(slot)) { + throw new IllegalArgumentException("Keepalive slot " + slot + " is occupied"); + } + final int ipVersion = sentKeepalivePacket.srcAddress.length == 4 ? 4 : 6; + mKeepaliveAcks.put(slot, (ipVersion == 4) + ? new TcpKeepaliveAckV4(sentKeepalivePacket) + : new TcpKeepaliveAckV6(sentKeepalivePacket)); + installNewProgramLocked(); + } + + /** + * Remove keepalive packet filter. + * + * @param slot The index used to access the filter. + */ + public synchronized void removeKeepalivePacketFilter(int slot) { + mKeepaliveAcks.remove(slot); + installNewProgramLocked(); + } + static public long counterValue(byte[] data, Counter counter) throws ArrayIndexOutOfBoundsException { // Follow the same wrap-around addressing scheme of the interpreter. @@ -1541,6 +1737,17 @@ public class ApfFilter { } pw.decreaseIndent(); + pw.println("Keepalive filter:"); + pw.increaseIndent(); + for (int i = 0; i < mKeepaliveAcks.size(); ++i) { + final TcpKeepaliveAck keepaliveAck = mKeepaliveAcks.valueAt(i); + pw.print("Slot "); + pw.print(mKeepaliveAcks.keyAt(i)); + pw.print(" : "); + pw.println(keepaliveAck); + } + pw.decreaseIndent(); + if (DBG) { pw.println("Last program:"); pw.increaseIndent(); diff --git a/packages/NetworkStack/src/android/net/apf/ApfGenerator.java b/packages/NetworkStack/src/android/net/apf/ApfGenerator.java index 87a1b5ea8b4d..809327a0b79d 100644 --- a/packages/NetworkStack/src/android/net/apf/ApfGenerator.java +++ b/packages/NetworkStack/src/android/net/apf/ApfGenerator.java @@ -476,7 +476,7 @@ public class ApfGenerator { /** * Add an instruction to the end of the program to load 16-bits from the packet into - * {@code register}. The offset of the loaded 16-bits from the begining of the packet is + * {@code register}. The offset of the loaded 16-bits from the beginning of the packet is * the sum of {@code offset} and the value in register R1. */ public ApfGenerator addLoad16Indexed(Register register, int offset) { @@ -488,7 +488,7 @@ public class ApfGenerator { /** * Add an instruction to the end of the program to load 32-bits from the packet into - * {@code register}. The offset of the loaded 32-bits from the begining of the packet is + * {@code register}. The offset of the loaded 32-bits from the beginning of the packet is * the sum of {@code offset} and the value in register R1. */ public ApfGenerator addLoad32Indexed(Register register, int offset) { diff --git a/packages/NetworkStack/src/android/net/ip/IpClient.java b/packages/NetworkStack/src/android/net/ip/IpClient.java index 12fe8c507db4..9e5991298834 100644 --- a/packages/NetworkStack/src/android/net/ip/IpClient.java +++ b/packages/NetworkStack/src/android/net/ip/IpClient.java @@ -23,6 +23,7 @@ import static android.net.shared.LinkPropertiesParcelableUtil.toStableParcelable import static com.android.server.util.PermissionUtil.checkNetworkStackCallingPermission; +import android.annotation.NonNull; import android.content.Context; import android.net.ConnectivityManager; import android.net.DhcpResults; @@ -34,6 +35,7 @@ import android.net.ProvisioningConfigurationParcelable; import android.net.ProxyInfo; import android.net.ProxyInfoParcelable; import android.net.RouteInfo; +import android.net.TcpKeepalivePacketDataParcelable; import android.net.apf.ApfCapabilities; import android.net.apf.ApfFilter; import android.net.dhcp.DhcpClient; @@ -292,6 +294,8 @@ public class IpClient extends StateMachine { private static final int EVENT_PROVISIONING_TIMEOUT = 10; private static final int EVENT_DHCPACTION_TIMEOUT = 11; private static final int EVENT_READ_PACKET_FILTER_COMPLETE = 12; + private static final int CMD_ADD_KEEPALIVE_PACKET_FILTER_TO_APF = 13; + private static final int CMD_REMOVE_KEEPALIVE_PACKET_FILTER_FROM_APF = 14; // Internal commands to use instead of trying to call transitionTo() inside // a given State's enter() method. Calling transitionTo() from enter/exit @@ -522,6 +526,16 @@ public class IpClient extends StateMachine { checkNetworkStackCallingPermission(); IpClient.this.setMulticastFilter(enabled); } + @Override + public void addKeepalivePacketFilter(int slot, TcpKeepalivePacketDataParcelable pkt) { + checkNetworkStackCallingPermission(); + IpClient.this.addKeepalivePacketFilter(slot, pkt); + } + @Override + public void removeKeepalivePacketFilter(int slot) { + checkNetworkStackCallingPermission(); + IpClient.this.removeKeepalivePacketFilter(slot); + } } public String getInterfaceName() { @@ -644,6 +658,22 @@ public class IpClient extends StateMachine { } /** + * Called by WifiStateMachine to add keepalive packet filter before setting up + * keepalive offload. + */ + public void addKeepalivePacketFilter(int slot, @NonNull TcpKeepalivePacketDataParcelable pkt) { + sendMessage(CMD_ADD_KEEPALIVE_PACKET_FILTER_TO_APF, slot, 0 /* Unused */, pkt); + } + + /** + * Called by WifiStateMachine to remove keepalive packet filter after stopping keepalive + * offload. + */ + public void removeKeepalivePacketFilter(int slot) { + sendMessage(CMD_REMOVE_KEEPALIVE_PACKET_FILTER_FROM_APF, slot, 0 /* Unused */); + } + + /** * Dump logs of this IpClient. */ public void dump(FileDescriptor fd, PrintWriter writer, String[] args) { @@ -1512,6 +1542,23 @@ public class IpClient extends StateMachine { break; } + case CMD_ADD_KEEPALIVE_PACKET_FILTER_TO_APF: { + final int slot = msg.arg1; + if (mApfFilter != null) { + mApfFilter.addKeepalivePacketFilter(slot, + (TcpKeepalivePacketDataParcelable) msg.obj); + } + break; + } + + case CMD_REMOVE_KEEPALIVE_PACKET_FILTER_FROM_APF: { + final int slot = msg.arg1; + if (mApfFilter != null) { + mApfFilter.removeKeepalivePacketFilter(slot); + } + break; + } + case EVENT_DHCPACTION_TIMEOUT: stopDhcpAction(); break; diff --git a/packages/NetworkStack/tests/Android.bp b/packages/NetworkStack/tests/Android.bp index 45fa2dc2f383..4a09b3e205a6 100644 --- a/packages/NetworkStack/tests/Android.bp +++ b/packages/NetworkStack/tests/Android.bp @@ -49,6 +49,7 @@ android_test { "libhidlbase", "libhidltransport", "libhwbinder", + "libjsoncpp", "liblog", "liblzma", "libnativehelper", diff --git a/packages/NetworkStack/tests/src/android/net/apf/ApfTest.java b/packages/NetworkStack/tests/src/android/net/apf/ApfTest.java index f76e41217c2a..a4a100000d12 100644 --- a/packages/NetworkStack/tests/src/android/net/apf/ApfTest.java +++ b/packages/NetworkStack/tests/src/android/net/apf/ApfTest.java @@ -39,13 +39,14 @@ import static org.mockito.Mockito.verify; import android.content.Context; import android.net.LinkAddress; import android.net.LinkProperties; +import android.net.SocketKeepalive; +import android.net.TcpKeepalivePacketData; +import android.net.TcpKeepalivePacketData.TcpSocketInfo; import android.net.apf.ApfFilter.ApfConfiguration; import android.net.apf.ApfGenerator.IllegalInstructionException; import android.net.apf.ApfGenerator.Register; import android.net.ip.IIpClientCallbacks; -import android.net.ip.IpClient; import android.net.ip.IpClient.IpClientCallbacksWrapper; -import android.net.ip.IpClientCallbacks; import android.net.metrics.IpConnectivityLog; import android.net.metrics.RaEvent; import android.net.util.InterfaceParams; @@ -1003,15 +1004,31 @@ public class ApfTest { private static final byte[] ETH_BROADCAST_MAC_ADDRESS = {(byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff, (byte) 0xff }; + private static final int IPV4_HEADER_LEN = 20; private static final int IPV4_VERSION_IHL_OFFSET = ETH_HEADER_LEN + 0; + private static final int IPV4_TOTAL_LENGTH_OFFSET = ETH_HEADER_LEN + 2; private static final int IPV4_PROTOCOL_OFFSET = ETH_HEADER_LEN + 9; + private static final int IPV4_SRC_ADDR_OFFSET = ETH_HEADER_LEN + 12; private static final int IPV4_DEST_ADDR_OFFSET = ETH_HEADER_LEN + 16; + private static final int IPV4_TCP_HEADER_LEN = 20; + private static final int IPV4_TCP_HEADER_OFFSET = ETH_HEADER_LEN + IPV4_HEADER_LEN; + private static final int IPV4_TCP_SRC_PORT_OFFSET = IPV4_TCP_HEADER_OFFSET + 0; + private static final int IPV4_TCP_DEST_PORT_OFFSET = IPV4_TCP_HEADER_OFFSET + 2; + private static final int IPV4_TCP_SEQ_NUM_OFFSET = IPV4_TCP_HEADER_OFFSET + 4; + private static final int IPV4_TCP_ACK_NUM_OFFSET = IPV4_TCP_HEADER_OFFSET + 8; + private static final int IPV4_TCP_HEADER_LENGTH_OFFSET = IPV4_TCP_HEADER_OFFSET + 12; private static final byte[] IPV4_BROADCAST_ADDRESS = {(byte) 255, (byte) 255, (byte) 255, (byte) 255}; private static final int IPV6_NEXT_HEADER_OFFSET = ETH_HEADER_LEN + 6; private static final int IPV6_HEADER_LEN = 40; + private static final int IPV6_SRC_ADDR_OFFSET = ETH_HEADER_LEN + 8; private static final int IPV6_DEST_ADDR_OFFSET = ETH_HEADER_LEN + 24; + private static final int IPV6_TCP_HEADER_OFFSET = ETH_HEADER_LEN + IPV6_HEADER_LEN; + private static final int IPV6_TCP_SRC_PORT_OFFSET = IPV6_TCP_HEADER_OFFSET + 0; + private static final int IPV6_TCP_DEST_PORT_OFFSET = IPV6_TCP_HEADER_OFFSET + 2; + private static final int IPV6_TCP_SEQ_NUM_OFFSET = IPV6_TCP_HEADER_OFFSET + 4; + private static final int IPV6_TCP_ACK_NUM_OFFSET = IPV6_TCP_HEADER_OFFSET + 8; // The IPv6 all nodes address ff02::1 private static final byte[] IPV6_ALL_NODES_ADDRESS = { (byte) 0xff, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 }; @@ -1491,6 +1508,200 @@ public class ApfTest { return packet.array(); } + private static final byte[] IPV4_KEEPALIVE_SRC_ADDR = {10, 0, 0, 5}; + private static final byte[] IPV4_KEEPALIVE_DST_ADDR = {10, 0, 0, 6}; + private static final byte[] IPV4_ANOTHER_ADDR = {10, 0 , 0, 7}; + private static final byte[] IPV6_KEEPALIVE_SRC_ADDR = + {(byte) 0x24, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (byte) 0xfa, (byte) 0xf1}; + private static final byte[] IPV6_KEEPALIVE_DST_ADDR = + {(byte) 0x24, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (byte) 0xfa, (byte) 0xf2}; + private static final byte[] IPV6_ANOTHER_ADDR = + {(byte) 0x24, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, (byte) 0xfa, (byte) 0xf5}; + + @Test + public void testApfFilterKeepaliveAck() throws Exception { + final MockIpClientCallback cb = new MockIpClientCallback(); + final ApfConfiguration config = getDefaultConfig(); + config.multicastFilter = DROP_MULTICAST; + config.ieee802_3Filter = DROP_802_3_FRAMES; + final TestApfFilter apfFilter = new TestApfFilter(mContext, config, cb, mLog); + byte[] program; + final int srcPort = 12345; + final int dstPort = 54321; + final int seqNum = 2123456789; + final int ackNum = 1234567890; + final int anotherSrcPort = 23456; + final int anotherDstPort = 65432; + final int anotherSeqNum = 2123456780; + final int anotherAckNum = 1123456789; + final int slot1 = 1; + final int slot2 = 2; + final int window = 14480; + final int windowScale = 4; + + // src: 10.0.0.5, port: 12345 + // dst: 10.0.0.6, port: 54321 + InetAddress srcAddr = InetAddress.getByAddress(IPV4_KEEPALIVE_SRC_ADDR); + InetAddress dstAddr = InetAddress.getByAddress(IPV4_KEEPALIVE_DST_ADDR); + + final TcpSocketInfo v4Tsi = new TcpSocketInfo( + srcAddr, srcPort, dstAddr, dstPort, seqNum, ackNum, window, windowScale); + final TcpKeepalivePacketData ipv4TcpKeepalivePacket = + TcpKeepalivePacketData.tcpKeepalivePacket(v4Tsi); + + apfFilter.addKeepalivePacketFilter(slot1, ipv4TcpKeepalivePacket.toStableParcelable()); + program = cb.getApfProgram(); + + // Verify IPv4 keepalive ack packet is dropped + // src: 10.0.0.6, port: 54321 + // dst: 10.0.0.5, port: 12345 + assertDrop(program, + ipv4Packet(IPV4_KEEPALIVE_DST_ADDR, IPV4_KEEPALIVE_SRC_ADDR, + dstPort, srcPort, ackNum, seqNum + 1, 0 /* dataLength */)); + // Verify IPv4 non-keepalive ack packet from the same source address is passed + assertPass(program, + ipv4Packet(IPV4_KEEPALIVE_DST_ADDR, IPV4_KEEPALIVE_SRC_ADDR, + dstPort, srcPort, ackNum + 100, seqNum, 0 /* dataLength */)); + assertPass(program, + ipv4Packet(IPV4_KEEPALIVE_DST_ADDR, IPV4_KEEPALIVE_SRC_ADDR, + dstPort, srcPort, ackNum, seqNum + 1, 10 /* dataLength */)); + // Verify IPv4 packet from another address is passed + assertPass(program, + ipv4Packet(IPV4_ANOTHER_ADDR, IPV4_KEEPALIVE_SRC_ADDR, anotherSrcPort, + anotherDstPort, anotherSeqNum, anotherAckNum)); + + // Remove IPv4 keepalive filter + apfFilter.removeKeepalivePacketFilter(slot1); + + try { + // src: 2404:0:0:0:0:0:faf1, port: 12345 + // dst: 2404:0:0:0:0:0:faf2, port: 54321 + srcAddr = InetAddress.getByAddress(IPV6_KEEPALIVE_SRC_ADDR); + dstAddr = InetAddress.getByAddress(IPV6_KEEPALIVE_DST_ADDR); + final TcpSocketInfo v6Tsi = new TcpSocketInfo( + srcAddr, srcPort, dstAddr, dstPort, seqNum, ackNum, window, windowScale); + final TcpKeepalivePacketData ipv6TcpKeepalivePacket = + TcpKeepalivePacketData.tcpKeepalivePacket(v6Tsi); + apfFilter.addKeepalivePacketFilter(slot1, ipv6TcpKeepalivePacket.toStableParcelable()); + program = cb.getApfProgram(); + + // Verify IPv6 keepalive ack packet is dropped + // src: 2404:0:0:0:0:0:faf2, port: 54321 + // dst: 2404:0:0:0:0:0:faf1, port: 12345 + assertDrop(program, + ipv6Packet(IPV6_KEEPALIVE_DST_ADDR, IPV6_KEEPALIVE_SRC_ADDR, + dstPort, srcPort, ackNum, seqNum + 1)); + // Verify IPv6 non-keepalive ack packet from the same source address is passed + assertPass(program, + ipv6Packet(IPV6_KEEPALIVE_DST_ADDR, IPV6_KEEPALIVE_SRC_ADDR, + dstPort, srcPort, ackNum + 100, seqNum)); + // Verify IPv6 packet from another address is passed + assertPass(program, + ipv6Packet(IPV6_ANOTHER_ADDR, IPV6_KEEPALIVE_SRC_ADDR, anotherSrcPort, + anotherDstPort, anotherSeqNum, anotherAckNum)); + + // Remove IPv6 keepalive filter + apfFilter.removeKeepalivePacketFilter(slot1); + + // Verify multiple filters + apfFilter.addKeepalivePacketFilter(slot1, ipv4TcpKeepalivePacket.toStableParcelable()); + apfFilter.addKeepalivePacketFilter(slot2, ipv6TcpKeepalivePacket.toStableParcelable()); + program = cb.getApfProgram(); + + // Verify IPv4 keepalive ack packet is dropped + // src: 10.0.0.6, port: 54321 + // dst: 10.0.0.5, port: 12345 + assertDrop(program, + ipv4Packet(IPV4_KEEPALIVE_DST_ADDR, IPV4_KEEPALIVE_SRC_ADDR, + dstPort, srcPort, ackNum, seqNum + 1)); + // Verify IPv4 non-keepalive ack packet from the same source address is passed + assertPass(program, + ipv4Packet(IPV4_KEEPALIVE_DST_ADDR, IPV4_KEEPALIVE_SRC_ADDR, + dstPort, srcPort, ackNum + 100, seqNum)); + // Verify IPv4 packet from another address is passed + assertPass(program, + ipv4Packet(IPV4_ANOTHER_ADDR, IPV4_KEEPALIVE_SRC_ADDR, anotherSrcPort, + anotherDstPort, anotherSeqNum, anotherAckNum)); + + // Verify IPv6 keepalive ack packet is dropped + // src: 2404:0:0:0:0:0:faf2, port: 54321 + // dst: 2404:0:0:0:0:0:faf1, port: 12345 + assertDrop(program, + ipv6Packet(IPV6_KEEPALIVE_DST_ADDR, IPV6_KEEPALIVE_SRC_ADDR, + dstPort, srcPort, ackNum, seqNum + 1)); + // Verify IPv6 non-keepalive ack packet from the same source address is passed + assertPass(program, + ipv6Packet(IPV6_KEEPALIVE_DST_ADDR, IPV6_KEEPALIVE_SRC_ADDR, + dstPort, srcPort, ackNum + 100, seqNum)); + // Verify IPv6 packet from another address is passed + assertPass(program, + ipv6Packet(IPV6_ANOTHER_ADDR, IPV6_KEEPALIVE_SRC_ADDR, anotherSrcPort, + anotherDstPort, anotherSeqNum, anotherAckNum)); + + // Remove keepalive filters + apfFilter.removeKeepalivePacketFilter(slot1); + apfFilter.removeKeepalivePacketFilter(slot2); + } catch (SocketKeepalive.InvalidPacketException e) { + // TODO: support V6 packets + } + + program = cb.getApfProgram(); + + // Verify IPv4, IPv6 packets are passed + assertPass(program, + ipv4Packet(IPV4_KEEPALIVE_DST_ADDR, IPV4_KEEPALIVE_SRC_ADDR, + dstPort, srcPort, ackNum, seqNum + 1)); + assertPass(program, + ipv6Packet(IPV6_KEEPALIVE_DST_ADDR, IPV6_KEEPALIVE_SRC_ADDR, + dstPort, srcPort, ackNum, seqNum + 1)); + assertPass(program, + ipv4Packet(IPV4_ANOTHER_ADDR, IPV4_KEEPALIVE_SRC_ADDR, srcPort, + dstPort, anotherSeqNum, anotherAckNum)); + assertPass(program, + ipv6Packet(IPV6_ANOTHER_ADDR, IPV6_KEEPALIVE_SRC_ADDR, srcPort, + dstPort, anotherSeqNum, anotherAckNum)); + + apfFilter.shutdown(); + } + + private static byte[] ipv4Packet(byte[] sip, byte[] tip, int sport, + int dport, int seq, int ack) { + ByteBuffer packet = ByteBuffer.wrap(new byte[100]); + packet.putShort(ETH_ETHERTYPE_OFFSET, (short) ETH_P_IP); + packet.put(IPV4_VERSION_IHL_OFFSET, (byte) 0x45); + put(packet, IPV4_SRC_ADDR_OFFSET, sip); + put(packet, IPV4_DEST_ADDR_OFFSET, tip); + packet.putShort(IPV4_TCP_SRC_PORT_OFFSET, (short) sport); + packet.putShort(IPV4_TCP_DEST_PORT_OFFSET, (short) dport); + packet.putInt(IPV4_TCP_SEQ_NUM_OFFSET, seq); + packet.putInt(IPV4_TCP_ACK_NUM_OFFSET, ack); + return packet.array(); + } + + private static byte[] ipv4Packet(byte[] sip, byte[] tip, int sport, + int dport, int seq, int ack, int dataLength) { + final int totalLength = dataLength + IPV4_HEADER_LEN + IPV4_TCP_HEADER_LEN; + + ByteBuffer packet = ByteBuffer.wrap(ipv4Packet(sip, tip, sport, dport, seq, ack)); + packet.putShort(IPV4_TOTAL_LENGTH_OFFSET, (short) totalLength); + // TCP header length 5, reserved 3 bits, NS=0 + packet.put(IPV4_TCP_HEADER_LENGTH_OFFSET, (byte) 0x50); + return packet.array(); + } + + private static byte[] ipv6Packet(byte[] sip, byte[] tip, int sport, + int dport, int seq, int ack) { + ByteBuffer packet = ByteBuffer.wrap(new byte[100]); + packet.putShort(ETH_ETHERTYPE_OFFSET, (short) ETH_P_IPV6); + put(packet, IPV6_SRC_ADDR_OFFSET, sip); + put(packet, IPV6_DEST_ADDR_OFFSET, tip); + packet.putShort(IPV6_TCP_SRC_PORT_OFFSET, (short) sport); + packet.putShort(IPV6_TCP_DEST_PORT_OFFSET, (short) dport); + packet.putInt(IPV6_TCP_SEQ_NUM_OFFSET, seq); + packet.putInt(IPV6_TCP_ACK_NUM_OFFSET, ack); + return packet.array(); + } + // Verify that the last program pushed to the IpClient.Callback properly filters the // given packet for the given lifetime. private void verifyRaLifetime(byte[] program, ByteBuffer packet, int lifetime) { diff --git a/packages/SettingsLib/HelpUtils/res/values-en-rXC/strings.xml b/packages/SettingsLib/HelpUtils/res/values-en-rXC/strings.xml index 21084fbc0cea..e991f18b5f9f 100644 --- a/packages/SettingsLib/HelpUtils/res/values-en-rXC/strings.xml +++ b/packages/SettingsLib/HelpUtils/res/values-en-rXC/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="help_feedback_label" msgid="4550436169116444686">"Help & feedback"</string> + <string name="help_feedback_label" msgid="4550436169116444686">"Help & feedback"</string> </resources> diff --git a/packages/SettingsLib/RestrictedLockUtils/res/values-en-rXC/strings.xml b/packages/SettingsLib/RestrictedLockUtils/res/values-en-rXC/strings.xml index f329a76e5c85..8b19b6ee568c 100644 --- a/packages/SettingsLib/RestrictedLockUtils/res/values-en-rXC/strings.xml +++ b/packages/SettingsLib/RestrictedLockUtils/res/values-en-rXC/strings.xml @@ -17,6 +17,6 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="enabled_by_admin" msgid="7797093432952898000">"Enabled by admin"</string> - <string name="disabled_by_admin" msgid="1910810467107358241">"Disabled by admin"</string> + <string name="enabled_by_admin" msgid="7797093432952898000">"Enabled by admin"</string> + <string name="disabled_by_admin" msgid="1910810467107358241">"Disabled by admin"</string> </resources> diff --git a/packages/SettingsLib/SearchWidget/res/values-en-rXC/strings.xml b/packages/SettingsLib/SearchWidget/res/values-en-rXC/strings.xml index c8627c8f1b08..5dae33600cef 100644 --- a/packages/SettingsLib/SearchWidget/res/values-en-rXC/strings.xml +++ b/packages/SettingsLib/SearchWidget/res/values-en-rXC/strings.xml @@ -17,5 +17,5 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="search_menu" msgid="1604061903696928905">"Search settings"</string> + <string name="search_menu" msgid="1604061903696928905">"Search settings"</string> </resources> diff --git a/packages/SettingsLib/res/values-af/arrays.xml b/packages/SettingsLib/res/values-af/arrays.xml index 5a96a5886f77..0e2d0e63580c 100644 --- a/packages/SettingsLib/res/values-af/arrays.xml +++ b/packages/SettingsLib/res/values-af/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Gebruik HDCP-kontrolering net vir DRM-inhoud"</item> <item msgid="45075631231212732">"Gebruik altyd HDCP-kontrolering"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Gedeaktiveer"</item> + <item msgid="1969681323976948639">"Het gefiltreer geaktiveer"</item> + <item msgid="8719029132154020716">"Geaktiveer"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (verstek)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml index 0e46f610bc4d..0988cab78a49 100644 --- a/packages/SettingsLib/res/values-af/strings.xml +++ b/packages/SettingsLib/res/values-af/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Outomaties deur %1$s gekoppel"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Outomaties deur netwerkgraderingverskaffer gekoppel"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Gekoppel via %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> deur <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Gekoppel via <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Beskikbaar via %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Tik om op te stel"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Tik om aan te meld"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Gekoppel, geen internet nie"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Geen internet nie"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Aanmelding word vereis"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Toegangspunt is tydelik vol"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Gekoppel via %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Beskikbaar via %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Kon nie koppel nie"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Ongeldige OSU-bediener-URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU-bediener kon nie koppel nie"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU-bediener kon nie gestaaf word nie"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Ongeldige OSU-bedienersertifikaat"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Opstelling is gestaak"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Opstelling is nie beskikbaar nie"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Ongeldige OSU-bediener-URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Onvoorsiene beveltipe"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Onvoorsiene SOAP-boodskapsoort"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP-boodskappe kon nie uitgeruil word nie"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Herlei-luisteraar kon nie begin nie"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Wagperiode vir herleiding het uitgetel"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Geen OSU-aktiwiteit gekry nie"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Onvoorsiene SOAP-boodskapstatus"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Kon nie PPS-MO kry nie"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Kon nie vertroue-kernnodus vir AAA-bediener kry nie"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Kon nie vertroue-kernnodus vir regstellingbediener kry nie"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Kon nie vertroue-kernnodus vir beleidbediener kry nie"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Kon nie vertroue-kernsertifikate ophaal nie"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Kon nie vertroue-kernsertifikaat vir AAA-bediener kry nie"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Kon nie PassPoint-opstelling byvoeg nie"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Kon nie \'n OSU-verskaffer kry nie"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Koppel tans"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Gekoppel"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Koppel tans aan OSU-bediener"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-bediener is gestaaf"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Gekoppel aan OSU-bediener"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Aanvanklike SOAP-uitruiling"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Wag tans vir herlei-reaksie"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Het herlei-antwoord ontvang"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Tweede SOAP-uitruiling"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Derde SOAP-uitruiling"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Haal tans vertroue-kernsertifikate op"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Opstelling is voltooi"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Maak tans <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> oop"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Kon nie koppel nie"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Voltooi tans aanmelding …"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Kon nie aanmelding voltooi nie. Tik om weer te probeer."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Aanmelding is voltooi. Koppel tans …"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Baie stadig"</string> <string name="speed_label_slow" msgid="813109590815810235">"Stadig"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Bly wakker"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Skerm sal nooit slaap terwyl dit laai nie"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Aktiveer Bluetooth HCI-loerloglêer"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Vang Bluetooth-pakkette vas. (Wissel Bluetooth nadat jy hierdie instelling verander het)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-ontsluit"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Laat toe dat die selflaaiprogram ontsluit word"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Laat OEM-ontsluit toe?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Inligtingruiling"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Draadlose skermsertifisering"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Aktiveer Wi-Fi-woordryke aanmelding"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Gekoppelde MAC-verewekansiging"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobiele data is altyd aktief"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardewareversnelling vir verbinding"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Wys Bluetooth-toestelle sonder name"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Kon nie koppel nie"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Wys opsies vir draadlose skermsertifisering"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Verhoog Wi-Fi-aantekeningvlak, wys per SSID RSSI in Wi‑Fi-kieser"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Verewekansig MAC-adres wanneer daar aan Wi‑Fi-netwerke gekoppel word"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Beperk"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Onbeperk"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Loggerbuffer se groottes"</string> diff --git a/packages/SettingsLib/res/values-am/arrays.xml b/packages/SettingsLib/res/values-am/arrays.xml index b1acfb7aa47f..8138a6acd503 100644 --- a/packages/SettingsLib/res/values-am/arrays.xml +++ b/packages/SettingsLib/res/values-am/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"ለDRM ይዘት ብቻ HDCP ምልከታን ተጠቀም"</item> <item msgid="45075631231212732">"ሁልጊዜ የHDCP ምልከታ ተጠቀም"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"ተሰናክሏል"</item> + <item msgid="1969681323976948639">"ማጣሪያን አንቃ"</item> + <item msgid="8719029132154020716">"ነቅቷል"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (ነባሪ)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml index 2304908b7db3..301d6099a6a7 100644 --- a/packages/SettingsLib/res/values-am/strings.xml +++ b/packages/SettingsLib/res/values-am/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"በ%1$s በኩል በራስ-ሰር ተገናኝቷል"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"በአውታረ መረብ ደረጃ ሰጪ አቅራቢ በኩል በራስ-ሰር ተገናኝቷል"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"በ%1$s በኩል መገናኘት"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> በ<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"በ <xliff:g id="NAME">%1$s</xliff:g> በኩል ተገናኝተዋል"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"በ%1$s በኩል የሚገኝ"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"ለማዋቀር መታ ያድርጉ"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"ለመመዝገብ መታ ያድርጉ"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"ተገናኝቷል፣ ምንም በይነመረብ የለም"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"ምንም በይነመረብ የለም"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"ወደ መለያ መግባት ያስፈልጋል"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"የመዳረሻ ነጥብ ለጊዜው ሞልቷል"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"በ%1$s በኩል ተገናኝቷል"</string> <string name="available_via_carrier" msgid="1469036129740799053">"በ%1$s በኩል የሚገኝ"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"ግንኙነት አልተሳካም"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"ልክ ያልኾነ OSU አገልጋይ ዩአርኤል"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU አገልጋይ ግንኙነት አልተሳካም"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU አገልጋይ ማረጋገጥ አልተሳካም"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"ልክ ያልኾነ OSU አገልጋይ ዩአርኤል"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"በባለቤትነት መያዝ ተጨናግፏል"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"በባለቤትነት መያዝ አይገኝም"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"ልክ ያልኾነ OSU አገልጋይ ዩአርኤል"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ያልተጠበቀ የትዕዛዝ ዓይነት"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"ያልተጠበቀ SOAP መልዕክት ዓይነት"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP መልዕክት ልውውጥ አልተሳካም"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"አቅጣጫ ቀይር አዳማጭ መጀመር አልቻለም"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"አቅጣጫን ቀይርን መጠበቅ ጊዜው አብቅቷል"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"ምንም የOSU እንቅስቃሴ አልተገኘም"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"ያልተጠበቀ SOAP መልዕክት ሁኔታ"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO ማግኘት አልተሳካም"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"ለAAA አገልጋይ የታመነ የሥር እስር ማግኘት አልተቻለም"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"ለማስተካከያ አገልጋይ የታመነ የሥር እስር ማግኘት አልተቻለም"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"ለመመሪያ አገልጋይ የታመነ የሥር እስር ማግኘት አልተቻለም"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"የሥር እውቅና ማረጋገጫን ሰርስሮ ማውጣት አልተቻለም"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"ለ AAA አገልጋይ የሥር እውቅና ማረጋገጫ ማግኘት አልተሳካም"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPointን ውቅረት ማከል አልተሳካም"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"የOSU አቅራቢን ማግኘት አልተሳካም"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"በመገናኘት ላይ"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"ተገናኝቷል"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"ወደ OSU አገልጋይ በማገናኘት ላይ"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU አገልጋይ ተረጋግጧል"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"ወደ OSU አገልጋይ ተገናኝቷል"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"የመጀመሪያ SOAP ልውውጥ"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"ለአቅጣጫ ቀይር ምላሽ በመጠባበቅ ላይ"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"የአቅጣጫ ቀይር ምላሽ ተቀብሏል"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"ሁለተኛ SOAP ልውውጥ"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"ሦስተኛ SOAP ልውውጥ"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"የሥር እውቅና ማረጋገጫዎችን ሰርስሮ በማውጣት ላይ"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"በባለቤትነት መያዝ ተጠናቋል"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>ን በመክፈት ላይ"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"መገናኘት አልተቻለም"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"መመዝገብን በማጠናቀቅ ላይ…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"መመዝገብን ማጠናቀቅ አልተቻለም። እንደገና ለመሞከር መታ ያድርጉ።"</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"ምዝገባ ተጠናቋል። በማገናኘት ላይ…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"በጣም ቀርፋፋ"</string> <string name="speed_label_slow" msgid="813109590815810235">"አዘግይ"</string> <string name="speed_label_okay" msgid="2331665440671174858">"እሺ"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"ነቅተህ ቆይ"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"ማያኃይል በመሙላት ላይበፍፁም አይተኛም"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"የብሉቱዝ HCI ስለላ ምዝግብ ማስታወሻን ያንቁ"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"የብሉቱዝ ጥቅሎችን ያዝል። (ይህን ቅንብር ከቀየሩ በኋላ ብሉቱዝን ያብሩ/ያጥፉ)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM መክፈቻ"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"የማስነሻ ተሸካሚ እንዲከፈት ፍቀድ"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"የOEM መክፈቻ ይፈቀድ?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"አውታረ መረብ"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"የገመድ አልባ ማሳያ እውቅና ማረጋገጫ"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"የWi‑Fi ተጨማሪ ቃላት ምዝግብ ማስታወሻ መያዝ"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"የተገናኘ የማክ ዘፈቀደ መስሪያ"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"የተንቀሳቃሽ ስልክ ውሂብ ሁልጊዜ ገቢር ነው"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"የሃርድዌር ማቀላጠፊያን በማስተሳሰር ላይ"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"የብሉቱዝ መሣሪያዎችን ያለ ስሞች አሳይ"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"መገናኘት አልተቻለም"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"የገመድ አልባ ማሳያ እውቅና ማረጋገጫ አማራጮችን አሳይ"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"የWi‑Fi ምዝግብ ማስታወሻ አያያዝ ደረጃ ጨምር፣ በWi‑Fi መምረጫ ውስጥ በአንድ SSID RSSI አሳይ"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"ከWi-Fi አውታረ መረቦች ጋር ሲገናኙ የማክ አድራሻን በዘፈቀደ ይስሩ"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"የሚለካ"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"ያልተለካ"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"የምዝግብ ማስታወሻ ያዥ መጠኖች"</string> diff --git a/packages/SettingsLib/res/values-ar/arrays.xml b/packages/SettingsLib/res/values-ar/arrays.xml index 49a080ebfdaf..7a4dac8fdace 100644 --- a/packages/SettingsLib/res/values-ar/arrays.xml +++ b/packages/SettingsLib/res/values-ar/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"استخدام التحقق من HDCP لمحتوى DRM فقط"</item> <item msgid="45075631231212732">"استخدام التحقق من HDCP دومًا"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"موقوف"</item> + <item msgid="1969681323976948639">"تمّ تفعيل التصفية"</item> + <item msgid="8719029132154020716">"مفعّل"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (التلقائي)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml index 09cf92561fd1..91de9e3f693c 100644 --- a/packages/SettingsLib/res/values-ar/strings.xml +++ b/packages/SettingsLib/res/values-ar/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"تم الاتصال تلقائيًا عبر %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"تم الاتصال تلقائيًا عبر مقدم خدمة تقييم الشبكة"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"تم الاتصال عبر %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> بواسطة <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"تم الاتصال عبر <xliff:g id="NAME">%1$s</xliff:g>."</string> <string name="available_via_passpoint" msgid="1617440946846329613">"متوفرة عبر %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"انقر للإعداد."</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"انقر للاشتراك."</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"متصلة ولكن بلا إنترنت"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"لا يتوفر اتصال إنترنت."</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"يلزم تسجيل الدخول"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"نقطة الدخول ممتلئة مؤقتًا"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"تم الاتصال عبر %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"متوفرة عبر %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"تعذّر الاتصال"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"عنوان URL لخادم OSU غير صالح"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"تعذّر الاتصال بخادم OSU"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"تعذّر التحقق من خادم OSU"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"شهادة خادم OSU غير صالحة"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"تم إلغاء إدارة الحسابات"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"إدارة الحسابات غير متاحة"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"عنوان URL لخادم OSU غير صالح"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"نوع الطلب غير متوقّع"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"نوع رسالة SOAP غير متوقّع"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"تعذّر تبادل رسالة SOAP"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"تعذّر تشغيل إعادة توجيه المستمع"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"انتهت مهلة انتظار إعادة التوجيه"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"لم يتم العثور على نشاط OSU"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"حالة رسالة SOAP غير متوقعة"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"تعذّر العثور على PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"تعذّر العثور على عقدة جذر الثقة لخادم AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"تعذّر العثور على عقدة جذر الثقة لخادم المعالجة"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"تعذّر العثور على عقدة جذر الثقة لخادم السياسة"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"تعذّر استرداد شهادات جذر الثقة"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"تعذّر العثور على شهادة جذر ثقة لخادم AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"تعذّرت إضافة ضبط PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"تعذّر العثور على مقدّم OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"جارٍ الاتصال"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"تم الاتصال"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"جارٍ الاتصال بخادم OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"تم التحقق من خادم OSU"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"تم الاتصال بخادم OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"تبادل SOAP الأوّل"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"في انتظار رد إعادة التوجيه"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"تم تلقّي رد إعادة توجيه"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"تبادل SOAP الثاني"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"تبادل SOAP الثالث"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"جارٍ استرداد شهادات جذر الثقة"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"اكتملت إدارة الحسابات"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"فتح <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"تعذّر الاتصال."</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"جارٍ إكمال الاشتراك…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"تعذّر إكمال الاشتراك. انقر للمحاولة مرة أخرى."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"اكتمل الاشتراك. جارٍ الاتصال…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"بطيئة جدًا"</string> <string name="speed_label_slow" msgid="813109590815810235">"بطيئة"</string> <string name="speed_label_okay" msgid="2331665440671174858">"موافق"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"البقاء في الوضع النشط"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"لا يتم مطلقًا دخول الشاشة في وضع السكون أثناء الشحن"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"تفعيل سجلّ تطفّل بواجهة وحدة تحكّم المضيف عبر بلوتوث"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"رَقمِن محتوى حزم بيانات البلوتوث. (تبديل البلوتوث بعد تغيير هذا الإعداد)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"إلغاء قفل المصنّع الأصلي للجهاز"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"السماح بإلغاء قفل برنامج bootloader"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"هل تريد السماح بإلغاء قفل المصنّع الأصلي للجهاز؟"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"الشبكات"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"شهادة عرض شاشة لاسلكي"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"تفعيل تسجيل Wi‑Fi Verbose"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"اختيار عشوائي لعنوان MAC"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"بيانات الجوّال نشطة دائمًا"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"تسريع الأجهزة للتوصيل"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"عرض أجهزة البلوتوث بدون أسماء"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"تعذّر الاتصال"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"عرض خيارات شهادة عرض شاشة لاسلكي"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"زيادة مستوى تسجيل Wi-Fi، وعرض لكل SSID RSSI في منتقي Wi-Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"اختيار عشوائي لعنوان MAC عند الاتصال بشبكات Wi‑Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"تفرض تكلفة استخدام"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"بدون قياس"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"أحجام ذاكرة التخزين المؤقت للتسجيل"</string> diff --git a/packages/SettingsLib/res/values-as/arrays.xml b/packages/SettingsLib/res/values-as/arrays.xml index e930fe35bd37..183b3107cc10 100644 --- a/packages/SettingsLib/res/values-as/arrays.xml +++ b/packages/SettingsLib/res/values-as/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"কেৱল DRM সমলৰ বাবে HDCP পৰীক্ষণ ব্যৱহাৰ কৰক"</item> <item msgid="45075631231212732">"সদায় HDCP পৰীক্ষণ ব্যৱহাৰ কৰক"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"অক্ষম আছে"</item> + <item msgid="1969681323976948639">"সক্ষম কৰাবিলাক ফিল্টাৰ কৰা হৈছে"</item> + <item msgid="8719029132154020716">"সক্ষম কৰা আছে"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP ১.৪ (ডিফ’ল্ট)"</item> <item msgid="2809759619990248160">"AVRCP ১.৩"</item> diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml index b95680f6c59c..e726ae46e3a2 100644 --- a/packages/SettingsLib/res/values-as/strings.xml +++ b/packages/SettingsLib/res/values-as/strings.xml @@ -38,50 +38,27 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s মাধ্যমেদি স্বয়ংক্ৰিয়ভাৱে সংযোগ কৰা হৈছে"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"নেটৱৰ্ক ৰেটিং প্ৰদানকাৰীৰ জৰিয়তে স্বয়ং সংয়োগ কৰা হ’ল"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s-ৰ মাধ্যমেদি সংযোগ কৰা হৈছে"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>ৰ <xliff:g id="SSID">%1$s</xliff:g>"</string> + <!-- no translation found for connected_via_app (5571999941988929520) --> + <skip /> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$sৰ মাধ্যমেৰে উপলব্ধ"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"ছেট আপ কৰিবলৈ টিপক"</string> + <!-- no translation found for tap_to_sign_up (6449724763052579434) --> + <skip /> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"সংযোজিত, ইণ্টাৰনেট নাই"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"ইণ্টাৰনেট সংযোগ নাই"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"ছাইন ইন কৰা দৰকাৰী"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"একচেছ পইণ্ট কিছু সময়ৰ বাবে পূৰ্ণ হৈ আছে"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$sৰ যোগেৰে সংযোজিত"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$sৰ মাধ্যমেৰে উপলব্ধ"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"সংযোগ কৰিব পৰা নগ\'ল"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU ছাৰ্ভাৰৰ URLটো অমান্য"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU ছাৰ্ভাৰৰ সৈতে সংযোগ কৰিব পৰা নগ\'ল"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU ছাৰ্ভাৰ সত্যাপন কৰিব পৰা নগ\'ল"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU ছাৰ্ভাৰৰ প্ৰমাণপত্ৰ অমান্য"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"প্ৰৱন্ধন কৰাটো আধাতে বন্ধ কৰা হ\'ল"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"প্ৰৱন্ধন কৰিব নোৱাৰি"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU ছাৰ্ভাৰৰ URLটো অমান্য"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"অনাকাংক্ষিত কামাণ্ডৰ ধৰণ"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"অনাকাংক্ষিত SOAP বাৰ্তাৰ ধৰণ"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP বাৰ্তা অদল-বদল কৰাত বিফল হ\'ল"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"পুনৰ্নিৰ্দেশ কৰা শুনোতা আৰম্ভ কৰিব পৰা নগ\'ল"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"পুনৰ্নিৰ্দেশ হোৱালৈ ৰৈ থকা সময় সমাপ্ত হ\'ল"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"কোনো OSU কাৰ্যকলাপ বিচাৰি পোৱা নগ\'ল"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"SOAP বাৰ্তাৰ স্থিতি অনাকাংক্ষিত"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO বিচাৰি পোৱা নগ\'ল"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA ছাৰ্ভাৰৰ বাবে বিশ্বাসযোগ্য মূল ন\'ড বিচাৰি পোৱা নগ\'ল"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"ৰিমেডিয়েশ্বন ছাৰ্ভাৰৰ বাবে বিশ্বাসযোগ্য মূল ন\'ড পোৱা নগ\'ল"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"পলিচি ছাৰ্ভাৰৰ বাবে বিশ্বাসযোগ্য মূল ন\'ড বিচাৰি পোৱা নগ\'ল"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"বিশ্বাসযোগ্য মূল প্ৰমাণপত্ৰ পুনৰুদ্ধাৰ কৰিব পৰা নগ\'ল"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA ছাৰ্ভাৰৰ বাবে বিশ্বাসযোগ্য মূল প্ৰমাণপত্ৰ পোৱা নগ\'ল"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"পাছপইণ্ট কনফিগাৰেশ্বন যোগ কৰিব পৰা নগ\'ল"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU প্ৰদান কৰোঁতা বিচাৰি পোৱা নগ\'ল"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"সংযোগ কৰি থকা হৈছে"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"সংযোগ কৰা হ’ল"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU ছাৰ্ভাৰৰ সৈতে সংযোগ কৰি থকা হৈছে"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU ছাৰ্ভাৰ সত্যাপন কৰা হ\'ল"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU ছাৰ্ভাৰৰ সৈতে সংযোগ কৰা হৈছে"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"প্ৰাৰম্ভিক SOAP এক্সেঞ্জ"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"পুনৰ্নিৰ্দেশৰ সঁহাৰিৰ বাবে অপেক্ষা কৰি থকা হৈছে"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"পুনৰ্নিৰ্দেশৰ সঁহাৰি পোৱা গৈছে"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"দ্বিতীয় SOAP এক্সেঞ্জ"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"তৃতীয় SOAP এক্সেঞ্জ"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"বিশ্বাসযোগ্য মূল প্ৰমাণপত্ৰ পুনৰুদ্ধাৰ কৰি থকা হৈছে"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"প্রৱন্ধন কৰা সম্পূৰ্ণ হ\'ল"</string> + <!-- no translation found for osu_opening_provider (5488997661548640424) --> + <skip /> + <!-- no translation found for osu_connect_failed (2187750899158158934) --> + <skip /> + <!-- no translation found for osu_completing_sign_up (9037638564719197082) --> + <skip /> + <!-- no translation found for osu_sign_up_failed (7296159750352873260) --> + <skip /> + <!-- no translation found for osu_sign_up_complete (8207626049093289203) --> + <skip /> <string name="speed_label_very_slow" msgid="1867055264243608530">"অতি লেহেম"</string> <string name="speed_label_slow" msgid="813109590815810235">"লেহেমীয়া"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ঠিক"</string> @@ -234,8 +211,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"জাগ্ৰত কৰি ৰাখক"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"চ্চাৰ্জ হৈ থকাৰ সময়ত স্ক্ৰীণ কেতিয়াও সুপ্ত অৱস্থালৈ নাযায়"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ব্লুটুথ HCI স্নুপ ল’গ সক্ষম কৰক"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ব্লুটুথ পেকেট সংগ্ৰহ কৰক। (এই ছেটিংটো সলনি কৰাৰ পিছত ব্লুটুথ ট’গল কৰক)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"ঔইএম আনলক"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"বুটল\'ডাৰটো আনলক কৰিবলৈ অনুমতি দিয়ক"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"ঔইএম আনলক কৰাৰ অনুমতি দিবনে?"</string> @@ -246,7 +222,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"নেটৱৰ্কিং"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"বেতাঁৰ ডিছপ্লে’ প্ৰমাণীকৰণ"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"ৱাই-ফাই ভাৰ্ব\'ছ লগিং সক্ষম কৰক"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"সংযুক্ত MAC যাদৃচ্ছিকৰণ"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"ম’বাইল ডেটা সদা-সক্ৰিয়"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"টেডাৰিং হাৰ্ডৱেৰ ত্বৰণ"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"নামবিহীন ব্লুটুথ ডিভাইচসমূহ দেখুৱাওক"</string> @@ -273,7 +248,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"সংযোগ কৰিব পৰা নগ\'ল"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"বেতাঁৰ ডিছপ্লে’ প্ৰমাণপত্ৰৰ বাবে বিকল্পসমূহ দেখুৱাওক"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"ৱাই-ফাই লগিঙৰ মাত্ৰা বঢ়াওক, Wi‑Fi পিকাৰত প্ৰতি SSID RSSI দেখুৱাওক"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"ৱাই-ফাই নেটৱৰ্কৰ লগত সংযোগ কৰি থকাৰ সময়ত MAC ঠিকনা যাদৃচ্ছিক কৰক"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"নিৰিখ-নিৰ্দিষ্ট"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"নিৰিখ অনিৰ্দিষ্ট"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"লগাৰৰ বাফাৰৰ আকাৰ"</string> diff --git a/packages/SettingsLib/res/values-az/arrays.xml b/packages/SettingsLib/res/values-az/arrays.xml index a66218297d14..ddb289cc3d92 100644 --- a/packages/SettingsLib/res/values-az/arrays.xml +++ b/packages/SettingsLib/res/values-az/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Yalnız DRM məzmun oxumaq üçün HDCP istifadə edin"</item> <item msgid="45075631231212732">"Həmişə HDCP yoxlama istifadə edin"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Deaktivdir"</item> + <item msgid="1969681323976948639">"Filtrləmə aktivdir"</item> + <item msgid="8719029132154020716">"Aktivdir"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (Defolt)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml index 110c8da8d372..4dd4817cee8a 100644 --- a/packages/SettingsLib/res/values-az/strings.xml +++ b/packages/SettingsLib/res/values-az/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s üzərindən avtomatik qoşuldu"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Avtomatik olaraq şəbəkə reytinq provayderi ilə qoşuludur"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s vasitəsilə qoşuludur"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> tərəfindən <xliff:g id="SSID">%1$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> ilə qoşulub"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s vasitəsilə əlçatandır"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Quraşdırmaq üçün klikləyin"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Qeydiyyatdan keçmək üçün klikləyin"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Qoşuludur, internet yoxdur"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"İnternet yoxdur"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Giriş tələb olunur"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Giriş nöqtəsi müvəqqəti olaraq doludur"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s ilə qoşuludur"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s vasitəsilə əlçatandır"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Bağlantı alınmadı"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Yalnış OSU server linki"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU serverinə qoşulmadı"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU serveri doğrulanmadı"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Yalnış OSU server sertifikatı"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Təchizat prosesi ləğv edildi"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Təchizat prosesi əlçatan deyil"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Yalnış OSU server linki"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Gözlənilməyən əmr növü"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Gözlənilməz SOAP mesaj növü"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP mesaj mübadiləsi alınmadı"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Yönləndirmə dinləyicisini başlatmaq alınmadı"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Yönləndirmə dinləyicisinin gözlənilməsi üçün vaxt bitdi"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU fəaliyyəti yoxdur"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Gözlənilməz SOAP mesaj statusu"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO tapılmadı"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA serveri üçün güvənli mənbə şəbəkəsi tapılmadı"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Bərpa serveri üçün güvənli mənbə şəbəkəsi tapılmadı"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Siyasət serveri üçün güvənli mənbə şəbəkəsi tapılmadı"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Güvənli mənbə sertifikatları əldə edilmədi"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA serveri üçün güvənli mənbə sertifikatı tapılmadı"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint konfiqurasiyası əlavə edilmədi"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU provayderi tapılmadı"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Qoşulur"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Qoşuldu"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU serverinə qoşulur"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU serveri doğrulandı"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU serverinə qoşuldu"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"İlk SOAP mübadiləsi"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Yönləndirmə cavabı gözlənilir"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Yönləndirilmiş cavab qəbul edildi"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"İkinci SOAP mübadiləsi"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Üçüncü SOAP mübadiləsi"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Güvənli mənbə sertifikatları əldə edilir"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Təchizat prosesi tamamlandı"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> açılır"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Qoşulmaq mümkün olmadı"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Qeydiyyat tamamlanır…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Qeydiyyat tamamlanmadı. Yenidən cəhd etmək üçün klikləyin."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Qeydiyyat tamamlandı. Qoşulur…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Çox Yavaş"</string> <string name="speed_label_slow" msgid="813109590815810235">"Yavaş"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Oyaq qal"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Enereji doldurularkən ekran heç vaxt yuxu rejimində olmur"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI izləmə jurnalını aktivləşdir"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth paketləri əldə edin. (Bu ayarı dəyişdikdən sonra Bluetooth\'u aktiv/deaktiv edin)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM kilidinin açılması"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Əməliyyat sistemi yükləyicisinin kilidinin açılmasına icazə ver"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM kilidinin açılmasına icazə verilsin?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Şəbəkələşmə"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Simsiz displey sertifikatlaşması"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi Çoxsözlü Girişə icazə verin"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Qoşulmuş MAC Randomizasiyası"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobil data həmişə aktiv"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Birləşmə üçün avadanlıq akselerasiyası"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth cihazlarını adsız göstərin"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Qoşulmaq mümkün olmadı"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Simsiz displey sertifikatlaşması üçün seçimləri göstərir"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi giriş səviyyəsini qaldırın, Wi‑Fi seçəndə hər SSID RSSI üzrə göstərin"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi‑Fi şəbkələrinə qoşulan zaman ixtiyari MAC ünvanı seçin"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Ödənişli"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Limitsiz"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Logger bufer ölçüləri"</string> diff --git a/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml b/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml index 2b7d87ef6436..5b72fca82f59 100644 --- a/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml +++ b/packages/SettingsLib/res/values-b+sr+Latn/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Koristi HDCP proveru samo za DRM sadržaj"</item> <item msgid="45075631231212732">"Uvek koristi HDCP proveru"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Onemogućeno"</item> + <item msgid="1969681323976948639">"Omogućeno filtrirano"</item> + <item msgid="8719029132154020716">"Omogućeno"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (podrazumevano)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml index 3d34593438d3..dc5430114ba7 100644 --- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatski povezano preko %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatski povezano preko dobavljača ocene mreže"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Veza je uspostavljena preko pristupne tačke %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> – <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Povezano preko: <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Dostupna je preko pristupne tačke %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Dodirnite da biste podesili"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Dodirnite da biste se registrovali"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Veza je uspostavljena, nema interneta"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Nema interneta"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Treba da se prijavite"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pristupna tačka je privremeno zauzeta"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Povezano preko %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Dostupno preko %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Povezivanje nije uspelo"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Nevažeći URL OSU servera"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Povezivanje sa OSU serverom nije uspelo"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Potvrda OSU servera nije uspela"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Nevažeći sertifikat OSU servera"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Dodela je otkazana"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Dodela nije dostupna"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Nevažeći URL OSU servera"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Neočekivani tip komande"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Neočekivani tip SOAP poruke"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Razmena SOAP poruka nije uspela"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Pokretanje obrađivača preusmeravanja nije uspelo"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Vreme čekanja preusmeravanja je isteklo"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nije pronađena nijedna OSU aktivnost"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Neočekivani status SOAP poruke"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO nije pronađen"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Pouzdani čvor osnovnog nivoa za AAA server nije pronađen"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Pouzdani čvor osnovnog nivoa za server za otklanjanje propusta nije pronađen"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Pouzdani čvor osnovnog nivoa za server za smernice nije pronađen"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Preuzimanje pouzdanih sertifikata osnovnog nivoa nije uspelo"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Pouzdani sertifikat osnovnog nivoa za server AAA nije pronađen"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Dodavanje PassPoint konfiguracije nije uspelo"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU dobavljač nije pronađen"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Povezuje se"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Povezan"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Povezujete se sa OSU serverom"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Potvrđen je OSU server"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Veza sa OSU serverom je uspostavljena"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Prva razmena SOAP-a"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Čeka se odgovor o preusmeravanju"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Primljen je odgovor o preusmeravanju"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Druga razmena SOAP-a"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Treća razmena SOAP-a"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Preuzimaju se pouzdani sertifikati osnovnog nivoa"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Dodela pristupa je završena"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Otvara se <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Povezivanje nije uspelo"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Registracija se dovršava…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Dovršavanje registracije nije uspelo. Dodirnite da biste probali ponovo."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registracija je dovršena. Povezuje se…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Veoma spora"</string> <string name="speed_label_slow" msgid="813109590815810235">"Spora"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Potvrdi"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Ne zaključavaj"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Ekran neće biti u režimu spavanja tokom punjenja"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Omogući snoop evidenciju za Bluetooth HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Snimi Bluetooth pakete. (Uključite/isključite Bluetooth kada promenite ovo podešavanje)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Otključavanje OEM-a"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Dozvoli otključavanje funkcije za pokretanje"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Želite li da dozvolite otključavanje proizvođača originalne opreme (OEM)?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Umrežavanje"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Sertifikacija bežičnog ekrana"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Omogući detaljniju evidenciju za Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Nasumičan izbor MAC adrese tokom povezivanja"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilni podaci su uvek aktivni"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardversko ubrzanje privezivanja"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Prikaži Bluetooth uređaje bez naziva"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Povezivanje nije uspelo"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Prikaz opcija za sertifikaciju bežičnog ekrana"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povećava nivo evidentiranja za Wi‑Fi. Prikaz po SSID RSSI-u u biraču Wi‑Fi mreže"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Izaberi nasumičnu MAC adresu tokom povezivanja na Wi‑Fi mreže"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Sa ograničenjem"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Bez ograničenja"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Veličine bafera podataka u programu za evidentiranje"</string> diff --git a/packages/SettingsLib/res/values-be/arrays.xml b/packages/SettingsLib/res/values-be/arrays.xml index 9aaa559672f1..25f2cedc5537 100644 --- a/packages/SettingsLib/res/values-be/arrays.xml +++ b/packages/SettingsLib/res/values-be/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Выкарыстанне праверкі HDCP только для змесціва, абароненага DRM"</item> <item msgid="45075631231212732">"Заўсёды выкарыстоўваць праверку HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Выключана"</item> + <item msgid="1969681323976948639">"Уключана з фільтрацыяй"</item> + <item msgid="8719029132154020716">"Уключана"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (стандартная)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml index 02b045160cba..2fa2692a3bbf 100644 --- a/packages/SettingsLib/res/values-be/strings.xml +++ b/packages/SettingsLib/res/values-be/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Аўтаматычна падключана праз %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Аўтаматычна падключана праз пастаўшчыка паслугі ацэнкі сеткі"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Падлучана праз %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> (<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>)"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Падключана праз праграму \"<xliff:g id="NAME">%1$s</xliff:g>\""</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Даступна праз %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Дакраніцеся, каб наладзіць"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Націсніце, каб зарэгістравацца"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Падключана, без доступу да інтэрнэту"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Не падключана да інтэрнэту"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Трэба выканаць уваход"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Пункт доступу часова заняты"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Падлучана праз %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Даступна праз %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Памылка падключэння"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Несапраўдны URL-адрас сервера OSU"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Не ўдалося падключыцца да сервера OSU"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Не ўдалося праверыць сервер OSU"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Несапраўдны сертыфікат сервера OSU"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Сінхранізацыя спынена"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Сінхранізацыя недаступная"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Несапраўдны URL-адрас сервера OSU"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Нечаканы тып каманды"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Нечаканы тып паведамлення SOAP"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Не ўдалося выканаць абмен паведамленнямі SOAP"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Не ўдалося запусціць праслухоўванне перанакіравання"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Час чакання перанакіравання скончыўся"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Дзеянняў OSU не знойдзена"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Нечаканы статус паведамлення SOAP"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Не ўдалося знайсці PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Не ўдалося знайсці давераны каранёвы вузел для сервера AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Не ўдалося знайсці давераны каранёвы вузел для сервера выпраўленняў"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Не ўдалося знайсці давераны каранёвы вузел для сервера палітыкі"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Не ўдалося атрымаць давераныя каранёвыя сертыфікаты"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Не ўдалося знайсці давераны каранёвы сертыфікат для сервера AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Не ўдалося дадаць канфігурацыю PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Не ўдалося знайсці аператара OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Ідзе падключэнне"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Падключана"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Ідзе падключэнне да сервера OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Сервер OSU пацверджаны"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Падключана да сервера OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Першапачатковы абмен SOAP"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Чаканне адказу на перанакіраванне"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Атрыманы адказ на перанакіраванне"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Другі абмен SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Трэці абмен SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Ідзе атрыманне давераных каранёвых сертыфікатаў"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Сінхранізацыя завершана"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Адкрываецца <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Не ўдалося падключыцца"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Рэгістрацыя завяршаецца…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Не ўдалося выканаць рэгістрацыю. Дакраніцеся, каб паўтарыць спробу."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Рэгістрацыя завершана. Ідзе падключэнне…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Вельмі павольная"</string> <string name="speed_label_slow" msgid="813109590815810235">"Павольная"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ОК"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Прадухіляць ад пераходу ў рэжым сну"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Падчас зарадкі экран будзе пастаянна ўключаны"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Уключыць журнал адсочвання Bluetooth HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Захоўваць пакеты Bluetooth. (Пасля змены гэтай налады выключыце і ўключыце Bluetooth.)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Разблакіроўка OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Дазволіць разблакіроўку загрузчыка"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Дазволіць разблакіроўку OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Сеткі"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Сертыфікацыя бесправаднога дысплея"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Уключыць падрабязны журнал Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Стварэнне выпадковых MAC-адрасоў пры падключэнні па Wi-Fi"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Мабільная перадача даных заўсёды актыўная"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Апаратнае паскарэнне ў рэжыме мадэма"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Паказваць прылады Bluetooth без назваў"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Не атрымалася падключыцца"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Паказаць опцыі сертыфікацыі бесправаднога дысплея"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Пры выбары Wi Fi указваць у журнале RSSI для кожнага SSID"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Генерыраваць выпадковы MAC-адрас пры падключэнні да сетак Wi‑Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"З улікам трафіка"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Без уліку трафіка"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Памеры буфера для сродку вядзення журнала"</string> diff --git a/packages/SettingsLib/res/values-bg/arrays.xml b/packages/SettingsLib/res/values-bg/arrays.xml index 8484090413e3..994f0add34ff 100644 --- a/packages/SettingsLib/res/values-bg/arrays.xml +++ b/packages/SettingsLib/res/values-bg/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Да се използва проверка с HDCP само за DRM съдържание"</item> <item msgid="45075631231212732">"Винаги да се използва проверка с HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Деактивирано"</item> + <item msgid="1969681323976948639">"Филтрирането е активирано"</item> + <item msgid="8719029132154020716">"Активирано"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (по подразбиране)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml index 4efbe6443387..1454118c46c0 100644 --- a/packages/SettingsLib/res/values-bg/strings.xml +++ b/packages/SettingsLib/res/values-bg/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Автоматично е установена връзка чрез %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Автоматично е установена връзка чрез доставчик на услуги за оценяване на мрежите"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Установена е връзка през „%1$s“"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> на <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Установена е връзка през <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Мрежата е достъпна през „%1$s“"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Докоснете, за да настроите"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Докоснете, за да се регистрирате"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Установена е връзка – няма достъп до интернет"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Няма връзка с интернет"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Изисква се вход в профила"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Точката за достъп временно е пълна"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Установена е връзка през %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Мрежата е достъпна през %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Свързването не бе успешно"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Невалиден URL адрес на OSU сървъра"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Свързването с OSU сървъра не бе успешно"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Потвърждаването на OSU сървъра не бе успешно"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Невалиден сертификат на OSU сървъра"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Обезпечаването бе прекратено"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Обезпечаването не е възможно"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Невалиден URL адрес на OSU сървъра"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Неочакван тип команда"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Неочакван тип съобщение през SOAP"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Обменът на съобщения през SOAP не бе успешен"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Стартирането на приемателя за пренасочване не бе успешно"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Времето за изчакване на пренасочването изтече"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Няма намерена OSU активност"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Състояние за неочаквано съобщение през SOAP"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Намирането на PPS-MO не бе успешно"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Намирането на надежден основен възел за AAA сървъра не бе успешно"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Намирането на надежден основен възел за сървъра за отстраняване на проблеми не бе успешно"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Намирането на надежден основен възел за сървъра за правила не бе успешно"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Извличането на надеждните основни сертификати не бе успешно"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Намирането на надежден основен сертификат за AAA сървъра не бе успешно"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Добавянето на PassPoint конфигурация не бе успешно"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Намирането на OSU доставчик не бе успешно"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Установява се връзка"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Установена е връзка"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Установява се връзка с OSU сървъра"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU сървърът е потвърден"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Установена е връзка с OSU сървъра"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Първоначален обмен на данни през SOAP"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Изчаква се отговор за пренасочването"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Отговорът за пренасочването е получен"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Втори обмен на данни през SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Трети обмен на данни през SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Надеждните основни сертификати се извличат"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Обезпечаването е завършено"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> се отваря"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Не можа да се установи връзка"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Регистрацията се завършва…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Регистрацията не можа да бъде завършена. Докоснете, за да опитате отново."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Регистрацията е завършена. Установява се връзка…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Много бавна"</string> <string name="speed_label_slow" msgid="813109590815810235">"Бавна"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ОK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Да остане активен"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Екранът никога няма да е в спящ режим при зареждане"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Активиране на рег. файл за анализ за Bluetooth с протокола HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Запис на Bluetooth пакетите. (Превключване на Bluetooth след промяна на тази настройка)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Отключване от OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Разрешаване на първонач. зареждащата прогр. да се откл."</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Да се разреши ли отключване от OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Мрежи"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Безжичен дисплей"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"„Многословно“ регистр. на Wi‑Fi: Актив."</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Рандомизиране на свързания MAC адрес"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Винаги активни мобилни данни"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Хардуерно ускорение за тетъринга"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Показване на устройствата с Bluetooth без имена"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Не можа да се установи връзка"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Показване на опциите за сертифициране на безжичния дисплей"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"По-подробно регистр. на Wi‑Fi – данни за RSSI на SSID в инстр. за избор на Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Рандомизиране на MAC адреса при свързване с Wi-Fi мрежи"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"С отчитане"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Без отчитане"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Размери на регистрац. буфери"</string> diff --git a/packages/SettingsLib/res/values-bn/arrays.xml b/packages/SettingsLib/res/values-bn/arrays.xml index f05574239abc..ce3ca16bbe56 100644 --- a/packages/SettingsLib/res/values-bn/arrays.xml +++ b/packages/SettingsLib/res/values-bn/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"শুধুমাত্র DRM সামগ্রীর জন্য HDCP চেক করা ব্যবহার করুন"</item> <item msgid="45075631231212732">"সর্বদা HDCP পরীক্ষণ ব্যবহার করুন"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"বন্ধ করা আছে"</item> + <item msgid="1969681323976948639">"ফিল্টার করা চালু আছে"</item> + <item msgid="8719029132154020716">"চালু করা আছে"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (ডিফল্ট)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml index 913c0c442e40..dbf397f10c2a 100644 --- a/packages/SettingsLib/res/values-bn/strings.xml +++ b/packages/SettingsLib/res/values-bn/strings.xml @@ -38,50 +38,27 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"স্বয়ংক্রিয়ভাবে %1$s এর মাধ্যমে কানেক্ট হয়েছে"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"নেটওয়ার্কের রেটিং প্রদানকারীর মাধ্যমে অটোমেটিক কানেক্ট"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s মাধ্যমে কানেক্ট হয়েছে"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> এর <xliff:g id="SSID">%1$s</xliff:g>"</string> + <!-- no translation found for connected_via_app (5571999941988929520) --> + <skip /> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s এর মাধ্যমে উপলব্ধ"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"সেট-আপ করতে ট্যাপ করুন"</string> + <!-- no translation found for tap_to_sign_up (6449724763052579434) --> + <skip /> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"কানেক্ট, ইন্টারনেট নেই"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"ইন্টারনেট কানেকশন নেই"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"সাইন-ইন করা দরকার"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"এই মুহূর্তে অ্যাক্সেস পয়েন্টের কোনও কানেকশন ফাঁকা নেই"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s এর মাধ্যমে কানেক্ট হয়েছে"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s এর মাধ্যমে পাওয়া যাচ্ছে"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"কানেক্ট করা যায়নি"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"ভুল OSU সার্ভার ইউআরএল"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU সার্ভারে কানেক্ট করা যায়নি"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU সার্ভার যাচাই করা যায়নি"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"ভুল OSU সার্ভার সার্টিফিকেট"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"প্রভিশনিং বাতিল করা হয়েছে"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"প্রভিশনিং উপলভ্য নেই"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"ভুল OSU সার্ভার ইউআরএল"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"অপ্রত্যাশিত কমান্ডের ধরন"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"অপ্রত্যাশিত SOAP মেসেজের ধরন"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP মেসেজ এক্সচেঞ্জ করা যায়নি"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"রিডাইরেক্ট লিসনার শুরু হয়নি"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"রিডাইরেক্টের জন্য অপেক্ষা করার সময় শেষ হয়েছে"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"কোনও OSU অ্যাক্টিভিটি খুঁজে পাওয়া যায়নি"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"অপ্রত্যাশিত SOAP মেসেজের স্ট্যাটাস"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO খুঁজে পাওয়া যায়নি"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA সার্ভারের জন্য ট্রাস্ট রুট নোড খুঁজে পাওয়া যায়নি"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"রেমেডিয়েশন সার্ভারের জন্য ট্রাস্ট রুট নোড খুঁজে পাওয়া যায়নি"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"নীতি সার্ভারের জন্য ট্রাস্ট রুট নোড খুঁজে পাওয়া যায়নি"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"\'ট্রাস্ট রুট সার্টিফিকেট ফিরিয়ে আনা যায়নি"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA সার্ভারের জন্য ট্রাস্ট রুট সার্টিফিকেট খুঁজে পাওয়া যায়নি"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint কনফিগারেশন যোগ করা যায়নি"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU প্রদানকারী খুঁজে পাওয়া যায়নি"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"কানেক্ট হচ্ছে"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"কানেক্ট করা হয়েছে"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU সার্ভারের সাথে কানেক্ট করা হচ্ছে"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU সার্ভার যাচাই করা হয়েছে"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU সার্ভারের সাথে কানেক্ট করা আছে"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"প্রারম্ভিক SOAP এক্সচেঞ্জ"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"রিডাইরেক্টের উত্তর পাওয়ার জন্য অপেক্ষা করা হচ্ছে"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"রিডাইরেক্টের উত্তর পাওয়া গেছে"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"সেকেন্ড SOAP এক্সচেন্জ"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"থার্ড SOAP এক্সচেন্জ"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"ট্রাস্ট রুট সার্টিফিকেট ফিরিয়ে আনা হচ্ছে"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"প্রভিশনিং সম্পূর্ণ হয়েছে"</string> + <!-- no translation found for osu_opening_provider (5488997661548640424) --> + <skip /> + <!-- no translation found for osu_connect_failed (2187750899158158934) --> + <skip /> + <!-- no translation found for osu_completing_sign_up (9037638564719197082) --> + <skip /> + <!-- no translation found for osu_sign_up_failed (7296159750352873260) --> + <skip /> + <!-- no translation found for osu_sign_up_complete (8207626049093289203) --> + <skip /> <string name="speed_label_very_slow" msgid="1867055264243608530">"খুব ধীরে"</string> <string name="speed_label_slow" msgid="813109590815810235">"ধীরে"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ঠিক আছে"</string> @@ -234,8 +211,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"জাগিয়ে রাখুন"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"চার্জ হওয়ার স্ক্রিন কখনই নিদ্রা মোডে যাবে না"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ব্লুটুথ HCI স্নুপ লগ সক্ষম করুন"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ব্লুটুথ প্যাকেট ক্যাপচার করুন। (এই সেটিং পরিবর্তন করার পরে ব্লুটুথ চালু অথবা বন্ধ করুন)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM আনলক করা হচ্ছে"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"বুট-লোডার আনলক করার অনুমতি দিন"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM আনলক করার অনুমতি দিতে চান?"</string> @@ -246,7 +222,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"নেটওয়ার্কিং"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"ওয়্যারলেস ডিসপ্লে সার্টিফিকেশন"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"ওয়াই-ফাই ভারবোস লগিং সক্ষম করুন"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"কানেক্ট MAC র্যান্ডমাইজেশন"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"মোবাইল ডেটা সব সময় সক্রিয় থাক"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"টিথারিং হার্ডওয়্যার অ্যাক্সিলারেশন"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"নামহীন ব্লুটুথ ডিভাইসগুলি দেখুন"</string> @@ -273,7 +248,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"কানেক্ট করা যায়নি"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"ওয়্যারলেস প্রদর্শন সার্টিফিকেশন জন্য বিকল্পগুলি দেখান"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"ওয়াই-ফাই লগিং স্তর বাড়ান, ওয়াই-ফাই চয়নকারীতে SSID RSSI অনুযায়ী দেখান"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"ওয়াই-ফাই নেটওয়ার্কে কানেক্ট করার সময় MAC অ্যাড্রেস র্যান্ডমাইজ করুন"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"পরিমাপ করা"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"পরিমাপ করা নয়"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"লগার বাফারের আকারগুলি"</string> diff --git a/packages/SettingsLib/res/values-bs/arrays.xml b/packages/SettingsLib/res/values-bs/arrays.xml index bcb35f1e49fe..96772b6a139b 100644 --- a/packages/SettingsLib/res/values-bs/arrays.xml +++ b/packages/SettingsLib/res/values-bs/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Koristi HDCP provjeru samo za DRM sadržaj"</item> <item msgid="45075631231212732">"Uvijek koristi HDCP provjeru"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Onemogućeno"</item> + <item msgid="1969681323976948639">"Omogućeno filtrirano"</item> + <item msgid="8719029132154020716">"Omogućeno"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (zadano)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml index 1ba69048b3ea..272e7971e5bf 100644 --- a/packages/SettingsLib/res/values-bs/strings.xml +++ b/packages/SettingsLib/res/values-bs/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatski povezano koristeći %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatski povezano putem ocjenjivača mreže"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Povezani preko %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> autora <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Povezano preko <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Dostupan preko %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Dodirnite za postavljanje"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Dodirnite za prijavu"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Povezano, nema interneta"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Nema internetske veze"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Potrebna je prijava"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pristupna tačka je privremeno puna"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Povezano koristeći %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Dostupna koristeći %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Veza nije uspjela"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Nevažeći URL OSU servera"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Povezivanje s OSU serverom nije uspjelo"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Potvrda OSU servera nije uspjela"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Nevažeći certifikat OSU servera"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Pružanje usluga je prekinuto"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Pružanje usluga nije dostupno"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Nevažeći URL OSU servera"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Neočekivana vrsta komande"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Neočekivana vrsta poruke SOAP"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Razmjena SOAP poruka nije uspjela"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Preusmjereni slušalac nije pokrenuo sadržaj"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Vrijeme za preusmjeravanje je isteklo"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU aktivnosti nisu pronađene"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Status neočekivane SOAP poruke"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO nije pronađen"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Pouzdani temeljni čvor za AAA server nije pronađen"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Pouzdani temeljni čvor za server za uklanjanje problema nije pronađen"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Pouzdani temeljni čvor za server pravila nije pronađen"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Preuzimanje temeljnih pouzdanih certifikata nije uspjelo"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Pouzdani temeljni certifikat za AAA server nije pronađen"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Nije moguće dodati PassPoint konfiguraciju"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU pružatelj usluga nije pronađen"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Povezivanje"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Povezano"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Povezivanje na OSU server"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU server je potvrđen"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Povezano na OSU server"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Prva SOAP razmjena"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Čekanje odgovora za preusmjeravanje"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Primljen je odgovor o preusmjeravanju"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Druga SOAP razmjena"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Treća SOAP razmjena"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Preuzimanje pouzdanih temeljnih certifikata"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Pružanje usluge je završeno"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Otvaranje <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Povezivanje nije uspjelo"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Završavanje registracije…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Registraciju nije moguće izvršiti. Dodirnite da pokušate ponovo."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registracija je završena. Povezivanje…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Veoma sporo"</string> <string name="speed_label_slow" msgid="813109590815810235">"Sporo"</string> <string name="speed_label_okay" msgid="2331665440671174858">"UREDU"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Ostani aktivan"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Ekran neće prelaziti u stanje mirovanja tokom punjenja"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Omogući Bluetooth HCI snoop zapis"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Snimite Bluetooth pakete. (Uključite/isključite Bluetooth nakon što promijenite ovu postavku)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM otključavanje"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Dozvoli otključavanje bootloadera"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Želite li dozvoliti OEM otključavanje?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Umrežavanje"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certifikacija bežičnog prikaza"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Omogući detaljniju evidenciju za WiFi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Nasumični odabir MAC adrese pri povezivanju"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilna mreža za prijenos podataka je uvijek aktivna"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardversko ubrzavanje za povezivanje putem mobitela"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Prikaži Bluetooth uređaje bez naziva"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Povezivanje nije uspjelo"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Prikaži opcije za certifikaciju bežičnog prikaza"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povećava nivo evidentiranja za WiFi. Prikaz po SSID RSSI-ju u Biraču WiFi-ja"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Nasumično odaberi MAC adresu prilikom povezivanja na WiFi mreže"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"S naplatom"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Mreža bez ograničenja prometa"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Veličine bafera za zapisnik"</string> diff --git a/packages/SettingsLib/res/values-ca/arrays.xml b/packages/SettingsLib/res/values-ca/arrays.xml index fd0df047e42e..33385e4e0587 100644 --- a/packages/SettingsLib/res/values-ca/arrays.xml +++ b/packages/SettingsLib/res/values-ca/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Utilitza la comprovació HDCP només per a contingut DRM"</item> <item msgid="45075631231212732">"Utilitza sempre la comprovació HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Desactivat"</item> + <item msgid="1969681323976948639">"Activat amb filtres"</item> + <item msgid="8719029132154020716">"Activat"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (predeterminada)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml index 8133559b9468..5d2dd65f9824 100644 --- a/packages/SettingsLib/res/values-ca/strings.xml +++ b/packages/SettingsLib/res/values-ca/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Connectada automàticament a través de: %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Connectada automàticament a través d\'un proveïdor de valoració de xarxes"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Connectada mitjançant %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> de: <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Connectat mitjançant <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Disponible mitjançant %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Toca per configurar"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Toca per registrar-te"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Connectada, sense Internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Sense connexió a Internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Cal iniciar la sessió"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"El punt d\'accés està temporalment ple"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Connectat mitjançant %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Disponible mitjançant %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Connexió fallida"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL de servidor OSU no vàlid"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"No s\'ha pogut connectar al servidor OSU"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"No s\'ha pogut validar el servidor OSU"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificat de servidor OSU no vàlid"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Proveïment anul·lat"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Proveïment no disponible"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL de servidor OSU no vàlid"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Tipus d\'ordre inesperada"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Tipus de missatge SOAP inesperat"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"No s\'ha pogut intercanviar el missatge SOAP"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"No s\'ha pogut iniciar el processador de redirecció"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Temps d\'espera de redirecció esgotat"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"No s\'ha trobat cap activitat OSU"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Estat de missatge SOAP inesperat"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"No s\'ha pogut trobar PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"No s\'ha pogut trobar el node arrel de confiança del servidor AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"No s\'ha pogut trobar el node arrel de confiança del servidor de solucions"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"No s\'ha pogut trobar el node arrel de confiança del servidor de polítiques"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"No s\'han pogut recuperar els certificats arrel de confiança"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"No s\'ha pogut trobar el certificat arrel de confiança del servidor AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"No s\'ha pogut afegir la configuració PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"No s\'ha pogut trobar el proveïdor OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"S\'està connectant"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Connectat"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"S\'està connectant al servidor OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Servidor OSU validat"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Connectat a un servidor OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Primer intercanvi SOAP"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"S\'està esperant la resposta de redirecció"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Resposta de redirecció rebuda"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Segon intercanvi SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Tercer intercanvi SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"S\'estan recuperant els certificats arrel de confiança"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Proveïment complet"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"S\'està obrint <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"No s\'ha pogut connectar"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"S\'està completant el registre…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"No s\'ha pogut completar el registre. Toca per tornar-ho a provar."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"S\'ha completat el registre. S\'està connectant…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Molt lenta"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Correcta"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Pantalla sempre activa"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"La pantalla no entra mai en mode de repòs si el dispositiu està carregant-se"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activa registre de Bluetooth HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Captura els paquets de Bluetooth. Activa el Bluetooth un cop hagis canviat aquesta opció."</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueig d\'OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permet desbloquejar el bootloader"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Permetre el desbloqueig d\'OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Xarxes"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certificació de pantalla sense fil"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Activa el registre Wi‑Fi detallat"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Ordre aleatori d\'adreces MAC amb connexió"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Dades mòbils sempre actives"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Acceleració per maquinari per a compartició de xarxa"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostra els dispositius Bluetooth sense el nom"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"No s\'ha pogut connectar"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostra les opcions per a la certificació de pantalla sense fil"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Augmenta nivell de registre Wi‑Fi i mostra\'l per SSID RSSI al Selector de Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Ordena les adreces MAC de manera aleatòria en connectar-se a xarxes Wi-Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Amb límit de dades"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Sense límit de dades"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Mides memòria intermèdia registrador"</string> diff --git a/packages/SettingsLib/res/values-cs/arrays.xml b/packages/SettingsLib/res/values-cs/arrays.xml index 29beb774dee8..cdd70947b7b3 100644 --- a/packages/SettingsLib/res/values-cs/arrays.xml +++ b/packages/SettingsLib/res/values-cs/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Použít kontrolu HDCP pouze pro obsah DRM"</item> <item msgid="45075631231212732">"Vždy používat kontrolu HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Vypnuto"</item> + <item msgid="1969681323976948639">"Povolit filtrované"</item> + <item msgid="8719029132154020716">"Zapnuto"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (výchozí)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml index 42e2ad3dee3a..19a042ed2f6d 100644 --- a/packages/SettingsLib/res/values-cs/strings.xml +++ b/packages/SettingsLib/res/values-cs/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automaticky připojeno přes poskytovatele %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automaticky připojeno přes poskytovatele hodnocení sítí"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Připojeno prostřednictvím %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>: <xliff:g id="SSID">%1$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Připojeno přes <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Dostupné prostřednictvím %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Nastavíte klepnutím"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Klepnutím se zaregistrujete"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Připojeno, není k dispozici internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Nejste připojeni k internetu"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Je vyžadováno přihlášení"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Přístupový bod je dočasně zaplněn"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Připojeno prostřednictvím %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Dostupné prostřednictvím %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Připojení se nezdařilo"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Neplatná adresa URL serveru OSU"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Připojení k serveru OSU se nezdařilo"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Ověření serveru OSU se nezdařilo"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Neplatný certifikát serveru OSU"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Zajišťování bylo zrušeno"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Zajišťování není k dispozici"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Neplatná adresa URL serveru OSU"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Neočekávaný typ příkazu"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Neočekávaný typ zprávy SOAP"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Výměna zpráva SOAP se nezdařila"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Poslech za účelem přesměrování se nepodařilo zahájit"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Vypršel časový limit čekání na přesměrování"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nebyla nalezena žádná aktivita OSU"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Neočekávaný stav zprávy SOAP"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO se nepodařilo najít"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Kořenový uzel důvěry pro server AAA se nepodařilo najít"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Kořenový uzel důvěry pro server nápravy se nepodařilo najít"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Kořenový uzel důvěry pro server zásad se nepodařilo najít"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Kořenové certifikáty důvěry se nepodařilo načíst"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Kořenový uzel důvěry pro server AAA se nepodařilo najít"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Konfiguraci PassPoint se nepodařilo přidat"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Poskytovatele OSU se nepodařilo najít"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Připojování"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Připojeno"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Připojování k serveru OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Server OSU byl ověřen"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Připojeno k serveru OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"První výměna SOAP"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Čekání na odpověď s přesměrováním"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Byla přijata odpověď s přesměrováním"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Druhá výměna SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Třetí výměna SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Načítání kořenových certifikátů důvěry"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Zajišťování bylo dokončeno"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Spouštění aplikace <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Nelze se připojit"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Dokončování registrace…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Registraci se nepodařilo dokončit. Klepnutím opakujte akci."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registrace byla dokončena. Připojování…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Velmi pomalá"</string> <string name="speed_label_slow" msgid="813109590815810235">"Pomalá"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Nevypínat obrazovku"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Obrazovka se při nabíjení nepřepne do režimu spánku"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Povolit protokol Bluetooth HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Zaznamenávat pakety Bluetooth. (Po změně tohoto nastavení zapněte nebo vypněte Bluetooth.)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Odemknutí OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Povolit odemknutí zavaděče"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Povolit odemknutí OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Sítě"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certifikace bezdrát. displeje"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Podrobné protokolování Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Náhodné adresy MAC při připojení"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilní data jsou vždy aktivní"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardwarová akcelerace tetheringu"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Zobrazovat zařízení Bluetooth bez názvů"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Nelze se připojit"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Zobrazit možnosti certifikace bezdrátového displeje"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Zvýšit úroveň protokolování Wi‑Fi zobrazenou v SSID a RSSI při výběru sítě Wi‑Fi."</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Při připojení k sítím Wi-Fi používat náhodnou adresu MAC"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Měřená"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Neměřená"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Vyrovnávací paměť protokol. nástroje"</string> diff --git a/packages/SettingsLib/res/values-da/arrays.xml b/packages/SettingsLib/res/values-da/arrays.xml index 97e2b0542444..358efff338af 100644 --- a/packages/SettingsLib/res/values-da/arrays.xml +++ b/packages/SettingsLib/res/values-da/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Brug kun HDCP-kontrol ved DRM-indhold"</item> <item msgid="45075631231212732">"Brug altid HDCP-kontrol"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Deaktiveret"</item> + <item msgid="1969681323976948639">"Filtreret er aktiveret"</item> + <item msgid="8719029132154020716">"Aktiveret"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (standard)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml index f504afbd761b..bde67fde480f 100644 --- a/packages/SettingsLib/res/values-da/strings.xml +++ b/packages/SettingsLib/res/values-da/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatisk tilsluttet via %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatisk forbundet via udbyder af netværksvurdering"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Tilsluttet via %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> fra <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Forbundet via <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Tilgængelig via %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Tryk for at konfigurere"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Tryk for at registrere dig"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Tilsluttet – intet internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Intet internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Login er påkrævet"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Adgangspunktet er midlertidigt fuldt"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Tilsluttet via %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Tilgængelig via %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Der kunne ikke oprettes forbindelse"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Ugyldig webadresse for OSU-serveren"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Der kunne ikke oprettes forbindelse til OSU-serveren"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU-servervalideringen mislykkedes"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Ugyldigt OSU-servercertifikat"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisioneringen blev annulleret"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisionering er ikke tilgængelig"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Ugyldig webadresse for OSU-serveren"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Uventet kommandotype"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Uventet SOAP-meddelelsestype"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Udvekslingen af SOAP-meddelelser mislykkedes"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Lyttefunktionen til omdirigering kunne ikke starte"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Der opstod timeout under ventetiden for omdirigering"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Der blev ikke fundet nogen OSU-aktivitet"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Uventet SOAP-meddelelsesstatus"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO kunne ikke findes"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Der blev ikke fundet nogen godkendt rodnode til AAA-serveren"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Der blev ikke fundet nogen godkendt rodnode til afhjælpningsserveren"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Der blev ikke fundet nogen godkendt rodnode til politikserveren"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Der kunne ikke hentes godkendte rodcertifikater"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Det lykkedes ikke at finde et godkendt rodcertifikat til AAA-serveren"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Der kunne ikke tilføjes PassPoint-konfiguration"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Der kunne ikke findes en OSU-udbyder"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Opretter forbindelse"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Der er oprettet forbindelse"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Opretter forbindelse til OSU-serveren"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-serveren blev godkendt"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Der er oprettet forbindelse til OSU-serveren"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Første SOAP-udveksling"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Venter på omdirigeringssvar"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Der blev modtaget et omdirigeringssvar"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Anden SOAP-udveksling"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Tredje SOAP-udveksling"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Henter godkendte rodcertifikater"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisioneringen er udført"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Åbner <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Der kunne ikke oprettes forbindelse"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Fuldfører registrering…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Registreringen kunne ikke fuldføres. Tryk for at prøve igen."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registreringen er fuldført. Opretter forbindelse…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Meget langsom"</string> <string name="speed_label_slow" msgid="813109590815810235">"Langsom"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Lås ikke"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Skærmen går ikke i dvale under opladning"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Aktivér Bluetooth HCI spionlog"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Gem Bluetooth-pakker. (slå Bluetooth til/fra, efter du har ændret denne indstilling)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-oplåsning"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Tillad, at startindlæseren låses op"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Vil du tillade OEM-oplåsning?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Netværk"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certificering af trådløs skærm"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Aktivér detaljeret Wi-Fi-logføring"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Forbindelse med tilfældig MAC-adresse"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobildata er altid aktiveret"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardwareacceleration ved netdeling"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Vis Bluetooth-enheder uden navne"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Der kunne ikke oprettes forbindelse"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Vis valgmuligheder for certificering af trådløs skærm"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Øg mængden af Wi‑Fi-logføring. Vis opdelt efter SSID RSSI i Wi‑Fi-vælgeren"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Brug en tilfældig MAC-adresse, når der oprettes forbindelse til Wi‑Fi-netværk"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Forbrugsafregnet"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Ikke forbrugsafregnet"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Størrelser for Logger-buffer"</string> diff --git a/packages/SettingsLib/res/values-de/arrays.xml b/packages/SettingsLib/res/values-de/arrays.xml index 755b6bbcbb4e..90e26d23a610 100644 --- a/packages/SettingsLib/res/values-de/arrays.xml +++ b/packages/SettingsLib/res/values-de/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"HDCP-Prüfung nur für DRM-Inhalte verwenden"</item> <item msgid="45075631231212732">"HDCP-Prüfung immer verwenden"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Deaktiviert"</item> + <item msgid="1969681323976948639">"Filter aktiviert"</item> + <item msgid="8719029132154020716">"Aktiviert"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (Standard)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml index ad676691aafe..543e8f86ee71 100644 --- a/packages/SettingsLib/res/values-de/strings.xml +++ b/packages/SettingsLib/res/values-de/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatisch über %1$s verbunden"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatisch über Anbieter von Netzwerkbewertungen verbunden"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Über %1$s verbunden"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> von <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Verbunden über <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Verfügbar über %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Zum Einrichten tippen"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Zum Anmelden tippen"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Verbunden, kein Internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Kein Internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Anmeldung erforderlich"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Zugangspunkt vorübergehend voll belegt"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Über %1$s verbunden"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Verfügbar über %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Fehler beim Herstellen der Verbindung"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Ungültige OSU-Server-URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Fehler beim Verbinden mit dem OSU-Server"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Fehler bei der OSU-Servervalidierung"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Ungültiges OSU-Serverzertifikat"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Bereitstellung abgebrochen"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Bereitstellung nicht verfügbar"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Ungültige OSU-Server-URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Unerwarteter Befehlstyp"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Unerwarteter SOAP-Nachrichtentyp"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Fehler beim SOAP-Nachrichtenaustausch"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Weiterleitungs-Listener konnte nicht gestartet werden"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Zeitüberschreitung beim Warten auf die Weiterleitung"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Es wurde keine OSU-Aktivität gefunden"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Unerwarteter SOAP-Nachrichtenstatus"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO konnte nicht gefunden werden"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Es konnte kein vertrauenswürdiger Root-Knoten für den AAA-Server gefunden werden"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Es konnte kein vertrauenswürdiger Root-Knoten für den Wiederherstellungsserver gefunden werden"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Es konnte kein vertrauenswürdiger Root-Knoten für den Richtlinienserver gefunden werden"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Es konnten keine vertrauenswürdigen Root-Zertifikate abgerufen werden"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Es konnte kein vertrauenswürdiges Root-Zertifikat für den AAA-Server gefunden werden"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint-Konfiguration konnte nicht hinzugefügt werden"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Es konnte kein OSU-Anbieter gefunden werden"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Wird verbunden"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Verbunden"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Verbindung zum OSU-Server wird hergestellt"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-Server validiert"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Mit OSU-Server verbunden"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Erster SOAP-Nachrichtenaustausch"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Warten auf Weiterleitung"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Als Antwort Weiterleitung erhalten"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Zweiter SOAP-Nachrichtenaustausch"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Dritter SOAP-Nachrichtenaustausch"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Vertrauenswürdige Root-Zertifikate werden abgerufen"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Bereitstellung abgeschlossen"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> wird geöffnet"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Verbindung nicht möglich"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Anmeldung wird abgeschlossen…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Anmeldung konnte nicht abgeschlossen werden. Tippe, um es noch einmal zu versuchen."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Anmeldung abgeschlossen. Verbindung wird hergestellt…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Sehr langsam"</string> <string name="speed_label_slow" msgid="813109590815810235">"Langsam"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Aktiv lassen"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Display wird beim Laden nie in den Ruhezustand versetzt"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI-Snoop-Protokoll aktivieren"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth-Pakete erfassen. Nach der Änderung muss Bluetooth aus- und wieder eingeschaltet werden"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-Entsperrung"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Bootloader-Entsperrung zulassen"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM-Entsperrung zulassen?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Netzwerke"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Kabellose Übertragung"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Ausführliche WLAN-Protokolle aktivieren"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Verbundene randomisierte MAC-Adresse"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobile Datennutzung immer aktiviert"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardwarebeschleunigung für Tethering"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth-Geräte ohne Namen anzeigen"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Verbindung nicht möglich"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Optionen zur Zertifizierung für kabellose Übertragung anzeigen"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Level für WLAN-Protokollierung erhöhen, in WiFi Picker pro SSID-RSSI anzeigen"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"MAC-Adresse randomisieren, wenn WLAN-Verbindungen hergestellt werden"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Kostenpflichtig"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Nicht kostenpflichtig"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Logger-Puffergrößen"</string> diff --git a/packages/SettingsLib/res/values-el/arrays.xml b/packages/SettingsLib/res/values-el/arrays.xml index 3d91c1d17fa8..96a6086273f5 100644 --- a/packages/SettingsLib/res/values-el/arrays.xml +++ b/packages/SettingsLib/res/values-el/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Χρήση ελέγχου HDCP μόνο για περιεχόμενο DRM"</item> <item msgid="45075631231212732">"Να χρησιμοποιείται πάντα έλεγχος HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Απενεργοποιήθηκε"</item> + <item msgid="1969681323976948639">"Ενεργοποιήθηκε το φιλτράρισμα"</item> + <item msgid="8719029132154020716">"Ενεργοποιήθηκε"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (Προεπιλογή)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml index 370c9c0d1e9a..f7ec12be8651 100644 --- a/packages/SettingsLib/res/values-el/strings.xml +++ b/packages/SettingsLib/res/values-el/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Συνδέθηκε αυτόματα μέσω %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Συνδέθηκε αυτόματα μέσω παρόχου αξιολόγησης δικτύου"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Συνδέθηκε μέσω %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> από <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Συνδέθηκε μέσω <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Διαθέσιμο μέσω %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Πατήστε για ρύθμιση"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Πατήστε για εγγραφή"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Συνδέθηκε, χωρίς σύνδεση στο διαδίκτυο"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Δεν υπάρχει σύνδεση στο διαδίκτυο"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Απαιτείται σύνδεση"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Το σημείο πρόσβασης είναι προσωρινά πλήρες"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Συνδέθηκε μέσω %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Διαθέσιμο μέσω %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Η σύνδεση απέτυχε"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Μη έγκυρο URL διακομιστή OSU"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Η σύνδεση με τον διακομιστή OSU απέτυχε"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Η επαλήθευση του διακομιστή OSU απέτυχε"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Μη έγκυρο πιστοποιητικό διακομιστή OSU"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Η παροχή ακυρώθηκε"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Η παροχή δεν είναι διαθέσιμη"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Μη έγκυρο URL διακομιστή OSU"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Μη αναμενόμενος τύπος εντολής"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Μη αναμενόμενος τύπος μηνύματος SOAP"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Η ανταλλαγή μηνύματος SOAP απέτυχε"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Αποτυχία εκκίνησης λειτουργίας ακρόασης ανακατεύθυνσης"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Έληξε το χρονικό όριο αναμονής για ανακατεύθυνση"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Δεν βρέθηκε δραστηριότητα OSU"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Μη αναμενόμενη κατάσταση μηνύματος SOAP"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Η εύρεση PPS-MO απέτυχε"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Η εύρεση αξιόπιστου ριζικού κόμβου για τον διακομιστή AAA απέτυχε"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Η εύρεση αξιόπιστου ριζικού κόμβου για τον διακομιστή αποκατάστασης απέτυχε"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Η εύρεση αξιόπιστου ριζικού κόμβου για τον διακομιστή πολιτικής απέτυχε"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Η ανάκτηση αξιόπιστων πιστοποιητικών ρίζας απέτυχε"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Η εύρεση αξιόπιστου πιστοποιητικού ρίζας για τον διακομιστή AAA απέτυχε"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Η προσθήκη διαμόρφωσης PassPoint απέτυχε"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Η εύρεση παρόχου OSU απέτυχε"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Σύνδεση"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Συνδέθηκε"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Σύνδεση σε διακομιστή OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Ο διακομιστής OSU επαληθεύτηκε"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Συνδέθηκε σε διακομιστή OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Αρχική ανταλλαγή SOAP"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Αναμονή για απόκριση ανατακατεύθυνσης"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Ελήφθη απόκριση ανακατεύθυνσης"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Δεύτερη ανταλλαγή SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Τρίτη ανταλλαγή SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Ανάκτηση αξιόπιστων πιστοποιητικών ρίζας"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Η παροχή ολοκληρώθηκε"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Άνοιγμα <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Δεν ήταν δυνατή η σύνδεση"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Ολοκλήρωση εγγραφής…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Δεν ήταν δυνατή η ολοκλήρωση της εγγραφής. Πατήστε για να δοκιμάσετε ξανά."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Η εγγραφή ολοκληρώθηκε. Σύνδεση…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Πολύ αργή"</string> <string name="speed_label_slow" msgid="813109590815810235">"Αργή"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ΟΚ"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Παραμονή σε λειτουργία"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Η οθόνη δεν θα μεταβαίνει ποτέ σε κατάσταση αδράνειας κατά τη φόρτιση"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Ενερ/ση καταγρ. Bluetooth HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Λήψη πακέτων Bluetooth. (Εναλλαγή Bluetooth μετά την αλλαγή αυτής της ρύθμισης)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Ξεκλείδωμα OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Να επιτρέπεται το ξεκλείδωμα λειτουργίας εκκίνησης"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Να επιτρέπεται το ξεκλείδωμα OEM;"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Δικτύωση"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Πιστοποίηση ασύρματης οθόνης"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Ενεργοποίηση λεπτομερ. καταγραφής Wi-Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Τυχαιοποίηση συνδεδεμένης διεύθυνσης MAC"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Πάντα ενεργά δεδομένα κινητής τηλεφωνίας"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Σύνδεση επιτάχυνσης υλικού"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Εμφάνιση συσκευών Bluetooth χωρίς ονόματα"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Δεν ήταν δυνατή η σύνδεση"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Εμφάνιση επιλογών για πιστοποίηση ασύρματης οθόνης"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Αύξηση επιπέδου καταγ. Wi-Fi, εμφάνιση ανά SSID RSSI στο εργαλείο επιλογής Wi-Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Τυχαιοποίηση διεύθυνσης MAC κατά τη σύνδεση σε δίκτυα Wi‑Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Μέτρηση με βάση τη χρήση"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Χωρίς μέτρηση με βάση τη χρήση"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Μέγεθος προσωρινής μνήμης για τη λειτουργία καταγραφής"</string> diff --git a/packages/SettingsLib/res/values-en-rAU/arrays.xml b/packages/SettingsLib/res/values-en-rAU/arrays.xml index e7d0bd4753c3..c48f62b7e9e2 100644 --- a/packages/SettingsLib/res/values-en-rAU/arrays.xml +++ b/packages/SettingsLib/res/values-en-rAU/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item> <item msgid="45075631231212732">"Always use HDCP checking"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Disabled"</item> + <item msgid="1969681323976948639">"Enabled Filtered"</item> + <item msgid="8719029132154020716">"Enabled"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml index 5684369fb23d..b9d309398d67 100644 --- a/packages/SettingsLib/res/values-en-rAU/strings.xml +++ b/packages/SettingsLib/res/values-en-rAU/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatically connected via %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatically connected via network rating provider"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> by <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Connected via <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Tap to set up"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Tap to sign up"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Connected, no Internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"No Internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Sign-in required"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Access point temporarily full"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Connected via %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Available via %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Connection failed"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Invalid OSU server URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU server connection failed"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU server validation failed"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Invalid OSU server certificate"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisioning aborted"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisioning not available"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Invalid OSU server URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Unexpected command type"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Unexpected SOAP message type"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP message exchange failed"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Redirect listener failed to start"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Timed out waiting for redirect"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"No OSU activity found"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Unexpected SOAP message status"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Failed to find PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Failed to find trust root node for AAA server"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Failed to find trust root node for remediation server"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Failed to find trust root node for policy server"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Failed to retrieve trust root certificates"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Failed to find trust root certificate for AAA server"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Failed to add PassPoint configuration"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Failed to find an OSU provider"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Connecting"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Connected"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Connecting to OSU server"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU server validated"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Connected to OSU server"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Initial SOAP exchange"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Waiting for redirect response"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Received redirect response"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Second SOAP exchange"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Third SOAP exchange"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Retrieving trust root certificates"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisioning complete"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Opening <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Couldn’t connect"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Completing sign-up…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Couldn’t complete sign-up. Tap to try again"</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Sign-up complete. Connecting…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Very slow"</string> <string name="speed_label_slow" msgid="813109590815810235">"Slow"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Stay awake"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Screen will never sleep while charging"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Enable Bluetooth HCI snoop log"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capture Bluetooth packets. (Toggle Bluetooth after changing this setting)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM unlocking"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Allow the bootloader to be unlocked"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Allow OEM unlocking?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Networking"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Wireless display certification"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Enable Wi‑Fi verbose logging"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Connected MAC randomisation"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobile data always active"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering hardware acceleration"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Show Bluetooth devices without names"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Couldn\'t connect"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Randomise MAC address when connecting to Wi‑Fi networks"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Metered"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Unmetered"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Logger buffer sizes"</string> diff --git a/packages/SettingsLib/res/values-en-rCA/arrays.xml b/packages/SettingsLib/res/values-en-rCA/arrays.xml index e7d0bd4753c3..c48f62b7e9e2 100644 --- a/packages/SettingsLib/res/values-en-rCA/arrays.xml +++ b/packages/SettingsLib/res/values-en-rCA/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item> <item msgid="45075631231212732">"Always use HDCP checking"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Disabled"</item> + <item msgid="1969681323976948639">"Enabled Filtered"</item> + <item msgid="8719029132154020716">"Enabled"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml index 5684369fb23d..b9d309398d67 100644 --- a/packages/SettingsLib/res/values-en-rCA/strings.xml +++ b/packages/SettingsLib/res/values-en-rCA/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatically connected via %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatically connected via network rating provider"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> by <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Connected via <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Tap to set up"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Tap to sign up"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Connected, no Internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"No Internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Sign-in required"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Access point temporarily full"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Connected via %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Available via %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Connection failed"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Invalid OSU server URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU server connection failed"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU server validation failed"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Invalid OSU server certificate"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisioning aborted"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisioning not available"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Invalid OSU server URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Unexpected command type"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Unexpected SOAP message type"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP message exchange failed"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Redirect listener failed to start"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Timed out waiting for redirect"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"No OSU activity found"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Unexpected SOAP message status"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Failed to find PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Failed to find trust root node for AAA server"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Failed to find trust root node for remediation server"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Failed to find trust root node for policy server"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Failed to retrieve trust root certificates"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Failed to find trust root certificate for AAA server"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Failed to add PassPoint configuration"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Failed to find an OSU provider"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Connecting"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Connected"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Connecting to OSU server"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU server validated"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Connected to OSU server"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Initial SOAP exchange"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Waiting for redirect response"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Received redirect response"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Second SOAP exchange"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Third SOAP exchange"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Retrieving trust root certificates"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisioning complete"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Opening <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Couldn’t connect"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Completing sign-up…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Couldn’t complete sign-up. Tap to try again"</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Sign-up complete. Connecting…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Very slow"</string> <string name="speed_label_slow" msgid="813109590815810235">"Slow"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Stay awake"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Screen will never sleep while charging"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Enable Bluetooth HCI snoop log"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capture Bluetooth packets. (Toggle Bluetooth after changing this setting)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM unlocking"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Allow the bootloader to be unlocked"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Allow OEM unlocking?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Networking"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Wireless display certification"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Enable Wi‑Fi verbose logging"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Connected MAC randomisation"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobile data always active"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering hardware acceleration"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Show Bluetooth devices without names"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Couldn\'t connect"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Randomise MAC address when connecting to Wi‑Fi networks"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Metered"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Unmetered"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Logger buffer sizes"</string> diff --git a/packages/SettingsLib/res/values-en-rGB/arrays.xml b/packages/SettingsLib/res/values-en-rGB/arrays.xml index e7d0bd4753c3..c48f62b7e9e2 100644 --- a/packages/SettingsLib/res/values-en-rGB/arrays.xml +++ b/packages/SettingsLib/res/values-en-rGB/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item> <item msgid="45075631231212732">"Always use HDCP checking"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Disabled"</item> + <item msgid="1969681323976948639">"Enabled Filtered"</item> + <item msgid="8719029132154020716">"Enabled"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml index 5684369fb23d..b9d309398d67 100644 --- a/packages/SettingsLib/res/values-en-rGB/strings.xml +++ b/packages/SettingsLib/res/values-en-rGB/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatically connected via %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatically connected via network rating provider"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> by <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Connected via <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Tap to set up"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Tap to sign up"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Connected, no Internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"No Internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Sign-in required"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Access point temporarily full"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Connected via %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Available via %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Connection failed"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Invalid OSU server URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU server connection failed"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU server validation failed"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Invalid OSU server certificate"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisioning aborted"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisioning not available"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Invalid OSU server URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Unexpected command type"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Unexpected SOAP message type"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP message exchange failed"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Redirect listener failed to start"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Timed out waiting for redirect"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"No OSU activity found"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Unexpected SOAP message status"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Failed to find PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Failed to find trust root node for AAA server"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Failed to find trust root node for remediation server"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Failed to find trust root node for policy server"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Failed to retrieve trust root certificates"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Failed to find trust root certificate for AAA server"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Failed to add PassPoint configuration"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Failed to find an OSU provider"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Connecting"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Connected"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Connecting to OSU server"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU server validated"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Connected to OSU server"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Initial SOAP exchange"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Waiting for redirect response"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Received redirect response"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Second SOAP exchange"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Third SOAP exchange"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Retrieving trust root certificates"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisioning complete"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Opening <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Couldn’t connect"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Completing sign-up…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Couldn’t complete sign-up. Tap to try again"</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Sign-up complete. Connecting…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Very slow"</string> <string name="speed_label_slow" msgid="813109590815810235">"Slow"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Stay awake"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Screen will never sleep while charging"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Enable Bluetooth HCI snoop log"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capture Bluetooth packets. (Toggle Bluetooth after changing this setting)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM unlocking"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Allow the bootloader to be unlocked"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Allow OEM unlocking?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Networking"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Wireless display certification"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Enable Wi‑Fi verbose logging"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Connected MAC randomisation"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobile data always active"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering hardware acceleration"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Show Bluetooth devices without names"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Couldn\'t connect"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Randomise MAC address when connecting to Wi‑Fi networks"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Metered"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Unmetered"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Logger buffer sizes"</string> diff --git a/packages/SettingsLib/res/values-en-rIN/arrays.xml b/packages/SettingsLib/res/values-en-rIN/arrays.xml index e7d0bd4753c3..c48f62b7e9e2 100644 --- a/packages/SettingsLib/res/values-en-rIN/arrays.xml +++ b/packages/SettingsLib/res/values-en-rIN/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item> <item msgid="45075631231212732">"Always use HDCP checking"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Disabled"</item> + <item msgid="1969681323976948639">"Enabled Filtered"</item> + <item msgid="8719029132154020716">"Enabled"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml index 5684369fb23d..b9d309398d67 100644 --- a/packages/SettingsLib/res/values-en-rIN/strings.xml +++ b/packages/SettingsLib/res/values-en-rIN/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatically connected via %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatically connected via network rating provider"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> by <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Connected via <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Tap to set up"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Tap to sign up"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Connected, no Internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"No Internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Sign-in required"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Access point temporarily full"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Connected via %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Available via %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Connection failed"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Invalid OSU server URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU server connection failed"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU server validation failed"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Invalid OSU server certificate"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisioning aborted"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisioning not available"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Invalid OSU server URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Unexpected command type"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Unexpected SOAP message type"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP message exchange failed"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Redirect listener failed to start"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Timed out waiting for redirect"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"No OSU activity found"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Unexpected SOAP message status"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Failed to find PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Failed to find trust root node for AAA server"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Failed to find trust root node for remediation server"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Failed to find trust root node for policy server"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Failed to retrieve trust root certificates"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Failed to find trust root certificate for AAA server"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Failed to add PassPoint configuration"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Failed to find an OSU provider"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Connecting"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Connected"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Connecting to OSU server"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU server validated"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Connected to OSU server"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Initial SOAP exchange"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Waiting for redirect response"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Received redirect response"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Second SOAP exchange"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Third SOAP exchange"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Retrieving trust root certificates"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisioning complete"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Opening <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Couldn’t connect"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Completing sign-up…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Couldn’t complete sign-up. Tap to try again"</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Sign-up complete. Connecting…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Very slow"</string> <string name="speed_label_slow" msgid="813109590815810235">"Slow"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Stay awake"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Screen will never sleep while charging"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Enable Bluetooth HCI snoop log"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capture Bluetooth packets. (Toggle Bluetooth after changing this setting)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM unlocking"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Allow the bootloader to be unlocked"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Allow OEM unlocking?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Networking"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Wireless display certification"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Enable Wi‑Fi verbose logging"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Connected MAC randomisation"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobile data always active"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering hardware acceleration"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Show Bluetooth devices without names"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Couldn\'t connect"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Randomise MAC address when connecting to Wi‑Fi networks"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Metered"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Unmetered"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Logger buffer sizes"</string> diff --git a/packages/SettingsLib/res/values-en-rXC/arrays.xml b/packages/SettingsLib/res/values-en-rXC/arrays.xml index 6dd2e0e0f429..90594fd670a8 100644 --- a/packages/SettingsLib/res/values-en-rXC/arrays.xml +++ b/packages/SettingsLib/res/values-en-rXC/arrays.xml @@ -22,241 +22,243 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string-array name="wifi_status"> <item msgid="1922181315419294640"></item> - <item msgid="8934131797783724664">"Scanning…"</item> - <item msgid="8513729475867537913">"Connecting…"</item> - <item msgid="515055375277271756">"Authenticating…"</item> - <item msgid="1943354004029184381">"Obtaining IP address…"</item> - <item msgid="4221763391123233270">"Connected"</item> - <item msgid="624838831631122137">"Suspended"</item> - <item msgid="7979680559596111948">"Disconnecting…"</item> - <item msgid="1634960474403853625">"Disconnected"</item> - <item msgid="746097431216080650">"Unsuccessful"</item> - <item msgid="6367044185730295334">"Blocked"</item> - <item msgid="503942654197908005">"Temporarily avoiding poor connection"</item> + <item msgid="8934131797783724664">"Scanning…"</item> + <item msgid="8513729475867537913">"Connecting…"</item> + <item msgid="515055375277271756">"Authenticating…"</item> + <item msgid="1943354004029184381">"Obtaining IP address…"</item> + <item msgid="4221763391123233270">"Connected"</item> + <item msgid="624838831631122137">"Suspended"</item> + <item msgid="7979680559596111948">"Disconnecting…"</item> + <item msgid="1634960474403853625">"Disconnected"</item> + <item msgid="746097431216080650">"Unsuccessful"</item> + <item msgid="6367044185730295334">"Blocked"</item> + <item msgid="503942654197908005">"Temporarily avoiding poor connection"</item> </string-array> <string-array name="wifi_status_with_ssid"> <item msgid="7714855332363650812"></item> - <item msgid="8878186979715711006">"Scanning…"</item> - <item msgid="355508996603873860">"Connecting to <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item> - <item msgid="554971459996405634">"Authenticating with <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item> - <item msgid="7928343808033020343">"Obtaining IP address from <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item> - <item msgid="8937994881315223448">"Connected to <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</item> - <item msgid="1330262655415760617">"Suspended"</item> - <item msgid="7698638434317271902">"Disconnecting from <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item> - <item msgid="197508606402264311">"Disconnected"</item> - <item msgid="8578370891960825148">"Unsuccessful"</item> - <item msgid="5660739516542454527">"Blocked"</item> - <item msgid="1805837518286731242">"Temporarily avoiding poor connection"</item> + <item msgid="8878186979715711006">"Scanning…"</item> + <item msgid="355508996603873860">"Connecting to <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item> + <item msgid="554971459996405634">"Authenticating with <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item> + <item msgid="7928343808033020343">"Obtaining IP address from <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item> + <item msgid="8937994881315223448">"Connected to <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</item> + <item msgid="1330262655415760617">"Suspended"</item> + <item msgid="7698638434317271902">"Disconnecting from <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item> + <item msgid="197508606402264311">"Disconnected"</item> + <item msgid="8578370891960825148">"Unsuccessful"</item> + <item msgid="5660739516542454527">"Blocked"</item> + <item msgid="1805837518286731242">"Temporarily avoiding poor connection"</item> </string-array> <string-array name="hdcp_checking_titles"> - <item msgid="441827799230089869">"Never check"</item> - <item msgid="6042769699089883931">"Check for DRM content only"</item> - <item msgid="9174900380056846820">"Always check"</item> + <item msgid="441827799230089869">"Never check"</item> + <item msgid="6042769699089883931">"Check for DRM content only"</item> + <item msgid="9174900380056846820">"Always check"</item> </string-array> <string-array name="hdcp_checking_summaries"> - <item msgid="505558545611516707">"Never use HDCP checking"</item> - <item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item> - <item msgid="45075631231212732">"Always use HDCP checking"</item> + <item msgid="505558545611516707">"Never use HDCP checking"</item> + <item msgid="3878793616631049349">"Use HDCP checking for DRM content only"</item> + <item msgid="45075631231212732">"Always use HDCP checking"</item> + </string-array> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Disabled"</item> + <item msgid="1969681323976948639">"Enabled Filtered"</item> + <item msgid="8719029132154020716">"Enabled"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> <string-array name="bluetooth_avrcp_versions"> - <item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item> - <item msgid="2809759619990248160">"AVRCP 1.3"</item> - <item msgid="6199178154704729352">"AVRCP 1.5"</item> - <item msgid="5172170854953034852">"AVRCP 1.6"</item> + <item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item> + <item msgid="2809759619990248160">"AVRCP 1.3"</item> + <item msgid="6199178154704729352">"AVRCP 1.5"</item> + <item msgid="5172170854953034852">"AVRCP 1.6"</item> </string-array> <string-array name="bluetooth_avrcp_version_values"> - <item msgid="2838624067805073303">"avrcp14"</item> - <item msgid="3011533352527449572">"avrcp13"</item> - <item msgid="8837606198371920819">"avrcp15"</item> - <item msgid="3422726142222090896">"avrcp16"</item> + <item msgid="2838624067805073303">"avrcp14"</item> + <item msgid="3011533352527449572">"avrcp13"</item> + <item msgid="8837606198371920819">"avrcp15"</item> + <item msgid="3422726142222090896">"avrcp16"</item> </string-array> <string-array name="bluetooth_a2dp_codec_titles"> - <item msgid="7065842274271279580">"Use System Selection (Default)"</item> - <item msgid="7539690996561263909">"SBC"</item> - <item msgid="686685526567131661">"AAC"</item> - <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item> - <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item> - <item msgid="6751080638867012696">"LDAC"</item> - <item msgid="723675059572222462">"Enable Optional Codecs"</item> - <item msgid="3304843301758635896">"Disable Optional Codecs"</item> + <item msgid="7065842274271279580">"Use System Selection (Default)"</item> + <item msgid="7539690996561263909">"SBC"</item> + <item msgid="686685526567131661">"AAC"</item> + <item msgid="5254942598247222737">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item> + <item msgid="2091430979086738145">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item> + <item msgid="6751080638867012696">"LDAC"</item> + <item msgid="723675059572222462">"Enable Optional Codecs"</item> + <item msgid="3304843301758635896">"Disable Optional Codecs"</item> </string-array> <string-array name="bluetooth_a2dp_codec_summaries"> - <item msgid="5062108632402595000">"Use System Selection (Default)"</item> - <item msgid="6898329690939802290">"SBC"</item> - <item msgid="6839647709301342559">"AAC"</item> - <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item> - <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item> - <item msgid="7950781694447359344">"LDAC"</item> - <item msgid="2209680154067241740">"Enable Optional Codecs"</item> - <item msgid="741805482892725657">"Disable Optional Codecs"</item> + <item msgid="5062108632402595000">"Use System Selection (Default)"</item> + <item msgid="6898329690939802290">"SBC"</item> + <item msgid="6839647709301342559">"AAC"</item> + <item msgid="7848030269621918608">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g> audio"</item> + <item msgid="298198075927343893">"<xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX_HD">aptX™ HD</xliff:g> audio"</item> + <item msgid="7950781694447359344">"LDAC"</item> + <item msgid="2209680154067241740">"Enable Optional Codecs"</item> + <item msgid="741805482892725657">"Disable Optional Codecs"</item> </string-array> <string-array name="bluetooth_a2dp_codec_sample_rate_titles"> - <item msgid="3093023430402746802">"Use System Selection (Default)"</item> - <item msgid="8895532488906185219">"44.1 kHz"</item> - <item msgid="2909915718994807056">"48.0 kHz"</item> - <item msgid="3347287377354164611">"88.2 kHz"</item> - <item msgid="1234212100239985373">"96.0 kHz"</item> + <item msgid="3093023430402746802">"Use System Selection (Default)"</item> + <item msgid="8895532488906185219">"44.1 kHz"</item> + <item msgid="2909915718994807056">"48.0 kHz"</item> + <item msgid="3347287377354164611">"88.2 kHz"</item> + <item msgid="1234212100239985373">"96.0 kHz"</item> </string-array> <string-array name="bluetooth_a2dp_codec_sample_rate_summaries"> - <item msgid="3214516120190965356">"Use System Selection (Default)"</item> - <item msgid="4482862757811638365">"44.1 kHz"</item> - <item msgid="354495328188724404">"48.0 kHz"</item> - <item msgid="7329816882213695083">"88.2 kHz"</item> - <item msgid="6967397666254430476">"96.0 kHz"</item> + <item msgid="3214516120190965356">"Use System Selection (Default)"</item> + <item msgid="4482862757811638365">"44.1 kHz"</item> + <item msgid="354495328188724404">"48.0 kHz"</item> + <item msgid="7329816882213695083">"88.2 kHz"</item> + <item msgid="6967397666254430476">"96.0 kHz"</item> </string-array> <string-array name="bluetooth_a2dp_codec_bits_per_sample_titles"> - <item msgid="2684127272582591429">"Use System Selection (Default)"</item> - <item msgid="5618929009984956469">"16 bits/sample"</item> - <item msgid="3412640499234627248">"24 bits/sample"</item> - <item msgid="121583001492929387">"32 bits/sample"</item> + <item msgid="2684127272582591429">"Use System Selection (Default)"</item> + <item msgid="5618929009984956469">"16 bits/sample"</item> + <item msgid="3412640499234627248">"24 bits/sample"</item> + <item msgid="121583001492929387">"32 bits/sample"</item> </string-array> <string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries"> - <item msgid="1081159789834584363">"Use System Selection (Default)"</item> - <item msgid="4726688794884191540">"16 bits/sample"</item> - <item msgid="305344756485516870">"24 bits/sample"</item> - <item msgid="244568657919675099">"32 bits/sample"</item> + <item msgid="1081159789834584363">"Use System Selection (Default)"</item> + <item msgid="4726688794884191540">"16 bits/sample"</item> + <item msgid="305344756485516870">"24 bits/sample"</item> + <item msgid="244568657919675099">"32 bits/sample"</item> </string-array> <string-array name="bluetooth_a2dp_codec_channel_mode_titles"> - <item msgid="5226878858503393706">"Use System Selection (Default)"</item> - <item msgid="4106832974775067314">"Mono"</item> - <item msgid="5571632958424639155">"Stereo"</item> + <item msgid="5226878858503393706">"Use System Selection (Default)"</item> + <item msgid="4106832974775067314">"Mono"</item> + <item msgid="5571632958424639155">"Stereo"</item> </string-array> <string-array name="bluetooth_a2dp_codec_channel_mode_summaries"> - <item msgid="4118561796005528173">"Use System Selection (Default)"</item> - <item msgid="8900559293912978337">"Mono"</item> - <item msgid="8883739882299884241">"Stereo"</item> + <item msgid="4118561796005528173">"Use System Selection (Default)"</item> + <item msgid="8900559293912978337">"Mono"</item> + <item msgid="8883739882299884241">"Stereo"</item> </string-array> <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_titles"> - <item msgid="7158319962230727476">"Optimized for Audio Quality (990kbps/909kbps)"</item> - <item msgid="2921767058740704969">"Balanced Audio And Connection Quality (660kbps/606kbps)"</item> - <item msgid="8860982705384396512">"Optimized for Connection Quality (330kbps/303kbps)"</item> - <item msgid="4414060457677684127">"Best Effort (Adaptive Bit Rate)"</item> + <item msgid="7158319962230727476">"Optimized for Audio Quality (990kbps/909kbps)"</item> + <item msgid="2921767058740704969">"Balanced Audio And Connection Quality (660kbps/606kbps)"</item> + <item msgid="8860982705384396512">"Optimized for Connection Quality (330kbps/303kbps)"</item> + <item msgid="4414060457677684127">"Best Effort (Adaptive Bit Rate)"</item> </string-array> <string-array name="bluetooth_a2dp_codec_ldac_playback_quality_summaries"> - <item msgid="6398189564246596868">"Optimized for Audio Quality"</item> - <item msgid="4327143584633311908">"Balanced Audio And Connection Quality"</item> - <item msgid="4681409244565426925">"Optimized for Connection Quality"</item> - <item msgid="364670732877872677">"Best Effort (Adaptive Bit Rate)"</item> + <item msgid="6398189564246596868">"Optimized for Audio Quality"</item> + <item msgid="4327143584633311908">"Balanced Audio And Connection Quality"</item> + <item msgid="4681409244565426925">"Optimized for Connection Quality"</item> + <item msgid="364670732877872677">"Best Effort (Adaptive Bit Rate)"</item> </string-array> <string-array name="bluetooth_audio_active_device_summaries"> <item msgid="4862957058729193940"></item> - <item msgid="6481691720774549651">", active"</item> - <item msgid="8962366465966010158">", active (media)"</item> - <item msgid="4046665544396189228">", active (phone)"</item> + <item msgid="6481691720774549651">", active"</item> + <item msgid="8962366465966010158">", active (media)"</item> + <item msgid="4046665544396189228">", active (phone)"</item> </string-array> <string-array name="select_logd_size_titles"> - <item msgid="8665206199209698501">"Off"</item> - <item msgid="1593289376502312923">"64K"</item> - <item msgid="487545340236145324">"256K"</item> - <item msgid="2423528675294333831">"1M"</item> - <item msgid="180883774509476541">"4M"</item> - <item msgid="2803199102589126938">"16M"</item> + <item msgid="8665206199209698501">"Off"</item> + <item msgid="1593289376502312923">"64K"</item> + <item msgid="487545340236145324">"256K"</item> + <item msgid="2423528675294333831">"1M"</item> + <item msgid="180883774509476541">"4M"</item> + <item msgid="2803199102589126938">"16M"</item> </string-array> <string-array name="select_logd_size_lowram_titles"> - <item msgid="6089470720451068364">"Off"</item> - <item msgid="4622460333038586791">"64K"</item> - <item msgid="2212125625169582330">"256K"</item> - <item msgid="1704946766699242653">"1M"</item> + <item msgid="6089470720451068364">"Off"</item> + <item msgid="4622460333038586791">"64K"</item> + <item msgid="2212125625169582330">"256K"</item> + <item msgid="1704946766699242653">"1M"</item> </string-array> <string-array name="select_logd_size_summaries"> - <item msgid="6921048829791179331">"Off"</item> - <item msgid="2969458029344750262">"64K per log buffer"</item> - <item msgid="1342285115665698168">"256K per log buffer"</item> - <item msgid="1314234299552254621">"1M per log buffer"</item> - <item msgid="3606047780792894151">"4M per log buffer"</item> - <item msgid="5431354956856655120">"16M per log buffer"</item> + <item msgid="6921048829791179331">"Off"</item> + <item msgid="2969458029344750262">"64K per log buffer"</item> + <item msgid="1342285115665698168">"256K per log buffer"</item> + <item msgid="1314234299552254621">"1M per log buffer"</item> + <item msgid="3606047780792894151">"4M per log buffer"</item> + <item msgid="5431354956856655120">"16M per log buffer"</item> </string-array> <string-array name="select_logpersist_titles"> - <item msgid="1744840221860799971">"Off"</item> - <item msgid="3054662377365844197">"All"</item> - <item msgid="688870735111627832">"All but radio"</item> - <item msgid="2850427388488887328">"kernel only"</item> + <item msgid="1744840221860799971">"Off"</item> + <item msgid="3054662377365844197">"All"</item> + <item msgid="688870735111627832">"All but radio"</item> + <item msgid="2850427388488887328">"kernel only"</item> </string-array> <string-array name="select_logpersist_summaries"> - <item msgid="2216470072500521830">"Off"</item> - <item msgid="172978079776521897">"All log buffers"</item> - <item msgid="3873873912383879240">"All but radio log buffers"</item> - <item msgid="8489661142527693381">"kernel log buffer only"</item> + <item msgid="2216470072500521830">"Off"</item> + <item msgid="172978079776521897">"All log buffers"</item> + <item msgid="3873873912383879240">"All but radio log buffers"</item> + <item msgid="8489661142527693381">"kernel log buffer only"</item> </string-array> <string-array name="window_animation_scale_entries"> - <item msgid="8134156599370824081">"Animation off"</item> - <item msgid="6624864048416710414">"Animation scale .5x"</item> - <item msgid="2219332261255416635">"Animation scale 1x"</item> - <item msgid="3544428804137048509">"Animation scale 1.5x"</item> - <item msgid="3110710404225974514">"Animation scale 2x"</item> - <item msgid="4402738611528318731">"Animation scale 5x"</item> - <item msgid="6189539267968330656">"Animation scale 10x"</item> + <item msgid="8134156599370824081">"Animation off"</item> + <item msgid="6624864048416710414">"Animation scale .5x"</item> + <item msgid="2219332261255416635">"Animation scale 1x"</item> + <item msgid="3544428804137048509">"Animation scale 1.5x"</item> + <item msgid="3110710404225974514">"Animation scale 2x"</item> + <item msgid="4402738611528318731">"Animation scale 5x"</item> + <item msgid="6189539267968330656">"Animation scale 10x"</item> </string-array> <string-array name="transition_animation_scale_entries"> - <item msgid="8464255836173039442">"Animation off"</item> - <item msgid="3375781541913316411">"Animation scale .5x"</item> - <item msgid="1991041427801869945">"Animation scale 1x"</item> - <item msgid="4012689927622382874">"Animation scale 1.5x"</item> - <item msgid="3289156759925947169">"Animation scale 2x"</item> - <item msgid="7705857441213621835">"Animation scale 5x"</item> - <item msgid="6660750935954853365">"Animation scale 10x"</item> + <item msgid="8464255836173039442">"Animation off"</item> + <item msgid="3375781541913316411">"Animation scale .5x"</item> + <item msgid="1991041427801869945">"Animation scale 1x"</item> + <item msgid="4012689927622382874">"Animation scale 1.5x"</item> + <item msgid="3289156759925947169">"Animation scale 2x"</item> + <item msgid="7705857441213621835">"Animation scale 5x"</item> + <item msgid="6660750935954853365">"Animation scale 10x"</item> </string-array> <string-array name="animator_duration_scale_entries"> - <item msgid="6039901060648228241">"Animation off"</item> - <item msgid="1138649021950863198">"Animation scale .5x"</item> - <item msgid="4394388961370833040">"Animation scale 1x"</item> - <item msgid="8125427921655194973">"Animation scale 1.5x"</item> - <item msgid="3334024790739189573">"Animation scale 2x"</item> - <item msgid="3170120558236848008">"Animation scale 5x"</item> - <item msgid="1069584980746680398">"Animation scale 10x"</item> + <item msgid="6039901060648228241">"Animation off"</item> + <item msgid="1138649021950863198">"Animation scale .5x"</item> + <item msgid="4394388961370833040">"Animation scale 1x"</item> + <item msgid="8125427921655194973">"Animation scale 1.5x"</item> + <item msgid="3334024790739189573">"Animation scale 2x"</item> + <item msgid="3170120558236848008">"Animation scale 5x"</item> + <item msgid="1069584980746680398">"Animation scale 10x"</item> </string-array> <string-array name="overlay_display_devices_entries"> - <item msgid="1606809880904982133">"None"</item> - <item msgid="9033194758688161545">"480p"</item> - <item msgid="1025306206556583600">"480p (secure)"</item> - <item msgid="1853913333042744661">"720p"</item> - <item msgid="3414540279805870511">"720p (secure)"</item> - <item msgid="9039818062847141551">"1080p"</item> - <item msgid="4939496949750174834">"1080p (secure)"</item> - <item msgid="1833612718524903568">"4K"</item> - <item msgid="238303513127879234">"4K (secure)"</item> - <item msgid="3547211260846843098">"4K (upscaled)"</item> - <item msgid="5411365648951414254">"4K (upscaled, secure)"</item> - <item msgid="1311305077526792901">"720p, 1080p (dual screen)"</item> + <item msgid="1606809880904982133">"None"</item> + <item msgid="9033194758688161545">"480p"</item> + <item msgid="1025306206556583600">"480p (secure)"</item> + <item msgid="1853913333042744661">"720p"</item> + <item msgid="3414540279805870511">"720p (secure)"</item> + <item msgid="9039818062847141551">"1080p"</item> + <item msgid="4939496949750174834">"1080p (secure)"</item> + <item msgid="1833612718524903568">"4K"</item> + <item msgid="238303513127879234">"4K (secure)"</item> + <item msgid="3547211260846843098">"4K (upscaled)"</item> + <item msgid="5411365648951414254">"4K (upscaled, secure)"</item> + <item msgid="1311305077526792901">"720p, 1080p (dual screen)"</item> </string-array> <string-array name="enable_opengl_traces_entries"> - <item msgid="3191973083884253830">"None"</item> - <item msgid="9089630089455370183">"Logcat"</item> - <item msgid="5397807424362304288">"Systrace (Graphics)"</item> - <item msgid="1340692776955662664">"Call stack on glGetError"</item> + <item msgid="3191973083884253830">"None"</item> + <item msgid="9089630089455370183">"Logcat"</item> + <item msgid="5397807424362304288">"Systrace (Graphics)"</item> + <item msgid="1340692776955662664">"Call stack on glGetError"</item> </string-array> <string-array name="show_non_rect_clip_entries"> - <item msgid="993742912147090253">"Off"</item> - <item msgid="675719912558941285">"Draw non-rectangular clip region in blue"</item> - <item msgid="1064373276095698656">"Highlight tested drawing commands in green"</item> + <item msgid="993742912147090253">"Off"</item> + <item msgid="675719912558941285">"Draw non-rectangular clip region in blue"</item> + <item msgid="1064373276095698656">"Highlight tested drawing commands in green"</item> </string-array> <string-array name="track_frame_time_entries"> - <item msgid="2193584639058893150">"Off"</item> - <item msgid="2751513398307949636">"On screen as bars"</item> - <item msgid="2355151170975410323">"In <xliff:g id="AS_TYPED_COMMAND">adb shell dumpsys gfxinfo</xliff:g>"</item> + <item msgid="2193584639058893150">"Off"</item> + <item msgid="2751513398307949636">"On screen as bars"</item> + <item msgid="2355151170975410323">"In <xliff:g id="AS_TYPED_COMMAND">adb shell dumpsys gfxinfo</xliff:g>"</item> </string-array> <string-array name="debug_hw_overdraw_entries"> - <item msgid="8190572633763871652">"Off"</item> - <item msgid="7688197031296835369">"Show overdraw areas"</item> - <item msgid="2290859360633824369">"Show areas for Deuteranomaly"</item> + <item msgid="8190572633763871652">"Off"</item> + <item msgid="7688197031296835369">"Show overdraw areas"</item> + <item msgid="2290859360633824369">"Show areas for Deuteranomaly"</item> </string-array> <string-array name="app_process_limit_entries"> - <item msgid="3401625457385943795">"Standard limit"</item> - <item msgid="4071574792028999443">"No background processes"</item> - <item msgid="4810006996171705398">"At most 1 process"</item> - <item msgid="8586370216857360863">"At most 2 processes"</item> - <item msgid="836593137872605381">"At most 3 processes"</item> - <item msgid="7899496259191969307">"At most 4 processes"</item> + <item msgid="3401625457385943795">"Standard limit"</item> + <item msgid="4071574792028999443">"No background processes"</item> + <item msgid="4810006996171705398">"At most 1 process"</item> + <item msgid="8586370216857360863">"At most 2 processes"</item> + <item msgid="836593137872605381">"At most 3 processes"</item> + <item msgid="7899496259191969307">"At most 4 processes"</item> </string-array> <string-array name="usb_configuration_titles"> - <item msgid="488237561639712799">"Charging"</item> - <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item> - <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item> - <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item> - <item msgid="1718924214939774352">"Audio Source"</item> - <item msgid="8126315616613006284">"MIDI"</item> + <item msgid="488237561639712799">"Charging"</item> + <item msgid="5220695614993094977">"MTP (Media Transfer Protocol)"</item> + <item msgid="2086000968159047375">"PTP (Picture Transfer Protocol)"</item> + <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item> + <item msgid="1718924214939774352">"Audio Source"</item> + <item msgid="8126315616613006284">"MIDI"</item> </string-array> </resources> diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml index 71c14f57e342..2d3e8301cb1e 100644 --- a/packages/SettingsLib/res/values-en-rXC/strings.xml +++ b/packages/SettingsLib/res/values-en-rXC/strings.xml @@ -20,473 +20,440 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Can\'t scan for networks"</string> - <string name="wifi_security_none" msgid="7985461072596594400">"None"</string> - <string name="wifi_remembered" msgid="4955746899347821096">"Saved"</string> - <string name="wifi_disabled_generic" msgid="4259794910584943386">"Disabled"</string> - <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP Configuration Failure"</string> - <string name="wifi_disabled_by_recommendation_provider" msgid="5168315140978066096">"Not connected due to low quality network"</string> - <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi Connection Failure"</string> - <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Authentication problem"</string> - <string name="wifi_cant_connect" msgid="5410016875644565884">"Can\'t connect"</string> - <string name="wifi_cant_connect_to_ap" msgid="1222553274052685331">"Can\'t connect to \'<xliff:g id="AP_NAME">%1$s</xliff:g>\'"</string> - <string name="wifi_check_password_try_again" msgid="516958988102584767">"Check password and try again"</string> - <string name="wifi_not_in_range" msgid="1136191511238508967">"Not in range"</string> - <string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"Won\'t automatically connect"</string> - <string name="wifi_no_internet" msgid="4663834955626848401">"No internet access"</string> - <string name="saved_network" msgid="4352716707126620811">"Saved by <xliff:g id="NAME">%1$s</xliff:g>"</string> - <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatically connected via %1$s"</string> - <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatically connected via network rating provider"</string> - <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> by <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> - <string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Tap to set up"</string> - <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Connected, no internet"</string> - <string name="wifi_status_no_internet" msgid="5784710974669608361">"No internet"</string> - <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Sign in required"</string> - <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Access point temporarily full"</string> - <string name="connected_via_carrier" msgid="7583780074526041912">"Connected via %1$s"</string> - <string name="available_via_carrier" msgid="1469036129740799053">"Available via %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Connection failed"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Invalid OSU server URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU server connection failed"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU server validation failed"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Invalid OSU server certificate"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisioning aborted"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisioning not available"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Invalid OSU server URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Unexpected command type"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Unexpected SOAP message type"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP message exchange failed"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Redirect listener failed to start"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Timed out waiting for redirect"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"No OSU activity found"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Unexpected SOAP message status"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Failed to find PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Failed to find trust root node for AAA server"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Failed to find trust root node for remediation server"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Failed to find trust root node for policy server"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Failed to retrieve trust root certificates"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Failed to find trust root certificate for AAA server"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Failed to add PassPoint configuration"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Failed to find an OSU provider"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Connecting"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Connected"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Connecting to OSU server"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU server validated"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Connected to OSU server"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Initial SOAP exchange"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Waiting for redirect response"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Received redirect response"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Second SOAP exchange"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Third SOAP exchange"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Retrieving trust root certificates"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisioning complete"</string> - <string name="speed_label_very_slow" msgid="1867055264243608530">"Very Slow"</string> - <string name="speed_label_slow" msgid="813109590815810235">"Slow"</string> - <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> - <string name="speed_label_medium" msgid="3175763313268941953">"Medium"</string> - <string name="speed_label_fast" msgid="7715732164050975057">"Fast"</string> - <string name="speed_label_very_fast" msgid="2265363430784523409">"Very Fast"</string> - <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string> - <string name="bluetooth_disconnected" msgid="6557104142667339895">"Disconnected"</string> - <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Disconnecting…"</string> - <string name="bluetooth_connecting" msgid="8555009514614320497">"Connecting…"</string> - <string name="bluetooth_connected" msgid="5427152882755735944">"Connected<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string> - <string name="bluetooth_pairing" msgid="1426882272690346242">"Pairing…"</string> - <string name="bluetooth_connected_no_headset" msgid="616068069034994802">"Connected (no phone)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string> - <string name="bluetooth_connected_no_a2dp" msgid="3736431800395923868">"Connected (no media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string> - <string name="bluetooth_connected_no_map" msgid="3200033913678466453">"Connected (no message access)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string> - <string name="bluetooth_connected_no_headset_no_a2dp" msgid="2047403011284187056">"Connected (no phone or media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string> - <string name="bluetooth_connected_battery_level" msgid="5162924691231307748">"Connected, battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string> - <string name="bluetooth_connected_no_headset_battery_level" msgid="1610296229139400266">"Connected (no phone), battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string> - <string name="bluetooth_connected_no_a2dp_battery_level" msgid="3908466636369853652">"Connected (no media), battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string> - <string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="1163440823807659316">"Connected (no phone or media), battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string> - <string name="bluetooth_active_battery_level" msgid="3149689299296462009">"Active, <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery"</string> - <string name="bluetooth_battery_level" msgid="1447164613319663655">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery"</string> - <string name="bluetooth_active_no_battery_level" msgid="8380223546730241956">"Active"</string> - <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"Media audio"</string> - <string name="bluetooth_profile_headset" msgid="7815495680863246034">"Phone calls"</string> - <string name="bluetooth_profile_opp" msgid="9168139293654233697">"File transfer"</string> - <string name="bluetooth_profile_hid" msgid="3680729023366986480">"Input device"</string> - <string name="bluetooth_profile_pan" msgid="3391606497945147673">"Internet access"</string> - <string name="bluetooth_profile_pbap" msgid="5372051906968576809">"Contact sharing"</string> - <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Use for contact sharing"</string> - <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Internet connection sharing"</string> - <string name="bluetooth_profile_map" msgid="1019763341565580450">"Text Messages"</string> - <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM Access"</string> - <string name="bluetooth_profile_a2dp_high_quality" msgid="5444517801472820055">"HD audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string> - <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="8510588052415438887">"HD audio"</string> - <string name="bluetooth_profile_hearing_aid" msgid="7999237886427812595">"Hearing Aid"</string> - <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="7188282786730266159">"Connected to Hearing Aid"</string> - <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Connected to media audio"</string> - <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Connected to phone audio"</string> - <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Connected to file transfer server"</string> - <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Connected to map"</string> - <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Connected to SAP"</string> - <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Not connected to file transfer server"</string> - <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Connected to input device"</string> - <string name="bluetooth_pan_user_profile_summary_connected" msgid="6436258151814414028">"Connected to device for internet access"</string> - <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1322694224800769308">"Sharing local internet connection with device"</string> - <string name="bluetooth_pan_profile_summary_use_for" msgid="5736111170225304239">"Use for internet access"</string> - <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Use for map"</string> - <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Use for SIM access"</string> - <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Use for media audio"</string> - <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Use for phone audio"</string> - <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Use for file transfer"</string> - <string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"Use for input"</string> - <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="908775281788309484">"Use for Hearing Aid"</string> - <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Pair"</string> - <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"PAIR"</string> - <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"Cancel"</string> - <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"Pairing grants access to your contacts and call history when connected."</string> - <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"Couldn\'t pair with <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> - <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Couldn\'t pair with <xliff:g id="DEVICE_NAME">%1$s</xliff:g> because of an incorrect PIN or passkey."</string> - <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Can\'t communicate with <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> - <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Pairing rejected by <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> - <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"Computer"</string> - <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"Headset"</string> - <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"Phone"</string> - <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"Imaging"</string> - <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"Headphone"</string> - <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"Input Peripheral"</string> - <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string> - <string name="bluetooth_hearingaid_left_pairing_message" msgid="7378813500862148102">"Pairing left hearing aid…"</string> - <string name="bluetooth_hearingaid_right_pairing_message" msgid="1550373802309160891">"Pairing right hearing aid…"</string> - <string name="bluetooth_hearingaid_left_battery_level" msgid="8797811465352097562">"Left - <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery"</string> - <string name="bluetooth_hearingaid_right_battery_level" msgid="7309476148173459677">"Right - <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery"</string> - <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wifi off."</string> - <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wifi disconnected."</string> - <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Wifi one bar."</string> - <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi two bars."</string> - <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi three bars."</string> - <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wifi signal full."</string> - <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Open network"</string> - <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Secure network"</string> - <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> - <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Removed apps"</string> - <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Removed apps and users"</string> - <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB tethering"</string> - <string name="tether_settings_title_wifi" msgid="3277144155960302049">"Portable hotspot"</string> - <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Bluetooth tethering"</string> - <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"Tethering"</string> - <string name="tether_settings_title_all" msgid="8356136101061143841">"Tethering & portable hotspot"</string> - <string name="managed_user_title" msgid="8109605045406748842">"All work apps"</string> - <string name="user_guest" msgid="8475274842845401871">"Guest"</string> - <string name="unknown" msgid="1592123443519355854">"Unknown"</string> - <string name="running_process_item_user_label" msgid="3129887865552025943">"User: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string> - <string name="launch_defaults_some" msgid="313159469856372621">"Some defaults set"</string> - <string name="launch_defaults_none" msgid="4241129108140034876">"No defaults set"</string> - <string name="tts_settings" msgid="8186971894801348327">"Text-to-speech settings"</string> - <string name="tts_settings_title" msgid="1237820681016639683">"Text-to-speech output"</string> - <string name="tts_default_rate_title" msgid="6030550998379310088">"Speech rate"</string> - <string name="tts_default_rate_summary" msgid="4061815292287182801">"Speed at which the text is spoken"</string> - <string name="tts_default_pitch_title" msgid="6135942113172488671">"Pitch"</string> - <string name="tts_default_pitch_summary" msgid="1944885882882650009">"Affects the tone of the synthesized speech"</string> - <string name="tts_default_lang_title" msgid="8018087612299820556">"Language"</string> - <string name="tts_lang_use_system" msgid="2679252467416513208">"Use system language"</string> - <string name="tts_lang_not_selected" msgid="7395787019276734765">"Language not selected"</string> - <string name="tts_default_lang_summary" msgid="5219362163902707785">"Sets the language-specific voice for the spoken text"</string> - <string name="tts_play_example_title" msgid="7094780383253097230">"Listen to an example"</string> - <string name="tts_play_example_summary" msgid="8029071615047894486">"Play a short demonstration of speech synthesis"</string> - <string name="tts_install_data_title" msgid="4264378440508149986">"Install voice data"</string> - <string name="tts_install_data_summary" msgid="5742135732511822589">"Install the voice data required for speech synthesis"</string> - <string name="tts_engine_security_warning" msgid="8786238102020223650">"This speech synthesis engine may be able to collect all the text that will be spoken, including personal data like passwords and credit card numbers. It comes from the <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g> engine. Enable the use of this speech synthesis engine?"</string> - <string name="tts_engine_network_required" msgid="1190837151485314743">"This language requires a working network connection for text-to-speech output."</string> - <string name="tts_default_sample_string" msgid="4040835213373086322">"This is an example of speech synthesis"</string> - <string name="tts_status_title" msgid="7268566550242584413">"Default language status"</string> - <string name="tts_status_ok" msgid="1309762510278029765">"<xliff:g id="LOCALE">%1$s</xliff:g> is fully supported"</string> - <string name="tts_status_requires_network" msgid="6042500821503226892">"<xliff:g id="LOCALE">%1$s</xliff:g> requires network connection"</string> - <string name="tts_status_not_supported" msgid="4491154212762472495">"<xliff:g id="LOCALE">%1$s</xliff:g> is not supported"</string> - <string name="tts_status_checking" msgid="5339150797940483592">"Checking…"</string> - <string name="tts_engine_settings_title" msgid="3499112142425680334">"Settings for <xliff:g id="TTS_ENGINE_NAME">%s</xliff:g>"</string> - <string name="tts_engine_settings_button" msgid="1030512042040722285">"Launch engine settings"</string> - <string name="tts_engine_preference_section_title" msgid="448294500990971413">"Preferred engine"</string> - <string name="tts_general_section_title" msgid="4402572014604490502">"General"</string> - <string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"Reset speech pitch"</string> - <string name="tts_reset_speech_pitch_summary" msgid="8700539616245004418">"Reset the pitch at which the text is spoken to default."</string> + <string name="wifi_fail_to_scan" msgid="1265540342578081461">"Can\'t scan for networks"</string> + <string name="wifi_security_none" msgid="7985461072596594400">"None"</string> + <string name="wifi_remembered" msgid="4955746899347821096">"Saved"</string> + <string name="wifi_disabled_generic" msgid="4259794910584943386">"Disabled"</string> + <string name="wifi_disabled_network_failure" msgid="2364951338436007124">"IP Configuration Failure"</string> + <string name="wifi_disabled_by_recommendation_provider" msgid="5168315140978066096">"Not connected due to low quality network"</string> + <string name="wifi_disabled_wifi_failure" msgid="3081668066612876581">"WiFi Connection Failure"</string> + <string name="wifi_disabled_password_failure" msgid="8659805351763133575">"Authentication problem"</string> + <string name="wifi_cant_connect" msgid="5410016875644565884">"Can\'t connect"</string> + <string name="wifi_cant_connect_to_ap" msgid="1222553274052685331">"Can\'t connect to \'<xliff:g id="AP_NAME">%1$s</xliff:g>\'"</string> + <string name="wifi_check_password_try_again" msgid="516958988102584767">"Check password and try again"</string> + <string name="wifi_not_in_range" msgid="1136191511238508967">"Not in range"</string> + <string name="wifi_no_internet_no_reconnect" msgid="5724903347310541706">"Won\'t automatically connect"</string> + <string name="wifi_no_internet" msgid="4663834955626848401">"No internet access"</string> + <string name="saved_network" msgid="4352716707126620811">"Saved by <xliff:g id="NAME">%1$s</xliff:g>"</string> + <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatically connected via %1$s"</string> + <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatically connected via network rating provider"</string> + <string name="connected_via_passpoint" msgid="2826205693803088747">"Connected via %1$s"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Connected via <xliff:g id="NAME">%1$s</xliff:g>"</string> + <string name="available_via_passpoint" msgid="1617440946846329613">"Available via %1$s"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Tap to sign up"</string> + <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Connected, no internet"</string> + <string name="wifi_status_no_internet" msgid="5784710974669608361">"No internet"</string> + <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Sign in required"</string> + <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Access point temporarily full"</string> + <string name="connected_via_carrier" msgid="7583780074526041912">"Connected via %1$s"</string> + <string name="available_via_carrier" msgid="1469036129740799053">"Available via %1$s"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Opening <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Couldn’t connect"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Completing sign-up…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Couldn’t complete sign-up. Tap to try again."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Sign-up complete. Connecting…"</string> + <string name="speed_label_very_slow" msgid="1867055264243608530">"Very Slow"</string> + <string name="speed_label_slow" msgid="813109590815810235">"Slow"</string> + <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> + <string name="speed_label_medium" msgid="3175763313268941953">"Medium"</string> + <string name="speed_label_fast" msgid="7715732164050975057">"Fast"</string> + <string name="speed_label_very_fast" msgid="2265363430784523409">"Very Fast"</string> + <string name="preference_summary_default_combination" msgid="8532964268242666060">"<xliff:g id="STATE">%1$s</xliff:g> / <xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string> + <string name="bluetooth_disconnected" msgid="6557104142667339895">"Disconnected"</string> + <string name="bluetooth_disconnecting" msgid="8913264760027764974">"Disconnecting…"</string> + <string name="bluetooth_connecting" msgid="8555009514614320497">"Connecting…"</string> + <string name="bluetooth_connected" msgid="5427152882755735944">"Connected<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string> + <string name="bluetooth_pairing" msgid="1426882272690346242">"Pairing…"</string> + <string name="bluetooth_connected_no_headset" msgid="616068069034994802">"Connected (no phone)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string> + <string name="bluetooth_connected_no_a2dp" msgid="3736431800395923868">"Connected (no media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string> + <string name="bluetooth_connected_no_map" msgid="3200033913678466453">"Connected (no message access)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string> + <string name="bluetooth_connected_no_headset_no_a2dp" msgid="2047403011284187056">"Connected (no phone or media)<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g>"</string> + <string name="bluetooth_connected_battery_level" msgid="5162924691231307748">"Connected, battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string> + <string name="bluetooth_connected_no_headset_battery_level" msgid="1610296229139400266">"Connected (no phone), battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string> + <string name="bluetooth_connected_no_a2dp_battery_level" msgid="3908466636369853652">"Connected (no media), battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string> + <string name="bluetooth_connected_no_headset_no_a2dp_battery_level" msgid="1163440823807659316">"Connected (no phone or media), battery <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g><xliff:g id="ACTIVE_DEVICE">%2$s</xliff:g>"</string> + <string name="bluetooth_active_battery_level" msgid="3149689299296462009">"Active, <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery"</string> + <string name="bluetooth_battery_level" msgid="1447164613319663655">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery"</string> + <string name="bluetooth_active_no_battery_level" msgid="8380223546730241956">"Active"</string> + <string name="bluetooth_profile_a2dp" msgid="2031475486179830674">"Media audio"</string> + <string name="bluetooth_profile_headset" msgid="7815495680863246034">"Phone calls"</string> + <string name="bluetooth_profile_opp" msgid="9168139293654233697">"File transfer"</string> + <string name="bluetooth_profile_hid" msgid="3680729023366986480">"Input device"</string> + <string name="bluetooth_profile_pan" msgid="3391606497945147673">"Internet access"</string> + <string name="bluetooth_profile_pbap" msgid="5372051906968576809">"Contact sharing"</string> + <string name="bluetooth_profile_pbap_summary" msgid="6605229608108852198">"Use for contact sharing"</string> + <string name="bluetooth_profile_pan_nap" msgid="8429049285027482959">"Internet connection sharing"</string> + <string name="bluetooth_profile_map" msgid="1019763341565580450">"Text Messages"</string> + <string name="bluetooth_profile_sap" msgid="5764222021851283125">"SIM Access"</string> + <string name="bluetooth_profile_a2dp_high_quality" msgid="5444517801472820055">"HD audio: <xliff:g id="CODEC_NAME">%1$s</xliff:g>"</string> + <string name="bluetooth_profile_a2dp_high_quality_unknown_codec" msgid="8510588052415438887">"HD audio"</string> + <string name="bluetooth_profile_hearing_aid" msgid="7999237886427812595">"Hearing Aid"</string> + <string name="bluetooth_hearing_aid_profile_summary_connected" msgid="7188282786730266159">"Connected to Hearing Aid"</string> + <string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"Connected to media audio"</string> + <string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"Connected to phone audio"</string> + <string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"Connected to file transfer server"</string> + <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"Connected to map"</string> + <string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"Connected to SAP"</string> + <string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"Not connected to file transfer server"</string> + <string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"Connected to input device"</string> + <string name="bluetooth_pan_user_profile_summary_connected" msgid="6436258151814414028">"Connected to device for internet access"</string> + <string name="bluetooth_pan_nap_profile_summary_connected" msgid="1322694224800769308">"Sharing local internet connection with device"</string> + <string name="bluetooth_pan_profile_summary_use_for" msgid="5736111170225304239">"Use for internet access"</string> + <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"Use for map"</string> + <string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"Use for SIM access"</string> + <string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"Use for media audio"</string> + <string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"Use for phone audio"</string> + <string name="bluetooth_opp_profile_summary_use_for" msgid="1255674547144769756">"Use for file transfer"</string> + <string name="bluetooth_hid_profile_summary_use_for" msgid="232727040453645139">"Use for input"</string> + <string name="bluetooth_hearing_aid_profile_summary_use_for" msgid="908775281788309484">"Use for Hearing Aid"</string> + <string name="bluetooth_pairing_accept" msgid="6163520056536604875">"Pair"</string> + <string name="bluetooth_pairing_accept_all_caps" msgid="6061699265220789149">"PAIR"</string> + <string name="bluetooth_pairing_decline" msgid="4185420413578948140">"Cancel"</string> + <string name="bluetooth_pairing_will_share_phonebook" msgid="4982239145676394429">"Pairing grants access to your contacts and call history when connected."</string> + <string name="bluetooth_pairing_error_message" msgid="3748157733635947087">"Couldn\'t pair with <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> + <string name="bluetooth_pairing_pin_error_message" msgid="8337234855188925274">"Couldn\'t pair with <xliff:g id="DEVICE_NAME">%1$s</xliff:g> because of an incorrect PIN or passkey."</string> + <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Can\'t communicate with <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> + <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"Pairing rejected by <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> + <string name="bluetooth_talkback_computer" msgid="4875089335641234463">"Computer"</string> + <string name="bluetooth_talkback_headset" msgid="5140152177885220949">"Headset"</string> + <string name="bluetooth_talkback_phone" msgid="4260255181240622896">"Phone"</string> + <string name="bluetooth_talkback_imaging" msgid="551146170554589119">"Imaging"</string> + <string name="bluetooth_talkback_headphone" msgid="26580326066627664">"Headphone"</string> + <string name="bluetooth_talkback_input_peripheral" msgid="5165842622743212268">"Input Peripheral"</string> + <string name="bluetooth_talkback_bluetooth" msgid="5615463912185280812">"Bluetooth"</string> + <string name="bluetooth_hearingaid_left_pairing_message" msgid="7378813500862148102">"Pairing left hearing aid…"</string> + <string name="bluetooth_hearingaid_right_pairing_message" msgid="1550373802309160891">"Pairing right hearing aid…"</string> + <string name="bluetooth_hearingaid_left_battery_level" msgid="8797811465352097562">"Left - <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery"</string> + <string name="bluetooth_hearingaid_right_battery_level" msgid="7309476148173459677">"Right - <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> battery"</string> + <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wifi off."</string> + <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wifi disconnected."</string> + <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Wifi one bar."</string> + <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wifi two bars."</string> + <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wifi three bars."</string> + <string name="accessibility_wifi_signal_full" msgid="7061045677694702">"Wifi signal full."</string> + <string name="accessibility_wifi_security_type_none" msgid="1223747559986205423">"Open network"</string> + <string name="accessibility_wifi_security_type_secured" msgid="862921720418885331">"Secure network"</string> + <string name="process_kernel_label" msgid="3916858646836739323">"Android OS"</string> + <string name="data_usage_uninstalled_apps" msgid="614263770923231598">"Removed apps"</string> + <string name="data_usage_uninstalled_apps_users" msgid="7986294489899813194">"Removed apps and users"</string> + <string name="tether_settings_title_usb" msgid="6688416425801386511">"USB tethering"</string> + <string name="tether_settings_title_wifi" msgid="3277144155960302049">"Portable hotspot"</string> + <string name="tether_settings_title_bluetooth" msgid="355855408317564420">"Bluetooth tethering"</string> + <string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"Tethering"</string> + <string name="tether_settings_title_all" msgid="8356136101061143841">"Tethering & portable hotspot"</string> + <string name="managed_user_title" msgid="8109605045406748842">"All work apps"</string> + <string name="user_guest" msgid="8475274842845401871">"Guest"</string> + <string name="unknown" msgid="1592123443519355854">"Unknown"</string> + <string name="running_process_item_user_label" msgid="3129887865552025943">"User: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string> + <string name="launch_defaults_some" msgid="313159469856372621">"Some defaults set"</string> + <string name="launch_defaults_none" msgid="4241129108140034876">"No defaults set"</string> + <string name="tts_settings" msgid="8186971894801348327">"Text-to-speech settings"</string> + <string name="tts_settings_title" msgid="1237820681016639683">"Text-to-speech output"</string> + <string name="tts_default_rate_title" msgid="6030550998379310088">"Speech rate"</string> + <string name="tts_default_rate_summary" msgid="4061815292287182801">"Speed at which the text is spoken"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Pitch"</string> + <string name="tts_default_pitch_summary" msgid="1944885882882650009">"Affects the tone of the synthesized speech"</string> + <string name="tts_default_lang_title" msgid="8018087612299820556">"Language"</string> + <string name="tts_lang_use_system" msgid="2679252467416513208">"Use system language"</string> + <string name="tts_lang_not_selected" msgid="7395787019276734765">"Language not selected"</string> + <string name="tts_default_lang_summary" msgid="5219362163902707785">"Sets the language-specific voice for the spoken text"</string> + <string name="tts_play_example_title" msgid="7094780383253097230">"Listen to an example"</string> + <string name="tts_play_example_summary" msgid="8029071615047894486">"Play a short demonstration of speech synthesis"</string> + <string name="tts_install_data_title" msgid="4264378440508149986">"Install voice data"</string> + <string name="tts_install_data_summary" msgid="5742135732511822589">"Install the voice data required for speech synthesis"</string> + <string name="tts_engine_security_warning" msgid="8786238102020223650">"This speech synthesis engine may be able to collect all the text that will be spoken, including personal data like passwords and credit card numbers. It comes from the <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g> engine. Enable the use of this speech synthesis engine?"</string> + <string name="tts_engine_network_required" msgid="1190837151485314743">"This language requires a working network connection for text-to-speech output."</string> + <string name="tts_default_sample_string" msgid="4040835213373086322">"This is an example of speech synthesis"</string> + <string name="tts_status_title" msgid="7268566550242584413">"Default language status"</string> + <string name="tts_status_ok" msgid="1309762510278029765">"<xliff:g id="LOCALE">%1$s</xliff:g> is fully supported"</string> + <string name="tts_status_requires_network" msgid="6042500821503226892">"<xliff:g id="LOCALE">%1$s</xliff:g> requires network connection"</string> + <string name="tts_status_not_supported" msgid="4491154212762472495">"<xliff:g id="LOCALE">%1$s</xliff:g> is not supported"</string> + <string name="tts_status_checking" msgid="5339150797940483592">"Checking…"</string> + <string name="tts_engine_settings_title" msgid="3499112142425680334">"Settings for <xliff:g id="TTS_ENGINE_NAME">%s</xliff:g>"</string> + <string name="tts_engine_settings_button" msgid="1030512042040722285">"Launch engine settings"</string> + <string name="tts_engine_preference_section_title" msgid="448294500990971413">"Preferred engine"</string> + <string name="tts_general_section_title" msgid="4402572014604490502">"General"</string> + <string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"Reset speech pitch"</string> + <string name="tts_reset_speech_pitch_summary" msgid="8700539616245004418">"Reset the pitch at which the text is spoken to default."</string> <string-array name="tts_rate_entries"> - <item msgid="6695494874362656215">"Very slow"</item> - <item msgid="4795095314303559268">"Slow"</item> - <item msgid="8903157781070679765">"Normal"</item> - <item msgid="164347302621392996">"Fast"</item> - <item msgid="5794028588101562009">"Faster"</item> - <item msgid="7163942783888652942">"Very fast"</item> - <item msgid="7831712693748700507">"Rapid"</item> - <item msgid="5194774745031751806">"Very rapid"</item> - <item msgid="9085102246155045744">"Fastest"</item> + <item msgid="6695494874362656215">"Very slow"</item> + <item msgid="4795095314303559268">"Slow"</item> + <item msgid="8903157781070679765">"Normal"</item> + <item msgid="164347302621392996">"Fast"</item> + <item msgid="5794028588101562009">"Faster"</item> + <item msgid="7163942783888652942">"Very fast"</item> + <item msgid="7831712693748700507">"Rapid"</item> + <item msgid="5194774745031751806">"Very rapid"</item> + <item msgid="9085102246155045744">"Fastest"</item> </string-array> - <string name="choose_profile" msgid="6921016979430278661">"Choose profile"</string> - <string name="category_personal" msgid="1299663247844969448">"Personal"</string> - <string name="category_work" msgid="8699184680584175622">"Work"</string> - <string name="development_settings_title" msgid="215179176067683667">"Developer options"</string> - <string name="development_settings_enable" msgid="542530994778109538">"Enable developer options"</string> - <string name="development_settings_summary" msgid="1815795401632854041">"Set options for app development"</string> - <string name="development_settings_not_available" msgid="4308569041701535607">"Developer options are not available for this user"</string> - <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN settings are not available for this user"</string> - <string name="tethering_settings_not_available" msgid="6765770438438291012">"Tethering settings are not available for this user"</string> - <string name="apn_settings_not_available" msgid="7873729032165324000">"Access Point Name settings are not available for this user"</string> - <string name="enable_adb" msgid="7982306934419797485">"USB debugging"</string> - <string name="enable_adb_summary" msgid="4881186971746056635">"Debug mode when USB is connected"</string> - <string name="clear_adb_keys" msgid="4038889221503122743">"Revoke USB debugging authorizations"</string> - <string name="bugreport_in_power" msgid="7923901846375587241">"Bug report shortcut"</string> - <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Show a button in the power menu for taking a bug report"</string> - <string name="keep_screen_on" msgid="1146389631208760344">"Stay awake"</string> - <string name="keep_screen_on_summary" msgid="2173114350754293009">"Screen will never sleep while charging"</string> - <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Enable Bluetooth HCI snoop log"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> - <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM unlocking"</string> - <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Allow the bootloader to be unlocked"</string> - <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Allow OEM unlocking?"</string> - <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"WARNING: Device protection features will not work on this device while this setting is turned on."</string> - <string name="mock_location_app" msgid="7966220972812881854">"Select mock location app"</string> - <string name="mock_location_app_not_set" msgid="809543285495344223">"No mock location app set"</string> - <string name="mock_location_app_set" msgid="8966420655295102685">"Mock location app: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="debug_networking_category" msgid="7044075693643009662">"Networking"</string> - <string name="wifi_display_certification" msgid="8611569543791307533">"Wireless display certification"</string> - <string name="wifi_verbose_logging" msgid="4203729756047242344">"Enable Wi‑Fi Verbose Logging"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Connected MAC Randomization"</string> - <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobile data always active"</string> - <string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering hardware acceleration"</string> - <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Show Bluetooth devices without names"</string> - <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Disable absolute volume"</string> - <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP Version"</string> - <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"Select Bluetooth AVRCP Version"</string> - <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio Codec"</string> - <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="8436224899475822557">"Trigger Bluetooth Audio Codec\nSelection"</string> - <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Audio Sample Rate"</string> - <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="8010380028880963535">"Trigger Bluetooth Audio Codec\nSelection: Sample Rate"</string> - <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth Audio Bits Per Sample"</string> - <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="8063859754619484760">"Trigger Bluetooth Audio Codec\nSelection: Bits Per Sample"</string> - <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio Channel Mode"</string> - <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Trigger Bluetooth Audio Codec\nSelection: Channel Mode"</string> - <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth Audio LDAC Codec: Playback Quality"</string> - <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Trigger Bluetooth Audio LDAC\nCodec Selection: Playback Quality"</string> - <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> - <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Private DNS"</string> - <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Select Private DNS Mode"</string> - <string name="private_dns_mode_off" msgid="8236575187318721684">"Off"</string> - <string name="private_dns_mode_opportunistic" msgid="8314986739896927399">"Automatic"</string> - <string name="private_dns_mode_provider" msgid="8354935160639360804">"Private DNS provider hostname"</string> - <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Enter hostname of DNS provider"</string> - <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Couldn\'t connect"</string> - <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string> - <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Randomize MAC address when connecting to Wi‑Fi networks"</string> - <string name="wifi_metered_label" msgid="4514924227256839725">"Metered"</string> - <string name="wifi_unmetered_label" msgid="6124098729457992931">"Unmetered"</string> - <string name="select_logd_size_title" msgid="7433137108348553508">"Logger buffer sizes"</string> - <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Select Logger sizes per log buffer"</string> - <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"Clear logger persistent storage?"</string> - <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"When we no longer are monitoring with the persistent logger, we are required to erase the logger data resident on your device."</string> - <string name="select_logpersist_title" msgid="7530031344550073166">"Store logger data persistently on device"</string> - <string name="select_logpersist_dialog_title" msgid="4003400579973269060">"Select log buffers to store persistently on device"</string> - <string name="select_usb_configuration_title" msgid="2649938511506971843">"Select USB Configuration"</string> - <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Select USB Configuration"</string> - <string name="allow_mock_location" msgid="2787962564578664888">"Allow mock locations"</string> - <string name="allow_mock_location_summary" msgid="317615105156345626">"Allow mock locations"</string> - <string name="debug_view_attributes" msgid="6485448367803310384">"Enable view attribute inspection"</string> - <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Always keep mobile data active, even when Wi‑Fi is active (for fast network switching)."</string> - <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Use tethering hardware acceleration if available"</string> - <string name="adb_warning_title" msgid="6234463310896563253">"Allow USB debugging?"</string> - <string name="adb_warning_message" msgid="7316799925425402244">"USB debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification, and read log data."</string> - <string name="adb_keys_warning_message" msgid="5659849457135841625">"Revoke access to USB debugging from all computers you’ve previously authorized?"</string> - <string name="dev_settings_warning_title" msgid="7244607768088540165">"Allow development settings?"</string> - <string name="dev_settings_warning_message" msgid="2298337781139097964">"These settings are intended for development use only. They can cause your device and the applications on it to break or misbehave."</string> - <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verify apps over USB"</string> - <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Check apps installed via ADB/ADT for harmful behavior."</string> - <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth devices without names (MAC addresses only) will be displayed"</string> - <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Disables the Bluetooth absolute volume feature in case of volume issues with remote devices such as unacceptably loud volume or lack of control."</string> - <string name="enable_terminal_title" msgid="95572094356054120">"Local terminal"</string> - <string name="enable_terminal_summary" msgid="67667852659359206">"Enable terminal app that offers local shell access"</string> - <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP checking"</string> - <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Set HDCP checking behavior"</string> - <string name="debug_debugging_category" msgid="6781250159513471316">"Debugging"</string> - <string name="debug_app" msgid="8349591734751384446">"Select debug app"</string> - <string name="debug_app_not_set" msgid="718752499586403499">"No debug application set"</string> - <string name="debug_app_set" msgid="2063077997870280017">"Debugging application: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> - <string name="select_application" msgid="5156029161289091703">"Select application"</string> - <string name="no_application" msgid="2813387563129153880">"Nothing"</string> - <string name="wait_for_debugger" msgid="1202370874528893091">"Wait for debugger"</string> - <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Debugged application waits for debugger to attach before executing"</string> - <string name="debug_input_category" msgid="1811069939601180246">"Input"</string> - <string name="debug_drawing_category" msgid="6755716469267367852">"Drawing"</string> - <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Hardware accelerated rendering"</string> - <string name="media_category" msgid="4388305075496848353">"Media"</string> - <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitoring"</string> - <string name="strict_mode" msgid="1938795874357830695">"Strict mode enabled"</string> - <string name="strict_mode_summary" msgid="142834318897332338">"Flash screen when apps do long operations on main thread"</string> - <string name="pointer_location" msgid="6084434787496938001">"Pointer location"</string> - <string name="pointer_location_summary" msgid="840819275172753713">"Screen overlay showing current touch data"</string> - <string name="show_touches" msgid="2642976305235070316">"Show taps"</string> - <string name="show_touches_summary" msgid="6101183132903926324">"Show visual feedback for taps"</string> - <string name="show_screen_updates" msgid="5470814345876056420">"Show surface updates"</string> - <string name="show_screen_updates_summary" msgid="2569622766672785529">"Flash entire window surfaces when they update"</string> - <string name="show_hw_screen_updates" msgid="4117270979975470789">"Show view updates"</string> - <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Flash views inside windows when drawn"</string> - <string name="show_hw_layers_updates" msgid="5645728765605699821">"Show hardware layers updates"</string> - <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Flash hardware layers green when they update"</string> - <string name="debug_hw_overdraw" msgid="2968692419951565417">"Debug GPU overdraw"</string> - <string name="disable_overlays" msgid="2074488440505934665">"Disable HW overlays"</string> - <string name="disable_overlays_summary" msgid="3578941133710758592">"Always use GPU for screen compositing"</string> - <string name="simulate_color_space" msgid="6745847141353345872">"Simulate color space"</string> - <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Enable OpenGL traces"</string> - <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Disable USB audio routing"</string> - <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Disable automatic routing to USB audio peripherals"</string> - <string name="debug_layout" msgid="5981361776594526155">"Show layout bounds"</string> - <string name="debug_layout_summary" msgid="2001775315258637682">"Show clip bounds, margins, etc."</string> - <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Force RTL layout direction"</string> - <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Force screen layout direction to RTL for all locales"</string> - <string name="force_msaa" msgid="7920323238677284387">"Force 4x MSAA"</string> - <string name="force_msaa_summary" msgid="9123553203895817537">"Enable 4x MSAA in OpenGL ES 2.0 apps"</string> - <string name="show_non_rect_clip" msgid="505954950474595172">"Debug non-rectangular clip operations"</string> - <string name="track_frame_time" msgid="6094365083096851167">"Profile HWUI rendering"</string> - <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Enable GPU debug layers"</string> - <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Allow loading GPU debug layers for debug apps"</string> - <string name="window_animation_scale_title" msgid="6162587588166114700">"Window animation scale"</string> - <string name="transition_animation_scale_title" msgid="387527540523595875">"Transition animation scale"</string> - <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animator duration scale"</string> - <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulate secondary displays"</string> - <string name="debug_applications_category" msgid="4206913653849771549">"Apps"</string> - <string name="immediately_destroy_activities" msgid="1579659389568133959">"Don’t keep activities"</string> - <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Destroy every activity as soon as the user leaves it"</string> - <string name="app_process_limit_title" msgid="4280600650253107163">"Background process limit"</string> - <string name="show_all_anrs" msgid="4924885492787069007">"Show background ANRs"</string> - <string name="show_all_anrs_summary" msgid="6636514318275139826">"Display App Not Responding dialog for background apps"</string> - <string name="show_notification_channel_warnings" msgid="1399948193466922683">"Show notification channel warnings"</string> - <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Displays on-screen warning when an app posts a notification without a valid channel"</string> - <string name="force_allow_on_external" msgid="3215759785081916381">"Force allow apps on external"</string> - <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Makes any app eligible to be written to external storage, regardless of manifest values"</string> - <string name="force_resizable_activities" msgid="8615764378147824985">"Force activities to be resizable"</string> - <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Make all activities resizable for multi-window, regardless of manifest values."</string> - <string name="enable_freeform_support" msgid="1461893351278940416">"Enable freeform windows"</string> - <string name="enable_freeform_support_summary" msgid="8247310463288834487">"Enable support for experimental freeform windows."</string> - <string name="local_backup_password_title" msgid="3860471654439418822">"Desktop backup password"</string> - <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Desktop full backups aren’t currently protected"</string> - <string name="local_backup_password_summary_change" msgid="5376206246809190364">"Tap to change or remove the password for desktop full backups"</string> - <string name="local_backup_password_toast_success" msgid="582016086228434290">"New backup password set"</string> - <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"New password and confirmation don’t match"</string> - <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Failure setting backup password"</string> - <string name="loading_injected_setting_summary" msgid="4095178591461231376">"Loading…"</string> + <string name="choose_profile" msgid="6921016979430278661">"Choose profile"</string> + <string name="category_personal" msgid="1299663247844969448">"Personal"</string> + <string name="category_work" msgid="8699184680584175622">"Work"</string> + <string name="development_settings_title" msgid="215179176067683667">"Developer options"</string> + <string name="development_settings_enable" msgid="542530994778109538">"Enable developer options"</string> + <string name="development_settings_summary" msgid="1815795401632854041">"Set options for app development"</string> + <string name="development_settings_not_available" msgid="4308569041701535607">"Developer options are not available for this user"</string> + <string name="vpn_settings_not_available" msgid="956841430176985598">"VPN settings are not available for this user"</string> + <string name="tethering_settings_not_available" msgid="6765770438438291012">"Tethering settings are not available for this user"</string> + <string name="apn_settings_not_available" msgid="7873729032165324000">"Access Point Name settings are not available for this user"</string> + <string name="enable_adb" msgid="7982306934419797485">"USB debugging"</string> + <string name="enable_adb_summary" msgid="4881186971746056635">"Debug mode when USB is connected"</string> + <string name="clear_adb_keys" msgid="4038889221503122743">"Revoke USB debugging authorizations"</string> + <string name="bugreport_in_power" msgid="7923901846375587241">"Bug report shortcut"</string> + <string name="bugreport_in_power_summary" msgid="1778455732762984579">"Show a button in the power menu for taking a bug report"</string> + <string name="keep_screen_on" msgid="1146389631208760344">"Stay awake"</string> + <string name="keep_screen_on_summary" msgid="2173114350754293009">"Screen will never sleep while charging"</string> + <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Enable Bluetooth HCI snoop log"</string> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capture Bluetooth packets. (Toggle Bluetooth after changing this setting)"</string> + <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM unlocking"</string> + <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Allow the bootloader to be unlocked"</string> + <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Allow OEM unlocking?"</string> + <string name="confirm_enable_oem_unlock_text" msgid="5517144575601647022">"WARNING: Device protection features will not work on this device while this setting is turned on."</string> + <string name="mock_location_app" msgid="7966220972812881854">"Select mock location app"</string> + <string name="mock_location_app_not_set" msgid="809543285495344223">"No mock location app set"</string> + <string name="mock_location_app_set" msgid="8966420655295102685">"Mock location app: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="debug_networking_category" msgid="7044075693643009662">"Networking"</string> + <string name="wifi_display_certification" msgid="8611569543791307533">"Wireless display certification"</string> + <string name="wifi_verbose_logging" msgid="4203729756047242344">"Enable Wi‑Fi Verbose Logging"</string> + <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobile data always active"</string> + <string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering hardware acceleration"</string> + <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Show Bluetooth devices without names"</string> + <string name="bluetooth_disable_absolute_volume" msgid="2660673801947898809">"Disable absolute volume"</string> + <string name="bluetooth_select_avrcp_version_string" msgid="3750059931120293633">"Bluetooth AVRCP Version"</string> + <string name="bluetooth_select_avrcp_version_dialog_title" msgid="7277329668298705702">"Select Bluetooth AVRCP Version"</string> + <string name="bluetooth_select_a2dp_codec_type" msgid="90597356942154882">"Bluetooth Audio Codec"</string> + <string name="bluetooth_select_a2dp_codec_type_dialog_title" msgid="8436224899475822557">"Trigger Bluetooth Audio Codec\nSelection"</string> + <string name="bluetooth_select_a2dp_codec_sample_rate" msgid="4788245703824623062">"Bluetooth Audio Sample Rate"</string> + <string name="bluetooth_select_a2dp_codec_sample_rate_dialog_title" msgid="8010380028880963535">"Trigger Bluetooth Audio Codec\nSelection: Sample Rate"</string> + <string name="bluetooth_select_a2dp_codec_bits_per_sample" msgid="2099645202720164141">"Bluetooth Audio Bits Per Sample"</string> + <string name="bluetooth_select_a2dp_codec_bits_per_sample_dialog_title" msgid="8063859754619484760">"Trigger Bluetooth Audio Codec\nSelection: Bits Per Sample"</string> + <string name="bluetooth_select_a2dp_codec_channel_mode" msgid="884855779449390540">"Bluetooth Audio Channel Mode"</string> + <string name="bluetooth_select_a2dp_codec_channel_mode_dialog_title" msgid="7234956835280563341">"Trigger Bluetooth Audio Codec\nSelection: Channel Mode"</string> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality" msgid="3619694372407843405">"Bluetooth Audio LDAC Codec: Playback Quality"</string> + <string name="bluetooth_select_a2dp_codec_ldac_playback_quality_dialog_title" msgid="6893955536658137179">"Trigger Bluetooth Audio LDAC\nCodec Selection: Playback Quality"</string> + <string name="bluetooth_select_a2dp_codec_streaming_label" msgid="5347862512596240506">"Streaming: <xliff:g id="STREAMING_PARAMETER">%1$s</xliff:g>"</string> + <string name="select_private_dns_configuration_title" msgid="3700456559305263922">"Private DNS"</string> + <string name="select_private_dns_configuration_dialog_title" msgid="9221994415765826811">"Select Private DNS Mode"</string> + <string name="private_dns_mode_off" msgid="8236575187318721684">"Off"</string> + <string name="private_dns_mode_opportunistic" msgid="8314986739896927399">"Automatic"</string> + <string name="private_dns_mode_provider" msgid="8354935160639360804">"Private DNS provider hostname"</string> + <string name="private_dns_mode_provider_hostname_hint" msgid="2487492386970928143">"Enter hostname of DNS provider"</string> + <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Couldn\'t connect"</string> + <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Show options for wireless display certification"</string> + <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker"</string> + <string name="wifi_metered_label" msgid="4514924227256839725">"Metered"</string> + <string name="wifi_unmetered_label" msgid="6124098729457992931">"Unmetered"</string> + <string name="select_logd_size_title" msgid="7433137108348553508">"Logger buffer sizes"</string> + <string name="select_logd_size_dialog_title" msgid="1206769310236476760">"Select Logger sizes per log buffer"</string> + <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"Clear logger persistent storage?"</string> + <string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"When we no longer are monitoring with the persistent logger, we are required to erase the logger data resident on your device."</string> + <string name="select_logpersist_title" msgid="7530031344550073166">"Store logger data persistently on device"</string> + <string name="select_logpersist_dialog_title" msgid="4003400579973269060">"Select log buffers to store persistently on device"</string> + <string name="select_usb_configuration_title" msgid="2649938511506971843">"Select USB Configuration"</string> + <string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"Select USB Configuration"</string> + <string name="allow_mock_location" msgid="2787962564578664888">"Allow mock locations"</string> + <string name="allow_mock_location_summary" msgid="317615105156345626">"Allow mock locations"</string> + <string name="debug_view_attributes" msgid="6485448367803310384">"Enable view attribute inspection"</string> + <string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Always keep mobile data active, even when Wi‑Fi is active (for fast network switching)."</string> + <string name="tethering_hardware_offload_summary" msgid="7726082075333346982">"Use tethering hardware acceleration if available"</string> + <string name="adb_warning_title" msgid="6234463310896563253">"Allow USB debugging?"</string> + <string name="adb_warning_message" msgid="7316799925425402244">"USB debugging is intended for development purposes only. Use it to copy data between your computer and your device, install apps on your device without notification, and read log data."</string> + <string name="adb_keys_warning_message" msgid="5659849457135841625">"Revoke access to USB debugging from all computers you’ve previously authorized?"</string> + <string name="dev_settings_warning_title" msgid="7244607768088540165">"Allow development settings?"</string> + <string name="dev_settings_warning_message" msgid="2298337781139097964">"These settings are intended for development use only. They can cause your device and the applications on it to break or misbehave."</string> + <string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verify apps over USB"</string> + <string name="verify_apps_over_usb_summary" msgid="9164096969924529200">"Check apps installed via ADB/ADT for harmful behavior."</string> + <string name="bluetooth_show_devices_without_names_summary" msgid="2351196058115755520">"Bluetooth devices without names (MAC addresses only) will be displayed"</string> + <string name="bluetooth_disable_absolute_volume_summary" msgid="6031284410786545957">"Disables the Bluetooth absolute volume feature in case of volume issues with remote devices such as unacceptably loud volume or lack of control."</string> + <string name="enable_terminal_title" msgid="95572094356054120">"Local terminal"</string> + <string name="enable_terminal_summary" msgid="67667852659359206">"Enable terminal app that offers local shell access"</string> + <string name="hdcp_checking_title" msgid="8605478913544273282">"HDCP checking"</string> + <string name="hdcp_checking_dialog_title" msgid="5141305530923283">"Set HDCP checking behavior"</string> + <string name="debug_debugging_category" msgid="6781250159513471316">"Debugging"</string> + <string name="debug_app" msgid="8349591734751384446">"Select debug app"</string> + <string name="debug_app_not_set" msgid="718752499586403499">"No debug application set"</string> + <string name="debug_app_set" msgid="2063077997870280017">"Debugging application: <xliff:g id="APP_NAME">%1$s</xliff:g>"</string> + <string name="select_application" msgid="5156029161289091703">"Select application"</string> + <string name="no_application" msgid="2813387563129153880">"Nothing"</string> + <string name="wait_for_debugger" msgid="1202370874528893091">"Wait for debugger"</string> + <string name="wait_for_debugger_summary" msgid="1766918303462746804">"Debugged application waits for debugger to attach before executing"</string> + <string name="debug_input_category" msgid="1811069939601180246">"Input"</string> + <string name="debug_drawing_category" msgid="6755716469267367852">"Drawing"</string> + <string name="debug_hw_drawing_category" msgid="6220174216912308658">"Hardware accelerated rendering"</string> + <string name="media_category" msgid="4388305075496848353">"Media"</string> + <string name="debug_monitoring_category" msgid="7640508148375798343">"Monitoring"</string> + <string name="strict_mode" msgid="1938795874357830695">"Strict mode enabled"</string> + <string name="strict_mode_summary" msgid="142834318897332338">"Flash screen when apps do long operations on main thread"</string> + <string name="pointer_location" msgid="6084434787496938001">"Pointer location"</string> + <string name="pointer_location_summary" msgid="840819275172753713">"Screen overlay showing current touch data"</string> + <string name="show_touches" msgid="2642976305235070316">"Show taps"</string> + <string name="show_touches_summary" msgid="6101183132903926324">"Show visual feedback for taps"</string> + <string name="show_screen_updates" msgid="5470814345876056420">"Show surface updates"</string> + <string name="show_screen_updates_summary" msgid="2569622766672785529">"Flash entire window surfaces when they update"</string> + <string name="show_hw_screen_updates" msgid="4117270979975470789">"Show view updates"</string> + <string name="show_hw_screen_updates_summary" msgid="6506943466625875655">"Flash views inside windows when drawn"</string> + <string name="show_hw_layers_updates" msgid="5645728765605699821">"Show hardware layers updates"</string> + <string name="show_hw_layers_updates_summary" msgid="5296917233236661465">"Flash hardware layers green when they update"</string> + <string name="debug_hw_overdraw" msgid="2968692419951565417">"Debug GPU overdraw"</string> + <string name="disable_overlays" msgid="2074488440505934665">"Disable HW overlays"</string> + <string name="disable_overlays_summary" msgid="3578941133710758592">"Always use GPU for screen compositing"</string> + <string name="simulate_color_space" msgid="6745847141353345872">"Simulate color space"</string> + <string name="enable_opengl_traces_title" msgid="6790444011053219871">"Enable OpenGL traces"</string> + <string name="usb_audio_disable_routing" msgid="8114498436003102671">"Disable USB audio routing"</string> + <string name="usb_audio_disable_routing_summary" msgid="980282760277312264">"Disable automatic routing to USB audio peripherals"</string> + <string name="debug_layout" msgid="5981361776594526155">"Show layout bounds"</string> + <string name="debug_layout_summary" msgid="2001775315258637682">"Show clip bounds, margins, etc."</string> + <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Force RTL layout direction"</string> + <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Force screen layout direction to RTL for all locales"</string> + <string name="force_msaa" msgid="7920323238677284387">"Force 4x MSAA"</string> + <string name="force_msaa_summary" msgid="9123553203895817537">"Enable 4x MSAA in OpenGL ES 2.0 apps"</string> + <string name="show_non_rect_clip" msgid="505954950474595172">"Debug non-rectangular clip operations"</string> + <string name="track_frame_time" msgid="6094365083096851167">"Profile HWUI rendering"</string> + <string name="enable_gpu_debug_layers" msgid="3848838293793255097">"Enable GPU debug layers"</string> + <string name="enable_gpu_debug_layers_summary" msgid="8009136940671194940">"Allow loading GPU debug layers for debug apps"</string> + <string name="window_animation_scale_title" msgid="6162587588166114700">"Window animation scale"</string> + <string name="transition_animation_scale_title" msgid="387527540523595875">"Transition animation scale"</string> + <string name="animator_duration_scale_title" msgid="3406722410819934083">"Animator duration scale"</string> + <string name="overlay_display_devices_title" msgid="5364176287998398539">"Simulate secondary displays"</string> + <string name="debug_applications_category" msgid="4206913653849771549">"Apps"</string> + <string name="immediately_destroy_activities" msgid="1579659389568133959">"Don’t keep activities"</string> + <string name="immediately_destroy_activities_summary" msgid="3592221124808773368">"Destroy every activity as soon as the user leaves it"</string> + <string name="app_process_limit_title" msgid="4280600650253107163">"Background process limit"</string> + <string name="show_all_anrs" msgid="4924885492787069007">"Show background ANRs"</string> + <string name="show_all_anrs_summary" msgid="6636514318275139826">"Display App Not Responding dialog for background apps"</string> + <string name="show_notification_channel_warnings" msgid="1399948193466922683">"Show notification channel warnings"</string> + <string name="show_notification_channel_warnings_summary" msgid="5536803251863694895">"Displays on-screen warning when an app posts a notification without a valid channel"</string> + <string name="force_allow_on_external" msgid="3215759785081916381">"Force allow apps on external"</string> + <string name="force_allow_on_external_summary" msgid="3640752408258034689">"Makes any app eligible to be written to external storage, regardless of manifest values"</string> + <string name="force_resizable_activities" msgid="8615764378147824985">"Force activities to be resizable"</string> + <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Make all activities resizable for multi-window, regardless of manifest values."</string> + <string name="enable_freeform_support" msgid="1461893351278940416">"Enable freeform windows"</string> + <string name="enable_freeform_support_summary" msgid="8247310463288834487">"Enable support for experimental freeform windows."</string> + <string name="local_backup_password_title" msgid="3860471654439418822">"Desktop backup password"</string> + <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Desktop full backups aren’t currently protected"</string> + <string name="local_backup_password_summary_change" msgid="5376206246809190364">"Tap to change or remove the password for desktop full backups"</string> + <string name="local_backup_password_toast_success" msgid="582016086228434290">"New backup password set"</string> + <string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"New password and confirmation don’t match"</string> + <string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Failure setting backup password"</string> + <string name="loading_injected_setting_summary" msgid="4095178591461231376">"Loading…"</string> <string-array name="color_mode_names"> - <item msgid="2425514299220523812">"Vibrant (default)"</item> - <item msgid="8446070607501413455">"Natural"</item> - <item msgid="6553408765810699025">"Standard"</item> + <item msgid="2425514299220523812">"Vibrant (default)"</item> + <item msgid="8446070607501413455">"Natural"</item> + <item msgid="6553408765810699025">"Standard"</item> </string-array> <string-array name="color_mode_descriptions"> - <item msgid="4979629397075120893">"Enhanced colors"</item> - <item msgid="8280754435979370728">"Natural colors as seen by the eye"</item> - <item msgid="5363960654009010371">"Colors optimized for digital content"</item> + <item msgid="4979629397075120893">"Enhanced colors"</item> + <item msgid="8280754435979370728">"Natural colors as seen by the eye"</item> + <item msgid="5363960654009010371">"Colors optimized for digital content"</item> </string-array> - <string name="inactive_apps_title" msgid="9042996804461901648">"Standby apps"</string> - <string name="inactive_app_inactive_summary" msgid="5091363706699855725">"Inactive. Tap to toggle."</string> - <string name="inactive_app_active_summary" msgid="4174921824958516106">"Active. Tap to toggle."</string> - <string name="standby_bucket_summary" msgid="6567835350910684727">"App standby state:<xliff:g id="BUCKET"> %s</xliff:g>"</string> - <string name="runningservices_settings_title" msgid="8097287939865165213">"Running services"</string> - <string name="runningservices_settings_summary" msgid="854608995821032748">"View and control currently running services"</string> - <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView implementation"</string> - <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Set WebView implementation"</string> - <string name="select_webview_provider_toast_text" msgid="5466970498308266359">"This choice is no longer valid. Try again."</string> - <string name="convert_to_file_encryption" msgid="3060156730651061223">"Convert to file encryption"</string> - <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Convert…"</string> - <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Already file encrypted"</string> - <string name="title_convert_fbe" msgid="1263622876196444453">"Converting to file based encryption"</string> - <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Convert data partition to file based encryption.\n !!Warning!! This will erase all your data.\n This feature is alpha, and may not work correctly.\n Press \'Wipe and convert…\' to continue."</string> - <string name="button_convert_fbe" msgid="5152671181309826405">"Wipe and convert…"</string> - <string name="picture_color_mode" msgid="4560755008730283695">"Picture color mode"</string> - <string name="picture_color_mode_desc" msgid="1141891467675548590">"Use sRGB"</string> - <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Disabled"</string> - <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromacy"</string> - <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomaly (red-green)"</string> - <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomaly (red-green)"</string> - <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomaly (blue-yellow)"</string> - <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Color correction"</string> - <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"This feature is experimental and may affect performance."</string> - <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Overridden by <xliff:g id="TITLE">%1$s</xliff:g>"</string> - <string name="power_remaining_settings_home_page" msgid="4845022416859002011">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> - <xliff:g id="TIME_STRING">%2$s</xliff:g>"</string> - <string name="power_remaining_duration_only" msgid="6123167166221295462">"About <xliff:g id="TIME_REMAINING">%1$s</xliff:g> left"</string> - <string name="power_discharging_duration" msgid="8848256785736335185">"About <xliff:g id="TIME_REMAINING">%1$s</xliff:g> left (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> - <string name="power_remaining_duration_only_enhanced" msgid="4189311599812296592">"About <xliff:g id="TIME_REMAINING">%1$s</xliff:g> left based on your usage"</string> - <string name="power_discharging_duration_enhanced" msgid="1992003260664804080">"About <xliff:g id="TIME_REMAINING">%1$s</xliff:g> left based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> - <string name="power_remaining_duration_only_short" msgid="3463575350656389957">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> left"</string> - <string name="power_discharge_by_enhanced" msgid="2095821536747992464">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> - <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage"</string> - <string name="power_discharge_by" msgid="6453537733650125582">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> - <string name="power_discharge_by_only" msgid="107616694963545745">"Should last until about <xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Until <xliff:g id="TIME">%1$s</xliff:g>"</string> - <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining"</string> - <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> - <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> - <string name="power_remaining_only_more_than_subtext" msgid="8931654680569617380">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining"</string> - <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="1181059207608751924">"Phone may shutdown soon"</string> - <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="2606370266981054691">"Tablet may shutdown soon"</string> - <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="2918084807716859985">"Device may shutdown soon"</string> - <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="3090926004324573908">"Phone may shutdown soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string> - <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7466484148515796216">"Tablet may shutdown soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string> - <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="603933521600231649">"Device may shutdown soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string> - <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string> - <string name="power_remaining_charging_duration_only" msgid="1421102457410268886">"<xliff:g id="TIME">%1$s</xliff:g> left until fully charged"</string> - <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> until fully charged"</string> - <string name="battery_info_status_unknown" msgid="196130600938058547">"Unknown"</string> - <string name="battery_info_status_charging" msgid="1705179948350365604">"Charging"</string> - <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"charging"</string> - <string name="battery_info_status_discharging" msgid="310932812698268588">"Not charging"</string> - <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Plugged in, can\'t charge right now"</string> - <string name="battery_info_status_full" msgid="2824614753861462808">"Full"</string> - <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlled by admin"</string> - <string name="disabled" msgid="9206776641295849915">"Disabled"</string> - <string name="external_source_trusted" msgid="2707996266575928037">"Allowed"</string> - <string name="external_source_untrusted" msgid="2677442511837596726">"Not allowed"</string> - <string name="install_other_apps" msgid="6986686991775883017">"Install unknown apps"</string> - <string name="home" msgid="3256884684164448244">"Settings Home"</string> + <string name="inactive_apps_title" msgid="9042996804461901648">"Standby apps"</string> + <string name="inactive_app_inactive_summary" msgid="5091363706699855725">"Inactive. Tap to toggle."</string> + <string name="inactive_app_active_summary" msgid="4174921824958516106">"Active. Tap to toggle."</string> + <string name="standby_bucket_summary" msgid="6567835350910684727">"App standby state:<xliff:g id="BUCKET"> %s</xliff:g>"</string> + <string name="runningservices_settings_title" msgid="8097287939865165213">"Running services"</string> + <string name="runningservices_settings_summary" msgid="854608995821032748">"View and control currently running services"</string> + <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView implementation"</string> + <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Set WebView implementation"</string> + <string name="select_webview_provider_toast_text" msgid="5466970498308266359">"This choice is no longer valid. Try again."</string> + <string name="convert_to_file_encryption" msgid="3060156730651061223">"Convert to file encryption"</string> + <string name="convert_to_file_encryption_enabled" msgid="2861258671151428346">"Convert…"</string> + <string name="convert_to_file_encryption_done" msgid="7859766358000523953">"Already file encrypted"</string> + <string name="title_convert_fbe" msgid="1263622876196444453">"Converting to file based encryption"</string> + <string name="convert_to_fbe_warning" msgid="6139067817148865527">"Convert data partition to file based encryption.\n !!Warning!! This will erase all your data.\n This feature is alpha, and may not work correctly.\n Press \'Wipe and convert…\' to continue."</string> + <string name="button_convert_fbe" msgid="5152671181309826405">"Wipe and convert…"</string> + <string name="picture_color_mode" msgid="4560755008730283695">"Picture color mode"</string> + <string name="picture_color_mode_desc" msgid="1141891467675548590">"Use sRGB"</string> + <string name="daltonizer_mode_disabled" msgid="7482661936053801862">"Disabled"</string> + <string name="daltonizer_mode_monochromacy" msgid="8485709880666106721">"Monochromacy"</string> + <string name="daltonizer_mode_deuteranomaly" msgid="5475532989673586329">"Deuteranomaly (red-green)"</string> + <string name="daltonizer_mode_protanomaly" msgid="8424148009038666065">"Protanomaly (red-green)"</string> + <string name="daltonizer_mode_tritanomaly" msgid="481725854987912389">"Tritanomaly (blue-yellow)"</string> + <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Color correction"</string> + <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"This feature is experimental and may affect performance."</string> + <string name="daltonizer_type_overridden" msgid="3116947244410245916">"Overridden by <xliff:g id="TITLE">%1$s</xliff:g>"</string> + <string name="power_remaining_settings_home_page" msgid="4845022416859002011">"<xliff:g id="PERCENTAGE">%1$s</xliff:g> - <xliff:g id="TIME_STRING">%2$s</xliff:g>"</string> + <string name="power_remaining_duration_only" msgid="6123167166221295462">"About <xliff:g id="TIME_REMAINING">%1$s</xliff:g> left"</string> + <string name="power_discharging_duration" msgid="8848256785736335185">"About <xliff:g id="TIME_REMAINING">%1$s</xliff:g> left (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> + <string name="power_remaining_duration_only_enhanced" msgid="4189311599812296592">"About <xliff:g id="TIME_REMAINING">%1$s</xliff:g> left based on your usage"</string> + <string name="power_discharging_duration_enhanced" msgid="1992003260664804080">"About <xliff:g id="TIME_REMAINING">%1$s</xliff:g> left based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> + <string name="power_remaining_duration_only_short" msgid="3463575350656389957">"<xliff:g id="TIME_REMAINING">%1$s</xliff:g> left"</string> + <string name="power_discharge_by_enhanced" msgid="2095821536747992464">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> + <string name="power_discharge_by_only_enhanced" msgid="2175151772952365149">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> based on your usage"</string> + <string name="power_discharge_by" msgid="6453537733650125582">"Should last until about <xliff:g id="TIME">%1$s</xliff:g> (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> + <string name="power_discharge_by_only" msgid="107616694963545745">"Should last until about <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_discharge_by_only_short" msgid="1372817269546888804">"Until <xliff:g id="TIME">%1$s</xliff:g>"</string> + <string name="power_remaining_less_than_duration_only" msgid="5996752448813295329">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining"</string> + <string name="power_remaining_less_than_duration" msgid="5751885147712659423">"Less than <xliff:g id="THRESHOLD">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> + <string name="power_remaining_more_than_subtext" msgid="3176771815132876675">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining (<xliff:g id="LEVEL">%2$s</xliff:g>)"</string> + <string name="power_remaining_only_more_than_subtext" msgid="8931654680569617380">"More than <xliff:g id="TIME_REMAINING">%1$s</xliff:g> remaining"</string> + <string name="power_remaining_duration_only_shutdown_imminent" product="default" msgid="1181059207608751924">"Phone may shutdown soon"</string> + <string name="power_remaining_duration_only_shutdown_imminent" product="tablet" msgid="2606370266981054691">"Tablet may shutdown soon"</string> + <string name="power_remaining_duration_only_shutdown_imminent" product="device" msgid="2918084807716859985">"Device may shutdown soon"</string> + <string name="power_remaining_duration_shutdown_imminent" product="default" msgid="3090926004324573908">"Phone may shutdown soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string> + <string name="power_remaining_duration_shutdown_imminent" product="tablet" msgid="7466484148515796216">"Tablet may shutdown soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string> + <string name="power_remaining_duration_shutdown_imminent" product="device" msgid="603933521600231649">"Device may shutdown soon (<xliff:g id="LEVEL">%1$s</xliff:g>)"</string> + <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string> + <string name="power_remaining_charging_duration_only" msgid="1421102457410268886">"<xliff:g id="TIME">%1$s</xliff:g> left until fully charged"</string> + <string name="power_charging_duration" msgid="4676999980973411875">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> until fully charged"</string> + <string name="battery_info_status_unknown" msgid="196130600938058547">"Unknown"</string> + <string name="battery_info_status_charging" msgid="1705179948350365604">"Charging"</string> + <string name="battery_info_status_charging_lower" msgid="8689770213898117994">"charging"</string> + <string name="battery_info_status_discharging" msgid="310932812698268588">"Not charging"</string> + <string name="battery_info_status_not_charging" msgid="8523453668342598579">"Plugged in, can\'t charge right now"</string> + <string name="battery_info_status_full" msgid="2824614753861462808">"Full"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlled by admin"</string> + <string name="disabled" msgid="9206776641295849915">"Disabled"</string> + <string name="external_source_trusted" msgid="2707996266575928037">"Allowed"</string> + <string name="external_source_untrusted" msgid="2677442511837596726">"Not allowed"</string> + <string name="install_other_apps" msgid="6986686991775883017">"Install unknown apps"</string> + <string name="home" msgid="3256884684164448244">"Settings Home"</string> <string-array name="battery_labels"> - <item msgid="8494684293649631252">"0%"</item> - <item msgid="8934126114226089439">"50%"</item> - <item msgid="1286113608943010849">"100%"</item> + <item msgid="8494684293649631252">"0%"</item> + <item msgid="8934126114226089439">"50%"</item> + <item msgid="1286113608943010849">"100%"</item> </string-array> - <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> ago"</string> - <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> left"</string> - <string name="screen_zoom_summary_small" msgid="5867245310241621570">"Small"</string> - <string name="screen_zoom_summary_default" msgid="2247006805614056507">"Default"</string> - <string name="screen_zoom_summary_large" msgid="4835294730065424084">"Large"</string> - <string name="screen_zoom_summary_very_large" msgid="7108563375663670067">"Larger"</string> - <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Largest"</string> - <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Custom (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> - <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string> - <string name="retail_demo_reset_message" msgid="118771671364131297">"Enter password to perform factory reset in demo mode"</string> - <string name="retail_demo_reset_next" msgid="8356731459226304963">"Next"</string> - <string name="retail_demo_reset_title" msgid="696589204029930100">"Password required"</string> - <string name="active_input_method_subtypes" msgid="3596398805424733238">"Active input methods"</string> - <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Use system languages"</string> - <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"Failed to open settings for <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g>"</string> - <string name="ime_security_warning" msgid="4135828934735934248">"This input method may be able to collect all the text you type, including personal data like passwords and credit card numbers. It comes from the app <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. Use this input method?"</string> - <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"Note: After a reboot, this app can\'t start until you unlock your phone"</string> - <string name="ims_reg_title" msgid="7609782759207241443">"IMS registration state"</string> - <string name="ims_reg_status_registered" msgid="933003316932739188">"Registered"</string> - <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Not registered"</string> - <string name="status_unavailable" msgid="7862009036663793314">"Unavailable"</string> - <string name="wifi_status_mac_randomized" msgid="5589328382467438245">"MAC is randomized"</string> + <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> ago"</string> + <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> left"</string> + <string name="screen_zoom_summary_small" msgid="5867245310241621570">"Small"</string> + <string name="screen_zoom_summary_default" msgid="2247006805614056507">"Default"</string> + <string name="screen_zoom_summary_large" msgid="4835294730065424084">"Large"</string> + <string name="screen_zoom_summary_very_large" msgid="7108563375663670067">"Larger"</string> + <string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Largest"</string> + <string name="screen_zoom_summary_custom" msgid="5611979864124160447">"Custom (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string> + <string name="content_description_menu_button" msgid="8182594799812351266">"Menu"</string> + <string name="retail_demo_reset_message" msgid="118771671364131297">"Enter password to perform factory reset in demo mode"</string> + <string name="retail_demo_reset_next" msgid="8356731459226304963">"Next"</string> + <string name="retail_demo_reset_title" msgid="696589204029930100">"Password required"</string> + <string name="active_input_method_subtypes" msgid="3596398805424733238">"Active input methods"</string> + <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Use system languages"</string> + <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"Failed to open settings for <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g>"</string> + <string name="ime_security_warning" msgid="4135828934735934248">"This input method may be able to collect all the text you type, including personal data like passwords and credit card numbers. It comes from the app <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. Use this input method?"</string> + <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"Note: After a reboot, this app can\'t start until you unlock your phone"</string> + <string name="ims_reg_title" msgid="7609782759207241443">"IMS registration state"</string> + <string name="ims_reg_status_registered" msgid="933003316932739188">"Registered"</string> + <string name="ims_reg_status_not_registered" msgid="6529783773485229486">"Not registered"</string> + <string name="status_unavailable" msgid="7862009036663793314">"Unavailable"</string> + <string name="wifi_status_mac_randomized" msgid="5589328382467438245">"MAC is randomized"</string> <plurals name="wifi_tether_connected_summary" formatted="false" msgid="3871603864314407780"> - <item quantity="other">%1$d devices connected</item> - <item quantity="one">%1$d device connected</item> + <item quantity="other">%1$d devices connected</item> + <item quantity="one">%1$d device connected</item> </plurals> - <string name="accessibility_manual_zen_more_time" msgid="1636187409258564291">"More time."</string> - <string name="accessibility_manual_zen_less_time" msgid="6590887204171164991">"Less time."</string> - <string name="cancel" msgid="6859253417269739139">"Cancel"</string> - <string name="okay" msgid="1997666393121016642">"OK"</string> - <string name="zen_mode_enable_dialog_turn_on" msgid="8287824809739581837">"Turn on"</string> - <string name="zen_mode_settings_turn_on_dialog_title" msgid="2297134204747331078">"Turn on Do Not Disturb"</string> - <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"Never"</string> - <string name="zen_interruption_level_priority" msgid="2078370238113347720">"Priority only"</string> - <string name="zen_mode_and_condition" msgid="4927230238450354412">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> - <string name="zen_alarm_warning_indef" msgid="3007988140196673193">"You won\'t hear your next alarm <xliff:g id="WHEN">%1$s</xliff:g> unless you turn this off before then"</string> - <string name="zen_alarm_warning" msgid="6236690803924413088">"You won\'t hear your next alarm <xliff:g id="WHEN">%1$s</xliff:g>"</string> - <string name="alarm_template" msgid="4996153414057676512">"at <xliff:g id="WHEN">%1$s</xliff:g>"</string> - <string name="alarm_template_far" msgid="3779172822607461675">"on <xliff:g id="WHEN">%1$s</xliff:g>"</string> - <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duration"</string> - <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ask every time"</string> - <string name="zen_mode_forever" msgid="2704305038191592967">"Until you turn off"</string> - <string name="time_unit_just_now" msgid="6363336622778342422">"Just now"</string> - <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Phone speaker"</string> + <string name="accessibility_manual_zen_more_time" msgid="1636187409258564291">"More time."</string> + <string name="accessibility_manual_zen_less_time" msgid="6590887204171164991">"Less time."</string> + <string name="cancel" msgid="6859253417269739139">"Cancel"</string> + <string name="okay" msgid="1997666393121016642">"OK"</string> + <string name="zen_mode_enable_dialog_turn_on" msgid="8287824809739581837">"Turn on"</string> + <string name="zen_mode_settings_turn_on_dialog_title" msgid="2297134204747331078">"Turn on Do Not Disturb"</string> + <string name="zen_mode_settings_summary_off" msgid="6119891445378113334">"Never"</string> + <string name="zen_interruption_level_priority" msgid="2078370238113347720">"Priority only"</string> + <string name="zen_mode_and_condition" msgid="4927230238450354412">"<xliff:g id="ZEN_MODE">%1$s</xliff:g>. <xliff:g id="EXIT_CONDITION">%2$s</xliff:g>"</string> + <string name="zen_alarm_warning_indef" msgid="3007988140196673193">"You won\'t hear your next alarm <xliff:g id="WHEN">%1$s</xliff:g> unless you turn this off before then"</string> + <string name="zen_alarm_warning" msgid="6236690803924413088">"You won\'t hear your next alarm <xliff:g id="WHEN">%1$s</xliff:g>"</string> + <string name="alarm_template" msgid="4996153414057676512">"at <xliff:g id="WHEN">%1$s</xliff:g>"</string> + <string name="alarm_template_far" msgid="3779172822607461675">"on <xliff:g id="WHEN">%1$s</xliff:g>"</string> + <string name="zen_mode_duration_settings_title" msgid="229547412251222757">"Duration"</string> + <string name="zen_mode_duration_always_prompt_title" msgid="6478923750878945501">"Ask every time"</string> + <string name="zen_mode_forever" msgid="2704305038191592967">"Until you turn off"</string> + <string name="time_unit_just_now" msgid="6363336622778342422">"Just now"</string> + <string name="media_transfer_phone_device_name" msgid="1003823744105758574">"Phone speaker"</string> </resources> diff --git a/packages/SettingsLib/res/values-es-rUS/arrays.xml b/packages/SettingsLib/res/values-es-rUS/arrays.xml index 4899346914e5..053ef4851b5b 100644 --- a/packages/SettingsLib/res/values-es-rUS/arrays.xml +++ b/packages/SettingsLib/res/values-es-rUS/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Usar comprobación HDCP para contenido DRM solamente"</item> <item msgid="45075631231212732">"Siempre utilizar comprobación HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Inhabilitado"</item> + <item msgid="1969681323976948639">"Filtrado habilitado"</item> + <item msgid="8719029132154020716">"Habilitado"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (predeterminado)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml index eef0fb10d070..00f85e665112 100644 --- a/packages/SettingsLib/res/values-es-rUS/strings.xml +++ b/packages/SettingsLib/res/values-es-rUS/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Conexión automática mediante %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Conectado automáticamente mediante proveedor de calificación de red"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Conexión a través de %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> de <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Conexión a través de <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Disponible a través de %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Presiona para configurar"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Presiona para registrarte"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Conectado pero sin conexión a Internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Sin Internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Acceso obligatorio"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"El punto de acceso está completo temporalmente"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Conexión a través de %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Disponible a través de %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Error de conexión"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"No es válida la URL del servidor OSU"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"No se pudo establecer conexión con el servidor OSU"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"No se pudo validar el servidor OSU"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"No es válido el certificado del servidor OSU"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Se anuló el aprovisionamiento"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"No está disponible el aprovisionamiento"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"No es válida la URL del servidor OSU"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Tipo de comando inesperado"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Tipo de mensaje SOAP inesperado"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"No se pudo realizar el intercambio de mensajes SOAP"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"No se pudo iniciar la recepción de redireccionamiento"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Se agotó el tiempo de espera de redireccionamiento"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"No se encontró actividad OSU"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Estado de mensaje SOAP inesperado"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"No se encontró PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"No se encontró ningún nodo raíz de confianza para el servidor AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"No se encontró ningún nodo raíz de confianza para el servidor de soluciones"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"No se pudo recuperar el nodo raíz de confianza del servidor de políticas"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"No se pudieron recuperar los certificados raíz de confianza"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"No se encontró ningún certificado raíz de confianza para el servidor AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"No se pudo agregar la configuración de PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"No se encontró ningún proveedor OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Estableciendo conexión"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Se estableció conexión"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Estableciendo conexión con el servidor OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Se validó el servidor OSU"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Se estableció conexión con el servidor OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Intercambio SOAP inicial"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Esperando respuesta de redireccionamiento"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Se recibió la respuesta de redireccionamiento"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Segundo intercambio SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Tercer intercambio SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Recuperando certificados raíz de confianza"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Se completó el aprovisionamiento"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Abriendo <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"No se pudo establecer conexión"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Completando registro…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"No se pudo completar el registro. Presiona para volver a intentarlo."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Se completó el registro. Conectando…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Muy lenta"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Aceptar"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Permanecer activo"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"La pantalla nunca quedará inactiva mientras el dispositivo se esté cargando."</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Registro de Bluetooth HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capturar paquetes de Bluetooth (activa/desactiva el Bluetooth después de cambiar esta configuración)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueo de OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir que el cargador de inicio se desbloquee"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"¿Permitir desbloqueo de OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certificación de pantalla inalámbrica"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Habilitar registro detallado de Wi-Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Selección aleatoria de MAC conectada"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Datos móviles siempre activados"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleración de hardware de conexión mediante dispositivo portátil"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sin nombre"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"No se pudo establecer conexión"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opciones de certificación de pantalla inalámbrica"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar nivel de registro Wi-Fi; mostrar por SSID RSSI en el selector de Wi-Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Seleccionar la dirección MAC de forma aleatoria cuando se establezca conexión con redes Wi-Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Con uso medido"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Sin tarifa plana"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Tamaños de búfer de Logger"</string> diff --git a/packages/SettingsLib/res/values-es/arrays.xml b/packages/SettingsLib/res/values-es/arrays.xml index 52362de587b0..c87bcae0fe74 100644 --- a/packages/SettingsLib/res/values-es/arrays.xml +++ b/packages/SettingsLib/res/values-es/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Utilizar comprobación de HDCP solo para contenido DRM"</item> <item msgid="45075631231212732">"Utilizar siempre comprobación de HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Inhabilitado"</item> + <item msgid="1969681323976948639">"Habilitado con filtros"</item> + <item msgid="8719029132154020716">"Habilitado"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (Predeterminada)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml index 64b710a0801e..b21b7d1ead5f 100644 --- a/packages/SettingsLib/res/values-es/strings.xml +++ b/packages/SettingsLib/res/values-es/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Conectada automáticamente a través de %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Conectado automáticamente a través de un proveedor de valoración de redes"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado a través de %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> de <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Conectado a través de <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Disponible a través de %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Toca para configurar"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Toca para registrarte"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Conexión sin Internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Sin Internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Debes iniciar sesión"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Punto de acceso temporalmente lleno"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Conectado a través de %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Disponible a través de %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"No se ha podido establecer conexión"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL del servidor OSU no válida"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"No se ha podido establecer conexión con el servidor OSU"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"No se ha podido validar el servidor OSU"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificado del servidor OSU no válido"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Aprovisionamiento anulado"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Aprovisionamiento no disponible"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL del servidor OSU no válida"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Tipo de comando inesperado"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Tipo de mensaje SOAP inesperado"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"No se ha podido completar el intercambio de mensajes SOAP"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"No se ha podido iniciar la recepción de redirección"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Se ha agotado el tiempo de espera de redirección"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"No se ha encontrado actividad de OSU"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Estado de mensaje SOAP inesperado"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"No se ha podido encontrar PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"No se ha podido encontrar el nodo raíz de confianza del servidor AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"No se ha podido encontrar el nodo raíz de confianza del servidor de soluciones"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"No se ha podido encontrar el nodo raíz de confianza del servidor de políticas"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"No se han podido obtener certificados raíz de confianza"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"No se ha podido encontrar el certificado raíz de confianza del servidor AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"No se ha podido añadir la configuración de PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"No se ha podido encontrar ningún servidor OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Conectando"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Conectado"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Estableciendo conexión con el servidor OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Servidor OSU validado"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Se ha establecido conexión con el servidor OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Intercambio SOAP inicial"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Esperando respuesta de redirección"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Respuesta de redirección recibida"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Segundo intercambio SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Tercer intercambio SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Obteniendo certificados raíz de confianza"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Aprovisionamiento completado"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Abriendo <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"No se ha podido conectar"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Completando registro…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"No se ha podido completar el registro. Toca para volver a intentarlo."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Se ha completado el registro. Conectando…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Muy lenta"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Aceptable"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Pantalla siempre encendida al cargar"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"La pantalla nunca entra en modo de suspensión si el dispositivo se está cargando"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Habilitar registro de Bluetooth HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capturar paquetes de Bluetooth (después de cambiar esta opción, desactiva y activa el Bluetooth)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueo de OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir desbloquear el bootloader"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"¿Permitir desbloqueo de OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certificación de pantalla inalámbrica"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Habilitar registro Wi-Fi detallado"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Orden aleatorio de direcciones MAC conectadas"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Datos móviles siempre activos"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleración por hardware para conexión compartida"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sin nombre"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"No se ha podido establecer la conexión"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opciones para la certificación de la pantalla inalámbrica"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar el nivel de registro de Wi-Fi, mostrar por SSID RSSI en el selector Wi-Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Ordenar las direcciones MAC de forma aleatoria al conectarse a redes Wi‑Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Medida"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"No medida"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Tamaños del búfer para registrar"</string> diff --git a/packages/SettingsLib/res/values-et/arrays.xml b/packages/SettingsLib/res/values-et/arrays.xml index 76a972dccaf0..e36251b95176 100644 --- a/packages/SettingsLib/res/values-et/arrays.xml +++ b/packages/SettingsLib/res/values-et/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Kasuta HDCP-kontrolli ainult DRM-sisu korral"</item> <item msgid="45075631231212732">"Kasuta alati HDCP-kontrollimist"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Keelatud"</item> + <item msgid="1969681323976948639">"Luba filtreeritud"</item> + <item msgid="8719029132154020716">"Lubatud"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (vaikeseade)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml index 900860163390..fab137519725 100644 --- a/packages/SettingsLib/res/values-et/strings.xml +++ b/packages/SettingsLib/res/values-et/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Ühendus loodi automaatselt teenusega %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Ühendus loodi automaatselt võrgukvaliteedi hinnangute pakkuja kaudu"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Ühendatud üksuse %1$s kaudu"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> – <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Ühendatud võrgu <xliff:g id="NAME">%1$s</xliff:g> kaudu"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Saadaval üksuse %1$s kaudu"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Puudutage seadistamiseks"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Puudutage registreerumiseks"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Ühendatud, Interneti-ühendus puudub"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Interneti-ühendus puudub"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Nõutav on sisselogimine"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pääsupunkt on ajutiselt täis"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Ühendatud operaatori %1$s kaudu"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Saadaval operaatori %1$s kaudu"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Ühendamine ebaõnnestus"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU serveri kehtetu URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU serveriga ühendamine ebaõnnestus"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU serveri valideerimine ebaõnnestus"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU serveri kehtetu sertifikaat"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Ettevalmistamine katkestati"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Ettevalmistamine pole saadaval"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU serveri kehtetu URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Ootamatu käsutüüp"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Ootamatu SOAP-sõnumi tüüp"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP-sõnumi saatmine ebaõnnestus"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Kuulaja ümbersuunamist ei saanud käivitada"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Ümbersuunamine aegus"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU tegevusi ei leitud"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"SOAP-sõnumi ootamatu olek"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO-d ei leitud"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA serveri usaldusväärset juursõlme ei leitud"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Abinõude serveri usaldusväärset juursõlme ei leitud"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Eeskirjade serveri usaldusväärset juursõlme ei leitud"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Usaldusväärseid juursertifikaate ei õnnestunud tuua"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA serveri usaldusväärset juursertifikaati ei leitud"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPointi konfiguratsiooni lisamine ebaõnnestus"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU teenusepakkujat ei leitud"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Ühendamine"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Ühendatud"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Ühendamine OSU serveriga"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU server valideeriti"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Ühendatud OSU serveriga"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Esialgne SOAP-andmevahetus"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Otsevastuse ootel"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Saadi otsevastus"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Teine SOAP-andmevahetus"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Kolmas SOAP-andmevahetus"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Usaldusväärsete juursertifikaatide toomine"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Ettevalmistamine on lõpetatud"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Teenuse <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> avamine"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Ühendust ei saanud luua"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Registreerimise lõpuleviimine …"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Registreerimist ei saanud lõpule viia. Puudutage, et uuesti proovida."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registreerimine on lõpule viidud. Ühendamine …"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Väga aeglane"</string> <string name="speed_label_slow" msgid="813109590815810235">"Aeglane"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Hea"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Jää sisselülitatuks"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Ekraan ei lähe kunagi laadimise ajal unerežiimi"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Luba Bluetoothi HCI jälgimise logi"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Jäädvusta Bluetoothi paketid. (pärast seade muutmist muuda Bluetoothi olekut)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-i avamine"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Luba buudilaadur avada"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Kas lubada OEM-i avamine?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Võrgustik"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Juhtmeta ekraaniühenduse sertifitseerimine"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Luba WiFi sõnaline logimine"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Juhusliku MAC-aadressi määramine ühendamisel"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Hoia mobiilne andmeside alati aktiivne"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Ühenduse jagamise riistvaraline kiirendus"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Kuva ilma nimedeta Bluetoothi seadmed"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Ühendamine ebaõnnestus"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Juhtmeta ekraaniühenduse sertifitseerimisvalikute kuvamine"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Suurenda WiFi logimistaset, kuva WiFi valijas SSID RSSI järgi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Määra WiFi-võrkudega ühenduse loomisel juhuslik MAC-aadress"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Mahupõhine"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Mittemahupõhine"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Logija puhvri suurused"</string> diff --git a/packages/SettingsLib/res/values-eu/arrays.xml b/packages/SettingsLib/res/values-eu/arrays.xml index 90df3546f38b..aa048b1a17f7 100644 --- a/packages/SettingsLib/res/values-eu/arrays.xml +++ b/packages/SettingsLib/res/values-eu/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Erabili HDCP egiaztapena DRM edukirako soilik"</item> <item msgid="45075631231212732">"Erabili beti HDCP egiaztapena"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Desgaituta"</item> + <item msgid="1969681323976948639">"Gaituta baina iragazita"</item> + <item msgid="8719029132154020716">"Gaituta"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (lehenetsia)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml index ae0fd47c932d..7d3e1f3049da 100644 --- a/packages/SettingsLib/res/values-eu/strings.xml +++ b/packages/SettingsLib/res/values-eu/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s bidez automatikoki konektatuta"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatikoki konektatuta sareen balorazioen hornitzailearen bidez"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s bidez konektatuta"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> (<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>)"</string> + <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> bidez konektatuta"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s bidez erabilgarri"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Sakatu konfiguratzeko"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Sakatu erregistratzeko"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Konektatuta; ezin da atzitu Internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Ez dago Interneteko konexiorik"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Saioa hasi behar da"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Sarbide-puntua beteta dago aldi baterako"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s bidez konektatuta"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s bidez erabilgarri"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Ezin izan da konektatu"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU zerbitzariaren URLak ez du balio"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Ezin izan da konektatu OSU zerbitzarira"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Ezin izan da balidatu OSU zerbitzaria"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU zerbitzariaren ziurtagiriak ez du balio"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Bertan behera utzi da hornitze-prozesua"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Ez dago horniketarik erabilgarri"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU zerbitzariaren URLak ez du balio"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Ustekabeko agindu mota"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Ustekabeko SOAP mezu mota"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Ezin izan da trukatu SOAP mezua"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Ezin izan da abiarazi birbideratze-hautemailea"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Birbideratzea jasotzeko denbora-muga gainditu da"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Ez da aurkitu OSU jarduerarik"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"SOAP mezuaren ustekabeko egoera"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Ezin izan da aurkitu PPS-MO objektua"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Ezin izan da aurkitu AAA zerbitzariaren fidagarritasunaren erroko nodoa"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Ezin izan da aurkitu konponketa-zerbitzariaren fidagarritasunaren erroko nodoa"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Ezin izan da aurkitu gidalerro-zerbitzariaren fidagarritasunaren erroko nodoa"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Ezin izan dira eskuratu fidagarritasunaren erroko ziurtagiriak"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Ezin izan da aurkitu AAA zerbitzariaren fidagarritasunaren erroko ziurtagiria"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Ezin izan da gehitu PassPoint konfigurazioa"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Ezin izan da aurkitu OSU hornitzailerik"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Konektatzen"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Konektatuta"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU zerbitzariarekin konektatzen"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Balidatu da OSU zerbitzaria"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU zerbitzarira konektatuta"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Hasierako SOAP trukaketa"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Birbideratze-erantzunaren zain"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Jaso da birbideratze-erantzun bat"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Bigarren SOAP trukaketa"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Hirugarren SOAP trukaketa"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Fidagarritasunaren erroko ziurtagiriak eskuratzen"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Osatu da hornitze-prozesua"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> irekitzen"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Ezin izan da konektatu"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Erregistroa osatzen…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Ezin izan da osatu erregistroa. Berriro saiatzeko, ukitu hau."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Erregistratu da. Konektatzen…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Oso motela"</string> <string name="speed_label_slow" msgid="813109590815810235">"Motela"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Ados"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Mantendu aktibo"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Pantaila ez da inoiz inaktibo ezarriko kargatu bitartean"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Gaitu Bluetooth HCI miatze-erregistroa"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Hauteman Bluetooth paketeak (aktibatu edo desaktibatu Bluetooth konexioa ezarpena aldatu ostean)."</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM desblokeoa"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Onartu abiarazlea desblokeatzea"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM desblokeoa onartu nahi duzu?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Sareak"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Hari gabeko bistaratze-egiaztapena"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Gaitu Wi-Fi sareetan saioa hasteko modu xehatua"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Konektatutako MAC helbideak ausaz aukeratzea"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Datu-konexioa beti aktibo"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Konexioa partekatzeko hardwarearen azelerazioa"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Erakutsi Bluetooth gailuak izenik gabe"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Ezin izan da konektatu"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Erakutsi hari gabeko bistaratze-egiaztapenaren aukerak"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Erakutsi datu gehiago Wi-Fi sareetan saioa hasterakoan. Erakutsi sarearen identifikatzailea eta seinalearen indarra Wi‑Fi sareen hautagailuan."</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Aukeratu ausaz MAC helbideak Wi‑Fi sareetara konektatzean"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Sare mugatua"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Sare ez-mugatua"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Erregistroen buffer-tamainak"</string> diff --git a/packages/SettingsLib/res/values-fa/arrays.xml b/packages/SettingsLib/res/values-fa/arrays.xml index 85720e47bd6d..2019cafdf90e 100644 --- a/packages/SettingsLib/res/values-fa/arrays.xml +++ b/packages/SettingsLib/res/values-fa/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"استفاده از بررسی HDCP فقط برای محتوای DRM"</item> <item msgid="45075631231212732">"همیشه از بررسی HDCP استفاده شود"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"غیرفعال"</item> + <item msgid="1969681323976948639">"فیلترشده فعال شده است"</item> + <item msgid="8719029132154020716">"فعال"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP نسخه ۱.۴ (پیشفرض)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml index e9c93132a035..293c463334fd 100644 --- a/packages/SettingsLib/res/values-fa/strings.xml +++ b/packages/SettingsLib/res/values-fa/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"اتصال خودکار ازطریق %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"اتصال خودکار ازطریق ارائهدهنده رتبهبندی شبکه"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"متصل از طریق %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> از <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"متصل شده ازطریق <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"در دسترس از طریق %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"برای راهاندازی ضربه بزنید"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"برای ثبتنام ضربه بزنید"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"متصل، بدون اینترنت"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"عدم دسترسی به اینترنت"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"ورود به سیستم لازم است"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ظرفیت نقطه دسترسی موقتاً تکمیل شده است"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"متصل ازطریق %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"در دسترس ازطریق %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"اتصال ناموفق بود"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"نشانی وب سرور OSU نامعتبر است"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"اتصال سرور OSU ناموفق بود"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"تأییداعتبار سرور OSU ناموفق بود"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"گواهینامه سرور OSU نامعتبر است"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"ارائه لغو شد"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"ارائه امکانپذیر نیست"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"نشانی وب سرور OSU نامعتبر است"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"نوع فرمان غیرمنتظره"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"نوع پیام SOAP غیرمنتظره"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"تبادل پیام SOAP ناموفق بود"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"هدایت پاسخ تماس غیرهمزمان شروع نشد"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"مهلت انتظار برای هدایت تمام شد"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"فعالیت OSU پیدا نشد"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"وضعیت پیام SOAP غیرمنتظره"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO پیدا نشد"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"گره ریشه مطمئن برای سرور AAA پیدا نشد"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"گره ریشه مطمئن برای سرور جبران خسارت پیدا نشد"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"گروه ریشه مطمئن برای سرور خطمشی پیدا نشد"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"گواهینامه ریشه مطمئن بازیابی نشد"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"گواهینامه ریشه مطمئن برای سرور AAA پیدا نشد"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"پیکربندی PassPoint اضافه نشد"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"ارائهدهنده OSU پیدا نشد"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"درحال برقراری ارتباط"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"متصل"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"اتصال به سرور OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"سرور OSU تأییداعتبار شد"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"متصل به سرور OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"تبادل SOAP اولیه"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"درانتظار پاسخ هدایت"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"پاسخ هدایت دریافتی"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"تبادل SOAP دوم"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"تبادل SOAP سوم"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"بازیابی گواهینامههای ریشه مطمئن"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"ارائه کامل شد"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"درحال بازکردن <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"متصل نشد"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"درحال تکمیل ثبتنام…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"ثبتنام تکمیل نشد. برای امتحان مجدد ضربه بزنید."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"ثبتنام کامل شد. درحال اتصال…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"بسیار آهسته"</string> <string name="speed_label_slow" msgid="813109590815810235">"آهسته"</string> <string name="speed_label_okay" msgid="2331665440671174858">"تأیید"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"بیدار ماندن"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"صفحه هرگز در حین شارژ شدن به حالت خواب نمیرود"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"فعال کردن گزارش تجسس Bluetooth HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"بستههای بلوتوث ضبط شود. (بعد از تغییر این تنظیم، بلوتوث را روشن/خاموش کنید)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"بازکردن سازنده تجهیزات اصلی"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"اجازه دهید قفل بوتلودر باز شود"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"بازکردن سازنده تجهیزات اصلی مجاز (OEM) است؟"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"شبکه"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"گواهینامه نمایش بیسیم"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"فعال کردن گزارشگیری طولانی Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"تصادفیسازی MAC متصل"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"داده تلفن همراه همیشه فعال باشد"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"شتاب سختافزاری اتصال به اینترنت با تلفن همراه"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"نمایش دستگاههای بلوتوث بدون نام"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"متصل نشد"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"نمایش گزینهها برای گواهینامه نمایش بیسیم"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"افزایش سطح گزارشگیری Wi‑Fi، نمایش به ازای SSID RSSI در انتخابکننده Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"تصادفی کردن نشانی MAC هنگام اتصال به شبکههای Wi-Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"کنتوردار"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"بدون کنتور"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"اندازههای حافظه موقت ثبتکننده"</string> diff --git a/packages/SettingsLib/res/values-fi/arrays.xml b/packages/SettingsLib/res/values-fi/arrays.xml index 33b1ffcf9b7e..9566a29dc2ca 100644 --- a/packages/SettingsLib/res/values-fi/arrays.xml +++ b/packages/SettingsLib/res/values-fi/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Käytä HDCP-tarkistusta vain DRM-suojatulle sisällölle."</item> <item msgid="45075631231212732">"Käytä aina HDCP-tarkistusta"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Ei käytössä"</item> + <item msgid="1969681323976948639">"Suodatus käytössä"</item> + <item msgid="8719029132154020716">"Käytössä"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (oletus)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml index 3f9afb085403..f335eb930c1c 100644 --- a/packages/SettingsLib/res/values-fi/strings.xml +++ b/packages/SettingsLib/res/values-fi/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automaattinen yhteys muodostettu palvelun %1$s kautta"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Yhdistetty automaattisesti verkon arviointipalvelun kautta"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Yhdistetty seuraavan kautta: %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>: <xliff:g id="SSID">%1$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Yhdistetty (<xliff:g id="NAME">%1$s</xliff:g>)"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Käytettävissä seuraavan kautta: %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Määritä napauttamalla"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Rekisteröidy napauttamalla"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Yhdistetty, ei internetyhteyttä"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Ei internetyhteyttä"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Sisäänkirjautuminen vaaditaan"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Yhteyspiste tilapäisesti täynnä"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Yhdistetty, verkko: %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Käytettävissä, verkko: %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Yhteys katkesi"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Virheellinen OSU-palvelimen URL-osoite"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU-palvelimen yhteys epäonnistui"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU-palvelimen vahvistus epäonnistui"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Virheellinen OSU-palvelimen varmenne"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Käyttäjien hallinta keskeytetty"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Käyttäjien hallinta ei ole käytettävissä"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Virheellinen OSU-palvelimen URL-osoite"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Odottamaton komentotyyppi"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Odottamaton SOAP-viestityyppi"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP-viestinvaihto epäonnistui"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Uudelleenohjausten seurain ei käynnistynyt"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Aikakatkaistiin odottaessa uudelleenohjausta"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU-toimintaa ei löytynyt"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Odottamaton SOAP-viestin tila"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO:ta ei löytynyt"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA-palvelimelle ei löydetty luotettavaa pääsolmua"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Hyvityskeinopalvelimelle ei löydetty luotettavaa pääsolmua"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Käytäntöpalvelimelle ei löydetty luotettavaa pääsolmua"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Luotettavien juurivarmenteiden nouto epäonnistui"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA-palvelimelle ei löydetty luotettavaa juurivarmennetta"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint-määrityksen lisääminen epäonnistui"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU-palveluntarjoajaa ei löytynyt"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Yhdistetään"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Yhdistetty"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Yhdistetään OSU-palvelimeen"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-palvelin vahvistettu"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Yhdistetty OSU-palvelimeen"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Ensimmäinen SOAP-vaihto"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Odotetaan uudelleenohjausvastausta"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Uudelleenohjausvastaus vastaanotettu"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Toinen SOAP-vaihto"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Kolmas SOAP-vaihto"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Noudetaan luotettavia juurivarmenteita"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Käyttäjien hallinta valmis"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Avataan <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Ei yhteyttä"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Viimeistellään rekisteröitymistä…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Rekisteröityminen epäonnistui. Yritä uudelleen napauttamalla."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Rekisteröityminen valmis. Yhdistetään…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Hyvin hidas"</string> <string name="speed_label_slow" msgid="813109590815810235">"Hidas"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Pysy käynnissä"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Näyttö ei sammu puhelimen latautuessa."</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Ota Bluetoothin HCI-tarkkailuloki käyttöön"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Tallenna Bluetoothin HCl-paketit tiedostoon (ota Bluetooth käyttöön asetuksen muuttamisen jälkeen)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM:n lukituksen avaus"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Salli käynnistysohjelman lukituksen avaaminen"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Sallitaanko OEM:n lukituksen avaus?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Yhteysominaisuudet"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Langattoman näytön sertifiointi"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Käytä Wi-Fin laajennettua lokikirjausta"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Yhdistetty MAC-satunnaistaminen"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobiilidata aina käytössä"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Laitteistokiihdytyksen yhteyden jakaminen"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Näytä nimettömät Bluetooth-laitteet"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Ei yhteyttä"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Näytä langattoman näytön sertifiointiin liittyvät asetukset."</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Lisää Wi‑Fin lokikirjaustasoa, näytä SSID RSSI -kohtaisesti Wi‑Fi-valitsimessa."</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Käytä satunnaista MAC-osoitetta, kun yhdistät Wi-Fi-verkkoon."</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Maksullinen"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Maksuton"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Lokipuskurien koot"</string> diff --git a/packages/SettingsLib/res/values-fr-rCA/arrays.xml b/packages/SettingsLib/res/values-fr-rCA/arrays.xml index 145bd98e5125..a02406fed494 100644 --- a/packages/SettingsLib/res/values-fr-rCA/arrays.xml +++ b/packages/SettingsLib/res/values-fr-rCA/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Utiliser la vérification HDCP uniquement pour le contenu GDN"</item> <item msgid="45075631231212732">"Toujours utiliser la vérification HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Désactivé"</item> + <item msgid="1969681323976948639">"Filtres activés"</item> + <item msgid="8719029132154020716">"Activé"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (par défaut)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml index 4fbc0ca81450..49591039178c 100644 --- a/packages/SettingsLib/res/values-fr-rCA/strings.xml +++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatiquement connecté par %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Connecté automatiquement par le fournisseur d\'avis sur le réseau"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Connecté par %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> de <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Connecté sur le réseau <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Accessible par %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Touchez pour configurer"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Toucher pour vous connecter"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Connecté, aucun accès à Internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Aucune connexion Internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Connexion requise"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Le point d\'accès est temporairement plein"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Connecté par %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Accessible par %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Échec de connexion"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL de serveur OSU non valide"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Échec de la connexion avec le serveur OSU"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Échec de la validation du serveur OSU"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificat de serveur OSU non valide"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"L\'approvisionnement a été abandonné"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"L\'approvisionnement n\'est pas accessible"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL de serveur OSU non valide"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Type de commande inattendu"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Type de message SOAP inattendu"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Échec de l\'échange de messages SOAP"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Impossible de démarrer l\'écoute de redirection"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Délai d\'attente pour la redirection"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Aucune activité OSU trouvée"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"État de message SOAP inattendu"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Impossible de trouver PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Impossible de trouver le nœud racine de confiance pour le serveur AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Impossible de trouver le nœud racine de confiance pour le serveur de recours"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Impossible de trouver le nœud racine de confiance pour le serveur de politiques"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Impossible de récupérer les certificats racine de confiance"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Impossible de trouver le certificat racine de confiance pour le serveur AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Impossible d\'ajouter la configuration PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Impossible de trouver un fournisseur OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Connexion en cours…"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Connecté"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Connexion au serveur OSU en cours…"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Serveur OSU validé"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Connecté au serveur OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Échange SOAP initial"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"En attente de la réponse de redirection…"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Réponse de redirection reçue"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Deuxième échange SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Échange SOAP tiers"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Récupération des certificats racine de confiance"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Approvisionnement terminé"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Ouverture de <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> en cours…"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Impossible de se connecter"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Terminaison de l\'inscription en cours…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Impossible de terminer l\'inscription. Touchez pour réessayer."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Inscription terminée. Connexion en cours…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Très lente"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lente"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Rester activé"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"L\'écran ne se met jamais en veille lors du chargement"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activer le journal HCI Snoop Bluetooth"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capturer les paquets Bluetooth. (Désactivez et réactivez le Bluetooth après le chang. de ce param.)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Déverrouillage par le fabricant"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Autoriser le déverrouillage du fichier d\'amorce"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Permettre le déverrouillage par le fabricant?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Réseautage"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certification de l\'affichage sans fil"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Autoriser enreg. données Wi-Fi détaillées"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Sélection aléatoire de l\'adresse MAC lors de la connexion"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Données cellulaires toujours actives"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Accélération matérielle pour le partage de connexion"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Afficher les appareils Bluetooth sans nom"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Impossible de se connecter"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Afficher les options pour la certification d\'affichage sans fil"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Détailler davantage les données Wi-Fi, afficher par SSID RSSI dans sélect. Wi-Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Sélectionner l\'adresse MAC de manière aléatoire lors de la connexion aux réseaux Wi-Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Mesuré"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Non mesuré"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Tailles des mémoires tampons d\'enregistreur"</string> diff --git a/packages/SettingsLib/res/values-fr/arrays.xml b/packages/SettingsLib/res/values-fr/arrays.xml index 34cedd8873f9..d87388d816de 100644 --- a/packages/SettingsLib/res/values-fr/arrays.xml +++ b/packages/SettingsLib/res/values-fr/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Utiliser la vérification HDCP uniquement pour le contenu DRM"</item> <item msgid="45075631231212732">"Toujours utiliser la vérification HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Désactivé"</item> + <item msgid="1969681323976948639">"Activé et filtré"</item> + <item msgid="8719029132154020716">"Activé"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (par défaut)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml index c4b8b3f05a82..1f071de1ac6b 100644 --- a/packages/SettingsLib/res/values-fr/strings.xml +++ b/packages/SettingsLib/res/values-fr/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Connecté automatiquement via %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Connecté automatiquement via un fournisseur d\'évaluation de l\'état du réseau"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Connecté via %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> par <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Connecté via <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Disponible via %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Appuyer pour configurer"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Appuyez ici pour vous connecter"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Connecté, aucun accès à Internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Aucun accès à Internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Connexion requise"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Point d\'accès temporairement plein"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Connecté via %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Disponible via %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Échec de la connexion"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"L\'URL du serveur OSU n\'est pas valide"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Échec de la connexion au serveur OSU"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Échec de la validation du serveur OSU"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificat du serveur OSU non valide"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Préparation annulée"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Préparation non disponible"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"L\'URL du serveur OSU n\'est pas valide"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Type de commande inattendu"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Type de message SOAP inattendu"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Échec de l\'échange de messages SOAP"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Échec du démarrage de l\'écouteur de redirection"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Délai dépassé ou en attente de redirection"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Aucune activité OSU trouvée"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"État inattendu du message SOAP"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Échec de la recherche de PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Échec de la recherche de nœud racine de confiance pour le serveur AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Échec de la recherche de nœud racine de confiance pour le serveur de réparation"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Échec de la recherche de nœud racine de confiance pour le serveur de règles"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Échec de la récupération des certificats racine de confiance"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Échec de la recherche de certificat racine de confiance pour le serveur AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Échec de l\'ajout de la configuration PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Échec de la recherche de fournisseur OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Connexion…"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Connecté"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Connexion au serveur OSU…"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Serveur OSU validé"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Connecté au serveur OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Échange SOAP initial"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"En attente de la réponse de redirection…"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Réponse de redirection reçue"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Deuxième échange SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Troisième échange SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Récupération des certificats racine de confiance…"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Préparation terminée"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Ouverture de <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>…"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Impossible de se connecter"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Finalisation de l\'inscription…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Impossible de finaliser l\'inscription. Appuyez ici pour réessayer."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Inscription terminée. Connexion…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Très lente"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lente"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Correct"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Rester activé"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"L\'écran ne se met jamais en veille lors du chargement."</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activer journaux HCI Bluetooth"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capturer les paquets Bluetooth. (Activer/Désactiver le Bluetooth après avoir modifié ce paramètre)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Déverrouillage OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Autoriser le déverrouillage du chargeur d\'amorçage"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Autoriser le déverrouillage OEM ?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Mise en réseau"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certification affichage sans fil"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Autoriser enreg. infos Wi-Fi détaillées"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Sélection aléatoire de l\'adresse MAC lors de la connexion"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Données mobiles toujours actives"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Accélération matérielle pour le partage de connexion"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Afficher les appareils Bluetooth sans nom"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Impossible de se connecter"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Afficher les options de la certification de l\'affichage sans fil"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Détailler plus infos Wi-Fi, afficher par RSSI de SSID dans outil sélection Wi-Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Sélectionner l\'adresse MAC de manière aléatoire lors de la connexion aux réseaux Wi-Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Facturé à l\'usage"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Non facturé à l\'usage"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Tailles mémoires tampons enregistr."</string> diff --git a/packages/SettingsLib/res/values-gl/arrays.xml b/packages/SettingsLib/res/values-gl/arrays.xml index a0bc977fdf34..a7325c20f0f0 100644 --- a/packages/SettingsLib/res/values-gl/arrays.xml +++ b/packages/SettingsLib/res/values-gl/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Utiliza a comprobación HDCP só para contido DRM"</item> <item msgid="45075631231212732">"Utilizar sempre a comprobación HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Opción desactivada"</item> + <item msgid="1969681323976948639">"Está activado o filtrado"</item> + <item msgid="8719029132154020716">"Opción activada"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (predeterminado)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml index 786e2c5849fd..06faf00036dd 100644 --- a/packages/SettingsLib/res/values-gl/strings.xml +++ b/packages/SettingsLib/res/values-gl/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Conectouse automaticamente a través de %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Conectada automaticamente a través dun provedor de valoración de rede"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado a través de %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> de <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Wifi conectada a través de <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Dispoñible a través de %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Toca aquí para configuralo"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Toca para rexistrarte"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Conexión sen Internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Non hai conexión a Internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"É obrigatorio iniciar sesión"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"O punto de acceso está temporalmente cheo"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Conectado a través de %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Dispoñible a través de %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Produciuse un erro coa conexión"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL do servidor OSU non-válido"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Produciuse un erro na conexión do servidor OSU"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Non se puido validar o servidor OSU"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificado do servidor OSU non-válido"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Abastecemento anulado"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Abastecemento non-dispoñible"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL do servidor OSU non-válido"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Tipo de comando inesperado"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Tipo de mensaxe SOAP inesperado"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Produciuse un erro no intercambio da mensaxe SOAP"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Non se puido iniciar a recepción de redirección"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Esgotouse o tempo de espera de redirección"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Non se encontrou a actividade de OSU"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Estado da mensaxe SOAP inesperado"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"No se puido encontrar PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"No se puido encontrar o nodo raíz de confianza do servidor AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"No se puido encontrar o nodo raíz de confianza do servidor de solucións"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Non se puido encontrar o nodo raíz de confianza do servidor da política"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Produciuse un erro ao recuperar os certificados raíz de confianza"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Non se puido encontrar o certificado raíz de confianza do servidor AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Non se puido engadir a configuración de PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"No se puido encontrar ningún servidor OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Conectando"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Conectado"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Conectándose ao servidor OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Servidor OSU validado"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Conectado ao servidor OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Intercambio SOAP inicial"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Agardando pola resposta de redirección"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Resposta de redirección recibida"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Segundo intercambio SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Terceiro intercambio SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Recuperando certificados raíz de confianza"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Abastecemento completado"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Abrindo <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Non se puido establecer conexión"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Completando o rexistro…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Non se puido completar o rexistro. Toca para tentalo de novo."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Completouse o rexistro. Conectando…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Moi lenta"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Aceptar"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Pantalla activa"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"A pantalla nunca estará en modo de suspensión durante a carga"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activar rexistro de busca HCI Bluetooth"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capturar paquetes de Bluetooth. (Activa/desactiva o Bluetooth despois de cambiar esta opción)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueo do OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir que se desbloqueo o cargador de inicio"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Queres permitir o desbloqueo do OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certificado de visualización sen fíos"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Activar rexistro detallado da wifi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Selección aleatoria de enderezo MAC coa conexión"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Datos móbiles sempre activados"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleración de hardware para conexión compartida"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sen nomes"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Non se puido conectar"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostra opcións para o certificado de visualización sen fíos"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumenta o nivel de rexistro da wifi, móstrao por SSID RSSI no selector de wifi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Selecciona aleatoriamente o enderezo MAC cando te conectes a redes wifi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"De pago por consumo"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Sen pago por consumo"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Tamaños de búfer de rexistrador"</string> diff --git a/packages/SettingsLib/res/values-gu/arrays.xml b/packages/SettingsLib/res/values-gu/arrays.xml index 92f52b8eca82..cf1f6516a750 100644 --- a/packages/SettingsLib/res/values-gu/arrays.xml +++ b/packages/SettingsLib/res/values-gu/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"ફક્ત DRM કન્ટેન્ટ માટે HDCP તપાસનો ઉપયોગ કરો"</item> <item msgid="45075631231212732">"હંમેશા HDCP તપાસનો ઉપયોગ કરો"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"બંધ છે"</item> + <item msgid="1969681323976948639">"ફિલ્ટર કરેલ ચાલુ છે"</item> + <item msgid="8719029132154020716">"ચાલુ છે"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (ડિફૉલ્ટ)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml index 492eaf0015fe..232dea9e1f1a 100644 --- a/packages/SettingsLib/res/values-gu/strings.xml +++ b/packages/SettingsLib/res/values-gu/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s દ્વારા સ્વત: કનેક્ટ થયેલ"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"નેટવર્ક રેટિંગ પ્રદાતા દ્વારા આપમેળે કનેક્ટ થયું"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s દ્વારા કનેક્ટ થયેલ"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>નું <xliff:g id="SSID">%1$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> દ્વારા કનેક્ટ થયેલ"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s દ્વારા ઉપલબ્ધ"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"સેટઅપ કરવા માટે ટૅપ કરો"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"સાઇન અપ કરવા માટે ટૅપ કરો"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"કનેક્ટ કર્યું, કોઈ ઇન્ટરનેટ નથી"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"ઇન્ટરનેટ ઍક્સેસ નથી"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"સાઇન ઇન આવશ્યક"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ઍક્સેસ પૉઇન્ટ અસ્થાયીરૂપે ભરાયેલ છે"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s દ્વારા કનેક્ટ થયેલ"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s દ્વારા ઉપલબ્ધ"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"કનેક્શન નિષ્ફળ થયું"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU સર્વરનું URL માન્ય નથી"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU સર્વર કનેક્ટ કરવામાં નિષ્ફ્ળતા મળી"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU સર્વર માન્ય કરવામાં નિષ્ફ્ળતા મળી"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU સર્વરનું પ્રમાણપત્ર માન્ય નથી"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"જોગવાઈ કરવાનું રદ કરવામાં આવ્યું"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"જોગવાઈ કરવાનું ઉપલબ્ધ નથી"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU સર્વરનું URL માન્ય નથી"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"આદેશનો અનપેક્ષિત પ્રકાર"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"SOAP સંદેશનો અનપેક્ષિત પ્રકાર"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP સંદેશ વિનિમયમાં નિષ્ફ્ળતા મળી"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"રીડાયરેક્ટ લિસનર શરૂ કરવામાં નિષ્ફ્ળતા મળી"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"રીડાયરેક્ટ કરવાની રાહ જોવાનો સમય સમાપ્ત થયો"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"કોઈ OSU પ્રવૃત્તિ મળી નથી"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"SOAP સંદેશનું અનપેક્ષિત સ્ટેટસ"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO શોધવામાં નિષ્ફ્ળતા મળી"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA સર્વર માટે ટ્રસ્ટ રૂટ નોડ શોધવામાં નિષ્ફ્ળતા મળી"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"રેમિડીયેશન સર્વર માટે ટ્રસ્ટ રૂટ નોડ શોધવામાં નિષ્ફ્ળતા મળી"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"પૉલિસી સર્વર માટે ટ્રસ્ટ રૂટ નોડ શોધવામાં નિષ્ફ્ળતા મળી"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"ટ્રસ્ટ રૂટ પ્રમાણપત્રો ફરી મેળવવામાં નિષ્ફ્ળતા મળી"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA સર્વર માટે ટ્રસ્ટ રૂટ પ્રમાણપત્ર શોધવામાં નિષ્ફ્ળતા મળી"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint ગોઠવણી ઉમેરવામાં નિષ્ફ્ળતા મળી"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU પ્રદાતા શોધવામાં નિષ્ફ્ળતા મળી"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"કનેક્ટ થઈ રહ્યું છે"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"કનેક્ટેડ"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU સર્વર સાથે કનેક્ટ કરી રહ્યાં છીએ"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU સર્વર માન્ય કરવામાં આવેલ"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU સર્વર સાથે કનેક્ટ કરેલ છે"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"પ્રારંભિક SOAP વિનિમય"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"રીડાયરેક્ટ કરવા માટેના પ્રતિસાદની રાહ જુએ છે"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"રીડાયરેક્ટ કરવા માટેનો પ્રતિસાદ પ્રાપ્ત થયો"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"દ્વિતીય SOAP વિનિમય"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"તૃતીય SOAP વિનિમય"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"ટ્રસ્ટ રૂટ પ્રમાણપત્રો ફરી મેળવાઈ રહ્યાં છે"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"જોગવાઈ કરવાનું પૂર્ણ થયું"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ખોલી રહ્યાં છીએ"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"કનેક્ટ કરી શકાયું નથી"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"સાઇન અપ પૂર્ણ કરી રહ્યા છીએ…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"સાઇન અપ પૂર્ણ કરી શકાયું નથી. ફરી પ્રયાસ કરવા માટે ટૅપ કરો."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"સાઇન અપ પૂર્ણ. કનેક્ટ કરી રહ્યાં છીએ…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"ખૂબ જ ધીમી"</string> <string name="speed_label_slow" msgid="813109590815810235">"ધીમી"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ઓકે"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"સક્રિય રાખો"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"ચાર્જિંગ દરમિયાન સ્ક્રીન ક્યારેય નિષ્ક્રિય થશે નહીં"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"બ્લૂટૂથ HCI સ્નૂપ લૉગ ચાલુ કરો"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"બ્લૂટૂથ પૅકેટ કૅપ્ચર કરો. (આ સેટિંગ બદલ્યા પછી બ્લૂટૂથને ટૉગલ કરો)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM અનલૉકિંગ"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"બુટલોડર અનલૉક કરવાની મંજૂરી આપો"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM ને અનલૉક કરવાની મંજૂરી આપીએ?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"નેટવર્કિંગ"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"વાયરલેસ ડિસ્પ્લે પ્રમાણન"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"વાઇ-ફાઇ વર્બોઝ લૉગિંગ ચાલુ કરો"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"કનેક્ટ કરેલ MAC ઍડ્રેસને રેન્ડમાઇઝ કરવાનું ચાલુ કરો"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"મોબાઇલ ડેટા હંમેશાં સક્રિય"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"ટિથરિંગ માટે હાર્ડવેર ગતિવૃદ્ધિ"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"નામ વિનાના બ્લૂટૂથ ઉપકરણો બતાવો"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"કનેક્ટ કરી શકાયું નથી"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"વાયરલેસ ડિસ્પ્લે પ્રમાણપત્ર માટેના વિકલ્પો બતાવો"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"વાઇ-ફાઇ લોગિંગ સ્તર વધારો, વાઇ-ફાઇ પીકરમાં SSID RSSI દીઠ બતાવો"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"વાઇ-ફાઇ નેટવર્ક સાથે જ્યારે કનેક્ટ કરી રહ્યાં હોય ત્યારે MAC ઍડ્રેસને રેન્ડમાઇઝ કરો"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"મીટર કરેલ"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"મીટર ન કરેલ"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"લોગર બફર કદ"</string> diff --git a/packages/SettingsLib/res/values-hi/arrays.xml b/packages/SettingsLib/res/values-hi/arrays.xml index dd5ef6c335b4..5ad9b0191c77 100644 --- a/packages/SettingsLib/res/values-hi/arrays.xml +++ b/packages/SettingsLib/res/values-hi/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"एचडीसीपी जाँच का उपयोग केवल डीआरएम सामग्री के लिए करें"</item> <item msgid="45075631231212732">"हमेशा HDCP जाँच का उपयोग करें"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"बंद है"</item> + <item msgid="1969681323976948639">"चालू और फ़िल्टर किया गया"</item> + <item msgid="8719029132154020716">"चालू है"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"एवीआरसीपी 1.4 (डिफ़ॉल्ट)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml index c32a0395b857..2f03eb1b9c3a 100644 --- a/packages/SettingsLib/res/values-hi/strings.xml +++ b/packages/SettingsLib/res/values-hi/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s के ज़रिए ऑटोमैटिक रूप से कनेक्ट है"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"नेटवर्क रेटिंग प्रदाता के ज़रिए अपने आप कनेक्ट है"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s के द्वारा उपलब्ध"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> का <xliff:g id="SSID">%1$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> के ज़रिए कनेक्ट किया गया"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s के द्वारा उपलब्ध"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"सेट अप करने के लिए टैप करें"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"साइन अप करने के लिए टैप करें"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"कनेक्ट हो गया है, लेकिन इंटरनेट नहीं है"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"इंटरनेट कनेक्शन नहीं है"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"साइन इन करना ज़रूरी है"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"एक्सेस पॉइंट फ़िलहाल भरा हुआ है"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s के ज़रिए कनेक्ट"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s के ज़रिए उपलब्ध"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"कनेक्शन नहीं जोड़ा जा सका"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"अमान्य ओएसयू सर्वर यूआरएल"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"ओएसयू सर्वर कनेक्शन नहीं जुड़ा"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"ओएसयू सर्वर की पुष्टि नहीं हो सकी"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"अमान्य ओएसयू सर्वर सर्टिफ़िकेट"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"प्रावधान रद्द किया गया"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"प्रावधान उपलब्ध नहीं है"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"अमान्य ओएसयू सर्वर यूआरएल"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ऐसा निर्देश जिसकी उम्मीद नहीं थी"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"ऐसा एसओएपी मैसेज जिसकी उम्मीद नहीं थी"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"एसओएपी मैसेज एक्सचेंज नहीं हो सका"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"रीडायरेक्ट लिसनर चालू नहीं हुआ"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"रीडायरेक्ट के लिए इंतज़ार करते हुए समय खत्म"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"कोई ओएसयू गतिविधि नहीं मिली"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"ऐसी एसओएपी मैसेज स्थिति, जिसकी उम्मीद नहीं थी"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"पीपीएस-एमओ नहीं मिला"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"एएए सर्वर के लिए भरोसेमंद रूट नोड नहीं मिला"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"रिमीडीएशन सर्वर के लिए भरोसेमंद रूट नोड नहीं मिला"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"पॉलिसी सर्वर के लिए भरोसेमंद रूट नोड नहीं मिला"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"भरोसेमंद रूट सर्टिफ़िकेट वापस नहीं लाए जा सके"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"एएए सर्वर के लिए भरोसेमंद रूट सर्टिफ़िकेट नहीं मिला"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint कॉन्फ़िगरेशन नहीं जोड़ा जा सका"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"ओएसयू प्रोवाइडर नहीं मिला"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"कनेक्ट हो रहा है"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"जुड़ गया है"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"ओएसयू सर्वर से जोड़ा जा रहा है"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"ओएसयू सर्वर की पुष्टि की गई"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"ओएसयू सर्वर से कनेक्ट किया गया है"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"शुरुआती एसओएपी एक्सचेंज"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"रीडायरेक्ट जवाब का इंतज़ार किया जा रहा है"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"रीडायरेक्ट जवाब मिला"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"दूसरा एसओएपी एक्सचेंज"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"तीसरा एसओएपी एक्सचेंज"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"भरोसेमंद रूट सर्टिफ़िकेट वापस लाए जा रहे हैं"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"प्रावधान पूरा हुआ"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> खोला जा रहा है"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"कनेक्ट नहीं किया जा सका"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"साइन-अप पूरा हो रहा है…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"साइन-अप पूरा नहीं हो सका. फिर से कोशिश करने के लिए टैप करें."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"साइन-अप पूरा हुआ. कनेक्ट हो रहा है…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"अत्यधिक धीमी"</string> <string name="speed_label_slow" msgid="813109590815810235">"धीमी"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ठीक है"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"स्क्रीन को चालू रखें"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"चार्ज करते समय स्क्रीन कभी भी कम बैटरी मोड में नहीं जाएगी"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ब्लूटूथ एचसीआई स्नूप लॉग चालू करें"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ब्लूटूथ पैकेट कैप्चर करें. (यह सेटिंग बदलने के बाद ब्लूटूथ टॉगल करें)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"ओईएम अनलॉक करना"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"बूटलोडर को अनलाॅक किए जाने की अनुमति दें"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM अनलॉक करने की अनुमति दें?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"नेटवर्किंग"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"वायरलेस डिसप्ले सर्टिफ़िकेशन"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"वाई-फ़ाई वर्बोस लॉगिंग चालू करें"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"जुड़े हुए एमएसी (मैक) रैंडमाइज़ेशन (वाई-फ़ाई नेटवर्क से जुड़ते समय एमएसी पता बदले जाने की सुविधा)"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"मोबाइल डेटा हमेशा चालू"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"हार्डवेयर से तेज़ी लाने के लिए टेदर करें"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"बिना नाम वाले ब्लूटूथ डिवाइस दिखाएं"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"कनेक्ट नहीं हो सका"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"वायरलेस डिसप्ले सर्टिफ़िकेशन के विकल्प दिखाएं"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"वाई-फ़ाई लॉगिंग का स्तर बढ़ाएं, वाई-फ़ाई पिकर में प्रति SSID RSSI दिखाएं"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"वाई-फ़ाई से जुड़ते समय अलग-अलग एमएसी पते इस्तेमाल करें"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"डेटा इस्तेमाल करने की सीमा तय की गई है"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"डेटा इस्तेमाल करने की सीमा तय नहीं की गई है"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"लॉगर बफ़र आकार"</string> diff --git a/packages/SettingsLib/res/values-hr/arrays.xml b/packages/SettingsLib/res/values-hr/arrays.xml index fcf0e0956ecf..8453c4c494a8 100644 --- a/packages/SettingsLib/res/values-hr/arrays.xml +++ b/packages/SettingsLib/res/values-hr/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Upotrebljavaj HDCP provjeru samo za DRM sadržaj"</item> <item msgid="45075631231212732">"Uvijek upotrebljavaj HDCP provjeru"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Onemogućeno"</item> + <item msgid="1969681323976948639">"Omogućeno filtrirano"</item> + <item msgid="8719029132154020716">"Omogućeno"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (zadano)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml index 8b238756ce45..bb14b066276b 100644 --- a/packages/SettingsLib/res/values-hr/strings.xml +++ b/packages/SettingsLib/res/values-hr/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatski povezan putem %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatski povezan putem ocjenjivača mreže"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Povezano putem %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g>, <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Povezan putem mreže <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Dostupno putem %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Dodirnite za postavljanje"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Dodirnite da biste se registrirali"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Povezano, bez interneta"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Nema interneta"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Obavezna prijava"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pristupna je točka privremeno puna"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Povezano putem mreže %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Dostupno putem mreže %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Povezivanje nije uspjelo"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Nevažeći URL OSU poslužitelja"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Veza s OSU poslužiteljem nije uspjela"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Ovjera OSU poslužitelja nije uspjela"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Nevažeći certifikat OSU poslužitelja"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Davanje pristupa je prekinuto"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Pružanje usluga nije dostupno"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Nevažeći URL OSU poslužitelja"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Neočekivana vrsta naredbe"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Neočekivana vrsta SOAP poruke"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Razmjena SOAP poruke nije uspjela"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Nije moguće pokrenuti osluškivač preusmjeravanja"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Isteklo je vrijeme čekanja za preusmjeravanje"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nije pronađena OSU aktivnost"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Neočekivana poruka o statusu SOAP-a"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Nije pronađen PPS MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Nije pronađen pouzdani korijenski čvor za AAA poslužitelj"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Nije pronađen pouzdani korijenski čvor za poslužitelj za popravak"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Nije pronađen pouzdani korijenski čvor za poslužitelj za pravila"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Dohvaćanje pouzdanih korijenskih certifikata nije uspjelo"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Nije pronađen pouzdani korijenski certifikat za AAA poslužitelj"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Dodavanje konfiguracije PassPointa nije uspjelo"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Nije pronađen OSU davatelj usluga"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Povezivanje"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Povezano"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Povezivanje s OSU poslužiteljem"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Potvrđen je OSU poslužitelj"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Povezano s OSU poslužiteljem"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Početna razmjena SOAP-a"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Čekanje na odgovor o preusmjeravanju"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Primljen je odgovor o preusmjeravanju"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Druga razmjena SOAP-a"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Treća razmjena SOAP-a"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Dohvaćanje pouzdanih korijenskih certifikata"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Dovršeno je davanje pristupa"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Otvaranje aplikacije <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Povezivanje nije uspjelo"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Dovršavanje registracije…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Nije moguće dovršiti registraciju. Dodirnite za ponovni pokušaj."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registracija je dovršena. Povezivanje…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Vrlo sporo"</string> <string name="speed_label_slow" msgid="813109590815810235">"Sporo"</string> <string name="speed_label_okay" msgid="2331665440671174858">"U redu"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Ne pokreći mirovanje"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Zaslon nikad neće prijeći u mirovanje tijekom punjenja"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Zapisi za Bluetooth HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Dohvati Bluetooth pakete. (Uključi Bluetooth nakon promjene ove postavke)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM otključavanje"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Neka kôd za pokretanje sustava bude otključan"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Želite li dopustiti OEM otključavanje?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Umrežavanje"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certifikacija bežičnog prikaza"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Omogući opširnu prijavu na Wi-Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Nasumični odabir MAC-a pri povezivanju"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilni podaci uvijek aktivni"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardversko ubrzanje za modemsko povezivanje"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Prikaži Bluetooth uređaje bez naziva"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Povezivanje nije moguće"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Prikaži opcije za certifikaciju bežičnog prikaza"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povećana razina prijave na Wi‑Fi, prikaz po SSID RSSI-ju u Biraču Wi‑Fi-ja"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Nasumično odaberi MAC adresu pri povezivanju s Wi-Fi mrežama"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"S ograničenim prometom"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Bez ograničenja prometa"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Veličine međuspremnika zapisnika"</string> diff --git a/packages/SettingsLib/res/values-hu/arrays.xml b/packages/SettingsLib/res/values-hu/arrays.xml index 2e02a5997220..8713fc18ddf6 100644 --- a/packages/SettingsLib/res/values-hu/arrays.xml +++ b/packages/SettingsLib/res/values-hu/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Csak DRM-tartalomhoz használjon HDCP ellenőrzést"</item> <item msgid="45075631231212732">"Mindig használjon HDCP ellenőrzést"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Letiltva"</item> + <item msgid="1969681323976948639">"Szűrtek engedélyezve"</item> + <item msgid="8719029132154020716">"Engedélyezve"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (alapértelmezett)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml index 589aa408f673..14d8c78ed6b8 100644 --- a/packages/SettingsLib/res/values-hu/strings.xml +++ b/packages/SettingsLib/res/values-hu/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatikusan csatlakozott a következőn keresztül: %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatikusan csatlakozott a hálózatértékelés szolgáltatóján keresztül"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Csatlakozva a következőn keresztül: %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>: <xliff:g id="SSID">%1$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Kapcsolódva a következőn keresztül: <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Elérhető a következőn keresztül: %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Koppintson ide a beállításhoz"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Koppintson a regisztrációhoz"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Csatlakozva, nincs internet-hozzáférés"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Nincs internetkapcsolat"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Bejelentkezést igényel"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"A hozzáférési pont átmenetileg megtelt"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Csatlakozva a következőn keresztül: %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Elérhető a következőn keresztül: %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Sikertelen kapcsolódás"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Érvénytelen az OSU-szerver URL-je"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Nem sikerült csatlakozni az OSU-szerverhez"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Nem sikerült az OSU-szerver ellenőrzése"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Érvénytelen az OSU-szerver tanúsítványa"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Hozzárendelés megszakítva"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"A hozzárendelés nem lehetséges"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Érvénytelen az OSU-szerver URL-je"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Váratlan parancstípus"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Váratlan SOAP-üzenettípus"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Sikertelen SOAP-üzenetváltás"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Nem sikerült elindítani az átirányítási eseményfigyelőt"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Időtúllépés az átirányításra várakozás közben"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nem található OSU-tevékenység"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Váratlan SOAP-üzenetállapot"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Nem található PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Nem található az AAA-szerver megbízható gyökércsomópontja"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Nem található a szerverkiszolgáló megbízható gyökércsomópontja"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Nem található a házirendszerver megbízható gyökércsomópontja"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Nem sikerült a megbízható gyökérszintű tanúsítványok lekérése"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Nem található az AAA-szerver megbízható gyökértanúsítványa"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Nem sikerült a PassPoint-konfiguráció hozzáadása"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Nem található OSU-szolgáltató"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Csatlakozás…"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Csatlakozva"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Csatlakozás az OSU-szerverhez…"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-szerver ellenőrizve"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Csatlakoztatva az OSU-szerverhez"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Első SOAP-üzenetváltás"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Várakozás az átirányítási válaszra…"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Átirányítási válasz érkezett"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Második SOAP-üzenetváltás"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Harmadik SOAP-üzenetváltás"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Megbízható gyökérszintű tanúsítványok lekérése…"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Hozzárendelés kész"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> megnyitása"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Nem sikerült csatlakozni"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Regisztráció befejezése…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Nem sikerült a regisztráció befejezése. Koppintással újrapróbálkozhat."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"A regisztráció befejeződött. Csatlakozás…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Nagyon lassú"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lassú"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Rendben"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Nem kapcsolódik ki"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"A képernyő soha nem kapcsol ki töltés során"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI snoop napló engedélyezése"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth-csomagok rögzítése. (Bluetooth be-, illetve kikapcsolása a beállítás módosítása után)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-feloldás"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"A rendszerbetöltő feloldásának engedélyezése"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Engedélyezi az OEM-feloldást?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Hálózatok"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Vezeték nélküli kijelző tanúsítványa"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Részletes Wi-Fi-naplózás engedélyezése"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Csatlakoztatott MAC-címek randomizálása"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"A mobilhálózati kapcsolat mindig aktív"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Internetmegosztás hardveres gyorsítása"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Név nélküli Bluetooth-eszközök megjelenítése"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Nem sikerült kapcsolódni"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Vezeték nélküli kijelző tanúsítványával kapcsolatos lehetőségek megjelenítése"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi-naplózási szint növelése, RSSI/SSID megjelenítése a Wi‑Fi-választóban"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"MAC-cím véletlenszerű generálása Wi‑Fi-hálózatra való csatlakozáskor"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Forgalomkorlátos"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Nem forgalomkorlátos"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Naplózási puffer mérete"</string> diff --git a/packages/SettingsLib/res/values-hy/arrays.xml b/packages/SettingsLib/res/values-hy/arrays.xml index 1e1f4bfd5f61..5cffafed6689 100644 --- a/packages/SettingsLib/res/values-hy/arrays.xml +++ b/packages/SettingsLib/res/values-hy/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Օգտագործել HDCP-ը` միայն DRM-ի բովանդակությունը ստուգելու համար"</item> <item msgid="45075631231212732">"Միշտ օգտագործել HDCP ստուգումը"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Անջատված է"</item> + <item msgid="1969681323976948639">"Միացված է զտիչներով"</item> + <item msgid="8719029132154020716">"Միացված է"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (կանխադրված)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml index eb061727b89f..28ebe4febea9 100644 --- a/packages/SettingsLib/res/values-hy/strings.xml +++ b/packages/SettingsLib/res/values-hy/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Ավտոմատ կերպով կապակցվել է %1$s-ի միջոցով"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Ավտոմատ կերպով միացել է ցանցի վարկանիշի ծառայության մատակարարի միջոցով"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Կապակցված է %1$s-ի միջոցով"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"«<xliff:g id="SSID">%1$s</xliff:g>», <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Միացված է <xliff:g id="NAME">%1$s</xliff:g>-ի միջոցով"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Հասանելի է %1$s-ի միջոցով"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Հպեք՝ կարգավորելու համար"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Հպեք՝ գրանցվելու համար"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Միացված է, սակայն ինտերնետ կապ չկա"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Ինտերնետ կապ չկա"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Անհրաժեշտ է մուտք գործել"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Հասանելիության կետը ժամանակավորապես լիքն է"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Միացված է %1$s-ի միջոցով"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Հասանելի է %1$s-ի միջոցով"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Չհաջողվեց միանալ"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU սերվերի անվավեր URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Չհաջողվեց միանալ OSU սերվերին"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Չհաջողվեց ստուգել OSU սերվերը"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU սերվերի անվավեր հավաստագիր"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Համաժամեցումն ընդհատվեց"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Համաժամեցումն անհասանելի է"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU սերվերի անվավեր URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Հրահանգի անհայտ տեսակ"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"SOAP հաղորդագրության անհայտ տեսակ"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Չհաջողվեց փոխանակել SOAP հաղորդագրությունները"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Չհաջողվեց գործարկել վերահասցեավորվող զանգերի ընդունիչը"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Սպասման ժամանակը լրացել է"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU գործողություններ չեն հայտնաբերվել"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"SOAP հաղորդագրության անհայտ կարգավիճակ"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Չհաջողվեց գտնել PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Չհաջողվեց գտնել AAA սերվերի վստահված արմատային հանգույցը"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Չհաջողվեց գտնել ուղղումների սերվերի վստահված արմատային հանգույցը"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Չհաջողվեց գտնել կանոնների սերվերի վստահված արմատային հանգույցը"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Չհաջողվեց բեռնել վստահված արմատային հավաստագրերը"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Չհաջողվեց գտնել AAA սերվերի վստահված արմատային հավաստագիրը"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Չհաջողվեց ավելացնել PassPoint-ի կարգավորումները"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Չհաջողվեց գտնել OSU-ի մատակարարին"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Միացում"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Միացած է"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Միացում OSU սերվերին"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU սերվերը ստուգված է"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Միացած է OSU սերվերին"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Առաջին փոխանակումը SOAP-ով"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Վերահասցեավորվող պատասխանի սպասում"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Պատասխանը ստացված է"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Երկրորդ փոխանակում SOAP-ով"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Երրորդ փոխանակում SOAP-ով"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Վստահված արմատային հավաստագրերը բեռնվում են"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Համաժամեցումն ավարտված է"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>, բացվում է"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Չհաջողվեց միանալ"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Գրանցումն ավարտվում է…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Չհաջողվեց ավարտել գրանցումը: Հպեք` նորից փորձելու համար:"</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Գրանցումն ավարտված է: Միացում…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Շատ դանդաղ"</string> <string name="speed_label_slow" msgid="813109590815810235">"Դանդաղ"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Հաստատել"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Մնալ արթուն"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Էկրանը երբեք չի քնի լիցքավորման ընթացքում"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Միացնել Bluetooth HCI snoop log-ը"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Պահել Bluetooth փաթեթները (այս կարգավորումը փոխելուց հետո անհրաժեշտ է վերագործարկել Bluetooth-ը)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM ապակողպում"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Թույլ տալ սկզբնաբեռնման բեռնիչի ապակողպումը"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Թույլատրե՞լ OEM ապակողպումը:"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Ցանց"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Անլար էկրանների հավաստագրում"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Միացնել Wi‑Fi մանրամասն գրանցամատյանները"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"MAC հասցեների պատահական ընտրություն Wi-Fi-ին միանալիս"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Բջջային ինտերնետը միշտ ակտիվ է"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Սարքակազմի արագացման միացում"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Ցուցադրել Bluetooth սարքերն առանց անունների"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Չհաջողվեց միանալ"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Ցույց տալ անլար էկրանի հավաստագրման ընտրանքները"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Բարձրացնել մակարդակը, Wi‑Fi ընտրիչում ամեն մի SSID-ի համար ցույց տալ RSSI"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Պատահականորեն ընտրել MAC հասցեն Wi-Fi ցանցերին միանալիս"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Վճարովի թրաֆիկ"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Անսահմանափակ թրաֆիկ"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Մատյանի բուֆերի չափերը"</string> diff --git a/packages/SettingsLib/res/values-in/arrays.xml b/packages/SettingsLib/res/values-in/arrays.xml index 8d858a530f81..867f9eaa73a8 100644 --- a/packages/SettingsLib/res/values-in/arrays.xml +++ b/packages/SettingsLib/res/values-in/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Gunakan pemeriksaan HDCP untuk konten DRM saja"</item> <item msgid="45075631231212732">"Selalu gunakan pemeriksaan HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Nonaktif"</item> + <item msgid="1969681323976948639">"Diaktifkan Difilter"</item> + <item msgid="8719029132154020716">"Diaktifkan"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml index 208508e30e64..182e52338891 100644 --- a/packages/SettingsLib/res/values-in/strings.xml +++ b/packages/SettingsLib/res/values-in/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Tersambung otomatis melalui %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Otomatis tersambung melalui penyedia rating jaringan"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Terhubung melalui %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> oleh <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Tersambung melalui <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Tersedia melalui %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Tap untuk menyiapkan"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Tap untuk mendaftar"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Tersambung, tidak ada internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Tidak ada internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Perlu login"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Titik akses penuh untuk sementara"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Tersambung melalui %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Tersedia melalui %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Koneksi gagal"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL server OSU tidak valid"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Koneksi server OSU gagal"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Validasi server OSU gagal"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Sertifikat server OSU tidak valid"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisioning dibatalkan"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisioning tidak tersedia"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL server OSU tidak valid"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Jenis perintah yang tidak terduga"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Jenis pesan SOAP yang tidak terduga"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Pertukaran pesan SOAP gagal"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Listener pengalihan gagal dimulai"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Waktu tunggu pengalihan habis"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Tidak ditemukan aktivitas OSU"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Status pesan SOAP yang tidak terduga"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Gagal menemukan PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Gagal menemukan node root tepercaya untuk server AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Gagal menemukan node root tepercaya untuk server perbaikan"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Gagal menemukan node root tepercaya untuk server kebijakan"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Gagal mengambil root certificate tepercaya"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Gagal menemukan root certificate tepercaya untuk server AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Gagal menambahkan konfigurasi PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Gagal menemukan penyedia OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Menghubungkan"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Tersambung"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Menyambungkan ke server OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Server OSU divalidasi"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Tersambung ke server OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Pertukaran SOAP awal"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Menunggu respons pengalihan"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Respons pengalihan diterima"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Pertukaran SOAP kedua"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Pertukaran SOAP ketiga"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Mengambil root certificate tepercaya"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisioning selesai"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Membuka <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Tidak dapat tersambung"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Menyelesaikan pendaftaran…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Tidak dapat menyelesaikan pendaftaran. Tap untuk mencoba lagi."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Pendaftaran selesai. Menyambungkan…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Sangat Lambat"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lambat"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Oke"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Tetap terjaga"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Layar tidak akan redup selama mengisi daya"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Aktifkan log pengintaian HCI Bluetooth"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Ambil paket Bluetooth. (Aktifkan/nonaktifkan Bluetooth setelah mengubah setelan ini)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Buka kunci OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Izinkan bootloader dibuka kuncinya"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Izinkan buka kunci OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Jaringan"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Sertifikasi layar nirkabel"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Aktifkan Pencatatan Log Panjang Wi-Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Pengacakan MAC yang Terhubung"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Data seluler selalu aktif"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Akselerasi hardware tethering"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Tampilkan perangkat Bluetooth tanpa nama"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Tidak dapat terhubung"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Tampilkan opsi untuk sertifikasi layar nirkabel"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Tingkatkan level pencatatan log Wi-Fi, tampilkan per SSID RSSI di Pemilih Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Acak alamat MAC saat menghubungkan ke jaringan Wi-Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Berbayar"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Tidak berbayar"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Ukuran buffer pencatat log"</string> diff --git a/packages/SettingsLib/res/values-is/arrays.xml b/packages/SettingsLib/res/values-is/arrays.xml index 16d5b8a4b6f9..d467a68199f6 100644 --- a/packages/SettingsLib/res/values-is/arrays.xml +++ b/packages/SettingsLib/res/values-is/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Nota HDCP-athugun aðeins fyrir höfundarréttarvarið efni"</item> <item msgid="45075631231212732">"Nota alltaf HDCP-eftirlit"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Slökkt"</item> + <item msgid="1969681323976948639">"Kveikt á síuðu"</item> + <item msgid="8719029132154020716">"Kveikt"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (sjálfgefið)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml index ffa3ddce5e36..577b7ae4dadb 100644 --- a/packages/SettingsLib/res/values-is/strings.xml +++ b/packages/SettingsLib/res/values-is/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Sjálfkrafa tengt um %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Sjálfkrafa tengt um netgæðaveitu"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Tengt í gegnum %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> með <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Tenging í gegnum <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Í boði í gegnum %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Ýttu til að setja upp"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Ýttu til að skrá þig"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Tengt, enginn netaðgangur"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Engin nettenging"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Innskráningar krafist"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Aðgangsstaður tímabundið fullur"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Tengt í gegnum %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Í boði í gegnum %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Tenging mistókst"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Ógild vefslóð OSU-þjóns"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Tenging OSU-þjóns mistókst"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Staðfesting OSU-þjóns mistókst"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Ógilt vottorð OSU-þjóns"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Hætt við úthlutun"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Úthlutun ekki tiltæk"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Ógild vefslóð OSU-þjóns"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Óvænt tegund skipunar"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Óvænt gerð SOAP- skilaboða"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Skipti SOAP-skilaboða mistókust"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Ekki tókst að ræsa framsenda hlustunarþjónustu"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Tímamörk runnu út við að bíða eftir framsendingu"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Engin OSU-virkni fannst"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Óvænt staða SOAP-skilaboða"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Ekki tókst að finna PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Ekki tókst að finna traustan rótarhnút fyrir AAA-þjón"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Ekki tókst að finna traustan rótarhnút fyrir úrbótaþjón"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Ekki tókst að finna traustan rótarhnút fyrir regluþjón"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Ekki tókst að sækja traust rótarvottorð"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Ekki tókst að finna traust rótarvottorð fyrir AAA-þjón"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Ekki tókst að bæta við PassPoint-stillingu"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Ekki tókst að finna OSU-veitu"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Tengist"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Tengt"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Tengist við OSU-þjón"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-þjónn staðfestur"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Tengt við OSU-þjón"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Fyrstu SOAP-skipti"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Bíður eftir framsendu svari"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Framsent svar móttekið"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Önnur SOAP-skipti"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Þriðju SOAP-skipti"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Sækir traust rótarvottorð"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Úthlutun lokið"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Opnar <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Ekki tókst að tengjast"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Gengur frá nýskráningu…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Ekki tókst að ljúka við nýskráningu. Ýttu til að reyna aftur."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Nýskráningu lokið. Tengist…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Mjög hægt"</string> <string name="speed_label_slow" msgid="813109590815810235">"Hægt"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Í lagi"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Vaka"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Skjárinn fer aldrei í hvíld við hleðslu"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Gera HCI-snuðraraskrá Bluetooth virka"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Fanga Bluetooth-pakka. (Velja skal Bluetooth eftir að þessari stillingu er breytt)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Opnun framleiðanda"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Leyfa opnun ræsiforritsins"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Leyfa opnun framleiðanda?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Netkerfi"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Vottun þráðlausra skjáa"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Kveikja á ítarlegri skráningu Wi-Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Slembival MAC-vistfanga við tengingu"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Alltaf kveikt á farsímagögnum"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Vélbúnaðarhröðun fyrir tjóðrun"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Sýna Bluetooth-tæki án heita"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Tenging mistókst"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Sýna valkosti fyrir vottun þráðlausra skjáa"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Auka skráningarstig Wi-Fi, sýna RSSI fyrir hvert SSID í Wi-Fi vali"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Velja MAC-vistfang af handahófi þegar tengst er við Wi‑Fi net"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Mæld notkun"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Notkun ekki mæld"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Annálsritastærðir biðminna"</string> diff --git a/packages/SettingsLib/res/values-it/arrays.xml b/packages/SettingsLib/res/values-it/arrays.xml index 555cd1c7dc5a..7d316ab8433d 100644 --- a/packages/SettingsLib/res/values-it/arrays.xml +++ b/packages/SettingsLib/res/values-it/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Usa la verifica HDCP solo per contenuti DRM"</item> <item msgid="45075631231212732">"Usa sempre la verifica HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Non attiva"</item> + <item msgid="1969681323976948639">"Filtro attivo"</item> + <item msgid="8719029132154020716">"Attiva"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (predefinita)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml index a370ad184f65..9fc32949db38 100644 --- a/packages/SettingsLib/res/values-it/strings.xml +++ b/packages/SettingsLib/res/values-it/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Collegato automaticamente tramite %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Collegato automaticamente tramite fornitore di servizi di valutazione rete"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Collegato tramite %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> di <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Connesso tramite <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Disponibile tramite %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Tocca per configurare"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Tocca per registrarti"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Connesso, senza Internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Nessuna connessione a Internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Accesso richiesto"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Punto di accesso momentaneamente al completo"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Connesso tramite %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Disponibile tramite %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Connessione non riuscita"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL del server OSU non valido"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Connessione al server OSU non riuscita"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Convalida del server OSU non riuscita"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificato server OSU non valido"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisioning interrotto"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisioning non disponibile"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL del server OSU non valido"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Tipo di comando imprevisto"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Tipo di messaggio SOAP imprevisto"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Scambio messaggi SOAP non riuscito"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Avvio del listener di reindirizzamento non riuscito"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Timeout durante l\'attesa del reindirizzamento"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nessuna attività OSU rilevata"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Stato imprevisto del messaggio SOAP"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Individuazione di PPS-MO non riuscita"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Individuazione del nodo radice di attendibilità per il server AAA non riuscita"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Individuazione del nodo radice di attendibilità per il server di correzione non riuscita"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Individuazione del nodo radice di attendibilità per il server delle norme non riuscita"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Recupero dei certificati radice di attendibilità non riuscito"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Individuazione del certificato radice di attendibilità per il server AAA non riuscita"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Aggiunta della configurazione PassPoint non riuscita."</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Individuazione di un provider OSU non riuscita"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Connessione"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Connesso"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Connessione al server OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Server OSU convalidato"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Connessione con server OSU stabilita"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Scambio SOAP iniziale"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"In attesa della risposta di reindirizzamento"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"È stata ricevuta una risposta di reindirizzamento"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Secondo scambio SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Terzo scambio SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Recupero dei certificati radice di attendibilità"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisioning completato"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Apertura di <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>…"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Impossibile collegarsi"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Completamento della registrazione…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Impossibile completare la registrazione. Tocca per riprovare."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registrazione completata. Connessione…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Molto lenta"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Rimani attivo"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Lo schermo non va mai in stand-by se sotto carica"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Attiva log di esame HCI Bluetooth"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Acquisisci pacchetti Bluetooth. Attiva/disattiva Bluetooth dopo aver modificato questa impostazione."</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Sblocco OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Consenti lo sblocco del bootloader"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Consentire lo sblocco OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Reti"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certificazione display wireless"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Attiva registrazione dettagliata Wi-Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Selezione casuale dell\'indirizzo MAC con connessione"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Dati mobili sempre attivi"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering accelerazione hardware"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostra dispositivi Bluetooth senza nome"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Impossibile collegarsi"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostra opzioni per la certificazione display wireless"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumenta il livello di registrazione Wi-Fi, mostrando il SSID RSSI nel selettore Wi-Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Seleziona indirizzo MAC casuale con reti Wi-Fi collegate"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"A consumo"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Non a consumo"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Dimensioni buffer Logger"</string> diff --git a/packages/SettingsLib/res/values-iw/arrays.xml b/packages/SettingsLib/res/values-iw/arrays.xml index 4ad9b3493bc4..9feaa2a50c67 100644 --- a/packages/SettingsLib/res/values-iw/arrays.xml +++ b/packages/SettingsLib/res/values-iw/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"השתמש בבדיקת HDCP עבור תוכן DRM בלבד"</item> <item msgid="45075631231212732">"תמיד השתמש בבדיקת HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"מושבת"</item> + <item msgid="1969681323976948639">"המסננים המופעלים"</item> + <item msgid="8719029132154020716">"מופעל"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (ברירת המחדל)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml index 04fd750820ae..8ee11e4b2069 100644 --- a/packages/SettingsLib/res/values-iw/strings.xml +++ b/packages/SettingsLib/res/values-iw/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"מחובר אוטומטית דרך %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"מחובר אוטומטית דרך ספק של דירוג רשת"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"מחובר דרך %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> של <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"מחוברת באמצעות <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"זמינה דרך %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"יש להקיש כדי להגדיר"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"יש להקיש כדי להירשם"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"מחובר. אין אינטרנט"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"אין אינטרנט"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"נדרשת כניסה"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"נקודת הגישה מלאה באופן זמני"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"מחובר לרשת של %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"זמינה דרך %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"החיבור נכשל"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"כתובת URL לא חוקית של שרת OSU"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"נכשל חיבור לשרת OSU"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"נכשל אימות של שרת OSU"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"אישור לא חוקי של שרת OSU"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"ניהול תצורה בוטל"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"ניהול תצורה לא זמין"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"כתובת URL לא חוקית של שרת OSU"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"סוג פקודה לא צפוי"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"סוג הודעה לא צפוי של SOAP"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"נכשלו חילופין של הודעת SOAP"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"נכשלה התחלה של הפניה אוטומטית של מאזין"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"תם פרק הזמן הקצוב לתפוגה בהמתנה להפניה אוטומטית"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"לא נמצאה פעילות OSU"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"סטטוס לא צפוי של הודעת SOAP"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"נכשלה מציאה של PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"נכשלה מציאה של צומת בסיס למהימנות עבור שרת AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"נכשלה מציאה של צומת בסיס למהימנות עבור שרת תיקון"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"נכשלה מציאה של צומת בסיס למהימנות עבור שרת מדיניות"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"נכשל אחזור של אישורי בסיס למהימנות"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"נכשלה מציאה של אישור בסיס למהימנות עבור שרת AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"נכשלה הוספה של הגדרת PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"נכשלה מציאה של ספק OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"מתבצעת התחברות"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"מחובר"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"מתבצע חיבור לשרת OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"שרת OSU אומת"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"יש חיבור לשרת OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"חילופי SOAP ראשוניים"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"בהמתנה לתגובה להפניה אוטומטית"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"התקבלה תגובה להפניה אוטומטית"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"חילופי SOAP בפעם השנייה"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"חילופי SOAP בפעם השלישית"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"מתבצע אחזור של אישורי בסיס למהימנות"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"ניהול תצורה הושלם"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"מתבצעת פתיחה של <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"לא ניתן היה להתחבר"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"מתבצעת השלמה של ההרשמה…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"לא ניתן היה להשלים את ההרשמה. יש להקיש כדי לנסות שוב."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"תהליך ההרשמה הסתיים. בתהליך התחברות…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"איטית מאוד"</string> <string name="speed_label_slow" msgid="813109590815810235">"איטית"</string> <string name="speed_label_okay" msgid="2331665440671174858">"אישור"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"השאר פועל"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"המסך לעולם לא יהיה במצב שינה במהלך טעינה"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"הפעלת Snoop Log של Bluetooth HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"איחוד חבילות Bluetooth. (יש להחליף מצב Bluetooth לאחר שינוי הגדרה זו)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"ביטול נעילה של OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"אפשר ביטול של נעילת מנהל האתחול"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"האם לאפשר ביטול נעילה של OEM (יצרן ציוד מקורי)?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"תקשורת רשתות"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"אישור של תצוגת WiFi"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"הפעל רישום מפורט של Wi‑Fi ביומן"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"חיבור כתובת MAC אקראית"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"חבילת הגלישה פעילה תמיד"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"שיפור מהירות באמצעות חומרה לצורך שיתוף אינטרנט בין ניידים"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"הצגת מכשירי Bluetooth ללא שמות"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"לא ניתן היה להתחבר"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"הצג אפשרויות עבור אישור של תצוגת WiFi"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"העלה את רמת הרישום של Wi‑Fi ביומן, הצג לכל SSID RSSI ב-Wi‑Fi Picker"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"יצירת כתובת MAC אקראית בהתחברות לרשתות Wi-Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"נמדדת"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"לא נמדדת"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"גדלי מאגר של יומן רישום"</string> diff --git a/packages/SettingsLib/res/values-ja/arrays.xml b/packages/SettingsLib/res/values-ja/arrays.xml index 978f6daa745d..2de8c86cb55d 100644 --- a/packages/SettingsLib/res/values-ja/arrays.xml +++ b/packages/SettingsLib/res/values-ja/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"DRMコンテンツにのみHDCPチェックを使用する"</item> <item msgid="45075631231212732">"HDCPチェックを常に使用する"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"無効"</item> + <item msgid="1969681323976948639">"有効(フィルタ済み)"</item> + <item msgid="8719029132154020716">"有効"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4(デフォルト)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml index 9699e8648b3f..4efd61b37383 100644 --- a/packages/SettingsLib/res/values-ja/strings.xml +++ b/packages/SettingsLib/res/values-ja/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s 経由で自動的に接続しています"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ネットワーク評価プロバイダ経由で自動的に接続しています"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s経由で接続"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g>(<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>)"</string> + <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> で接続しました"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s経由で使用可能"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"設定するにはタップします"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"タップして登録してください"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"接続済み、インターネット接続なし"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"インターネット未接続"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"ログインが必要"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"アクセス ポイントが一時的にいっぱいです"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s 経由で接続済み"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s 経由で使用可能"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"接続できませんでした"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU サーバーの URL が無効です"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU サーバーに接続できませんでした"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU サーバーの検証に失敗しました"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU サーバー証明書が無効です"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"プロビジョニングが中断されました"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"プロビジョニングは利用できません"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU サーバーの URL が無効です"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"予期しないコマンドタイプです"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"予期しない SOAP メッセージ タイプです"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP メッセージの交換に失敗しました"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"リダイレクト リスナーを起動できませんでした"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"リダイレクトの待機中にタイムアウトになりました"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU アクティビティが見つかりませんでした"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"予期しない SOAP メッセージ ステータスです"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO が見つかりませんでした"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA サーバー用の信頼できるルートノードが見つかりませんでした"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"修復サーバー用の信頼できるルートノードが見つかりませんでした"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"ポリシー サーバー用の信頼できるルートノードが見つかりませんでした"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"信頼できるルート証明書を取得できませんでした"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA サーバー用の信頼できるルート証明書が見つかりませんでした"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint 設定を追加できませんでした"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU プロバイダが見つかりませんでした"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"接続しています"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"接続しました"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU サーバーに接続しています"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU サーバーの検証が完了しました"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU サーバーに接続しました"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"1 回目の SOAP 交換です"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"リダイレクト レスポンスを待機しています"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"リダイレクト レスポンスを受信しました"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"2 回目の SOAP 交換です"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"3 回目の SOAP 交換です"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"信頼できるルート証明書を取得しています"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"プロビジョニングが完了しました"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"「<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>」を開いています"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"接続できませんでした"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"登録を完了しています…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"登録を完了できませんでした。タップしてもう一度お試しください。"</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"登録が完了しました。接続しています…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"とても遅い"</string> <string name="speed_label_slow" msgid="813109590815810235">"遅い"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"スリープモードにしない"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"充電中に画面をスリープにしない"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCIスヌープログをON"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth パケットをキャプチャします(この設定を変更した場合は Bluetooth を切り替えてください)。"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEMロック解除"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"ブートローダーによるロック解除を許可する"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEMロック解除の許可"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"ネットワーク"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"ワイヤレスディスプレイ認証"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi-Fi詳細ログの有効化"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"接続先 MAC のランダム化"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"モバイルデータを常に ON にする"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"テザリング時のハードウェア アクセラレーション"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth デバイスを名前なしで表示"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"接続できませんでした"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"ワイヤレスディスプレイ認証のオプションを表示"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fiログレベルを上げて、Wi-Fi選択ツールでSSID RSSIごとに表示します"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi-Fi ネットワーク接続時の MAC アドレスのランダム化"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"従量制"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"定額制"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"ログバッファのサイズ"</string> diff --git a/packages/SettingsLib/res/values-ka/arrays.xml b/packages/SettingsLib/res/values-ka/arrays.xml index 73dbdfa1472a..d315bfe8f128 100644 --- a/packages/SettingsLib/res/values-ka/arrays.xml +++ b/packages/SettingsLib/res/values-ka/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"HDCP შემოწმების გამოყენება მხოლოდ DRM კონტენტის შემთხვევაში"</item> <item msgid="45075631231212732">"ყოველთვის გამოიყენე HDCP შემოწმება"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"გათიშულია"</item> + <item msgid="1969681323976948639">"გაფილტრულის ჩართვა"</item> + <item msgid="8719029132154020716">"ჩართულია"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (ნაგულისხმევი)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml index 64d78bbc9acf..c613a06b2544 100644 --- a/packages/SettingsLib/res/values-ka/strings.xml +++ b/packages/SettingsLib/res/values-ka/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"ავტომატურად დაკავშირდა %1$s-ის მეშვეობით"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ავტომატურად დაკავშირდა ქსელის ხარისხის შეფასების პროვაიდერის მეშვეობით"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s-ით დაკავშირებული"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g>, უზრუნველყოფს <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"დაკავშირებულია <xliff:g id="NAME">%1$s</xliff:g>-ით"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"ხელმისაწვდომია %1$s-ით"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"შეეხეთ დასაყენებლად"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"შეეხეთ რეგისტრაციისთვის"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"დაკავშირებულია, ინტერნეტის გარეშე"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"ინტერნეტ-კავშირი არ არის"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"აუცილებელია სისტემაში შესვლა"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"წვდომის წერტილი დროებით გადატვირთულია"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s-ით დაკავშირებული"</string> <string name="available_via_carrier" msgid="1469036129740799053">"ხელმისაწვდომია %1$s-ით"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"დაკავშირება ვერ მოხერხდა"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU სერვერის URL არასწორია"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU სერვერთან დაკავშირება ვერ მოხერხდა"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU სერვერის დადასტურება ვერ მოხერხდა"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU სერვერის სერტიფიკატი არასწორია"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"უზრუნველყოფა შეწყვეტილია"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"უზრუნველყოფა მიუწვდომელია"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU სერვერის URL არასწორია"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ბრძანების ტიპი მოულოდნელია"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"SOAP-შეტყობინების ტიპი მოულოდნელია"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP-შეტყობინებების მიმოცვლა ვერ მოხერხდა"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"გადამისამართებების მიმღების გაშვება ვერ მოხერხდა"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"გადამისამართების მოლოდინის დრო ამოიწურა"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU აქტივობა ვერ მოიძებნა"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"SOAP-შეტყობინების სტატუსი მოულოდნელია"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO ვერ მოიძებნა"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA სერვერისთვის ნდობით აღჭურვილი ძირეული კვანძი ვერ მოიძებნა"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"გამართვების სერვერისთვის ნდობით აღჭურვილი ძირეული კვანძი ვერ მოიძებნა"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"წესების სერვერისთვის ნდობით აღჭურვილი ძირეული კვანძი ვერ მოიძებნა"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"ნდობით აღჭურვილი ძირეული სერტიფიკატების მოძიება ვერ მოხერხდა"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA სერვერისთვის ნდობით აღჭურვილი ძირეული სერტიფიკატი ვერ მოიძებნა"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint კონფიგურაციის დამატება ვერ მოხერხდა"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU პროვაიდერი ვერ მოიძებნა"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"მიმდინარეობს დაკავშირება"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"დაკავშირებულია"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"მიმდინარეობს დაკავშირება OSU სერვერთან"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU სერვერი დადასტურებულია"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"დაკავშირებულია OSU სერვერთან"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"SOAP-შეტყობინებების საწყისი მიმოცვლა"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"გადამისამართების პასუხის მოლოდინში"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"მიღებულია გადამისამართების პასუხი"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"SOAP-შეტყობინებების მეორე მიმოცვლა"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"SOAP-შეტყობინებების მესამე მიმოცვლა"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"მინდინარეობს ნდობით აღჭურვილი ძირეული სერტიფიკატების მოძიება"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"უზრუნველყოფა დასრულებულია"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"მიმდინარეობს <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>-ის გახსნა"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"დაკავშირება ვერ მოხერხდა"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"მიმდინარეობს რეგისტრაციის დასრულება…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"რეგისტრაციის დასრულება ვერ მოხერხდა. შეეხეთ ხელახლა საცდელად."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"რეგისტრაცია დასრულდა. მიმდინარეობს დაკავშირება…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"ძალიან ნელი"</string> <string name="speed_label_slow" msgid="813109590815810235">"ნელი"</string> <string name="speed_label_okay" msgid="2331665440671174858">"კარგი"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"არ დაიძინო"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"დატენვისას ეკრანი არ დაიძინებს"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI snoop ჟურნალის ჩართვა"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth პაკეტების წატაცება. (ამ პარამეტრის შეცვლის შემდეგ ჩართეთ და გამორთეთ Bluetooth)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM განბლოკვა"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"ნება დართოს განბლოკოს ჩამტვირთველმა"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"მისცეს ნება OEM განბლოკვას?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"ქსელი"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"უსადენო ეკრანის სერტიფიცირება"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi-ს დაწვრილებითი აღრიცხვის ჩართვა"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"დაკავშირებული MAC მისამართის შემთხვევითობა"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"მობილური ინტერნეტის ყოველთვის გააქტიურება"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"ტეტერინგის აპარატურული აჩქარება"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth-მოწყობილობების ჩვენება სახელების გარეშე"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"დაკავშირება ვერ მოხერხდა"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"უსადენო ეკრანის სერტიფიცირების ვარიანტების ჩვენება"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi-ს აღრიცხვის დონის გაზრდა, Wi‑Fi ამომრჩეველში ყოველ SSID RSSI-ზე ჩვენება"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"MAC მისამართის შემთხვევითობა ჩაირთოს, როცა Wi‑Fi-ქსელებთან დაკავშირება ხდება"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"ლიმიტირებული"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"არალიმიტირებული"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"ჟურნალიზაციის ბუფერის ზომები"</string> diff --git a/packages/SettingsLib/res/values-kk/arrays.xml b/packages/SettingsLib/res/values-kk/arrays.xml index 0f06e3954a43..af578a94ad0e 100644 --- a/packages/SettingsLib/res/values-kk/arrays.xml +++ b/packages/SettingsLib/res/values-kk/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"HDCP тексерісін DRM мазмұны үшін ғана қолдану"</item> <item msgid="45075631231212732">"Әрқашан HDCP (жоғары кең жолақты сандық мазмұн қорғаушы) тексерулерін қолданыңыз"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Өшірулі"</item> + <item msgid="1969681323976948639">"Сүзгіленгендері қосулы"</item> + <item msgid="8719029132154020716">"Қосулы"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (әдепкі)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml index 58f10ac86301..8d6d76ecd30d 100644 --- a/packages/SettingsLib/res/values-kk/strings.xml +++ b/packages/SettingsLib/res/values-kk/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s арқылы автоматты қосылды"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Желі рейтингі провайдері арқылы автоматты түрде қосылған"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s арқылы қосылған"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> ұсынған <xliff:g id="SSID">%1$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> арқылы жалғанған"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s арқылы қолжетімді"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Реттеу үшін түртіңіз"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Тіркелу үшін түртіңіз."</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Қосылған, интернет жоқ"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Интернетпен байланыс жоқ"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Есептік жазбаға кіру керек"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Кіру нүктесі уақытша бос емес"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s арқылы қосылды"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s арқылы қолжетімді"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Байланыс орнатылмады"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU серверінің URL мекенжайы жарамсыз"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU серверімен байланыс қатесі шықты"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU сервері тексеруден өтпеді"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU серверінің сертификаты жарамсыз"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Дайындық процесі үзілді"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Дайындықты жүзеге асыру мүмкін емес"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU серверінің URL мекенжайы жарамсыз"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Күтпеген пәрмен түрі"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"SOAP хабарының белгісіз түрі"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP хабарын алмасу мүмкін болмады"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Тыңдаушының бағытын ауыстыру мүмкін болмады"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Бағыттың ауыстырылуын күту уақыты бітті"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Ешқандай OSU әрекеті табылмады"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"SOAP хабарының белгісіз күйі"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO табылмады"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA сервері үшін сенімді түбір табылмады"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Жөндеулер сервері үшін сенімді түбір табылмады"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Саясат сервері үшін сенімді түбір табылмады"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Сенімді түбірлік сертификаттар алынбады"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA сервері үшін сенімді түбірлік сертификатты табу мүмкін болмады"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint конфигурациясы енгізілмеді"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU провайдері табылмады"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Жалғануда"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Жалғанды"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU серверіне жалғануда"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU сервері тексерілді"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU серверіне жалғанды"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Бастапқы SOAP алмасуы"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Бағытты ауыстыру туралы жауап күтілуде"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Бағытты ауыстыру туралы жауап алынды"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Екінші SOAP алмасуы"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Үшінші SOAP алмасуы"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Сенімді түбірлік сертификаттар алынуда"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Дайындық аяқталды"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ашылуда"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Жалғанбады"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Тіркелу процесі аяқталуда…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Тіркелу процесі аяқталмады. Әрекетті қайталау үшін түртіңіз."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Тіркелу процесі аяқталды. Жалғануда…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Өте баяу"</string> <string name="speed_label_slow" msgid="813109590815810235">"Баяу"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Жарайды"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Ояу тұру"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Зарядтау кезінде экран ұйықтамайды"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI snoop тіркелімін қосу"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth пакеттерін алу (осы параметрді өзгерткен соң, Bluetooth-ды қосыңыз немесе өшіріңіз)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM бекітпесін ашу"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Жүктеуші бекітпесін ашуға рұқсат ету"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM бекітпесін ашуға рұқсат ету керек пе?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Желі орнату"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Сымсыз дисплей сертификаты"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi егжей-тегжейлі журналы"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Қосылу кезінде MAC мекенжайларын еркін таңдау"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Мобильдік деректер әрқашан қосулы"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Тетерингтің аппараттық жеделдетуі"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth құрылғыларын атаусыз көрсету"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Қосылмады"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Сымсыз дисплей сертификаты опцияларын көрсету"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi тіркеу деңгейін арттыру, Wi‑Fi таңдағанда әр SSID RSSI бойынша көрсету"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi‑Fi желісіне қосылу кезінде MAC мекенжайларын еркін таңдау"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Шектелген"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Шектелмеген"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Журналға тіркеуші буферінің өлшемдері"</string> diff --git a/packages/SettingsLib/res/values-km/arrays.xml b/packages/SettingsLib/res/values-km/arrays.xml index 4867c8fb20d8..88583ad9eebb 100644 --- a/packages/SettingsLib/res/values-km/arrays.xml +++ b/packages/SettingsLib/res/values-km/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"ប្រើការពិនិត្យ HDCP សម្រាប់តែមាតិកា DRM ប៉ុណ្ណោះ"</item> <item msgid="45075631231212732">"ប្រើការពិនិត្យ HDCP ជានិច្ច"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"បានបិទ"</item> + <item msgid="1969681323976948639">"បានបើកការត្រង"</item> + <item msgid="8719029132154020716">"បានបើក"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (លំនាំដើម)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml index 45723ed0b348..990320108698 100644 --- a/packages/SettingsLib/res/values-km/strings.xml +++ b/packages/SettingsLib/res/values-km/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"បានភ្ជាប់ដោយស្វ័យប្រវត្តិតាមរយៈ %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"បានភ្ជាប់ដោយស្វ័យប្រវត្តិតាមរយៈក្រុមហ៊ុនផ្តល់ការវាយតម្លៃលើបណ្តាញ"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"បានភ្ជាប់តាមរយៈ %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> ដោយ <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"ភ្ជាប់តាម <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"មានតាមរយៈ %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"ចុចដើម្បីរៀបចំ"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"ចុចដើម្បីចុះឈ្មោះ"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"បានភ្ជាប់ ប៉ុន្តែគ្មានអ៊ីនធឺណិតទេ"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"គ្មានអ៊ីនធឺណិតទេ"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"តម្រូវឱ្យចូលគណនី"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ចំណុចចូលប្រើពេញជាបណ្តោះអាសន្ន"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"បានភ្ជាប់តាមរយៈ %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"មានតាមរយៈ %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"ការតភ្ជាប់មិនបានសម្រេច"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL ម៉ាស៊ីនមេ OSU មិនត្រឹមត្រូវទេ"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"មិនអាចផ្ទៀងផ្ទាត់ការតភ្ជាប់ម៉ាស៊ីនមេ OSU បានទេ"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"មិនអាចផ្ទៀងផ្ទាត់ម៉ាស៊ីនមេ OSU បានទេ"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"វិញ្ញាបនបត្រម៉ាស៊ីនមេ OSU មិនត្រឹមត្រូវទេ"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"បានបោះបង់ការផ្ដល់ជូន"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"គ្មានការផ្ដល់ជូនទេ"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL ម៉ាស៊ីនមេ OSU មិនត្រឹមត្រូវទេ"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ប្រភេទការបញ្ជាដែលមិនបានរំពឹងទុក"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"ប្រភេទសារ SOAP ដែលមិនបានរំពឺងទុក"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"មិនអាចផ្លាស់ប្ដូរសារ SOAP បានទេ"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"មិនអាចចាប់ផ្ដើមការបញ្ជូនអ្នកស្ដាប់បន្តបានទេ"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"ការរង់ចាំដើម្បីបញ្ជូនបន្តអស់ម៉ោងហើយ"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"រកមិនឃើញសកម្មភាព OSU ទេ"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"ស្ថានភាពសារ SOAP ដែលមិនបានរំពឺងទុក"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"រកមិនឃើញ PPS-MO ទេ"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"រកមិនឃើញថ្នាំងឫសដែលទុកចិត្តសម្រាប់ម៉ាស៊ីនមេ AAA ទេ"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"រកមិនឃើញថ្នាំងឫសដែលទុកចិត្តសម្រាប់ម៉ាស៊ីនមេកែបញ្ហាទេ"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"រកមិនឃើញថ្នាំងឫសដែលទុកចិត្តសម្រាប់ម៉ាស៊ីនមេដែលផ្អែកតាមគោលការណ៍ទេ"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"មិនអាចទាញយកវិញ្ញាបនបត្រគោលដែលទុកចិត្តបានទេ"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"រកមិនឃើញវិញ្ញាបនបត្រគោលដែលទុកចិត្តសម្រាប់ម៉ាស៊ីនមេ AAA ទេ"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"មិនអាចបញ្ចូលការកំណត់រចនាសម្ព័ន្ធ PassPoint បានទេ"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"រកមិនឃើញបណ្ដាញផ្ដល់ OSU ទេ"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"កំពុងភ្ជាប់"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"បានភ្ជាប់"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"កំពុងភ្ជាប់ទៅម៉ាស៊ីនមេ OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"បានផ្ទៀងផ្ទាត់ម៉ាស៊ីនមេ OSU ហើយ"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"បានភ្ជាប់ទៅម៉ាស៊ីនមេ OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"ការផ្លាស់ប្ដូរ SOAP ដំបូង"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"កំពុងរង់ចាំការឆ្លើយតបបន្ត"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"បានទទួលការឆ្លើយតបបន្ត"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"ការផ្លាស់ប្ដូរ SOAP ទីពីរ"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"ការផ្លាស់ប្ដូរ SOAP ទីបី"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"កំពុងទាញយកវិញ្ញាបនបត្រគោលដែលទុកចិត្ត"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"ការផ្ដល់ជូនបានបញ្ចប់"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"កំពុងបើក <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"មិនអាចភ្ជាប់បានទេ"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"កំពុងបញ្ចប់ការចុះឈ្មោះ…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"មិនអាចបញ្ចប់ការចុះឈ្មោះបានទេ។ សូមចុច ដើម្បីព្យាយាមម្ដងទៀត។"</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"ការចុះឈ្មោះបានបញ្ចប់។ កំពុងភ្ជាប់…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"យឺតណាស់"</string> <string name="speed_label_slow" msgid="813109590815810235">"យឺត"</string> <string name="speed_label_okay" msgid="2331665440671174858">"យល់ព្រម"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"ទុកឲ្យបើកចោល"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"អេក្រង់នឹងមិនដេកពេលបញ្ចូលថ្ម"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"បើកកំណត់ហេតុ HCI snoop ប៊្លូធូស"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ចាប់យកកញ្ចប់ប៊្លូធូស។ (បិទ/បើកប៊្លូធូស បន្ទាប់ពីប្ដូរការកំណត់នេះ)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"ការដោះសោ OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"អនុញ្ញាតឲ្យដោះសោកម្មវិធីចាប់ផ្តើមប្រព័ន្ធ"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"អនុញ្ញាតការដោះសោ OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"ការភ្ជាប់បណ្ដាញ"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"សេចក្តីបញ្ជាក់ការបង្ហាញឥតខ្សែ"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"បើកកំណត់ហេតុរៀបរាប់ Wi-Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"ការជ្រើសរើស MAC ដោយចៃដន្យ នៅពេលបានភ្ជាប់"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"ទិន្នន័យទូរសព្ទចល័តដំណើរការជានិច្ច"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"ការបង្កើនល្បឿនផ្នែករឹងសម្រាប់ការភ្ជាប់"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"បង្ហាញឧបករណ៍ប្ល៊ូធូសគ្មានឈ្មោះ"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"មិនអាចភ្ជាប់បានទេ"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"បង្ហាញជម្រើសសម្រាប់សេចក្តីបញ្ជាក់ការបង្ហាញឥតខ្សែ"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"បង្កើនកម្រិតកំណត់ហេតុវ៉ាយហ្វាយបង្ហាញក្នុង SSID RSSI ក្នុងកម្មវិធីជ្រើសវ៉ាយហ្វាយ"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"ជ្រើសរើសអាសយដ្ឋាន MAC ដោយចៃដន្យ នៅពេលភ្ជាប់បណ្តាញ Wi‑Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"មានការកំណត់"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"មិនមានការកំណត់"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"ទំហំ buffer របស់ Logger"</string> diff --git a/packages/SettingsLib/res/values-kn/arrays.xml b/packages/SettingsLib/res/values-kn/arrays.xml index 4ac8d56ff2b0..96e5fc341e89 100644 --- a/packages/SettingsLib/res/values-kn/arrays.xml +++ b/packages/SettingsLib/res/values-kn/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"DRM ವಿಷಯಗಳಿಗೆ ಮಾತ್ರ HDCP ಪರೀಕ್ಷಿಸುವಿಕೆಯನ್ನು ಬಳಸು"</item> <item msgid="45075631231212732">"HDCP ಪರಿಶೀಲನೆಯನ್ನು ಯಾವಾಗಲೂ ಬಳಸು"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"ನಿಷ್ಕ್ರಿಯಗೊಂಡಿದೆ"</item> + <item msgid="1969681323976948639">"ಫಿಲ್ಟರ್ ಮಾಡುವುದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</item> + <item msgid="8719029132154020716">"ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (ಡಿಫಾಲ್ಟ್)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml index bb889e93a3a8..888b93fb17ad 100644 --- a/packages/SettingsLib/res/values-kn/strings.xml +++ b/packages/SettingsLib/res/values-kn/strings.xml @@ -38,50 +38,27 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s ಮೂಲಕ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ನೆಟ್ವರ್ಕ್ ರೇಟಿಂಗ್ ಒದಗಿಸುವವರ ಮೂಲಕ ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ಮೂಲಕ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> ಮೂಲಕ <xliff:g id="SSID">%1$s</xliff:g>"</string> + <!-- no translation found for connected_via_app (5571999941988929520) --> + <skip /> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s ಮೂಲಕ ಲಭ್ಯವಿದೆ"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"ಸೆಟಪ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ"</string> + <!-- no translation found for tap_to_sign_up (6449724763052579434) --> + <skip /> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ, ಇಂಟರ್ನೆಟ್ ಇಲ್ಲ"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"ಇಂಟರ್ನೆಟ್ ಇಲ್ಲ"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"ಸೈನ್ ಇನ್ ಮಾಡುವ ಅಗತ್ಯವಿದೆ"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ಪ್ರವೇಶ ಕೇಂದ್ರ ತಾತ್ಕಾಲಿಕವಾಗಿ ಭರ್ತಿಯಾಗಿದೆ"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s ಮೂಲಕ ಸಂಪರ್ಕಗೊಂಡಿದೆ"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s ಮೂಲಕ ಲಭ್ಯವಿದೆ"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"ಸಂಪರ್ಕ ವಿಫಲವಾಗಿದೆ"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"ಅಮಾನ್ಯ OSU ಸರ್ವರ್ URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU ಸರ್ವರ್ ಸಂಪರ್ಕ ವಿಫಲಗೊಂಡಿದೆ"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU ಸರ್ವರ್ ಮೌಲ್ಯಮಾಪನ ವಿಫಲವಾಗಿದೆ"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"ಅಮಾನ್ಯ OSU ಸರ್ವರ್ ಪ್ರಮಾಣಪತ್ರ"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"ಪೂರೈಕೆಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗಿದೆ"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"ಪೂರೈಕೆ ಲಭ್ಯವಿಲ್ಲ"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"ಅಮಾನ್ಯ OSU ಸರ್ವರ್ URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ಅನಿರೀಕ್ಷಿತ ಕಮಾಂಡ್ ಪ್ರಕಾರ"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"ಅನಿರೀಕ್ಷಿತ SOAP ಸಂದೇಶ ಪ್ರಕಾರ"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP ಸಂದೇಶ ವಿನಿಮಿಯ ವಿಫಲವಾಗಿದೆ"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"ಮರುನಿರ್ದೇಶನ ಆಲಿಸುವವರು ಪ್ರಾರಂಭಿಸುವಲ್ಲ ವಿಫಲರಾಗಿದ್ದಾರೆ"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"ಮರುನಿರ್ದೇಶನಕ್ಕಾಗಿ ನಿರೀಕ್ಷಿಸುತ್ತಿರುವ ಅವಧಿ ಮೀರಿದೆ"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU ಚಟುವಟಿಕೆ ಕಂಡುಬಂದಿಲ್ಲ"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"ಅನಿರೀಕ್ಷಿತ SOAP ಸಂದೇಶ ಸ್ಥಿತಿ"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO ಹುಡುಕಲು ವಿಫಲವಾಗಿದೆ"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA ಸರ್ವರ್ಗಾಗಿ ವಿಶ್ವಾಸಾರ್ಹ ರೂಟ್ ನೋಡ್ ಹುಡುಕಲು ವಿಫಲವಾಗಿದೆ"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"ಪರಿಹಾರ ಸರ್ವರ್ಗಾಗಿ ವಿಶ್ವಾಸಾರ್ಹ ರೂಟ್ ನೋಡ್ ಅನ್ನು ಹುಡುಕಲು ವಿಫಲವಾಗಿದೆ"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"ಕಾರ್ಯನೀತಿ ಸರ್ವರ್ಗಾಗಿ ವಿಶ್ವಾಸಾರ್ಹ ರೂಟ್ ನೋಡ್ ಅನ್ನು ಹುಡುಕಲು ವಿಫಲವಾಗಿದೆ"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"ವಿಶ್ವಾಸಾರ್ಹ ರೂಟ್ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಹಿಂಪಡೆಯಲು ವಿಫಲವಾಗಿದೆ"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA ಸರ್ವರ್ಗಾಗಿ ವಿಶ್ವಾಸಾರ್ಹ ರೂಟ್ ಪ್ರಮಾಣಪತ್ರವನ್ನು ಹುಡುಕಲು ವಿಫಲವಾಗಿದೆ"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint ಕಾನ್ಫಿಗರೇಶನ್ ಅನ್ನು ಸೇರಿಸಲು ವಿಫಲವಾಗಿದೆ"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU ಒದಗಿಸುವವರನ್ನು ಹುಡುಕಲು ವಿಫಲವಾಗಿದೆ"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU ಸರ್ವರ್ಗೆ ಸಂಪರ್ಕಿಸಲಾಗುತ್ತಿದೆ"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU ಸರ್ವರ್ ಮೌಲ್ಯಮಾಪನ ಮಾಡಲಾಗಿದೆ"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU ಸರ್ವರ್ಗೆ ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"ಆರಂಭಿಕ SOAP ವಿನಿಮಯ"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"ಮರುನಿರ್ದೇಶನ ಪ್ರತಿಕ್ರಿಯೆಗಾಗಿ ನಿರೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"ಮರುನಿರ್ದೇಶನ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಸ್ವೀಕರಿಸಲಾಗಿದೆ"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"ಎರಡನೇ SOAP ವಿನಿಮಯ"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"ಮೂರನೇ SOAP ವಿನಿಮಯ"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"ವಿಶ್ವಾಸಾರ್ಹ ರೂಟ್ ಪ್ರಮಾಣಪತ್ರಗಳನ್ನು ಮರುಪಡೆಯಲಾಗುತ್ತಿದೆ"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"ಪೂರೈಸುವಿಕೆ ಪೂರ್ಣಗೊಂಡಿದೆ"</string> + <!-- no translation found for osu_opening_provider (5488997661548640424) --> + <skip /> + <!-- no translation found for osu_connect_failed (2187750899158158934) --> + <skip /> + <!-- no translation found for osu_completing_sign_up (9037638564719197082) --> + <skip /> + <!-- no translation found for osu_sign_up_failed (7296159750352873260) --> + <skip /> + <!-- no translation found for osu_sign_up_complete (8207626049093289203) --> + <skip /> <string name="speed_label_very_slow" msgid="1867055264243608530">"ತುಂಬಾ ನಿಧಾನವಾಗಿದೆ"</string> <string name="speed_label_slow" msgid="813109590815810235">"ನಿಧಾನ"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ಸರಿ"</string> @@ -234,8 +211,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"ಎಚ್ಚರವಾಗಿರು"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"ಚಾರ್ಜ್ ಮಾಡುವಾಗ ಪರದೆಯು ಎಂದಿಗೂ ನಿದ್ರಾವಸ್ಥೆಗೆ ಹೋಗುವುದಿಲ್ಲ"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ಬ್ಲೂಟೂತ್ HCI ಸ್ನೂಪ್ ಲಾಗ್ ಸಕ್ರಿಯಗೊಳಿಸಿ"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ಬ್ಲೂಟೂತ್ ಪ್ಯಾಕೆಟ್ಗಳನ್ನು ಕ್ಯಾಪ್ಚರ್ ಮಾಡಿ. (ಈ ಸೆಟ್ಟಿಂಗ್ ಅನ್ನು ಬದಲಾಯಿಸಿದ ನಂತರ ಬ್ಲೂಟೂತ್ ಟಾಗಲ್ ಮಾಡಿ)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM ಅನ್ಲಾಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"ಬೂಟ್ಲೋಡರ್ ಅನ್ಲಾಕ್ ಮಾಡಲು ಅನುಮತಿಸಿ"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM ಅನ್ಲಾಕ್ ಮಾಡುವಿಕೆಯನ್ನು ಅನುಮತಿಸುವುದೇ?"</string> @@ -246,7 +222,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"ನೆಟ್ವರ್ಕಿಂಗ್"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"ವೈರ್ಲೆಸ್ ಪ್ರದರ್ಶನ ಪ್ರಮಾಣೀಕರಣ"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi ವೆರ್ಬೋಸ್ ಲಾಗಿಂಗ್ ಸಕ್ರಿಯಗೊಳಿಸಿ"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"MAC ಯಾದೃಚ್ಛಿಕರಣವನ್ನು ಸಂಪರ್ಕಿಸಲಾಗಿದೆ"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"ಮೊಬೈಲ್ ಡೇಟಾ ಯಾವಾಗಲೂ ಸಕ್ರಿಯ"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"ಹಾರ್ಡ್ವೇರ್ನ ವೇಗವರ್ಧನೆಯನ್ನು ಟೆಥರಿಂಗ್ ಮಾಡಿ"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"ಹೆಸರುಗಳಿಲ್ಲದ ಬ್ಲೂಟೂತ್ ಸಾಧನಗಳನ್ನು ತೋರಿಸಿ"</string> @@ -273,7 +248,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"ವೈರ್ಲೆಸ್ ಪ್ರದರ್ಶನ ಪ್ರಮಾಣೀಕರಣಕ್ಕಾಗಿ ಆಯ್ಕೆಗಳನ್ನು ತೋರಿಸು"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi ಲಾಗಿಂಗ್ ಮಟ್ಟನ್ನು ಹೆಚ್ಚಿಸಿ, Wi‑Fi ಆಯ್ಕೆಯಲ್ಲಿ ಪ್ರತಿಯೊಂದು SSID RSSI ತೋರಿಸಿ"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"ವೈ-ಫೈ ನೆಟ್ವರ್ಕ್ಗಳು ಸಂಪರ್ಕಿಸುವಾಗ MAC ವಿಳಾಸವನ್ನು ಯಾದೃಚ್ಛಿಕಗೊಳಿಸಿ"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"ಮೀಟರ್ ಮಾಡಲಾಗಿದೆ"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"ಮೀಟರ್ ಮಾಡಲಾಗಿಲ್ಲ"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"ಲಾಗರ್ ಬಫರ್ ಗಾತ್ರಗಳು"</string> diff --git a/packages/SettingsLib/res/values-ko/arrays.xml b/packages/SettingsLib/res/values-ko/arrays.xml index 7330843294bd..e2d8e0245d93 100644 --- a/packages/SettingsLib/res/values-ko/arrays.xml +++ b/packages/SettingsLib/res/values-ko/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"DRM 콘텐츠에 대해서만 HDCP 확인 사용"</item> <item msgid="45075631231212732">"항상 HDCP 확인 사용"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"사용 중지됨"</item> + <item msgid="1969681323976948639">"필터링 사용 설정됨"</item> + <item msgid="8719029132154020716">"사용 설정됨"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4(기본)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml index f6409d91ddcd..d7e9488cea42 100644 --- a/packages/SettingsLib/res/values-ko/strings.xml +++ b/packages/SettingsLib/res/values-ko/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s을(를) 통해 자동으로 연결됨"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"네트워크 평가 제공업체를 통해 자동으로 연결됨"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s을(를) 통해 연결됨"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>의 <xliff:g id="SSID">%1$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g>을(를) 통해 연결됨"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s을(를) 통해 사용 가능"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"설정하려면 탭하세요."</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"탭하여 가입"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"연결됨, 인터넷 사용 불가"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"인터넷 연결 없음"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"로그인 필요"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"액세스 포인트가 일시적으로 가득 참"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s을(를) 통해 연결됨"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s을(를) 통해 사용 가능"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"연결에 실패했습니다."</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"잘못된 OSU 서버 URL입니다."</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU 서버 연결에 실패했습니다."</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU 서버 인증에 실패했습니다."</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"잘못된 OSU 서버 인증서입니다."</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"프로비저닝이 취소되었습니다."</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"프로비저닝을 사용할 수 없습니다."</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"잘못된 OSU 서버 URL입니다."</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"예상치 못한 명령어 유형입니다."</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"예상치 못한 SOAP 메시지 유형입니다."</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP 메시지 교환에 실패했습니다."</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"리스너 리디렉션을 시작하지 못했습니다."</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"리디렉션을 기다리는 중에 타임아웃되었습니다."</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU 활동이 없습니다."</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"예상치 못한 SOAP 메시지 상태입니다."</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO를 찾지 못했습니다."</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA 서버의 공인 루트 노드를 찾지 못했습니다."</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"복구 서버의 공인 루트 노드를 찾지 못했습니다."</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"정책 서버의 공인 루트 노드를 찾지 못했습니다."</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"공인 루트 인증서를 가져오지 못했습니다."</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA 서버의 공인 루트 인증서를 찾지 못했습니다."</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint 설정을 추가하지 못했습니다."</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU 제공업체를 찾지 못했습니다."</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"연결 중입니다."</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"연결되었습니다."</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU 서버에 연결하는 중입니다."</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU 서버가 인증되었습니다."</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU 서버에 연결되었습니다."</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"첫 SOAP 교환"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"리디렉션 응답을 기다리는 중입니다."</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"리디렉션 응답이 수신되었습니다."</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"2번째 SOAP 교환"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"3번째 SOAP 교환"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"공인 루트 인증서를 가져오는 중입니다."</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"프로비저닝이 완료되었습니다."</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> 여는 중"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"연결할 수 없음"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"가입 완료 중…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"가입을 완료할 수 없습니다. 다시 시도하려면 탭하세요."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"가입이 완료되었습니다. 연결 중…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"매우 느림"</string> <string name="speed_label_slow" msgid="813109590815810235">"느림"</string> <string name="speed_label_okay" msgid="2331665440671174858">"보통"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"화면 켜짐 상태 유지"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"충전하는 동안 화면이 꺼지지 않음"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"블루투스 HCI 스누프 로그 사용"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"블루투스 패킷을 캡처합니다. (설정 변경 후 블루투스 전환)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM 잠금 해제"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"부트로더 잠금 해제 허용"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM 잠금 해제를 허용하시겠습니까?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"네트워크"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"무선 디스플레이 인증서"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi-Fi 상세 로깅 사용"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"연결된 MAC 임의 선택"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"항상 모바일 데이터 활성화"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"테더링 하드웨어 가속"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"이름이 없는 블루투스 기기 표시"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"연결할 수 없음"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"무선 디스플레이 인증서 옵션 표시"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi 로깅 수준을 높이고, Wi‑Fi 선택도구에서 SSID RSSI당 값을 표시"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi‑Fi 네트워크에 연결할 때 MAC 주소 임의 선택"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"종량제"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"무제한"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"로거 버퍼 크기"</string> diff --git a/packages/SettingsLib/res/values-ky/arrays.xml b/packages/SettingsLib/res/values-ky/arrays.xml index da0248dc4df1..14eb1103f9f5 100644 --- a/packages/SettingsLib/res/values-ky/arrays.xml +++ b/packages/SettingsLib/res/values-ky/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"HDCP текшерүү DRM мазмунуна гана колдонулат"</item> <item msgid="45075631231212732">"Ар дайым HDCP текшерүү колдонулсун"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Өчүк"</item> + <item msgid="1969681323976948639">"Чыпкалар иштетилди"</item> + <item msgid="8719029132154020716">"Иштетилди"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (Демейки)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml index c30f96c78a40..6898c61e5b85 100644 --- a/packages/SettingsLib/res/values-ky/strings.xml +++ b/packages/SettingsLib/res/values-ky/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s аркылуу автоматтык түрдө туташты"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Тармактар рейтингинин автору аркылуу автоматтык түрдө туташты"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s аркылуу жеткиликтүү"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g>, <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> аркылуу туташтырылган"</string> + <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> аркылуу туташты"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s аркылуу жеткиликтүү"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Жөндөө үчүн таптаңыз"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Катталуу үчүн таптап коюңуз"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Туташып турат, Интернет жок"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Интернет жок"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Аккаунтка кирүү талап кылынат"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Байланыш түйүнүнө өтө көп түзмөк туташып турат"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s аркылуу туташты"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s аркылуу иштейт"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Туташпай койду"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU серверинин URL\'и жараксыз"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU серверине туташкан жок"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU сервери текшерилген жок"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU серверинин тастыктамасы жараксыз"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Камсыздоо жоюлду"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Камсыздоо жеткиликтүү эмес"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU серверинин URL\'и жараксыз"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Күтүлбөгөн буйрук түрү"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Күтүлбөгөн SOAP билдирүү түрү"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP билдирүүсү алмаштырылган жок"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Багыттоо тыңшагычы башталган жок"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Багыттоону күтүү мөөнөтү аяктады"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU аракети табылган жок"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Күтүлбөгөн SOAP билдирүү абалы"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO табылган жок"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA сервери үчүн ишеним негизги түйүнү табылган жок"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Оңдоо сервери үчүн ишеним негизги түйүнү табылган жок"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Саясат сервери үчүн ишеним негизги түйүнү табылган жок"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Ишеним негизги тастыктамалары алынган жок"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA сервери үчүн ишеним негизги тастыктамасы табылган жок"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint конфигурациясы кошулган жок"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU камсыздоочусу табылган жок"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Туташууда"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Туташты"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU серверине туташууда"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU сервери текшерилди"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU серверине туташты"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Баштапкы SOAP алмаштыруу"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Багыттоо жообу күтүлүүдө"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Багыттоо жообу кабыл алынды"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Экинчи SOAP алмаштыруу"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Үчүнчү SOAP алмаштыруу"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Ишеним негизги тастыктамалары алынууда"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Камсыздоо аягына чыкты"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ачылууда"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Туташпай койду"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Катталуу аяктоодо…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Катталуу аягына чыккан жок. Кайра аракет кылуу үчүн таптап коюңуз."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Катталуу аягына чыкты. Туташууда…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Өтө жай"</string> <string name="speed_label_slow" msgid="813109590815810235">"Жай"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Жарайт"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Ойгоо туруу"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Түзмөк кубатталып жатканда экран өчпөйт"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI журналын иштетүү"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth таңгактарын алуу. (Бул жөндөөнү өзгөрткөндөн кийин Bluetooth\'ду өчүрүп / күйгүзүңүз)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM бөгөттөн чыгаруу"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Кайра жүктөгүчтү бөгөттөн чыгарууга уруксат берүү"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM бөгөттөн чыгарууга уруксатпы?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Тармактар"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Зымсыз мониторлорду тастыктамалоо"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi дайын-даректүү журналы"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Wi-Fi аркылуу туташканда башаламан MAC даректерди түзүү"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Мобилдик Интернет иштей берет"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Модем режиминде аппараттын иштешин тездетүү"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Аталышсыз Bluetooth түзмөктөрү көрсөтүлсүн"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Туташпай койду"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Зымсыз мониторлорду тастыктамалоо параметрлери көрүнүп турат"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fi тандалганда ар бир SSID үчүн RSSI көрүнүп турат"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi‑Fi тармактарын туташканда MAC даректери башаламан түзүлүп турат"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Трафик ченелет"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Чектелбеген тармак"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Журнал буферинин өлчөмү"</string> diff --git a/packages/SettingsLib/res/values-lo/arrays.xml b/packages/SettingsLib/res/values-lo/arrays.xml index 7f564949407f..d41aa6d1081f 100644 --- a/packages/SettingsLib/res/values-lo/arrays.xml +++ b/packages/SettingsLib/res/values-lo/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"ໃຊ້ການກວດສອບ HDCP ສຳລັບເນື້ອຫາ DRM ເທົ່ານັ້ນ"</item> <item msgid="45075631231212732">"ໃຊ້ການກວດສອບ HDCP ສະເໝີ"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"ປິດການນຳໃຊ້ແລ້ວ"</item> + <item msgid="1969681323976948639">"ເປີດການກັ່ນຕອງແລ້ວ"</item> + <item msgid="8719029132154020716">"ເປີດໃຊ້ແລ້ວ"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml index edb6b12b9af1..acbaf701ace2 100644 --- a/packages/SettingsLib/res/values-lo/strings.xml +++ b/packages/SettingsLib/res/values-lo/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"ເຊື່ອມຕໍ່ຜ່ານທາງ %1$s ໂດຍອັດຕະໂນມັດ"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ເຊື່ອມຕໍ່ກັບອັດຕະໂນມັດແລ້ວຜ່ານຜູ້ໃຫ້ບໍລິການຄະແນນເຄືອຂ່າຍ"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"ເຊື່ອມຕໍ່ຜ່ານ %1$s ແລ້ວ"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> ໂດຍ <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"ເຊື່ອມຕໍ່ຜ່ານ <xliff:g id="NAME">%1$s</xliff:g> ແລ້ວ"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"ມີໃຫ້ຜ່ານ %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"ແຕະເພື່ອຕັ້ງຄ່າ"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"ແຕະເພື່ອສະໝັກ"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"ເຊື່ອມຕໍ່ແລ້ວ, ບໍ່ມີອິນເຕີເນັດ"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"ບໍ່ມີອິນເຕີເນັດ"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"ຈຳເປັນຕ້ອງເຂົ້າສູ່ລະບົບ"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ຈຸດການເຂົ້າເຖິງເຕັມຊົ່ວຄາວ"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"ເຊື່ອມຕໍ່ຜ່ານ %1$s ແລ້ວ"</string> <string name="available_via_carrier" msgid="1469036129740799053">"ໃຊ້ໄດ້ຜ່ານ %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"ການເຊື່ອມຕໍ່ບໍ່ສຳເລັດ"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL ເຊີບເວີ OSU ບໍ່ຖືກຕ້ອງ"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"ການເຊື່ອມຕໍ່ເຊີບເວີ OSU ບໍ່ສຳເລັດ"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"ການກວດສອບເຊີບເວີ OSU ບໍ່ສຳເລັດ"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"ໃບຮັບຮອງເຊີບເວີ OSU ບໍ່ຖືກຕ້ອງ"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"ຍົກເລີກການຈັດຫາແລ້ວ"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"ບໍ່ສາມາດໃຊ້ການຈັດຫາໄດ້"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL ເຊີບເວີ OSU ບໍ່ຖືກຕ້ອງ"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ປະເພດຄຳສັ່ງທີ່ບໍ່ຄາດຄິດ"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"ປະເພດຂໍ້ຄວາມ SOAP ທີ່ບໍ່ຄາດຄິດ"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"ການແລກປ່ຽນຂໍ້ຄວາມ SOAP ບໍ່ສຳເລັດ"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"ເລີ່ມການປ່ຽນເສັ້ນທາງຕົວຟັງບໍ່ສຳເລັດ"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"ໝົດເວລາລໍຖ້າການປ່ຽນເສັ້ນທາງແລ້ວ"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"ບໍ່ພົບການເຄື່ອນໄຫວ OSU"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"ສະຖານະຂໍ້ຄວາມ SOAP ທີ່ບໍ່ຄາດຄິດ"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"ຊອກຫາ PPS-MO ບໍ່ສຳເລັດ"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"ຊອກຫາ root node ທີ່ເຊື່ອຖືໄດ້ສຳລັບເຊີບເວີ AAA ບໍ່ສຳເລັດ"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"ຊອກຫາ root node ທີ່ເຊື່ອຖືໄດ້ສຳລັບເຊີບເວີການແກ້ໄຂບໍ່ສຳເລັດ"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"ຊອກຫາ root node ທີ່ເຊື່ອຖືໄດ້ສຳລັບເຊີບເວີນະໂຍບາຍບໍ່ສຳເລັດ"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"ໂຫຼດໃບຮັບຮອງ root ທີ່ເຊື່ອຖືໄດ້ບໍ່ສຳເລັດ"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"ຊອກຫາໃບຮັບຮອງ root ທີ່ເຊື່ອຖືໄດ້ສຳລັບເຊີບເວີ AAA ບໍ່ສຳເລັດ"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"ເພີ່ມການຕັ້ງຄ່າ PassPoint ບໍ່ສຳເລັດ"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"ຊອກຫາຜູ້ໃຫ້ບໍລິການ OSU ບໍ່ສຳເລັດ"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"ກຳລັງເຊື່ອມຕໍ່"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"ເຊື່ອມຕໍ່ແລ້ວ"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"ກຳລັງເຊື່ອມຕໍ່ຫາເຊີບເວີ OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"ກວດສອບເຊີບເວີ OSU ແລ້ວ"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"ເຊື່ອມຕໍ່ຫາເຊີບເວີ OSU ແລ້ວ"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"ການແລກປ່ຽນ SOAP ເບື້ອງຕົ້ນ"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"ກຳລັງລໍຖ້າການຕອບກັບປ່ຽນເສັ້ນທາງ"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"ໄດັຮັບການຕອບກັບປ່ຽນເສັ້ນທາງແລ້ວ"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"ການແລກປ່ຽນ SOAP ທີສອງ"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"ການແລກປ່ຽນ SOAP ທີສາມ"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"ກຳລັງໂຫຼດໃບຮັບຮອງ root ທີ່ເຊື່ອຖືໄດ້"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"ການຈັດຫາສຳເລັດແລ້ວ"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"ກຳລັງເປີດ <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"ບໍ່ສາມາດເຊື່ອມຕໍ່ໄດ້"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"ກຳລັງສຳເລັດການສະໝັກ…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"ບໍ່ສາມາດສຳເລັດການສະໝັກໄດ້. ແຕະເພື່ອລອງໃໝ່."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"ສະໝັກສຳເລັດແລ້ວ. ກຳລັງເຊື່ອມຕໍ່…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"ຊ້າຫຼາຍ"</string> <string name="speed_label_slow" msgid="813109590815810235">"ຊ້າ"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ຕົກລົງ"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"ເປີດໜ້າຈໍຕະຫຼອດ"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"ໜ້າຈໍຈະບໍ່ປິດໃນຂະນະທີ່ສາກໄຟຢູ່"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ບັນທຶກການເຮັດວຽກຂອງ Bluetooth HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ບັນທຶກແພັກເກັດ Bluetooth. (ເປີດ/ປິດ Bluetooth ຫຼັງຈາກປ່ຽນການຕັ້ງຄ່ານີ້)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"ການປົດລັອກ OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"ອະນຸຍາດໃຫ້ປົດລັອກບູດໂຫຼດເດີ"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"ອະນຸຍາດການປົກລັອກ OEM ບໍ?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"ການສ້າງເຄືອຂ່າຍ"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"ສະແດງການຮັບຮອງຂອງລະບົບໄຮ້ສາຍ"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"ເປີດນຳໃຊ້ການເກັບປະຫວັດ Verbose Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"ເຊື່ອມຕໍ່ການສຸ່ມ MAC ແລ້ວ"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"ເປີດໃຊ້ອິນເຕີເນັດມືຖືຕະຫຼອດເວລາ"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"ເປີດໃຊ້ການເລັ່ງຄວາມໄວດ້ວຍຮາດແວ"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"ສະແດງອຸປະກອນ Bluetooth ທີ່ບໍ່ມີຊື່"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"ບໍ່ສາມາດເຊື່ອມຕໍ່ໄດ້"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"ສະແດງໂຕເລືອກສຳລັບການສະແດງການຮັບຮອງລະບົບໄຮ້ສາຍ"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"ເພີ່ມລະດັບການເກັບປະຫວັດ Wi‑Fi, ສະແດງຕໍ່ SSID RSSI ໃນ Wi‑Fi Picker"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"ສຸ່ມທີ່ຢູ່ MAC ເມື່ອເຊື່ອມຕໍ່ຫາເຄືອຂ່າຍ Wi‑Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"ມີການວັດແທກ"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"ບໍ່ໄດ້ວັດແທກ"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"ຂະໜາດບັບເຟີຕົວບັນທຶກ"</string> diff --git a/packages/SettingsLib/res/values-lt/arrays.xml b/packages/SettingsLib/res/values-lt/arrays.xml index b78988a44f75..af9df3e95baa 100644 --- a/packages/SettingsLib/res/values-lt/arrays.xml +++ b/packages/SettingsLib/res/values-lt/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Taikyti HDCP tikrinimą tik DRM turiniui"</item> <item msgid="45075631231212732">"Visada naudoti HDCP tikrinimą"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Išjungta"</item> + <item msgid="1969681323976948639">"Įgalinta filtruota"</item> + <item msgid="8719029132154020716">"Įgalinta"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (numatytoji)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml index 09384637c3f6..89334517aa7d 100644 --- a/packages/SettingsLib/res/values-lt/strings.xml +++ b/packages/SettingsLib/res/values-lt/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatiškai prisijungta naudojant „%1$s“"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatiškai prisijungta naudojant tinklo įvertinimo paslaugos teikėjo paslaugomis"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Prisijungta naudojant „%1$s“"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g>, <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Prisijungta naudojant programą „<xliff:g id="NAME">%1$s</xliff:g>“"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Pasiekiama naudojant „%1$s“"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Palieskite, kad nustatytumėte"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Palieskite, kad prisiregistruotumėte"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Prisijungta, nėra interneto"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Nėra interneto ryšio"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Reikia prisijungti"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Prieigos taškas laikinai visiškai užimtas"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Prisijungta naudojant „%1$s“"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Pasiekiama naudojant „%1$s“"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Nepavyko užmegzti ryšio"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Netinkamas OSU serverio URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Nepavyko užmegzti OSU serverio ryšio"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Nepavyko patvirtinti OSU serverio"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Netinkamas OSU serverio sertifikatas"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Aprūpinimas nutrauktas"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Negalima aprūpinti"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Netinkamas OSU serverio URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Nenumatytas komandos tipas"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Nenumatytas SOAP pranešimo tipas"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Nepavyko atlikti SOAP pranešimo mainų operacijos"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Nepavyko paleisti peradresavimo apdorojimo priemonės"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Laukiant peradresavimo baigėsi skirtasis laikas"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nerasta OSU veiklos duomenų"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Nenumatyta SOAP pranešimo būsena"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Nepavyko rasti PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Nepavyko rasti patikimo AAA serverio šakninio mazgo"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Nepavyko rasti patikimo problemų sprendimo serverio šakninio mazgo"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Nepavyko rasti patikimo politikos serverio šakninio mazgo"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Nepavyko gauti patikimų šakninių sertifikatų"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Nepavyko rasti patikimo AAA serverio šakninio sertifikato"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Nepavyko pridėti „PassPoint“ konfigūracijos"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Nepavyko rasti OSU teikėjo"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Sujungiama"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Sujungta"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Prisijungiama prie OSU serverio"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU serveris patvirtintas"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Prisijungta prie OSU serverio"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Pradinė SOAP mainų operacija"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Laukiama tiesioginio atsakymo"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Gautas tiesioginis atsakymas"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Antroji SOAP mainų operacija"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Trečioji SOAP mainų operacija"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Gaunami patikimi šakniniai sertifikatai"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Aprūpinta"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Atidaroma: „<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>“"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Nepavyko prisijungti"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Baigiamas prisiregistravimas…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Nepavyko užbaigti prisiregistravimo. Jei norite bandyti dar kartą, palieskite."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Prisiregistravimas baigtas. Prijungiama…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Labai lėtas"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lėtas"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Gerai"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Veikti"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Kraunant ekranas niekada neveiks miego režimu"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Įgalinti „Bluetooth“ HCI šnipinėjimo žurnalą"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Fiksuoti „Bluetooth“ paketus. (Perjungti „Bluetooth“ pakeitus šį nustatymą)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OĮG atrakinimas"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Leisti atrakinti oper. sistemos paleidimo progr."</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Leisti OĮG atrakinimą?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Tinklai"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Belaidžio rodymo sertifikavimas"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Įgal. „Wi‑Fi“ daugiaž. įraš. į žurnalą"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Atsitiktinis MAC adreso parinkimas prisijungiant"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobiliojo ryšio duomenys visada suaktyvinti"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Įrenginio kaip modemo naudojimo aparatinės įrangos spartinimas"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Rodyti „Bluetooth“ įrenginius be pavadinimų"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Prisijungti nepavyko"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Rodyti belaidžio rodymo sertifikavimo parinktis"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Padidinti „Wi‑Fi“ įrašymo į žurnalą lygį, rodyti SSID RSSI „Wi-Fi“ rinkiklyje"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Atsitiktinai parinkti MAC adresą prisijungiant prie „Wi‑Fi“ tinklų"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Matuojamas"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Neišmatuotas"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Registruotuvo buferio dydžiai"</string> diff --git a/packages/SettingsLib/res/values-lv/arrays.xml b/packages/SettingsLib/res/values-lv/arrays.xml index 3812c2005293..cadb764387d4 100644 --- a/packages/SettingsLib/res/values-lv/arrays.xml +++ b/packages/SettingsLib/res/values-lv/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Izmantot HDCP pārbaudi tikai DRM saturam"</item> <item msgid="45075631231212732">"Vienmēr izmantot HDCP pārbaudi"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Atspējots"</item> + <item msgid="1969681323976948639">"Iespējot filtrētos"</item> + <item msgid="8719029132154020716">"Iespējots"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (noklusējuma)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml index 84d42c2c394b..ac41ae082c1e 100644 --- a/packages/SettingsLib/res/values-lv/strings.xml +++ b/packages/SettingsLib/res/values-lv/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automātiski savienots, izmantojot %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automātiski izveidots savienojums, izmantojot tīkla vērtējuma sniedzēju"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Savienots, izmantojot %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> — <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Savienojums ar <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Pieejams, izmantojot %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Pieskarieties, lai iestatītu"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Pieskarieties, lai reģistrētos"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Savienojums izveidots, nav piekļuves internetam"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Nav piekļuves internetam"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Nepieciešama pierakstīšanās"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Piekļuves punkts īslaicīgi ir pilns"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Savienojums izveidots, izmantojot %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Pieejams, izmantojot %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Neizdevās izveidot savienojumu"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Nederīgs OSU servera URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Neizdevās izveidot savienojumu ar OSU serveri"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Neizdevās apstiprināt OSU serveri"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Nederīgs OSU servera sertifikāts"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Nodrošinājums priekšlaikus pārtraukts"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Nodrošinājums nav pieejams"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Nederīgs OSU servera URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Neparedzēts komandas veids"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Neparedzēts SOAP ziņojuma veids"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP ziņojumu apmaiņa neizdevās"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Neizdevās palaist novirzīšanas uztvērēju"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Gaidot novirzīšanu, iestājās noildze"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Netika konstatēta OSU aktivitāte"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Neparedzēts SOAP ziņojuma statuss"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Neizdevās atrast PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Neizdevās atrast uzticamu saknes mezglu AAA serverim"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Neizdevās atrast uzticamu saknes mezglu koriģēšanas serverim"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Neizdevās atrast uzticamu saknes mezglu noteikumu serverim"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Neizdevās izgūt uzticamus saknes sertifikātus"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Neizdevās atrast uzticamu saknes sertifikātu AAA serverim"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Neizdevās pievienot PassPoint konfigurāciju"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Neizdevās atrast OSU nodrošinātāju"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Notiek savienojuma izveide"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Savienojums izveidots"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Notiek savienojuma izveide ar OSU serveri"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU serveris apstiprināts"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Izveidots savienojums ar OSU serveri"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Sākotnējā SOAP apmaiņa"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Tiek gaidīta novirzīšanas atbilde"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Saņemta novirzīšanas atbilde"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Otrā SOAP apmaiņa"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Trešā SOAP apmaiņa"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Notiek uzticamu saknes sertifikātu izgūšana"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Nodrošinājums pabeigts"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Notiek lietotnes <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> atvēršana."</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Nevarēja izveidot savienojumu"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Notiek reģistrācijas pabeigšana…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Nevarēja pabeigt reģistrāciju. Pieskarieties, lai mēģinātu vēlreiz."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Reģistrācija ir pabeigta. Notiek savienojuma izveide…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Ļoti lēns"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lēns"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Labi"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Atstāt nomodā"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Uzlādes laikā ekrāns nekad nepārslēgsies miega režīmā"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Iespējot Bluetooth HCI analizētāja žurnālu"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Tvert Bluetooth paketes. (Pārslēgt Bluetooth pēc šī iestatījuma mainīšanas.)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM atbloķēšana"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Atļaut palaišanas ielādētāja atbloķēšanu"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Vai atļaut OEM atbloķēšanu?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Tīklošana"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Bezvadu attēlošanas sertifikācija"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Iespējot Wi‑Fi detalizēto reģistrēšanu"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Nejaušu MAC adrešu izveide savienojuma laikā"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Vienmēr aktīvs mobilo datu savienojums"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Paātrināta aparatūras darbība piesaistei"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Rādīt Bluetooth ierīces bez nosaukumiem"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Nevarēja izveidot savienojumu."</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Rādīt bezvadu attēlošanas sertifikācijas iespējas"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Palieliniet Wi‑Fi reģistrēšanas līmeni; rādīt katram SSID RSSI Wi‑Fi atlasītājā."</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Izveidot nejaušas MAC adreses, izveidojot savienojumu ar Wi‑Fi tīkliem"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Maksas"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Bezmaksas"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Reģistrētāja buferu lielumi"</string> diff --git a/packages/SettingsLib/res/values-mk/arrays.xml b/packages/SettingsLib/res/values-mk/arrays.xml index 797e0174c85f..22ff50661fc9 100644 --- a/packages/SettingsLib/res/values-mk/arrays.xml +++ b/packages/SettingsLib/res/values-mk/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Користи HDCP проверка само за DRM содржина"</item> <item msgid="45075631231212732">"Секогаш користи HDCP проверка"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Оневозможено"</item> + <item msgid="1969681323976948639">"Овозможено е филтрирано"</item> + <item msgid="8719029132154020716">"Овозможено"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (Стандардно)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml index 9fca9c1ce3d9..5b45977a32a6 100644 --- a/packages/SettingsLib/res/values-mk/strings.xml +++ b/packages/SettingsLib/res/values-mk/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Автоматски поврзано преку %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Автоматски поврзано преку оператор за оценување мрежа"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Поврзано преку %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> од <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Поврзано преку <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Достапно преку %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Допрете за поставување"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Допрете за да се регистрирате"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Поврзана, нема интернет"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Нема интернет"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Потребно е најавување"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Пристапната точка привремено е преоптоварена"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Поврзано преку %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Достапно преку %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Поврзувањето беше неуспешно"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Неважечка URL-адреса на OSU-серверот"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Неуспешно поврзување со OSU-серверот"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Неуспешна проверка на OSU-серверот"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Неважечки сертификат на OSU-серверот"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Доделувањето е прекинато"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Доделувањето не е достапно"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Неважечка URL-адреса на OSU-серверот"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Неочекуван тип наредба"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Неочекуван тип SOAP-порака"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Неуспешна размена на SOAP-пораката"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Пренасочувањето на слушателот не успеа да се стартува"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Истечено чекање за пренасочување"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Не е најдена OSU-активност"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Неочекуван статус на SOAP-пораката"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Не успеа да се најде PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Не успеа да се најде доверлив јазол со администраторски права за серверот за AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Не успеа да се најде доверлив јазол со администраторски права за серверот за санација"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Не успеа да се најде доверлив јазол со администраторски права за серверот на правилото"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Не успеаја да се преземат доверливи сертификати за администраторски права"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Не успеа да се најде доверлив сертификат со администраторски права за серверот за AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Не успеа да се додаде конфигурација за PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Не успеа да се најде давател на OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Се поврзува"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Поврзано"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Се поврзува со OSU-серверот"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-серверот е потврден"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Поврзано со OSU-сервер"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Првична размена на SOAP"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Се чека одговор за пренасочување"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Примен е одговор за пренасочување"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Втора размена на SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Трета размена на SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Се преземаат доверливи сертификати за администраторски права"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Доделувањето е завршено"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Се отвора <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Не можеше да се поврзе"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Се завршува регистрацијата…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Не можеше да се заврши регистрацијата. Допрете за да се обидете повторно."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Регистрацијата е завршена. Се поврзува…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Многу бавна"</string> <string name="speed_label_slow" msgid="813109590815810235">"Бавна"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Во ред"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Остани во активен режим"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Екранот никогаш нема да биде во режим на штедење додека се полни"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Овозможи Bluetooth HCI за евиденција на пресретнување пакети"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Снимај Bluetooth-пакети. (Вклучи Bluetooth по промената на поставкава)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Отклучување со OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Дозволи да се отклучи подигнувачот"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Дозволете отклучување со OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Вмрежување"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Приказ на сертификација на безжична мрежа"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Овозможи преопширно пријавување Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Поврзана MAC-рандомизација"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Мобилниот интернет е секогаш активен"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Хардверско забрзување за врзување"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Прикажувај уреди со Bluetooth без имиња"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Не може да се поврзе"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Покажи ги опциите за безжичен приказ на сертификат"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Зголеми Wi‑Fi ниво на пријавување, прикажи по SSID RSSI во Wi‑Fi бирач"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Користи MAC-адреса по случаен избор при поврзување на Wi‑Fi мрежи"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Со ограничен интернет"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Без ограничен интернет"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Величини на меѓумеморија за дневникот"</string> diff --git a/packages/SettingsLib/res/values-ml/arrays.xml b/packages/SettingsLib/res/values-ml/arrays.xml index f977ad281745..6444b30d2ff7 100644 --- a/packages/SettingsLib/res/values-ml/arrays.xml +++ b/packages/SettingsLib/res/values-ml/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"DRM ഉള്ളടക്കത്തിനുമാത്രമായി HDCP പരിശോധന ഉപയോഗിക്കുക"</item> <item msgid="45075631231212732">"എല്ലായ്പ്പോഴും HDCP പരിശോധന ഉപയോഗിക്കുക"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"പ്രവർത്തനരഹിതമാക്കി"</item> + <item msgid="1969681323976948639">"ഫിൽട്ടറിംഗ് പ്രവർത്തനക്ഷമമാക്കി"</item> + <item msgid="8719029132154020716">"പ്രവർത്തനക്ഷമമാക്കി"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (ഡിഫോൾട്ട്)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml index cda04ccfac25..efe6cd6dfbc5 100644 --- a/packages/SettingsLib/res/values-ml/strings.xml +++ b/packages/SettingsLib/res/values-ml/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s വഴി സ്വയമേവ ബന്ധിപ്പിച്ചു"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"നെറ്റ്വർക്ക് റേറ്റിംഗ് ദാതാവുമായി സ്വയം കണക്റ്റുചെയ്തു"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s വഴി ബന്ധിപ്പിച്ചു"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> നല്കുന്ന <xliff:g id="SSID">%1$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> മുഖേന കണക്റ്റ് ചെയ്തു"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s വഴി ലഭ്യം"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"സജ്ജീകരിക്കാന് ടാപ്പ് ചെയ്യുക"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"സൈൻ അപ്പ് ചെയ്യാൻ ടാപ്പ് ചെയ്യുക"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"കണക്റ്റ് ചെയ്തു, ഇന്റർനെറ്റ് ഇല്ല"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"ഇന്റർനെറ്റ് ഇല്ല"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"സൈൻ ഇൻ ചെയ്യേണ്ടത് ആവശ്യമാണ്"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ആക്സസ് പോയിന്റ് താൽക്കാലികമായി നിറഞ്ഞിരിക്കുന്നു"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s വഴി ബന്ധിപ്പിച്ചു"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s വഴി ലഭ്യം"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"കണക്ഷന് പരാജയപ്പെട്ടു"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"അസാധുവായ OSU സെര്വര് URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU സെര്വര് കണക്ഷന് പരാജയപ്പെട്ടു"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU സെര്വര് മൂല്യനിര്ണ്ണയം പരാജയപ്പെട്ടു"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"അസാധുവായ OSU സെര്വര് സര്ട്ടിഫിക്കറ്റ്"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"പ്രൊവിഷനിംഗ് റദ്ദാക്കി"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"പ്രൊവിഷനിംഗ് ലഭ്യമല്ല"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"അസാധുവായ OSU സെര്വര് URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"അപ്രതീക്ഷിത കമാന്ഡ് തരം"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"അപ്രതീക്ഷിത SOAP സന്ദേശ തരം"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP സന്ദേശ എക്സ്ചേഞ്ച് പരാജയപ്പെട്ടു"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"റീഡയറക്റ്റ് ചെയ്ത ശ്രോതാവ് ആരംഭിക്കുന്നതില് പരാജയപ്പെട്ടു"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"കാലഹരണപ്പെടല്, റീഡയറക്റ്റിനായി കാത്തിരിക്കുന്നു"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU ആക്റ്റിവിറ്റിയൊന്നും കണ്ടെത്തിയില്ല"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"അപ്രതീക്ഷിത SOAP സന്ദേശ നില"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO കണ്ടെത്തുന്നതില് പരാജയപ്പെട്ടു"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA സെര്വറിനായുള്ള വിശ്വസനീയ റൂട്ട് നോഡ് കണ്ടെത്തുന്നതില് പരാജയപ്പെട്ടു"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"പരിഹാര സെര്വറിനുള്ള വിശ്വസനീയ റൂട്ട് നോഡ് കണ്ടെത്തുന്നതില് പരാജയപ്പെട്ടു"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"നയ സെര്വറുകള്ക്കായുള്ള വിശ്വസനീയ റൂട്ട് നോഡ് കണ്ടെത്തുന്നതില് പരാജയപ്പെട്ടു"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"വിശ്വസനീയ റൂട്ട് സര്ട്ടിഫിക്കറ്റുകള് വീണ്ടെടുക്കുന്നതില് പരാജയപ്പെട്ടു"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA സെര്വറിനുള്ള വിശ്വസനീയ റൂട്ട് സര്ട്ടിഫിക്കറ്റ് കണ്ടെത്തുന്നതില് പരാജയപ്പെട്ടു"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint കോണ്ഫിഗറേഷന് ചേര്ക്കുന്നതില് പരാജയപ്പെട്ടു"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU പ്രൊവൈഡര് കണ്ടെത്തുന്നതില് പരാജയപ്പെട്ടു"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"കണക്റ്റ് ചെയ്യുന്നു"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"കണക്റ്റ് ചെയ്തു"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU സെര്വറിലേക്ക് കണക്റ്റ് ചെയ്യുന്നു"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU സെര്വര് സാധൂകരിച്ചു"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU സെര്വറിലേക്ക് കണക്റ്റ് ചെയ്തു"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"പ്രാരംഭ SOAP എക്സ്ചേഞ്ച്"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"റീഡയറക്റ്റ് ചെയ്യുന്ന പ്രതികരണത്തിനായി കാത്തിരിക്കുന്നു"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"റീഡയറക്റ്റ് ചെയ്ത പ്രതികരണം ലഭിച്ചു"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"രണ്ടാമത്തെ SOAP എക്സ്ചേഞ്ച്"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"മൂന്നാമത്തെ SOAP എക്സ്ചേഞ്ച്"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"വിശ്വസനീയ റൂട്ട് സര്ട്ടിഫിക്കറ്റുകള് വീണ്ടെടുക്കുന്നു"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"പ്രൊവിഷനിംഗ് പൂര്ത്തിയായി"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> തുറക്കുന്നു"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"കണക്റ്റ് ചെയ്യാനായില്ല"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"സൈൻ അപ്പ് പൂർത്തിയാക്കുന്നു…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"സൈൻ അപ്പ് പൂർത്തിയാക്കാനായില്ല. വീണ്ടും ശ്രമിക്കാൻ ടാപ്പ് ചെയ്യുക."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"സൈൻ അപ്പ് പൂർത്തിയായി. കണക്റ്റ് ചെയ്യുന്നു…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"വളരെ കുറഞ്ഞ വേഗത്തിൽ"</string> <string name="speed_label_slow" msgid="813109590815810235">"കുറഞ്ഞ വേഗത്തിൽ"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ശരി"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"സജീവമായി തുടരുക"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"ചാർജ്ജ് ചെയ്യുമ്പോൾ സ്ക്രീൻ ഒരിക്കലും ഉറങ്ങില്ല"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ബ്ലൂടൂത്ത് HCI സ്നൂപ്പ് ലോഗ് സജീവമാക്കൂ"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth പായ്ക്കറ്റുകൾ ക്യാപ്ചർ ചെയ്യുക. (ഈ ക്രമീകരണം മാറ്റിയ ശേഷം Bluetooth മാറ്റുക)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM അൺലോക്കുചെയ്യൽ"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"അൺലോക്കാകാൻ ബൂട്ട്ലോഡറിനെ അനുവദിക്കുക"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM അൺലോക്കുചെയ്യൽ അനുവദിക്കണോ?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"നെറ്റ്വര്ക്കിംഗ്"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"വയർലെസ് ഡിസ്പ്ലേ സർട്ടിഫിക്കേഷൻ"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"വൈഫൈ വെർബോസ് ലോഗിംഗ് പ്രവർത്തനക്ഷമമാക്കുക"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"കണക്റ്റ് ചെയ്ത MAC ക്രമരഹിതമാക്കൽ"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"മൊബൈൽ ഡാറ്റ എല്ലായ്പ്പോഴും സജീവം"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"ടെതറിംഗ് ഹാർഡ്വെയർ ത്വരിതപ്പെടുത്തൽ"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"പേരില്ലാത്ത Bluetooth ഉപകരണങ്ങൾ കാണിക്കുക"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"കണക്റ്റ് ചെയ്യാനായില്ല"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"വയർലെസ് ഡിസ്പ്ലേ സർട്ടിഫിക്കേഷനായി ഓപ്ഷനുകൾ ദൃശ്യമാക്കുക"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"വൈഫൈ പിക്കറിൽ ഓരോ SSID RSSI പ്രകാരം കാണിക്കാൻ വൈഫൈ ലോഗിംഗ് നില വർദ്ധിപ്പിക്കുക"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"വൈഫൈ നെറ്റ്വർക്കുകളിലേക്ക് കണക്റ്റ് ചെയ്യുമ്പോൾ MAC വിലാസം ക്രമരഹിതമാക്കുക"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"മീറ്റർചെയ്ത"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"മീറ്റർമാപകമല്ലാത്തത്"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"ലോഗർ ബഫർ വലുപ്പം"</string> diff --git a/packages/SettingsLib/res/values-mn/arrays.xml b/packages/SettingsLib/res/values-mn/arrays.xml index 4ed99c6b202b..35a54d2df62f 100644 --- a/packages/SettingsLib/res/values-mn/arrays.xml +++ b/packages/SettingsLib/res/values-mn/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"HDCP шалгахыг зөвхөн DRM контентэд ашиглах"</item> <item msgid="45075631231212732">"Байнга HDCP шалгахыг ашиглах"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Идэвхгүй болгосон"</item> + <item msgid="1969681323976948639">"Идэвхжүүлсэн Шүүсэн"</item> + <item msgid="8719029132154020716">"Идэвхжүүлсэн"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (Өгөгдмөл)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml index 46415e23fd6d..9c3db2e99717 100644 --- a/packages/SettingsLib/res/values-mn/strings.xml +++ b/packages/SettingsLib/res/values-mn/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s-р автоматаар холбогдсон"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Сүлжээний үнэлгээ үзүүлэгчээр автоматаар холбогдох"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s-р холбогдсон"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>-н <xliff:g id="SSID">%1$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g>-р холбогдсон"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s-р боломжтой"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Тохируулахын тулд товшино уу"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Бүртгүүлэхийн тулд товшино уу"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Холбогдсон хэдий ч интернет алга"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Интернэт алга"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Нэвтрэх шаардлагатай"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Хандах цэг түр хугацаанд дүүрсэн байна"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s-р холбогдсон"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s-р боломжтой"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Холбогдож чадсангүй"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU серверийн URL хүчингүй байна"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU серверт холбогдож чадсангүй"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU серверийг бататгаж чадсангүй"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU серверийн гэрчилгээ хүчингүй байна"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Хангамжийг тасаллаа"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Хангамж боломжгүй байна"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU серверийн URL хүчингүй байна"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Тушаалын тооцоолоогүй төрөл байна"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"SOAP мессежийн тооцоолоогүй төрөл байна"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP мессежийг солилцож чадсангүй"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Дахин чиглүүлэх сонсогчийг эхлүүлж чадсангүй"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Завсарлагыг дахин чиглүүлэхээр хүлээж байна"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU үйл ажиллагаа олдсонгүй"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"SOAP мессежийн тооцоолоогүй төлөв байна"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO-г олж чадсангүй"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA серверийн итгэмжлэлийн үндсэн зангилаа цэгийг олж чадсангүй"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Сайжруулалтын серверийн итгэмжлэлийн үндсэн зангилаа цэгийг олж чадсангүй"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Удирдамжийн серверийн итгэмжлэлийн үндсэн зангилааны цэгийг олж чадсангүй"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Итгэмжлэлийн үндсэн гэрчилгээг сэргээж чадсангүй"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA серверийн итгэмжлэлийн үндсэн гэрчилгээг олж чадсангүй"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint-н тохируулгыг нэмж чадсангүй"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU нийлүүлэгчийг олж чадсангүй"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Холбогдож байна"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Холбогдсон"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU серверт холбогдож байна"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU серверийг баталлаа"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU серверт холбогдлоо"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"SOAP-г анх удаа солилцож байна"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Дахин чиглүүлэх хариу үйлдлийг хүлээж байна"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Дахин чиглүүлэх хариу үйлдлийг хүлээн авлаа"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"SOAP-г хоёр дахь удаагаа солилцож байна"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"SOAP-г гурав дахь удаагаа солилцож байна"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Итгэмжлэлийн үндсэн гэрчилгээг сэргээж байна"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Хангаж дууслаа"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>-г нээж байна"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Холбогдож чадсангүй"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Бүртгүүлэлтийг дуусгаж байна…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Бүртгүүлэлтийг дуусгаж чадсангүй. Дахин оролдохын тулд товшино уу."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Бүртгүүлж дууслаа. Холбогдож байна…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Маш удаан"</string> <string name="speed_label_slow" msgid="813109590815810235">"Удаан"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ЗА"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Идэвхтэй байлгах"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Цэнэглэж байх үед дэлгэц хэзээ ч амрахгүй"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI снүүп логыг идэвхжүүлэх"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth-н багцыг авна уу. (Энэ тохиргоог өөрчилсний дараа Bluetooth-г унтрааж/асаана уу)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM түгжээ тайлагч"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Bootloader-н түгжээг тайлахыг зөвшөөрөх"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM түгжээ тайлагчийг зөвшөөрөх үү?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Сүлжээ"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Утасгүй дэлгэцийн сертификат"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi дэлгэрэнгүй лог-г идэвхжүүлэх"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Холбогдсон дурын MAC хаяг үүсгэлт (Randomization)"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Мобайл дата байнга идэвхтэй"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Модем болгох хардвер хурдасгуур"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Нэргүй Bluetooth төхөөрөмжийг харуулах"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Холбогдож чадсангүй"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Утасгүй дэлгэцийн сертификатын сонголтыг харуулах"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi лог-н түвшинг нэмэгдүүлэх, Wi‑Fi Сонгогч дээрх SSID-д ногдох RSSI-г харуулах"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi‑Fi сүлжээнд холбогдох үедээ шинэ дурын (random) MAC хаяг үүсгэх"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Хязгаартай"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Хязгааргүй"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Логгерын буферын хэмжээ"</string> diff --git a/packages/SettingsLib/res/values-mr/arrays.xml b/packages/SettingsLib/res/values-mr/arrays.xml index 9fc6970f0192..d8652bf07337 100644 --- a/packages/SettingsLib/res/values-mr/arrays.xml +++ b/packages/SettingsLib/res/values-mr/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"केवळ DRM सामग्रीसाठी HDCP तपासणी वापरा"</item> <item msgid="45075631231212732">"नेहमी HDCP तपासणी वापरा"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"बंद आहे"</item> + <item msgid="1969681323976948639">"फिल्टर केलेले सुरू केले"</item> + <item msgid="8719029132154020716">"सुरू केले"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (डीफॉल्ट)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml index 47757e48e707..a792c4f2de5e 100644 --- a/packages/SettingsLib/res/values-mr/strings.xml +++ b/packages/SettingsLib/res/values-mr/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s द्वारे स्वयंचलितपणे कनेक्ट केले"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"नेटवर्क रेटिंग प्रदात्याद्वारे स्वयंचलितपणे कनेक्ट केले"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s द्वारे कनेक्ट केले"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> चे <xliff:g id="SSID">%1$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> द्वारे कनेक्ट केले"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s द्वारे उपलब्ध"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"सेट करण्यासाठी टॅप करा"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"साइन अप करण्यासाठी टॅप करा"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"कनेक्ट केले, इंटरनेट नाही"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"इंटरनेट नाही"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"साइन इन करणे आवश्यक आहे"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"अॅक्सेस पॉइंट तात्पुरते भरलेले"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s ने कनेक्ट केले"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s ने उपलब्ध"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"कनेक्शन झाले नाही"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"चुकीचे OSU सर्व्हर URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU सर्व्हर कनेक्शन करता आले नाही"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU सर्व्हर पडताळणी करता आली नाही"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"चुकीचे OSU सर्व्हर सर्टिफिकेट"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"तरतूद निरस्त केली"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"तरतूद उपलब्ध नाही"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"चुकीचे OSU सर्व्हर URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"अनपेक्षित कमांड प्रकार"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"अनपेक्षित SOAP संदेश प्रकार"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP मेसेज एक्सचेंज करता आले नाही"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"रीडिरेक्ट श्रोता सुरू करता आले नाही"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"रीडिरेक्टसाठी पाहाण्याची वेळ संपली"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"कोणतीही OSU अॅक्टिव्हिटी आढळली नाही"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"अनपेक्षित SOAP मेसेज स्थिती"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO शोधता आले नाही"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA सर्व्हरसाठी विश्वासू रूट नोड शोधता आले नाही"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"उपाय सर्व्हरसाठी विश्वासू रूट नोड शोधता आले नाही"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"धोरण सर्व्हरसाठी विश्वासू रूट नोड शोधता आले नाही"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"विश्वासू रूट सर्टिफिकेट परत मिळवता आली नाहीत"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA सर्व्हरसाठी विश्वासू रूट सर्टिफिकेट शोधता आले नाही"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint कॉन्फिगरेशन जोडता आले नाही"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU पुरवठादार शोधता आला नाही"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"कनेक्ट करत आहे"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"कनेक्ट केले"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU शी कनेक्ट करत आहे"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU सर्व्हर पडताळण्यात आले"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU सर्व्हरशी कनेक्ट केले"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"सुरुवातीचे SOAP एक्सचेंज"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"रीडिरेक्ट प्रतिसादासाठी वाट पाहत आहे"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"रीडिरेक्ट प्रतिसाद मिळाला"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"द्वितीय SOAP एक्सचेंज"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"तृतीय SOAP एक्सचेंज"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"विश्वासू रूट सर्टिफिकेट परत मिळवत आहे"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"तरतूद पूर्ण झाली"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> उघडत आहे"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"कनेक्ट करता आले नाही"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"साइन अप पूर्ण होत आहे…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"साइन अप पूर्ण करता आले नाही. पुन्हा प्रयत्न करण्यासाठी टॅप करा."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"साइन अप पूर्ण झाले. कनेक्ट करत आहे…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"खूप हळू"</string> <string name="speed_label_slow" msgid="813109590815810235">"हळू"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ठीक आहे"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"सक्रिय रहा"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"चार्ज होत असताना स्क्रीन कधीही निष्क्रिय होणार नाही"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ब्लूटूथ HCI स्नूप लॉग सुरू करा"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ब्लूटूथ पॅकेट कॅप्चर करा (हे सेटिंग बदलल्यानंतर ब्ल्यूटूथ टॉगल करा)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM अनलॉक करणे"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"बूटलोडर अनलॉक करण्यासाठी अनुमती द्या"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM अनलॉक करण्यास अनुमती द्यायची?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"नेटवर्किंग"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"वायरलेस डिस्प्ले प्रमाणीकरण"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"वाय-फाय व्हर्बोझ लॉगिंग सुरू करा"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"कनेक्ट केलेले MAC Randomization"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"मोबाइल डेटा नेहमी सक्रिय"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"टेदरिंग हार्डवेअर प्रवेग"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"नावांशिवाय ब्लूटूथ डिव्हाइस दाखवा"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"कनेक्ट करू शकलो नाही"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"वायरलेस डिस्प्ले प्रमाणिकरणाचे पर्याय दाखवा"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"वाय-फाय लॉगिंग स्तर वाढवा, वाय-फाय सिलेक्टरमध्ये प्रति SSID RSSI दर्शवा"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"वाय-फाय नेटवर्कशी कनेक्ट करताना MAC अॅड्रेस रँडमाइझ करा"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"मीटरने मोजलेले"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"मीटरने न मोजलेले"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"लॉगर बफर आकार"</string> diff --git a/packages/SettingsLib/res/values-ms/arrays.xml b/packages/SettingsLib/res/values-ms/arrays.xml index 3ecd79212c57..14729df4e44c 100644 --- a/packages/SettingsLib/res/values-ms/arrays.xml +++ b/packages/SettingsLib/res/values-ms/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Gunakan penyemakan HDCP untuk kandungan DRM sahaja"</item> <item msgid="45075631231212732">"Sentiasa gunakan penyemakan HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Dilumpuhkan"</item> + <item msgid="1969681323976948639">"Didayakan Ditapis"</item> + <item msgid="8719029132154020716">"Didayakan"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (Lalai)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml index 12e463c02da0..419c6ecd069a 100644 --- a/packages/SettingsLib/res/values-ms/strings.xml +++ b/packages/SettingsLib/res/values-ms/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Disambungkan secara automatik melalui %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Disambungkan secara automatik melalui pembekal penilaian rangkaian"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Disambungkan melalui %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> oleh <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Disambungkan melalui <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Tersedia melalui %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Ketik untuk menyediakan"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Ketik untuk daftar"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Disambungkan, tiada Internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Tiada Internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Log masuk diperlukan"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Titik akses penuh buat sementara waktu"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Disambungkan melalui %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Tersedia melalui %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Sambungan gagal"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL pelayan OSU tidak sah"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Sambungan pelayan OSU gagal"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Pengesahan pelayan OSU gagal"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Sijil pelayan OSU tidak sah"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Peruntukan dihenti paksa"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Peruntukan tidak tersedia"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL pelayan OSU tidak sah"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Jenis perintah tidak dijangka"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Jenis mesej SOAP tidak dijangka"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Pertukaran mesej SOAP gagal"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Ubah hala pendengar gagal dimulakan"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Tamat masa menunggu ubah hala"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Tiada aktiviti OSU yang ditemukan"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Status mesej SOAP tidak dijangka"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Gagal menemukan PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Gagal menemukan nod akar amanah untuk pelayan AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Gagal menemukan nod akar amanah untuk pelayan pemulihan"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Gagal menemukan nod akar amanah untuk pelayan dasar"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Gagal mengambil sijil akar amanah"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Gagal menemukan sijil akar amanah untuk pelayan AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Gagal menambah konfigurasi PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Gagal menemukan pembekal OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Menyambung"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Disambungkan"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Menyambung ke pelayan OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Pelayan OSU disahkan"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Disambungkan ke pelayan OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Pertukaran SOAP permulaan"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Menunggu respons ubah hala"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Menerima respons ubah hala"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Pertukaran SOAP kedua"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Pertukaran SOAP ketiga"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Mengambil sijil akar amanah"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Peruntukan selesai"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Membuka <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Tidak dapat menyambung"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Menyelesaikan pendaftaran…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Tidak dapat menyelesaikan pendaftaran. Ketik untuk mencuba lagi."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Pendaftaran selesai. Menyambung…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Sangat Perlahan"</string> <string name="speed_label_slow" msgid="813109590815810235">"Perlahan"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Tetap berjaga"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Skrin tidak sekali-kali akan tidur semasa pengecasan"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Dayakan log intip HCI Bluetooth"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Tangkap paket Bluetooth. (Togol Bluetooth selepas menukar tetapan ini)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Pembukaan kunci OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Benarkan pemuat but untuk dibuka kunci"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Benarkan pembukaan kunci OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Perangkaian"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Pensijilan paparan wayarles"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Dayakan Pengelogan Berjela-jela Wi-Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Perawakan MAC Tersambung"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Data mudah alih sentiasa aktif"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Pecutan perkakasan penambatan"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Tunjukkan peranti Bluetooth tanpa nama"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Tidak dapat menyambung"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Tunjukkan pilihan untuk pensijilan paparan wayarles"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Tingkatkan tahap pengelogan Wi-Fi, tunjuk setiap SSID RSSI dalam Pemilih Wi-Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Rawakkan alamat MAC apabila menyambung ke rangkaian Wi‑Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Bermeter"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Tidak bermeter"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Saiz penimbal pengelog"</string> diff --git a/packages/SettingsLib/res/values-my/arrays.xml b/packages/SettingsLib/res/values-my/arrays.xml index 75ee0cbc2c6c..ba9c904d7cbd 100644 --- a/packages/SettingsLib/res/values-my/arrays.xml +++ b/packages/SettingsLib/res/values-my/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"DRM အကြောင်းအရာအတွက်သာ HDCP စစ်ဆေးမည်"</item> <item msgid="45075631231212732">"HDCP checkingအားအမြဲသုံးပါ"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"ပိတ်ထားသည်"</item> + <item msgid="1969681323976948639">"စစ်ထုတ်ထားသည်များကို ဖွင့်ထားသည်"</item> + <item msgid="8719029132154020716">"ဖွင့်ထားသည်"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (မူလ)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml index c9896f076344..3e9e181209b4 100644 --- a/packages/SettingsLib/res/values-my/strings.xml +++ b/packages/SettingsLib/res/values-my/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s မှတစ်ဆင့် အလိုအလျောက် ချိတ်ဆက်ထားပါသည်"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ကွန်ရက်အဆင့်သတ်မှတ်ပေးသူ မှတစ်ဆင့် အလိုအလျောက် ချိတ်ဆက်ထားပါသည်"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s မှတစ်ဆင့် ချိတ်ဆက်ထားသည်"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> ၏ <xliff:g id="SSID">%1$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> မှတစ်ဆင့် ချိတ်ဆက်ထားသည်"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s မှတစ်ဆင့်ရနိုင်သည်"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"စနစ်ထည့်သွင်းရန် တို့ပါ"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"အကောင့်ဖွင့်ရန် တို့ပါ"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"ချိတ်ဆက်ထားသည်၊ အင်တာနက်မရှိ"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"အင်တာနက် မရှိပါ"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"လက်မှတ်ထိုးဝင်ရန် လိုအပ်သည်"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ကွန်ရက်ချိတ်ဆက်မှု ယာယီပြည့်နေသည်"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s မှတစ်ဆင့် ချိတ်ဆက်ထားသည်"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s မှတစ်ဆင့် ရနိုင်သည်"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"ချိတ်ဆက်၍ မရပါ"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"မမှန်ကန်သည့် OSU ဆာဗာ URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU ဆာဗာသို့ ချိတ်ဆက်၍ မရပါ"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU ဆာဗာကို အတည်ပြု၍မရပါ"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"မမှန်ကန်သည့် OSU ဆာဗာအသိအမှတ်ပြုလက်မှတ်"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"ပံ့ပိုးခြင်းကို ဖျက်သိမ်းလိုက်ပါပြီ"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"ပံ့ပိုးမှု မရနိုင်ပါ"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"မမှန်ကန်သည့် OSU ဆာဗာ URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"မျှော်လင့်မထားသော ကွန်မန်းအမျိုးအစား"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"မမျှော်လင့်ထားသည့် SOAP မက်ဆေ့ဂျ်အမျိုးအစား"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP မက်ဆေ့ဂျ်ကို ဖလှယ်၍ မရပါ"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"တစ်ဆင့်ပြန်ညွှန်ချက်ကို စောင့်ကြည့်သည့်စနစ်ကို စတင်၍မရပါ"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"တစ်ဆင့်ပြန်ညွှန်ချက်ကို စောင့်ရာတွင် အချိန်ကုန်သွားပါပြီ"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"မည်သည့် OSU လုပ်ဆောင်ချက်ကိုမျှ မတွေ့ပါ"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"မျှော်လင့်မထားသော SOAP မက်ဆေ့ဂျ်အခြေအနေ"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO ကို ရှာမတွေ့ပါ"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA ဆာဗာအတွက် ယုံကြည်ချက်ဆိုင်ရာ အရင်းအမြစ်စက် နုတ်ကို ရှာမတွေ့ပါ"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"ပြောင်းရွှေ့ခြင်းဆာဗာအတွက် ယုံကြည်ချက်ဆိုင်ရာ အရင်းအမြစ် နုတ်ကို ရှာမတွေ့ပါ"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"မူဝါဒဆာဗာအတွက် ယုံကြည်ချက်ဆိုင်ရာ အရင်းအမြစ် နုတ်ကို ရှာမတွေ့ပါ"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"ယုံကြည်ချက်ဆိုင်ရာ အရင်းအမြစ်အသိအမှတ်ပြုလက်မှတ်များကို ယူ၍မရပါ"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA ဆာဗာအတွက် ယုံကြည်ချက်ဆိုင်ရာ အရင်းအမြစ် အသိအမှတ်ပြုလက်မှတ်ကို ရှာမတွေ့ပါ"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint စီစဉ်သတ်မှတ်ချက်ကို ထည့်၍မရပါ"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU ဝန်ဆောင်မှုထောက်ပံ့သူကို ရှာမတွေ့ပါ"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"ချိတ်ဆက်နေသည်"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"ချိတ်ဆက်ထားသည်"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU ဆာဗာသို့ ချိတ်ဆက်နေသည်"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU ဆာဗာကို အတည်ပြုထားသည်"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU ဆာဗာသို့ ချိတ်ဆက်ထားသည်"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"ကနဦး SOAP ဖလှယ်မှု"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"တစ်ဆင့်ပြန်ညွှန်သည့် တုံ့ပြန်ချက်ကို စောင့်နေသည်"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"တစ်ဆင့်ပြန်ညွှန်ထားသည့် တုံ့ပြန်မှုကို ရရှိထားသည်"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"ဒုတိယ SOAP ဖလှယ်မှု"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"တတိယ SOAP ဖလှယ်မှု"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"ယုံကြည်မှုဆိုင်ရာ အရင်းအမြစ်အသိအမှတ်ပြုလက်မှတ်များ ရယူနေသည်"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"ပံ့ပိုးပြီးပါပြီ"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ကို ဖွင့်နေသည်"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"ချိတ်ဆက်၍ မရပါ"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"အကောင့်ဖွင့်ခြင်း အပြီးသတ်နေသည်…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"အကောင့်ဖွင့်ခြင်း အပြီးသတ်၍ မရပါ။ ပြန်စမ်းကြည့်ရန် တို့ပါ။"</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"အကောင့်ဖွင့်ခြင်း ပြီးပါပြီ။ ချိတ်ဆက်နေသည်…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"အလွန်နှေး"</string> <string name="speed_label_slow" msgid="813109590815810235">"နှေး"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"ဖွင့်လျက်သား"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"အားသွင်းနေစဉ် ဖန်သားပြင်မှာဘယ်သောအခါမှ ပိတ်မည်မဟုတ်ပါ။"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ဘလူးတုသ် HCI snoop မှတ်တမ်းကို ဖွင့်ခြင်း"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ဘလူးတုသ် အတွဲများ သိမ်းယူပါ။ (ဤဆက်တင်ကို ပြောင်းပြီးသည့်အခါ ဘလူးတုသ် ဖွင့်/ပိတ် လုပ်ပါ)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM သော့ဖွင့်ခြင်း"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"အစပြုခြင်းကိရိယာအား သော့ဖွင့်ရန် ခွင့်ပြုမည်"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM သော့ဖွင့်ခြင်း ခွင့်ပြုမလား?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"ချိတ်ဆက်ဆောင်ရွက်ခြင်း"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"ကြိုးမဲ့ပြသမှု အသိအမှတ်ပြုလက်မှတ်"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi Verbose မှတ်တမ်းတင်ခြင်းအား ဖွင့်မည်"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"MAC ကျပန်းပြုလုပ်မှုကို ချိတ်ဆက်ထားခြင်း"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"မိုဘိုင်းဒေတာကို အမြဲဖွင့်ထားရန်"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"ဖုန်းကို မိုဒမ်အဖြစ်အသုံးပြုမှု စက်ပစ္စည်းဖြင့် အရှိန်မြှင့်တင်ခြင်း"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"အမည်မရှိသော ဘလူးတုသ်စက်ပစ္စည်းများကို ပြသရန်"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"ချိတ်ဆက်၍ မရပါ"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"ကြိုးမဲ့ အခင်းအကျင်း အသိအမှတ်ပြုလက်မှတ်အတွက် ရွေးချယ်စရာများပြရန်"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi မှတ်တမ်းတင်ခြင်း နှုန်းအားမြင့်ကာ၊ Wi‑Fi ရွေးရာတွင် SSID RSSI ဖြင့်ပြပါ"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi‑Fi ကွန်ရက်များသို့ ချိတ်ဆက်သည့်အခါ MAC လိပ်စာ ကျပန်းပြုလုပ်ခြင်း"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"အခမဲ့ မဟုတ်ပါ"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"အခမဲ့"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"မှတ်တမ်းကြားခံနယ် အရွယ်အစားများ"</string> diff --git a/packages/SettingsLib/res/values-nb/arrays.xml b/packages/SettingsLib/res/values-nb/arrays.xml index 214e2d51999e..0c3b0c790df3 100644 --- a/packages/SettingsLib/res/values-nb/arrays.xml +++ b/packages/SettingsLib/res/values-nb/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Bruk HDCP-kontroll kun for DRM-innhold"</item> <item msgid="45075631231212732">"Bruk alltid HDCP-kontroll"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Slått av"</item> + <item msgid="1969681323976948639">"Filtrering er slått på"</item> + <item msgid="8719029132154020716">"Slått på"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (standard)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml index 86f5347aa44e..65085e8d15d4 100644 --- a/packages/SettingsLib/res/values-nb/strings.xml +++ b/packages/SettingsLib/res/values-nb/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatisk tilkoblet via %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatisk tilkoblet via leverandør av nettverksvurdering"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Tilkoblet via %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> fra <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Tilkoblet via <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Tilgjengelig via %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Trykk for å konfigurere"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Trykk for å registrere deg"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Tilkoblet – ingen Internett-tilgang"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Ingen internettilkobling"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Pålogging kreves"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Tilgangspunktet er midlertidig fullt"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Tilkoblet via %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Tilgjengelig via %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Kunne ikke koble til"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Ugyldig nettadresse for OSU-tjener"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Tilkoblingen til OSU-tjeneren mislyktes"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Godkjenning av OSU-tjeneren mislyktes"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Ugyldig sertifikat for OSU-tjener"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Identitetshåndtering ble avbrutt"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Identitetshåndtering er ikke tilgjengelig"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Ugyldig nettadresse for OSU-tjener"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Uventet kommandotype"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Uventet SOAP-meldingstype"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Utveksling av SOAP-melding mislyktes"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Lytteren for viderekoblinger kunne ikke starte"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Tidsavbrudd ved venting for viderekobling"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Fant ingen OSU-aktivitet"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Uventet status for SOAP-melding"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Kunne ikke finne PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Kunne ikke finne rotnode for klarering for AAA-tjeneren"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Kunne ikke finne rotnode for klarering for tjeneren for utbedringer"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Kunne ikke finne rotnode for klarering for tjeneren for retningslinjer"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Kunne ikke hente rotsertifikatene for klarering"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Kunne ikke finne rotsertifikat for klarering for AAA-tjeneren"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Kunne ikke legge til PassPoint-konfigurering"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Kunne ikke finne en OSU-leverandør"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Kobler til"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Tilkoblet"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Kobler til OSU-tjeneren"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-tjeneren er godkjent"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Koblet til OSU-tjener"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Første SOAP-utveksling"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Venter på viderekoblingssvar"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Har mottatt viderekoblingssvar"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Andre SOAP-utveksling"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Tredje SOAP-utveksling"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Henter rotsertifikater for klarering"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Identitetshåndtering er fullført"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Åpner <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Kunne ikke koble til"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Fullfører registreringen …"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Kunne ikke fullføre registreringen. Trykk for å prøve på nytt."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registreringen er fullført. Kobler til …"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Veldig treg"</string> <string name="speed_label_slow" msgid="813109590815810235">"Treg"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Ok"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Forbli våken"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Skjermen blir aldri svart under lading"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Slå på Bluetooth HCI snoop-logg"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Samle Bluetooth-pakker. (Slå Bluetooth av/på etter at du har endret denne innstillingen)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-opplåsing"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Tillat at oppstartsinnlasteren låses opp"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Vil du tillate OEM-opplåsing?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Nettverk"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Trådløs skjermsertifisering"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Aktiver detaljert Wi-Fi-loggføring"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Tilfeldig MAC-adresse ved tilkobling"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobildata er alltid aktiv"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Maskinvareakselerasjon for internettdeling"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Vis Bluetooth-enheter uten navn"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Kunne ikke koble til"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Vis alternativer for sertifisering av trådløs skjerm"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Øk Wi-Fi-loggenivå – vis per SSID RSSI i Wi-Fi-velgeren"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Angi tilfeldig MAC-adresse når du kobler til Wi-Fi-nettverk"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Med datamåling"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Uten datamåling"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Bufferstørrelser for logg"</string> diff --git a/packages/SettingsLib/res/values-ne/arrays.xml b/packages/SettingsLib/res/values-ne/arrays.xml index a246d606235b..0213e9d9c3e6 100644 --- a/packages/SettingsLib/res/values-ne/arrays.xml +++ b/packages/SettingsLib/res/values-ne/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"DRM सामग्रीको लागि मात्र HDCP जाँचको प्रयोग गर्नुहोस्"</item> <item msgid="45075631231212732">"सधैँ HDCP जाँच प्रयोग गर्नुहोस्"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"असक्षम पारिएको छ"</item> + <item msgid="1969681323976948639">"फिल्टर सक्षम पारियो"</item> + <item msgid="8719029132154020716">"सक्षम पारिएको छ"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP १.४ (पूर्वनिर्धारित)"</item> <item msgid="2809759619990248160">"AVRCP १.३"</item> diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml index eb6d9d3fea0d..16b3b070df7a 100644 --- a/packages/SettingsLib/res/values-ne/strings.xml +++ b/packages/SettingsLib/res/values-ne/strings.xml @@ -38,50 +38,27 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s मार्फत् स्वतः जडान गरिएको"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"नेटवर्कको दर्जा प्रदायक मार्फत स्वत: जडान गरिएको"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s मार्फत जडित"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> को <xliff:g id="SSID">%1$s</xliff:g>"</string> + <!-- no translation found for connected_via_app (5571999941988929520) --> + <skip /> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s मार्फत उपलब्ध"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"सेटअप गर्न ट्याप गर्नुहोस्"</string> + <!-- no translation found for tap_to_sign_up (6449724763052579434) --> + <skip /> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"जडान गरियो तर इन्टरनेट छैन"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"इन्टरनेटमाथिको पहुँच छैन"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"साइन इन गर्न आवश्यक छ"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"पहुँचसम्बन्धी स्थान अस्थायी रूपमा भरिएको छ"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s मार्फत जडान गरियो"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s मार्फत उपलब्ध"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"जडान गर्न सकिएन"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU सर्भरको अमान्य URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU सर्भरमा जडान गर्न सकिएन"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU सर्भर प्रमाणीकरण गर्न सकिएन"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"अमान्य OSU सर्भरको प्रमाणपत्र"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"प्रावधानीकरण रद्द गरियो"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"प्रावधानीकरण गर्ने कार्य उपलब्ध छैन"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU सर्भरको अमान्य URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"अनपेक्षित आदेशको प्रकार"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"अनपेक्षित प्रकारको SOAP सन्देश"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP सन्देशको विनिमय असफल भयो"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"रिडिरेक्ट श्रोता सुरु गर्न सकिएन"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"रिडिरेक्ट गर्नका लागि प्रतीक्षा गर्ने समय सकियो"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"कुनै पनि OSU क्रियाकलाप फेला परेन"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"अनपेक्षित SOAP सन्देशको स्थिति"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO फेला पार्न सकिएन"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA सर्भरको विश्वसनीय मूल नोड फेला पार्न सकिएन"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"समाधान गर्ने काम हुने सर्भरका लागि विश्वसनीय मूल नोड फेला पार्न सकिएन"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"नीतिको सर्भरका लागि विश्वसनीय मूल नोड फेला पार्न सकिएन"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"विश्वसनीय मूल प्रमाणपत्रहरू फेला पार्न सकिएन"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA सर्भरका लागि विश्वसनीय मूल प्रमाणपत्र फेला पार्न सकिएन"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint कन्फिगुरेसन थप्न सकिएन"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"कुनै OSU प्रदायक फेला पार्न सकिएन"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"जडान गर्दै"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"जडान गरिएको छ"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU सर्भरमा जडान गर्दै"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU सर्भर प्रमाणीकरण गरियो"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU सर्भरमा जडान गरियो"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"प्रारम्भिक SOAP विनिमय"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"रिडिरेक्ट प्रतिक्रियाको प्रतिक्षा गर्दै"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"रिडिरेक्ट प्रतिक्रिया प्राप्त गरियो"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"दोस्रो SOAP विनिमय"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"तेस्रो SOAP विनिमय"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"विश्वसनीय मूल प्रमाणपत्रहरू प्राप्त गर्दै"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"प्रावधानीकरण गर्ने प्रक्रिया सम्पन्न भयो"</string> + <!-- no translation found for osu_opening_provider (5488997661548640424) --> + <skip /> + <!-- no translation found for osu_connect_failed (2187750899158158934) --> + <skip /> + <!-- no translation found for osu_completing_sign_up (9037638564719197082) --> + <skip /> + <!-- no translation found for osu_sign_up_failed (7296159750352873260) --> + <skip /> + <!-- no translation found for osu_sign_up_complete (8207626049093289203) --> + <skip /> <string name="speed_label_very_slow" msgid="1867055264243608530">"धेरै ढिलो"</string> <string name="speed_label_slow" msgid="813109590815810235">"बिस्तारै"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ठिक छ"</string> @@ -234,8 +211,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"जागा रहनुहोस्"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"चार्ज गर्ने बेलामा स्क्रिन कहिल्यै सुत्दैन।"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ब्लुटुथ HCI snoop लग सक्षम पार्नुहोस्"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ब्लुटुथका प्याकेटहरू समावेश गर्नुहोस्। (यो सेटिङ परिवर्तन गरेपछि ब्लुटुथ टगल गर्नुहोस्)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM अनलक गर्दै"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"अनलक हुन बूटलोडरलाई अनुमति दिनुहोस्"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM अनलक गर्न अनुमति दिने?"</string> @@ -246,7 +222,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"नेटवर्किङ"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"ताररहित प्रदर्शन प्रमाणीकरण"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi-Fi वर्बोज लग सक्षम पार्नुहोस्"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"जडान गरिएको MAC को अनियमितता"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"मोबाइल डेटा सधैँ सक्रिय राख्नुहोस्"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"टेदरिङको लागि हार्डवेयरको प्रवेग"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"नामकरण नगरिएका ब्लुटुथ यन्त्रहरू देखाउनुहोस्"</string> @@ -273,7 +248,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"जडान गर्न सकिएन"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"ताररहित प्रदर्शन प्रमाणीकरणका लागि विकल्पहरू देखाउनुहोस्"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fi लग स्तर बढाउनुहोस्, Wi-Fi चयनकर्तामा प्रति SSID RSSI देखाइन्छ"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi‑Fi नेटवर्कहरूमा जडान गर्ने बेला MAC को ठेगाना अनियमित गर्नुहोस्"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"मिटर गरिएको जडान भनी चिन्ह लगाइएको"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"मिटर नगरिएको"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"लगर बफर आकारहरू"</string> diff --git a/packages/SettingsLib/res/values-nl/arrays.xml b/packages/SettingsLib/res/values-nl/arrays.xml index 4aa4eae64191..f3eeac6f699c 100644 --- a/packages/SettingsLib/res/values-nl/arrays.xml +++ b/packages/SettingsLib/res/values-nl/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"HDCP-controle alleen voor DRM-content gebruiken"</item> <item msgid="45075631231212732">"HDCP-controle altijd gebruiken"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Uitgeschakeld"</item> + <item msgid="1969681323976948639">"Gefilterd ingeschakeld"</item> + <item msgid="8719029132154020716">"Ingeschakeld"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (standaard)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml index 019f225b6d21..2f8c2c2c249a 100644 --- a/packages/SettingsLib/res/values-nl/strings.xml +++ b/packages/SettingsLib/res/values-nl/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatisch verbonden via %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatisch verbonden via provider van netwerkbeoordelingen"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Verbonden via %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> via <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Verbonden via <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Beschikbaar via %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Tik om in te stellen"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Tik om aan te melden"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Verbonden, geen internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Geen internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Inloggen vereist"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Toegangspunt tijdelijk vol"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Verbonden via %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Beschikbaar via %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Verbinding mislukt"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Ongeldige URL voor OSU-server"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Verbinding met OSU-server mislukt"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Validatie van OSU-server mislukt"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Ongeldig OSU-servercertificaat"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Registratie afgebroken"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Registratie niet beschikbaar"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Ongeldige URL voor OSU-server"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Onverwacht opdrachttype"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Onverwacht SOAP-berichttype"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP-berichtuitwisseling mislukt"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Kan listener voor omleiding niet starten"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Time-out bij wachten op omleiding"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Geen OSU-activiteit gevonden"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Onverwachte SOAP-berichtstatus"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Kan PPS-MO niet vinden"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Kan geen vertrouwde root-node vinden voor AAA-server"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Kan geen vertrouwde root-node vinden voor herstelserver"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Kan geen vertrouwde root-node vinden voor beleidsserver"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Kan vertrouwde rootcertificaten niet ophalen"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Kan geen vertrouwd rootcertificaat vinden voor AAA-server"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Kan PassPoint-configuratie niet toevoegen"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Kan geen OSU-provider vinden"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Verbinden"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Verbonden"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Verbinden met OSU-server"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-server gevalideerd"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Verbonden met OSU-server"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Eerste SOAP-uitwisseling"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Wachten op omleidingsreactie"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Omleidingsreactie ontvangen"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Tweede SOAP-uitwisseling"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Derde SOAP-uitwisseling"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Vertrouwde rootcertificaten ophalen"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Registratie voltooid"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> wordt geopend"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Kan geen verbinding maken"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Aanmelding voltooien…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Kan aanmelding niet voltooien. Tik om het opnieuw te proberen."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Aanmelding voltooid. Verbinden…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Zeer langzaam"</string> <string name="speed_label_slow" msgid="813109590815810235">"Langzaam"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Redelijk"</string> @@ -191,7 +161,7 @@ <string name="tts_play_example_summary" msgid="8029071615047894486">"Een korte demonstratie van spraaksynthese afspelen"</string> <string name="tts_install_data_title" msgid="4264378440508149986">"Spraakgegevens installeren"</string> <string name="tts_install_data_summary" msgid="5742135732511822589">"De spraakgegevens voor spraaksynthese installeren"</string> - <string name="tts_engine_security_warning" msgid="8786238102020223650">"Deze engine voor spraaksynthese kan mogelijk alle tekst verzamelen die wordt gesproken, waaronder persoonlijke gegevens zoals wachtwoorden en creditcardnummers. Deze engine is afkomstig van de <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>-engine. Het gebruik van deze engine voor spraaksynthese inschakelen?"</string> + <string name="tts_engine_security_warning" msgid="8786238102020223650">"Deze engine voor spraaksynthese kan mogelijk alle tekst verzamelen die wordt gesproken, waaronder persoonsgegevens zoals wachtwoorden en creditcardnummers. Deze engine is afkomstig van de <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>-engine. Het gebruik van deze engine voor spraaksynthese inschakelen?"</string> <string name="tts_engine_network_required" msgid="1190837151485314743">"Deze taal heeft een werkende netwerkverbinding nodig voor tekst-naar-spraak-uitvoer."</string> <string name="tts_default_sample_string" msgid="4040835213373086322">"Dit is een voorbeeld van spraaksynthese"</string> <string name="tts_status_title" msgid="7268566550242584413">"Status van standaardtaal"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Stand-by"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Scherm gaat nooit uit tijdens het opladen"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Snoop-logbestand voor Bluetooth-HCI inschakelen"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth-pakketten opslaan. (Schakel Bluetooth in nadat je deze instelling hebt gewijzigd)."</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-ontgrendeling"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Toestaan dat de bootloader wordt ontgrendeld"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM-ontgrendeling toestaan?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Netwerken"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certificering van draadloze weergave"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Uitgebreide wifi-logregistratie insch."</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Willekeurig MAC-adres bij verbinding"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobiele data altijd actief"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardwareversnelling voor tethering"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth-apparaten zonder namen weergeven"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Kan geen verbinding maken"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Opties weergeven voor certificering van draadloze weergave"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Logniveau voor wifi verhogen, weergeven per SSID RSSI in wifi-kiezer"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Een willekeurig MAC-adres bij het maken van verbinding met wifi-netwerken"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Met datalimiet"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Gratis"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Logger-buffergrootten"</string> @@ -460,7 +427,7 @@ <string name="active_input_method_subtypes" msgid="3596398805424733238">"Actieve invoermethoden"</string> <string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"Systeemtalen gebruiken"</string> <string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"Instellingen openen voor <xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g> mislukt"</string> - <string name="ime_security_warning" msgid="4135828934735934248">"Deze invoermethode verzamelt mogelijk alle tekst die je typt, inclusief persoonlijke gegevens zoals wachtwoorden en creditcardnummers. De methode is afkomstig uit de app <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. Deze invoermethode inschakelen?"</string> + <string name="ime_security_warning" msgid="4135828934735934248">"Deze invoermethode verzamelt mogelijk alle tekst die je typt, inclusief persoonsgegevens zoals wachtwoorden en creditcardnummers. De methode is afkomstig uit de app <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g>. Deze invoermethode inschakelen?"</string> <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"Opmerking: Wanneer je telefoon opnieuw is opgestart, kan deze app pas worden gestart nadat je je telefoon hebt ontgrendeld"</string> <string name="ims_reg_title" msgid="7609782759207241443">"IMS-registratiestatus"</string> <string name="ims_reg_status_registered" msgid="933003316932739188">"Geregistreerd"</string> diff --git a/packages/SettingsLib/res/values-or/arrays.xml b/packages/SettingsLib/res/values-or/arrays.xml index 15c3ee5cb94e..274136abe8c3 100644 --- a/packages/SettingsLib/res/values-or/arrays.xml +++ b/packages/SettingsLib/res/values-or/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"କେବଳ DRM କଣ୍ଟେଣ୍ଟ ପାଇଁ HDCP ଯାଞ୍ଚ ବ୍ୟବହାର କରନ୍ତୁ"</item> <item msgid="45075631231212732">"ସର୍ବଦା HDCP ଯାଞ୍ଚ ବ୍ୟବହାର କରନ୍ତୁ"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"ଅକ୍ଷମ କରାଯାଇଛି"</item> + <item msgid="1969681323976948639">"ଫିଲ୍ଟର୍କୁ ସକ୍ଷମ କରାଯାଇଛି"</item> + <item msgid="8719029132154020716">"ସକ୍ଷମ କରାଯାଇଛି"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (ଡିଫଲ୍ଟ)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml index b1d117919e6c..95ab7bbab027 100644 --- a/packages/SettingsLib/res/values-or/strings.xml +++ b/packages/SettingsLib/res/values-or/strings.xml @@ -38,50 +38,27 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s ମାଧ୍ୟମରେ ଅଟୋମେଟିକାଲୀ ସଂଯୁକ୍ତ"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ନେଟୱର୍କ ମୂଲ୍ୟାୟନ ପ୍ରଦାତାଙ୍କ ମାଧ୍ୟମରେ ଅଟୋମେଟିକାଲ୍ୟ ସଂଯୁକ୍ତ"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ମାଧ୍ୟମରେ ସଂଯୁକ୍ତ"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> ଦ୍ଵାରା <xliff:g id="SSID">%1$s</xliff:g>"</string> + <!-- no translation found for connected_via_app (5571999941988929520) --> + <skip /> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s ମାଧ୍ୟମରେ ଉପଲବ୍ଧ"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"ସେଟ୍ଅପ୍ କରିବାକୁ ଟାପ୍ କରନ୍ତୁ"</string> + <!-- no translation found for tap_to_sign_up (6449724763052579434) --> + <skip /> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"ସଂଯୁକ୍ତ, ଇଣ୍ଟର୍ନେଟ୍ ନାହିଁ"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"କୌଣସି ଇଣ୍ଟରନେଟ୍ ନାହିଁ"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"ସାଇନ୍-ଇନ୍ ଆବଶ୍ୟକ"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ଆକ୍ସେସ୍ ପଏଣ୍ଟ ସାମୟିକ ଭାବେ ପୂର୍ଣ୍ଣ"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s ମାଧ୍ୟମରେ ସଂଯୁକ୍ତ"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s ମାଧ୍ୟମରେ ଉପଲବ୍ଧ"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"ସଂଯୋଗ ହେଇପାରିଲା ନାହିଁ"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"ଅବୈଧ OSU ସର୍ଭର୍ URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU ସର୍ଭର୍ ସଂଯୋଗ ପ୍ରକ୍ରିୟା ବିଫଳ ହେଲା"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU ସର୍ଭର୍ ବୈଧକରଣ ବିଫଳ ହେଲା"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"ଅବୈଧ OSU ସର୍ଭର୍ ସାର୍ଟିଫିକେଟ୍"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"ପ୍ରାବଧାନ ବାତିଲ୍ କରାଯାଇଛି"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"ପ୍ରାବଧନ ଉପଲବ୍ଧ ନାହିଁ"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"ଅବୈଧ OSU ସର୍ଭର୍ URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ଅପ୍ରତ୍ୟାଶିତ ନିର୍ଦ୍ଦେଶ ପ୍ରକାର"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"ଅପ୍ରତ୍ୟାଶିତ SOAP ମେସେଜ୍ ପ୍ରକାର"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP ମେସେଜ୍ ଏକ୍ସଚେଞ୍ଜ ବିଫଳ ହେଲା"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"ପୁନଃନିର୍ଦ୍ଦେଶ ଶ୍ରୋତା ଆରମ୍ଭ କରିବାରେ ବିଫଳ ହେଲା"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"ସମୟ ଶେଷ ହୋଇଛି, ପୁନଃନିର୍ଦ୍ଦେଶ ପାଇଁ ଅପେକ୍ଷାରତ"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"କୌଣସି OSU ଗତିବିଧି ମିଳିଲା ନାହିଁ"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"ଅପ୍ରତ୍ୟାଶିତ SOAP ମେସେଜ୍ ସ୍ଥିତି"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO ଖୋଜିବାରେ ବିଫଳ ହେଲା"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA ସର୍ଭର୍ ପାଇଁ ଟ୍ରଷ୍ଟ ରୁଟ୍ ନୋଡ୍ ଖୋଜିବାରେ ବିଫଳ ହେଲା"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"ରିମେଡିଟେସନ୍ ସର୍ଭର୍ ପାଇଁ ଟ୍ରଷ୍ଟ ରୁଟ୍ ନୋଡ୍ ଖୋଜିବାରେ ବିଫଳ ହେଲା"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"ପଲିସି ସର୍ଭର୍ ପାଇଁ ଟ୍ରଷ୍ଟ ରୁଟ୍ ନୋଡ୍ ଖୋଜିବାରେ ବିଫଳ ହେଲା"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"ଟ୍ରଷ୍ଟ ରୁଟ୍ ସାର୍ଟିଫିକେଟ୍କୁ ପୁନରୁଦ୍ଧାର କରିହେଲା ନାହିଁ"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA ସର୍ଭର୍ ପାଇଁ ଟ୍ରଷ୍ଟ ରୁଟ୍ ସାର୍ଟିଫିକେଟ୍ ଖୋଜିବାରେ ବିଫଳ ହେଲା"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint କନ୍ଫିଗ୍ରେସନ୍ ଯୋଗ କରିବାରେ ବିଫଳ ହେଲା"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"ଏକ OSU ପ୍ରଦାତା ଖୋଜିବାରେ ବିଫଳ ହେଲା"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"ସଂଯୋଗ କରୁଛି"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"ସଂଯୋଗ ହୋଇଛି"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU ସର୍ଭର୍ରେ ସଂଯୋଗ କରାଯାଉଛି"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU ସର୍ଭର୍ ବୈଧକରଣ କରାଗଲା"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU ସର୍ଭର ସହ ସଂଯୋଗ କରାଯାଇଛି"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"ପ୍ରାରମ୍ଭିକ SOAP ଏକ୍ସଚେଞ୍ଜ"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"ପୁନଃନିର୍ଦ୍ଦେଶ ପ୍ରତିକ୍ରିୟା ପାଇଁ ଅପେକ୍ଷାରତ"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"ପୁନଃନିର୍ଦ୍ଦେଶିତ ପ୍ରତିକ୍ରିୟା ପ୍ରାପ୍ତ ହୋଇଛି"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"ଦ୍ଵିତୀୟ SOAP ଏକ୍ସଚେଞ୍ଜ"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"ତୃତୀୟ SOAP ଏକ୍ସଚେଞ୍ଜ"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"ଟ୍ରଷ୍ଟ ରୁଟ୍ ସାର୍ଟିଫିକେଟ୍କୁ ପୁନରୁଦ୍ଧାର କରାଯାଉଛି"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"ପ୍ରାବଧାନ ସମ୍ପୂର୍ଣ୍ଣ ହୋଇଛି"</string> + <!-- no translation found for osu_opening_provider (5488997661548640424) --> + <skip /> + <!-- no translation found for osu_connect_failed (2187750899158158934) --> + <skip /> + <!-- no translation found for osu_completing_sign_up (9037638564719197082) --> + <skip /> + <!-- no translation found for osu_sign_up_failed (7296159750352873260) --> + <skip /> + <!-- no translation found for osu_sign_up_complete (8207626049093289203) --> + <skip /> <string name="speed_label_very_slow" msgid="1867055264243608530">"ବହୁତ ମନ୍ଥର"</string> <string name="speed_label_slow" msgid="813109590815810235">"କମ୍ ବେଗ"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ଠିକ୍ ଅଛି"</string> @@ -234,8 +211,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"ଜାଗ୍ରତ ରଖନ୍ତୁ"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"ଚାର୍ଜ ହେବାବେଳେ ସ୍କ୍ରୀନ୍ ଆଦୌ ବନ୍ଦ ହେବନାହିଁ"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ବ୍ଲୁ-ଟୂଥ୍ HCI ସ୍ନୁପ୍ ଲଗ୍ ସକ୍ଷମ କରନ୍ତୁ"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ବ୍ଲୁଟୁଥ୍ ପ୍ୟାକେଟ୍ କ୍ୟାପଚର୍ କରନ୍ତୁ (ଏହି ସେଟିଂ ବଦଳାଇବା ପରେ ବ୍ଲୁଟୁଥ୍କୁ ଟୋଗଲ୍ କରନ୍ତୁ)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM ଅନଲକ୍ କରିବା"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"bootloaderକୁ ଅନ୍ଲକ୍ ହେବାର ଅନୁମତି ଦିଅନ୍ତୁ"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM ଅନଲକ୍ କରିବା ଅନୁମତି ଦେବେ?"</string> @@ -246,7 +222,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"ନେଟ୍ୱର୍କିଙ୍ଗ"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"ୱାୟରଲେସ୍ ଡିସ୍ପ୍ଲେ ସର୍ଟିଫିକେଶନ୍"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"ୱାଇ-ଫାଇ ଭର୍ବୋସ୍ ଲଗିଙ୍ଗ ସକ୍ଷମ କରନ୍ତୁ"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"କନେକ୍ଟ ହୋଇଥିବା MACର ରେଣ୍ଡୋମାଇଜେଶନ୍"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"ମୋବାଇଲ୍ ଡାଟା ସର୍ବଦା ସକ୍ରିୟ"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"ଟିଥରିଙ୍ଗ ହାର୍ଡୱେର ବେଗ"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"ବ୍ଲୁ-ଟୂଥ୍ ଡିଭାଇସ୍ଗୁଡ଼ିକୁ ନାମ ବିନା ଦେଖନ୍ତୁ"</string> @@ -273,7 +248,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"କନେକ୍ଟ କରିହେଲା ନାହିଁ"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"ୱେୟାରଲେସ୍ ଡିସ୍ପ୍ଲେ ସର୍ଟିଫିକେଶନ୍ ପାଇଁ ବିକଳ୍ପ ଦେଖାନ୍ତୁ"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"ୱାଇ-ଫାଇ ଲଗିଙ୍ଗ ସ୍ତର ବଢ଼ାନ୍ତୁ, ୱାଇ-ଫାଇ ପିକର୍ରେ ପ୍ରତି SSID RSSI ଦେଖାନ୍ତୁ"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"ୱାଇ-ଫାଇ ନେଟ୍ୱର୍କଗୁଡ଼ିକ ସହିତ କନେକ୍ଟ କରିବାବେଳେ MAC ଠିକଣାକୁ ରେଣ୍ଡୋମାଇଜ୍ କରନ୍ତୁ"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"ମପାଯାଉଥିବା"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"ମପାଯାଉନଥିବା"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"ଲଗର୍ ବଫର୍ ସାଇଜ୍"</string> diff --git a/packages/SettingsLib/res/values-pa/arrays.xml b/packages/SettingsLib/res/values-pa/arrays.xml index 45d96b782013..0bc2ce6203b1 100644 --- a/packages/SettingsLib/res/values-pa/arrays.xml +++ b/packages/SettingsLib/res/values-pa/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"ਸਿਰਫ਼ DRM ਸਮੱਗਰੀ ਲਈ HDCP ਜਾਂਚ ਦੀ ਵਰਤੋਂ ਕਰੋ"</item> <item msgid="45075631231212732">"ਹਮੇਸਾਂ HDCP ਜਾਂਚ ਵਰਤੋ"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"ਬੰਦ"</item> + <item msgid="1969681323976948639">"ਫਿਲਟਰ ਕੀਤਿਆਂ ਨੂੰ ਚਾਲੂ ਕੀਤਾ ਗਿਆ"</item> + <item msgid="8719029132154020716">"ਚਾਲੂ"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (ਪੂਰਵ-ਨਿਰਧਾਰਤ)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml index 6ba9de780907..1ddd862828d2 100644 --- a/packages/SettingsLib/res/values-pa/strings.xml +++ b/packages/SettingsLib/res/values-pa/strings.xml @@ -38,50 +38,27 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s ਰਾਹੀਂ ਆਪਣੇ-ਆਪ ਕਨੈਕਟ ਹੋਇਆ"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ਨੈੱਟਵਰਕ ਰੇਟਿੰਗ ਪ੍ਰਦਾਨਕ ਰਾਹੀਂ ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਕਨੈਕਟ ਹੋਇਆ"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> ਵੱਲੋਂ <xliff:g id="SSID">%1$s</xliff:g>"</string> + <!-- no translation found for connected_via_app (5571999941988929520) --> + <skip /> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s ਰਾਹੀਂ ਉਪਲਬਧ"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"ਸੈੱਟਅੱਪ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ"</string> + <!-- no translation found for tap_to_sign_up (6449724763052579434) --> + <skip /> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"ਕਨੈਕਟ ਕੀਤਾ, ਕੋਈ ਇੰਟਰਨੈੱਟ ਨਹੀਂ"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"ਇੰਟਰਨੈੱਟ ਨਹੀਂ"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"ਸਾਈਨ-ਇਨ ਲੋੜੀਂਦਾ ਹੈ"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ਐਕਸੈੱਸ ਪੁਆਇੰਟ ਅਸਥਾਈ ਤੌਰ \'ਤੇ ਸੰਪੂਰਨ ਰੁਝੇਂਵੇਂ ਵਿੱਚ ਹੈ"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s ਰਾਹੀਂ ਉਪਲਬਧ"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"ਕਨੈਕਸ਼ਨ ਅਸਫਲ ਰਿਹਾ"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"ਅਵੈਧ OSU ਸਰਵਰ URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU ਸਰਵਰ ਕਨੈਕਸ਼ਨ ਸਫਲ ਰਿਹਾ"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU ਸਰਵਰ ਪ੍ਰਮਾਣਿਕਤਾ ਅਸਫਲ ਰਹੀ"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"ਅਵੈਧ OSU ਸਰਵਰ ਸਰਟੀਫੀਕੇਟ"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"ਵਿਵਸਥਾਕਰਨ ਰੱਦ ਕੀਤਾ ਗਿਆ"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"ਵਿਵਸਥਾਕਰਨ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"ਅਵੈਧ OSU ਸਰਵਰ URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ਅਚਾਨਕ ਆਦੇਸ਼ ਦੀ ਕਿਸਮ"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"ਅਚਾਨਕ SOAP ਦੀ ਸੁਨੇਹਾ ਕਿਸਮ"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP ਸੁਨੇਹੇ ਦਾ ਵਟਾਂਦਰਾ ਅਸਫਲ ਰਿਹਾ"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"ਰੀਡਾਇਰੈਕਟ ਲਿਸਨਰ ਨੂੰ ਸ਼ੁਰੂ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"ਰੀਡਾਇਰੈਕਟ ਦੀ ਉਡੀਕ ਕਰਨ ਦਾ ਸਮਾਂ ਸਮਾਪਤ ਹੋਇਆ"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"ਕੋਈ OSU ਸਰਗਰਮੀ ਨਹੀਂ ਮਿਲੀ"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"ਅਚਾਨਕ SOAP ਦੀ ਸੁਨੇਹੇ ਦੀ ਸਥਿਤੀ"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO ਨੂੰ ਲੱਭਣਾ ਅਸਫਲ ਰਿਹਾ"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA ਸਰਵਰ ਲਈ ਭਰੋਸੇਯੋਗ ਰੂਟ ਨੋਡ ਲੱਭਣਾ ਅਸਫਲ ਰਿਹਾ"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"ਰੇਮੇਡੀਅਸ਼ਨ ਸਰਵਰ ਲਈ ਭਰੋਸੇਯੋਗ ਰੂਟ ਨੋਡ ਲੱਭਣਾ ਅਸਫਲ ਰਿਹਾ"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"ਨੀਤੀ ਸਰਵਰ ਲਈ ਭਰੋਸੇਯੋਗ ਰੂਟ ਨੋਡ ਲੱਭਣਾ ਅਸਫਲ ਰਿਹਾ"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"ਭਰੋਸੇਯੋਗ ਰੂਟ ਸਰਟੀਫਿਕੇਟਾਂ ਨੂੰ ਮੁੜ-ਪ੍ਰਾਪਤ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA ਸਰਵਰ ਲਈ ਭਰੋਸੇਯੋਗ ਰੂਟ ਸਰਟੀਫਿਕੇਟ ਲੱਭਣਾ ਅਸਫਲ ਰਿਹਾ"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint ਸੰਰੂਪਣ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU ਪ੍ਰਦਾਨਕ ਲੱਭਣਾ ਅਸਫਲ ਰਿਹਾ"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"ਕਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"ਕਨੈਕਟ ਹੈ"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU ਸਰਵਰ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU ਸਰਵਰ ਪ੍ਰਮਾਣਿਤ ਕੀਤਾ ਗਿਆ"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU ਸਰਵਰ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"ਸ਼ੁਰੂਆਤੀ SOAP ਦਾ ਵਟਾਂਦਰਾ"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"ਰੀਡਾਇਰੈਕਟ ਜਵਾਬ ਲਈ ਉਡੀਕ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"ਰੀਡਾਇਰੈਕਟ ਜਵਾਬ ਪ੍ਰਾਪਤ ਹੋਇਆ"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"ਦੂਜੇ SOAP ਦਾ ਵਟਾਂਦਰਾ"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"ਤੀਜੇ SOAP ਦਾ ਵਟਾਂਦਰਾ"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"ਭਰੋਸੇਯੋਗ ਰੂਟ ਸਰਟੀਫਿਕੇਟਾਂ ਨੂੰ ਮੁੜ-ਪ੍ਰਾਪਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"ਵਿਵਸਥਾਕਰਨ ਪੂਰਾ ਹੋਇਆ"</string> + <!-- no translation found for osu_opening_provider (5488997661548640424) --> + <skip /> + <!-- no translation found for osu_connect_failed (2187750899158158934) --> + <skip /> + <!-- no translation found for osu_completing_sign_up (9037638564719197082) --> + <skip /> + <!-- no translation found for osu_sign_up_failed (7296159750352873260) --> + <skip /> + <!-- no translation found for osu_sign_up_complete (8207626049093289203) --> + <skip /> <string name="speed_label_very_slow" msgid="1867055264243608530">"ਬਹੁਤ ਹੌਲੀ"</string> <string name="speed_label_slow" msgid="813109590815810235">"ਹੌਲੀ"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ਠੀਕ ਹੈ"</string> @@ -234,8 +211,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"ਸੁਚੇਤ ਰਹੋ"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"ਸਕ੍ਰੀਨ ਚਾਰਜਿੰਗ ਦੇ ਸਮੇਂ ਕਦੇ ਵੀ ਸਲੀਪ ਨਹੀਂ ਹੋਵੇਗੀ"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"ਬਲੂਟੁੱਥ HCI ਸਨੂਪ ਲੌਗ ਨੂੰ ਚਾਲੂ ਕਰੋ"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"ਬਲੂਟੁੱਥ ਪੈਕੇਟ ਕੈਪਚਰ ਕਰੋ। (ਇਹ ਸੈਟਿੰਗ ਬਦਲਣ ਤੋਂ ਬਾਅਦ ਬਲੂਟੁੱਥ ਨੂੰ ਟੌਗਲ ਕਰੋ)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM ਅਣਲਾਕ ਕਰਨਾ"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"ਬੂਟਲੋਡਰ ਨੂੰ ਅਣਲਾਕ ਕੀਤੇ ਜਾਣ ਦੀ ਆਗਿਆ ਦਿਓ"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"ਕੀ OEM ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string> @@ -246,7 +222,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"ਨੈੱਟਵਰਕਿੰਗ"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"ਵਾਇਰਲੈੱਸ ਡਿਸਪਲੇ ਪ੍ਰਮਾਣੀਕਰਨ"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"ਵਾਈ-ਫਾਈ ਵਰਬੋਸ ਲੌਗਿੰਗ ਚਾਲੂ ਕਰੋ"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"ਬੇਤਰਤੀਬਵਾਰ ਕਨੈਕਟ ਕੀਤਾ ਹੋਇਆ MAC ਪਤਾ"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"ਮੋਬਾਈਲ ਡਾਟਾ ਹਮੇਸ਼ਾਂ ਕਿਰਿਆਸ਼ੀਲ"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"ਟੈਦਰਿੰਗ ਹਾਰਡਵੇਅਰ ਐਕਸੈੱਲਰੇਸ਼ਨ"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"ਅਨਾਮ ਬਲੂਟੁੱਥ ਡੀਵਾਈਸਾਂ ਦਿਖਾਓ"</string> @@ -273,7 +248,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"ਵਾਇਰਲੈੱਸ ਡਿਸਪਲੇ ਪ੍ਰਮਾਣੀਕਰਨ ਲਈ ਚੋਣਾਂ ਪ੍ਰਦਰਸ਼ਿਤ ਕਰੋ"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"ਵਾਈ‑ਫਾਈ ਲੌਗਿੰਗ ਪੱਧਰ ਵਧਾਓ, ਵਾਈ‑ਫਾਈ Picker ਵਿੱਚ ਪ੍ਰਤੀ SSID RSSI ਦਿਖਾਓ"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕਾਂ ਨਾਲ ਕਨੈਕਟ ਹੋਣ \'ਤੇ MAC ਪਤਾ ਬੇਤਰਤੀਬਵਾਰ ਚੁਣੋ"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"ਮੀਟਰਬੱਧ ਕੀਤਾ ਗਿਆ"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"ਗੈਰ-ਮੀਟਰਬੱਧ ਕੀਤਾ ਗਿਆ"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"ਲੌਗਰ ਬਫ਼ਰ ਆਕਾਰ"</string> diff --git a/packages/SettingsLib/res/values-pl/arrays.xml b/packages/SettingsLib/res/values-pl/arrays.xml index 6221793dc72b..4364b38a147c 100644 --- a/packages/SettingsLib/res/values-pl/arrays.xml +++ b/packages/SettingsLib/res/values-pl/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Użyj sprawdzania HDCP tylko w przypadku treści chronionych DRM"</item> <item msgid="45075631231212732">"Zawsze używaj sprawdzania HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Wyłączono"</item> + <item msgid="1969681323976948639">"Filtrowanie włączone"</item> + <item msgid="8719029132154020716">"Włączono"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (domyślna)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml index 609ed2a4e538..e2109c8c35b0 100644 --- a/packages/SettingsLib/res/values-pl/strings.xml +++ b/packages/SettingsLib/res/values-pl/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatycznie połączono przez: %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatycznie połączono przez dostawcę ocen jakości sieci"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Połączono przez %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> – <xliff:g id="SSID">%1$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Połączenie przez: <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Dostępne przez %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Kliknij, by skonfigurować"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Kliknij, by się zarejestrować"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Połączono, brak internetu"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Brak internetu"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Musisz się zalogować"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Punkt dostępu jest tymczasowo zajęty"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Połączono przez: %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Dostępna przez: %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Nie udało się nawiązać połączenia"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Nieprawidłowy adres URL serwera OSU"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Nie udało się połączyć z serwerem OSU"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Niepowodzenie weryfikacji przez serwer OSU"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Nieprawidłowy certyfikat serwera OSU"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Udostępnianie zostało przerwane"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Udostępnianie niedostępne"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Nieprawidłowy adres URL serwera OSU"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Nieoczekiwany typ polecenia"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Nieoczekiwany typ komunikatu SOAP"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Nie udało się wymienić komunikatów SOAP"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Nie udało się uruchomić procesu nasłuchującego przekierowań"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Przekroczony limit czasu oczekiwania na przekierowanie"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Brak aktywności OSU"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Nieoczekiwany stan komunikatu SOAP"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Nie można znaleźć PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Nie można znaleźć głównego węzła zaufania dla serwera AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Nie udało się znaleźć głównego węzła zaufania dla serwera naprawczego"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Nie udało się znaleźć głównego węzła zaufania dla serwera zasad"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Nie udało się pobrać głównych certyfikatów zaufania"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Nie udało się znaleźć głównego certyfikatu zaufania dla serwera AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Nie można dodać konfiguracji PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Nie udało się znaleźć dostawcy OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Łączę"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Połączono"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Nawiązuję połączenie z serwerem OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Pomyślna weryfikacja przez serwer OSU"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Połączono z serwerem OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Początkowa wymiana SOAP"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Czekam na odpowiedź przekierowującą"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Odebrano odpowiedź przekierowującą"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Druga wymiana SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Trzecia wymiana SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Pobieram główne certyfikaty zaufania"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Zakończono udostępnianie"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Otwieram: <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Nie udało się połączyć"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Kończę rejestrować…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Nie udało się dokończyć rejestracji. Kliknij, by spróbować ponownie."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Rejestracja zakończona. Łączę…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Bardzo wolna"</string> <string name="speed_label_slow" msgid="813109590815810235">"Wolna"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Pozostaw włączony ekran"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Ekran nie będzie gaszony podczas ładowania telefonu"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Włącz dziennik snoop Bluetooth HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Przechwyć wszystkie pakiety Bluetooth (przełącz Bluetooth po zmianie tego ustawienia)."</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Zdjęcie blokady OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Zezwalaj na odblokowanie programu rozruchowego"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Zezwolić na zdjęcie blokady OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Sieci"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Wyświetlacz bezprzewodowy"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Szczegółowy dziennik Wi-Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Losowe generowanie adresu MAC przy łączeniu"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilna transmisja danych zawsze aktywna"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Akceleracja sprzętowa tetheringu"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Pokaż urządzenia Bluetooth bez nazw"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Nie udało się połączyć"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Pokaż opcje certyfikacji wyświetlacza bezprzewodowego"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Zwiększ poziom rejestrowania Wi‑Fi, pokazuj według RSSI SSID w selektorze Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wygeneruj losowo adres MAC podczas łączenia z siecią Wi‑Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Użycie danych jest mierzone"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Użycie danych nie jest mierzone"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Rozmiary bufora Rejestratora"</string> diff --git a/packages/SettingsLib/res/values-pt-rBR/arrays.xml b/packages/SettingsLib/res/values-pt-rBR/arrays.xml index b8bb5637d741..9e7d040e746b 100644 --- a/packages/SettingsLib/res/values-pt-rBR/arrays.xml +++ b/packages/SettingsLib/res/values-pt-rBR/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Usar a verificação HDCP somente para conteúdo DRM"</item> <item msgid="45075631231212732">"Sempre usar a verificação HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Desativada"</item> + <item msgid="1969681323976948639">"Filtro ativado"</item> + <item msgid="8719029132154020716">"Ativada"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (padrão)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml index ef9e61d47451..19e22e420026 100644 --- a/packages/SettingsLib/res/values-pt-rBR/strings.xml +++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Conectado automaticamente via %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Conectado automaticamente via provedor de avaliação de rede"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado via %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> de <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Conectado via <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Disponível via %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Toque para configurar"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Toque para se inscrever"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Conectada, sem Internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Sem Internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"É necessário fazer login"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Ponto de acesso temporariamente cheio"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Conectado via %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Disponível via %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Falha na conexão"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL do servidor OSU inválido"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Falha na conexão do servidor OSU"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Falha ao validar o servidor OSU"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificado do servidor OSU inválido"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisionamento cancelado"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisionamento indisponível"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL do servidor OSU inválido"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Tipo de comando inesperado"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Tipo de mensagem SOAP inesperado"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Falha na troca de mensagens SOAP"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Falha ao iniciar o listener de redirecionamento"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Tempo limite esgotado ao aguardar redirecionamento"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nenhuma atividade OSU encontrada"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Status de mensagem SOAP inesperado"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Não foi possível encontrar o PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Não foi possível encontrar um nó raiz confiável para o servidor AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Não foi possível encontrar um nó raiz confiável para o servidor de atualizações"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Não foi possível encontrar um nó raiz confiável para o servidor da política"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Falha ao recuperar certificados raiz confiáveis"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Não foi possível encontrar um certificado raiz confiável para o servidor AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Falha ao adicionar a configuração do PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Falha ao localizar um provedor OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Conectando"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Conectado"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Conectando-se ao servidor OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Servidor OSU validado"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Conectado ao servidor OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Troca de SOAP inicial"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Aguardando resposta de redirecionamento"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Resposta de redirecionamento recebida"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Segunda troca de SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Terceira troca de SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Recuperando certificados raiz confiáveis"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisionamento concluído"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Abrindo <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Não foi possível conectar"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Concluindo inscrição…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Não foi possível concluir a inscrição. Toque para tentar novamente."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Inscrição concluída. Conectando…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Muito lenta"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Ok"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Permanecer ativo"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"A tela nunca entrará em suspensão enquanto estiver carregando."</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Ativar registro de rastreamento Bluetooth HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capturar pacotes de Bluetooth. Ative o Bluetooth depois de alterar essa configuração."</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueio de OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir que o bootloader seja desbloqueado"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Permitir desbloqueio de OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certificação de Display sem fio"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Ativar registro extenso de Wi-Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Escolha aleatória de MAC conectado"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Dados móveis sempre ativos"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleração de hardware de tethering"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sem nomes"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Não foi possível conectar"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opções de certificação de Display sem fio"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nível de registro do Wi-Fi; mostrar conforme o RSSI de SSID na Seleção de Wi-Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Escolher o endereço MAC de forma aleatória quando estiver conectado a redes Wi-Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Limitada"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Ilimitada"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Tamanhos de buffer de logger"</string> diff --git a/packages/SettingsLib/res/values-pt-rPT/arrays.xml b/packages/SettingsLib/res/values-pt-rPT/arrays.xml index b5803178fbaa..ac170caba375 100644 --- a/packages/SettingsLib/res/values-pt-rPT/arrays.xml +++ b/packages/SettingsLib/res/values-pt-rPT/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Utilizar a verificação HDCP para conteúdo DRM apenas"</item> <item msgid="45075631231212732">"Utilizar sempre a verificação HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Desativado"</item> + <item msgid="1969681323976948639">"Filtrado ativado"</item> + <item msgid="8719029132154020716">"Ativado"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (predefinição)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml index bb1dcc47160f..1f1072c08ffa 100644 --- a/packages/SettingsLib/res/values-pt-rPT/strings.xml +++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Ligado automaticamente através de %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Ligado automaticamente através do fornecedor de classificação de rede"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Ligado através de %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> de <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Ligado via <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Disponível através de %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Toque para configurar"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Toque para se inscrever"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Ligado, sem Internet."</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Sem Internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"É necessário iniciar sessão"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Ponto de acesso temporariamente cheio"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Ligado através de %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Disponível através de %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Falha na ligação"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL do servidor OSU inválido"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Falha ao ligar ao servidor OSU"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Falha ao validar o servidor OSU"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificado do servidor OSU inválido"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Aprovisionamento interrompido"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Aprovisionamento não disponível"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL do servidor OSU inválido"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Tipo de comando inesperado"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Tipo de mensagem SOAP inesperado"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Falha ao trocar mensagens SOAP"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Falha ao iniciar o redirecionamento do listener"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"O tempo limite foi excedido ao aguardar o redirecionamento"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nenhuma atividade do OSU encontrada"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Estado da mensagem SOAP inesperado"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Falha ao localizar o PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Falha ao localizar um nó raiz fidedigno para o servidor AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Falha ao localizar um nó raiz fidedigno para o servidor de soluções"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Falha ao localizar um nó raiz fidedigno para o servidor de políticas"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Falha ao obter certificados de raiz fidedignos"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Falha ao localizar um certificado de raiz fidedigno para o servidor AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Falha ao adicionar a configuração PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Falha ao localizar um fornecedor de OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"A ligar…"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Ligado"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"A ligar ao servidor OSU…"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Servidor OSU validado"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Ligado ao servidor OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Troca SOAP inicial"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"A aguardar a resposta de redirecionamento…"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Resposta de redirecionamento recebida"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Segunda troca SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Terceira troca SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"A obter certificados de raiz fidedignos…"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Aprovisionamento concluído"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"A abrir <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Não foi possível estabelecer ligação"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"A concluir a inscrição…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Não foi possível concluir a inscrição. Toque para tentar novamente."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Inscrição concluída. A ligar…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Muito lenta"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Manter ativo"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"O ecrã nunca entrará em suspensão durante o carregamento"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Ativar registo de monit. Bluetooth HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capturar os pacotes Bluetooth (ative/desative o Bluetooth após alterar esta definição)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueio de OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir o desbloqueio do carregador de arranque"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Pretende permitir o desbloqueio de OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certificação de display sem fios"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Ativar o registo verboso de Wi-Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Seleção aleatória do MAC ligado"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Dados móveis sempre ativos"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleração de hardware para ligação (à Internet) via telemóvel"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sem nomes"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Não foi possível estabelecer ligação"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opções da certificação de display sem fios"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nível de reg. de Wi-Fi, mostrar por RSSI de SSID no Selec. de Wi-Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Selecionar aleatoriamente o endereço MAC quando estabelecer ligação a redes Wi‑Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Acesso limitado"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Acesso ilimitado"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Tamanhos da memória intermédia do registo"</string> diff --git a/packages/SettingsLib/res/values-pt/arrays.xml b/packages/SettingsLib/res/values-pt/arrays.xml index b8bb5637d741..9e7d040e746b 100644 --- a/packages/SettingsLib/res/values-pt/arrays.xml +++ b/packages/SettingsLib/res/values-pt/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Usar a verificação HDCP somente para conteúdo DRM"</item> <item msgid="45075631231212732">"Sempre usar a verificação HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Desativada"</item> + <item msgid="1969681323976948639">"Filtro ativado"</item> + <item msgid="8719029132154020716">"Ativada"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (padrão)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml index ef9e61d47451..19e22e420026 100644 --- a/packages/SettingsLib/res/values-pt/strings.xml +++ b/packages/SettingsLib/res/values-pt/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Conectado automaticamente via %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Conectado automaticamente via provedor de avaliação de rede"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectado via %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> de <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Conectado via <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Disponível via %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Toque para configurar"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Toque para se inscrever"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Conectada, sem Internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Sem Internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"É necessário fazer login"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Ponto de acesso temporariamente cheio"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Conectado via %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Disponível via %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Falha na conexão"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL do servidor OSU inválido"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Falha na conexão do servidor OSU"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Falha ao validar o servidor OSU"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificado do servidor OSU inválido"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Provisionamento cancelado"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Provisionamento indisponível"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL do servidor OSU inválido"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Tipo de comando inesperado"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Tipo de mensagem SOAP inesperado"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Falha na troca de mensagens SOAP"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Falha ao iniciar o listener de redirecionamento"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Tempo limite esgotado ao aguardar redirecionamento"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nenhuma atividade OSU encontrada"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Status de mensagem SOAP inesperado"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Não foi possível encontrar o PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Não foi possível encontrar um nó raiz confiável para o servidor AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Não foi possível encontrar um nó raiz confiável para o servidor de atualizações"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Não foi possível encontrar um nó raiz confiável para o servidor da política"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Falha ao recuperar certificados raiz confiáveis"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Não foi possível encontrar um certificado raiz confiável para o servidor AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Falha ao adicionar a configuração do PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Falha ao localizar um provedor OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Conectando"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Conectado"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Conectando-se ao servidor OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Servidor OSU validado"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Conectado ao servidor OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Troca de SOAP inicial"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Aguardando resposta de redirecionamento"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Resposta de redirecionamento recebida"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Segunda troca de SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Terceira troca de SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Recuperando certificados raiz confiáveis"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Provisionamento concluído"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Abrindo <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Não foi possível conectar"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Concluindo inscrição…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Não foi possível concluir a inscrição. Toque para tentar novamente."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Inscrição concluída. Conectando…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Muito lenta"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lenta"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Ok"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Permanecer ativo"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"A tela nunca entrará em suspensão enquanto estiver carregando."</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Ativar registro de rastreamento Bluetooth HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Capturar pacotes de Bluetooth. Ative o Bluetooth depois de alterar essa configuração."</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Desbloqueio de OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permitir que o bootloader seja desbloqueado"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Permitir desbloqueio de OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Redes"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certificação de Display sem fio"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Ativar registro extenso de Wi-Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Escolha aleatória de MAC conectado"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Dados móveis sempre ativos"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Aceleração de hardware de tethering"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Mostrar dispositivos Bluetooth sem nomes"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Não foi possível conectar"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Mostrar opções de certificação de Display sem fio"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Aumentar o nível de registro do Wi-Fi; mostrar conforme o RSSI de SSID na Seleção de Wi-Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Escolher o endereço MAC de forma aleatória quando estiver conectado a redes Wi-Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Limitada"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Ilimitada"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Tamanhos de buffer de logger"</string> diff --git a/packages/SettingsLib/res/values-ro/arrays.xml b/packages/SettingsLib/res/values-ro/arrays.xml index c7d0e2f36d10..28ae1616c204 100644 --- a/packages/SettingsLib/res/values-ro/arrays.xml +++ b/packages/SettingsLib/res/values-ro/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Utilizează verificarea HDCP numai pentru conținut DRM"</item> <item msgid="45075631231212732">"Utilizează întotdeauna verificarea HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Dezactivat"</item> + <item msgid="1969681323976948639">"Este activat Filtrat"</item> + <item msgid="8719029132154020716">"Activat"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (prestabilit)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml index a1298c9e1d92..7fa75a8862cf 100644 --- a/packages/SettingsLib/res/values-ro/strings.xml +++ b/packages/SettingsLib/res/values-ro/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Conectată automat prin %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Conectată automat prin furnizor de evaluări ale rețelei"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Conectată prin %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> de la <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Conectat prin <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Disponibilă prin %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Atingeți pentru a configura"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Atingeți pentru a vă înscrie"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Conectată, fără internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Fără conexiune la internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Trebuie să vă conectați"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Punctul de acces este temporar plin"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Conectată prin %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Disponibilă prin %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Conectare eșuată"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL invalid pentru serverul OSU"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Conectarea la serverul OSU a eșuat"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Validarea serverului OSU a eșuat"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certificat nevalid pentru serverul OSU"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Asigurarea accesului a fost întreruptă"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Asigurarea accesului nu este disponibilă"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL invalid pentru serverul OSU"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Tip de comandă neprevăzut"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Tip de mesaj SOAP neprevăzut"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Schimbul de mesaje SOAP a eșuat"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"„Listenerul” redirecționării nu a pornit"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"A expirat așteptând redirecționarea"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nu s-a găsit nicio activitate OSU"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Status mesaj SOAP neprevăzut"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Nu a fost găsit PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Certificatul rădăcină de certificare pentru serverul AAA nu a fost găsit"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Nodul rădăcină de certificare pentru serverul de remediere nu a fost găsit"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Nodul rădăcină de certificare pentru serverul de politici nu a fost găsit"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Certificatele rădăcină de certificare nu s-au putut prelua"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Certificatul rădăcină de certificare pentru serverul AAA nu a fost găsit"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Configurarea PassPoint nu a fost adăugată"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Nu a fost găsit niciun furnizor OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Se conectează"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Conectat"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Se conectează la serverul OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Server OSU validat"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Conectat la serverul OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Schimb SOAP inițial"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Se așteaptă răspunsul redirecționării"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Răspunsul redirecționat a fost primit"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Al doilea schimb SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Al treilea schimb SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Se preiau certificatele rădăcină de certificare"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Asigurarea accesului finalizată"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Se deschide <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Nu s-a putut conecta"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Se finalizează înscrierea…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Nu s-a putut finaliza înscrierea. Atingeți pentru a încerca din nou."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Înscrierea a fost finalizată. Se conectează…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Foarte lentă"</string> <string name="speed_label_slow" msgid="813109590815810235">"Lentă"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Bine"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Activ permanent"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Ecranul nu va fi inactiv pe durata încărcării"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Activați jurnalul de examinare HCI Bluetooth"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Înregistrați pachetele Bluetooth. (Comutați Bluetooth după modificarea setării)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Deblocarea OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Permiteți deblocarea bootloaderului"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Permiteți deblocarea OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Conectare la rețele"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certificare Ecran wireless"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Înregistrare prin Wi-Fi de volume mari de date"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Afișare aleatorie a dispozitivului MAC conectat"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Date mobile permanent active"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Accelerare hardware pentru tethering"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Afișați dispozitivele Bluetooth fără nume"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Nu s-a putut conecta"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Afișați opțiunile pentru certificarea Ecran wireless"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Măriți niv. de înr. prin Wi‑Fi, afișați în fcț. de SSID RSSI în Selectorul Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Afișează aleatoriu adresa MAC când te conectezi la rețele Wi‑Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Contorizată"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Necontorizată"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Dimensiunile tamponului jurnalului"</string> diff --git a/packages/SettingsLib/res/values-ru/arrays.xml b/packages/SettingsLib/res/values-ru/arrays.xml index bf27fc975845..cca30fb96422 100644 --- a/packages/SettingsLib/res/values-ru/arrays.xml +++ b/packages/SettingsLib/res/values-ru/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Использовать проверку HDCP только для DRM-контента"</item> <item msgid="45075631231212732">"Всегда использовать проверку HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Отключено"</item> + <item msgid="1969681323976948639">"Включены фильтры"</item> + <item msgid="8719029132154020716">"Включено"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (по умолчанию)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml index c71d29b90fba..6cdfd3c3f318 100644 --- a/packages/SettingsLib/res/values-ru/strings.xml +++ b/packages/SettingsLib/res/values-ru/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Автоматически подключено к %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Автоматически подключено через автора рейтинга сетей"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Подключено к %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g>, <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Подключено через приложение \"<xliff:g id="NAME">%1$s</xliff:g>\"."</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Доступно через %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Нажмите, чтобы настроить"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Нажмите, чтобы зарегистрироваться"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Подключено, без доступа к Интернету"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Нет подключения к Интернету"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Требуется выполнить вход."</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"К точке доступа подключено слишком много устройств"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Подключено к %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Доступно через %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Ошибка подключения"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Недействительный URL сервера OSU"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Не удалось подключиться к серверу OSU"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Не удалось выполнить проверку сервера OSU"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Недействительный сертификат сервера OSU"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Синхронизация прервана"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Синхронизация недоступна"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Недействительный URL сервера OSU"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Неизвестный тип команды"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Неизвестный тип сообщения SOAP"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Не удалось провести обмен сообщениями SOAP"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Не удалось запустить приемник обратных вызовов"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Превышено время ожидания"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Действий OSU не обнаружено"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Неизвестный статус сообщения SOAP"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Не удалось найти PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Не удалось найти доверенный корневой узел сервера AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Не удалось найти доверенный корневой узел сервера исправлений"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Не удалось найти доверенный корневой узел сервера правил"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Не удалось получить доверенные корневые сертификаты"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Не удалось найти доверенный корневой сертификат для сервера AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Не удалось добавить настройки Passpoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Не удалось найти поставщика OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Подключение…"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Подключено"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Подключение к серверу OSU…"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Сервер OSU проверен"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Соединение с сервером OSU установлено"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Первый обмен по SOAP"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Ожидание ответа для перенаправления…"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Ответ получен"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Второй обмен по SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Третий обмен по SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Получение доверенных корневых сертификатов…"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Синхронизация завершена"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Открытие <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>…"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Не удалось подключиться."</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Завершение регистрации…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Не удалось завершить регистрацию. Нажмите, чтобы повторить попытку."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Регистрация завершена. Подключение…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Очень медленная"</string> <string name="speed_label_slow" msgid="813109590815810235">"Медленная"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ОК"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Не выключать экран"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Во время зарядки экран будет всегда включен"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Включить журнал HCI Bluetooth"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Сохранять все пакеты Bluetooth (перезапустите Bluetooth после изменения этой настройки)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Заводская разблокировка"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Разрешить разблокировку загрузчика ОС"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Разрешить заводскую разблокировку?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Сети"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Серт. беспроводн. мониторов"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Подробный журнал Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Создание случайных MAC-адресов при подключении по Wi-Fi"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Не отключать мобильный Интернет"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Аппаратное ускорение в режиме модема"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Показывать Bluetooth-устройства без названий"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Ошибка подключения"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Показывать параметры сертификации беспроводных мониторов"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"При выборе Wi‑Fi указывать в журнале RSSI для каждого SSID"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Генерировать случайные MAC-адреса при подключении к сетям Wi-Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Сеть с тарификацией трафика"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Сеть без тарификации трафика"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Размер буфера журнала"</string> diff --git a/packages/SettingsLib/res/values-si/arrays.xml b/packages/SettingsLib/res/values-si/arrays.xml index 6d8e15b3790c..4cd0b60f436a 100644 --- a/packages/SettingsLib/res/values-si/arrays.xml +++ b/packages/SettingsLib/res/values-si/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"DRM අන්තර්ගත සඳහා පමණක් HDCP පරික්ෂාව භාවිතා කරන්න"</item> <item msgid="45075631231212732">"සැමවිටම HDCP පිරික්සුම භාවිතා කරන්න"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"අබලයි"</item> + <item msgid="1969681323976948639">"සබල පෙරහන් කළ"</item> + <item msgid="8719029132154020716">"සබලයි"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (පෙරනිමි)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml index 1daffd92f155..f85289c64527 100644 --- a/packages/SettingsLib/res/values-si/strings.xml +++ b/packages/SettingsLib/res/values-si/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s හරහා ස්වයංක්රියව සම්බන්ධ විය"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"ජාල ශ්රේණිගත සපයන්නා හරහා ස්වයංක්රියව සම්බන්ධ විය"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s හරහා සම්බන්ධ විය"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> මඟින් <xliff:g id="SSID">%1$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> හරහා සම්බන්ධයි"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s හරහා ලබා ගැනීමට හැකිය"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"පිහිටුවීමට තට්ටු කරන්න"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"ලියාපදිංචි වීමට තට්ටු කරන්න"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"සම්බන්ධයි, අන්තර්ජාලය නැත"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"අන්තර්ජාලය නැත"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"පිරීම අවශ්යයි"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"ප්රවේශ ලක්ෂ්ය තාවකාලිකව පිරී ඇත"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s හරහා සම්බන්ධ විය"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s හරහා ලබා ගැනීමට හැකිය"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"සබැඳුම අසමත් විය"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"අවලංගු OSU සේවාදායක URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU සේවාදායක සබැඳුම අසමත් විය"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU සේවාදායකය වලංගුකරණය අසමත් විය"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"අවලංගු OSU සේවාදායක සහතිකය"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"ප්රතිපාදනය රෝධනය කෙරිණි"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"ප්රතිපාදනය නොමැත"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"අවලංගු OSU සේවාදායක URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"අනපේක්ෂිත විධාන වර්ගය"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"අනපේක්ෂිත SOAP පණිවිඩ වර්ගය"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP පණිවිඩ හුවමාරුව අසමත් විය"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"ප්රතියොමු සවන් දෙන්නා ඇරඹීමට අසමත් විය"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"ප්රතියොමුව සඳහා රැඳීම් කාලය ඉක්මවා ඇත"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU ක්රියාකාරකමක් හමු නොවිණි"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"අනපේක්ෂිත SOAP පණිවිඩ තත්ත්වය"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO සොයා ගැනීමට අසමත් විය"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA සේවාදායකය සඳහා විශ්වාසී මූල නෝඩුව සොයා ගැනීමට අසමත් විය"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"ප්රතිව්යවධාන සේවාදායකය සඳහා විශ්වාසී මූල නෝඩුව සොයා ගැනීමට අසමත් විය"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"ප්රතිපත්ති සේවාදායකය සඳහා විශ්වාසී මූල නෝඩුව සොයා ගැනීමට අසමත් විය"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"විශ්වාසී මූල සහතික ලබා ගැනීමට අසමත් විය"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA සේවාදායකය සඳහා විශ්වාසී මූල සහතිකය සොයා ගැනීමට අසමත් විය"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint වින්යාසය එක් කිරීමට අසමත් විය"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU සපයන්නෙකු සොයා ගැනීමට අසමත් විය"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"සබැඳෙමින්"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"සම්බන්ධයි"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU සේවාදායකයට සබැඳෙමින්"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU සේවාදායකය වලංගු කෙරිණි"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU සේවාදායකයට සම්බන්ධිතයි"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"ආරම්භක SOAP හුවමාරුව"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"ප්රතියොමු ප්රතිචාරය සඳහා රැඳෙමින්"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"ප්රතියොමු ප්රතිචාරය ලැබුණි"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"දෙවන SOAP හුවමාරුව"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"තුන්වන SOAP හුවමාරුව"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"විශ්වාසී මූල සහතික ලබා ගනිමින්"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"ප්රතිපාදනය සම්පූර්ණයි"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> විවෘත කරමින්"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"සබැඳීමට නොහැකි විය"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"ලියාපදිංචිය සම්පූර්ණ කරමින්…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"ලියාපදිංචිය සම්පූර්ණ කළ නොහැකි විය. නැවත උත්සාහ කිරීමට තට්ටු කරන්න."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"ලියාපදිංචිය සම්පූර්ණයි. සබැඳෙමින්…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"ඉතා මන්දගාමී"</string> <string name="speed_label_slow" msgid="813109590815810235">"මන්දගාමී"</string> <string name="speed_label_okay" msgid="2331665440671174858">"හරි"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"අවදියෙන් සිටින්න"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"ආරෝපණය වන අතර තුර තීරය නිද්රාවට නොයනු ඇත"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"බ්ලූටූත් HCI ස්නුප් ලොගය සබල කරන්න"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"බ්ලූටූත් පැකට් ග්රහණ කරන්න. (මෙම සැකසීම වෙනස් කළ පසු බ්ලූටූත් ටොගල් කරන්න)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM අඟුල ඇරීම"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"බුට්ලොඩරයට අගුළු ඇර තිබීමට ඉඩ දෙන්න"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM අඟුල ඇරීමට ඉඩ දෙන්න?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"ජාලකරණය"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"නොරැහැන් සංදර්ශක සහතිකය"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"විස්තරාත්මක Wi‑Fi ලොග් කිරීම සබල කරන්න"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"සම්බන්ධිත MAC සසම්භාවීකරණය"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"ජංගම දත්ත සැමවිට ක්රියාකාරීය"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"ටෙදරින් දෘඪාංග ත්වරණය"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"නම් නොමැති බ්ලූටූත් උපාංග පෙන්වන්න"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"සම්බන්ධ වීමට නොහැකි විය"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"නොරැහැන් සංදර්ශක සහතිකය සඳහා විකල්ප පෙන්වන්න"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi ලොග් මට්ටම වැඩි කරන්න, Wi‑Fi තෝරනයෙහි SSID RSSI අනුව පෙන්වන්න"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi-Fi ජාලවලට සම්බන්ධ වීමේදී MAC ලිපිනය සසම්භාවීකරණය"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"මනිනු ලැබේ"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"මනින්නේ නැත"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"ලෝගයේ අන්තරාවක ප්රමාණය"</string> diff --git a/packages/SettingsLib/res/values-sk/arrays.xml b/packages/SettingsLib/res/values-sk/arrays.xml index dfa6994b5a66..8a81a943b94e 100644 --- a/packages/SettingsLib/res/values-sk/arrays.xml +++ b/packages/SettingsLib/res/values-sk/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Použiť kontrolu HDCP len pre obsah DRM"</item> <item msgid="45075631231212732">"Vždy používať kontrolu HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Deaktivované"</item> + <item msgid="1969681323976948639">"Aktivované filtrované"</item> + <item msgid="8719029132154020716">"Aktivované"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (predvolené)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml index e6047bbfdc10..eae5be7952c3 100644 --- a/packages/SettingsLib/res/values-sk/strings.xml +++ b/packages/SettingsLib/res/values-sk/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automaticky pripojené prostredníctvom %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automaticky pripojené prostredníctvom poskytovateľa hodnotenia siete"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Pripojené prostredníctvom %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> – <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Pripojené prostredníctvom siete <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"K dispozícii prostredníctvom %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Klepnutím nastavíte"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Prihláste sa klepnutím"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Pripojené, žiadny internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Žiadny internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Vyžaduje sa prihlásenie"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Prístupový bod je dočasne plný"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Pripojené prostredníctvom operátora %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"K dispozícii prostredníctvom operátora %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Nepodarilo sa pripojiť"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Neplatná webová adresa servera OSU"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Pripojenie servera OSU zlyhalo"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Server OSU sa nepodarilo overiť"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Neplatný certifikát servera OSU"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Údržba bolo prerušená"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Údržba nie je k dispozícii"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Neplatná webová adresa servera OSU"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Neočakávaný typ príkazu"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Neočakávaný typ správy SOAP"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Výmena správ SOAP sa nepodarila"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Prijímač presmerovania sa nespustil"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Časový limit čakania na presmerovanie vypršal"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nenašla sa žiadna aktivita OSU"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Neočakávaný stav správy SOAP"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Objekt PPS-MO sa nenašiel"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Nepodarilo sa nájsť dôveryhodný koreňový uzol pre server AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Nepodarilo sa nájsť dôveryhodný koreňový uzol pre server opráv"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Nepodarilo sa nájsť dôveryhodný koreňový uzol pre server pravidiel"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Nepodarilo sa načítať dôveryhodné koreňové certifikáty"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Nepodarilo sa nájsť dôveryhodný koreňový certifikát pre server AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Konfiguráciu PassPoint sa nepodarilo pridať"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Poskytovateľ OSU sa nenašiel"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Pripája sa"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Pripojené"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Pripája sa k serveru OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Server OSU bol overený"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Pripojené k serveru OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Počiatočná výmena SOAP"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Čaká sa na odpoveď presmerovania"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Bola prijatá odpoveď presmerovania"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Druhá výmena SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Tretia výmena SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Načítavajú sa dôveryhodné koreňové certifikáty"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Poskytovanie bolo dokončené"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Otvára sa <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Nepodarilo sa pripojiť"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Dokončuje sa registrácia…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Registráciu sa nepodarilo dokončiť. Klepnutím to skúste znova."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registrácia je dokončená. Pripája sa…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Veľmi nízka"</string> <string name="speed_label_slow" msgid="813109590815810235">"Nízka"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Nevypínať obrazovku"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Obrazovka sa pri nabíjaní neprepne do režimu spánku"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Povoliť denník Bluetooth HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Zachytávať pakety rozhrania Bluetooth (Prepnúť Bluetooth po zmene tohto nastavenia.)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Odblokovať OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Povoliť odblokovanie ponuky bootloader"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Povoliť odblokovanie OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Siete"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certifikácia bezdrôtového zobrazenia"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Podrobné denníky Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Randomizácia pripojených adries MAC"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobilné dáta ponechať vždy aktívne"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardvérová akcelerácia tetheringu"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Zobrazovať zariadenia Bluetooth bez názvov"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Nepodarilo sa pripojiť"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Zobraziť možnosti certifikácie bezdrôtového zobrazenia"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Zvýšiť úroveň denníkov Wi‑Fi, zobrazovať podľa SSID RSSI pri výbere siete Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Randomizovať adresu MAC pri pripájaní k sieťam Wi-Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"S meraním dát"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Bez merania dát"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Vyrovnávacia pamäť nástroja denníkov"</string> diff --git a/packages/SettingsLib/res/values-sl/arrays.xml b/packages/SettingsLib/res/values-sl/arrays.xml index fdadbff455d8..62a4ff4eb18f 100644 --- a/packages/SettingsLib/res/values-sl/arrays.xml +++ b/packages/SettingsLib/res/values-sl/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Preverjanje HDCP uporabi samo za vsebino DRM"</item> <item msgid="45075631231212732">"Vedno uporabi preverjanje HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Onemogočeno"</item> + <item msgid="1969681323976948639">"Omogočeno filtrirano"</item> + <item msgid="8719029132154020716">"Omogočeno"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (privzeto)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml index 3099f12e079b..bef9a3e5aadd 100644 --- a/packages/SettingsLib/res/values-sl/strings.xml +++ b/packages/SettingsLib/res/values-sl/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Samodejno vzpostavljena povezava prek: %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Samodejno vzpostavljena povezava prek ponudnika ocenjevanja omrežij"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Vzpostavljena povezava prek: %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> zagotavlja <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Povezava vzpostavljena prek omrežja <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Na voljo prek: %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Dotaknite se za nastavitev"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Dotaknite se, če se želite registrirati"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Vzpostavljena povezava, brez interneta"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Brez internetne povezave"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Zahtevana je prijava"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Dostopna točka je trenutno zasedena"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Vzpostavljena povezava prek: %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Na voljo prek: %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Vzpostavitev povezave ni uspela"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Neveljaven URL strežnika OSU"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Vzpostavitev povezave s strežnikom OSU ni uspela"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Preverjanje veljavnosti strežnika OSU ni uspelo"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Neveljavno potrdilo strežnika OSU"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Omogočanje uporabe je preklicano"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Omogočanje uporabe ni na voljo"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Neveljaven URL strežnika OSU"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Nepričakovana vrsta ukaza"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Nepričakovana vrsta sporočila SOAP"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Izmenjava sporočila SOAP ni uspela"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Zagon prisluškovalca preusmeritev ni uspel"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Časovna omejitev čakanja na preusmeritev je potekla"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Najdena ni bila nobena aktivnost OSU"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Nepričakovano stanje sporočila SOAP"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO ni bilo mogoče najti"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Zaupanja vrednega korenskega vozlišča za strežnik AAA ni bilo mogoče najti"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Zaupanja vrednega korenskega vozlišča za strežnik za odpravljanje težav ni bilo mogoče najti"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Zaupanja vrednega korenskega vozlišča za strežnik pravilnikov ni bilo mogoče najti"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Zaupanja vrednih korenskih potrdil ni bilo mogoče pridobiti"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Zaupanja vrednega korenskega potrdila za strežnik AAA ni bilo mogoče najti"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Konfiguracije PassPoint ni bilo mogoče dodati"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Ponudnika OSU ni bilo mogoče najti"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Vzpostavljanje povezave"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Povezava je vzpostavljena"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Vzpostavljanje povezave s strežnikom OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Strežnik OSU je preverjen"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Povezava s strežnikom OSU je vzpostavljena"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Začetna izmenjava SOAP"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Čakanje na odgovor za preusmeritev"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Prejet je odgovor za preusmeritev"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Druga izmenjava SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Tretja izmenjava SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Pridobivanje zaupanja vrednih korenskih potrdil"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Omogočanje uporabe je končano"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Odpiranje ponudnika <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Povezave ni bilo mogoče vzpostaviti"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Dokončevanje registracije …"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Registracije ni bilo mogoče dokončati. Če želite poskusiti znova, se dotaknite."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registracija je končana. Povezovanje …"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Zelo počasna"</string> <string name="speed_label_slow" msgid="813109590815810235">"Počasna"</string> <string name="speed_label_okay" msgid="2331665440671174858">"V redu"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Brez zaklepanja"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Med polnjenjem se zaslon ne bo nikoli zaklenil"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Omogoči zajem dnevnika Bluetooth HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Zajemanje paketov Bluetooth. (po spremembi te nastavitve preklopite Bluetooth)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Odklepanje OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Dovoli odklepanje zagonskega nalagalnika"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Želite omogočiti odklepanje OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Omrežja"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Potrdilo brezžičnega zaslona"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Omogoči podrob. zapis. dnevnika za Wi-Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Dodelitev naključnega naslova MAC ob vzpostavitvi povezave"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Prenos podatkov v mobilnem omrežju je vedno aktiven"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Strojno pospeševanje za internetno povezavo prek mobilnega telefona"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Prikaži naprave Bluetooth brez imen"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Povezave ni bilo mogoče vzpostaviti"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Pokaži možnosti za potrdilo brezžičnega zaslona"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Povečaj raven zapis. dnev. za Wi-Fi; v izbir. Wi‑Fi-ja pokaži glede na SSID RSSI"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Dodelitev naključnega naslova MAC pri povezovanju z omrežji Wi‑Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Z omejenim prenosom podatkov"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Z neomejenim prenosom podatkov"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Velikosti medpomn. zapisov. dnevnika"</string> diff --git a/packages/SettingsLib/res/values-sq/arrays.xml b/packages/SettingsLib/res/values-sq/arrays.xml index 3128eb7954c7..4dab74c04245 100644 --- a/packages/SettingsLib/res/values-sq/arrays.xml +++ b/packages/SettingsLib/res/values-sq/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Përdor kontrollin e HDCP-së vetëm për përmbajtjet DRM"</item> <item msgid="45075631231212732">"Përdor gjithmonë kontrollin e HDCP-së"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Joaktiv"</item> + <item msgid="1969681323976948639">"Të aktivizuara të filtruara"</item> + <item msgid="8719029132154020716">"Aktiv"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (I parazgjedhur)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml index 6716cfc3488b..8bb67f9a348f 100644 --- a/packages/SettingsLib/res/values-sq/strings.xml +++ b/packages/SettingsLib/res/values-sq/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Lidhur automatikisht përmes %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Lidhur automatikisht nëpërmjet ofruesit të vlerësimit të rrjetit"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"E lidhur përmes %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> nga <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Lidhur përmes <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"E mundshme përmes %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Trokit për ta konfiguruar"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Trokit për t\'u regjistruar"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"U lidh, por nuk ka internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Nuk ka internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Kërkohet identifikimi"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pika e qasjes është përkohësisht plot"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"E lidhur përmes %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"E disponueshme përmes %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Lidhja dështoi"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL e pavlefshme e serverit të OSU-së"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Lidhja e serverit të OSU-së dështoi"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Verifikimi i serverit të OSU-së dështoi"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Certifikatë e pavlefshme e serverit të OSU-së"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Përgatitja u ndërpre"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Përgatitja nuk ofrohet"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL e pavlefshme e serverit të OSU-së"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Lloj i papritur komande"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Lloji i papritur i mesazhit SOAP"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Mesazhi i shkëmbimit të SOAP-it dështoi"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Dështoi nisja e dëgjuesit të ridrejtimit"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Pritja për ridrejtim skadoi"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Nuk u gjet aktivitet i OSU-së"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Status i papritur i mesazhit të SOAP-it"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Dështoi gjetja e PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Dështoi gjetja e nyjës rrënjë të besuar për serverin e AAA-së"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Dështoi gjetja e nyjës rrënjë të besuar për serverin e zgjidhjes"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Dështoi gjetja e nyjës rrënjë të besuar për serverin e politikës"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Dështoi marrja e certifikatave rrënjë të besuara"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Dështoi gjetja e certifikatës rrënjë të besuar për serverin e AAA-së"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Dështoi shtimi i konfigurimit të PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Dështoi gjetja e një ofruesi të OSU-së"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Po lidhet"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Lidhur"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Po lidhe me serverin e OSU-së"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Serveri i OSU-së u verifikua"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Lidhur me serverin e OSU-së"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Shkëmbimi fillestar i SOAP-it"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Në pritje të përgjigjes së ridrejtimit"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"U mor përgjigje ridrejtimi"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Shkëmbimi i dytë i SOAP-it"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Shkëmbimi i tretë i SOAP-it"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Po merr certifikatat rrënjë të besuara"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Përgatitja përfundoi"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Po hapet <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Nuk mund të lidhej"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Po përfundon regjistrimin…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Regjistrimi nuk mund të përfundonte. Trokit për të provuar përsëri."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Regjistrimi përfundoi. Po lidhet…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Shumë e ulët"</string> <string name="speed_label_slow" msgid="813109590815810235">"E ngadaltë"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Në rregull"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Qëndro zgjuar"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Ekrani nuk do të kalojë asnjëherë në gjendje gjumi gjatë ngarkimit"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Aktivizo regjistrin testues të paketave HCI të Bluetooth-it"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Regjistro paketat e Bluetooth-it. (Ndrysho Bluetooth-in pas ndryshimit të këtij cilësimi)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Shkyçja e OEM-së"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Lejo shkyçjen e ngarkimit të sistemit"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Të lejohet shkyçja e OEM-së?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Rrjetet"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certifikimi i ekranit valor"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Aktivizo hyrjen Wi-Fi Verbose"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Zgjedhja e rastësishme e adresave MAC të lidhura"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Të dhënat celulare gjithmonë aktive"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Përshpejtimi i harduerit për ndarjen e lidhjes (internet)"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Shfaq pajisjet me Bluetooth pa emra"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Nuk mund të lidhej"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Shfaq opsionet për certifikimin e ekranit valor"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Rrit nivelin regjistrues të Wi‑Fi duke shfaqur SSID RSSI-në te Zgjedhësi i Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Zgjidh rastësisht adresën MAC kur lidhesh me rrjete Wi‑Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Me matje"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Pa matje"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Madhësitë e regjistruesit"</string> diff --git a/packages/SettingsLib/res/values-sr/arrays.xml b/packages/SettingsLib/res/values-sr/arrays.xml index b735b478474e..3ed9cd933c51 100644 --- a/packages/SettingsLib/res/values-sr/arrays.xml +++ b/packages/SettingsLib/res/values-sr/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Користи HDCP проверу само за DRM садржај"</item> <item msgid="45075631231212732">"Увек користи HDCP проверу"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Онемогућено"</item> + <item msgid="1969681323976948639">"Омогућено филтрирано"</item> + <item msgid="8719029132154020716">"Омогућено"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (подразумевано)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml index 028560514836..4378a463c839 100644 --- a/packages/SettingsLib/res/values-sr/strings.xml +++ b/packages/SettingsLib/res/values-sr/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Аутоматски повезано преко %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Аутоматски повезано преко добављача оцене мреже"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Веза је успостављена преко приступне тачке %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> – <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Повезано преко: <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Доступна је преко приступне тачке %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Додирните да бисте подесили"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Додирните да бисте се регистровали"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Веза је успостављена, нема интернета"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Нема интернета"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Треба да се пријавите"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Приступна тачка је привремено заузета"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Повезано преко %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Доступно преко %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Повезивање није успело"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Неважећи URL OSU сервера"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Повезивање са OSU сервером није успело"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Потврда OSU сервера није успела"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Неважећи сертификат OSU сервера"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Додела је отказана"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Додела није доступна"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Неважећи URL OSU сервера"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Неочекивани тип команде"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Неочекивани тип SOAP поруке"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Размена SOAP порука није успела"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Покретање обрађивача преусмеравања није успело"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Време чекања преусмеравања је истекло"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Није пронађена ниједна OSU активност"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Неочекивани статус SOAP поруке"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO није пронађен"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Поуздани чвор основног нивоа за AAA сервер није пронађен"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Поуздани чвор основног нивоа за сервер за отклањање пропуста није пронађен"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Поуздани чвор основног нивоа за сервер за смернице није пронађен"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Преузимање поузданих сертификата основног нивоа није успело"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Поуздани сертификат основног нивоа за сервер AAA није пронађен"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Додавање PassPoint конфигурације није успело"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU добављач није пронађен"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Повезује се"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Повезан"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Повезујете се са OSU сервером"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Потврђен је OSU сервер"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Веза са OSU сервером је успостављена"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Прва размена SOAP-а"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Чека се одговор о преусмеравању"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Примљен је одговор о преусмеравању"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Друга размена SOAP-а"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Трећа размена SOAP-а"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Преузимају се поуздани сертификати основног нивоа"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Додела приступа је завршена"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Отвара се <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Повезивање није успело"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Регистрација се довршава…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Довршавање регистрације није успело. Додирните да бисте пробали поново."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Регистрација је довршена. Повезује се…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Веома спора"</string> <string name="speed_label_slow" msgid="813109590815810235">"Спора"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Потврди"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Не закључавај"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Екран неће бити у режиму спавања током пуњења"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Омогући snoop евиденцију за Bluetooth HCI"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Сними Bluetooth пакете. (Укључите/искључите Bluetooth када промените ово подешавање)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Откључавање OEM-a"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Дозволи откључавање функције за покретање"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Желите ли да дозволите откључавање произвођача оригиналне опреме (OEM)?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Умрежавање"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Сертификација бежичног екрана"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Омогући детаљнију евиденцију за Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Насумичан избор MAC адресе током повезивања"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Мобилни подаци су увек активни"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Хардверско убрзање привезивања"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Прикажи Bluetooth уређаје без назива"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Повезивање није успело"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Приказ опција за сертификацију бежичног екрана"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Повећава ниво евидентирања за Wi‑Fi. Приказ по SSID RSSI-у у бирачу Wi‑Fi мреже"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Изабери насумичну MAC адресу током повезивања на Wi‑Fi мреже"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Са ограничењем"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Без ограничења"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Величине бафера података у програму за евидентирање"</string> diff --git a/packages/SettingsLib/res/values-sv/arrays.xml b/packages/SettingsLib/res/values-sv/arrays.xml index fc4d17f871e3..1a4ee00c58a6 100644 --- a/packages/SettingsLib/res/values-sv/arrays.xml +++ b/packages/SettingsLib/res/values-sv/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Använd bara HDCP-kontroll för DRM-innehåll"</item> <item msgid="45075631231212732">"Använd alltid HDCP-kontroll"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Inaktiverat"</item> + <item msgid="1969681323976948639">"Filtrering har aktiverats"</item> + <item msgid="8719029132154020716">"Aktiverad"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (standard)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml index fd7bb0b97f7d..3fcb6dc80713 100644 --- a/packages/SettingsLib/res/values-sv/strings.xml +++ b/packages/SettingsLib/res/values-sv/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Automatiskt ansluten via %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Automatiskt ansluten via leverantör av nätverksbetyg"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Anslutet via %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> av <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Anslutet via <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Tillgängligt via %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Tryck för att konfigurera"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Tryck för att logga in"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Ansluten, inget internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Inget internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Inloggning krävs"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Åtkomstpunkten har inga platser över för tillfället"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Anslutet via %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Tillgängligt via %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Anslutningen misslyckades"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Ogiltig webbadress för OSU-server"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Det gick inte att ansluta till OSU-servern"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU-servervalideringen misslyckades"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Ogiltigt certifikat för OSU-server"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Utfärdandet avbröts"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Utfärdande ej tillgängligt"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Ogiltig webbadress för OSU-server"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Oväntad kommandotyp"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Oväntad meddelandetyp för SOAP"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Utväxlingen av SOAP-meddelanden misslyckades"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Det gick inte att starta omdirigeringslyssnaren"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Väntetiden för omdirigering överskreds"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Ingen OSU-aktivitet hittades"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Oväntad status för SOAP-meddelande"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Inget PPS-MO hittades"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Det gick inte att hitta någon betrodd rotnod för AAA-servern"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Det gick inte att hitta någon betrodd rotnod för åtgärdsservern"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Det gick inte att hitta någon betrodd rotnod för policyservern"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Det gick inte att hämta betrodda rotcertifikat"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Det gick inte att hitta någon betrodd rotnod för AAA-servern"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Det gick inte att lägga till PassPoint-konfigurationen"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Ingen OSU-leverantör hittades"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Ansluter"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Ansluten"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Ansluter till OSU-server"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU-servern har validerats"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Ansluten till OSU-server"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Första SOAP-utväxlingen"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Väntar på omdirigeringssvar"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Omdirigeringssvar mottaget"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Andra SOAP-utväxlingen"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Tredje SOAP-utväxlingen"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Hämtar betrodda rotcertifikat"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Utfärdandet har slutförts"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Öppnar <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Det gick inte att ansluta"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Registreringen slutförs …"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Det gick inte att slutföra registreringen. Tryck för att försöka igen."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registrering slutförd. Ansluter …"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Mycket långsam"</string> <string name="speed_label_slow" msgid="813109590815810235">"Långsam"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Okej"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Håll aktiverad"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Skärmen vilar aldrig när laddning pågår"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Aktivera HCI snoop-logg för Bluetooth"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Registrera paket för Bluetooth. (Aktivera och inaktivera Bluetooth när inställningen har ändrats)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-upplåsning"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Tillåt att bootloadern låses upp"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Vill du tillåta OEM-upplåsning?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Nätverk"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certifiering för Wi-Fi-skärmdelning"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Aktivera utförlig loggning för Wi-Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Ansluten MAC-slumpgenerering"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobildata alltid aktiverad"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Maskinvaruacceleration för internetdelning"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Visa namnlösa Bluetooth-enheter"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Kan inte ansluta"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Visa certifieringsalternativ för Wi-Fi-skärmdelning"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Öka loggningsnivån för Wi-Fi, visa per SSID RSSI i Wi‑Fi Picker"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Generera en slumpmässig MAC-adress när du ansluter till Wi‑Fi-nätverk"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Med datapriser"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Utan datapriser"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Buffertstorlekar för logg"</string> diff --git a/packages/SettingsLib/res/values-sw/arrays.xml b/packages/SettingsLib/res/values-sw/arrays.xml index e7f6dd66a80c..a05797e52382 100644 --- a/packages/SettingsLib/res/values-sw/arrays.xml +++ b/packages/SettingsLib/res/values-sw/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Tumia ukaguaji wa HDCP kwa maudhui ya DRM pekee"</item> <item msgid="45075631231212732">"Kila wakati tumia ukakuaji wa HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Imezimwa"</item> + <item msgid="1969681323976948639">"Vichujio Vilivyowekwa"</item> + <item msgid="8719029132154020716">"Imewashwa"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (Chaguomsingi)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml index 6d6b5715dac0..47c7bb2187ef 100644 --- a/packages/SettingsLib/res/values-sw/strings.xml +++ b/packages/SettingsLib/res/values-sw/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Imeunganishwa kiotomatiki kupitia %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Imeunganishwa kiotomatiki kupitia mtoa huduma wa ukadiriaji wa mtandao"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Imeunganishwa kupitia %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> kutoka <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Imeunganishwa kupitia <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Inapatikana kupitia %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Gusa ili uweke mipangilio"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Gusa ili ujisajili"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Imeunganishwa, hakuna intaneti"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Hakuna intaneti"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Unahitaji kuingia katika akaunti"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Lango la mtandao lina shughuli nyingi kwa sasa"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Imeunganishwa kupitia %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Inapatikana kupitia %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Imeshindwa kuunganisha"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL ya seva ya OSU si sahihi"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Imeshindwa kuunganisha seva ya OSU"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Imeshindwa kuthibitisha seva ya OSU"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Cheti cha seva ya OSU si sahihi"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Imeghairi mchakato wa kupanga"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Kipengele cha kupanga hakipatikani"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL ya seva ya OSU si sahihi"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Aina ya amri isiyotarajiwa"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Aina ya ujumbe wa SOAP usiotarajiwa"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Imeshindwa kubadilisha ujumbe wa SOAP"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Imeshindwa kuanzisha kisikilizaji cha kuelekeza kwingine"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Muda umeisha ikisubiri kuelekeza kwingine"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Hakuna shughuli ya OSU iliyopatikana"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Hali isiyotarajiwa ya ujumbe wa SOAP"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Imeshindwa kupata PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Imeshindwa kupata cheti msingi cha seva ya AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Imeshindwa kupata njia ya chanzo kinachoaminika cha seva ya utatuzi"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Imeshindwa kupata njia ya chanzo kinachoaminika cha seva ya sera"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Imeshindwa kuleta vyeti vya msingi vinavyoaminika"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Imeshindwa kupata cheti cha msingi kinachoaminika cha seva ya AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Imeshindwa kuongeza mipangilio ya PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Imeshindwa kupata mtoa huduma wa OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Inaunganisha"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Imeunganisha"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Inaunganisha kwenye seva ya OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Imethibitisha seva ya OSU"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Imeunganishwa kwenye seva ya OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Mabadiliko ya kwanza ya SOAP"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Inasubiri jibu la kuelekeza kwingine"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Imepokea jibu la kuelekeza kwingine"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Kubadilisha SOAP mara ya pili"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Kubadilisha SOAP mara ya tatu"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Inaleta vyeti vya msingi vinavyoaminika"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Imekamilisha kupanga"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Inafungua <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Imeshindwa kuunganisha"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Inakamilisha usajili…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Imeshindwa kukamilisha usajili. Gusa ili ujaribu tena."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Imekamilisha kusajili. Inaunganisha…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Polepole Sana"</string> <string name="speed_label_slow" msgid="813109590815810235">"Polepole"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Sawa"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Weka skrini ikiwa imewashwa"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Skrini haitawahi kuzima wakati unachaji"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Washa kumbukumbu ya Bluetooth HCI Snoop"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Aina za paketi za Bluetooth. (Washa Bluetooth baada ya kubadilisha mipangilio hii)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Ufunguaji wa OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Ruhusu bootloader ifunguliwe"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Je, ungependa kuruhusu ufunguaji wa OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Mtandao"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Chaguo za cheti cha kuonyesha pasiwaya"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Washa Uwekaji kumbukumbu za WiFi kutumia Sauti"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Anwani za MAC Zinazowekwa kwa Nasibu"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Iendelee kutumia data ya simu"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Kuongeza kasi kwa kutumia maunzi ili kusambaza mtandao"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Onyesha vifaa vya Bluetooth visivyo na majina"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Imeshindwa kuunganisha"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Onyesha chaguo za cheti cha kuonyesha pasiwaya"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Ongeza hatua ya uwekaji kumbukumbu ya Wi-Fi, onyesha kwa kila SSID RSSI kwenye Kichukuzi cha Wi-Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Weka anwani ya MAC kwa nasibu wakati unaunganisha kwenye mitandao ya Wi‑Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Mtandao unapima data"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Mtandao usiopima data"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Ukubwa wa kiweka bafa ya kumbukumbu"</string> diff --git a/packages/SettingsLib/res/values-ta/arrays.xml b/packages/SettingsLib/res/values-ta/arrays.xml index 02c16236e153..a7839f67db64 100644 --- a/packages/SettingsLib/res/values-ta/arrays.xml +++ b/packages/SettingsLib/res/values-ta/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"DRM உள்ளடக்கத்திற்கு மட்டும் HDCP சோதனையைப் பயன்படுத்து"</item> <item msgid="45075631231212732">"HDCP சரிபார்ப்பை எப்போதும் பயன்படுத்து"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"முடக்கப்பட்டது"</item> + <item msgid="1969681323976948639">"இயக்கப்பட்டு வடிகட்டப்பட்டது"</item> + <item msgid="8719029132154020716">"இயக்கப்பட்டது"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (இயல்பு)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml index f83b1a7ff39f..63c6cd9b11f2 100644 --- a/packages/SettingsLib/res/values-ta/strings.xml +++ b/packages/SettingsLib/res/values-ta/strings.xml @@ -38,50 +38,27 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s மூலம் தானாக இணைக்கப்பட்டது"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"நெட்வொர்க் மதிப்பீடு வழங்குநரால் தானாக இணைக்கப்பட்டது"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s வழியாக இணைக்கப்பட்டது"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> இன் <xliff:g id="SSID">%1$s</xliff:g>"</string> + <!-- no translation found for connected_via_app (5571999941988929520) --> + <skip /> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s வழியாகக் கிடைக்கிறது"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"அமைப்பதற்குத் தட்ட வேண்டும்"</string> + <!-- no translation found for tap_to_sign_up (6449724763052579434) --> + <skip /> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"இணைக்கப்பட்டுள்ளது, ஆனால் இண்டர்நெட் இல்லை"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"இணைய இணைப்பு இல்லை"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"உள்நுழைய வேண்டும்"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"தற்காலிகமாக அணுகல் புள்ளி நிரம்பியுள்ளது"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s வழியாக இணைக்கப்பட்டது"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s வழியாகக் கிடைக்கிறது"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"இணைக்க இயலவில்லை"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU சேவையகத்தின் URL தவறானது"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU சேவையகத்துடன் இணைக்க இயலவில்லை"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU சேவையகத்தைச் சரிபார்க்க இயலவில்லை"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU சேவையகத்தின் சான்றிதழ் தவறானது"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"புரொவிஷனிங் ரத்துசெய்யப்பட்டது"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"புரொவிஷனிங் இல்லை"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU சேவையகத்தின் URL தவறானது"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"எதிர்பாராத கட்டளை வகை"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"எதிர்பாராத SOAP மெசேஜ் வகை"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP மெசேஜ் பரிமாற்றம் தோல்வியடைந்தது"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"திசைதிருப்புதலைக் கேட்கும் அம்சம் தொடங்கவில்லை"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"திசைதிருப்புதலுக்கான காத்திருப்பு நேரம் முடிந்துவிட்டது"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU செயல்பாடு காணப்படவில்லை"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"எதிர்பாராத SOAP மெசேஜ் நிலை"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MOவைக் கண்டறிய இயலவில்லை"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA சேவையகத்தின் நம்பகமான முதன்மை நோடைக் கண்டறிய இயலவில்லை"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"சிக்கல் தீர்க்கும் சேவையகத்தின் நம்பகமான முதன்மை நோடைக் கண்டறிய இயலவில்லை"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"கொள்கைச் சேவையகத்தின் நம்பகமான முதன்மை நோடைக் கண்டறிய இயலவில்லை"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"நம்பகமான முதன்மைச் சான்றிதழ்களை மீட்டெடுக்க இயலவில்லை"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA சேவையகத்தின் நம்பகமான முதன்மைச் சான்றிதழைக் கண்டறிய இயலவில்லை"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint உள்ளமைவைச் சேர்க்க இயலவில்லை"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU வழங்குநரைக் கண்டறிய இயலவில்லை"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"இணைக்கிறது"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"இணைக்கப்பட்டது"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU சேவையகத்துடன் இணைக்கிறது"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU சேவையகம் சரிபார்க்கப்பட்டது"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU சேவையகத்துடன் இணைக்கப்பட்டது"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"முதல் SOAP பரிமாற்றம்"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"திசைதிருப்புதலுக்கான பதிலுக்குக் காத்திருக்கிறது"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"திசைதிருப்புதலுக்கான பதில் பெறப்பட்டது"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"இரண்டாம் SOAP பரிமாற்றம்"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"மூன்றாம் SOAP பரிமாற்றம்"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"நம்பகமான முதன்மைச் சான்றிதழ்களை மீட்டெடுக்கிறது"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"புரொவிஷனிங் நிறைவடைந்தது"</string> + <!-- no translation found for osu_opening_provider (5488997661548640424) --> + <skip /> + <!-- no translation found for osu_connect_failed (2187750899158158934) --> + <skip /> + <!-- no translation found for osu_completing_sign_up (9037638564719197082) --> + <skip /> + <!-- no translation found for osu_sign_up_failed (7296159750352873260) --> + <skip /> + <!-- no translation found for osu_sign_up_complete (8207626049093289203) --> + <skip /> <string name="speed_label_very_slow" msgid="1867055264243608530">"மிகவும் வேகம் குறைவானது"</string> <string name="speed_label_slow" msgid="813109590815810235">"வேகம் குறைவு"</string> <string name="speed_label_okay" msgid="2331665440671174858">"சரி"</string> @@ -234,8 +211,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"செயலில் வைத்திரு"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"சார்ஜ் ஏறும்போது திரை எப்போதும் உறக்கநிலைக்குச் செல்லாது"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"புளூடூத் HCI ஸ்னுப் பதிவை இயக்கு"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"புளூடூத் பேக்கெட்டுகளைக் கண்டறி. (இந்த அமைப்பை மாற்றிய பின்பு, புளூடூத்தை மாற்று)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM திறத்தல்"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"பூட்லோடரைத் திறக்க அனுமதி"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM திறத்தலை அனுமதிக்கவா?"</string> @@ -246,7 +222,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"நெட்வொர்க்கிங்"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"வயர்லெஸ் காட்சிக்கான சான்றிதழ்"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"வைஃபை அதிவிவர நுழைவை இயக்கு"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"இணைக்கப்பட்ட MAC ரேண்டம் ஆக்குதல்"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"மொபைல் டேட்டாவை எப்போதும் இயக்கத்திலேயே வை"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"வன்பொருள் விரைவுப்படுத்துதல் இணைப்பு முறை"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"பெயர்கள் இல்லாத புளூடூத் சாதனங்களைக் காட்டு"</string> @@ -273,7 +248,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"இணைக்க முடியவில்லை"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"வயர்லெஸ் காட்சி சான்றுக்கான விருப்பங்களைக் காட்டு"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"வைஃபை நுழைவு அளவை அதிகரித்து, வைஃபை தேர்வியில் ஒவ்வொன்றிற்கும் SSID RSSI ஐ காட்டுக"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"வைஃபை நெட்வொர்க்குகளில் இணைக்கும்போது MAC முகவரிகளை ரேண்டம் ஆக்கு"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"கட்டண நெட்வொர்க்"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"கட்டணமில்லா நெட்வொர்க்"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"லாகர் பஃபர் அளவுகள்"</string> diff --git a/packages/SettingsLib/res/values-te/arrays.xml b/packages/SettingsLib/res/values-te/arrays.xml index 6d5a16b31d27..22d57efe7af5 100644 --- a/packages/SettingsLib/res/values-te/arrays.xml +++ b/packages/SettingsLib/res/values-te/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"DRM కంటెంట్కు మాత్రమే HDCP తనిఖీని ఉపయోగించండి"</item> <item msgid="45075631231212732">"ఎప్పటికీ HDCP తనిఖీని ఉపయోగించు"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"నిలిపివేయబడింది"</item> + <item msgid="1969681323976948639">"ప్రారంభించబడింది ఫిల్టర్ చేయబడింది"</item> + <item msgid="8719029132154020716">"ప్రారంభించబడింది"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (డిఫాల్ట్)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml index e4e0e417ba07..d8ec167c8e50 100644 --- a/packages/SettingsLib/res/values-te/strings.xml +++ b/packages/SettingsLib/res/values-te/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s ద్వారా స్వయంచాలకంగా కనెక్ట్ చేయబడింది"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"నెట్వర్క్ రేటింగ్ ప్రదాత ద్వారా స్వయంచాలకంగా కనెక్ట్ చేయబడింది"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s ద్వారా కనెక్ట్ చేయబడింది"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> ద్వారా <xliff:g id="SSID">%1$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> ద్వారా కనెక్ట్ చేయబడింది"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s ద్వారా అందుబాటులో ఉంది"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"సెటప్ చేయడానికి నొక్కండి"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"సైన్ అప్ చేయడానికి నొక్కండి"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"కనెక్ట్ చేయబడింది, ఇంటర్నెట్ లేదు"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"ఇంటర్నెట్ లేదు"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"సైన్ ఇన్ చేయాలి"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"యాక్సెస్ పాయింట్ తాత్కాలికంగా నిండుకుంది"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s ద్వారా కనెక్ట్ చేయబడింది"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s ద్వారా అందుబాటులో ఉంది"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"కనెక్షన్ విఫలమైంది"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"చెల్లని OSU సర్వర్ URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU సర్వర్ కనెక్షన్ విఫలమైంది"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU సర్వర్ ప్రామాణీకరణ విఫలమైంది"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"చెల్లని OSU సర్వర్ సర్టిఫికెట్"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"కేటాయింపు రద్దు చేయబడింది"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"కేటాయింపు అందుబాటులో లేదు"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"చెల్లని OSU సర్వర్ URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ఊహించని ఆదేశ రకం"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"ఊహించని SOAP సందేశ రకం"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP సందేశ మార్పిడి విఫలమైంది"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"మళ్లింపు పరిశీలన ప్రారంభమవడం విఫలమైంది"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"మళ్లింపు కోసం వేచి ఉండటంలో సమయం ముగిసింది"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"ఏ OSU కార్యకలాపం కనుగొనబడలేదు"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"ఊహించని SOAP సందేశ స్థితి"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO కనుగొనడం విఫలమైంది."</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA సర్వర్ కోసం మూల విశ్వసనీయత కనుగొనడంలో విఫలమైంది."</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"నివారణోపాయం సర్వర్ విశ్వసనీయత మూల నోడ్ను కనుగొనడం విఫలమైంది"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"విధాన సర్వర్ కోసం మూల విశ్వసనీయత కనుగొనడంలో విఫలమైంది."</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"విశ్వసనీయ రూట్ సర్టిఫికెట్లు తిరిగి పొందడం విఫలమైంది."</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA సర్వర్ కోసం రూట్ సర్టిఫికెట్ విశ్వసనీయత కనుగొనడం విఫలమైంది."</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"కాన్ఫిగరేషన్ పాయింట్ జోడించడం విఫలమైంది."</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"ఒక OSU ప్రొవైడర్ని కనుగొనడం విఫలమైంది"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"కనెక్ట్ చేయబడుతోంది"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"కనెక్ట్ చేయబడింది"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU సర్వర్కి కనెక్ట్ చేయబడుతోంది…"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU సర్వర్ ప్రామాణీకరించబడింది"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU సర్వర్కి కనెక్ట్ చేయబడింది"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"ప్రారంభ SOAP మార్పిడి"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"మళ్లింపు ప్రతిస్పందన కోసం వేచి ఉంది"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"మళ్లింపు ప్రతిస్పందన స్వీకరించబడింది"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"రెండవ SOAP మార్పిడి"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"మూడో SOAP మార్పిడి"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"విశ్వసనీయ రూట్ సర్టిఫికెట్లను తిరిగి పొందుతోంది"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"కేటాయింపు పూర్తయింది"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> తెరవబడుతోంది"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"కనెక్ట్ చేయడం సాధ్యపడలేదు"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"సైన్ అప్ పూర్తివుతోంది…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"సైన్ అప్ను పూర్తి చేయడం సాధ్య పడలేదు. మళ్లీ ప్రయత్నించడానికి నొక్కండి."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"సైన్ అప్ పూర్తయింది. కనెక్ట్ చేయబడుతోంది…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"చాలా నెమ్మది"</string> <string name="speed_label_slow" msgid="813109590815810235">"నెమ్మది"</string> <string name="speed_label_okay" msgid="2331665440671174858">"సరే"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"యాక్టివ్గా ఉంచు"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"ఛార్జ్ చేస్తున్నప్పుడు స్క్రీన్ ఎప్పటికీ నిద్రావస్థలోకి వెళ్లదు"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"బ్లూటూత్ HCI రహస్య లాగ్ను ప్రారంభించు"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"బ్లూటూత్ ప్యాకెట్లను క్యాప్చర్ చేయి. (ఈ సెట్టింగ్ని మార్చిన తర్వాత బ్లూటూత్ని టోగుల్ చేయండి)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM అన్లాకింగ్"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"బూట్లోడర్ అన్లాక్ కావడానికి అనుమతించు"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM అన్లాకింగ్ను అనుమతించాలా?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"నెట్వర్కింగ్"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"వైర్లెస్ ప్రదర్శన ప్రమాణీకరణ"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi విశదీకృత లాగింగ్ను ప్రారంభించండి"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"కనెక్ట్ చేయబడిన MAC చిరునామాలను యాదృచ్ఛికం చేయడం"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"మొబైల్ డేటాని ఎల్లప్పుడూ యాక్టివ్గా ఉంచు"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"టెథెరింగ్ హార్డ్వేర్ వేగవృద్ధి"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"పేర్లు లేని బ్లూటూత్ పరికరాలు చూపించు"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"కనెక్ట్ చేయడం సాధ్యపడలేదు"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"వైర్లెస్ ప్రదర్శన సర్టిఫికెట్ కోసం ఎంపికలను చూపు"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi ఎంపికలో SSID RSSI ప్రకారం చూపబడే Wi‑Fi లాగింగ్ స్థాయిని పెంచండి"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi-Fi నెట్వర్క్కు కనెక్ట్ చేస్తున్నప్పుడు MAC చిరునామాను యాదృచ్ఛికం చేయండి"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"గణించబడుతోంది"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"గణించబడటం లేదు"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"లాగర్ బఫర్ పరిమాణాలు"</string> diff --git a/packages/SettingsLib/res/values-th/arrays.xml b/packages/SettingsLib/res/values-th/arrays.xml index 2b65080c33d9..62cd9875b54b 100644 --- a/packages/SettingsLib/res/values-th/arrays.xml +++ b/packages/SettingsLib/res/values-th/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"ใช้การตรวจสอบ HDCP สำหรับเนื้อหา DRM เท่านั้น"</item> <item msgid="45075631231212732">"ใช้การตรวจสอบ HDCP เสมอ"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"ปิดใช้"</item> + <item msgid="1969681323976948639">"เปิดใช้รายการที่กรอง"</item> + <item msgid="8719029132154020716">"เปิดใช้"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (ค่าเริ่มต้น)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml index b7a70196a00f..1f4c727dd227 100644 --- a/packages/SettingsLib/res/values-th/strings.xml +++ b/packages/SettingsLib/res/values-th/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"เชื่อมต่ออัตโนมัติผ่าน %1$s แล้ว"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"เชื่อมต่ออัตโนมัติผ่านผู้ให้บริการการจัดอันดับเครือข่าย"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"เชื่อมต่อผ่าน %1$s แล้ว"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> โดย <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"เชื่อมต่อแล้วผ่าน <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"พร้อมใช้งานผ่านทาง %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"แตะเพื่อตั้งค่า"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"แตะเพื่อลงชื่อสมัครใช้"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"เชื่อมต่อแล้ว ไม่พบอินเทอร์เน็ต"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"ไม่มีอินเทอร์เน็ต"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"ต้องลงชื่อเข้าใช้"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"จุดเข้าใช้งานเต็มชั่วคราว"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"เชื่อมต่อผ่าน %1$s แล้ว"</string> <string name="available_via_carrier" msgid="1469036129740799053">"พร้อมใช้งานผ่านทาง %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"การเชื่อมต่อล้มเหลว"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL ของเซิร์ฟเวอร์ OSU ไม่ถูกต้อง"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"การเชื่อมต่อเซิร์ฟเวอร์ OSU ล้มเหลว"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"การตรวจสอบเซิร์ฟเวอร์ OSU ล้มเหลว"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"ใบรับรองเซิร์ฟเวอร์ OSU ไม่ถูกต้อง"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"ล้มเลิกการจัดสรรแล้ว"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"การจัดสรรไม่พร้อมใช้งาน"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL ของเซิร์ฟเวอร์ OSU ไม่ถูกต้อง"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"ประเภทคำสั่งที่ไม่คาดคิด"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"ประเภทข้อความ SOAP ที่ไม่คาดคิด"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"การแลกเปลี่ยนข้อความ SOAP ล้มเหลว"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"เริ่มการเปลี่ยนเส้นทางผู้ฟังไม่สำเร็จ"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"หมดเวลาการอการเปลี่ยนเส้นทางแล้ว"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"ไม่พบกิจกรรม OSU"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"สถานะข้อความ SOAP ที่ไม่คาดคิด"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"ค้นหา PPS-MO ไม่สำเร็จ"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"ค้นหาโหนดรากที่เชื่อถือได้สำหรับเซิร์ฟเวอร์ AAA ไม่สำเร็จ"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"ค้นหาโหนดระดับรากที่เชื่อถือได้สำหรับเซิร์ฟเวอร์การแก้ไขไม่สำเร็จ"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"ค้นหาโหนดระดับรากที่เชื่อถือได้สำหรับเซิร์ฟเวอร์นโยบายไม่สำเร็จ"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"เรียกดูใบรับรองรูทที่เชื่อถือได้ไม่สำเร็จ"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"ค้นหาใบรับรองรูทที่เชื่อถือได้สำหรับเซิร์ฟเวอร์ AAA ไม่สำเร็จ"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"เพิ่มการกำหนดค่า PassPoint ไม่สำเร็จ"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"ค้นหาผู้ให้บริการ OSU ไม่สำเร็จ"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"กำลังเชื่อมต่อ"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"เชื่อมต่อแล้ว"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"กำลังเชื่อมต่อกับเซิร์ฟเวอร์ OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"ตรวจสอบเซิร์ฟเวอร์ OSU แล้ว"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"เชื่อมต่อกับเซิร์ฟเวอร์ OSU แล้ว"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"การแลกเปลี่ยน SOAP เริ่มต้น"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"กำลังรอการตอบสนองการเปลี่ยนเส้นทาง"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"ได้รับการตอบสนองการเปลี่ยนเส้นทางแล้ว"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"การแลกเปลี่ยน SOAP ที่สอง"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"การแลกเปลี่ยน SOAP ที่สาม"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"กำลังเรียกดูใบรับรองรูทที่เชื่อถือได้"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"การจัดสรรเสร็จสมบูรณ์"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"กำลังเปิด <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"เชื่อมต่อไม่ได้"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"กำลังลงชื่อสมัครใช้ให้เสร็จสิ้น…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"ลงชื่อสมัครใช้ให้เสร็จสิ้นไม่ได้ แตะเพื่อลองอีกครั้ง"</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"การลงชื่อสมัครใช้เสร็จสมบูรณ์ กำลังเชื่อมต่อ…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"ช้ามาก"</string> <string name="speed_label_slow" msgid="813109590815810235">"ช้า"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ตกลง"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"เปิดหน้าจอค้าง"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"หน้าจอจะไม่เข้าสู่โหมดสลีปขณะชาร์จ"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"เปิดใช้งานบันทึก HCI Snoop ของบลูทูธ"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"บันทึกแพ็กเก็ตบลูทูธ (ปิด-เปิดบลูทูธหลังจากเปลี่ยนการตั้งค่านี้)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"การปลดล็อก OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"อนุญาตให้ปลดล็อกตัวโหลดการเปิดเครื่อง"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"อนุญาตการปลดล็อก OEM ไหม"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"เครือข่าย"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"การรับรองการแสดงผลแบบไร้สาย"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"เปิดใช้การบันทึกรายละเอียด Wi-Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"การสุ่ม MAC ที่เชื่อมต่อ"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"เปิดใช้เน็ตมือถือเสมอ"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"การเร่งฮาร์ดแวร์การเชื่อมต่ออินเทอร์เน็ตผ่านมือถือ"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"แสดงอุปกรณ์บลูทูธที่ไม่มีชื่อ"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"เชื่อมต่อไม่ได้"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"แสดงตัวเลือกสำหรับการรับรองการแสดงผล แบบไร้สาย"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"เพิ่มระดับการบันทึก Wi‑Fi แสดงต่อ SSID RSSI ในตัวเลือก Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"สุ่มที่อยู่ MAC เมื่อเชื่อมต่อกับเครือข่าย Wi‑Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"มีการวัดปริมาณอินเทอร์เน็ต"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"ไม่มีการวัดปริมาณอินเทอร์เน็ต"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"ขนาดบัฟเฟอร์ของตัวบันทึก"</string> diff --git a/packages/SettingsLib/res/values-tl/arrays.xml b/packages/SettingsLib/res/values-tl/arrays.xml index 8e3aaf7c1e45..cfab9c1581ad 100644 --- a/packages/SettingsLib/res/values-tl/arrays.xml +++ b/packages/SettingsLib/res/values-tl/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Gamitin lang ang pagsusuring HDCP para sa nilalamang DRM"</item> <item msgid="45075631231212732">"Palaging gumamit ng pagsusuring HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Naka-disable"</item> + <item msgid="1969681323976948639">"Na-enable Na-filter"</item> + <item msgid="8719029132154020716">"Naka-enable"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (Default)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml index 4f92302a23c2..7a31cc9ee3b1 100644 --- a/packages/SettingsLib/res/values-tl/strings.xml +++ b/packages/SettingsLib/res/values-tl/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Awtomatikong nakakonekta sa pamamagitan ng %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Awtomatikong nakakonekta sa pamamagitan ng provider ng rating ng network"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Nakakonekta sa pamamagitan ng %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> ni <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Nakakonekta sa pamamagitan ng <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Available sa pamamagitan ng %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Mag-tap para i-set up"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"I-tap para mag-sign up"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Nakakonekta, walang internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Walang internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Kinakailangang mag-sign in"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Pansamantalang puno ang access point"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Nakakonekta sa pamamagitan ng %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Available sa pamamagitan ng %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Hindi nakakonekta"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Invalid na URL ng OSU server"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Hindi nakakonekta sa OSU server"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Hindi na-validate ang OSU server"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Invalid na certificate ng OSU server"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Na-abort ang provisioning"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Hindi available ang provisioning"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Invalid na URL ng OSU server"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Hindi inaasahang uri ng command"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Hindi inaasahang uri ng mensahe ng SOAP"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Hindi nakapagpalitan ng mensahe ng SOAP"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Hindi nakapagsimula ang listener ng pag-redirect"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Nag-time out sa paghihintay ng pag-redirect"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Walang nakitang aktibidad ng OSU"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Hindi inaasahang status ng mensahe ng SOAP"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Hindi nakakita ng PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Hindi nakakita ng trust root node para sa AAA server"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Hindi nakita ang trust root node para sa server ng pagremedyo"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Hindi nakita ang trust root node para sa server ng patakaran"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Hindi nakuha ang mga trust root certificate"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Hindi nakita ang trust root certificate para sa AAA server"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Hindi naidagdag ang configuration ng PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Hindi nakakita ng OSU provider"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Kumokonekta"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Nakakonekta"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Kumokonekta sa OSU server"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Na-validate na ang OSU server"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Nakakonekta sa OSU server"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Paunang pakikipagpalitan ng SOAP"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Naghihintay ng tugon sa pag-redirect"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Nakatanggap ng tugon sa pag-redirect"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Pangalawang pakikipagpalitan ng SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Pangatlong pakikipagpalitan ng SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Kinukuha ang mga trust root certificate"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Tapos na ang provisioning"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Binubuksan ang <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Hindi makakonekta"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Kinukumpleto ang pag-sign up…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Hindi makumpleto ang pag-sign up. I-tap para subukang muli."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Kumpleto na ang pag-sign up. Kumokonekta…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Napakabagal"</string> <string name="speed_label_slow" msgid="813109590815810235">"Mabagal"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Manatiling gumagana"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Hindi kailanman hihinto ang screen kapag kinakargahan"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"I-enable ang Bluetooth HCI snoop log"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"I-capture ang mga Bluetooth packet. (I-toggle ang Bluetooth pagkatapos baguhin ang setting na ito)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Pag-a-unlock ng OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Payagan na ma-unlock ang bootloader"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Payagan ang pag-a-unlock ng OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Networking"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Certification ng wireless display"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"I-enable ang Pagla-log sa Wi‑Fi Verbose"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Nakakonektang MAC Randomization"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Palaging aktibo ang mobile data"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Hardware acceleration para sa pag-tether"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Ipakita ang mga Bluetooth device na walang pangalan"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Hindi makakonekta"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Ipakita ang mga opsyon para sa certification ng wireless display"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Pataasin ang antas ng Wi‑Fi logging, ipakita sa bawat SSID RSSI sa Wi‑Fi Picker"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"I-randomize ang MAC address kapag kumokonekta sa mga Wi‑Fi network"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Nakametro"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Hindi Nakametro"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Mga laki ng buffer ng Logger"</string> diff --git a/packages/SettingsLib/res/values-tr/arrays.xml b/packages/SettingsLib/res/values-tr/arrays.xml index 1a0ab57d9815..b9bbda3c284f 100644 --- a/packages/SettingsLib/res/values-tr/arrays.xml +++ b/packages/SettingsLib/res/values-tr/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"HDCP denetimini yalnızca DRM içeriği için kullan"</item> <item msgid="45075631231212732">"HDCP denetimini her zaman kullan"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Devre dışı"</item> + <item msgid="1969681323976948639">"Etkin Filtrelenmiş"</item> + <item msgid="8719029132154020716">"Etkin"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (Varsayılan)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml index 67aee026bfac..28fc38fcd8a5 100644 --- a/packages/SettingsLib/res/values-tr/strings.xml +++ b/packages/SettingsLib/res/values-tr/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s üzerinden otomatik olarak bağlı"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Ağ derecelendirme sağlayıcı aracılığıyla otomatik olarak bağlandı"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s üzerinden bağlı"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g>, <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> ile bağlandı"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s üzerinden kullanılabilir"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Ayarlamak için dokunun"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Kaydolmak için dokunun"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Bağlı, internet yok"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"İnternet yok"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Oturum açılması gerekiyor"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Erişim noktası geçici olarak dolu"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s üzerinden bağlı"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s üzerinden kullanılabilir"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Bağlantı başarısız oldu"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU sunucu URL\'si geçersiz"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU sunucusu ile bağlantı kurulamadı"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU sunucusu doğrulanamadı"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU sunucu sertifikası geçersiz"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Temel hazırlık iptal edildi"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Temel hazırlık kullanılamıyor"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU sunucu URL\'si geçersiz"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Beklenmeyen komut türü"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Beklenmeyen SOAP mesaj türü"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP mesajlaşması başarısız"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Yönlendirme işleyici başlatılamadı"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Yönlendirme beklenirken süre doldu"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU etkinliği bulunamadı"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Beklenmeyen SOAP mesaj durumu"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO bulunamadı"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA sunucusu için güvenilir kök düğüm bulunamadı"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Düzeltme sunucusu için güvenilir kök düğüm bulunamadı"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Politika sunucusu için güvenilir kök düğüm bulunamadı"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Güvenilir kök sertifikalar alınamadı"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA sunucusu için güvenilir kök sertifika bulunamadı"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint yapılandırması eklenemedi"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU sağlayıcı bulunamadı"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Bağlanıyor"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Bağlandı"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU sunucusu ile bağlantı kuruluyor"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU sunucusu doğrulandı"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU sunucusuna bağlandı"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"İlk SOAP değişimi"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Yönlendirme yanıtı bekleniyor"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Yönlendirme yanıtı alındı"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"İkinci SOAP değişimi"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Üçüncü SOAP değişimi"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Güvenilir kök sertifikalar alınıyor"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Temel hazırlık tamamlandı"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> açılıyor"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Bağlanılamadı"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Kayıt işlemi tamamlanıyor…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Kayıt işlemi tamamlanamadı. Tekrar denemek için dokunun."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Kayıt tamamlandı. Bağlanıyor…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Çok Yavaş"</string> <string name="speed_label_slow" msgid="813109590815810235">"Yavaş"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Tamam"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Uyanık kal"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Şarj edilirken ekran hiçbir zaman uykuya geçmez"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI araştırmayı etkinleştir"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Bluetooth paketlerini yakalayın. (Bu ayarı değiştirdikten sonra Bluetooth seçimini değiştirin)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM kilit açma"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Önyükleyicinin kilidinin açılmasına izin ver"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM kilit açmaya izin verilsin mi?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Ağ işlemleri"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Kablosuz ekran sertifikası"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Kablosuz Ayrıntılı Günlük Kaydını etkinleştir"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Bağlı MAC Rastgele Seçimi"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobil veri her zaman etkin"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Tethering donanım hızlandırıcısı"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Adsız Bluetooth cihazlarını göster"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Bağlanılamadı"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Kablosuz ekran sertifikası seçeneklerini göster"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Kablosuz günlük kaydı seviyesini artır. Kablosuz Seçici\'de her bir SSID RSSI için göster."</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Kablosuz ağlara bağlanırken MAC adresini rastgele seç"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Sayaçlı"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Sayaçsız"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Günlük Kaydedici arabellek boyutları"</string> diff --git a/packages/SettingsLib/res/values-uk/arrays.xml b/packages/SettingsLib/res/values-uk/arrays.xml index 5e142862db16..63538e13d773 100644 --- a/packages/SettingsLib/res/values-uk/arrays.xml +++ b/packages/SettingsLib/res/values-uk/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Використовувати перевірку HDCP лише для вмісту, захищеного DRM"</item> <item msgid="45075631231212732">"Завжди використовувати перевірку HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Вимкнено"</item> + <item msgid="1969681323976948639">"Увімкнено з фільтром"</item> + <item msgid="8719029132154020716">"Увімкнено"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (за умовчанням)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml index 1cfa0ebe46de..c63f7e0e0761 100644 --- a/packages/SettingsLib/res/values-uk/strings.xml +++ b/packages/SettingsLib/res/values-uk/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Автоматично під’єднано через %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Автоматично під’єднано через постачальника оцінки якості мережі"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Під’єднано через %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> надає <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Підключено через додаток <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Доступ через %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Торкніться, щоб налаштувати"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Торкніться, щоб увійти"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Під’єднано, але немає доступу до Інтернету"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Немає Інтернету"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Потрібно ввійти в обліковий запис"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Точка доступу тимчасово переповнена"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Під’єднано через мережу %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Доступ через мережу %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Помилка підключення"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Недійсна URL-адреса сервера OSU"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Не вдалося підключитися до сервера OSU"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Не вдалося перевірити сервер OSU"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Недійсний сертифікат сервера OSU"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Надання скасовано"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Надання недоступне"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Недійсна URL-адреса сервера OSU"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Неочікуваний тип команди"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Неочікуваний тип повідомлення SOAP"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Не вдалося провести обмін повідомленнями SOAP"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Не вдалося запустити обробник переспрямування"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Час очікування переспрямування минув"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Не виявлено активності OSU"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Неочікуваний статус повідомлення SOAP"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Не вдалося знайти PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Не вдалося знайти надійний кореневий вузол для AAA-сервера"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Не вдалося знайти надійний кореневий вузол для сервера виправлень"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Не вдалося знайти надійний кореневий вузол для сервера політики"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Не вдалось отримати надійні кореневі сертифікати"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Не вдалося знайти надійний кореневий сертифікат для AAA-сервера"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Не вдалося додати налаштування PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Не вдалося знайти постачальника OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Підключення"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Підключено"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Підключення до сервера OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Сервер OSU перевірено"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Підключено до сервера OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Початковий обмін SOAP"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Очікування відповіді переспрямування"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Відповідь переспрямування отримано"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Другий обмін SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Третій обмін SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Отримання надійних кореневих сертифікатів"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Надання завершено"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> відкривається"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Не вдалося підключитись"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Завершення реєстрації…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Не вдалося завершити реєстрацію. Торкніться, щоб повторити спробу."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Реєстрацію завершено. Підключення…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Дуже повільна"</string> <string name="speed_label_slow" msgid="813109590815810235">"Повільна"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ОК"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Залишати активним"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Екран не засинатиме під час заряджання"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Увімкнути журнал відстеження інтерфейсу Bluetooth"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Отримання пакетів Bluetooth. (Змінивши це налаштування, увімкніть Bluetooth.)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Розблокування виробником"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Дозволити розблокування завантажувача"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Дозволити виробникові розблоковувати пристрій?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Мережі"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Сертифікація бездрот. екрана"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Докладний запис у журнал Wi-Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Довільний вибір MAC-адрес під час з’єднання"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Не вимикати мобільне передавання даних"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Апаратне прискорення під час використання телефона в режимі модема"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Показувати пристрої Bluetooth без назв"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Не вдалося під’єднатися"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Показати параметри сертифікації бездротового екрана"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Показувати в журналі RSSI для кожного SSID під час вибору Wi-Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Довільно вибирати MAC-адресу під час з’єднання з мережами Wi-Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"З тарифікацією трафіку"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Без тарифікації трафіку"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Розміри буфера журналу"</string> diff --git a/packages/SettingsLib/res/values-ur/arrays.xml b/packages/SettingsLib/res/values-ur/arrays.xml index 27b26b759bee..bb1765fa0e04 100644 --- a/packages/SettingsLib/res/values-ur/arrays.xml +++ b/packages/SettingsLib/res/values-ur/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"HDCP چیکنگ صرف DRM مواد کیلئے استعمال کریں"</item> <item msgid="45075631231212732">"ہمیشہ HDCP چیکنگ استعمال کریں"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"غیر فعال"</item> + <item msgid="1969681323976948639">"فعال کردہ فلٹر کردہ"</item> + <item msgid="8719029132154020716">"فعال"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (ڈیفالٹ)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml index 5e8ab54f2813..27aa730b6a8b 100644 --- a/packages/SettingsLib/res/values-ur/strings.xml +++ b/packages/SettingsLib/res/values-ur/strings.xml @@ -38,50 +38,27 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s کے ذریعے از خود منسلک کردہ"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"نیٹ ورک درجہ بندی کے فراہم کنندہ کے ذریعے از خود منسلک"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"منسلک بذریعہ %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g> بذریعہ <xliff:g id="SSID">%1$s</xliff:g>"</string> + <!-- no translation found for connected_via_app (5571999941988929520) --> + <skip /> <string name="available_via_passpoint" msgid="1617440946846329613">"دستیاب بذریعہ %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"سیٹ اپ کرنے کے لیے تھپتھپائیں"</string> + <!-- no translation found for tap_to_sign_up (6449724763052579434) --> + <skip /> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"منسلک، انٹرنیٹ نہیں ہے"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"انٹرنیٹ نہیں ہے"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"سائن ان درکار ہے"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"رسائی پوائنٹ عارضی طور پر فُل ہے"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"منسلک بذریعہ %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"دستیاب بذریعہ %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"کنکشن ناکام ہو گیا"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"غلط OSU سرور کا URL"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU سرور کنکشن ناکام ہو گيا"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU سرور کی توثیق ناکام ہو گئی"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"غلط OSU سرور کا سرٹیفیکیٹ"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"فراہمی کو منسوخ کر دیا گیا"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"فراہمی دستیاب نہیں ہے"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"غلط OSU سرور کا URL"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"غیر متوقع کمانڈ کی قسم"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"غیر متوقع SOAP پیغام کی قسم"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP پیغام کا تبادلہ ناکام ہو گیا"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"ری ڈائریکٹ سامع شروع ہونے میں ناکام ہو گیا"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"ری ڈائریکٹ کے انتظار میں ٹائم آؤٹ ہو گیا"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"OSU کی کوئی سرگرمی نہیں ملی"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"غیرمتوقع SOAP پیغام کی صورتحال"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO تلاش کرنے میں ناکام"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA سرور کے لیے معتبر روٹ نوڈ تلاش کرنے میں ناکام"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"تلافی سرور کے لیے معتبر روٹ نوڈ تلاش کرنے میں ناکام"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"پالیسی سرور کے لیے معتبر روٹ نوڈ تلاش کرنے میں ناکام"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"معتبر روٹ سرٹیفکیٹس کو دوبارہ حاصل کرنے میں ناکام"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA سرور کے لیے معتبر روٹ سرٹیفکیٹ تلاش کرنے میں ناکام"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint کی کنفیگریشن شامل کرنے میں ناکام"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU فراہم کنندہ کو تلاش کرنے میں ناکام"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"منسلک ہو رہا ہے"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"منسلک ہے"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU سرور سے منسلک ہو رہا ہے"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU سرور کی توثیق ہو گئی"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU سرور سے منسلک ہے"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"SOAP کا ابتدائی تبادلہ"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"ری ڈائریکٹ کے جواب کا منتظر"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"ری ڈائریکٹ کا جواب موصول ہو گیا"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"دوسرے SOAP کا تبادلہ"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"تیسرے SOAP کا تبادلہ"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"معتبر روٹ سرٹیفکیٹس کو دوبارہ حاصل کیا جا رہا ہے"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"فراہمی مکمل ہو گئی"</string> + <!-- no translation found for osu_opening_provider (5488997661548640424) --> + <skip /> + <!-- no translation found for osu_connect_failed (2187750899158158934) --> + <skip /> + <!-- no translation found for osu_completing_sign_up (9037638564719197082) --> + <skip /> + <!-- no translation found for osu_sign_up_failed (7296159750352873260) --> + <skip /> + <!-- no translation found for osu_sign_up_complete (8207626049093289203) --> + <skip /> <string name="speed_label_very_slow" msgid="1867055264243608530">"بہت سست"</string> <string name="speed_label_slow" msgid="813109590815810235">"سست"</string> <string name="speed_label_okay" msgid="2331665440671174858">"ٹھیک ہے"</string> @@ -234,8 +211,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"بیدار رکھیں"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"چارج ہوتے وقت اسکرین کبھی بھی سلیپ وضع میں نہيں جائے گی"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"بلوٹوتھ HCI کا جاسوسی لاگ فعال کریں"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"بلوٹوتھ پیکیٹس کیپچر کریں۔ (اس ترتیب کو تبدیل کرنے کے بعد بلوٹوتھ ٹوگل کریں)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM اَن لاکنگ"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"بوٹ لوڈر کو غیر مقفل ہونے کی اجازت دیں"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM اَن لاکنگ کی اجازت دیں؟"</string> @@ -246,7 +222,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"نیٹ ورکنگ"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"وائرلیس ڈسپلے سرٹیفیکیشن"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Wi‑Fi وربوس لاگنگ فعال کریں"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"منسلک کردہ MAC رینڈمائزیشن"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"موبائل ڈیٹا ہمیشہ فعال رکھیں"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"ٹیدرنگ ہارڈویئر سرعت کاری"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"بغیر نام والے بلوٹوتھ آلات دکھائیں"</string> @@ -273,7 +248,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"منسلک نہیں ہو سکا"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"وائرلیس ڈسپلے سرٹیفیکیشن کیلئے اختیارات دکھائیں"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi‑Fi لاگنگ لیول میں اضافہ کریں، Wi‑Fi منتخب کنندہ میں فی SSID RSSI دکھائیں"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi-Fi نیٹ ورکس سے منسلک کرتے وقت MAC پتے کو غیر مرتب کریں"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"میٹرڈ"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"غیر میٹر شدہ"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"لاگر بفر کے سائز"</string> diff --git a/packages/SettingsLib/res/values-uz/arrays.xml b/packages/SettingsLib/res/values-uz/arrays.xml index d1276894701a..e64ccfa1fa54 100644 --- a/packages/SettingsLib/res/values-uz/arrays.xml +++ b/packages/SettingsLib/res/values-uz/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"HDCP tekshiruvi faqat DRM kontent uchun ishlatilsin"</item> <item msgid="45075631231212732">"Har doim HDCP tekshiruvidan foydalanilsin"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Oʻchiq"</item> + <item msgid="1969681323976948639">"Filtrlar yoniq"</item> + <item msgid="8719029132154020716">"Yoniq"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (asosiy)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml index 133e25e7a223..bcb4d27d94d4 100644 --- a/packages/SettingsLib/res/values-uz/strings.xml +++ b/packages/SettingsLib/res/values-uz/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"%1$s orqali avtomatik ulandi"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Tarmoqlar reytingi muallifi orqali avtomatik ulandi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"%1$s orqali ulangan"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g>, <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"<xliff:g id="NAME">%1$s</xliff:g> orqali ulandi"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"%1$s orqali ishlaydi"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Sozlash uchun bosing"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Yozilish uchun bosing"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Ulangan, lekin internet aloqasi yo‘q"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Internet yo‘q"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Hisob bilan kirish zarur"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Internet kirish nuqtasi vaqtinchalik to‘lgan"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"%1$s orqali ulangan"</string> <string name="available_via_carrier" msgid="1469036129740799053">"%1$s orqali ishlaydi"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Ulanishda xatolik yuz berdi"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"Yaroqsiz OSU serveri URL manzili"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"OSU serveriga ulanmadi"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU serveri tasdiqlanmadi"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Yaroqsiz OSU serveri sertifikati"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Sinxronizatsiya uzildi"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Sinxronizatsiya mavjud emas"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"Yaroqsiz OSU serveri URL manzili"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Notanish buyruq turi"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Notanish SOAP xabari turi"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"SOAP xabarlari almashinuvi amalga oshmadi"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Teskari chaqiruv qabul qilgichi ishga tushmadi"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Kutish vaqtidan oshib ketdi"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Hech qanday OSU harakatlari topilmadi"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"SOAP xabari holati noaniq"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"PPS-MO topilmadi"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"AAA serveri uchun ishonchli root tuguni topilmadi"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Tuzatish serveri uchun ishonchli root tuguni topilmadi"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Qoidalar serveri uchun ishonchli root tuguni topilmadi"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Ishonchli root sertifikatlari olinmadi"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"AAA serveri uchun ishonchli root sertifikati topilmadi"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"PassPoint sozlamalari kiritilmadi"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"OSU taʼminotchisi topilmadi"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Ulanmoqda"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Ulandi"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"OSU serveriga ulanmoqda"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU serveri tasdiqlandi"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"OSU serveriga ulangan"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Birinchi SOAP almashinuvi"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Uzatish uchun javob kutilmoqda"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Javob olindi"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Ikkinchi SOAP almashinuvi"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Uchinchi SOAP almashinuvi"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Ishonchli root sertifikatlari olinmoqda"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Sinxronizatsiya yakunlandi"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g> ochilmoqda"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Ulanmadi"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Registratsiya tamomlanmoqda…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Registratsiya tamomlanmadi. Qayta urinish uchun tegining."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Registratsiya qilindi. Ulanmoqda…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Juda sekin"</string> <string name="speed_label_slow" msgid="813109590815810235">"Sekin"</string> <string name="speed_label_okay" msgid="2331665440671174858">"OK"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Ekranning yoniq turishi"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Qurilma quvvat olayotganda ekran doim yoniq turadi"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI amallari translatsiyasi jurnali"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Barcha Bluetooth paketlarini saqlash. (Sozlashdan keyin Bluetooth qurilmasini qayta ishga tushiring)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Zavod qulfini yechish"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Operatsion tizimni yuklash dasturining qulfini yechishga ruxsat berish"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Zavod qulfini yechishga ruxsat berilsinmi?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Tarmoqlar"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Simsiz monitor sertifikatlari"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Batafsil Wi-Fi jurnali"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Wi-Fi orqali ulanganda tasodifiy MAC manzillar yaratish"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Mobil internet doim yoniq tursin"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Modem rejimida apparatli tezlashtirish"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bluetooth qurilmalarini nomlarisiz ko‘rsatish"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Ulanmadi"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Simsiz monitorlarni sertifikatlash parametrini ko‘rsatish"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Wi-Fi ulanishini tanlashda har bir SSID uchun jurnalda ko‘rsatilsin"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Wi-Fi tarmoqlarga ulanishda MAC manzilini tasodifiy tanlash"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Trafik hisoblanadigan tarmoq"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Trafik hisobi yuritilmaydigan tarmoq"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Jurnal buferi hajmi"</string> diff --git a/packages/SettingsLib/res/values-vi/arrays.xml b/packages/SettingsLib/res/values-vi/arrays.xml index bfc4d758231f..433df8eaa272 100644 --- a/packages/SettingsLib/res/values-vi/arrays.xml +++ b/packages/SettingsLib/res/values-vi/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Chỉ sử dụng kiểm tra HDCP cho nội dung DRM"</item> <item msgid="45075631231212732">"Luôn sử dụng kiểm tra HDCP"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Đã tắt"</item> + <item msgid="1969681323976948639">"Đã bật và lọc"</item> + <item msgid="8719029132154020716">"Đã bật"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (Mặc định)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml index 1cd1b298eed1..d03b2f175f60 100644 --- a/packages/SettingsLib/res/values-vi/strings.xml +++ b/packages/SettingsLib/res/values-vi/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Tự động được kết nối qua %1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Tự động được kết nối qua nhà cung cấp dịch vụ xếp hạng mạng"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Được kết nối qua %1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> của <xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Đã kết nối qua <xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Có sẵn qua %1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Nhấn để thiết lập"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Nhấn để đăng ký"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Đã kết nối, không có Internet"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Không có Internet"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Yêu cầu đăng nhập"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Điểm truy cập tạm thời đã đạt đến giới hạn số lượng thiết bị truy cập."</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Được kết nối qua %1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Có sẵn qua %1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Không kết nối được"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"URL máy chủ OSU không hợp lệ"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Không kết nối được với máy chủ OSU"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Không xác thực được máy chủ OSU"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Chứng chỉ máy chủ OSU không hợp lệ"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Đã hủy cấp phép"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Hiện không cấp phép được"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"URL máy chủ OSU không hợp lệ"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Loại lệnh không mong muốn"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Loại thông báo SOAP không mong muốn"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Không trao đổi được thông báo SOAP"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Không thể bắt đầu chuyển hướng người nghe"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Đã hết thời gian chờ chuyển hướng"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Không tìm thấy hoạt động OSU nào"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Trạng thái thông báo SOAP không mong muốn"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Không tìm thấy PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Không tìm thấy nút gốc tin cậy cho máy chủ AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Không tìm thấy nút gốc tin cậy cho máy chủ khắc phục"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Không tìm thấy nút gốc tin cậy cho máy chủ chính sách"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Không truy xuất được chứng chỉ gốc tin cậy"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Không tìm thấy chứng chỉ gốc tin cậy cho máy chủ AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Không thêm được cấu hình PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Không tìm thấy nhà cung cấp OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Đang kết nối"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Đã kết nối"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Đang kết nối với máy chủ OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Đã xác thực máy chủ OSU"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Đã kết nối với máy chủ OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Lần trao đổi SOAP ban đầu"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Đang đợi thông tin phản hồi chuyển hướng"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Đã nhận được thông tin phản hồi chuyển hướng"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Lần trao đổi SOAP thứ hai"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Lần trao đổi SOAP thứ ba"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Đang truy xuất chứng chỉ gốc tin cậy"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Quá trình cấp phép đã hoàn tất"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Đang mở <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Không thể kết nối"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Đang hoàn tất đăng ký…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Không thể hoàn tất đăng ký. Nhấn để thử lại."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Đã hoàn tất đăng ký. Đang kết nối…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Rất chậm"</string> <string name="speed_label_slow" msgid="813109590815810235">"Chậm"</string> <string name="speed_label_okay" msgid="2331665440671174858">"Khá tốt"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Không khóa màn hình"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Màn hình sẽ không bao giờ chuyển sang chế độ nghỉ khi sạc"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bật nhật ký theo dõi HCI Bluetooth"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Chụp các gói Bluetooth. (Chuyển đổi Bluetooth sau khi thay đổi tùy chọn cài đặt này)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Mở khóa OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Cho phép mở khóa trình khởi động"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Cho phép mở khóa OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Mạng"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Chứng nhận hiển thị không dây"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Bật ghi nhật ký chi tiết Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Lựa chọn ngẫu nhiên địa chỉ MAC khi kết nối"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Dữ liệu di động luôn hoạt động"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"Tăng tốc phần cứng cho chia sẻ kết nối"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Hiển thị các thiết bị Bluetooth không có tên"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Không thể kết nối"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Hiển thị tùy chọn chứng nhận hiển thị không dây"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"Tăng mức ghi nhật ký Wi‑Fi, hiển thị mỗi SSID RSSI trong bộ chọn Wi‑Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Lựa chọn ngẫu nhiên địa chỉ MAC khi kết nối với mạng Wi‑Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Đo lượng dữ liệu"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Không đo lượng dữ liệu"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Kích thước bộ đệm của trình ghi nhật ký"</string> diff --git a/packages/SettingsLib/res/values-zh-rCN/arrays.xml b/packages/SettingsLib/res/values-zh-rCN/arrays.xml index 82d8fae8ff8a..270682376ede 100644 --- a/packages/SettingsLib/res/values-zh-rCN/arrays.xml +++ b/packages/SettingsLib/res/values-zh-rCN/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"仅使用 HDCP 检查 DRM 内容"</item> <item msgid="45075631231212732">"始终使用 HDCP 检查"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"已停用"</item> + <item msgid="1969681323976948639">"已启用“已过滤”"</item> + <item msgid="8719029132154020716">"已启用"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4(默认)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml index f656e1efa12b..69674472028c 100644 --- a/packages/SettingsLib/res/values-zh-rCN/strings.xml +++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"已通过%1$s自动连接"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"已自动连接(通过网络评分服务提供方)"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"已通过%1$s连接"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g>(通过<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>连接)"</string> + <string name="connected_via_app" msgid="5571999941988929520">"已通过<xliff:g id="NAME">%1$s</xliff:g>连接到网络"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"可通过%1$s连接"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"点按即可进行设置"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"点按即可注册"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"已连接,但无法访问互联网"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"无法访问互联网"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"必须登录"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"接入点暂时满载"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"已通过%1$s连接"</string> <string name="available_via_carrier" msgid="1469036129740799053">"可通过%1$s连接"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"连接失败"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"OSU 服务器网址无效"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"无法连接到 OSU 服务器"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"OSU 服务器验证失败"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"OSU 服务器证书无效"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"已取消配置"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"配置不可用"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"OSU 服务器网址无效"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"非预期的命令类型"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"非预期的 SOAP 消息类型"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"无法交换 SOAP 消息"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"无法启动重定向侦听器"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"等待重定向时出现超时问题"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"未找到任何 OSU 活动"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"非预期的 SOAP 消息状态"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"找不到 PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"找不到 AAA 服务器的信任根节点"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"找不到修复服务器的信任根节点"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"找不到政策服务器的信任根节点"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"未能检索到信任的根证书"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"找不到 AAA 服务器的信任根证书"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"无法添加 PassPoint 配置"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"找不到 OSU 提供程序"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"正在连接"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"已连接"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"正在连接到 OSU 服务器"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU 服务器已经过验证"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"已连接到 OSU 服务器"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"初始 SOAP 交换"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"正在等待重定向响应"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"已收到重定向响应"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"第二次 SOAP 交换"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"第三次 SOAP 交换"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"正在检索信任的根证书"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"配置完成"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"正在打开<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"无法连接"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"正在完成注册…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"无法完成注册。点按即可重试。"</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"注册完毕。正在连接…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"很慢"</string> <string name="speed_label_slow" msgid="813109590815810235">"慢"</string> <string name="speed_label_okay" msgid="2331665440671174858">"良好"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"不锁定屏幕"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"充电时屏幕不会休眠"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"启用蓝牙 HCI 信息收集日志"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"捕获蓝牙数据包(更改此设置之后请切换蓝牙开关)。"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM 解锁"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"允许解锁引导加载程序"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"要允许 OEM 解锁吗?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"网络"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"无线显示认证"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"启用 WLAN 详细日志记录功能"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"连接时随机选择 MAC 网址"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"始终开启移动数据网络"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"网络共享硬件加速"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"显示没有名称的蓝牙设备"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"无法连接"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"显示无线显示认证选项"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"提升 WLAN 日志记录级别(在 WLAN 选择器中显示每个 SSID 的 RSSI)"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"连接到 WLAN 网络时随机选择 MAC 地址"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"按流量计费"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"不按流量计费"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"日志记录器缓冲区大小"</string> diff --git a/packages/SettingsLib/res/values-zh-rHK/arrays.xml b/packages/SettingsLib/res/values-zh-rHK/arrays.xml index 0a956fc68267..8872cc96fd16 100644 --- a/packages/SettingsLib/res/values-zh-rHK/arrays.xml +++ b/packages/SettingsLib/res/values-zh-rHK/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"僅使用 HDCP 檢查 DRM 內容"</item> <item msgid="45075631231212732">"永遠使用 HDCP 檢查"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"已停用"</item> + <item msgid="1969681323976948639">"已啟用篩選"</item> + <item msgid="8719029132154020716">"已啟用"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (預設)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml index 325a56ab8865..5394afc32334 100644 --- a/packages/SettingsLib/res/values-zh-rHK/strings.xml +++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"已透過 %1$s 自動連線"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"已透過網絡評分供應商自動連線"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"已透過 %1$s 連線"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>的「<xliff:g id="SSID">%1$s</xliff:g>」"</string> + <string name="connected_via_app" msgid="5571999941988929520">"透過「<xliff:g id="NAME">%1$s</xliff:g>」連線"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"可透過 %1$s 連線"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"輕按即可設定"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"輕觸即可註冊"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"已連線,但沒有互聯網"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"沒有互聯網連線"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"必須登入"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"存取點暫時已滿"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"已透過 %1$s 連線"</string> <string name="available_via_carrier" msgid="1469036129740799053">"可透過 %1$s 連線"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"連接失敗"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"無效的 OSU 伺服器網址"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"無法連接 OSU 伺服器"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"無法驗證 OSU 伺服器"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"無效的 OSU 伺服器憑證"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"已取消佈建"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"無法佈建"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"無效的 OSU 伺服器網址"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"非預期的指令類型"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"非預期的 SOAP 訊息類型"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"無法交換 SOAP 訊息"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"無法啟用重新導向非同步回呼"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"等待重新導向逾時"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"找不到 OSU 活動"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"非預期的 SOAP 訊息狀態"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"找不到 PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"找不到可信賴的 AAA 伺服器根節點"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"找不到可信賴的修復伺服器根節點"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"找不到可信賴的政策伺服器根節點"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"無法擷取可信賴的根憑證"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"找不到可信賴的 AAA 伺服器根憑證"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"無法新增 PassPoint 設定"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"找不到 OSU 供應商"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"正在連接"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"已連接"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"正在連接至 OSU 伺服器"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"已驗證 OSU 伺服器"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"已連接至 OSU 伺服器"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"初始 SOAP 交換"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"正在等待重新導向回應"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"已收到重新導向回應"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"第二次 SOAP 交換"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"第三次 SOAP 交換"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"正在擷取可信賴的根憑證"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"佈建已完成"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"正在開啟 <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"無法連線"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"正在完成註冊程序…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"無法完成註冊程序。輕觸即可重試。"</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"註冊完成。連線中…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"非常慢"</string> <string name="speed_label_slow" msgid="813109590815810235">"慢"</string> <string name="speed_label_okay" msgid="2331665440671174858">"良好"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"保持啟用"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"充電時螢幕永不休眠"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"啟用藍牙 HCI 窺探記錄"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"擷取藍牙套裝。(變更此設定後必須切換藍牙)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"原始設備製造商 (OEM) 解鎖"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"允許 Bootloader 被解鎖"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"允許原始設備製造商 (OEM) 解鎖嗎?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"網絡"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"無線螢幕分享認證"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"啟用 Wi‑Fi 詳細記錄"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"已連線的 MAC 隨機化處理"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"一律保持啟用流動數據"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"網絡共享硬件加速"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"顯示沒有名稱的藍牙裝置"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"無法連線"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"顯示無線螢幕分享認證的選項"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"讓 Wi‑Fi 記錄功能升級,在 Wi‑Fi 選擇器中依每個 SSID RSSI 顯示 Wi‑Fi 詳細紀錄"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"連線至 Wi‑Fi 網絡時隨機產生 MAC 位址"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"按用量收費"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"不限數據用量收費"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"記錄器緩衝區空間"</string> diff --git a/packages/SettingsLib/res/values-zh-rTW/arrays.xml b/packages/SettingsLib/res/values-zh-rTW/arrays.xml index 20d0242465d8..207be3f6756c 100644 --- a/packages/SettingsLib/res/values-zh-rTW/arrays.xml +++ b/packages/SettingsLib/res/values-zh-rTW/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"僅使用 HDCP 檢查 DRM 內容"</item> <item msgid="45075631231212732">"一律使用 HDCP 檢查"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"已停用"</item> + <item msgid="1969681323976948639">"已啟用篩選結果"</item> + <item msgid="8719029132154020716">"已啟用"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"AVRCP 1.4 (預設)"</item> <item msgid="2809759619990248160">"AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml index dff2faba76ca..107eb6de564f 100644 --- a/packages/SettingsLib/res/values-zh-rTW/strings.xml +++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"已透過 %1$s 自動連線"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"已透過網路評分供應商自動連線"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"已透過 %1$s 連線"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> (透過「<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>」連線)"</string> + <string name="connected_via_app" msgid="5571999941988929520">"透過「<xliff:g id="NAME">%1$s</xliff:g>」連線"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"可透過 %1$s 使用"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"輕觸即可進行設定"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"輕觸即可註冊"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"已連線,沒有網際網路"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"沒有網際網路連線"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"必須登入"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"存取點暫時滿載"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"已透過 %1$s 連線"</string> <string name="available_via_carrier" msgid="1469036129740799053">"可透過 %1$s 使用"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"連線失敗"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"無效的 OSU 伺服器網址"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"無法連線至 OSU 伺服器"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"無法驗證 OSU 伺服器"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"無效的 OSU 伺服器憑證"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"已取消佈建作業"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"無法進行佈建"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"無效的 OSU 伺服器網址"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"非預期的指令類型"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"非預期的 SOAP 訊息類型"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"無法交換 SOAP 訊息"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"無法啟動重新導向接聽器"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"等待重新導向的過程中發生逾時情形"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"找不到 OSU 活動"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"非預期的 SOAP 訊息狀態"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"找不到 PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"找不到 AAA 伺服器的可信任根節點"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"找不到修正伺服器的可信任根節點"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"找不到政策伺服器的可信任根節點"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"無法擷取信任的根憑證"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"找不到 AAA 伺服器的可信任根憑證"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"無法新增 PassPoint 設定"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"找不到 OSU 提供者"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"連線中"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"已連線"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"正在連線至 OSU 伺服器"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"OSU 伺服器已通過驗證"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"已連線至 OSU 伺服器"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"初始 SOAP 交換"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"正在等待重新導向回覆"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"已接收重新導向回覆"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"第二次 SOAP 交換"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"第三次 SOAP 交換"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"正在擷取信任的根憑證"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"已完成佈建作業"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"正在開啟 <xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"無法連線"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"正在完成註冊程序…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"無法完成註冊程序。輕觸即可重試。"</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"註冊完成。連線中…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"非常慢"</string> <string name="speed_label_slow" msgid="813109590815810235">"慢"</string> <string name="speed_label_okay" msgid="2331665440671174858">"確定"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"螢幕不休眠"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"充電時螢幕不會進入休眠"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"啟用藍牙 HCI 窺探記錄"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"擷取藍牙數據包 (變更這項設定後請切換藍牙)。"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"OEM 解鎖"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"允許解除鎖定開機載入器"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"要允許 OEM 解鎖嗎?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"網路連線"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"無線螢幕分享認證"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"啟用 Wi‑Fi 詳細記錄設定"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"已連線的 MAC 隨機化處理"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"行動數據連線一律保持啟用狀態"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"數據連線硬體加速"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"顯示沒有名稱的藍牙裝置"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"無法連線"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"顯示無線螢幕分享認證的選項"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"讓 Wi‑Fi 記錄功能升級,在 Wi‑Fi 選擇器中依每個 SSID RSSI 顯示 Wi‑Fi 詳細記錄"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"連線至 Wi‑Fi 網路時隨機化 MAC 位址"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"計量付費"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"非計量付費"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"記錄器緩衝區空間"</string> diff --git a/packages/SettingsLib/res/values-zu/arrays.xml b/packages/SettingsLib/res/values-zu/arrays.xml index caa7da3029b1..20983e34745c 100644 --- a/packages/SettingsLib/res/values-zu/arrays.xml +++ b/packages/SettingsLib/res/values-zu/arrays.xml @@ -58,9 +58,11 @@ <item msgid="3878793616631049349">"Sebenzisa ukuhlola kwe-HDCP kokuqukethwe i-DRM kuphela"</item> <item msgid="45075631231212732">"Sebenzisa njalo ukuhlola kwe-HDPC"</item> </string-array> - <!-- no translation found for bt_hci_snoop_log_entries:0 (3966341281672645384) --> - <!-- no translation found for bt_hci_snoop_log_entries:1 (1969681323976948639) --> - <!-- no translation found for bt_hci_snoop_log_entries:2 (8719029132154020716) --> + <string-array name="bt_hci_snoop_log_entries"> + <item msgid="3966341281672645384">"Kukhutshaziwe"</item> + <item msgid="1969681323976948639">"Okuhlungiwe okunikwe amandla"</item> + <item msgid="8719029132154020716">"Kunikwe amandla"</item> + </string-array> <string-array name="bluetooth_avrcp_versions"> <item msgid="5347678900838034763">"I-AVRCP 1.4 (Okuzenzakalelayo)"</item> <item msgid="2809759619990248160">"I-AVRCP 1.3"</item> diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml index b8c1637096c8..920df4b81475 100644 --- a/packages/SettingsLib/res/values-zu/strings.xml +++ b/packages/SettingsLib/res/values-zu/strings.xml @@ -38,50 +38,20 @@ <string name="connected_via_network_scorer" msgid="5713793306870815341">"Ixhumeke ngokuzenzakalela nge-%1$s"</string> <string name="connected_via_network_scorer_default" msgid="7867260222020343104">"Kuxhunywe ngokuzenzakalelayo ngomhlinzeki wesilinganiso wenethiwekhi"</string> <string name="connected_via_passpoint" msgid="2826205693803088747">"Kuxhumeke nge-%1$s"</string> - <string name="ssid_by_passpoint_provider" msgid="7898171424140673315">"<xliff:g id="SSID">%1$s</xliff:g> ngo-<xliff:g id="PASSPOINTPROVIDER">%2$s</xliff:g>"</string> + <string name="connected_via_app" msgid="5571999941988929520">"Ixhumeke nge-<xliff:g id="NAME">%1$s</xliff:g>"</string> <string name="available_via_passpoint" msgid="1617440946846329613">"Iyatholakala nge-%1$s"</string> - <string name="tap_to_set_up" msgid="2468970825530423314">"Thepha ukuze usethe"</string> + <string name="tap_to_sign_up" msgid="6449724763052579434">"Thepha ukuze ubhalisele"</string> <string name="wifi_connected_no_internet" msgid="8202906332837777829">"Kuxhunyiwe, ayikho i-inthanethi"</string> <string name="wifi_status_no_internet" msgid="5784710974669608361">"Ayikho i-inthanethi"</string> <string name="wifi_status_sign_in_required" msgid="123517180404752756">"Ukungena ngemvume kuyadingeka"</string> <string name="wifi_ap_unable_to_handle_new_sta" msgid="5348824313514404541">"Iphoyinti lokufinyelela ligcwele okwesikhashana"</string> <string name="connected_via_carrier" msgid="7583780074526041912">"Kuxhumeke nge-%1$s"</string> <string name="available_via_carrier" msgid="1469036129740799053">"Iyatholakala nge-%1$s"</string> - <string name="osu_failure_ap_connection" msgid="598977488344424542">"Ukuxhumeka kuhlulekile"</string> - <string name="osu_failure_server_url_invalid" msgid="2237477219243136714">"I-URL yeseva ye-OSU engavumelekile"</string> - <string name="osu_failure_server_connection" msgid="8192988165059982174">"Ukuxhumeka kweseva ye-OSU kuhlulekile"</string> - <string name="osu_failure_server_validation" msgid="4631649978129606823">"Ukuqinisekiswa kweseva ye-OSU kuhlulekile"</string> - <string name="osu_failure_service_provider_verification" msgid="4854091521439785597">"Isitifiketi esingavumelekile seseva ye-OSU"</string> - <string name="osu_failure_provisioning_aborted" msgid="424627208135320329">"Ukunikezelwa kuyekeliwe"</string> - <string name="osu_failure_provisioning_not_available" msgid="3021783729256985432">"Ukunikezelwa akutholakali"</string> - <string name="osu_failure_invalid_server_url" msgid="8548886196179435758">"I-URL yeseva ye-OSU engavumelekile"</string> - <string name="osu_failure_unexpected_command_type" msgid="8245921319866603904">"Uhlobo lomyalo ongalindelwe"</string> - <string name="osu_failure_unexpected_soap_message_type" msgid="2255897608510053065">"Uhlobo lomlayezo ongalindelwe we-SOAP"</string> - <string name="osu_failure_soap_message_exchange" msgid="4357358438685987192">"Ukushintshaniswa komlayezo we-SOAP kuhlulekile"</string> - <string name="osu_failure_start_redirect_listener" msgid="4292769407279548482">"Ukuqondisa kabusha umlaleli kuhlulekile ukuqala"</string> - <string name="osu_failure_timed_out_redirect_listener" msgid="3168657820278807508">"Iphelelwe isikhathi ilindele ukuqondiswa kabusha"</string> - <string name="osu_failure_no_osu_activity_found" msgid="4593038891437878675">"Awukho umsebenzi we-OSU otholiwe"</string> - <string name="osu_failure_unexpected_soap_message_status" msgid="6568467710235256675">"Isimo somlayezo we-SOAP ongalindelwe"</string> - <string name="osu_failure_no_pps_mo" msgid="850567403039076835">"Yehlulekile ukuthola i-PPS-MO"</string> - <string name="osu_failure_no_aaa_server_trust_root_node" msgid="8961455873459838456">"Yehlulekile ukuthola inodi yempande yokuthemba yeseva ye-AAA"</string> - <string name="osu_failure_no_remediation_server_trust_root_node" msgid="5041179688081545244">"Yehlulekile ukuthola inodi yempande yokuthemba yeseva yokuxazulula"</string> - <string name="osu_failure_no_policy_server_trust_root_node" msgid="6617290380940513539">"Yehlulekile ukuthola inodi yempande yokuthemba yeseva yenqubomgomo"</string> - <string name="osu_failure_retrieve_trust_root_certificates" msgid="1499136256195528265">"Yehlulekile ukuthola izitofiketi zempande yokuthenga"</string> - <string name="osu_failure_no_aaa_trust_root_certificate" msgid="1904322497042226984">"Yehlulekile ukuthola isitifiketi sempande yokuthemba yamaseva e-AAA"</string> - <string name="osu_failure_add_passpoint_configuration" msgid="2173557755811446047">"Yehlulekile ukungeza ukulungiselelwa kwe-PassPoint"</string> - <string name="osu_failure_osu_provider_not_found" msgid="6616172862116673082">"Yehlulekile ukuthola umhlinzeki we-OSU"</string> - <string name="osu_status_ap_connecting" msgid="5296821043003441437">"Iyaxhuma"</string> - <string name="osu_status_ap_connected" msgid="3777289375683170728">"Ixhunyiwe"</string> - <string name="osu_status_server_connecting" msgid="8499785407540355867">"Ixhumeka kuseva ye-OSU"</string> - <string name="osu_status_server_validated" msgid="3158727184762596355">"Iseva ye-OSU iqinisekisiwe"</string> - <string name="osu_status_server_connected" msgid="8382024481520158168">"Ixhumeke kuseva ye-OSU"</string> - <string name="osu_status_init_soap_exchange" msgid="8628063888912101981">"Ukushintshisana kwasekuqaleni kwe-SOAP"</string> - <string name="osu_status_waiting_for_redirect_response" msgid="2343016207837053197">"Ilindele impendulo yokuqondisa kabusha"</string> - <string name="osu_status_redirect_response_received" msgid="5323368411922609405">"Ithole impendulo eqondiswe kabusha"</string> - <string name="osu_status_second_soap_exchange" msgid="7115332266758483909">"Ukushintshisana kwesibili kwe-SOAP"</string> - <string name="osu_status_third_soap_exchange" msgid="8460901783597440766">"Ukushintshaniswa kwesithathu kwe-SOAP"</string> - <string name="osu_status_retrieving_trust_root_certs" msgid="1563445892926269689">"Ithola izitifiketi zempande yokuthemba"</string> - <string name="osu_provisioning_complete" msgid="5120178802493970149">"Ukunikezelwa kuqediwe"</string> + <string name="osu_opening_provider" msgid="5488997661548640424">"Ivula i-<xliff:g id="PASSPOINTPROVIDER">%1$s</xliff:g>"</string> + <string name="osu_connect_failed" msgid="2187750899158158934">"Ayikwazanga ukuxhumeka"</string> + <string name="osu_completing_sign_up" msgid="9037638564719197082">"Iqedela ukubhalisa…"</string> + <string name="osu_sign_up_failed" msgid="7296159750352873260">"Ayikwazanga ukuqedelela ukubhalisa. Thepha ukuze uzame futhi."</string> + <string name="osu_sign_up_complete" msgid="8207626049093289203">"Ukubhalisa kuqediwe. Iyaxhuma…"</string> <string name="speed_label_very_slow" msgid="1867055264243608530">"Phansi kakhulu"</string> <string name="speed_label_slow" msgid="813109590815810235">"Phansi"</string> <string name="speed_label_okay" msgid="2331665440671174858">"KULUNGILE"</string> @@ -234,8 +204,7 @@ <string name="keep_screen_on" msgid="1146389631208760344">"Hlala uphapheme"</string> <string name="keep_screen_on_summary" msgid="2173114350754293009">"Isikrini asisoze salala ngenkathi sishaja"</string> <string name="bt_hci_snoop_log" msgid="3340699311158865670">"Nika amandla i-Bluetooth HCI yelogu lokuhlola"</string> - <!-- no translation found for bt_hci_snoop_log_summary (8857606786588106495) --> - <skip /> + <string name="bt_hci_snoop_log_summary" msgid="8857606786588106495">"Thwebula amaphakethi e-Bluetooth. (Guqula i-Bluetooth ngemuva kokushintsha lesi silungiselelo)"</string> <string name="oem_unlock_enable" msgid="6040763321967327691">"Ukuvula i-OEM"</string> <string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Vumela ukuthi i-bootloader ivulwe"</string> <string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"Vumela ukuvula i-OEM?"</string> @@ -246,7 +215,6 @@ <string name="debug_networking_category" msgid="7044075693643009662">"Ukunethiwekha"</string> <string name="wifi_display_certification" msgid="8611569543791307533">"Ukunikezwa isitifiketi sokubukeka okungenantambo"</string> <string name="wifi_verbose_logging" msgid="4203729756047242344">"Nika amandlaukungena kwe-Wi-Fi Verbose"</string> - <string name="wifi_connected_mac_randomization" msgid="3168165236877957767">"Okungahleliwe kwe-MAC exhunyiwe"</string> <string name="mobile_data_always_on" msgid="8774857027458200434">"Idatha yeselula ihlala isebenza"</string> <string name="tethering_hardware_offload" msgid="7470077827090325814">"I-Tethering hardware acceleration"</string> <string name="bluetooth_show_devices_without_names" msgid="4708446092962060176">"Bonisa amadivayisi e-Bluetooth ngaphandle kwamagama"</string> @@ -273,7 +241,6 @@ <string name="private_dns_mode_provider_failure" msgid="231837290365031223">"Ayikwazanga ukuxhuma"</string> <string name="wifi_display_certification_summary" msgid="1155182309166746973">"Bonisa izinketho zokunikeza isitifiketi ukubukeka okungenantambo"</string> <string name="wifi_verbose_logging_summary" msgid="6615071616111731958">"khuphula izinga lokungena le-Wi-Fi, bonisa nge-SSID RSSI engayodwana kusikhethi se-Wi-Fi"</string> - <string name="wifi_connected_mac_randomization_summary" msgid="1743059848752201485">"Ungahleli ikheli le-MAC uma kuxhumeke kumanethiwekhi e-Wi-Fi"</string> <string name="wifi_metered_label" msgid="4514924227256839725">"Kulinganisiwe"</string> <string name="wifi_unmetered_label" msgid="6124098729457992931">"Akulinganiselwa"</string> <string name="select_logd_size_title" msgid="7433137108348553508">"Amasayizi weloga ngebhafa"</string> diff --git a/packages/SettingsLib/src/com/android/settingslib/net/NetworkCycleDataForUidLoader.java b/packages/SettingsLib/src/com/android/settingslib/net/NetworkCycleDataForUidLoader.java index cc970b93f601..bd9a636883c2 100644 --- a/packages/SettingsLib/src/com/android/settingslib/net/NetworkCycleDataForUidLoader.java +++ b/packages/SettingsLib/src/com/android/settingslib/net/NetworkCycleDataForUidLoader.java @@ -26,21 +26,23 @@ import android.util.Log; import java.util.ArrayList; import java.util.List; +import androidx.annotation.VisibleForTesting; + /** - * Loader for network data usage history. It returns a list of usage data per billing cycle for a - * specific Uid. + * Loader for network data usage history. It returns a list of usage data per billing cycle for the + * specific Uid(s). */ public class NetworkCycleDataForUidLoader extends NetworkCycleDataLoader<List<NetworkCycleDataForUid>> { private static final String TAG = "NetworkDataForUidLoader"; private final List<NetworkCycleDataForUid> mData; - private final int mUid; + private final List<Integer> mUids; private final boolean mRetrieveDetail; private NetworkCycleDataForUidLoader(Builder builder) { super(builder); - mUid = builder.mUid; + mUids = builder.mUids; mRetrieveDetail = builder.mRetrieveDetail; mData = new ArrayList<NetworkCycleDataForUid>(); } @@ -48,18 +50,27 @@ public class NetworkCycleDataForUidLoader extends @Override void recordUsage(long start, long end) { try { - final NetworkStats stats = mNetworkStatsManager.queryDetailsForUid( - mNetworkType, mSubId, start, end, mUid); - final long total = getTotalUsage(stats); - if (total > 0L) { + long totalUsage = 0L; + long totalForeground = 0L; + for (int uid : mUids) { + final NetworkStats stats = mNetworkStatsManager.queryDetailsForUid( + mNetworkType, mSubId, start, end, uid); + final long usage = getTotalUsage(stats); + if (usage > 0L) { + totalUsage += usage; + if (mRetrieveDetail) { + totalForeground += getForegroundUsage(start, end, uid); + } + } + } + if (totalUsage > 0L) { final NetworkCycleDataForUid.Builder builder = new NetworkCycleDataForUid.Builder(); builder.setStartTime(start) .setEndTime(end) - .setTotalUsage(total); + .setTotalUsage(totalUsage); if (mRetrieveDetail) { - final long foreground = getForegroundUsage(start, end); - builder.setBackgroundUsage(total - foreground) - .setForegroundUsage(foreground); + builder.setBackgroundUsage(totalUsage - totalForeground) + .setForegroundUsage(totalForeground); } mData.add(builder.build()); } @@ -82,24 +93,29 @@ public class NetworkCycleDataForUidLoader extends }; } - private long getForegroundUsage(long start, long end) { + @VisibleForTesting(otherwise = VisibleForTesting.NONE) + public List<Integer> getUids() { + return mUids; + } + + private long getForegroundUsage(long start, long end, int uid) { final NetworkStats stats = mNetworkStatsManager.queryDetailsForUidTagState( - mNetworkType, mSubId, start, end, mUid, TAG_NONE, STATE_FOREGROUND); + mNetworkType, mSubId, start, end, uid, TAG_NONE, STATE_FOREGROUND); return getTotalUsage(stats); } public static abstract class Builder<T extends NetworkCycleDataForUidLoader> extends NetworkCycleDataLoader.Builder<T> { - private int mUid; + private final List<Integer> mUids = new ArrayList<>(); private boolean mRetrieveDetail = true; public Builder(Context context) { super(context); } - public Builder<T> setUid(int uid) { - mUid = uid; + public Builder<T> addUid(int uid) { + mUids.add(uid); return this; } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/net/NetworkCycleDataForUidLoaderTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/net/NetworkCycleDataForUidLoaderTest.java index d9159631e8a9..aafb46a1dbf1 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/net/NetworkCycleDataForUidLoaderTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/net/NetworkCycleDataForUidLoaderTest.java @@ -70,7 +70,7 @@ public class NetworkCycleDataForUidLoaderTest { final String subId = "TestSubscriber"; final int uid = 1; mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext) - .setUid(uid).setSubscriberId(subId).build()); + .addUid(uid).setSubscriberId(subId).build()); doReturn(1024L).when(mLoader).getTotalUsage(any()); mLoader.recordUsage(start, end); @@ -88,11 +88,32 @@ public class NetworkCycleDataForUidLoaderTest { final String subId = "TestSubscriber"; final int uid = 1; mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext) - .setRetrieveDetail(false).setUid(uid).setSubscriberId(subId).build()); + .setRetrieveDetail(false).addUid(uid).setSubscriberId(subId).build()); doReturn(1024L).when(mLoader).getTotalUsage(any()); mLoader.recordUsage(start, end); verify(mNetworkStatsManager, never()).queryDetailsForUidTagState( networkType, subId, start, end, uid, TAG_NONE, STATE_FOREGROUND); } + + @Test + public void recordUsage_multipleUids_shouldQueryNetworkDetailsForEachUid() { + final long end = System.currentTimeMillis(); + final long start = end - (DateUtils.WEEK_IN_MILLIS * 4); + final int networkType = ConnectivityManager.TYPE_MOBILE; + final String subId = "TestSubscriber"; + mLoader = spy(NetworkCycleDataForUidLoader.builder(mContext) + .addUid(1) + .addUid(2) + .addUid(3) + .setSubscriberId(subId).build()); + doReturn(1024L).when(mLoader).getTotalUsage(any()); + + mLoader.recordUsage(start, end); + + verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, 1); + verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, 2); + verify(mNetworkStatsManager).queryDetailsForUid(networkType, subId, start, end, 3); + } + } diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java index 479c964343c3..fad93cbf83da 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java @@ -2079,6 +2079,9 @@ class SettingsProtoDumpUtil { Settings.Secure.NOTIFICATION_BADGING, SecureSettingsProto.Notification.BADGING); dumpSetting(s, p, + Settings.Secure.NOTIFICATION_BUBBLES, + SecureSettingsProto.Notification.BUBBLES); + dumpSetting(s, p, Settings.Secure.SHOW_NOTE_ABOUT_NOTIFICATION_HIDING, SecureSettingsProto.Notification.SHOW_NOTE_ABOUT_NOTIFICATION_HIDING); dumpSetting(s, p, diff --git a/packages/SystemUI/res/drawable/bubble_expanded_header_bg.xml b/packages/SystemUI/res/drawable/bubble_expanded_header_bg.xml index 26bf981f9625..a76b7b1c8f7b 100644 --- a/packages/SystemUI/res/drawable/bubble_expanded_header_bg.xml +++ b/packages/SystemUI/res/drawable/bubble_expanded_header_bg.xml @@ -23,10 +23,4 @@ android:topRightRadius="@dimen/corner_size"/> </shape> </item> - <item android:gravity="bottom"> - <shape> - <size android:height="1dp"/> - <solid android:color="?android:attr/textColorSecondary" /> - </shape> - </item> </layer-list>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/bubble_expanded_view.xml b/packages/SystemUI/res/layout/bubble_expanded_view.xml index f0d2b2eff130..f664c0581d7e 100644 --- a/packages/SystemUI/res/layout/bubble_expanded_view.xml +++ b/packages/SystemUI/res/layout/bubble_expanded_view.xml @@ -14,7 +14,7 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License --> -<com.android.systemui.bubbles.BubbleExpandedViewContainer +<com.android.systemui.bubbles.BubbleExpandedView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_height="wrap_content" android:layout_width="match_parent" @@ -27,48 +27,70 @@ android:layout_height="@dimen/bubble_pointer_height" /> - <LinearLayout - android:id="@+id/header_layout" - android:layout_height="@dimen/bubble_expanded_header_height" - android:layout_width="match_parent" - android:orientation="horizontal" + <FrameLayout + android:id="@+id/header_permission_wrapper" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:animateLayoutChanges="true" android:background="@drawable/bubble_expanded_header_bg"> - <TextView - android:id="@+id/header_text" - android:textAppearance="@*android:style/TextAppearance.Material.Title" - android:textSize="18sp" - android:layout_weight="1" - android:layout_width="0dp" - android:layout_height="match_parent" - android:gravity="start|center_vertical" - android:singleLine="true" - android:paddingLeft="@dimen/bubble_expanded_header_horizontal_padding" - android:paddingRight="@dimen/bubble_expanded_header_horizontal_padding" - /> + <LinearLayout + android:id="@+id/header_layout" + android:layout_height="@dimen/bubble_expanded_header_height" + android:layout_width="match_parent" + android:animateLayoutChanges="true" + android:orientation="horizontal"> - <ImageButton - android:id="@+id/deep_link_button" - android:layout_width="@dimen/bubble_header_icon_size" - android:layout_height="@dimen/bubble_header_icon_size" - android:gravity="end|center_vertical" - android:src="@drawable/ic_open_in_new" - android:scaleType="center" - android:tint="?android:attr/colorForeground" - android:background="?android:attr/selectableItemBackground" - /> + <TextView + android:id="@+id/header_text" + android:textAppearance="@*android:style/TextAppearance.Material.Title" + android:textSize="18sp" + android:layout_weight="1" + android:layout_width="0dp" + android:layout_height="match_parent" + android:gravity="start|center_vertical" + android:singleLine="true" + android:paddingLeft="@dimen/bubble_expanded_header_horizontal_padding" + android:paddingRight="@dimen/bubble_expanded_header_horizontal_padding" + /> + + <ImageButton + android:id="@+id/deep_link_button" + android:layout_width="@dimen/bubble_header_icon_size" + android:layout_height="@dimen/bubble_header_icon_size" + android:gravity="end|center_vertical" + android:src="@drawable/ic_open_in_new" + android:scaleType="center" + android:tint="?android:attr/colorForeground" + android:background="?android:attr/selectableItemBackground" + /> - <ImageButton - android:id="@id/settings_button" - android:layout_width="@dimen/bubble_header_icon_size" - android:layout_height="@dimen/bubble_header_icon_size" - android:src="@drawable/ic_settings" - android:gravity="end|center_vertical" - android:scaleType="center" - android:tint="?android:attr/colorForeground" - android:background="?android:attr/selectableItemBackground" + <ImageButton + android:id="@id/settings_button" + android:layout_width="@dimen/bubble_header_icon_size" + android:layout_height="@dimen/bubble_header_icon_size" + android:src="@drawable/ic_settings" + android:gravity="end|center_vertical" + android:scaleType="center" + android:tint="?android:attr/colorForeground" + android:background="?android:attr/selectableItemBackground" + /> + + </LinearLayout> + + <include layout="@layout/bubble_permission_view" + android:id="@+id/permission_layout" + android:layout_width="match_parent" + android:layout_height="wrap_content" /> - </LinearLayout> + <View + android:id="@+id/divider" + android:layout_width="match_parent" + android:layout_height="1dp" + android:layout_gravity="bottom" + android:background="?android:attr/dividerHorizontal"/> + + </FrameLayout> -</com.android.systemui.bubbles.BubbleExpandedViewContainer> +</com.android.systemui.bubbles.BubbleExpandedView> diff --git a/packages/SystemUI/res/layout/bubble_permission_view.xml b/packages/SystemUI/res/layout/bubble_permission_view.xml new file mode 100644 index 000000000000..7fbb78a6feee --- /dev/null +++ b/packages/SystemUI/res/layout/bubble_permission_view.xml @@ -0,0 +1,85 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- + Copyright 2019, 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. +--> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:animateLayoutChanges="true" + android:orientation="vertical" + android:paddingStart="@dimen/bubble_expanded_header_horizontal_padding" + android:paddingEnd="@dimen/bubble_expanded_header_horizontal_padding"> + + <!-- App info --> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:layout_marginTop="@dimen/bubble_expanded_header_horizontal_padding" > + + <ImageView + android:id="@+id/pkgicon" + android:layout_width="@dimen/bubble_permission_icon_size" + android:layout_height="@dimen/bubble_permission_icon_size" + android:layout_centerVertical="true" + android:layout_marginEnd="3dp" + /> + + <TextView + android:id="@+id/pkgname" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:textAppearance="@*android:style/TextAppearance.Material.Body2" + android:layout_marginStart="3dp" + android:layout_marginEnd="2dp" + android:singleLine="true" + android:gravity="center_vertical" + android:layout_centerVertical="true" + /> + </LinearLayout> + + <!-- Actual permission --> + <TextView + android:id="@+id/prompt" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + android:text="@string/bubbles_prompt" + style="@*android:style/TextAppearance.Material.Body1" /> + + <!-- Buttons --> + <LinearLayout + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:gravity="end" + android:orientation="horizontal"> + + <TextView + android:id="@+id/no_bubbles_button" + android:text="@string/no_bubbles" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:background="@drawable/ripple_drawable" + style="@style/TextAppearance.NotificationInfo.Button"/> + <TextView + android:id="@+id/yes_bubbles_button" + android:text="@string/yes_bubbles" + android:layout_width="wrap_content" + android:layout_height="match_parent" + android:background="@drawable/ripple_drawable" + style="@style/TextAppearance.NotificationInfo.Button"/> + </LinearLayout> +</LinearLayout>
\ No newline at end of file diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index a5c8eafb8e8f..03445352e330 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -1041,4 +1041,6 @@ <dimen name="bubble_stack_starting_offset_y">100dp</dimen> <!-- Size of image buttons in the bubble header --> <dimen name="bubble_header_icon_size">48dp</dimen> + <!-- Size of the app icon shown in the bubble permission view --> + <dimen name="bubble_permission_icon_size">24dp</dimen> </resources> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 5365dcf72f11..db4a6cc1d704 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -2356,5 +2356,12 @@ <!-- Text used for content description of settings button in the header of expanded bubble view. [CHAR_LIMIT=NONE] --> <string name="bubbles_settings_button_description">Open notification settings for <xliff:g id="app_name" example="YouTube">%1$s</xliff:g></string> + <!-- Text for asking the user whether bubbles (floating app content) should be enabled for an + app. [CHAR LIMIT=NONE] --> + <string name="bubbles_prompt">Allow bubbles from this app?</string> + <!-- Text used for button allowing user to opt out of bubbles [CHAR LIMIT=20] --> + <string name="no_bubbles">Block</string> + <!-- Text used for button allowing user to approve / enable bubbles [CHAR LIMIT=20] --> + <string name="yes_bubbles">Allow</string> </resources> diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index 0970c2136822..f277c4303ac1 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -205,6 +205,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private boolean mKeyguardGoingAway; private boolean mGoingToSleep; private boolean mBouncer; + private boolean mAuthInterruptActive; private boolean mBootCompleted; private boolean mNeedsSlowUnlockTransition; private boolean mHasLockscreenWallpaper; @@ -1565,10 +1566,15 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { } /** - * Request passive authentication, when sensors detect that a user might be present. + * Called whenever passive authentication is requested or aborted by a sensor. + * @param active If the interrupt started or ended. */ - public void onAuthInterruptDetected() { - if (DEBUG) Log.d(TAG, "onAuthInterruptDetected()"); + public void onAuthInterruptDetected(boolean active) { + if (DEBUG) Log.d(TAG, "onAuthInterruptDetected(" + active + ")"); + if (mAuthInterruptActive == active) { + return; + } + mAuthInterruptActive = active; updateFaceListeningState(); } @@ -1612,7 +1618,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { final boolean awakeKeyguard = mKeyguardIsVisible && mDeviceInteractive && !mGoingToSleep; final int user = getCurrentUser(); - return (mBouncer || awakeKeyguard || shouldListenForFaceAssistant()) + return (mBouncer || mAuthInterruptActive || awakeKeyguard || shouldListenForFaceAssistant()) && !mSwitchingUser && !getUserCanSkipBouncer(user) && !isFaceDisabled(user) && !mKeyguardGoingAway && !mFaceLockedOut && mFaceSettingEnabledForUser && mUserManager.isUserUnlocked(user); diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java index 9a9a52f40227..d6a46a9e3458 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java @@ -70,7 +70,7 @@ import javax.inject.Singleton; * The controller manages addition, removal, and visible state of bubbles on screen. */ @Singleton -public class BubbleController { +public class BubbleController implements BubbleExpandedView.OnBubbleBlockedListener { private static final int MAX_BUBBLES = 5; // TODO: actually enforce this private static final String TAG = "BubbleController"; @@ -266,6 +266,7 @@ public class BubbleController { if (mExpandListener != null) { mStackView.setExpandListener(mExpandListener); } + mStackView.setOnBlockedListener(this); } // It's new BubbleView bubble = (BubbleView) mInflater.inflate( @@ -302,6 +303,19 @@ public class BubbleController { updateVisibility(); } + @Override + public void onBubbleBlocked(NotificationEntry entry) { + Object[] bubbles = mBubbles.values().toArray(); + for (int i = 0; i < bubbles.length; i++) { + NotificationEntry e = ((BubbleView) bubbles[i]).getEntry(); + boolean samePackage = entry.notification.getPackageName().equals( + e.notification.getPackageName()); + if (samePackage) { + removeBubble(entry.key); + } + } + } + @SuppressWarnings("FieldCanBeLocal") private final NotificationEntryListener mEntryListener = new NotificationEntryListener() { @Override @@ -446,20 +460,9 @@ public class BubbleController { @VisibleForTesting protected boolean shouldBubble(NotificationEntry entry) { StatusBarNotification n = entry.notification; - boolean canAppOverlay = false; - try { - canAppOverlay = mNotificationManagerService.areBubblesAllowedForPackage( - n.getPackageName(), n.getUid()); - } catch (RemoteException e) { - Log.w(TAG, "Error calling NoMan to determine if app can overlay", e); - } - - NotificationChannel channel = mNotificationEntryManager.getNotificationData().getChannel( - entry.key); - boolean canChannelOverlay = channel != null && channel.canBubble(); boolean hasOverlayIntent = n.getNotification().getBubbleMetadata() != null && n.getNotification().getBubbleMetadata().getIntent() != null; - return hasOverlayIntent && canChannelOverlay && canAppOverlay; + return hasOverlayIntent && entry.canBubble; } /** diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedViewContainer.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java index 67b18fdfc858..bf9d7ba61189 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedViewContainer.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleExpandedView.java @@ -16,7 +16,10 @@ package com.android.systemui.bubbles; +import android.animation.LayoutTransition; +import android.animation.ObjectAnimator; import android.annotation.Nullable; +import android.app.INotificationManager; import android.app.Notification; import android.app.PendingIntent; import android.content.Context; @@ -26,16 +29,21 @@ import android.content.pm.PackageManager; import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.Color; +import android.graphics.drawable.Drawable; import android.graphics.drawable.ShapeDrawable; +import android.os.RemoteException; +import android.os.ServiceManager; import android.provider.Settings; -import android.text.TextUtils; import android.util.AttributeSet; import android.util.Log; import android.view.View; +import android.widget.FrameLayout; import android.widget.ImageButton; +import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.TextView; +import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.recents.TriangleShape; import com.android.systemui.statusbar.notification.collection.NotificationEntry; @@ -43,43 +51,58 @@ import com.android.systemui.statusbar.notification.collection.NotificationEntry; /** * Container for the expanded bubble view, handles rendering the caret and header of the view. */ -public class BubbleExpandedViewContainer extends LinearLayout implements View.OnClickListener { +public class BubbleExpandedView extends LinearLayout implements View.OnClickListener { private static final String TAG = "BubbleExpandedView"; // The triangle pointing to the expanded view private View mPointerView; - // The view displayed between the pointer and the expanded view - private TextView mHeaderView; - // Tappable header icon deeplinking into the app + + // Header + private View mHeaderView; + private TextView mHeaderTextView; private ImageButton mDeepLinkIcon; - // Tappable header icon deeplinking into notification settings private ImageButton mSettingsIcon; + + // Permission view + private View mPermissionView; + // The view that is being displayed for the expanded state private View mExpandedView; private NotificationEntry mEntry; private PackageManager mPm; private String mAppName; + private Drawable mAppIcon; + + private INotificationManager mNotificationManagerService; // Need reference to let it know to collapse when new task is launched private BubbleStackView mStackView; - public BubbleExpandedViewContainer(Context context) { + private OnBubbleBlockedListener mOnBubbleBlockedListener; + + public BubbleExpandedView(Context context) { this(context, null); } - public BubbleExpandedViewContainer(Context context, AttributeSet attrs) { + public BubbleExpandedView(Context context, AttributeSet attrs) { this(context, attrs, 0); } - public BubbleExpandedViewContainer(Context context, AttributeSet attrs, int defStyleAttr) { + public BubbleExpandedView(Context context, AttributeSet attrs, int defStyleAttr) { this(context, attrs, defStyleAttr, 0); } - public BubbleExpandedViewContainer(Context context, AttributeSet attrs, int defStyleAttr, + public BubbleExpandedView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); mPm = context.getPackageManager(); + try { + mNotificationManagerService = INotificationManager.Stub.asInterface( + ServiceManager.getServiceOrThrow(Context.NOTIFICATION_SERVICE)); + } catch (ServiceManager.ServiceNotFoundException e) { + Log.w(TAG, e); + } } @Override @@ -101,11 +124,39 @@ public class BubbleExpandedViewContainer extends LinearLayout implements View.On triangleDrawable.setTint(bgColor); mPointerView.setBackground(triangleDrawable); - mHeaderView = findViewById(R.id.header_text); + FrameLayout viewWrapper = findViewById(R.id.header_permission_wrapper); + LayoutTransition transition = new LayoutTransition(); + transition.setDuration(200); + + ObjectAnimator appearAnimator = ObjectAnimator.ofFloat(null, View.ALPHA, 0f, 1f); + transition.setAnimator(LayoutTransition.APPEARING, appearAnimator); + transition.setInterpolator(LayoutTransition.APPEARING, Interpolators.ALPHA_IN); + + ObjectAnimator disappearAnimator = ObjectAnimator.ofFloat(null, View.ALPHA, 1f, 0f); + transition.setAnimator(LayoutTransition.DISAPPEARING, disappearAnimator); + transition.setInterpolator(LayoutTransition.DISAPPEARING, Interpolators.ALPHA_OUT); + + transition.setAnimateParentHierarchy(false); + viewWrapper.setLayoutTransition(transition); + viewWrapper.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING); + + mHeaderView = findViewById(R.id.header_layout); + mHeaderTextView = findViewById(R.id.header_text); mDeepLinkIcon = findViewById(R.id.deep_link_button); mSettingsIcon = findViewById(R.id.settings_button); mDeepLinkIcon.setOnClickListener(this); mSettingsIcon.setOnClickListener(this); + + mPermissionView = findViewById(R.id.permission_layout); + findViewById(R.id.no_bubbles_button).setOnClickListener(this); + findViewById(R.id.yes_bubbles_button).setOnClickListener(this); + } + + /** + * Sets the listener to notify when a bubble has been blocked. + */ + public void setOnBlockedListener(OnBubbleBlockedListener listener) { + mOnBubbleBlockedListener = listener; } /** @@ -125,13 +176,17 @@ public class BubbleExpandedViewContainer extends LinearLayout implements View.On | PackageManager.MATCH_DIRECT_BOOT_AWARE); if (info != null) { mAppName = String.valueOf(mPm.getApplicationLabel(info)); + mAppIcon = mPm.getApplicationIcon(info); } } catch (PackageManager.NameNotFoundException e) { // Ahh... just use package name mAppName = entry.notification.getPackageName(); } - + if (mAppIcon == null) { + mAppIcon = mPm.getDefaultActivityIcon(); + } updateHeaderView(); + updatePermissionView(); } private void updateHeaderView() { @@ -140,11 +195,31 @@ public class BubbleExpandedViewContainer extends LinearLayout implements View.On mDeepLinkIcon.setContentDescription(getResources().getString( R.string.bubbles_deep_link_button_description, mAppName)); if (mEntry != null && mEntry.getBubbleMetadata() != null) { - setHeaderText(mEntry.getBubbleMetadata().getTitle()); + mHeaderTextView.setText(mEntry.getBubbleMetadata().getTitle()); } else { // This should only happen if we're auto-bubbling notification content that isn't // explicitly a bubble - setHeaderText(mAppName); + mHeaderTextView.setText(mAppName); + } + } + + private void updatePermissionView() { + boolean hasUserApprovedBubblesForPackage = false; + try { + hasUserApprovedBubblesForPackage = + mNotificationManagerService.hasUserApprovedBubblesForPackage( + mEntry.notification.getPackageName(), mEntry.notification.getUid()); + } catch (RemoteException e) { + Log.w(TAG, e); + } + if (hasUserApprovedBubblesForPackage) { + mHeaderView.setVisibility(VISIBLE); + mPermissionView.setVisibility(GONE); + } else { + mHeaderView.setVisibility(GONE); + mPermissionView.setVisibility(VISIBLE); + ((ImageView) mPermissionView.findViewById(R.id.pkgicon)).setImageDrawable(mAppIcon); + ((TextView) mPermissionView.findViewById(R.id.pkgname)).setText(mAppName); } } @@ -168,6 +243,27 @@ public class BubbleExpandedViewContainer extends LinearLayout implements View.On Intent intent = getSettingsIntent(mEntry.notification.getPackageName(), mEntry.notification.getUid()); mStackView.collapseStack(() -> mContext.startActivity(intent)); + } else if (id == R.id.no_bubbles_button) { + setBubblesAllowed(false); + } else if (id == R.id.yes_bubbles_button) { + setBubblesAllowed(true); + } + } + + private void setBubblesAllowed(boolean allowed) { + try { + mNotificationManagerService.setBubblesAllowed( + mEntry.notification.getPackageName(), + mEntry.notification.getUid(), + allowed); + if (allowed) { + mPermissionView.setVisibility(GONE); + mHeaderView.setVisibility(VISIBLE); + } else if (mOnBubbleBlockedListener != null) { + mOnBubbleBlockedListener.onBubbleBlocked(mEntry); + } + } catch (RemoteException e) { + Log.w(TAG, e); } } @@ -181,14 +277,6 @@ public class BubbleExpandedViewContainer extends LinearLayout implements View.On } /** - * Set the text displayed within the header. - */ - private void setHeaderText(CharSequence text) { - mHeaderView.setText(text); - mHeaderView.setVisibility(TextUtils.isEmpty(text) ? GONE : VISIBLE); - } - - /** * Set the view to display for the expanded state. Passing null will clear the view. */ public void setExpandedView(View view) { @@ -220,4 +308,14 @@ public class BubbleExpandedViewContainer extends LinearLayout implements View.On intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); return intent; } + + /** + * Listener that is notified when a bubble is blocked. + */ + public interface OnBubbleBlockedListener { + /** + * Called when a bubble is blocked for the provided entry. + */ + void onBubbleBlocked(NotificationEntry entry); + } } diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java index b6acd6385c34..305f86655fcd 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleStackView.java @@ -94,7 +94,7 @@ public class BubbleStackView extends FrameLayout implements BubbleTouchHandler.F private StackAnimationController mStackAnimationController; private ExpandedAnimationController mExpandedAnimationController; - private BubbleExpandedViewContainer mExpandedViewContainer; + private BubbleExpandedView mExpandedViewContainer; private int mBubbleSize; private int mBubblePadding; @@ -173,7 +173,7 @@ public class BubbleStackView extends FrameLayout implements BubbleTouchHandler.F mBubbleContainer.setClipChildren(false); addView(mBubbleContainer, new FrameLayout.LayoutParams(MATCH_PARENT, MATCH_PARENT)); - mExpandedViewContainer = (BubbleExpandedViewContainer) + mExpandedViewContainer = (BubbleExpandedView) LayoutInflater.from(context).inflate(R.layout.bubble_expanded_view, this /* parent */, false /* attachToRoot */); mExpandedViewContainer.setElevation(elevation); @@ -224,6 +224,13 @@ public class BubbleStackView extends FrameLayout implements BubbleTouchHandler.F } /** + * Sets the listener to notify when a bubble is blocked. + */ + public void setOnBlockedListener(BubbleExpandedView.OnBubbleBlockedListener listener) { + mExpandedViewContainer.setOnBlockedListener(listener); + } + + /** * Whether the stack of bubbles is expanded or not. */ public boolean isExpanded() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java index 9f1693c71459..f74de5beb585 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotificationEntry.java @@ -151,6 +151,12 @@ public final class NotificationEntry { private boolean mIsBubble; /** + * Whether this notification has been approved globally, at the app level, and at the channel + * level for bubbling. + */ + public boolean canBubble; + + /** * Whether this notification should be shown in the shade when it is also displayed as a bubble. * * <p>When a notification is a bubble we don't show it in the shade once the bubble has been @@ -197,6 +203,7 @@ public final class NotificationEntry { : ranking.getSmartReplies().toArray(new CharSequence[0]); suppressedVisualEffects = ranking.getSuppressedVisualEffects(); suspended = ranking.isSuspended(); + canBubble = ranking.canBubble(); } public void setInterruption() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java index 63b34d185c8d..855cfd9ef7cf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java @@ -599,6 +599,16 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd updateFooter(); } + @Override + public void onOverlayChanged() { + int newRadius = mContext.getResources().getDimensionPixelSize( + Utils.getThemeAttr(mContext, android.R.attr.dialogCornerRadius)); + if (mCornerRadius != newRadius) { + mCornerRadius = newRadius; + invalidate(); + } + } + @VisibleForTesting @ShadeViewRefactor(RefactorComponent.SHADE_VIEW) public void updateFooter() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index c129143ee34b..3532af560557 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -3895,11 +3895,7 @@ public class StatusBar extends SystemUI implements DemoMode, return; } - if (mKeyguardUpdateMonitor != null - && reason == DozeLog.PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN) { - mKeyguardUpdateMonitor.onAuthInterruptDetected(); - } - + boolean passiveAuthInterrupt = reason == DozeLog.PULSE_REASON_SENSOR_WAKE_LOCK_SCREEN; // Set the state to pulsing, so ScrimController will know what to do once we ask it to // execute the transition. The pulse callback will then be invoked when the scrims // are black, indicating that StatusBar is ready to present the rest of the UI. @@ -3925,6 +3921,9 @@ public class StatusBar extends SystemUI implements DemoMode, mNotificationPanel.setPulsing(pulsing); mVisualStabilityManager.setPulsing(pulsing); mIgnoreTouchWhilePulsing = false; + if (mKeyguardUpdateMonitor != null && passiveAuthInterrupt) { + mKeyguardUpdateMonitor.onAuthInterruptDetected(pulsing /* active */); + } updateScrimController(); } }, reason); diff --git a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java index 49b4641399f1..2742577db860 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/bubbles/BubbleControllerTest.java @@ -294,11 +294,6 @@ public class BubbleControllerTest extends SysuiTestCase { assertTrue(mRow.getEntry().showInShadeWhenBubble()); } - @Test - public void testNotificationWithoutChannel() { - assertFalse(mBubbleController.shouldBubble(mNoChannelRow.getEntry())); - } - static class TestableBubbleController extends BubbleController { TestableBubbleController(Context context, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java index a0b342071b07..cad1a96b8075 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/NotificationEntryManagerTest.java @@ -170,7 +170,7 @@ public class NotificationEntryManagerTest extends SysuiTestCase { 0, NotificationManager.IMPORTANCE_DEFAULT, null, null, - null, null, null, true, sentiment, false, -1, false, null, null); + null, null, null, true, sentiment, false, -1, false, null, null, false); return true; }).when(mRankingMap).getRanking(eq(key), any(NotificationListenerService.Ranking.class)); } @@ -189,7 +189,7 @@ public class NotificationEntryManagerTest extends SysuiTestCase { null, null, null, null, null, true, NotificationListenerService.Ranking.USER_SENTIMENT_NEUTRAL, false, -1, - false, smartActions, null); + false, smartActions, null, false); return true; }).when(mRankingMap).getRanking(eq(key), any(NotificationListenerService.Ranking.class)); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java index b507692b3eee..ba2aec0dd3e1 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/collection/NotificationDataTest.java @@ -377,7 +377,7 @@ public class NotificationDataTest extends SysuiTestCase { outRanking.getImportance(), outRanking.getImportanceExplanation(), outRanking.getOverrideGroupKey(), outRanking.getChannel(), null, null, outRanking.canShowBadge(), outRanking.getUserSentiment(), true, - -1, false, null, null); + -1, false, null, null, outRanking.canBubble()); } else if (key.equals(TEST_EXEMPT_DND_VISUAL_SUPPRESSION_KEY)) { outRanking.populate(key, outRanking.getRank(), outRanking.matchesInterruptionFilter(), @@ -385,7 +385,7 @@ public class NotificationDataTest extends SysuiTestCase { outRanking.getImportance(), outRanking.getImportanceExplanation(), outRanking.getOverrideGroupKey(), outRanking.getChannel(), null, null, outRanking.canShowBadge(), outRanking.getUserSentiment(), true, -1, - false, null, null); + false, null, null, outRanking.canBubble()); } else { outRanking.populate(key, outRanking.getRank(), outRanking.matchesInterruptionFilter(), @@ -393,7 +393,7 @@ public class NotificationDataTest extends SysuiTestCase { outRanking.getImportance(), outRanking.getImportanceExplanation(), outRanking.getOverrideGroupKey(), NOTIFICATION_CHANNEL, null, null, outRanking.canShowBadge(), outRanking.getUserSentiment(), false, -1, - false, null, null); + false, null, null, outRanking.canBubble()); } return true; } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java index 49fcafd69984..036e57acb7e4 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarTest.java @@ -655,13 +655,19 @@ public class StatusBarTest extends SysuiTestCase { DozeLog.REASON_SENSOR_DOUBLE_TAP, DozeLog.REASON_SENSOR_TAP)); + doAnswer(invocation -> { + DozeHost.PulseCallback callback = invocation.getArgument(0); + callback.onPulseStarted(); + return null; + }).when(mDozeScrimController).pulse(any(), anyInt()); + for (int i = 0; i < DozeLog.REASONS; i++) { reset(mKeyguardUpdateMonitor); mStatusBar.mDozeServiceHost.pulseWhileDozing(mock(DozeHost.PulseCallback.class), i); if (reasonsWantingAuth.contains(i)) { - verify(mKeyguardUpdateMonitor).onAuthInterruptDetected(); + verify(mKeyguardUpdateMonitor).onAuthInterruptDetected(eq(true)); } else if (reasonsSkippingAuth.contains(i) || reasonsThatDontPulse.contains(i)) { - verify(mKeyguardUpdateMonitor, never()).onAuthInterruptDetected(); + verify(mKeyguardUpdateMonitor, never()).onAuthInterruptDetected(eq(true)); } else { throw new AssertionError("Reason " + i + " isn't specified as wanting or skipping" + " passive auth. Please consider how this pulse reason should behave."); diff --git a/packages/overlays/Android.mk b/packages/overlays/Android.mk index 9fb330647d75..b8a57ae7b98f 100644 --- a/packages/overlays/Android.mk +++ b/packages/overlays/Android.mk @@ -24,7 +24,24 @@ LOCAL_REQUIRED_MODULES := \ ExperimentNavigationBarSlimOverlay40 \ ExperimentNavigationBarLargeOverlay56 \ ExperimentNavigationBarLargeOverlay64 \ + AccentColorBlackOverlay \ + AccentColorGreenOverlay \ + AccentColorPurpleOverlay \ + FontNotoSerifSourceOverlay \ + IconPackCircularAndroidOverlay \ + IconPackCircularSettingsOverlay \ + IconPackCircularSystemUIOverlay \ + IconPackFilledAndroidOverlay \ + IconPackFilledSettingsOverlay \ + IconPackFilledSystemUIOverlay \ + IconPackRoundedAndroidOverlay \ + IconPackRoundedSettingsOverlay \ + IconPackRoundedSystemUIOverlay \ + IconShapeRoundedRectOverlay \ IconShapeSquareOverlay \ + IconShapeSquircleOverlay \ + IconShapeTeardropOverlay + include $(BUILD_PHONY_PACKAGE) diff --git a/packages/overlays/IconShapeRoundedRectOverlay/res/values/config.xml b/packages/overlays/IconShapeRoundedRectOverlay/res/values/config.xml index 138c283b9a24..c5bb5e9bb885 100644 --- a/packages/overlays/IconShapeRoundedRectOverlay/res/values/config.xml +++ b/packages/overlays/IconShapeRoundedRectOverlay/res/values/config.xml @@ -21,6 +21,10 @@ <string name="config_icon_mask" translatable="false">"M50,0L88,0 C94.4,0 100,5.4 100 12 L100,88 C100,94.6 94.6 100 88 100 L12,100 C5.4,100 0,94.6 0,88 L0 12 C0 5.4 5.4 0 12 0 L50,0 Z"</string> <!-- Flag indicating whether round icons should be parsed from the application manifest. --> <bool name="config_useRoundIcon">false</bool> + <!-- Corner radius of system dialogs --> + <dimen name="config_dialogCornerRadius">2dp</dimen> + <!-- Corner radius for bottom sheet system dialogs --> + <dimen name="config_bottomDialogCornerRadius">4dp</dimen> </resources> diff --git a/packages/overlays/IconShapeSquircleOverlay/res/values/config.xml b/packages/overlays/IconShapeSquircleOverlay/res/values/config.xml index eaf7de3b153d..7692aa6b5164 100644 --- a/packages/overlays/IconShapeSquircleOverlay/res/values/config.xml +++ b/packages/overlays/IconShapeSquircleOverlay/res/values/config.xml @@ -21,6 +21,10 @@ <string name="config_icon_mask" translatable="false">"M50,0 C10,0 0,10 0,50 0,90 10,100 50,100 90,100 100,90 100,50 100,10 90,0 50,0 Z"</string> <!-- Flag indicating whether round icons should be parsed from the application manifest. --> <bool name="config_useRoundIcon">false</bool> + <!-- Corner radius of system dialogs --> + <dimen name="config_dialogCornerRadius">4dp</dimen> + <!-- Corner radius for bottom sheet system dialogs --> + <dimen name="config_bottomDialogCornerRadius">8dp</dimen> </resources> diff --git a/packages/overlays/IconShapeTeardropOverlay/res/values/config.xml b/packages/overlays/IconShapeTeardropOverlay/res/values/config.xml index 818e696577e9..b6ee412e5916 100644 --- a/packages/overlays/IconShapeTeardropOverlay/res/values/config.xml +++ b/packages/overlays/IconShapeTeardropOverlay/res/values/config.xml @@ -21,6 +21,10 @@ <string name="config_icon_mask" translatable="false">"M50,0 C77.6,0 100,22.4 100,50 L100,88 C100,94.6 94.6,100 88,100 L50,100 C22.4 100 0 77.6 0 50C0 22.4 22.4 0 50 0 Z"</string> <!-- Flag indicating whether round icons should be parsed from the application manifest. --> <bool name="config_useRoundIcon">false</bool> + <!-- Corner radius of system dialogs --> + <dimen name="config_dialogCornerRadius">8dp</dimen> + <!-- Corner radius for bottom sheet system dialogs --> + <dimen name="config_bottomDialogCornerRadius">16dp</dimen> </resources> diff --git a/proto/src/metrics_constants/metrics_constants.proto b/proto/src/metrics_constants/metrics_constants.proto index eb8710d6759d..3c910696ba60 100644 --- a/proto/src/metrics_constants/metrics_constants.proto +++ b/proto/src/metrics_constants/metrics_constants.proto @@ -6949,6 +6949,32 @@ message MetricsEvent { // OS: Q NOTIFICATION_SMART_REPLY_MODIFIED_BEFORE_SENDING = 1648; + // CATEGORY: ACTION_ACTIVITY_CHOOSER_SHOWN + // Field to add the mimetype for a ChooserActivity + // OS:Q + FIELD_SHARESHEET_MIMETYPE = 1649; + + // CATEGORY: ACTION_ACTIVITY_CHOOSER_SHOWN + // Sharesheet direct targets are ready to show. + // OS:Q + ACTION_ACTIVITY_CHOOSER_SHOWN_DIRECT_TARGET = 1650; + + // CATEGORY: ACTION_SHARESHEET_SCROLL + // Sharesheet are either expanded, scrolling through them or compacted again. + // OS:Q + // Subtype 1 means collapsed, 0 expanded + ACTION_SHARESHEET_COLLAPSED_CHANGED = 1651; + + // ACTION: Share with screenshot extra + // OS: Q + ACTION_SHARE_WITH_PREVIEW = 1652; + + // CATEGORY: ACTION_ACTIVITY_CHOOSER_SHOWN + // OS:Q + // The time elapsed from triggering the share to displaying the app targets + // formerly: histogram system_cost_for_smart_sharing + FIELD_TIME_TO_APP_TARGETS = 1653; + // ---- End Q Constants, all Q constants go above this line ---- // Add new aosp constants above this line. // END OF AOSP CONSTANTS diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java index 14322ecd76b9..0dd1ded40ead 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerService.java +++ b/services/backup/java/com/android/server/backup/BackupManagerService.java @@ -41,6 +41,7 @@ import android.os.IBinder; import android.os.ParcelFileDescriptor; import android.os.Trace; import android.os.UserHandle; +import android.os.UserManager; import android.util.Slog; import android.util.SparseArray; @@ -433,8 +434,46 @@ public class BackupManagerService { getServiceForUserIfCallerHasPermission(userId, "getConfigurationIntent()"); return userBackupManagerService == null - ? null - : userBackupManagerService.getConfigurationIntent(transportName); + ? null + : userBackupManagerService.getConfigurationIntent(transportName); + } + + /** + * Sets the ancestral work profile for the calling user. + * + * <p> The ancestral work profile corresponds to the profile that was used to restore to the + * callers profile. + */ + public void setAncestralSerialNumber(long ancestralSerialNumber) { + UserBackupManagerService userBackupManagerService = + getServiceForUserIfCallerHasPermission( + Binder.getCallingUserHandle().getIdentifier(), + "setAncestralSerialNumber()"); + + if (userBackupManagerService != null) { + userBackupManagerService.setAncestralSerialNumber(ancestralSerialNumber); + } + } + + /** + * Returns a {@link UserHandle} for the user that has {@code ancestralSerialNumber} as the + * serial number of the its ancestral work profile. + * + * <p> The ancestral work profile is set by {@link #setAncestralSerialNumber(long)} + * and it corresponds to the profile that was used to restore to the callers profile. + */ + @Nullable + public UserHandle getUserForAncestralSerialNumber(long ancestralSerialNumber) { + for (UserHandle handle : mContext.getSystemService(UserManager.class).getUserProfiles()) { + UserBackupManagerService userBackupManagerService = getServiceUsers().get( + handle.getIdentifier()); + if (userBackupManagerService != null) { + if (userBackupManagerService.getAncestralSerialNumber() == ancestralSerialNumber) { + return handle; + } + } + } + return null; } /** diff --git a/services/backup/java/com/android/server/backup/Trampoline.java b/services/backup/java/com/android/server/backup/Trampoline.java index 87872e8bcbc2..17e9b350d368 100644 --- a/services/backup/java/com/android/server/backup/Trampoline.java +++ b/services/backup/java/com/android/server/backup/Trampoline.java @@ -760,6 +760,21 @@ public class Trampoline extends IBackupManager.Stub { } @Override + @Nullable public UserHandle getUserForAncestralSerialNumber(long ancestralSerialNumber) { + if (mService != null) { + return mService.getUserForAncestralSerialNumber(ancestralSerialNumber); + } + return null; + } + + @Override + public void setAncestralSerialNumber(long ancestralSerialNumber) { + if (mService != null) { + mService.setAncestralSerialNumber(ancestralSerialNumber); + } + } + + @Override public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { if (!DumpUtils.checkDumpPermission(mContext, TAG, pw)) return; int userId = binderGetCallingUserId(); diff --git a/services/backup/java/com/android/server/backup/UserBackupManagerService.java b/services/backup/java/com/android/server/backup/UserBackupManagerService.java index 8b2c1b95ecfd..b2afbc3ec5f9 100644 --- a/services/backup/java/com/android/server/backup/UserBackupManagerService.java +++ b/services/backup/java/com/android/server/backup/UserBackupManagerService.java @@ -244,6 +244,8 @@ public class UserBackupManagerService { private static final long BUSY_BACKOFF_MIN_MILLIS = 1000 * 60 * 60; // one hour private static final int BUSY_BACKOFF_FUZZ = 1000 * 60 * 60 * 2; // two hours + private static final String SERIAL_ID_FILE = "serial_id"; + private final @UserIdInt int mUserId; private final BackupAgentTimeoutParameters mAgentTimeoutParameters; private final TransportManager mTransportManager; @@ -360,6 +362,8 @@ public class UserBackupManagerService { private Set<String> mAncestralPackages = null; private long mAncestralToken = 0; private long mCurrentToken = 0; + @Nullable private File mAncestralSerialNumberFile; + /** * Creates an instance of {@link UserBackupManagerService} and initializes state for it. This @@ -2308,6 +2312,55 @@ public class UserBackupManagerService { } } + /** + * Sets the work profile serial number of the ancestral work profile. + */ + public void setAncestralSerialNumber(long ancestralSerialNumber) { + mContext.enforceCallingPermission(android.Manifest.permission.BACKUP, + "setAncestralSerialNumber"); + Slog.v(TAG, "Setting ancestral work profile id to " + ancestralSerialNumber); + try (RandomAccessFile af = getAncestralSerialNumberFile()) { + af.writeLong(ancestralSerialNumber); + } catch (IOException e) { + Slog.w(TAG, "Unable to write to work profile serial mapping file:", e); + } + } + + /** + * Returns the work profile serial number of the ancestral device. This will be set by + * {@link #setAncestralSerialNumber(long)}. Will return {@code -1} if not set. + */ + public long getAncestralSerialNumber() { + try (RandomAccessFile af = getAncestralSerialNumberFile()) { + return af.readLong(); + } catch (IOException e) { + Slog.w(TAG, "Unable to write to work profile serial number file:", e); + return -1; + } + } + + private RandomAccessFile getAncestralSerialNumberFile() throws FileNotFoundException { + if (mAncestralSerialNumberFile == null) { + mAncestralSerialNumberFile = new File( + UserBackupManagerFiles.getBaseStateDir(getUserId()), + SERIAL_ID_FILE); + if (!mAncestralSerialNumberFile.exists()) { + try { + mAncestralSerialNumberFile.createNewFile(); + } catch (IOException e) { + Slog.w(TAG, "serial number mapping file creation failed", e); + } + } + } + return new RandomAccessFile(mAncestralSerialNumberFile, "rwd"); + } + + @VisibleForTesting + void setAncestralSerialNumberFile(File ancestralSerialNumberFile) { + mAncestralSerialNumberFile = ancestralSerialNumberFile; + } + + /** Clear the given package's backup data from the current transport. */ public void clearBackupData(String transportName, String packageName) { if (DEBUG) Slog.v(TAG, "clearBackupData() of " + packageName + " on " + transportName); diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index 1cb2c4a2f5ee..80b3d67217fd 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -6377,6 +6377,14 @@ public class ConnectivityService extends IConnectivityManager.Stub } @Override + public void startTcpKeepalive(Network network, FileDescriptor fd, int intervalSeconds, + Messenger messenger, IBinder binder) { + enforceKeepalivePermission(); + mKeepaliveTracker.startTcpKeepalive( + getNetworkAgentInfoForNetwork(network), fd, intervalSeconds, messenger, binder); + } + + @Override public void stopKeepalive(Network network, int slot) { mHandler.sendMessage(mHandler.obtainMessage( NetworkAgent.CMD_STOP_SOCKET_KEEPALIVE, slot, SocketKeepalive.SUCCESS, network)); diff --git a/services/core/java/com/android/server/UiModeManagerService.java b/services/core/java/com/android/server/UiModeManagerService.java index 1b1e6ad6e096..6b57fcd31450 100644 --- a/services/core/java/com/android/server/UiModeManagerService.java +++ b/services/core/java/com/android/server/UiModeManagerService.java @@ -37,6 +37,8 @@ import android.os.BatteryManager; import android.os.Binder; import android.os.Handler; import android.os.PowerManager; +import android.os.PowerManager.ServiceType; +import android.os.PowerManagerInternal; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.ServiceManager; @@ -161,9 +163,6 @@ final class UiModeManagerService extends SystemService { case Intent.ACTION_BATTERY_CHANGED: mCharging = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 0) != 0; break; - case PowerManager.ACTION_POWER_SAVE_MODE_CHANGING: - mPowerSave = intent.getBooleanExtra(PowerManager.EXTRA_POWER_SAVE_MODE, false); - break; } synchronized (mLock) { if (mSystemReady) { @@ -208,9 +207,24 @@ final class UiModeManagerService extends SystemService { context.registerReceiver(mDockModeReceiver, new IntentFilter(Intent.ACTION_DOCK_EVENT)); IntentFilter batteryFilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED); - batteryFilter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGING); context.registerReceiver(mBatteryReceiver, batteryFilter); + PowerManagerInternal localPowerManager = + LocalServices.getService(PowerManagerInternal.class); + mPowerSave = localPowerManager.getLowPowerState(ServiceType.NIGHT_MODE).batterySaverEnabled; + localPowerManager.registerLowPowerModeObserver(ServiceType.NIGHT_MODE, + state -> { + synchronized (mLock) { + if (mPowerSave == state.batterySaverEnabled) { + return; + } + mPowerSave = state.batterySaverEnabled; + if (mSystemReady) { + updateLocked(0, 0); + } + } + }); + mConfiguration.setToDefaults(); final Resources res = context.getResources(); diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 94fc552fa1c2..d1994249cdc1 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -3495,7 +3495,7 @@ public class ActivityManagerService extends IActivityManager.Stub if (!app.killedByAm) { reportUidInfoMessageLocked(TAG, "Process " + app.processName + " (pid " + pid + ") has died: " - + ProcessList.makeOomAdjString(app.setAdj) + + ProcessList.makeOomAdjString(app.setAdj, true) + " " + ProcessList.makeProcStateString(app.setProcState), app.info.uid); mAllowLowerMemLevel = true; } else { @@ -10029,7 +10029,7 @@ public class ActivityManagerService extends IActivityManager.Stub pw.print(" #"); pw.print(index); pw.print(": "); - pw.print(ProcessList.makeOomAdjString(proc.setAdj)); + pw.print(ProcessList.makeOomAdjString(proc.setAdj, false)); pw.print(" "); pw.print(ProcessList.makeProcStateString(proc.getCurProcState())); pw.print(" "); @@ -11334,7 +11334,7 @@ public class ActivityManagerService extends IActivityManager.Stub for (int i = list.size() - 1; i >= 0; i--) { ProcessRecord r = list.get(i).first; long token = proto.start(fieldId); - String oomAdj = ProcessList.makeOomAdjString(r.setAdj); + String oomAdj = ProcessList.makeOomAdjString(r.setAdj, true); proto.write(ProcessOomProto.PERSISTENT, r.isPersistent()); proto.write(ProcessOomProto.NUM, (origList.size()-1)-list.get(i).second); proto.write(ProcessOomProto.OOM_ADJ, oomAdj); @@ -11434,7 +11434,7 @@ public class ActivityManagerService extends IActivityManager.Stub for (int i=list.size()-1; i>=0; i--) { ProcessRecord r = list.get(i).first; - String oomAdj = ProcessList.makeOomAdjString(r.setAdj); + String oomAdj = ProcessList.makeOomAdjString(r.setAdj, false); char schedGroup; switch (r.setSchedGroup) { case ProcessList.SCHED_GROUP_BACKGROUND: @@ -12871,7 +12871,7 @@ public class ActivityManagerService extends IActivityManager.Stub private void appendBasicMemEntry(StringBuilder sb, int oomAdj, int procState, long pss, long memtrack, String name) { sb.append(" "); - sb.append(ProcessList.makeOomAdjString(oomAdj)); + sb.append(ProcessList.makeOomAdjString(oomAdj, false)); sb.append(' '); sb.append(ProcessList.makeProcStateString(procState)); sb.append(' '); diff --git a/services/core/java/com/android/server/am/AppCompactor.java b/services/core/java/com/android/server/am/AppCompactor.java index 1118014dab96..502f078b532e 100644 --- a/services/core/java/com/android/server/am/AppCompactor.java +++ b/services/core/java/com/android/server/am/AppCompactor.java @@ -170,6 +170,9 @@ public final class AppCompactor { updateCompactionThrottles(); updateStatsdSampleRate(); } + Process.setThreadGroupAndCpuset(mCompactionThread.getThreadId(), + Process.THREAD_GROUP_SYSTEM); + } /** diff --git a/services/core/java/com/android/server/am/OomAdjuster.java b/services/core/java/com/android/server/am/OomAdjuster.java index 4985c52ea118..7035698d5ee0 100644 --- a/services/core/java/com/android/server/am/OomAdjuster.java +++ b/services/core/java/com/android/server/am/OomAdjuster.java @@ -412,14 +412,14 @@ public final class OomAdjuster { mNumCachedHiddenProcs++; numCached++; if (app.connectionGroup != 0) { - if (lastCachedGroupUid == app.uid + if (lastCachedGroupUid == app.info.uid && lastCachedGroup == app.connectionGroup) { // If this process is the next in the same group, we don't // want it to count against our limit of the number of cached // processes, so bump up the group count to account for it. numCachedExtraGroup++; } else { - lastCachedGroupUid = app.uid; + lastCachedGroupUid = app.info.uid; lastCachedGroup = app.connectionGroup; } } else { @@ -1709,8 +1709,9 @@ public final class OomAdjuster { (app.curAdj == ProcessList.PREVIOUS_APP_ADJ || app.curAdj == ProcessList.HOME_APP_ADJ)) { mAppCompact.compactAppSome(app); - } else if (app.setAdj < ProcessList.CACHED_APP_MIN_ADJ && - app.curAdj >= ProcessList.CACHED_APP_MIN_ADJ) { + } else if (app.setAdj < ProcessList.CACHED_APP_MIN_ADJ + && app.curAdj >= ProcessList.CACHED_APP_MIN_ADJ + && app.curAdj <= ProcessList.CACHED_APP_MAX_ADJ) { mAppCompact.compactAppFull(app); } } diff --git a/services/core/java/com/android/server/am/ProcessList.java b/services/core/java/com/android/server/am/ProcessList.java index f90c0cab984a..69cf54b5528a 100644 --- a/services/core/java/com/android/server/am/ProcessList.java +++ b/services/core/java/com/android/server/am/ProcessList.java @@ -679,47 +679,65 @@ public final class ProcessList { return totalProcessLimit/2; } - private static String buildOomTag(String prefix, String space, int val, int base) { + private static String buildOomTag(String prefix, String compactPrefix, String space, int val, + int base, boolean compact) { final int diff = val - base; if (diff == 0) { + if (compact) { + return compactPrefix; + } if (space == null) return prefix; return prefix + space; } if (diff < 10) { - return prefix + "+ " + Integer.toString(diff); + return prefix + (compact ? "+" : "+ ") + Integer.toString(diff); } return prefix + "+" + Integer.toString(diff); } - public static String makeOomAdjString(int setAdj) { + public static String makeOomAdjString(int setAdj, boolean compact) { if (setAdj >= ProcessList.CACHED_APP_MIN_ADJ) { - return buildOomTag("cch", " ", setAdj, ProcessList.CACHED_APP_MIN_ADJ); + return buildOomTag("cch", "cch", " ", setAdj, + ProcessList.CACHED_APP_MIN_ADJ, compact); } else if (setAdj >= ProcessList.SERVICE_B_ADJ) { - return buildOomTag("svcb ", null, setAdj, ProcessList.SERVICE_B_ADJ); + return buildOomTag("svcb ", "svcb", null, setAdj, + ProcessList.SERVICE_B_ADJ, compact); } else if (setAdj >= ProcessList.PREVIOUS_APP_ADJ) { - return buildOomTag("prev ", null, setAdj, ProcessList.PREVIOUS_APP_ADJ); + return buildOomTag("prev ", "prev", null, setAdj, + ProcessList.PREVIOUS_APP_ADJ, compact); } else if (setAdj >= ProcessList.HOME_APP_ADJ) { - return buildOomTag("home ", null, setAdj, ProcessList.HOME_APP_ADJ); + return buildOomTag("home ", "home", null, setAdj, + ProcessList.HOME_APP_ADJ, compact); } else if (setAdj >= ProcessList.SERVICE_ADJ) { - return buildOomTag("svc ", null, setAdj, ProcessList.SERVICE_ADJ); + return buildOomTag("svc ", "svc", null, setAdj, + ProcessList.SERVICE_ADJ, compact); } else if (setAdj >= ProcessList.HEAVY_WEIGHT_APP_ADJ) { - return buildOomTag("hvy ", null, setAdj, ProcessList.HEAVY_WEIGHT_APP_ADJ); + return buildOomTag("hvy ", "hvy", null, setAdj, + ProcessList.HEAVY_WEIGHT_APP_ADJ, compact); } else if (setAdj >= ProcessList.BACKUP_APP_ADJ) { - return buildOomTag("bkup ", null, setAdj, ProcessList.BACKUP_APP_ADJ); + return buildOomTag("bkup ", "bkup", null, setAdj, + ProcessList.BACKUP_APP_ADJ, compact); } else if (setAdj >= ProcessList.PERCEPTIBLE_APP_ADJ) { - return buildOomTag("prcp ", null, setAdj, ProcessList.PERCEPTIBLE_APP_ADJ); + return buildOomTag("prcp ", "prcp", null, setAdj, + ProcessList.PERCEPTIBLE_APP_ADJ, compact); } else if (setAdj >= ProcessList.VISIBLE_APP_ADJ) { - return buildOomTag("vis", " ", setAdj, ProcessList.VISIBLE_APP_ADJ); + return buildOomTag("vis", "vis", " ", setAdj, + ProcessList.VISIBLE_APP_ADJ, compact); } else if (setAdj >= ProcessList.FOREGROUND_APP_ADJ) { - return buildOomTag("fore ", null, setAdj, ProcessList.FOREGROUND_APP_ADJ); + return buildOomTag("fore ", "fore", null, setAdj, + ProcessList.FOREGROUND_APP_ADJ, compact); } else if (setAdj >= ProcessList.PERSISTENT_SERVICE_ADJ) { - return buildOomTag("psvc ", null, setAdj, ProcessList.PERSISTENT_SERVICE_ADJ); + return buildOomTag("psvc ", "psvc", null, setAdj, + ProcessList.PERSISTENT_SERVICE_ADJ, compact); } else if (setAdj >= ProcessList.PERSISTENT_PROC_ADJ) { - return buildOomTag("pers ", null, setAdj, ProcessList.PERSISTENT_PROC_ADJ); + return buildOomTag("pers ", "pers", null, setAdj, + ProcessList.PERSISTENT_PROC_ADJ, compact); } else if (setAdj >= ProcessList.SYSTEM_ADJ) { - return buildOomTag("sys ", null, setAdj, ProcessList.SYSTEM_ADJ); + return buildOomTag("sys ", "sys", null, setAdj, + ProcessList.SYSTEM_ADJ, compact); } else if (setAdj >= ProcessList.NATIVE_ADJ) { - return buildOomTag("ntv ", null, setAdj, ProcessList.NATIVE_ADJ); + return buildOomTag("ntv ", "ntv", null, setAdj, + ProcessList.NATIVE_ADJ, compact); } else { return Integer.toString(setAdj); } diff --git a/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java b/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java index ddbb421c7f0a..cbbbe4743108 100644 --- a/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java +++ b/services/core/java/com/android/server/am/SettingsToPropertiesMapper.java @@ -78,6 +78,7 @@ class SettingsToPropertiesMapper { @VisibleForTesting static final String[] sDeviceConfigScopes = new String[] { DeviceConfig.ActivityManagerNativeBoot.NAMESPACE, + DeviceConfig.MediaNative.NAMESPACE, DeviceConfig.NAMESPACE_INPUT_NATIVE_BOOT, DeviceConfig.NAMESPACE_NETD_NATIVE, DeviceConfig.RuntimeNativeBoot.NAMESPACE, diff --git a/services/core/java/com/android/server/appbinding/AppBindingService.java b/services/core/java/com/android/server/appbinding/AppBindingService.java index 3131255a61cd..0b6a4329d15b 100644 --- a/services/core/java/com/android/server/appbinding/AppBindingService.java +++ b/services/core/java/com/android/server/appbinding/AppBindingService.java @@ -47,7 +47,7 @@ import com.android.internal.util.DumpUtils; import com.android.server.SystemService; import com.android.server.am.PersistentConnection; import com.android.server.appbinding.finders.AppServiceFinder; -import com.android.server.appbinding.finders.SmsAppServiceFinder; +import com.android.server.appbinding.finders.CarrierMessagingClientServiceFinder; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -147,7 +147,7 @@ public class AppBindingService extends Binder { mIPackageManager = injector.getIPackageManager(); mHandler = BackgroundThread.getHandler(); - mApps.add(new SmsAppServiceFinder(context, this::onAppChanged, mHandler)); + mApps.add(new CarrierMessagingClientServiceFinder(context, this::onAppChanged, mHandler)); // Initialize with the default value to make it non-null. mConstants = AppBindingConstants.initializeFromString(""); diff --git a/services/core/java/com/android/server/appbinding/finders/SmsAppServiceFinder.java b/services/core/java/com/android/server/appbinding/finders/CarrierMessagingClientServiceFinder.java index fcc28f8e2886..4c5f1a1c7b49 100644 --- a/services/core/java/com/android/server/appbinding/finders/SmsAppServiceFinder.java +++ b/services/core/java/com/android/server/appbinding/finders/CarrierMessagingClientServiceFinder.java @@ -19,8 +19,6 @@ package com.android.server.appbinding.finders; import static android.provider.Telephony.Sms.Intents.ACTION_DEFAULT_SMS_PACKAGE_CHANGED_INTERNAL; import android.Manifest.permission; -import android.app.ISmsAppService; -import android.app.SmsAppService; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.Context; @@ -30,6 +28,8 @@ import android.content.pm.ServiceInfo; import android.os.Handler; import android.os.IBinder; import android.os.UserHandle; +import android.service.carrier.CarrierMessagingClientService; +import android.service.carrier.ICarrierMessagingClientService; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.Slog; @@ -41,10 +41,11 @@ import com.android.server.appbinding.AppBindingConstants; import java.util.function.BiConsumer; /** - * Find the SmsAppService service within the default SMS app. + * Find the CarrierMessagingClientService service within the default SMS app. */ -public class SmsAppServiceFinder extends AppServiceFinder<SmsAppService, ISmsAppService> { - public SmsAppServiceFinder(Context context, +public class CarrierMessagingClientServiceFinder + extends AppServiceFinder<CarrierMessagingClientService, ICarrierMessagingClientService> { + public CarrierMessagingClientServiceFinder(Context context, BiConsumer<AppServiceFinder, Integer> listener, Handler callbackHandler) { super(context, listener, callbackHandler); @@ -62,23 +63,23 @@ public class SmsAppServiceFinder extends AppServiceFinder<SmsAppService, ISmsApp } @Override - protected Class<SmsAppService> getServiceClass() { - return SmsAppService.class; + protected Class<CarrierMessagingClientService> getServiceClass() { + return CarrierMessagingClientService.class; } @Override - public ISmsAppService asInterface(IBinder obj) { - return ISmsAppService.Stub.asInterface(obj); + public ICarrierMessagingClientService asInterface(IBinder obj) { + return ICarrierMessagingClientService.Stub.asInterface(obj); } @Override protected String getServiceAction() { - return TelephonyManager.ACTION_SMS_APP_SERVICE; + return TelephonyManager.ACTION_CARRIER_MESSAGING_CLIENT_SERVICE; } @Override protected String getServicePermission() { - return permission.BIND_SMS_APP_SERVICE; + return permission.BIND_CARRIER_MESSAGING_CLIENT_SERVICE; } @Override @@ -121,7 +122,7 @@ public class SmsAppServiceFinder extends AppServiceFinder<SmsAppService, ISmsApp @Override public void onReceive(Context context, Intent intent) { if (ACTION_DEFAULT_SMS_PACKAGE_CHANGED_INTERNAL.equals(intent.getAction())) { - mListener.accept(SmsAppServiceFinder.this, getSendingUserId()); + mListener.accept(CarrierMessagingClientServiceFinder.this, getSendingUserId()); } } }; diff --git a/services/core/java/com/android/server/connectivity/KeepaliveTracker.java b/services/core/java/com/android/server/connectivity/KeepaliveTracker.java index 07e28f9fb543..6cff57d4bbb1 100644 --- a/services/core/java/com/android/server/connectivity/KeepaliveTracker.java +++ b/services/core/java/com/android/server/connectivity/KeepaliveTracker.java @@ -17,6 +17,8 @@ package com.android.server.connectivity; import static android.net.NattSocketKeepalive.NATT_PORT; +import static android.net.NetworkAgent.CMD_ADD_KEEPALIVE_PACKET_FILTER; +import static android.net.NetworkAgent.CMD_REMOVE_KEEPALIVE_PACKET_FILTER; import static android.net.NetworkAgent.CMD_START_SOCKET_KEEPALIVE; import static android.net.NetworkAgent.CMD_STOP_SOCKET_KEEPALIVE; import static android.net.NetworkAgent.EVENT_SOCKET_KEEPALIVE; @@ -37,6 +39,9 @@ import android.net.NattKeepalivePacketData; import android.net.NetworkAgent; import android.net.NetworkUtils; import android.net.SocketKeepalive.InvalidPacketException; +import android.net.SocketKeepalive.InvalidSocketException; +import android.net.TcpKeepalivePacketData; +import android.net.TcpKeepalivePacketData.TcpSocketInfo; import android.net.util.IpUtils; import android.os.Binder; import android.os.Handler; @@ -65,7 +70,7 @@ import java.util.HashMap; * * Provides methods to stop and start keepalive requests, and keeps track of keepalives across all * networks. This class is tightly coupled to ConnectivityService. It is not thread-safe and its - * methods must be called only from the ConnectivityService handler thread. + * handle* methods must be called only from the ConnectivityService handler thread. */ public class KeepaliveTracker { @@ -78,9 +83,12 @@ public class KeepaliveTracker { private final HashMap <NetworkAgentInfo, HashMap<Integer, KeepaliveInfo>> mKeepalives = new HashMap<> (); private final Handler mConnectivityServiceHandler; + @NonNull + private final TcpKeepaliveController mTcpController; public KeepaliveTracker(Handler handler) { mConnectivityServiceHandler = handler; + mTcpController = new TcpKeepaliveController(handler); } /** @@ -96,20 +104,33 @@ public class KeepaliveTracker { private final int mUid; private final int mPid; private final NetworkAgentInfo mNai; + private final int mType; + private final FileDescriptor mFd; - /** Keepalive slot. A small integer that identifies this keepalive among the ones handled - * by this network. */ + public static final int TYPE_NATT = 1; + public static final int TYPE_TCP = 2; + + // Keepalive slot. A small integer that identifies this keepalive among the ones handled + // by this network. private int mSlot = NO_KEEPALIVE; // Packet data. private final KeepalivePacketData mPacket; private final int mInterval; - // Whether the keepalive is started or not. - public boolean isStarted; - - public KeepaliveInfo(Messenger messenger, IBinder binder, NetworkAgentInfo nai, - KeepalivePacketData packet, int interval) { + // Whether the keepalive is started or not. The initial state is NOT_STARTED. + private static final int NOT_STARTED = 1; + private static final int STARTING = 2; + private static final int STARTED = 3; + private int mStartedState = NOT_STARTED; + + KeepaliveInfo(@NonNull Messenger messenger, + @NonNull IBinder binder, + @NonNull NetworkAgentInfo nai, + @NonNull KeepalivePacketData packet, + int interval, + int type, + @NonNull FileDescriptor fd) { mMessenger = messenger; mBinder = binder; mPid = Binder.getCallingPid(); @@ -118,6 +139,8 @@ public class KeepaliveTracker { mNai = nai; mPacket = packet; mInterval = interval; + mType = type; + mFd = fd; try { mBinder.linkToDeath(this, 0); @@ -130,32 +153,40 @@ public class KeepaliveTracker { return mNai; } + private String startedStateString(final int state) { + switch (state) { + case NOT_STARTED : return "NOT_STARTED"; + case STARTING : return "STARTING"; + case STARTED : return "STARTED"; + } + throw new IllegalArgumentException("Unknown state"); + } + public String toString() { - return new StringBuffer("KeepaliveInfo [") - .append(" network=").append(mNai.network) - .append(" isStarted=").append(isStarted) - .append(" ") - .append(IpUtils.addressAndPortToString(mPacket.srcAddress, mPacket.srcPort)) - .append("->") - .append(IpUtils.addressAndPortToString(mPacket.dstAddress, mPacket.dstPort)) - .append(" interval=" + mInterval) - .append(" packetData=" + HexDump.toHexString(mPacket.getPacket())) - .append(" uid=").append(mUid).append(" pid=").append(mPid) - .append(" ]") - .toString(); + return "KeepaliveInfo [" + + " network=" + mNai.network + + " startedState=" + startedStateString(mStartedState) + + " " + + IpUtils.addressAndPortToString(mPacket.srcAddress, mPacket.srcPort) + + "->" + + IpUtils.addressAndPortToString(mPacket.dstAddress, mPacket.dstPort) + + " interval=" + mInterval + + " uid=" + mUid + " pid=" + mPid + + " packetData=" + HexDump.toHexString(mPacket.getPacket()) + + " ]"; } /** Sends a message back to the application via its SocketKeepalive.Callback. */ void notifyMessenger(int slot, int err) { + if (DBG) { + Log.d(TAG, "notify keepalive " + mSlot + " on " + mNai.network + " for " + err); + } KeepaliveTracker.this.notifyMessenger(mMessenger, slot, err); } /** Called when the application process is killed. */ public void binderDied() { - // Not called from ConnectivityService handler thread, so send it a message. - mConnectivityServiceHandler.obtainMessage( - NetworkAgent.CMD_STOP_SOCKET_KEEPALIVE, - mSlot, BINDER_DIED, mNai.network).sendToTarget(); + stop(BINDER_DIED); } void unlinkDeathRecipient() { @@ -202,7 +233,26 @@ public class KeepaliveTracker { int error = isValid(); if (error == SUCCESS) { Log.d(TAG, "Starting keepalive " + mSlot + " on " + mNai.name()); - mNai.asyncChannel.sendMessage(CMD_START_SOCKET_KEEPALIVE, slot, mInterval, mPacket); + switch (mType) { + case TYPE_NATT: + mNai.asyncChannel + .sendMessage(CMD_START_SOCKET_KEEPALIVE, slot, mInterval, mPacket); + break; + case TYPE_TCP: + mTcpController.startSocketMonitor(mFd, this, mSlot); + mNai.asyncChannel + .sendMessage(CMD_ADD_KEEPALIVE_PACKET_FILTER, slot, 0 /* Unused */, + mPacket); + // TODO: check result from apf and notify of failure as needed. + mNai.asyncChannel + .sendMessage(CMD_START_SOCKET_KEEPALIVE, slot, mInterval, mPacket); + break; + default: + Log.wtf(TAG, "Starting keepalive with unknown type: " + mType); + handleStopKeepalive(mNai, mSlot, error); + return; + } + mStartedState = STARTING; } else { handleStopKeepalive(mNai, mSlot, error); return; @@ -216,15 +266,27 @@ public class KeepaliveTracker { Log.e(TAG, "Cannot stop unowned keepalive " + mSlot + " on " + mNai.network); } } - if (isStarted) { + if (NOT_STARTED != mStartedState) { Log.d(TAG, "Stopping keepalive " + mSlot + " on " + mNai.name()); - mNai.asyncChannel.sendMessage(CMD_STOP_SOCKET_KEEPALIVE, mSlot); + if (mType == TYPE_NATT) { + mNai.asyncChannel.sendMessage(CMD_STOP_SOCKET_KEEPALIVE, mSlot); + } else if (mType == TYPE_TCP) { + mNai.asyncChannel.sendMessage(CMD_STOP_SOCKET_KEEPALIVE, mSlot); + mNai.asyncChannel.sendMessage(CMD_REMOVE_KEEPALIVE_PACKET_FILTER, mSlot); + mTcpController.stopSocketMonitor(mSlot); + } else { + Log.wtf(TAG, "Stopping keepalive with unknown type: " + mType); + } } // TODO: at the moment we unconditionally return failure here. In cases where the // NetworkAgent is alive, should we ask it to reply, so it can return failure? notifyMessenger(mSlot, reason); unlinkDeathRecipient(); } + + void onFileDescriptorInitiatedStop(final int socketKeepaliveReason) { + handleStopKeepalive(mNai, mSlot, socketKeepaliveReason); + } } void notifyMessenger(Messenger messenger, int slot, int err) { @@ -328,20 +390,38 @@ public class KeepaliveTracker { return; } - if (reason == SUCCESS && !ki.isStarted) { + // This can be called in a number of situations : + // - startedState is STARTING. + // - reason is SUCCESS => go to STARTED. + // - reason isn't SUCCESS => it's an error starting. Go to NOT_STARTED and stop keepalive. + // - startedState is STARTED. + // - reason is SUCCESS => it's a success stopping. Go to NOT_STARTED and stop keepalive. + // - reason isn't SUCCESS => it's an error in exec. Go to NOT_STARTED and stop keepalive. + // The control is not supposed to ever come here if the state is NOT_STARTED. This is + // because in NOT_STARTED state, the code will switch to STARTING before sending messages + // to start, and the only way to NOT_STARTED is this function, through the edges outlined + // above : in all cases, keepalive gets stopped and can't restart without going into + // STARTING as messages are ordered. This also depends on the hardware processing the + // messages in order. + // TODO : clarify this code and get rid of mStartedState. Using a StateMachine is an + // option. + if (reason == SUCCESS && KeepaliveInfo.STARTING == ki.mStartedState) { // Keepalive successfully started. if (DBG) Log.d(TAG, "Started keepalive " + slot + " on " + nai.name()); - ki.isStarted = true; + ki.mStartedState = KeepaliveInfo.STARTED; ki.notifyMessenger(slot, reason); } else { // Keepalive successfully stopped, or error. - ki.isStarted = false; + ki.mStartedState = KeepaliveInfo.NOT_STARTED; if (reason == SUCCESS) { + // The message indicated success stopping : don't call handleStopKeepalive. if (DBG) Log.d(TAG, "Successfully stopped keepalive " + slot + " on " + nai.name()); } else { + // The message indicated some error trying to start or during the course of + // keepalive : do call handleStopKeepalive. + handleStopKeepalive(nai, slot, reason); if (DBG) Log.d(TAG, "Keepalive " + slot + " on " + nai.name() + " error " + reason); } - handleStopKeepalive(nai, slot, reason); } } @@ -379,10 +459,49 @@ public class KeepaliveTracker { notifyMessenger(messenger, NO_KEEPALIVE, e.error); return; } - KeepaliveInfo ki = new KeepaliveInfo(messenger, binder, nai, packet, intervalSeconds); - Log.d(TAG, "Created keepalive: " + ki.toString()); + KeepaliveInfo ki = new KeepaliveInfo(messenger, binder, nai, packet, intervalSeconds, + KeepaliveInfo.TYPE_NATT, null); mConnectivityServiceHandler.obtainMessage( - CMD_START_SOCKET_KEEPALIVE, ki).sendToTarget(); + NetworkAgent.CMD_START_SOCKET_KEEPALIVE, ki).sendToTarget(); + } + + /** + * Called by ConnectivityService to start TCP keepalive on a file descriptor. + * + * In order to offload keepalive for application correctly, sequence number, ack number and + * other fields are needed to form the keepalive packet. Thus, this function synchronously + * puts the socket into repair mode to get the necessary information. After the socket has been + * put into repair mode, the application cannot access the socket until reverted to normal. + * + * See {@link android.net.SocketKeepalive}. + **/ + public void startTcpKeepalive(@Nullable NetworkAgentInfo nai, + @NonNull FileDescriptor fd, + int intervalSeconds, + @NonNull Messenger messenger, + @NonNull IBinder binder) { + if (nai == null) { + notifyMessenger(messenger, NO_KEEPALIVE, ERROR_INVALID_NETWORK); + return; + } + + TcpKeepalivePacketData packet = null; + try { + TcpSocketInfo tsi = TcpKeepaliveController.switchToRepairMode(fd); + packet = TcpKeepalivePacketData.tcpKeepalivePacket(tsi); + } catch (InvalidPacketException | InvalidSocketException e) { + try { + TcpKeepaliveController.switchOutOfRepairMode(fd); + } catch (ErrnoException e1) { + Log.e(TAG, "Couldn't move fd out of repair mode after failure to start keepalive"); + } + notifyMessenger(messenger, NO_KEEPALIVE, e.error); + return; + } + KeepaliveInfo ki = new KeepaliveInfo(messenger, binder, nai, packet, intervalSeconds, + KeepaliveInfo.TYPE_TCP, fd); + Log.d(TAG, "Created keepalive: " + ki.toString()); + mConnectivityServiceHandler.obtainMessage(CMD_START_SOCKET_KEEPALIVE, ki).sendToTarget(); } /** diff --git a/services/core/java/com/android/server/connectivity/TcpKeepaliveController.java b/services/core/java/com/android/server/connectivity/TcpKeepaliveController.java new file mode 100644 index 000000000000..8a9ac23cf06a --- /dev/null +++ b/services/core/java/com/android/server/connectivity/TcpKeepaliveController.java @@ -0,0 +1,316 @@ +/* + * Copyright (C) 2019 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.connectivity; + +import static android.net.SocketKeepalive.DATA_RECEIVED; +import static android.net.SocketKeepalive.ERROR_INVALID_SOCKET; +import static android.net.SocketKeepalive.ERROR_SOCKET_NOT_IDLE; +import static android.os.MessageQueue.OnFileDescriptorEventListener.EVENT_ERROR; +import static android.os.MessageQueue.OnFileDescriptorEventListener.EVENT_INPUT; +import static android.system.OsConstants.FIONREAD; +import static android.system.OsConstants.IPPROTO_TCP; +import static android.system.OsConstants.TIOCOUTQ; + +import android.annotation.NonNull; +import android.net.NetworkUtils; +import android.net.SocketKeepalive.InvalidSocketException; +import android.net.TcpKeepalivePacketData.TcpSocketInfo; +import android.net.TcpRepairWindow; +import android.os.Handler; +import android.os.MessageQueue; +import android.os.Messenger; +import android.system.ErrnoException; +import android.system.Int32Ref; +import android.system.Os; +import android.util.Log; +import android.util.SparseArray; + +import com.android.internal.annotations.GuardedBy; +import com.android.server.connectivity.KeepaliveTracker.KeepaliveInfo; + +import java.io.FileDescriptor; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.net.SocketException; + +/** + * Manage tcp socket which offloads tcp keepalive. + * + * The input socket will be changed to repair mode and the application + * will not have permission to read/write data. If the application wants + * to write data, it must stop tcp keepalive offload to leave repair mode + * first. If a remote packet arrives, repair mode will be turned off and + * offload will be stopped. The application will receive a callback to know + * it can start reading data. + * + * {start,stop}SocketMonitor are thread-safe, but care must be taken in the + * order in which they are called. Please note that while calling + * {@link #startSocketMonitor(FileDescriptor, Messenger, int)} multiple times + * with either the same slot or the same FileDescriptor without stopping it in + * between will result in an exception, calling {@link #stopSocketMonitor(int)} + * multiple times with the same int is explicitly a no-op. + * Please also note that switching the socket to repair mode is not synchronized + * with either of these operations and has to be done in an orderly fashion + * with stopSocketMonitor. Take care in calling these in the right order. + * @hide + */ +public class TcpKeepaliveController { + private static final String TAG = "TcpKeepaliveController"; + private static final boolean DBG = false; + + private final MessageQueue mFdHandlerQueue; + + private static final int FD_EVENTS = EVENT_INPUT | EVENT_ERROR; + + // Reference include/uapi/linux/tcp.h + private static final int TCP_REPAIR = 19; + private static final int TCP_REPAIR_QUEUE = 20; + private static final int TCP_QUEUE_SEQ = 21; + private static final int TCP_NO_QUEUE = 0; + private static final int TCP_RECV_QUEUE = 1; + private static final int TCP_SEND_QUEUE = 2; + private static final int TCP_REPAIR_OFF = 0; + private static final int TCP_REPAIR_ON = 1; + // Reference include/uapi/linux/sockios.h + private static final int SIOCINQ = FIONREAD; + private static final int SIOCOUTQ = TIOCOUTQ; + + /** + * Keeps track of packet listeners. + * Key: slot number of keepalive offload. + * Value: {@link FileDescriptor} being listened to. + */ + @GuardedBy("mListeners") + private final SparseArray<FileDescriptor> mListeners = new SparseArray<>(); + + public TcpKeepaliveController(final Handler connectivityServiceHandler) { + mFdHandlerQueue = connectivityServiceHandler.getLooper().getQueue(); + } + + /** + * Switch the tcp socket to repair mode and query tcp socket information. + * + * @param fd the fd of socket on which to use keepalive offload + * @return a {@link TcpKeepalivePacketData#TcpSocketInfo} object for current + * tcp/ip information. + */ + // TODO : make this private. It's far too confusing that this gets called from outside + // at a time that nobody can understand. + public static TcpSocketInfo switchToRepairMode(FileDescriptor fd) + throws InvalidSocketException { + if (DBG) Log.i(TAG, "switchToRepairMode to start tcp keepalive : " + fd); + final SocketAddress srcSockAddr; + final SocketAddress dstSockAddr; + final InetAddress srcAddress; + final InetAddress dstAddress; + final int srcPort; + final int dstPort; + int seq; + final int ack; + final TcpRepairWindow trw; + + // Query source address and port. + try { + srcSockAddr = Os.getsockname(fd); + } catch (ErrnoException e) { + Log.e(TAG, "Get sockname fail: ", e); + throw new InvalidSocketException(ERROR_INVALID_SOCKET, e); + } + if (srcSockAddr instanceof InetSocketAddress) { + srcAddress = getAddress((InetSocketAddress) srcSockAddr); + srcPort = getPort((InetSocketAddress) srcSockAddr); + } else { + Log.e(TAG, "Invalid or mismatched SocketAddress"); + throw new InvalidSocketException(ERROR_INVALID_SOCKET); + } + // Query destination address and port. + try { + dstSockAddr = Os.getpeername(fd); + } catch (ErrnoException e) { + Log.e(TAG, "Get peername fail: ", e); + throw new InvalidSocketException(ERROR_INVALID_SOCKET, e); + } + if (dstSockAddr instanceof InetSocketAddress) { + dstAddress = getAddress((InetSocketAddress) dstSockAddr); + dstPort = getPort((InetSocketAddress) dstSockAddr); + } else { + Log.e(TAG, "Invalid or mismatched peer SocketAddress"); + throw new InvalidSocketException(ERROR_INVALID_SOCKET); + } + + // Query sequence and ack number + dropAllIncomingPackets(fd, true); + try { + // Enter tcp repair mode. + Os.setsockoptInt(fd, IPPROTO_TCP, TCP_REPAIR, TCP_REPAIR_ON); + // Check if socket is idle. + if (!isSocketIdle(fd)) { + throw new InvalidSocketException(ERROR_SOCKET_NOT_IDLE); + } + // Query write sequence number from SEND_QUEUE. + Os.setsockoptInt(fd, IPPROTO_TCP, TCP_REPAIR_QUEUE, TCP_SEND_QUEUE); + seq = Os.getsockoptInt(fd, IPPROTO_TCP, TCP_QUEUE_SEQ); + // Query read sequence number from RECV_QUEUE. + Os.setsockoptInt(fd, IPPROTO_TCP, TCP_REPAIR_QUEUE, TCP_RECV_QUEUE); + ack = Os.getsockoptInt(fd, IPPROTO_TCP, TCP_QUEUE_SEQ); + // Switch to NO_QUEUE to prevent illegal socket read/write in repair mode. + Os.setsockoptInt(fd, IPPROTO_TCP, TCP_REPAIR_QUEUE, TCP_NO_QUEUE); + // Finally, check if socket is still idle. TODO : this check needs to move to + // after starting polling to prevent a race. + if (!isSocketIdle(fd)) { + throw new InvalidSocketException(ERROR_INVALID_SOCKET); + } + + // Query tcp window size. + trw = NetworkUtils.getTcpRepairWindow(fd); + } catch (ErrnoException e) { + Log.e(TAG, "Exception reading TCP state from socket", e); + try { + Os.setsockoptInt(fd, IPPROTO_TCP, TCP_REPAIR, TCP_REPAIR_OFF); + } catch (ErrnoException ex) { + Log.e(TAG, "Exception while turning off repair mode due to exception", ex); + } + throw new InvalidSocketException(ERROR_INVALID_SOCKET, e); + } finally { + dropAllIncomingPackets(fd, false); + } + + // Keepalive sequence number is last sequence number - 1. If it couldn't be retrieved, + // then it must be set to -1, so decrement in all cases. + seq = seq - 1; + + return new TcpSocketInfo(srcAddress, srcPort, dstAddress, dstPort, seq, ack, trw.rcvWnd, + trw.rcvWndScale); + } + + /** + * Switch the tcp socket out of repair mode. + * + * @param fd the fd of socket to switch back to normal. + */ + // TODO : make this private. + public static void switchOutOfRepairMode(@NonNull final FileDescriptor fd) + throws ErrnoException { + Os.setsockoptInt(fd, IPPROTO_TCP, TCP_REPAIR, TCP_REPAIR_OFF); + } + + /** + * Start monitoring incoming packets. + * + * @param fd socket fd to monitor. + * @param messenger a callback to notify socket status. + * @param slot keepalive slot. + */ + public void startSocketMonitor(@NonNull final FileDescriptor fd, + @NonNull final KeepaliveInfo ki, final int slot) { + synchronized (mListeners) { + if (null != mListeners.get(slot)) { + throw new IllegalArgumentException("This slot is already taken"); + } + for (int i = 0; i < mListeners.size(); ++i) { + if (fd.equals(mListeners.valueAt(i))) { + throw new IllegalArgumentException("This fd is already registered"); + } + } + mFdHandlerQueue.addOnFileDescriptorEventListener(fd, FD_EVENTS, (readyFd, events) -> { + // This can't be called twice because the queue guarantees that once the listener + // is unregistered it can't be called again, even for a message that arrived + // before it was unregistered. + final int reason; + if (0 != (events & EVENT_ERROR)) { + reason = ERROR_INVALID_SOCKET; + } else { + reason = DATA_RECEIVED; + } + ki.onFileDescriptorInitiatedStop(reason); + // The listener returns the new set of events to listen to. Because 0 means no + // event, the listener gets unregistered. + return 0; + }); + mListeners.put(slot, fd); + } + } + + /** Stop socket monitor */ + // This slot may have been stopped automatically already because the socket received data, + // was closed on the other end or otherwise suffered some error. In this case, this function + // is a no-op. + public void stopSocketMonitor(final int slot) { + final FileDescriptor fd; + synchronized (mListeners) { + fd = mListeners.get(slot); + if (null == fd) return; + mListeners.remove(slot); + } + mFdHandlerQueue.removeOnFileDescriptorEventListener(fd); + try { + if (DBG) Log.d(TAG, "Moving socket out of repair mode for stop : " + fd); + switchOutOfRepairMode(fd); + } catch (ErrnoException e) { + Log.e(TAG, "Cannot switch socket out of repair mode", e); + // Well, there is not much to do here to recover + } + } + + private static InetAddress getAddress(InetSocketAddress inetAddr) { + return inetAddr.getAddress(); + } + + private static int getPort(InetSocketAddress inetAddr) { + return inetAddr.getPort(); + } + + private static boolean isSocketIdle(FileDescriptor fd) throws ErrnoException { + return isReceiveQueueEmpty(fd) && isSendQueueEmpty(fd); + } + + private static boolean isReceiveQueueEmpty(FileDescriptor fd) + throws ErrnoException { + Int32Ref result = new Int32Ref(-1); + Os.ioctlInt(fd, SIOCINQ, result); + if (result.value != 0) { + Log.e(TAG, "Read queue has data"); + return false; + } + return true; + } + + private static boolean isSendQueueEmpty(FileDescriptor fd) + throws ErrnoException { + Int32Ref result = new Int32Ref(-1); + Os.ioctlInt(fd, SIOCOUTQ, result); + if (result.value != 0) { + Log.e(TAG, "Write queue has data"); + return false; + } + return true; + } + + private static void dropAllIncomingPackets(FileDescriptor fd, boolean enable) + throws InvalidSocketException { + try { + if (enable) { + NetworkUtils.attachDropAllBPFFilter(fd); + } else { + NetworkUtils.detachBPFFilter(fd); + } + } catch (SocketException e) { + Log.e(TAG, "Socket Exception: ", e); + throw new InvalidSocketException(ERROR_INVALID_SOCKET, e); + } + } +} diff --git a/services/core/java/com/android/server/content/ContentService.java b/services/core/java/com/android/server/content/ContentService.java index e268e4458986..bfa7f9d439e3 100644 --- a/services/core/java/com/android/server/content/ContentService.java +++ b/services/core/java/com/android/server/content/ContentService.java @@ -899,9 +899,20 @@ public final class ContentService extends IContentService.Stub { @Override public void setIsSyncable(Account account, String providerName, int syncable) { + setIsSyncableAsUser(account, providerName, syncable, UserHandle.getCallingUserId()); + } + + /** + * @hide + */ + @Override + public void setIsSyncableAsUser(Account account, String providerName, int syncable, + int userId) { if (TextUtils.isEmpty(providerName)) { throw new IllegalArgumentException("Authority must not be empty"); } + enforceCrossUserPermission(userId, + "no permission to set the sync settings for user " + userId); mContext.enforceCallingOrSelfPermission(Manifest.permission.WRITE_SYNC_SETTINGS, "no permission to write the sync settings"); @@ -909,7 +920,6 @@ public final class ContentService extends IContentService.Stub { final int callingUid = Binder.getCallingUid(); final int callingPid = Binder.getCallingPid(); - int userId = UserHandle.getCallingUserId(); long identityToken = clearCallingIdentity(); try { SyncManager syncManager = getSyncManager(); diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java index 7096477ce5f4..99e07071f361 100644 --- a/services/core/java/com/android/server/content/SyncManager.java +++ b/services/core/java/com/android/server/content/SyncManager.java @@ -3261,7 +3261,7 @@ public class SyncManager { if (Log.isLoggable(TAG, Log.DEBUG)) { Log.d(TAG, "Account " + aau.account + " added, checking sync restore data"); } - AccountSyncSettingsBackupHelper.accountAdded(mContext); + AccountSyncSettingsBackupHelper.accountAdded(mContext, syncTargets.userId); break; } } diff --git a/services/core/java/com/android/server/notification/BubbleExtractor.java b/services/core/java/com/android/server/notification/BubbleExtractor.java new file mode 100644 index 000000000000..358bdb90f6d3 --- /dev/null +++ b/services/core/java/com/android/server/notification/BubbleExtractor.java @@ -0,0 +1,68 @@ +/** +* Copyright (C) 2019 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.notification; + +import android.content.Context; +import android.util.Slog; + +/** + * Determines whether a bubble can be shown for this notification + */ +public class BubbleExtractor implements NotificationSignalExtractor { + private static final String TAG = "BubbleExtractor"; + private static final boolean DBG = false; + + private RankingConfig mConfig; + + public void initialize(Context ctx, NotificationUsageStats usageStats) { + if (DBG) Slog.d(TAG, "Initializing " + getClass().getSimpleName() + "."); + } + + public RankingReconsideration process(NotificationRecord record) { + if (record == null || record.getNotification() == null) { + if (DBG) Slog.d(TAG, "skipping empty notification"); + return null; + } + + if (mConfig == null) { + if (DBG) Slog.d(TAG, "missing config"); + return null; + } + boolean userWantsBubbles = mConfig.bubblesEnabled(record.sbn.getUser()); + boolean appCanShowBubble = + mConfig.areBubblesAllowed(record.sbn.getPackageName(), record.sbn.getUid()); + if (!userWantsBubbles || !appCanShowBubble) { + record.setAllowBubble(false); + } else { + if (record.getChannel() != null) { + record.setAllowBubble(record.getChannel().canBubble() && appCanShowBubble); + } else { + record.setAllowBubble(appCanShowBubble); + } + } + + return null; + } + + @Override + public void setConfig(RankingConfig config) { + mConfig = config; + } + + @Override + public void setZenHelper(ZenModeHelper helper) { + } +} diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java index c222e6948a3d..cf09b8fc4c84 100644 --- a/services/core/java/com/android/server/notification/ManagedServices.java +++ b/services/core/java/com/android/server/notification/ManagedServices.java @@ -306,18 +306,21 @@ abstract public class ManagedServices { } } - public void writeXml(XmlSerializer out, boolean forBackup) throws IOException { + public void writeXml(XmlSerializer out, boolean forBackup, int userId) throws IOException { out.startTag(null, getConfig().xmlTag); out.attribute(null, ATT_VERSION, String.valueOf(DB_VERSION)); if (forBackup) { - trimApprovedListsAccordingToInstalledServices(); + trimApprovedListsAccordingToInstalledServices(userId); } final int N = mApproved.size(); for (int i = 0 ; i < N; i++) { - final int userId = mApproved.keyAt(i); + final int approvedUserId = mApproved.keyAt(i); + if (forBackup && approvedUserId != userId) { + continue; + } final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.valueAt(i); if (approvedByType != null) { final int M = approvedByType.size(); @@ -328,14 +331,14 @@ abstract public class ManagedServices { String allowedItems = String.join(ENABLED_SERVICES_SEPARATOR, approved); out.startTag(null, TAG_MANAGED_SERVICES); out.attribute(null, ATT_APPROVED_LIST, allowedItems); - out.attribute(null, ATT_USER_ID, Integer.toString(userId)); + out.attribute(null, ATT_USER_ID, Integer.toString(approvedUserId)); out.attribute(null, ATT_IS_PRIMARY, Boolean.toString(isPrimary)); out.endTag(null, TAG_MANAGED_SERVICES); if (!forBackup && isPrimary) { // Also write values to settings, for observers who haven't migrated yet Settings.Secure.putStringForUser(mContext.getContentResolver(), - getConfig().secureSettingName, allowedItems, userId); + getConfig().secureSettingName, allowedItems, approvedUserId); } } @@ -350,15 +353,12 @@ abstract public class ManagedServices { loadAllowedComponentsFromSettings(); } - public void readXml(XmlPullParser parser, Predicate<String> allowedManagedServicePackages) + public void readXml( + XmlPullParser parser, + Predicate<String> allowedManagedServicePackages, + boolean forRestore, + int userId) throws XmlPullParserException, IOException { - // upgrade xml - int xmlVersion = XmlUtils.readIntAttribute(parser, ATT_VERSION, 0); - final List<UserInfo> activeUsers = mUm.getUsers(true); - for (UserInfo userInfo : activeUsers) { - upgradeXml(xmlVersion, userInfo.getUserHandle().getIdentifier()); - } - // read grants int type; while ((type = parser.next()) != XmlPullParser.END_DOCUMENT) { @@ -372,14 +372,16 @@ abstract public class ManagedServices { Slog.i(TAG, "Read " + mConfig.caption + " permissions from xml"); final String approved = XmlUtils.readStringAttribute(parser, ATT_APPROVED_LIST); - final int userId = XmlUtils.readIntAttribute(parser, ATT_USER_ID, 0); + // Ignore parser's user id for restore. + final int resolvedUserId = forRestore + ? userId : XmlUtils.readIntAttribute(parser, ATT_USER_ID, 0); final boolean isPrimary = XmlUtils.readBooleanAttribute(parser, ATT_IS_PRIMARY, true); if (allowedManagedServicePackages == null || allowedManagedServicePackages.test(getPackageName(approved))) { - if (mUm.getUserInfo(userId) != null) { - addApprovedList(approved, userId, isPrimary); + if (mUm.getUserInfo(resolvedUserId) != null) { + addApprovedList(approved, resolvedUserId, isPrimary); } mUseXml = true; } @@ -389,8 +391,6 @@ abstract public class ManagedServices { rebindServices(false, USER_ALL); } - protected void upgradeXml(final int xmlVersion, final int userId) {} - private void loadAllowedComponentsFromSettings() { for (UserInfo user : mUm.getUsers()) { final ContentResolver cr = mContext.getContentResolver(); @@ -784,26 +784,23 @@ abstract public class ManagedServices { return allowedPackages; } - private void trimApprovedListsAccordingToInstalledServices() { - int N = mApproved.size(); - for (int i = 0 ; i < N; i++) { - final int userId = mApproved.keyAt(i); - final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.valueAt(i); - int M = approvedByType.size(); - for (int j = 0; j < M; j++) { - final ArraySet<String> approved = approvedByType.valueAt(j); - int P = approved.size(); - for (int k = P - 1; k >= 0; k--) { - final String approvedPackageOrComponent = approved.valueAt(k); - if (!isValidEntry(approvedPackageOrComponent, userId)){ - approved.removeAt(k); - Slog.v(TAG, "Removing " + approvedPackageOrComponent - + " from approved list; no matching services found"); - } else { - if (DEBUG) { - Slog.v(TAG, "Keeping " + approvedPackageOrComponent - + " on approved list; matching services found"); - } + private void trimApprovedListsAccordingToInstalledServices(int userId) { + final ArrayMap<Boolean, ArraySet<String>> approvedByType = mApproved.get(userId); + if (approvedByType == null) { + return; + } + for (int i = 0; i < approvedByType.size(); i++) { + final ArraySet<String> approved = approvedByType.valueAt(i); + for (int j = approved.size() - 1; j >= 0; j--) { + final String approvedPackageOrComponent = approved.valueAt(j); + if (!isValidEntry(approvedPackageOrComponent, userId)){ + approved.removeAt(j); + Slog.v(TAG, "Removing " + approvedPackageOrComponent + + " from approved list; no matching services found"); + } else { + if (DEBUG) { + Slog.v(TAG, "Keeping " + approvedPackageOrComponent + + " on approved list; matching services found"); } } } diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 34a6663c4352..3557fcf35dbc 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -213,6 +213,7 @@ import com.android.server.lights.LightsManager; import com.android.server.notification.ManagedServices.ManagedServiceInfo; import com.android.server.notification.ManagedServices.UserProfiles; import com.android.server.pm.PackageManagerService; +import com.android.server.pm.UserManagerService; import com.android.server.policy.PhoneWindowManager; import com.android.server.statusbar.StatusBarManagerInternal; import com.android.server.uri.UriGrantsManagerInternal; @@ -538,30 +539,49 @@ public class NotificationManagerService extends SystemService { } } - void readPolicyXml(InputStream stream, boolean forRestore) + UserManagerService getUserManagerService() { + return UserManagerService.getInstance(); + } + + void readPolicyXml(InputStream stream, boolean forRestore, int userId) throws XmlPullParserException, NumberFormatException, IOException { final XmlPullParser parser = Xml.newPullParser(); parser.setInput(stream, StandardCharsets.UTF_8.name()); XmlUtils.beginDocument(parser, TAG_NOTIFICATION_POLICY); boolean migratedManagedServices = false; + boolean ineligibleForManagedServices = forRestore + && getUserManagerService().isManagedProfile(userId); int outerDepth = parser.getDepth(); while (XmlUtils.nextElementWithin(parser, outerDepth)) { if (ZenModeConfig.ZEN_TAG.equals(parser.getName())) { - mZenModeHelper.readXml(parser, forRestore); + mZenModeHelper.readXml(parser, forRestore, userId); } else if (PreferencesHelper.TAG_RANKING.equals(parser.getName())){ - mPreferencesHelper.readXml(parser, forRestore); + mPreferencesHelper.readXml(parser, forRestore, userId); } if (mListeners.getConfig().xmlTag.equals(parser.getName())) { - mListeners.readXml(parser, mAllowedManagedServicePackages); + if (ineligibleForManagedServices) { + continue; + } + mListeners.readXml(parser, mAllowedManagedServicePackages, forRestore, userId); migratedManagedServices = true; } else if (mAssistants.getConfig().xmlTag.equals(parser.getName())) { - mAssistants.readXml(parser, mAllowedManagedServicePackages); + if (ineligibleForManagedServices) { + continue; + } + mAssistants.readXml(parser, mAllowedManagedServicePackages, forRestore, userId); migratedManagedServices = true; } else if (mConditionProviders.getConfig().xmlTag.equals(parser.getName())) { - mConditionProviders.readXml(parser, mAllowedManagedServicePackages); + if (ineligibleForManagedServices) { + continue; + } + mConditionProviders.readXml( + parser, mAllowedManagedServicePackages, forRestore, userId); migratedManagedServices = true; } if (LOCKSCREEN_ALLOW_SECURE_NOTIFICATIONS_TAG.equals(parser.getName())) { + if (forRestore && userId != UserHandle.USER_SYSTEM) { + continue; + } mLockScreenAllowSecureNotifications = safeBoolean(parser.getAttributeValue(null, LOCKSCREEN_ALLOW_SECURE_NOTIFICATIONS_VALUE), true); @@ -584,7 +604,7 @@ public class NotificationManagerService extends SystemService { InputStream infile = null; try { infile = mPolicyFile.openRead(); - readPolicyXml(infile, false /*forRestore*/); + readPolicyXml(infile, false /*forRestore*/, UserHandle.USER_ALL); } catch (FileNotFoundException e) { // No data yet // Load default managed services approvals @@ -615,7 +635,7 @@ public class NotificationManagerService extends SystemService { } try { - writePolicyXml(stream, false /*forBackup*/); + writePolicyXml(stream, false /*forBackup*/, UserHandle.USER_ALL); mPolicyFile.finishWrite(stream); } catch (IOException e) { Slog.w(TAG, "Failed to save policy file, restoring backup", e); @@ -626,18 +646,21 @@ public class NotificationManagerService extends SystemService { }); } - private void writePolicyXml(OutputStream stream, boolean forBackup) throws IOException { + private void writePolicyXml(OutputStream stream, boolean forBackup, int userId) + throws IOException { final XmlSerializer out = new FastXmlSerializer(); out.setOutput(stream, StandardCharsets.UTF_8.name()); out.startDocument(null, true); out.startTag(null, TAG_NOTIFICATION_POLICY); out.attribute(null, ATTR_VERSION, Integer.toString(DB_VERSION)); - mZenModeHelper.writeXml(out, forBackup, null); - mPreferencesHelper.writeXml(out, forBackup); - mListeners.writeXml(out, forBackup); - mAssistants.writeXml(out, forBackup); - mConditionProviders.writeXml(out, forBackup); - writeSecureNotificationsPolicy(out); + mZenModeHelper.writeXml(out, forBackup, null, userId); + mPreferencesHelper.writeXml(out, forBackup, userId); + mListeners.writeXml(out, forBackup, userId); + mAssistants.writeXml(out, forBackup, userId); + mConditionProviders.writeXml(out, forBackup, userId); + if (!forBackup || userId == UserHandle.USER_SYSTEM) { + writeSecureNotificationsPolicy(out); + } out.endTag(null, TAG_NOTIFICATION_POLICY); out.endDocument(); } @@ -1282,6 +1305,8 @@ public class NotificationManagerService extends SystemService { private final class SettingsObserver extends ContentObserver { private final Uri NOTIFICATION_BADGING_URI = Settings.Secure.getUriFor(Settings.Secure.NOTIFICATION_BADGING); + private final Uri NOTIFICATION_BUBBLES_URI + = Settings.Secure.getUriFor(Settings.Secure.NOTIFICATION_BUBBLES); private final Uri NOTIFICATION_LIGHT_PULSE_URI = Settings.System.getUriFor(Settings.System.NOTIFICATION_LIGHT_PULSE); private final Uri NOTIFICATION_RATE_LIMIT_URI @@ -1299,6 +1324,8 @@ public class NotificationManagerService extends SystemService { false, this, UserHandle.USER_ALL); resolver.registerContentObserver(NOTIFICATION_RATE_LIMIT_URI, false, this, UserHandle.USER_ALL); + resolver.registerContentObserver(NOTIFICATION_BUBBLES_URI, + false, this, UserHandle.USER_ALL); update(null); } @@ -1324,6 +1351,9 @@ public class NotificationManagerService extends SystemService { if (uri == null || NOTIFICATION_BADGING_URI.equals(uri)) { mPreferencesHelper.updateBadgingEnabled(); } + if (uri == null || NOTIFICATION_BUBBLES_URI.equals(uri)) { + mPreferencesHelper.updateBubblesEnabled(); + } } } @@ -3507,14 +3537,9 @@ public class NotificationManagerService extends SystemService { public byte[] getBackupPayload(int user) { checkCallerIsSystem(); if (DBG) Slog.d(TAG, "getBackupPayload u=" + user); - //TODO: http://b/22388012 - if (user != USER_SYSTEM) { - Slog.w(TAG, "getBackupPayload: cannot backup policy for user " + user); - return null; - } final ByteArrayOutputStream baos = new ByteArrayOutputStream(); try { - writePolicyXml(baos, true /*forBackup*/); + writePolicyXml(baos, true /*forBackup*/, user); return baos.toByteArray(); } catch (IOException e) { Slog.w(TAG, "getBackupPayload: error writing payload for user " + user, e); @@ -3531,14 +3556,9 @@ public class NotificationManagerService extends SystemService { Slog.w(TAG, "applyRestore: no payload to restore for user " + user); return; } - //TODO: http://b/22388012 - if (user != USER_SYSTEM) { - Slog.w(TAG, "applyRestore: cannot restore policy for user " + user); - return; - } final ByteArrayInputStream bais = new ByteArrayInputStream(payload); try { - readPolicyXml(bais, true /*forRestore*/); + readPolicyXml(bais, true /*forRestore*/, user); handleSavePolicyFile(); } catch (NumberFormatException | XmlPullParserException | IOException e) { Slog.w(TAG, "applyRestore: error reading payload", e); @@ -5849,6 +5869,7 @@ public class NotificationManagerService extends SystemService { ArrayList<String> orderBefore = new ArrayList<>(N); int[] visibilities = new int[N]; boolean[] showBadges = new boolean[N]; + boolean[] allowBubbles = new boolean[N]; ArrayList<NotificationChannel> channelBefore = new ArrayList<>(N); ArrayList<String> groupKeyBefore = new ArrayList<>(N); ArrayList<ArrayList<String>> overridePeopleBefore = new ArrayList<>(N); @@ -5863,6 +5884,7 @@ public class NotificationManagerService extends SystemService { orderBefore.add(r.getKey()); visibilities[i] = r.getPackageVisibilityOverride(); showBadges[i] = r.canShowBadge(); + allowBubbles[i] = r.canBubble(); channelBefore.add(r.getChannel()); groupKeyBefore.add(r.getGroupKey()); overridePeopleBefore.add(r.getPeopleOverride()); @@ -5880,6 +5902,7 @@ public class NotificationManagerService extends SystemService { if (!orderBefore.get(i).equals(r.getKey()) || visibilities[i] != r.getPackageVisibilityOverride() || showBadges[i] != r.canShowBadge() + || allowBubbles[i] != r.canBubble() || !Objects.equals(channelBefore.get(i), r.getChannel()) || !Objects.equals(groupKeyBefore.get(i), r.getGroupKey()) || !Objects.equals(overridePeopleBefore.get(i), r.getPeopleOverride()) @@ -6922,6 +6945,7 @@ public class NotificationManagerService extends SystemService { Bundle smartReplies = new Bundle(); Bundle lastAudiblyAlerted = new Bundle(); Bundle noisy = new Bundle(); + ArrayList<Boolean> canBubble = new ArrayList<>(N); for (int i = 0; i < N; i++) { NotificationRecord record = mNotificationList.get(i); if (!isVisibleToListener(record.sbn, info)) { @@ -6954,18 +6978,22 @@ public class NotificationManagerService extends SystemService { smartReplies.putCharSequenceArrayList(key, record.getSmartReplies()); lastAudiblyAlerted.putLong(key, record.getLastAudiblyAlertedMs()); noisy.putBoolean(key, record.getSound() != null || record.getVibration() != null); + canBubble.add(record.canBubble()); } final int M = keys.size(); String[] keysAr = keys.toArray(new String[M]); String[] interceptedKeysAr = interceptedKeys.toArray(new String[interceptedKeys.size()]); int[] importanceAr = new int[M]; + boolean[] canBubbleAr = new boolean[M]; for (int i = 0; i < M; i++) { importanceAr[i] = importance.get(i); + canBubbleAr[i] = canBubble.get(i); } return new NotificationRankingUpdate(keysAr, interceptedKeysAr, visibilityOverrides, suppressedVisualEffects, importanceAr, explanation, overrideGroupKeys, channels, overridePeople, snoozeCriteria, showBadge, userSentiment, hidden, - systemGeneratedSmartActions, smartReplies, lastAudiblyAlerted, noisy); + systemGeneratedSmartActions, smartReplies, lastAudiblyAlerted, noisy, + canBubbleAr); } boolean hasCompanionDevice(ManagedServiceInfo info) { diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java index b3394b4c599f..48818f5649af 100644 --- a/services/core/java/com/android/server/notification/NotificationRecord.java +++ b/services/core/java/com/android/server/notification/NotificationRecord.java @@ -161,6 +161,7 @@ public final class NotificationRecord { private ArrayList<String> mPeopleOverride; private ArrayList<SnoozeCriterion> mSnoozeCriteria; private boolean mShowBadge; + private boolean mAllowBubble; private Light mLight; /** * This list contains system generated smart actions from NAS, app-generated smart actions are @@ -994,6 +995,14 @@ public final class NotificationRecord { mShowBadge = showBadge; } + public boolean canBubble() { + return mAllowBubble; + } + + public void setAllowBubble(boolean allow) { + mAllowBubble = allow; + } + public boolean canShowBadge() { return mShowBadge; } diff --git a/services/core/java/com/android/server/notification/PreferencesHelper.java b/services/core/java/com/android/server/notification/PreferencesHelper.java index 6ed4f5c03171..2c47ec03f9fa 100644 --- a/services/core/java/com/android/server/notification/PreferencesHelper.java +++ b/services/core/java/com/android/server/notification/PreferencesHelper.java @@ -127,6 +127,7 @@ public class PreferencesHelper implements RankingConfig { private final ZenModeHelper mZenModeHelper; private SparseBooleanArray mBadgingEnabled; + private SparseBooleanArray mBubblesEnabled; private boolean mAreChannelsBypassingDnd; private boolean mHideSilentStatusBarIcons; @@ -138,10 +139,11 @@ public class PreferencesHelper implements RankingConfig { mPm = pm; updateBadgingEnabled(); + updateBubblesEnabled(); syncChannelsBypassingDnd(mContext.getUserId()); } - public void readXml(XmlPullParser parser, boolean forRestore) + public void readXml(XmlPullParser parser, boolean forRestore, int userId) throws XmlPullParserException, IOException { int type = parser.getEventType(); if (type != XmlPullParser.START_TAG) return; @@ -158,6 +160,9 @@ public class PreferencesHelper implements RankingConfig { } if (type == XmlPullParser.START_TAG) { if (TAG_STATUS_ICONS.equals(tag)) { + if (forRestore && userId != UserHandle.USER_SYSTEM) { + continue; + } mHideSilentStatusBarIcons = XmlUtils.readBooleanAttribute( parser, ATT_HIDE_SILENT, DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS); } else if (TAG_PACKAGE.equals(tag)) { @@ -166,9 +171,7 @@ public class PreferencesHelper implements RankingConfig { if (!TextUtils.isEmpty(name)) { if (forRestore) { try { - //TODO: http://b/22388012 - uid = mPm.getPackageUidAsUser(name, - UserHandle.USER_SYSTEM); + uid = mPm.getPackageUidAsUser(name, userId); } catch (PackageManager.NameNotFoundException e) { // noop } @@ -379,10 +382,11 @@ public class PreferencesHelper implements RankingConfig { r.channels.put(channel.getId(), channel); } - public void writeXml(XmlSerializer out, boolean forBackup) throws IOException { + public void writeXml(XmlSerializer out, boolean forBackup, int userId) throws IOException { out.startTag(null, TAG_RANKING); out.attribute(null, ATT_VERSION, Integer.toString(XML_VERSION)); - if (mHideSilentStatusBarIcons != DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS) { + if (mHideSilentStatusBarIcons != DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS + && (!forBackup || userId == UserHandle.USER_SYSTEM)) { out.startTag(null, TAG_STATUS_ICONS); out.attribute(null, ATT_HIDE_SILENT, String.valueOf(mHideSilentStatusBarIcons)); out.endTag(null, TAG_STATUS_ICONS); @@ -392,8 +396,7 @@ public class PreferencesHelper implements RankingConfig { final int N = mPackagePreferences.size(); for (int i = 0; i < N; i++) { final PackagePreferences r = mPackagePreferences.valueAt(i); - //TODO: http://b/22388012 - if (forBackup && UserHandle.getUserId(r.uid) != UserHandle.USER_SYSTEM) { + if (forBackup && UserHandle.getUserId(r.uid) != userId) { continue; } final boolean hasNonDefaultSettings = @@ -485,6 +488,7 @@ public class PreferencesHelper implements RankingConfig { * @param uid the uid to check if bubbles are allowed for. * @return whether bubbles are allowed. */ + @Override public boolean areBubblesAllowed(String pkg, int uid) { return getOrCreatePackagePreferences(pkg, uid).allowBubble; } @@ -1266,7 +1270,7 @@ public class PreferencesHelper implements RankingConfig { if (original.canShowBadge() != update.canShowBadge()) { update.lockFields(NotificationChannel.USER_LOCKED_SHOW_BADGE); } - if (original.isBubbleAllowed() != update.isBubbleAllowed()) { + if (original.canBubble() != update.canBubble()) { update.lockFields(NotificationChannel.USER_LOCKED_ALLOW_BUBBLE); } } @@ -1638,6 +1642,40 @@ public class PreferencesHelper implements RankingConfig { .setPackageName(pkg); } + public void updateBubblesEnabled() { + if (mBubblesEnabled == null) { + mBubblesEnabled = new SparseBooleanArray(); + } + boolean changed = false; + // update the cached values + for (int index = 0; index < mBubblesEnabled.size(); index++) { + int userId = mBubblesEnabled.keyAt(index); + final boolean oldValue = mBubblesEnabled.get(userId); + final boolean newValue = Settings.Secure.getIntForUser(mContext.getContentResolver(), + Settings.Secure.NOTIFICATION_BUBBLES, + DEFAULT_ALLOW_BUBBLE ? 1 : 0, userId) != 0; + mBubblesEnabled.put(userId, newValue); + changed |= oldValue != newValue; + } + if (changed) { + updateConfig(); + } + } + + public boolean bubblesEnabled(UserHandle userHandle) { + int userId = userHandle.getIdentifier(); + if (userId == UserHandle.USER_ALL) { + return false; + } + if (mBubblesEnabled.indexOfKey(userId) < 0) { + mBubblesEnabled.put(userId, + Settings.Secure.getIntForUser(mContext.getContentResolver(), + Settings.Secure.NOTIFICATION_BUBBLES, + DEFAULT_ALLOW_BUBBLE ? 1 : 0, userId) != 0); + } + return mBubblesEnabled.get(userId, DEFAULT_ALLOW_BUBBLE); + } + public void updateBadgingEnabled() { if (mBadgingEnabled == null) { diff --git a/services/core/java/com/android/server/notification/RankingConfig.java b/services/core/java/com/android/server/notification/RankingConfig.java index 605348b4d52d..72502acd6560 100644 --- a/services/core/java/com/android/server/notification/RankingConfig.java +++ b/services/core/java/com/android/server/notification/RankingConfig.java @@ -29,6 +29,8 @@ public interface RankingConfig { void setShowBadge(String packageName, int uid, boolean showBadge); boolean canShowBadge(String packageName, int uid); boolean badgingEnabled(UserHandle userHandle); + boolean areBubblesAllowed(String packageName, int uid); + boolean bubblesEnabled(UserHandle userHandle); boolean isGroupBlocked(String packageName, int uid, String groupId); Collection<NotificationChannelGroup> getNotificationChannelGroups(String pkg, diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java index afc0b7230e27..ea7bf2d23495 100644 --- a/services/core/java/com/android/server/notification/ZenModeHelper.java +++ b/services/core/java/com/android/server/notification/ZenModeHelper.java @@ -104,7 +104,7 @@ public class ZenModeHelper { protected final RingerModeDelegate mRingerModeDelegate = new RingerModeDelegate(); @VisibleForTesting protected final ZenModeConditions mConditions; - private final SparseArray<ZenModeConfig> mConfigs = new SparseArray<>(); + @VisibleForTesting final SparseArray<ZenModeConfig> mConfigs = new SparseArray<>(); private final Metrics mMetrics = new Metrics(); private final ConditionProviders.Config mServiceConfig; @@ -662,17 +662,14 @@ public class ZenModeHelper { } } - public void readXml(XmlPullParser parser, boolean forRestore) + public void readXml(XmlPullParser parser, boolean forRestore, int userId) throws XmlPullParserException, IOException { ZenModeConfig config = ZenModeConfig.readXml(parser); String reason = "readXml"; if (config != null) { if (forRestore) { - //TODO: http://b/22388012 - if (config.user != UserHandle.USER_SYSTEM) { - return; - } + config.user = userId; config.manualRule = null; // don't restore the manual rule } @@ -707,13 +704,15 @@ public class ZenModeHelper { reason += ", reset to default rules"; } + // Resolve user id for settings. + userId = userId == UserHandle.USER_ALL ? UserHandle.USER_SYSTEM : userId; if (config.version < ZenModeConfig.XML_VERSION) { - Settings.Secure.putInt(mContext.getContentResolver(), - Settings.Secure.SHOW_ZEN_UPGRADE_NOTIFICATION, 1); + Settings.Secure.putIntForUser(mContext.getContentResolver(), + Settings.Secure.SHOW_ZEN_UPGRADE_NOTIFICATION, 1, userId); } else { // devices not restoring/upgrading already have updated zen settings - Settings.Secure.putInt(mContext.getContentResolver(), - Settings.Secure.ZEN_SETTINGS_UPDATED, 1); + Settings.Secure.putIntForUser(mContext.getContentResolver(), + Settings.Secure.ZEN_SETTINGS_UPDATED, 1, userId); } if (DEBUG) Log.d(TAG, reason); synchronized (mConfig) { @@ -722,11 +721,11 @@ public class ZenModeHelper { } } - public void writeXml(XmlSerializer out, boolean forBackup, Integer version) throws IOException { + public void writeXml(XmlSerializer out, boolean forBackup, Integer version, int userId) + throws IOException { final int N = mConfigs.size(); for (int i = 0; i < N; i++) { - //TODO: http://b/22388012 - if (forBackup && mConfigs.keyAt(i) != UserHandle.USER_SYSTEM) { + if (forBackup && mConfigs.keyAt(i) != userId) { continue; } mConfigs.valueAt(i).writeXml(out, version); diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java index efafdfaf2b54..c2a75aba28b9 100644 --- a/services/core/java/com/android/server/pm/Installer.java +++ b/services/core/java/com/android/server/pm/Installer.java @@ -611,18 +611,43 @@ public class Installer extends SystemService { } } - public boolean snapshotAppData(String pkg, @UserIdInt int userId, int storageFlags) + /** + * Snapshots user data of the given package. + * + * @param pkg name of the package to snapshot user data for. + * @param userId id of the user whose data to snapshot. + * @param storageFlags flags controlling which data (CE or DE) to snapshot. + * + * @return inode of the snapshot of users CE package data, or {@code 0} if a remote calls + * shouldn't be continued. See {@link #checkBeforeRemote}. + * + * @throws InstallerException if failed to snapshot user data. + */ + public long snapshotAppData(String pkg, @UserIdInt int userId, int storageFlags) throws InstallerException { - if (!checkBeforeRemote()) return false; + if (!checkBeforeRemote()) return 0; try { - mInstalld.snapshotAppData(null, pkg, userId, storageFlags); - return true; + return mInstalld.snapshotAppData(null, pkg, userId, storageFlags); } catch (Exception e) { throw InstallerException.from(e); } } + /** + * Restores user data snapshot of the given package. + * + * @param pkg name of the package to restore user data for. + * @param appId id of the package to restore user data for. + * @param ceDataInode inode of CE user data folder of this app. + * @param userId id of the user whose data to restore. + * @param storageFlags flags controlling which data (CE or DE) to restore. + * + * @return {@code true} if user data restore was successful, or {@code false} if a remote call + * shouldn't be continued. See {@link #checkBeforeRemote}. + * + * @throws InstallerException if failed to restore user data. + */ public boolean restoreAppDataSnapshot(String pkg, @AppIdInt int appId, long ceDataInode, String seInfo, @UserIdInt int userId, int storageFlags) throws InstallerException { if (!checkBeforeRemote()) return false; @@ -636,6 +661,31 @@ public class Installer extends SystemService { } } + /** + * Deletes user data snapshot of the given package. + * + * @param pkg name of the package to delete user data snapshot for. + * @param userId id of the user whose user data snapshot to delete. + * @param ceSnapshotInode inode of CE user data snapshot. + * @param storageFlags flags controlling which user data snapshot (CE or DE) to delete. + * + * @return {@code true} if user data snapshot was successfully deleted, or {@code false} if a + * remote call shouldn't be continued. See {@link #checkBeforeRemote}. + * + * @throws InstallerException if failed to delete user data snapshot. + */ + public boolean destroyAppDataSnapshot(String pkg, @UserIdInt int userId, long ceSnapshotInode, + int storageFlags) throws InstallerException { + if (!checkBeforeRemote()) return false; + + try { + mInstalld.destroyAppDataSnapshot(null, pkg, userId, ceSnapshotInode, storageFlags); + return true; + } catch (Exception e) { + throw InstallerException.from(e); + } + } + private static void assertValidInstructionSet(String instructionSet) throws InstallerException { for (String abi : Build.SUPPORTED_ABIS) { diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index e18da7f7b319..32dc98837854 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -14613,6 +14613,13 @@ public class PackageManagerService extends IPackageManager.Stub PACKAGE_MIME_TYPE); enableRollbackIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); + // Allow the broadcast to be sent before boot complete. + // This is needed when committing the apk part of a staged + // session in early boot. The rollback manager registers + // its receiver early enough during the boot process that + // it will not miss the broadcast. + enableRollbackIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); + mContext.sendOrderedBroadcastAsUser(enableRollbackIntent, getUser(), android.Manifest.permission.PACKAGE_ROLLBACK_AGENT, new BroadcastReceiver() { diff --git a/services/core/java/com/android/server/pm/StagingManager.java b/services/core/java/com/android/server/pm/StagingManager.java index 55eb7ea7da4d..89aea36429d2 100644 --- a/services/core/java/com/android/server/pm/StagingManager.java +++ b/services/core/java/com/android/server/pm/StagingManager.java @@ -380,6 +380,19 @@ public class StagingManager { private boolean commitApkSession(@NonNull PackageInstallerSession apkSession, int originalSessionId) { + + if ((apkSession.params.installFlags & PackageManager.INSTALL_ENABLE_ROLLBACK) != 0) { + // If rollback is available for this session, notify the rollback + // manager of the apk session so it can properly enable rollback. + final IRollbackManager rm = IRollbackManager.Stub.asInterface( + ServiceManager.getService(Context.ROLLBACK_SERVICE)); + try { + rm.notifyStagedApkSession(originalSessionId, apkSession.sessionId); + } catch (RemoteException re) { + // Cannot happen, the rollback manager is in the same process. + } + } + final LocalIntentReceiver receiver = new LocalIntentReceiver(); apkSession.commit(receiver.getIntentSender(), false); final Intent result = receiver.getResult(); diff --git a/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java b/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java index a122ed854a93..bd46a50f97de 100644 --- a/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java +++ b/services/core/java/com/android/server/power/batterysaver/BatterySaverPolicy.java @@ -104,6 +104,7 @@ public class BatterySaverPolicy extends ContentObserver { private static final String KEY_AOD_DISABLED = "aod_disabled"; // Go into deep Doze as soon as the screen turns off. private static final String KEY_QUICK_DOZE_ENABLED = "quick_doze_enabled"; + private static final String KEY_ENABLE_NIGHT_MODE = "enable_night_mode"; private static final String KEY_CPU_FREQ_INTERACTIVE = "cpufreq-i"; private static final String KEY_CPU_FREQ_NONINTERACTIVE = "cpufreq-n"; @@ -123,6 +124,7 @@ public class BatterySaverPolicy extends ContentObserver { false, /* enableAdjustBrightness */ false, /* enableDataSaver */ false, /* enableFireWall */ + false, /* enableNightMode */ false, /* enableQuickDoze */ new ArrayMap<>(), /* filesForInteractive */ new ArrayMap<>(), /* filesForNoninteractive */ @@ -147,6 +149,7 @@ public class BatterySaverPolicy extends ContentObserver { false, /* enableAdjustBrightness */ false, /* enableDataSaver */ true, /* enableFirewall */ + true, /* enableNightMode */ true, /* enableQuickDoze */ new ArrayMap<>(), /* filesForInteractive */ new ArrayMap<>(), /* filesForNoninteractive */ @@ -523,6 +526,11 @@ public class BatterySaverPolicy extends ContentObserver { public final boolean enableFirewall; /** + * Whether to enable night mode or not. + */ + public final boolean enableNightMode; + + /** * Whether Quick Doze is enabled or not. */ public final boolean enableQuickDoze; @@ -578,6 +586,7 @@ public class BatterySaverPolicy extends ContentObserver { boolean enableAdjustBrightness, boolean enableDataSaver, boolean enableFirewall, + boolean enableNightMode, boolean enableQuickDoze, ArrayMap<String, String> filesForInteractive, ArrayMap<String, String> filesForNoninteractive, @@ -598,6 +607,7 @@ public class BatterySaverPolicy extends ContentObserver { this.enableAdjustBrightness = enableAdjustBrightness; this.enableDataSaver = enableDataSaver; this.enableFirewall = enableFirewall; + this.enableNightMode = enableNightMode; this.enableQuickDoze = enableQuickDoze; this.filesForInteractive = filesForInteractive; this.filesForNoninteractive = filesForNoninteractive; @@ -619,6 +629,7 @@ public class BatterySaverPolicy extends ContentObserver { enableAdjustBrightness, enableDataSaver, enableFirewall, + enableNightMode, enableQuickDoze, filesForInteractive, filesForNoninteractive, @@ -654,6 +665,8 @@ public class BatterySaverPolicy extends ContentObserver { config.getEnableAdjustBrightness(), config.getEnableDataSaver(), config.getEnableFirewall(), + // TODO: add option to config + config.getAdvertiseIsEnabled(), config.getEnableQuickDoze(), /* filesForInteractive */ (new CpuFrequencies()).parseString(cpuFreqInteractive).toSysFileMap(), @@ -716,6 +729,8 @@ public class BatterySaverPolicy extends ContentObserver { !defaultPolicy.enableDataSaver); boolean enableFirewall = !parser.getBoolean(KEY_ACTIVATE_FIREWALL_DISABLED, !defaultPolicy.enableFirewall); + boolean enableNightMode = !parser.getBoolean(KEY_ENABLE_NIGHT_MODE, + !defaultPolicy.enableNightMode); boolean enableQuickDoze = parser.getBoolean(KEY_QUICK_DOZE_ENABLED, defaultPolicy.enableQuickDoze); boolean forceAllAppsStandby = parser.getBoolean(KEY_FORCE_ALL_APPS_STANDBY, @@ -739,6 +754,7 @@ public class BatterySaverPolicy extends ContentObserver { enableAdjustBrightness, enableDataSaver, enableFirewall, + enableNightMode, enableQuickDoze, /* filesForInteractive */ (new CpuFrequencies()).parseString(cpuFreqInteractive).toSysFileMap(), @@ -768,6 +784,7 @@ public class BatterySaverPolicy extends ContentObserver { && enableAdjustBrightness == other.enableAdjustBrightness && enableDataSaver == other.enableDataSaver && enableFirewall == other.enableFirewall + && enableNightMode == other.enableNightMode && enableQuickDoze == other.enableQuickDoze && forceAllAppsStandby == other.forceAllAppsStandby && forceBackgroundCheck == other.forceBackgroundCheck @@ -833,6 +850,9 @@ public class BatterySaverPolicy extends ContentObserver { case ServiceType.FORCE_BACKGROUND_CHECK: return builder.setBatterySaverEnabled(currPolicy.forceBackgroundCheck) .build(); + case ServiceType.NIGHT_MODE: + return builder.setBatterySaverEnabled(currPolicy.enableNightMode) + .build(); case ServiceType.OPTIONAL_SENSORS: return builder.setBatterySaverEnabled(currPolicy.disableOptionalSensors) .build(); @@ -1009,6 +1029,8 @@ public class BatterySaverPolicy extends ContentObserver { pw.println(" " + KEY_SOUNDTRIGGER_DISABLED + "=" + p.disableSoundTrigger); pw.print(indent); pw.println(" " + KEY_QUICK_DOZE_ENABLED + "=" + p.enableQuickDoze); + pw.print(indent); + pw.println(" " + KEY_ENABLE_NIGHT_MODE + "=" + p.enableNightMode); pw.print(" Interactive File values:\n"); dumpMap(pw, " ", p.filesForInteractive); diff --git a/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java b/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java index 8dd076028b43..f3b838560ebd 100644 --- a/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java +++ b/services/core/java/com/android/server/rollback/AppDataRollbackHelper.java @@ -22,6 +22,7 @@ import android.content.rollback.RollbackInfo; import android.os.storage.StorageManager; import android.util.IntArray; import android.util.Log; +import android.util.SparseLongArray; import com.android.internal.annotations.VisibleForTesting; import com.android.server.pm.Installer; @@ -51,11 +52,13 @@ public class AppDataRollbackHelper { * Creates an app data snapshot for a specified {@code packageName} for {@code installedUsers}, * a specified set of users for whom the package is installed. * - * @return a list of users for which the snapshot is pending, usually because data for one or - * more users is still credential locked. + * @return a {@link SnapshotAppDataResult}/ + * @see SnapshotAppDataResult */ - public IntArray snapshotAppData(String packageName, int[] installedUsers) { + public SnapshotAppDataResult snapshotAppData(String packageName, int[] installedUsers) { final IntArray pendingBackups = new IntArray(); + final SparseLongArray ceSnapshotInodes = new SparseLongArray(); + for (int user : installedUsers) { final int storageFlags; if (isUserCredentialLocked(user)) { @@ -69,14 +72,17 @@ public class AppDataRollbackHelper { } try { - mInstaller.snapshotAppData(packageName, user, storageFlags); + long ceSnapshotInode = mInstaller.snapshotAppData(packageName, user, storageFlags); + if ((storageFlags & Installer.FLAG_STORAGE_CE) != 0) { + ceSnapshotInodes.put(user, ceSnapshotInode); + } } catch (InstallerException ie) { Log.e(TAG, "Unable to create app data snapshot for: " + packageName + ", userId: " + user, ie); } } - return pendingBackups; + return new SnapshotAppDataResult(pendingBackups, ceSnapshotInodes); } /** @@ -138,6 +144,22 @@ public class AppDataRollbackHelper { } /** + * Deletes an app data data snapshot for a specified package {@code packageName} for a + * given {@code user}. + */ + public void destroyAppDataSnapshot(String packageName, int user, long ceSnapshotInode) { + int storageFlags = Installer.FLAG_STORAGE_DE; + if (ceSnapshotInode > 0) { + storageFlags |= Installer.FLAG_STORAGE_CE; + } + try { + mInstaller.destroyAppDataSnapshot(packageName, user, ceSnapshotInode, storageFlags); + } catch (InstallerException ie) { + Log.e(TAG, "Unable to delete app data snapshot for " + packageName, ie); + } + } + + /** * Computes the list of pending backups and restores for {@code userId} given lists of * available and recent rollbacks. Packages pending backup for the given user are added * to {@code pendingBackups} and packages pending restore are added to {@code pendingRestores} @@ -191,16 +213,28 @@ public class AppDataRollbackHelper { } /** - * Commits the list of pending backups and restores for a given {@code userId}. + * Commits the list of pending backups and restores for a given {@code userId}. For the pending + * backups updates corresponding {@code changedRollbackData} with a mapping from {@code userId} + * to a inode of theirs CE user data snapshot. */ public void commitPendingBackupAndRestoreForUser(int userId, - ArrayList<String> pendingBackups, Map<String, RestoreInfo> pendingRestores) { + ArrayList<String> pendingBackups, Map<String, RestoreInfo> pendingRestores, + List<RollbackData> changedRollbackData) { if (!pendingBackups.isEmpty()) { for (String packageName : pendingBackups) { try { - mInstaller.snapshotAppData(packageName, userId, Installer.FLAG_STORAGE_CE); + long ceSnapshotInode = mInstaller.snapshotAppData(packageName, userId, + Installer.FLAG_STORAGE_CE); + for (RollbackData data : changedRollbackData) { + for (PackageRollbackInfo info : data.packages) { + if (info.getPackageName().equals(packageName)) { + info.putCeSnapshotInode(userId, ceSnapshotInode); + } + } + } } catch (InstallerException ie) { - Log.e(TAG, "Unable to create app data snapshot for: " + packageName, ie); + Log.e(TAG, "Unable to create app data snapshot for: " + packageName + + ", userId: " + userId, ie); } } } @@ -233,4 +267,26 @@ public class AppDataRollbackHelper { return StorageManager.isFileEncryptedNativeOrEmulated() && !StorageManager.isUserKeyUnlocked(userId); } + + /** + * Encapsulates a result of {@link #snapshotAppData} method. + */ + public static final class SnapshotAppDataResult { + + /** + * A list of users for which the snapshot is pending, usually because data for one or more + * users is still credential locked. + */ + public final IntArray pendingBackups; + + /** + * A mapping between user and an inode of theirs CE data snapshot. + */ + public final SparseLongArray ceSnapshotInodes; + + public SnapshotAppDataResult(IntArray pendingBackups, SparseLongArray ceSnapshotInodes) { + this.pendingBackups = pendingBackups; + this.ceSnapshotInodes = ceSnapshotInodes; + } + } } diff --git a/services/core/java/com/android/server/rollback/RollbackData.java b/services/core/java/com/android/server/rollback/RollbackData.java index 467bb28f5744..fcd5297f1363 100644 --- a/services/core/java/com/android/server/rollback/RollbackData.java +++ b/services/core/java/com/android/server/rollback/RollbackData.java @@ -56,6 +56,19 @@ class RollbackData { public int stagedSessionId; /** + * A flag to indicate whether the rollback should be considered available + * for use. This will always be true for rollbacks of non-staged sessions. + * For rollbacks of staged sessions, this is not set to true until after + * the staged session has been applied. + */ + public boolean isAvailable; + + /** + * The id of the post-reboot apk session for a staged install, if any. + */ + public int apkSessionId = -1; + + /** * Whether this Rollback is currently in progress. This field is true from the point * we commit a {@code PackageInstaller} session containing these packages to the point the * {@code PackageInstaller} calls into the {@code onFinished} callback. @@ -63,9 +76,17 @@ class RollbackData { // NOTE: All accesses to this field are from the RollbackManager handler thread. public boolean inProgress = false; - RollbackData(int rollbackId, File backupDir, int stagedSessionId) { + RollbackData(int rollbackId, File backupDir, int stagedSessionId, boolean isAvailable) { this.rollbackId = rollbackId; this.backupDir = backupDir; this.stagedSessionId = stagedSessionId; + this.isAvailable = isAvailable; + } + + /** + * Whether the rollback is for rollback of a staged install. + */ + public boolean isStaged() { + return stagedSessionId != -1; } } diff --git a/services/core/java/com/android/server/rollback/RollbackManagerService.java b/services/core/java/com/android/server/rollback/RollbackManagerService.java index ba6cdddb4cc8..f7ba9bbc695f 100644 --- a/services/core/java/com/android/server/rollback/RollbackManagerService.java +++ b/services/core/java/com/android/server/rollback/RollbackManagerService.java @@ -44,4 +44,11 @@ public final class RollbackManagerService extends SystemService { public void onUnlockUser(int user) { mService.onUnlockUser(user); } + + @Override + public void onBootPhase(int phase) { + if (phase == SystemService.PHASE_BOOT_COMPLETED) { + mService.onBootCompleted(); + } + } } diff --git a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java index 7885abe17c5b..24d5bd14bc44 100644 --- a/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java +++ b/services/core/java/com/android/server/rollback/RollbackManagerServiceImpl.java @@ -43,6 +43,7 @@ import android.os.Process; import android.util.IntArray; import android.util.Log; import android.util.SparseBooleanArray; +import android.util.SparseLongArray; import com.android.internal.annotations.GuardedBy; import com.android.server.LocalServices; @@ -110,7 +111,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { private final HandlerThread mHandlerThread; private final Installer mInstaller; private final RollbackPackageHealthObserver mPackageHealthObserver; - private final AppDataRollbackHelper mUserdataHelper; + private final AppDataRollbackHelper mAppDataRollbackHelper; RollbackManagerServiceImpl(Context context) { mContext = context; @@ -124,7 +125,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { mRollbackStore = new RollbackStore(new File(Environment.getDataDirectory(), "rollback")); mPackageHealthObserver = new RollbackPackageHealthObserver(mContext); - mUserdataHelper = new AppDataRollbackHelper(mInstaller); + mAppDataRollbackHelper = new AppDataRollbackHelper(mInstaller); // Kick off loading of the rollback data from strorage in a background // thread. @@ -221,9 +222,10 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { List<RollbackInfo> rollbacks = new ArrayList<>(); for (int i = 0; i < mAvailableRollbacks.size(); ++i) { RollbackData data = mAvailableRollbacks.get(i); - // TODO: Pass the correct value for isStaged instead of - // assuming always false. - rollbacks.add(new RollbackInfo(data.rollbackId, data.packages, false)); + if (data.isAvailable) { + rollbacks.add(new RollbackInfo(data.rollbackId, + data.packages, data.isStaged())); + } } return new ParceledListSlice<>(rollbacks); } @@ -323,20 +325,35 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { PackageInstaller.SessionParams.MODE_FULL_INSTALL); parentParams.setAllowDowngrade(true); parentParams.setMultiPackage(); + if (data.isStaged()) { + parentParams.setStaged(); + } + int parentSessionId = packageInstaller.createSession(parentParams); PackageInstaller.Session parentSession = packageInstaller.openSession(parentSessionId); for (PackageRollbackInfo info : data.packages) { PackageInstaller.SessionParams params = new PackageInstaller.SessionParams( PackageInstaller.SessionParams.MODE_FULL_INSTALL); - String installerPackageName = pm.getInstallerPackageName(info.getPackageName()); - if (installerPackageName == null) { - sendFailure(statusReceiver, RollbackManager.STATUS_FAILURE, - "Cannot find installer package"); - return; + // TODO: We can't get the installerPackageName for apex + // (b/123920130). Is it okay to ignore the installer package + // for apex? + if (!info.isApex()) { + String installerPackageName = pm.getInstallerPackageName(info.getPackageName()); + if (installerPackageName == null) { + sendFailure(statusReceiver, RollbackManager.STATUS_FAILURE, + "Cannot find installer package"); + return; + } + params.setInstallerPackageName(installerPackageName); } - params.setInstallerPackageName(installerPackageName); params.setAllowDowngrade(true); + if (data.isStaged()) { + params.setStaged(); + } + if (info.isApex()) { + params.setInstallAsApex(); + } int sessionId = packageInstaller.createSession(params); PackageInstaller.Session session = packageInstaller.openSession(sessionId); @@ -376,11 +393,9 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { return; } - // TODO: Set the correct values for isStaged and - // committedSessionId. addRecentlyExecutedRollback(new RollbackInfo( - data.rollbackId, data.packages, false, causePackages, - PackageInstaller.SessionInfo.INVALID_ID)); + data.rollbackId, data.packages, data.isStaged(), + causePackages, parentSessionId)); sendSuccess(statusReceiver); Intent broadcast = new Intent(Intent.ACTION_ROLLBACK_COMMITTED); @@ -435,7 +450,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { for (PackageRollbackInfo info : data.packages) { if (info.getPackageName().equals(packageName)) { iter.remove(); - mRollbackStore.deleteAvailableRollback(data); + deleteRollback(data); break; } } @@ -450,13 +465,13 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { final List<RollbackData> changed; synchronized (mLock) { ensureRollbackDataLoadedLocked(); - changed = mUserdataHelper.computePendingBackupsAndRestores(userId, + changed = mAppDataRollbackHelper.computePendingBackupsAndRestores(userId, pendingBackupPackages, pendingRestorePackages, mAvailableRollbacks, mRecentlyExecutedRollbacks); } - mUserdataHelper.commitPendingBackupAndRestoreForUser(userId, - pendingBackupPackages, pendingRestorePackages); + mAppDataRollbackHelper.commitPendingBackupAndRestoreForUser(userId, + pendingBackupPackages, pendingRestorePackages, changed); for (RollbackData rd : changed) { try { @@ -472,6 +487,47 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { }); } + void onBootCompleted() { + getHandler().post(() -> { + // Check to see if any staged sessions with rollback enabled have + // been applied. + List<RollbackData> staged = new ArrayList<>(); + synchronized (mLock) { + ensureRollbackDataLoadedLocked(); + for (RollbackData data : mAvailableRollbacks) { + if (data.stagedSessionId != -1) { + staged.add(data); + } + } + } + + for (RollbackData data : staged) { + PackageInstaller installer = mContext.getPackageManager().getPackageInstaller(); + PackageInstaller.SessionInfo session = installer.getSessionInfo( + data.stagedSessionId); + if (session != null) { + if (session.isSessionApplied()) { + synchronized (mLock) { + data.isAvailable = true; + } + try { + mRollbackStore.saveAvailableRollback(data); + } catch (IOException ioe) { + Log.e(TAG, "Unable to save rollback info for : " + + data.rollbackId, ioe); + } + } else if (session.isSessionFailed()) { + // TODO: Do we need to remove this from + // mAvailableRollbacks, or is it okay to leave as + // unavailable until the next reboot when it will go + // away on its own? + deleteRollback(data); + } + } + } + }); + } + /** * Load rollback data from storage if it has not already been loaded. * After calling this funciton, mAvailableRollbacks and @@ -537,7 +593,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { info.getVersionRolledBackFrom(), installedVersion)) { iter.remove(); - mRollbackStore.deleteAvailableRollback(data); + deleteRollback(data); break; } } @@ -644,9 +700,13 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { Iterator<RollbackData> iter = mAvailableRollbacks.iterator(); while (iter.hasNext()) { RollbackData data = iter.next(); + if (!data.isAvailable) { + continue; + } + if (!now.isBefore(data.timestamp.plusMillis(ROLLBACK_LIFETIME_DURATION_MILLIS))) { iter.remove(); - mRollbackStore.deleteAvailableRollback(data); + deleteRollback(data); } else if (oldest == null || oldest.isAfter(data.timestamp)) { oldest = data.timestamp; } @@ -707,6 +767,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { // ourselves. PackageInstaller.SessionInfo session = null; + int parentSessionId = -1; PackageInstaller installer = mContext.getPackageManager().getPackageInstaller(); for (PackageInstaller.SessionInfo info : installer.getAllSessions()) { if (info.isMultiPackage()) { @@ -714,12 +775,14 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { PackageInstaller.SessionInfo child = installer.getSessionInfo(childId); if (sessionMatchesForEnableRollback(child, installFlags, newPackageCodePath)) { // TODO: Check we only have one matching session? + parentSessionId = info.getSessionId(); session = child; break; } } } else if (sessionMatchesForEnableRollback(info, installFlags, newPackageCodePath)) { // TODO: Check we only have one matching session? + parentSessionId = info.getSessionId(); session = info; break; } @@ -730,6 +793,58 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { return false; } + // Check to see if this is the apk session for a staged session with + // rollback enabled. + // TODO: This check could be made more efficient. + RollbackData rd = null; + synchronized (mLock) { + ensureRollbackDataLoadedLocked(); + for (int i = 0; i < mAvailableRollbacks.size(); ++i) { + RollbackData data = mAvailableRollbacks.get(i); + if (data.apkSessionId == parentSessionId) { + rd = data; + break; + } + } + } + + if (rd != null) { + // This is the apk session for a staged session. We have already + // backed up the apks, we just need to do user data backup. + PackageParser.PackageLite newPackage = null; + try { + newPackage = PackageParser.parsePackageLite( + new File(session.resolvedBaseCodePath), 0); + } catch (PackageParser.PackageParserException e) { + Log.e(TAG, "Unable to parse new package", e); + return false; + } + String packageName = newPackage.packageName; + for (PackageRollbackInfo info : rd.packages) { + if (info.getPackageName().equals(packageName)) { + AppDataRollbackHelper.SnapshotAppDataResult rs = + mAppDataRollbackHelper.snapshotAppData(packageName, installedUsers); + info.getPendingBackups().addAll(rs.pendingBackups); + for (int i = 0; i < rs.ceSnapshotInodes.size(); i++) { + info.putCeSnapshotInode(rs.ceSnapshotInodes.keyAt(i), + rs.ceSnapshotInodes.valueAt(i)); + } + try { + mRollbackStore.saveAvailableRollback(rd); + } catch (IOException ioe) { + // TODO: Hopefully this is okay because we will try + // again to save the rollback when the staged session + // is applied. Just so long as the device doesn't + // reboot before then. + Log.e(TAG, "Unable to save rollback info for : " + rd.rollbackId, ioe); + } + return true; + } + } + Log.e(TAG, "Unable to find package in apk session"); + return false; + } + return enableRollbackForSession(session, installedUsers, true); } @@ -782,13 +897,18 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { VersionedPackage installedVersion = new VersionedPackage(packageName, pkgInfo.getLongVersionCode()); - IntArray pendingBackups = IntArray.wrap(new int[0]); + final AppDataRollbackHelper.SnapshotAppDataResult result; if (snapshotUserData && !isApex) { - pendingBackups = mUserdataHelper.snapshotAppData(packageName, installedUsers); + result = mAppDataRollbackHelper.snapshotAppData(packageName, installedUsers); + } else { + result = new AppDataRollbackHelper.SnapshotAppDataResult(IntArray.wrap(new int[0]), + new SparseLongArray()); } PackageRollbackInfo info = new PackageRollbackInfo(newVersion, installedVersion, - pendingBackups, new ArrayList<>(), isApex); + result.pendingBackups, new ArrayList<>(), isApex, IntArray.wrap(installedUsers), + result.ceSnapshotInodes); + RollbackData data; try { int childSessionId = session.getSessionId(); @@ -838,9 +958,8 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { getHandler().post(() -> { final RollbackData rollbackData = getRollbackForPackage(packageName); for (int userId : userIds) { - final boolean changedRollbackData = mUserdataHelper.restoreAppData(packageName, - rollbackData, userId, appId, ceDataInode, seInfo); - + final boolean changedRollbackData = mAppDataRollbackHelper.restoreAppData( + packageName, rollbackData, userId, appId, ceDataInode, seInfo); // We've updated metadata about this rollback, so save it to flash. if (changedRollbackData) { try { @@ -910,6 +1029,32 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { } } + @Override + public void notifyStagedApkSession(int originalSessionId, int apkSessionId) { + getHandler().post(() -> { + RollbackData rd = null; + synchronized (mLock) { + ensureRollbackDataLoadedLocked(); + for (int i = 0; i < mAvailableRollbacks.size(); ++i) { + RollbackData data = mAvailableRollbacks.get(i); + if (data.stagedSessionId == originalSessionId) { + data.apkSessionId = apkSessionId; + rd = data; + break; + } + } + } + + if (rd != null) { + try { + mRollbackStore.saveAvailableRollback(rd); + } catch (IOException ioe) { + Log.e(TAG, "Unable to save rollback info for : " + rd.rollbackId, ioe); + } + } + }); + } + /** * Gets the version of the package currently installed. * Returns null if the package is not currently installed. @@ -918,7 +1063,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { PackageManager pm = mContext.getPackageManager(); PackageInfo pkgInfo = null; try { - pkgInfo = pm.getPackageInfo(packageName, 0); + pkgInfo = pm.getPackageInfo(packageName, PackageManager.MATCH_APEX); } catch (PackageManager.NameNotFoundException e) { return null; } @@ -1006,12 +1151,12 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { scheduleExpiration(ROLLBACK_LIFETIME_DURATION_MILLIS); } catch (IOException e) { Log.e(TAG, "Unable to enable rollback", e); - mRollbackStore.deleteAvailableRollback(data); + deleteRollback(data); } } else { // The install session was aborted, clean up the pending // install. - mRollbackStore.deleteAvailableRollback(data); + deleteRollback(data); } } } @@ -1053,7 +1198,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { ensureRollbackDataLoadedLocked(); for (int i = 0; i < mAvailableRollbacks.size(); ++i) { RollbackData data = mAvailableRollbacks.get(i); - if (getPackageRollbackInfo(data, packageName) != null) { + if (data.isAvailable && getPackageRollbackInfo(data, packageName) != null) { return data; } } @@ -1072,7 +1217,7 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { ensureRollbackDataLoadedLocked(); for (int i = 0; i < mAvailableRollbacks.size(); ++i) { RollbackData data = mAvailableRollbacks.get(i); - if (data.rollbackId == rollbackId) { + if (data.isAvailable && data.rollbackId == rollbackId) { return data; } } @@ -1110,4 +1255,17 @@ class RollbackManagerServiceImpl extends IRollbackManager.Stub { throw new IOException("Failed to allocate rollback ID"); } + + private void deleteRollback(RollbackData rollbackData) { + for (PackageRollbackInfo info : rollbackData.packages) { + IntArray installedUsers = info.getInstalledUsers(); + SparseLongArray ceSnapshotInodes = info.getCeSnapshotInodes(); + for (int i = 0; i < installedUsers.size(); i++) { + int userId = installedUsers.get(i); + mAppDataRollbackHelper.destroyAppDataSnapshot(info.getPackageName(), userId, + ceSnapshotInodes.get(userId, 0)); + } + } + mRollbackStore.deleteAvailableRollback(rollbackData); + } } diff --git a/services/core/java/com/android/server/rollback/RollbackStore.java b/services/core/java/com/android/server/rollback/RollbackStore.java index ff516902a5b3..be904eacebff 100644 --- a/services/core/java/com/android/server/rollback/RollbackStore.java +++ b/services/core/java/com/android/server/rollback/RollbackStore.java @@ -23,6 +23,7 @@ import android.content.rollback.PackageRollbackInfo.RestoreInfo; import android.content.rollback.RollbackInfo; import android.util.IntArray; import android.util.Log; +import android.util.SparseLongArray; import libcore.io.IoUtils; @@ -160,6 +161,28 @@ class RollbackStore { return restoreInfos; } + private static @NonNull JSONArray ceSnapshotInodesToJson( + @NonNull SparseLongArray ceSnapshotInodes) throws JSONException { + JSONArray array = new JSONArray(); + for (int i = 0; i < ceSnapshotInodes.size(); i++) { + JSONObject entryJson = new JSONObject(); + entryJson.put("userId", ceSnapshotInodes.keyAt(i)); + entryJson.put("ceSnapshotInode", ceSnapshotInodes.valueAt(i)); + array.put(entryJson); + } + return array; + } + + private static @NonNull SparseLongArray ceSnapshotInodesFromJson(JSONArray json) + throws JSONException { + SparseLongArray ceSnapshotInodes = new SparseLongArray(json.length()); + for (int i = 0; i < json.length(); i++) { + JSONObject entry = json.getJSONObject(i); + ceSnapshotInodes.append(entry.getInt("userId"), entry.getLong("ceSnapshotInode")); + } + return ceSnapshotInodes; + } + /** * Reads the list of recently executed rollbacks from persistent storage. */ @@ -201,13 +224,13 @@ class RollbackStore { */ RollbackData createAvailableRollback(int rollbackId) throws IOException { File backupDir = new File(mAvailableRollbacksDir, Integer.toString(rollbackId)); - return new RollbackData(rollbackId, backupDir, -1); + return new RollbackData(rollbackId, backupDir, -1, true); } RollbackData createPendingStagedRollback(int rollbackId, int stagedSessionId) throws IOException { File backupDir = new File(mAvailableRollbacksDir, Integer.toString(rollbackId)); - return new RollbackData(rollbackId, backupDir, stagedSessionId); + return new RollbackData(rollbackId, backupDir, stagedSessionId, false); } /** @@ -247,6 +270,8 @@ class RollbackStore { dataJson.put("packages", toJson(data.packages)); dataJson.put("timestamp", data.timestamp.toString()); dataJson.put("stagedSessionId", data.stagedSessionId); + dataJson.put("isAvailable", data.isAvailable); + dataJson.put("apkSessionId", data.apkSessionId); PrintWriter pw = new PrintWriter(new File(data.backupDir, "rollback.json")); pw.println(dataJson.toString()); @@ -261,8 +286,6 @@ class RollbackStore { * rollback. */ void deleteAvailableRollback(RollbackData data) { - // TODO(narayan): Make sure we delete the userdata snapshot along with the backup of the - // actual app. removeFile(data.backupDir); } @@ -307,10 +330,12 @@ class RollbackStore { int rollbackId = dataJson.getInt("rollbackId"); int stagedSessionId = dataJson.getInt("stagedSessionId"); + boolean isAvailable = dataJson.getBoolean("isAvailable"); RollbackData data = new RollbackData(rollbackId, backupDir, - stagedSessionId); + stagedSessionId, isAvailable); data.packages.addAll(packageRollbackInfosFromJson(dataJson.getJSONArray("packages"))); data.timestamp = Instant.parse(dataJson.getString("timestamp")); + data.apkSessionId = dataJson.getInt("apkSessionId"); return data; } catch (JSONException | DateTimeParseException e) { throw new IOException(e); @@ -337,11 +362,15 @@ class RollbackStore { IntArray pendingBackups = info.getPendingBackups(); List<RestoreInfo> pendingRestores = info.getPendingRestores(); + IntArray installedUsers = info.getInstalledUsers(); json.put("pendingBackups", convertToJsonArray(pendingBackups)); json.put("pendingRestores", convertToJsonArray(pendingRestores)); json.put("isApex", info.isApex()); + json.put("installedUsers", convertToJsonArray(installedUsers)); + json.put("ceSnapshotInodes", ceSnapshotInodesToJson(info.getCeSnapshotInodes())); + return json; } @@ -358,8 +387,12 @@ class RollbackStore { final boolean isApex = json.getBoolean("isApex"); + final IntArray installedUsers = convertToIntArray(json.getJSONArray("installedUsers")); + final SparseLongArray ceSnapshotInodes = ceSnapshotInodesFromJson( + json.getJSONArray("ceSnapshotInodes")); + return new PackageRollbackInfo(versionRolledBackFrom, versionRolledBackTo, - pendingBackups, pendingRestores, isApex); + pendingBackups, pendingRestores, isApex, installedUsers, ceSnapshotInodes); } private JSONArray versionedPackagesToJson(List<VersionedPackage> packages) diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java index 1163d3916cb1..057b53e6232f 100644 --- a/services/core/java/com/android/server/tv/TvInputManagerService.java +++ b/services/core/java/com/android/server/tv/TvInputManagerService.java @@ -128,6 +128,8 @@ public final class TvInputManagerService extends SystemService { private final WatchLogHandler mWatchLogHandler; + private IBinder.DeathRecipient mDeathRecipient; + public TvInputManagerService(Context context) { super(context); @@ -674,6 +676,7 @@ public final class TvInputManagerService extends SystemService { if (sessionToken == userState.mainSessionToken) { setMainLocked(sessionToken, false, callingUid, userId); } + sessionState.session.asBinder().unlinkToDeath(sessionState, 0); sessionState.session.release(); } } catch (RemoteException | SessionNotFoundException e) { @@ -709,6 +712,7 @@ public final class TvInputManagerService extends SystemService { clientState.sessionTokens.remove(sessionToken); if (clientState.isEmpty()) { userState.clientStateMap.remove(sessionState.client.asBinder()); + sessionState.client.asBinder().unlinkToDeath(clientState, 0); } } @@ -1002,17 +1006,19 @@ public final class TvInputManagerService extends SystemService { synchronized (mLock) { final UserState userState = getOrCreateUserStateLocked(resolvedUserId); userState.callbackSet.add(callback); - try { - callback.asBinder().linkToDeath(new IBinder.DeathRecipient() { - @Override - public void binderDied() { - synchronized (mLock) { - if (userState.callbackSet != null) { - userState.callbackSet.remove(callback); - } + mDeathRecipient = new IBinder.DeathRecipient() { + @Override + public void binderDied() { + synchronized (mLock) { + if (userState.callbackSet != null) { + userState.callbackSet.remove(callback); } } - }, 0); + } + }; + + try { + callback.asBinder().linkToDeath(mDeathRecipient, 0); } catch (RemoteException e) { Slog.e(TAG, "client process has already died", e); } @@ -1031,6 +1037,7 @@ public final class TvInputManagerService extends SystemService { synchronized (mLock) { UserState userState = getOrCreateUserStateLocked(resolvedUserId); userState.callbackSet.remove(callback); + callback.asBinder().unlinkToDeath(mDeathRecipient, 0); } } finally { Binder.restoreCallingIdentity(identity); diff --git a/services/core/java/com/android/server/uri/UriGrantsManagerService.java b/services/core/java/com/android/server/uri/UriGrantsManagerService.java index 744efab7d78d..332df956d0fb 100644 --- a/services/core/java/com/android/server/uri/UriGrantsManagerService.java +++ b/services/core/java/com/android/server/uri/UriGrantsManagerService.java @@ -1067,8 +1067,9 @@ public class UriGrantsManagerService extends IUriGrantsManager.Stub { // Figure out the value returned when access is allowed final int allowedResult; - if ((modeFlags & Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) != 0) { - // If we're extending a persistable grant, then we need to return + if ((modeFlags & Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION) != 0 + || pi.forceUriPermissions) { + // If we're extending a persistable grant or need to force, then we need to return // "targetUid" so that we always create a grant data structure to // support take/release APIs allowedResult = targetUid; diff --git a/services/robotests/backup/src/com/android/server/backup/BackupManagerServiceTest.java b/services/robotests/backup/src/com/android/server/backup/BackupManagerServiceTest.java index b8db3f39eb62..37909c3022d4 100644 --- a/services/robotests/backup/src/com/android/server/backup/BackupManagerServiceTest.java +++ b/services/robotests/backup/src/com/android/server/backup/BackupManagerServiceTest.java @@ -62,6 +62,7 @@ import org.robolectric.shadows.ShadowContextWrapper; import java.io.File; import java.io.FileDescriptor; +import java.io.IOException; import java.io.PrintWriter; /** Tests for the user-aware backup/restore system service {@link BackupManagerService}. */ @@ -1516,8 +1517,7 @@ public class BackupManagerServiceTest { public void testDump_onRegisteredUser_callsMethodForUser() throws Exception { BackupManagerService backupManagerService = createServiceAndRegisterUser(UserHandle.USER_SYSTEM, mUserOneService); - File testFile = new File(mContext.getFilesDir(), "test"); - testFile.createNewFile(); + File testFile = createTestFile(); FileDescriptor fileDescriptor = new FileDescriptor(); PrintWriter printWriter = new PrintWriter(testFile); String[] args = {"1", "2"}; @@ -1531,8 +1531,7 @@ public class BackupManagerServiceTest { @Test public void testDump_onUnknownUser_doesNotPropagateCall() throws Exception { BackupManagerService backupManagerService = createService(); - File testFile = new File(mContext.getFilesDir(), "test"); - testFile.createNewFile(); + File testFile = createTestFile(); FileDescriptor fileDescriptor = new FileDescriptor(); PrintWriter printWriter = new PrintWriter(testFile); String[] args = {"1", "2"}; @@ -1542,6 +1541,12 @@ public class BackupManagerServiceTest { verify(mUserOneService, never()).dump(fileDescriptor, printWriter, args); } + private File createTestFile() throws IOException { + File testFile = new File(mContext.getFilesDir(), "test"); + testFile.createNewFile(); + return testFile; + } + private BackupManagerService createService() { mShadowContext.grantPermissions(BACKUP); return new BackupManagerService( diff --git a/services/robotests/backup/src/com/android/server/backup/UserBackupManagerServiceTest.java b/services/robotests/backup/src/com/android/server/backup/UserBackupManagerServiceTest.java index 427aed7364d2..c8d1eb413ecf 100644 --- a/services/robotests/backup/src/com/android/server/backup/UserBackupManagerServiceTest.java +++ b/services/robotests/backup/src/com/android/server/backup/UserBackupManagerServiceTest.java @@ -76,6 +76,7 @@ import org.robolectric.shadows.ShadowLooper; import org.robolectric.shadows.ShadowPackageManager; import java.io.File; +import java.io.IOException; import java.util.List; /** @@ -1158,6 +1159,58 @@ public class UserBackupManagerServiceTest { } /** + * Test that {@link UserBackupManagerService#getAncestralSerialNumber()} returns {@code -1} + * when value not set. + */ + @Test + public void testGetAncestralSerialNumber_notSet_returnsMinusOne() { + UserBackupManagerService service = createUserBackupManagerServiceAndRunTasks(); + + assertThat(service.getAncestralSerialNumber()).isEqualTo(-1L); + } + + /** + * Test that {@link UserBackupManagerService#getAncestralSerialNumber()} returns correct value + * when value set. + */ + @Test + public void testGetAncestralSerialNumber_set_returnsCorrectValue() throws Exception { + mShadowContext.grantPermissions(android.Manifest.permission.BACKUP); + UserBackupManagerService service = createUserBackupManagerServiceAndRunTasks(); + service.setAncestralSerialNumberFile(createTestFile()); + + long testSerialNumber = 20L; + service.setAncestralSerialNumber(testSerialNumber); + + assertThat(service.getAncestralSerialNumber()).isEqualTo(testSerialNumber); + } + + /** + * Test that {@link UserBackupManagerService#getAncestralSerialNumber()} returns correct value + * when value set. + */ + @Test + public void testGetAncestralSerialNumber_setTwice_returnsCorrectValue() throws Exception { + mShadowContext.grantPermissions(android.Manifest.permission.BACKUP); + UserBackupManagerService service = createUserBackupManagerServiceAndRunTasks(); + service.setAncestralSerialNumberFile(createTestFile()); + + long testSerialNumber = 20L; + long testSerialNumber2 = 21L; + service.setAncestralSerialNumber(testSerialNumber); + service.setAncestralSerialNumber(testSerialNumber2); + + assertThat(service.getAncestralSerialNumber()).isEqualTo(testSerialNumber2); + } + + private File createTestFile() throws IOException { + File testFile = new File(mContext.getFilesDir(), "test"); + testFile.createNewFile(); + return testFile; + } + + + /** * We can't mock the void method {@link #schedule(Context, long, BackupManagerConstants)} so we * extend {@link ShadowKeyValueBackupJob} and throw an exception at the end of the method. */ diff --git a/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java b/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java index 9dcacf3021b8..5c0a1c83b1b0 100644 --- a/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java +++ b/services/tests/servicestests/src/com/android/server/power/batterysaver/BatterySaverPolicyTest.java @@ -40,7 +40,7 @@ import org.mockito.MockitoAnnotations; * Tests for {@link com.android.server.power.batterysaver.BatterySaverPolicy} */ public class BatterySaverPolicyTest extends AndroidTestCase { - private static final int MAX_SERVICE_TYPE = 15; + private static final int MAX_SERVICE_TYPE = 16; private static final float BRIGHTNESS_FACTOR = 0.7f; private static final float DEFAULT_BRIGHTNESS_FACTOR = 0.5f; private static final float PRECISION = 0.001f; @@ -146,6 +146,11 @@ public class BatterySaverPolicyTest extends AndroidTestCase { } @SmallTest + public void testGetBatterySaverPolicy_PolicyNightMode_DefaultValueCorrect() { + testServiceDefaultValue_On(ServiceType.NIGHT_MODE); + } + + @SmallTest public void testGetBatterySaverPolicy_PolicyDataSaver_DefaultValueCorrect() { mBatterySaverPolicy.updateConstantsLocked("", ""); mBatterySaverPolicy.setPolicyLevel(POLICY_LEVEL_FULL); diff --git a/services/tests/servicestests/src/com/android/server/rollback/AppDataRollbackHelperTest.java b/services/tests/servicestests/src/com/android/server/rollback/AppDataRollbackHelperTest.java index f1e6bc25dabf..50dbaf570e9e 100644 --- a/services/tests/servicestests/src/com/android/server/rollback/AppDataRollbackHelperTest.java +++ b/services/tests/servicestests/src/com/android/server/rollback/AppDataRollbackHelperTest.java @@ -18,15 +18,19 @@ package com.android.server.rollback; import static org.junit.Assert.*; import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verifyZeroInteractions; +import static org.mockito.Mockito.when; import android.content.pm.VersionedPackage; import android.content.rollback.PackageRollbackInfo; import android.content.rollback.PackageRollbackInfo.RestoreInfo; import android.util.IntArray; +import android.util.SparseLongArray; import com.android.server.pm.Installer; @@ -38,6 +42,7 @@ import org.mockito.Mockito; import java.io.File; import java.util.ArrayList; +import java.util.HashMap; @RunWith(JUnit4.class) public class AppDataRollbackHelperTest { @@ -50,10 +55,14 @@ public class AppDataRollbackHelperTest { // All users are unlocked so we should snapshot data for them. doReturn(true).when(helper).isUserCredentialLocked(eq(10)); doReturn(true).when(helper).isUserCredentialLocked(eq(11)); - IntArray pending = helper.snapshotAppData("com.foo.bar", new int[]{10, 11}); - assertEquals(2, pending.size()); - assertEquals(10, pending.get(0)); - assertEquals(11, pending.get(1)); + AppDataRollbackHelper.SnapshotAppDataResult result = helper.snapshotAppData("com.foo.bar", + new int[]{10, 11}); + + assertEquals(2, result.pendingBackups.size()); + assertEquals(10, result.pendingBackups.get(0)); + assertEquals(11, result.pendingBackups.get(1)); + + assertEquals(0, result.ceSnapshotInodes.size()); InOrder inOrder = Mockito.inOrder(installer); inOrder.verify(installer).snapshotAppData( @@ -65,10 +74,14 @@ public class AppDataRollbackHelperTest { // One of the users is unlocked but the other isn't doReturn(false).when(helper).isUserCredentialLocked(eq(10)); doReturn(true).when(helper).isUserCredentialLocked(eq(11)); + when(installer.snapshotAppData(anyString(), anyInt(), anyInt())).thenReturn(239L); - pending = helper.snapshotAppData("com.foo.bar", new int[]{10, 11}); - assertEquals(1, pending.size()); - assertEquals(11, pending.get(0)); + result = helper.snapshotAppData("com.foo.bar", new int[]{10, 11}); + assertEquals(1, result.pendingBackups.size()); + assertEquals(11, result.pendingBackups.get(0)); + + assertEquals(1, result.ceSnapshotInodes.size()); + assertEquals(239L, result.ceSnapshotInodes.get(10)); inOrder = Mockito.inOrder(installer); inOrder.verify(installer).snapshotAppData( @@ -80,10 +93,10 @@ public class AppDataRollbackHelperTest { } private static RollbackData createInProgressRollbackData(String packageName) { - RollbackData data = new RollbackData(1, new File("/does/not/exist"), -1); + RollbackData data = new RollbackData(1, new File("/does/not/exist"), -1, true); data.packages.add(new PackageRollbackInfo( new VersionedPackage(packageName, 1), new VersionedPackage(packageName, 1), - new IntArray(), new ArrayList<>(), false)); + new IntArray(), new ArrayList<>(), false, new IntArray(), new SparseLongArray())); data.inProgress = true; return data; @@ -173,4 +186,53 @@ public class AppDataRollbackHelperTest { ArrayList<RestoreInfo> pendingRestores = rd.packages.get(0).getPendingRestores(); assertEquals(0, pendingRestores.size()); } + + @Test + public void destroyAppData() throws Exception { + Installer installer = mock(Installer.class); + AppDataRollbackHelper helper = new AppDataRollbackHelper(installer); + SparseLongArray ceSnapshotInodes = new SparseLongArray(); + ceSnapshotInodes.put(11, 239L); + + helper.destroyAppDataSnapshot("com.foo.bar", 10, 0L); + helper.destroyAppDataSnapshot("com.foo.bar", 11, 239L); + + InOrder inOrder = Mockito.inOrder(installer); + inOrder.verify(installer).destroyAppDataSnapshot( + eq("com.foo.bar"), eq(10), eq(0L), + eq(Installer.FLAG_STORAGE_DE)); + inOrder.verify(installer).destroyAppDataSnapshot( + eq("com.foo.bar"), eq(11), eq(239L), + eq(Installer.FLAG_STORAGE_DE | Installer.FLAG_STORAGE_CE)); + inOrder.verifyNoMoreInteractions(); + } + + @Test + public void commitPendingBackupAndRestoreForUser_updatesRollbackData() throws Exception { + Installer installer = mock(Installer.class); + AppDataRollbackHelper helper = new AppDataRollbackHelper(installer); + + ArrayList<RollbackData> changedRollbackData = new ArrayList<>(); + changedRollbackData.add(createInProgressRollbackData("com.foo.bar")); + + when(installer.snapshotAppData(anyString(), anyInt(), anyInt())).thenReturn(239L); + + ArrayList<String> pendingBackups = new ArrayList<>(); + pendingBackups.add("com.foo.bar"); + + helper.commitPendingBackupAndRestoreForUser(11, pendingBackups, + new HashMap<>() /* pendingRestores */, changedRollbackData); + + assertEquals(1, changedRollbackData.size()); + assertEquals(1, changedRollbackData.get(0).packages.size()); + PackageRollbackInfo info = changedRollbackData.get(0).packages.get(0); + + assertEquals(1, info.getCeSnapshotInodes().size()); + assertEquals(239L, info.getCeSnapshotInodes().get(11)); + + InOrder inOrder = Mockito.inOrder(installer); + inOrder.verify(installer).snapshotAppData("com.foo.bar", 11 /* userId */, + Installer.FLAG_STORAGE_CE); + inOrder.verifyNoMoreInteractions(); + } } diff --git a/services/tests/uiservicestests/src/com/android/server/notification/BubbleExtractorTest.java b/services/tests/uiservicestests/src/com/android/server/notification/BubbleExtractorTest.java new file mode 100644 index 000000000000..3e01fb58c754 --- /dev/null +++ b/services/tests/uiservicestests/src/com/android/server/notification/BubbleExtractorTest.java @@ -0,0 +1,154 @@ +/* + * Copyright (C) 2019 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.notification; + +import static android.app.NotificationManager.IMPORTANCE_HIGH; +import static android.app.NotificationManager.IMPORTANCE_UNSPECIFIED; +import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_BADGE; +import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_LIGHTS; + +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertTrue; + +import static org.mockito.Mockito.when; + +import android.app.ActivityManager; +import android.app.Notification; +import android.app.Notification.Builder; +import android.app.NotificationChannel; +import android.os.UserHandle; +import android.service.notification.StatusBarNotification; +import android.support.test.runner.AndroidJUnit4; +import android.test.suitebuilder.annotation.SmallTest; + +import com.android.server.UiServiceTestCase; + +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) +public class BubbleExtractorTest extends UiServiceTestCase { + + @Mock RankingConfig mConfig; + + private String mPkg = "com.android.server.notification"; + private int mId = 1001; + private String mTag = null; + private int mUid = 1000; + private int mPid = 2000; + private UserHandle mUser = UserHandle.of(ActivityManager.getCurrentUser()); + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + } + + private NotificationRecord getNotificationRecord(boolean allow, int importanceHigh) { + NotificationChannel channel = new NotificationChannel("a", "a", importanceHigh); + channel.setAllowBubbles(allow); + when(mConfig.getNotificationChannel(mPkg, mUid, "a", false)).thenReturn(channel); + + final Builder builder = new Builder(getContext()) + .setContentTitle("foo") + .setSmallIcon(android.R.drawable.sym_def_app_icon) + .setPriority(Notification.PRIORITY_HIGH) + .setDefaults(Notification.DEFAULT_SOUND); + + Notification n = builder.build(); + StatusBarNotification sbn = new StatusBarNotification(mPkg, mPkg, mId, mTag, mUid, + mPid, n, mUser, null, System.currentTimeMillis()); + NotificationRecord r = new NotificationRecord(getContext(), sbn, channel); + return r; + } + + // + // Tests + // + + @Test + public void testAppYesChannelNo() { + BubbleExtractor extractor = new BubbleExtractor(); + extractor.setConfig(mConfig); + + when(mConfig.bubblesEnabled(mUser)).thenReturn(true); + when(mConfig.areBubblesAllowed(mPkg, mUid)).thenReturn(true); + NotificationRecord r = getNotificationRecord(false, IMPORTANCE_UNSPECIFIED); + + extractor.process(r); + + assertFalse(r.canBubble()); + } + + @Test + public void testAppNoChannelYes() throws Exception { + BubbleExtractor extractor = new BubbleExtractor(); + extractor.setConfig(mConfig); + + when(mConfig.bubblesEnabled(mUser)).thenReturn(true); + when(mConfig.areBubblesAllowed(mPkg, mUid)).thenReturn(false); + NotificationRecord r = getNotificationRecord(true, IMPORTANCE_HIGH); + + extractor.process(r); + + assertFalse(r.canBubble()); + } + + @Test + public void testAppYesChannelYes() { + BubbleExtractor extractor = new BubbleExtractor(); + extractor.setConfig(mConfig); + + when(mConfig.bubblesEnabled(mUser)).thenReturn(true); + when(mConfig.areBubblesAllowed(mPkg, mUid)).thenReturn(true); + NotificationRecord r = getNotificationRecord(true, IMPORTANCE_UNSPECIFIED); + + extractor.process(r); + + assertTrue(r.canBubble()); + } + + @Test + public void testAppNoChannelNo() { + BubbleExtractor extractor = new BubbleExtractor(); + extractor.setConfig(mConfig); + + when(mConfig.bubblesEnabled(mUser)).thenReturn(true); + when(mConfig.areBubblesAllowed(mPkg, mUid)).thenReturn(false); + NotificationRecord r = getNotificationRecord(false, IMPORTANCE_UNSPECIFIED); + + extractor.process(r); + + assertFalse(r.canBubble()); + } + + @Test + public void testAppYesChannelYesUserNo() { + BubbleExtractor extractor = new BubbleExtractor(); + extractor.setConfig(mConfig); + + when(mConfig.bubblesEnabled(mUser)).thenReturn(false); + when(mConfig.areBubblesAllowed(mPkg, mUid)).thenReturn(true); + NotificationRecord r = getNotificationRecord(true, IMPORTANCE_HIGH); + + extractor.process(r); + + assertFalse(r.canBubble()); + } +} diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java index 20f72bfe9938..7a530dfe306f 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ManagedServicesTest.java @@ -74,6 +74,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; import java.util.List; import java.util.Set; @@ -305,6 +306,82 @@ public class ManagedServicesTest extends UiServiceTestCase { } } + /** Test that restore ignores the user id attribute and applies the data to the target user. */ + @Test + public void testReadXml_onlyRestoresForTargetUser() throws Exception { + for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) { + ManagedServices service = + new TestManagedServices( + getContext(), mLock, mUserProfiles, mIpm, approvalLevel); + String testPackage = "user.test.package"; + String testComponent = "user.test.component/C1"; + String resolvedValue = + (approvalLevel == APPROVAL_BY_COMPONENT) ? testComponent : testPackage; + XmlPullParser parser = + getParserWithEntries(service, getXmlEntry(resolvedValue, 0, true)); + + service.readXml(parser, null, true, 10); + + assertFalse(service.isPackageOrComponentAllowed(resolvedValue, 0)); + assertTrue(service.isPackageOrComponentAllowed(resolvedValue, 10)); + } + } + + /** Test that backup only writes packages/components that belong to the target user. */ + @Test + public void testWriteXml_onlyBackupsForTargetUser() throws Exception { + for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) { + ManagedServices service = + new TestManagedServices( + getContext(), mLock, mUserProfiles, mIpm, approvalLevel); + // Set up components. + String testPackage0 = "user0.test.package"; + String testComponent0 = "user0.test.component/C1"; + String testPackage10 = "user10.test.package"; + String testComponent10 = "user10.test.component/C1"; + String resolvedValue0 = + (approvalLevel == APPROVAL_BY_COMPONENT) ? testComponent0 : testPackage0; + String resolvedValue10 = + (approvalLevel == APPROVAL_BY_COMPONENT) ? testComponent10 : testPackage10; + addExpectedServices( + service, Collections.singletonList(service.getPackageName(resolvedValue0)), 0); + addExpectedServices( + service, + Collections.singletonList(service.getPackageName(resolvedValue10)), + 10); + XmlPullParser parser = + getParserWithEntries( + service, + getXmlEntry(resolvedValue0, 0, true), + getXmlEntry(resolvedValue10, 10, true)); + service.readXml(parser, null, false, UserHandle.USER_ALL); + + // Write backup. + XmlSerializer serializer = new FastXmlSerializer(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + serializer.setOutput(new BufferedOutputStream(baos), "utf-8"); + serializer.startDocument(null, true); + service.writeXml(serializer, true, 10); + serializer.endDocument(); + serializer.flush(); + + // Reset values. + service.setPackageOrComponentEnabled(resolvedValue0, 0, true, false); + service.setPackageOrComponentEnabled(resolvedValue10, 10, true, false); + + // Parse backup via restore. + XmlPullParser restoreParser = Xml.newPullParser(); + restoreParser.setInput( + new BufferedInputStream(new ByteArrayInputStream(baos.toByteArray())), null); + restoreParser.nextTag(); + service.readXml(restoreParser, null, true, 10); + + assertFalse(service.isPackageOrComponentAllowed(resolvedValue0, 0)); + assertFalse(service.isPackageOrComponentAllowed(resolvedValue0, 10)); + assertTrue(service.isPackageOrComponentAllowed(resolvedValue10, 10)); + } + } + @Test public void testWriteXml_trimsMissingServices() throws Exception { for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) { @@ -348,7 +425,9 @@ public class ManagedServicesTest extends UiServiceTestCase { ByteArrayOutputStream baos = new ByteArrayOutputStream(); serializer.setOutput(new BufferedOutputStream(baos), "utf-8"); serializer.startDocument(null, true); - service.writeXml(serializer, true); + for (UserInfo userInfo : mUm.getUsers()) { + service.writeXml(serializer, true, userInfo.id); + } serializer.endDocument(); serializer.flush(); @@ -356,7 +435,9 @@ public class ManagedServicesTest extends UiServiceTestCase { parser.setInput(new BufferedInputStream( new ByteArrayInputStream(baos.toByteArray())), null); parser.nextTag(); - service.readXml(parser, null); + for (UserInfo userInfo : mUm.getUsers()) { + service.readXml(parser, null, true, userInfo.id); + } verifyExpectedApprovedEntries(service); assertFalse(service.isPackageOrComponentAllowed("this.is.a.package.name", 0)); @@ -376,7 +457,7 @@ public class ManagedServicesTest extends UiServiceTestCase { ByteArrayOutputStream baos = new ByteArrayOutputStream(); serializer.setOutput(new BufferedOutputStream(baos), "utf-8"); serializer.startDocument(null, true); - service.writeXml(serializer, false); + service.writeXml(serializer, false, UserHandle.USER_ALL); serializer.endDocument(); serializer.flush(); @@ -921,7 +1002,23 @@ public class ManagedServicesTest extends UiServiceTestCase { parser.setInput(new BufferedInputStream( new ByteArrayInputStream(xml.toString().getBytes())), null); parser.nextTag(); - service.readXml(parser, null); + service.readXml(parser, null, false, UserHandle.USER_ALL); + } + + private XmlPullParser getParserWithEntries(ManagedServices service, String... xmlEntries) + throws Exception { + final StringBuffer xml = new StringBuffer(); + xml.append("<" + service.getConfig().xmlTag + ">\n"); + for (String xmlEntry : xmlEntries) { + xml.append(xmlEntry); + } + xml.append("</" + service.getConfig().xmlTag + ">"); + + XmlPullParser parser = Xml.newPullParser(); + parser.setInput(new BufferedInputStream( + new ByteArrayInputStream(xml.toString().getBytes())), null); + parser.nextTag(); + return parser; } private void addExpectedServices(final ManagedServices service, final List<String> packages, diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationAssistantsTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationAssistantsTest.java index 0b488c09b45a..19b567f6951b 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationAssistantsTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationAssistantsTest.java @@ -33,6 +33,7 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.pm.ServiceInfo; import android.content.pm.UserInfo; +import android.os.UserHandle; import android.os.UserManager; import android.util.IntArray; import android.util.Xml; @@ -129,7 +130,7 @@ public class NotificationAssistantsTest extends UiServiceTestCase { parser.setInput(new BufferedInputStream( new ByteArrayInputStream(xml.toString().getBytes())), null); parser.nextTag(); - mAssistants.readXml(parser, null); + mAssistants.readXml(parser, null, false, UserHandle.USER_ALL); verify(mNm, never()).readDefaultAssistant(anyInt()); verify(mAssistants, times(1)).addApprovedList( diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java index daca9cb28051..2162f282e134 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationListenerServiceTest.java @@ -54,7 +54,7 @@ import java.util.List; @RunWith(AndroidJUnit4.class) public class NotificationListenerServiceTest extends UiServiceTestCase { - private String[] mKeys = new String[] { "key", "key1", "key2", "key3"}; + private String[] mKeys = new String[] { "key", "key1", "key2", "key3", "key4"}; @Test public void testGetActiveNotifications_notNull() throws Exception { @@ -70,7 +70,7 @@ public class NotificationListenerServiceTest extends UiServiceTestCase { } @Test - public void testRanking() throws Exception { + public void testRanking() { TestListenerService service = new TestListenerService(); service.applyUpdateLocked(generateUpdate()); for (int i = 0; i < mKeys.length; i++) { @@ -92,6 +92,7 @@ public class NotificationListenerServiceTest extends UiServiceTestCase { assertEquals(lastAudiblyAlerted(i), ranking.getLastAudiblyAlertedMillis()); assertActionsEqual(getSmartActions(key, i), ranking.getSmartActions()); assertEquals(getSmartReplies(key, i), ranking.getSmartReplies()); + assertEquals(canBubble(i), ranking.canBubble()); } } @@ -112,6 +113,7 @@ public class NotificationListenerServiceTest extends UiServiceTestCase { Bundle smartReplies = new Bundle(); Bundle lastAudiblyAlerted = new Bundle(); Bundle noisy = new Bundle(); + boolean[] canBubble = new boolean[mKeys.length]; for (int i = 0; i < mKeys.length; i++) { String key = mKeys[i]; @@ -133,12 +135,13 @@ public class NotificationListenerServiceTest extends UiServiceTestCase { smartReplies.putCharSequenceArrayList(key, getSmartReplies(key, i)); lastAudiblyAlerted.putLong(key, lastAudiblyAlerted(i)); noisy.putBoolean(key, getNoisy(i)); + canBubble[i] = canBubble(i); } NotificationRankingUpdate update = new NotificationRankingUpdate(mKeys, interceptedKeys.toArray(new String[0]), visibilityOverrides, suppressedVisualEffects, importance, explanation, overrideGroupKeys, channels, overridePeople, snoozeCriteria, showBadge, userSentiment, mHidden, - smartActions, smartReplies, lastAudiblyAlerted, noisy); + smartActions, smartReplies, lastAudiblyAlerted, noisy, canBubble); return update; } @@ -235,6 +238,10 @@ public class NotificationListenerServiceTest extends UiServiceTestCase { return choices; } + private boolean canBubble(int index) { + return index % 4 == 0; + } + private void assertActionsEqual( List<Notification.Action> expecteds, List<Notification.Action> actuals) { assertEquals(expecteds.size(), actuals.size()); diff --git a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java index 72aa0f2ba09e..cc621387691a 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/NotificationManagerServiceTest.java @@ -123,6 +123,7 @@ import com.android.server.lights.Light; import com.android.server.lights.LightsManager; import com.android.server.notification.NotificationManagerService.NotificationAssistants; import com.android.server.notification.NotificationManagerService.NotificationListeners; +import com.android.server.pm.UserManagerService; import com.android.server.uri.UriGrantsManagerInternal; import com.android.server.wm.WindowManagerInternal; @@ -206,15 +207,19 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { UriGrantsManagerInternal mUgmInternal; @Mock AppOpsManager mAppOpsManager; + @Mock + private UserManagerService mUserMangerService; // Use a Testable subclass so we can simulate calls from the system without failing. private static class TestableNotificationManagerService extends NotificationManagerService { int countSystemChecks = 0; boolean isSystemUid = true; int countLogSmartSuggestionsVisible = 0; + UserManagerService mUserManagerService; - public TestableNotificationManagerService(Context context) { + TestableNotificationManagerService(Context context, UserManagerService userManagerService) { super(context); + mUserManagerService = userManagerService; } @Override @@ -250,7 +255,10 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { countLogSmartSuggestionsVisible++; } - + @Override + UserManagerService getUserManagerService() { + return mUserManagerService; + } } private class TestableToastCallback extends ITransientNotification.Stub { @@ -267,17 +275,12 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { public void setUp() throws Exception { MockitoAnnotations.initMocks(this); - // most tests assume badging is enabled - Secure.putIntForUser(getContext().getContentResolver(), - Secure.NOTIFICATION_BADGING, 1, - UserHandle.getUserHandleForUid(mUid).getIdentifier()); - LocalServices.removeServiceForTest(UriGrantsManagerInternal.class); LocalServices.addService(UriGrantsManagerInternal.class, mUgmInternal); LocalServices.removeServiceForTest(WindowManagerInternal.class); LocalServices.addService(WindowManagerInternal.class, mWindowManagerInternal); - mService = new TestableNotificationManagerService(mContext); + mService = new TestableNotificationManagerService(mContext, mUserMangerService); // Use this testable looper. mTestableLooper = TestableLooper.get(this); @@ -426,6 +429,11 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { r.setShowBadge(!r.canShowBadge()); return null; }); + answers.put("bubbles", invocationOnMock -> { + NotificationRecord r = (NotificationRecord) invocationOnMock.getArguments()[0]; + r.setAllowBubble(!r.canBubble()); + return null; + }); answers.put("package visibility", invocationOnMock -> { ((NotificationRecord) invocationOnMock.getArguments()[0]).setPackageVisibilityOverride( Notification.VISIBILITY_SECRET); @@ -1847,7 +1855,7 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { @Test public void testHasCompanionDevice_noService() throws Exception { - mService = new TestableNotificationManagerService(mContext); + mService = new TestableNotificationManagerService(mContext, mUserMangerService); assertFalse(mService.hasCompanionDevice(mListener)); } @@ -2500,10 +2508,12 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { + "</dnd_apps>" + "</notification-policy>"; mService.readPolicyXml( - new BufferedInputStream(new ByteArrayInputStream(upgradeXml.getBytes())), false); - verify(mListeners, times(1)).readXml(any(), any()); - verify(mConditionProviders, times(1)).readXml(any(), any()); - verify(mAssistants, times(1)).readXml(any(), any()); + new BufferedInputStream(new ByteArrayInputStream(upgradeXml.getBytes())), + false, + UserHandle.USER_ALL); + verify(mListeners, times(1)).readXml(any(), any(), anyBoolean(), anyInt()); + verify(mConditionProviders, times(1)).readXml(any(), any(), anyBoolean(), anyInt()); + verify(mAssistants, times(1)).readXml(any(), any(), anyBoolean(), anyInt()); // numbers are inflated for setup verify(mListeners, times(1)).migrateToXml(); @@ -2518,10 +2528,12 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { + "<ranking></ranking>" + "</notification-policy>"; mService.readPolicyXml( - new BufferedInputStream(new ByteArrayInputStream(preupgradeXml.getBytes())), false); - verify(mListeners, never()).readXml(any(), any()); - verify(mConditionProviders, never()).readXml(any(), any()); - verify(mAssistants, never()).readXml(any(), any()); + new BufferedInputStream(new ByteArrayInputStream(preupgradeXml.getBytes())), + false, + UserHandle.USER_ALL); + verify(mListeners, never()).readXml(any(), any(), anyBoolean(), anyInt()); + verify(mConditionProviders, never()).readXml(any(), any(), anyBoolean(), anyInt()); + verify(mAssistants, never()).readXml(any(), any(), anyBoolean(), anyInt()); // numbers are inflated for setup verify(mListeners, times(2)).migrateToXml(); @@ -2530,6 +2542,53 @@ public class NotificationManagerServiceTest extends UiServiceTestCase { verify(mAssistants, times(2)).ensureAssistant(); } + @Test + public void testReadPolicyXml_doesNotRestoreManagedServicesForManagedUser() throws Exception { + final String policyXml = "<notification-policy version=\"1\">" + + "<ranking></ranking>" + + "<enabled_listeners>" + + "<service_listing approved=\"test\" user=\"10\" primary=\"true\" />" + + "</enabled_listeners>" + + "<enabled_assistants>" + + "<service_listing approved=\"test\" user=\"10\" primary=\"true\" />" + + "</enabled_assistants>" + + "<dnd_apps>" + + "<service_listing approved=\"test\" user=\"10\" primary=\"true\" />" + + "</dnd_apps>" + + "</notification-policy>"; + when(mUserMangerService.isManagedProfile(10)).thenReturn(true); + mService.readPolicyXml( + new BufferedInputStream(new ByteArrayInputStream(policyXml.getBytes())), + true, + 10); + verify(mListeners, never()).readXml(any(), any(), eq(true), eq(10)); + verify(mConditionProviders, never()).readXml(any(), any(), eq(true), eq(10)); + verify(mAssistants, never()).readXml(any(), any(), eq(true), eq(10)); + } + + @Test + public void testReadPolicyXml_restoresManagedServicesForNonManagedUser() throws Exception { + final String policyXml = "<notification-policy version=\"1\">" + + "<ranking></ranking>" + + "<enabled_listeners>" + + "<service_listing approved=\"test\" user=\"10\" primary=\"true\" />" + + "</enabled_listeners>" + + "<enabled_assistants>" + + "<service_listing approved=\"test\" user=\"10\" primary=\"true\" />" + + "</enabled_assistants>" + + "<dnd_apps>" + + "<service_listing approved=\"test\" user=\"10\" primary=\"true\" />" + + "</dnd_apps>" + + "</notification-policy>"; + when(mUserMangerService.isManagedProfile(10)).thenReturn(false); + mService.readPolicyXml( + new BufferedInputStream(new ByteArrayInputStream(policyXml.getBytes())), + true, + 10); + verify(mListeners, times(1)).readXml(any(), any(), eq(true), eq(10)); + verify(mConditionProviders, times(1)).readXml(any(), any(), eq(true), eq(10)); + verify(mAssistants, times(1)).readXml(any(), any(), eq(true), eq(10)); + } @Test public void testLocaleChangedCallsUpdateDefaultZenModeRules() throws Exception { diff --git a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java index 47ec390d6b01..05bb30742fbd 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/PreferencesHelperTest.java @@ -149,6 +149,8 @@ public class PreferencesHelperTest extends UiServiceTestCase { contentResolver.setFallbackToExisting(false); Secure.putIntForUser(contentResolver, Secure.NOTIFICATION_BADGING, 1, UserHandle.getUserId(UID_N_MR1)); + Secure.putIntForUser(contentResolver, + Secure.NOTIFICATION_BUBBLES, 1, UserHandle.getUserId(UID_N_MR1)); ContentProvider testContentProvider = mock(ContentProvider.class); when(testContentProvider.getIContentProvider()).thenReturn(mTestIContentProvider); @@ -174,14 +176,14 @@ public class PreferencesHelperTest extends UiServiceTestCase { .build(); } - private ByteArrayOutputStream writeXmlAndPurge(String pkg, int uid, boolean forBackup, - String... channelIds) + private ByteArrayOutputStream writeXmlAndPurge( + String pkg, int uid, boolean forBackup, int userId, String... channelIds) throws Exception { XmlSerializer serializer = new FastXmlSerializer(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); serializer.setOutput(new BufferedOutputStream(baos), "utf-8"); serializer.startDocument(null, true); - mHelper.writeXml(serializer, forBackup); + mHelper.writeXml(serializer, forBackup, userId); serializer.endDocument(); serializer.flush(); for (String channelId : channelIds) { @@ -190,15 +192,17 @@ public class PreferencesHelperTest extends UiServiceTestCase { return baos; } - private void loadStreamXml(ByteArrayOutputStream stream, boolean forRestore) throws Exception { - loadByteArrayXml(stream.toByteArray(), forRestore); + private void loadStreamXml(ByteArrayOutputStream stream, boolean forRestore, int userId) + throws Exception { + loadByteArrayXml(stream.toByteArray(), forRestore, userId); } - private void loadByteArrayXml(byte[] byteArray, boolean forRestore) throws Exception { + private void loadByteArrayXml(byte[] byteArray, boolean forRestore, int userId) + throws Exception { XmlPullParser parser = Xml.newPullParser(); parser.setInput(new BufferedInputStream(new ByteArrayInputStream(byteArray)), null); parser.nextTag(); - mHelper.readXml(parser, forRestore); + mHelper.readXml(parser, forRestore, userId); } private void compareChannels(NotificationChannel expected, NotificationChannel actual) { @@ -242,6 +246,69 @@ public class PreferencesHelperTest extends UiServiceTestCase { when(mMockZenModeHelper.getNotificationPolicy()).thenReturn(mTestNotificationPolicy); } + private void setUpPackageWithUid(String packageName, int uid) throws Exception { + when(mPm.getApplicationInfoAsUser(eq(packageName), anyInt(), anyInt())) + .thenReturn(new ApplicationInfo()); + when(mPm.getPackageUidAsUser(eq(packageName), anyInt())).thenReturn(uid); + } + + @Test + public void testWriteXml_onlyBackupsTargetUser() throws Exception { + // Setup package notifications. + String package0 = "test.package.user0"; + int uid0 = 1001; + setUpPackageWithUid(package0, uid0); + NotificationChannel channel0 = new NotificationChannel("id0", "name0", IMPORTANCE_HIGH); + mHelper.createNotificationChannel(package0, uid0, channel0, true, false); + + String package10 = "test.package.user10"; + int uid10 = 1001001; + setUpPackageWithUid(package10, uid10); + NotificationChannel channel10 = new NotificationChannel("id10", "name10", IMPORTANCE_HIGH); + mHelper.createNotificationChannel(package10, uid10, channel10, true, false); + + ByteArrayOutputStream baos = writeXmlAndPurge(package10, uid10, true, 10); + + // Reset state. + mHelper.onPackagesChanged(true, 0, new String[] {package0}, new int[] {uid0}); + mHelper.onPackagesChanged(true, 10, new String[] {package10}, new int[] {uid10}); + + // Parse backup data. + loadStreamXml(baos, true, 0); + loadStreamXml(baos, true, 10); + + assertEquals( + channel10, + mHelper.getNotificationChannel(package10, uid10, channel10.getId(), false)); + assertNull(mHelper.getNotificationChannel(package0, uid0, channel0.getId(), false)); + } + + @Test + public void testReadXml_onlyRestoresTargetUser() throws Exception { + // Setup package in user 0. + String package0 = "test.package.user0"; + int uid0 = 1001; + setUpPackageWithUid(package0, uid0); + NotificationChannel channel0 = new NotificationChannel("id0", "name0", IMPORTANCE_HIGH); + mHelper.createNotificationChannel(package0, uid0, channel0, true, false); + + ByteArrayOutputStream baos = writeXmlAndPurge(package0, uid0, true, 0); + + // Reset state. + mHelper.onPackagesChanged(true, 0, new String[] {package0}, new int[] {uid0}); + + // Restore should convert the uid according to the target user. + int expectedUid = 1001001; + setUpPackageWithUid(package0, expectedUid); + // Parse backup data. + loadStreamXml(baos, true, 10); + + assertEquals( + channel0, + mHelper.getNotificationChannel(package0, expectedUid, channel0.getId(), false)); + assertNull(mHelper.getNotificationChannel(package0, uid0, channel0.getId(), false)); + } + @Test public void testChannelXml() throws Exception { NotificationChannelGroup ncg = new NotificationChannelGroup("1", "bye"); @@ -270,12 +337,13 @@ public class PreferencesHelperTest extends UiServiceTestCase { mHelper.setShowBadge(PKG_N_MR1, UID_N_MR1, true); mHelper.setAppImportanceLocked(PKG_N_MR1, UID_N_MR1); - ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, false, channel1.getId(), - channel2.getId(), NotificationChannel.DEFAULT_CHANNEL_ID); + ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, false, + UserHandle.USER_ALL, channel1.getId(), channel2.getId(), + NotificationChannel.DEFAULT_CHANNEL_ID); mHelper.onPackagesChanged(true, UserHandle.myUserId(), new String[]{PKG_N_MR1}, new int[]{ UID_N_MR1}); - loadStreamXml(baos, false); + loadStreamXml(baos, false, UserHandle.USER_ALL); assertTrue(mHelper.canShowBadge(PKG_N_MR1, UID_N_MR1)); assertTrue(mHelper.getIsAppImportanceLocked(PKG_N_MR1, UID_N_MR1)); @@ -337,14 +405,15 @@ public class PreferencesHelperTest extends UiServiceTestCase { mHelper.setImportance(PKG_O, UID_O, IMPORTANCE_NONE); - ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true, channel1.getId(), - channel2.getId(), channel3.getId(), NotificationChannel.DEFAULT_CHANNEL_ID); + ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true, + UserHandle.USER_SYSTEM, channel1.getId(), channel2.getId(), channel3.getId(), + NotificationChannel.DEFAULT_CHANNEL_ID); mHelper.onPackagesChanged(true, UserHandle.myUserId(), new String[]{PKG_N_MR1, PKG_O}, new int[]{UID_N_MR1, UID_O}); mHelper.setShowBadge(PKG_O, UID_O, true); - loadStreamXml(baos, true); + loadStreamXml(baos, true, UserHandle.USER_SYSTEM); assertEquals(IMPORTANCE_NONE, mHelper.getImportance(PKG_O, UID_O)); assertTrue(mHelper.canShowBadge(PKG_N_MR1, UID_N_MR1)); @@ -385,10 +454,11 @@ public class PreferencesHelperTest extends UiServiceTestCase { channel.setSound(SOUND_URI, mAudioAttributes); mHelper.createNotificationChannel(PKG_N_MR1, UID_N_MR1, channel, true, false); - ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true, channel.getId()); + ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true, + UserHandle.USER_SYSTEM, channel.getId()); // Testing that in restore we are given the canonical version - loadStreamXml(baos, true); + loadStreamXml(baos, true, UserHandle.USER_SYSTEM); verify(mTestIContentProvider).uncanonicalize(any(), eq(CANONICAL_SOUND_URI)); } @@ -410,9 +480,10 @@ public class PreferencesHelperTest extends UiServiceTestCase { new NotificationChannel("id", "name", IMPORTANCE_LOW); channel.setSound(SOUND_URI, mAudioAttributes); mHelper.createNotificationChannel(PKG_N_MR1, UID_N_MR1, channel, true, false); - ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true, channel.getId()); + ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true, + UserHandle.USER_SYSTEM, channel.getId()); - loadStreamXml(baos, true); + loadStreamXml(baos, true, UserHandle.USER_SYSTEM); NotificationChannel actualChannel = mHelper.getNotificationChannel( PKG_N_MR1, UID_N_MR1, channel.getId(), false); @@ -431,9 +502,10 @@ public class PreferencesHelperTest extends UiServiceTestCase { new NotificationChannel("id", "name", IMPORTANCE_LOW); channel.setSound(SOUND_URI, mAudioAttributes); mHelper.createNotificationChannel(PKG_N_MR1, UID_N_MR1, channel, true, false); - ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true, channel.getId()); + ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true, + UserHandle.USER_SYSTEM, channel.getId()); - loadStreamXml(baos, true); + loadStreamXml(baos, true, UserHandle.USER_SYSTEM); NotificationChannel actualChannel = mHelper.getNotificationChannel( PKG_N_MR1, UID_N_MR1, channel.getId(), false); @@ -460,7 +532,8 @@ public class PreferencesHelperTest extends UiServiceTestCase { + "</package>\n" + "</ranking>\n"; - loadByteArrayXml(backupWithUncanonicalizedSoundUri.getBytes(), true); + loadByteArrayXml( + backupWithUncanonicalizedSoundUri.getBytes(), true, UserHandle.USER_SYSTEM); NotificationChannel actualChannel = mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1, id, false); assertEquals(Settings.System.DEFAULT_NOTIFICATION_URI, actualChannel.getSound()); @@ -472,9 +545,10 @@ public class PreferencesHelperTest extends UiServiceTestCase { new NotificationChannel("id", "name", IMPORTANCE_LOW); channel.setSound(null, mAudioAttributes); mHelper.createNotificationChannel(PKG_N_MR1, UID_N_MR1, channel, true, false); - ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true, channel.getId()); + ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true, + UserHandle.USER_SYSTEM, channel.getId()); - loadStreamXml(baos, true); + loadStreamXml(baos, true, UserHandle.USER_SYSTEM); NotificationChannel actualChannel = mHelper.getNotificationChannel( PKG_N_MR1, UID_N_MR1, channel.getId(), false); @@ -504,8 +578,9 @@ public class PreferencesHelperTest extends UiServiceTestCase { assertEquals(channel2, mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1, channel2.getId(), false)); - ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true, channel1.getId(), - channel2.getId(), channel3.getId(), NotificationChannel.DEFAULT_CHANNEL_ID); + ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, true, + UserHandle.USER_SYSTEM, channel1.getId(), channel2.getId(), channel3.getId(), + NotificationChannel.DEFAULT_CHANNEL_ID); mHelper.onPackagesChanged(true, UserHandle.myUserId(), new String[]{PKG_N_MR1}, new int[]{ UID_N_MR1}); @@ -513,7 +588,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { parser.setInput(new BufferedInputStream(new ByteArrayInputStream(baos.toByteArray())), null); parser.nextTag(); - mHelper.readXml(parser, true); + mHelper.readXml(parser, true, UserHandle.USER_SYSTEM); assertNull(mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1, channel1.getId(), false)); assertNull(mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1, channel3.getId(), false)); @@ -525,9 +600,9 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testChannelXml_defaultChannelLegacyApp_noUserSettings() throws Exception { ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, false, - NotificationChannel.DEFAULT_CHANNEL_ID); + UserHandle.USER_ALL, NotificationChannel.DEFAULT_CHANNEL_ID); - loadStreamXml(baos, false); + loadStreamXml(baos, false, UserHandle.USER_ALL); final NotificationChannel updated = mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1, NotificationChannel.DEFAULT_CHANNEL_ID, false); @@ -546,9 +621,9 @@ public class PreferencesHelperTest extends UiServiceTestCase { mHelper.updateNotificationChannel(PKG_N_MR1, UID_N_MR1, defaultChannel, true); ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, false, - NotificationChannel.DEFAULT_CHANNEL_ID); + UserHandle.USER_ALL, NotificationChannel.DEFAULT_CHANNEL_ID); - loadStreamXml(baos, false); + loadStreamXml(baos, false, UserHandle.USER_ALL); assertEquals(NotificationManager.IMPORTANCE_LOW, mHelper.getNotificationChannel( PKG_N_MR1, UID_N_MR1, NotificationChannel.DEFAULT_CHANNEL_ID, false).getImportance()); @@ -568,7 +643,7 @@ public class PreferencesHelperTest extends UiServiceTestCase { parser.setInput(new BufferedInputStream(new ByteArrayInputStream(preupgradeXml.getBytes())), null); parser.nextTag(); - mHelper.readXml(parser, false); + mHelper.readXml(parser, false, UserHandle.USER_ALL); final NotificationChannel updated1 = mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1, NotificationChannel.DEFAULT_CHANNEL_ID, false); @@ -590,13 +665,13 @@ public class PreferencesHelperTest extends UiServiceTestCase { final NotificationChannel defaultChannel = mHelper.getNotificationChannel( PKG_N_MR1, UID_N_MR1, NotificationChannel.DEFAULT_CHANNEL_ID, false); assertTrue(defaultChannel != null); - ByteArrayOutputStream baos = - writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, false, NotificationChannel.DEFAULT_CHANNEL_ID); + ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, false, + UserHandle.USER_ALL, NotificationChannel.DEFAULT_CHANNEL_ID); // Load package at higher sdk. final ApplicationInfo upgraded = new ApplicationInfo(); upgraded.targetSdkVersion = Build.VERSION_CODES.N_MR1 + 1; when(mPm.getApplicationInfoAsUser(eq(PKG_N_MR1), anyInt(), anyInt())).thenReturn(upgraded); - loadStreamXml(baos, false); + loadStreamXml(baos, false, UserHandle.USER_ALL); // Default Channel should be gone. assertEquals(null, mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1, @@ -608,13 +683,13 @@ public class PreferencesHelperTest extends UiServiceTestCase { mHelper.createNotificationChannel(PKG_N_MR1, UID_N_MR1, new NotificationChannel("bananas", "bananas", IMPORTANCE_LOW), true, false); ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, false, - NotificationChannel.DEFAULT_CHANNEL_ID, "bananas"); + UserHandle.USER_ALL, NotificationChannel.DEFAULT_CHANNEL_ID, "bananas"); // Load package at higher sdk. final ApplicationInfo upgraded = new ApplicationInfo(); upgraded.targetSdkVersion = Build.VERSION_CODES.N_MR1 + 1; when(mPm.getApplicationInfoAsUser(eq(PKG_N_MR1), anyInt(), anyInt())).thenReturn(upgraded); - loadStreamXml(baos, false); + loadStreamXml(baos, false, UserHandle.USER_ALL); // Default Channel should be gone. assertEquals(null, mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1, @@ -624,11 +699,11 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testLoadingOldChannelsDoesNotDeleteNewlyCreatedChannels() throws Exception { ByteArrayOutputStream baos = writeXmlAndPurge(PKG_N_MR1, UID_N_MR1, false, - NotificationChannel.DEFAULT_CHANNEL_ID, "bananas"); + UserHandle.USER_ALL, NotificationChannel.DEFAULT_CHANNEL_ID, "bananas"); mHelper.createNotificationChannel(PKG_N_MR1, UID_N_MR1, new NotificationChannel("bananas", "bananas", IMPORTANCE_LOW), true, false); - loadStreamXml(baos, false); + loadStreamXml(baos, false, UserHandle.USER_ALL); // Should still have the newly created channel that wasn't in the xml. assertTrue(mHelper.getNotificationChannel(PKG_N_MR1, UID_N_MR1, "bananas", false) != null); @@ -1828,6 +1903,46 @@ public class PreferencesHelperTest extends UiServiceTestCase { } @Test + public void testBubblesOverrideTrue() { + Secure.putIntForUser(getContext().getContentResolver(), + Secure.NOTIFICATION_BUBBLES, 1, + USER.getIdentifier()); + mHelper.updateBubblesEnabled(); // would be called by settings observer + assertTrue(mHelper.bubblesEnabled(USER)); + } + + @Test + public void testBubblesOverrideFalse() { + Secure.putIntForUser(getContext().getContentResolver(), + Secure.NOTIFICATION_BUBBLES, 0, + USER.getIdentifier()); + mHelper.updateBubblesEnabled(); // would be called by settings observer + assertFalse(mHelper.bubblesEnabled(USER)); + } + + @Test + public void testBubblesForUserAll() { + try { + mHelper.bubblesEnabled(UserHandle.ALL); + } catch (Exception e) { + fail("just don't throw"); + } + } + + @Test + public void testBubblesOverrideUserIsolation() { + Secure.putIntForUser(getContext().getContentResolver(), + Secure.NOTIFICATION_BUBBLES, 0, + USER.getIdentifier()); + Secure.putIntForUser(getContext().getContentResolver(), + Secure.NOTIFICATION_BUBBLES, 1, + USER2.getIdentifier()); + mHelper.updateBubblesEnabled(); // would be called by settings observer + assertFalse(mHelper.bubblesEnabled(USER)); + assertTrue(mHelper.bubblesEnabled(USER2)); + } + + @Test public void testOnLocaleChanged_updatesDefaultChannels() throws Exception { String newLabel = "bananas!"; final NotificationChannel defaultChannel = mHelper.getNotificationChannel(PKG_N_MR1, @@ -2007,9 +2122,9 @@ public class PreferencesHelperTest extends UiServiceTestCase { @Test public void testXml_statusBarIcons_default() throws Exception { - ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false); + ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL); mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper); - loadStreamXml(baos, false); + loadStreamXml(baos, false, UserHandle.USER_ALL); assertEquals(PreferencesHelper.DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS, mHelper.shouldHideSilentStatusIcons()); @@ -2019,9 +2134,9 @@ public class PreferencesHelperTest extends UiServiceTestCase { public void testXml_statusBarIcons() throws Exception { mHelper.setHideSilentStatusIcons(!PreferencesHelper.DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS); - ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false); + ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL); mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper); - loadStreamXml(baos, false); + loadStreamXml(baos, false, UserHandle.USER_ALL); assertEquals(!PreferencesHelper.DEFAULT_HIDE_SILENT_STATUS_BAR_ICONS, mHelper.shouldHideSilentStatusIcons()); @@ -2115,9 +2230,9 @@ public class PreferencesHelperTest extends UiServiceTestCase { public void testDelegateXml_noDelegate() throws Exception { mHelper.setImportance(PKG_O, UID_O, IMPORTANCE_UNSPECIFIED); - ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false); + ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL); mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper); - loadStreamXml(baos, false); + loadStreamXml(baos, false, UserHandle.USER_ALL); assertNull(mHelper.getNotificationDelegate(PKG_O, UID_O)); } @@ -2126,9 +2241,9 @@ public class PreferencesHelperTest extends UiServiceTestCase { public void testDelegateXml_delegate() throws Exception { mHelper.setNotificationDelegate(PKG_O, UID_O, "other", 53); - ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false); + ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL); mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper); - loadStreamXml(baos, false); + loadStreamXml(baos, false, UserHandle.USER_ALL); assertEquals("other", mHelper.getNotificationDelegate(PKG_O, UID_O)); } @@ -2138,9 +2253,9 @@ public class PreferencesHelperTest extends UiServiceTestCase { mHelper.setNotificationDelegate(PKG_O, UID_O, "other", 53); mHelper.revokeNotificationDelegate(PKG_O, UID_O); - ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false); + ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL); mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper); - loadStreamXml(baos, false); + loadStreamXml(baos, false, UserHandle.USER_ALL); assertNull(mHelper.getNotificationDelegate(PKG_O, UID_O)); } @@ -2150,9 +2265,9 @@ public class PreferencesHelperTest extends UiServiceTestCase { mHelper.setNotificationDelegate(PKG_O, UID_O, "other", 53); mHelper.toggleNotificationDelegate(PKG_O, UID_O, false); - ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false); + ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL); mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper); - loadStreamXml(baos, false); + loadStreamXml(baos, false, UserHandle.USER_ALL); // appears disabled assertNull(mHelper.getNotificationDelegate(PKG_O, UID_O)); @@ -2168,9 +2283,9 @@ public class PreferencesHelperTest extends UiServiceTestCase { mHelper.toggleNotificationDelegate(PKG_O, UID_O, false); mHelper.revokeNotificationDelegate(PKG_O, UID_O); - ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false); + ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL); mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper); - loadStreamXml(baos, false); + loadStreamXml(baos, false, UserHandle.USER_ALL); // appears disabled assertNull(mHelper.getNotificationDelegate(PKG_O, UID_O)); @@ -2186,9 +2301,9 @@ public class PreferencesHelperTest extends UiServiceTestCase { public void testAllowBubbles_defaults() throws Exception { assertTrue(mHelper.areBubblesAllowed(PKG_O, UID_O)); - ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false); + ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL); mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper); - loadStreamXml(baos, false); + loadStreamXml(baos, false, UserHandle.USER_ALL); assertTrue(mHelper.areBubblesAllowed(PKG_O, UID_O)); assertEquals(0, mHelper.getAppLockedFields(PKG_O, UID_O)); @@ -2201,9 +2316,9 @@ public class PreferencesHelperTest extends UiServiceTestCase { assertEquals(PreferencesHelper.LockableAppFields.USER_LOCKED_BUBBLE, mHelper.getAppLockedFields(PKG_O, UID_O)); - ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false); + ByteArrayOutputStream baos = writeXmlAndPurge(PKG_O, UID_O, false, UserHandle.USER_ALL); mHelper = new PreferencesHelper(getContext(), mPm, mHandler, mMockZenModeHelper); - loadStreamXml(baos, false); + loadStreamXml(baos, false, UserHandle.USER_ALL); assertFalse(mHelper.areBubblesAllowed(PKG_O, UID_O)); assertEquals(PreferencesHelper.LockableAppFields.USER_LOCKED_BUBBLE, diff --git a/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java index c79e1db0a745..b32288720fd2 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/RankingHelperTest.java @@ -125,11 +125,8 @@ public class RankingHelperTest extends UiServiceTestCase { InstrumentationRegistry.getContext().getContentResolver()); when(mContext.getPackageManager()).thenReturn(mPm); when(mContext.getApplicationInfo()).thenReturn(legacy); - // most tests assume badging is enabled TestableContentResolver contentResolver = getContext().getContentResolver(); contentResolver.setFallbackToExisting(false); - Secure.putIntForUser(contentResolver, - Secure.NOTIFICATION_BADGING, 1, UserHandle.getUserId(UID)); ContentProvider testContentProvider = mock(ContentProvider.class); when(testContentProvider.getIContentProvider()).thenReturn(mTestIContentProvider); diff --git a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java index a459b0a26932..08d83333e91b 100644 --- a/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java +++ b/services/tests/uiservicestests/src/com/android/server/notification/ZenModeHelperTest.java @@ -25,6 +25,7 @@ import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.TestCase.assertTrue; +import static org.junit.Assert.assertNotEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; @@ -56,6 +57,7 @@ import android.media.AudioManagerInternal; import android.media.AudioSystem; import android.media.VolumePolicy; import android.net.Uri; +import android.os.UserHandle; import android.provider.Settings; import android.provider.Settings.Global; import android.service.notification.Condition; @@ -158,19 +160,58 @@ public class ZenModeHelperTest extends UiServiceTestCase { return new XmlResourceParserImpl(parser); } - private ByteArrayOutputStream writeXmlAndPurge(boolean forBackup, Integer version) - throws Exception { + private ByteArrayOutputStream writeXmlAndPurge(Integer version) throws Exception { XmlSerializer serializer = new FastXmlSerializer(); ByteArrayOutputStream baos = new ByteArrayOutputStream(); serializer.setOutput(new BufferedOutputStream(baos), "utf-8"); serializer.startDocument(null, true); - mZenModeHelperSpy.writeXml(serializer, forBackup, version); + mZenModeHelperSpy.writeXml(serializer, false, version, UserHandle.USER_ALL); serializer.endDocument(); serializer.flush(); mZenModeHelperSpy.setConfig(new ZenModeConfig(), null, "writing xml"); return baos; } + private ByteArrayOutputStream writeXmlAndPurgeForUser(Integer version, int userId) + throws Exception { + XmlSerializer serializer = new FastXmlSerializer(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + serializer.setOutput(new BufferedOutputStream(baos), "utf-8"); + serializer.startDocument(null, true); + mZenModeHelperSpy.writeXml(serializer, true, version, userId); + serializer.endDocument(); + serializer.flush(); + ZenModeConfig newConfig = new ZenModeConfig(); + newConfig.user = userId; + mZenModeHelperSpy.setConfig(newConfig, null, "writing xml"); + return baos; + } + + private XmlPullParser getParserForByteStream(ByteArrayOutputStream baos) throws Exception { + XmlPullParser parser = Xml.newPullParser(); + parser.setInput( + new BufferedInputStream(new ByteArrayInputStream(baos.toByteArray())), null); + parser.nextTag(); + return parser; + } + + private ArrayMap<String, ZenModeConfig.ZenRule> getCustomAutomaticRules() { + ArrayMap<String, ZenModeConfig.ZenRule> automaticRules = new ArrayMap<>(); + ZenModeConfig.ZenRule customRule = new ZenModeConfig.ZenRule(); + final ScheduleInfo customRuleInfo = new ScheduleInfo(); + customRule.enabled = true; + customRule.creationTime = 0; + customRule.id = "customRule"; + customRule.name = "Custom Rule"; + customRule.zenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS; + customRule.conditionId = ZenModeConfig.toScheduleConditionId(customRuleInfo); + customRule.configurationActivity = + new ComponentName("android", "ScheduleConditionProvider"); + customRule.pkg = customRule.configurationActivity.getPackageName(); + automaticRules.put("customRule", customRule); + return automaticRules; + } + @Test public void testZenOff_NoMuteApplied() { mZenModeHelperSpy.mZenMode = Settings.Global.ZEN_MODE_OFF; @@ -639,50 +680,86 @@ public class ZenModeHelperTest extends UiServiceTestCase { ZenModeConfig expected = mZenModeHelperSpy.mConfig.copy(); - ByteArrayOutputStream baos = writeXmlAndPurge(false, null); - XmlPullParser parser = Xml.newPullParser(); - parser.setInput(new BufferedInputStream( - new ByteArrayInputStream(baos.toByteArray())), null); - parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false); + ByteArrayOutputStream baos = writeXmlAndPurge(null); + XmlPullParser parser = getParserForByteStream(baos); + mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); assertEquals("Config mismatch: current vs expected: " + mZenModeHelperSpy.mConfig.diff(expected), expected, mZenModeHelperSpy.mConfig); } @Test - public void testReadXmlRestore() throws Exception { + public void testWriteXml_onlyBackupsTargetUser() throws Exception { + // Setup configs for user 10 and 11. setupZenConfig(); + ZenModeConfig config10 = mZenModeHelperSpy.mConfig.copy(); + config10.user = 10; + config10.allowAlarms = true; + config10.allowMedia = true; + mZenModeHelperSpy.setConfig(config10, null, "writeXml"); + ZenModeConfig config11 = mZenModeHelperSpy.mConfig.copy(); + config11.user = 11; + config11.allowAlarms = false; + config11.allowMedia = false; + mZenModeHelperSpy.setConfig(config11, null, "writeXml"); + + // Backup user 10 and reset values. + ByteArrayOutputStream baos = writeXmlAndPurgeForUser(null, 10); + ZenModeConfig newConfig11 = new ZenModeConfig(); + newConfig11.user = 11; + mZenModeHelperSpy.mConfigs.put(11, newConfig11); + + // Parse backup data. + XmlPullParser parser = getParserForByteStream(baos); + mZenModeHelperSpy.readXml(parser, true, 10); + mZenModeHelperSpy.readXml(parser, true, 11); + + ZenModeConfig actual = mZenModeHelperSpy.mConfigs.get(10); + assertEquals( + "Config mismatch: current vs expected: " + actual.diff(config10), config10, actual); + assertNotEquals("Expected config mismatch", config11, mZenModeHelperSpy.mConfigs.get(11)); + } + @Test + public void testReadXmlRestore_forSystemUser() throws Exception { + setupZenConfig(); // one enabled automatic rule - ArrayMap<String, ZenModeConfig.ZenRule> automaticRules = new ArrayMap<>(); - ZenModeConfig.ZenRule customRule = new ZenModeConfig.ZenRule(); - final ScheduleInfo customRuleInfo = new ScheduleInfo(); - customRule.enabled = true; - customRule.creationTime = 0; - customRule.id = "customRule"; - customRule.name = "Custom Rule"; - customRule.zenMode = Settings.Global.ZEN_MODE_IMPORTANT_INTERRUPTIONS; - customRule.conditionId = ZenModeConfig.toScheduleConditionId(customRuleInfo); - customRule.configurationActivity - = new ComponentName("android", "ScheduleConditionProvider"); - customRule.pkg = customRule.configurationActivity.getPackageName(); - automaticRules.put("customRule", customRule); - mZenModeHelperSpy.mConfig.automaticRules = automaticRules; - + mZenModeHelperSpy.mConfig.automaticRules = getCustomAutomaticRules(); ZenModeConfig original = mZenModeHelperSpy.mConfig.copy(); - ByteArrayOutputStream baos = writeXmlAndPurge(false, null); - XmlPullParser parser = Xml.newPullParser(); - parser.setInput(new BufferedInputStream( - new ByteArrayInputStream(baos.toByteArray())), null); - parser.nextTag(); - mZenModeHelperSpy.readXml(parser, true); + ByteArrayOutputStream baos = writeXmlAndPurgeForUser(null, UserHandle.USER_SYSTEM); + XmlPullParser parser = getParserForByteStream(baos); + mZenModeHelperSpy.readXml(parser, true, UserHandle.USER_SYSTEM); + assertEquals("Config mismatch: current vs original: " + mZenModeHelperSpy.mConfig.diff(original), original, mZenModeHelperSpy.mConfig); assertEquals(original.hashCode(), mZenModeHelperSpy.mConfig.hashCode()); } + /** Restore should ignore the data's user id and restore for the target user. */ + @Test + public void testReadXmlRestore_forNonSystemUser() throws Exception { + // Setup config. + setupZenConfig(); + mZenModeHelperSpy.mConfig.automaticRules = getCustomAutomaticRules(); + ZenModeConfig expected = mZenModeHelperSpy.mConfig.copy(); + + // Backup data for user 0. + ByteArrayOutputStream baos = writeXmlAndPurgeForUser(null, UserHandle.USER_SYSTEM); + + // Restore data for user 10. + XmlPullParser parser = getParserForByteStream(baos); + mZenModeHelperSpy.readXml(parser, true, 10); + + ZenModeConfig actual = mZenModeHelperSpy.mConfigs.get(10); + expected.user = 10; + assertEquals( + "Config mismatch: current vs original: " + actual.diff(expected), expected, actual); + assertEquals(expected.hashCode(), actual.hashCode()); + expected.user = 0; + assertNotEquals(expected, mZenModeHelperSpy.mConfig); + } + @Test public void testWriteXmlWithZenPolicy() throws Exception { final String ruleId = "customRule"; @@ -715,12 +792,12 @@ public class ZenModeHelperTest extends UiServiceTestCase { ZenModeConfig expected = mZenModeHelperSpy.mConfig.copy(); - ByteArrayOutputStream baos = writeXmlAndPurge(false, null); + ByteArrayOutputStream baos = writeXmlAndPurge(null); XmlPullParser parser = Xml.newPullParser(); parser.setInput(new BufferedInputStream( new ByteArrayInputStream(baos.toByteArray())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false); + mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); ZenModeConfig.ZenRule original = expected.automaticRules.get(ruleId); ZenModeConfig.ZenRule current = mZenModeHelperSpy.mConfig.automaticRules.get(ruleId); @@ -729,7 +806,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { } @Test - public void testReadXmlRestoreWithZenPolicy() throws Exception { + public void testReadXmlRestoreWithZenPolicy_forSystemUser() throws Exception { final String ruleId = "customRule"; setupZenConfig(); @@ -756,12 +833,9 @@ public class ZenModeHelperTest extends UiServiceTestCase { ZenModeConfig expected = mZenModeHelperSpy.mConfig.copy(); - ByteArrayOutputStream baos = writeXmlAndPurge(false, null); - XmlPullParser parser = Xml.newPullParser(); - parser.setInput(new BufferedInputStream( - new ByteArrayInputStream(baos.toByteArray())), null); - parser.nextTag(); - mZenModeHelperSpy.readXml(parser, true); + ByteArrayOutputStream baos = writeXmlAndPurgeForUser(null, UserHandle.USER_SYSTEM); + XmlPullParser parser = getParserForByteStream(baos); + mZenModeHelperSpy.readXml(parser, true, UserHandle.USER_SYSTEM); ZenModeConfig.ZenRule original = expected.automaticRules.get(ruleId); ZenModeConfig.ZenRule current = mZenModeHelperSpy.mConfig.automaticRules.get(ruleId); @@ -786,12 +860,12 @@ public class ZenModeHelperTest extends UiServiceTestCase { mZenModeHelperSpy.mConfig.automaticRules = enabledAutoRule; // set previous version - ByteArrayOutputStream baos = writeXmlAndPurge(false, 5); + ByteArrayOutputStream baos = writeXmlAndPurge(5); XmlPullParser parser = Xml.newPullParser(); parser.setInput(new BufferedInputStream( new ByteArrayInputStream(baos.toByteArray())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false); + mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); assertTrue(mZenModeHelperSpy.mConfig.automaticRules.containsKey("customRule")); setupZenConfigMaintained(); @@ -811,7 +885,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { parser.setInput(new BufferedInputStream( new ByteArrayInputStream(xml.getBytes())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false); + mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); assertEquals(0, mZenModeHelperSpy.mConfig.suppressedVisualEffects); @@ -827,7 +901,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { parser.setInput(new BufferedInputStream( new ByteArrayInputStream(xml.getBytes())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false); + mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); assertEquals(0, mZenModeHelperSpy.mConfig.suppressedVisualEffects); } @@ -846,7 +920,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { parser.setInput(new BufferedInputStream( new ByteArrayInputStream(xml.getBytes())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false); + mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); assertEquals(0, mZenModeHelperSpy.mConfig.suppressedVisualEffects); } @@ -865,7 +939,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { parser.setInput(new BufferedInputStream( new ByteArrayInputStream(xml.getBytes())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false); + mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); assertEquals(SUPPRESSED_EFFECT_FULL_SCREEN_INTENT | SUPPRESSED_EFFECT_LIGHTS @@ -884,7 +958,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { parser.setInput(new BufferedInputStream( new ByteArrayInputStream(xml.getBytes())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false); + mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); assertEquals(SUPPRESSED_EFFECT_PEEK, mZenModeHelperSpy.mConfig.suppressedVisualEffects); @@ -900,7 +974,7 @@ public class ZenModeHelperTest extends UiServiceTestCase { parser.setInput(new BufferedInputStream( new ByteArrayInputStream(xml.getBytes())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false); + mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); assertEquals(SUPPRESSED_EFFECT_FULL_SCREEN_INTENT | SUPPRESSED_EFFECT_LIGHTS, mZenModeHelperSpy.mConfig.suppressedVisualEffects); @@ -915,12 +989,12 @@ public class ZenModeHelperTest extends UiServiceTestCase { mZenModeHelperSpy.mConfig.automaticRules = new ArrayMap<>(); // set previous version - ByteArrayOutputStream baos = writeXmlAndPurge(false, 5); + ByteArrayOutputStream baos = writeXmlAndPurge(5); XmlPullParser parser = Xml.newPullParser(); parser.setInput(new BufferedInputStream( new ByteArrayInputStream(baos.toByteArray())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false); + mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); // check default rules ArrayMap<String, ZenModeConfig.ZenRule> rules = mZenModeHelperSpy.mConfig.automaticRules; @@ -951,12 +1025,12 @@ public class ZenModeHelperTest extends UiServiceTestCase { mZenModeHelperSpy.mConfig.automaticRules = disabledAutoRule; // set previous version - ByteArrayOutputStream baos = writeXmlAndPurge(false, 5); + ByteArrayOutputStream baos = writeXmlAndPurge(5); XmlPullParser parser = Xml.newPullParser(); parser.setInput(new BufferedInputStream( new ByteArrayInputStream(baos.toByteArray())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false); + mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); // check default rules ArrayMap<String, ZenModeConfig.ZenRule> rules = mZenModeHelperSpy.mConfig.automaticRules; @@ -1003,12 +1077,12 @@ public class ZenModeHelperTest extends UiServiceTestCase { mZenModeHelperSpy.mConfig.automaticRules = automaticRules; // set previous version - ByteArrayOutputStream baos = writeXmlAndPurge(false, 5); + ByteArrayOutputStream baos = writeXmlAndPurge(5); XmlPullParser parser = Xml.newPullParser(); parser.setInput(new BufferedInputStream( new ByteArrayInputStream(baos.toByteArray())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false); + mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); // check default rules ArrayMap<String, ZenModeConfig.ZenRule> rules = mZenModeHelperSpy.mConfig.automaticRules; @@ -1072,12 +1146,12 @@ public class ZenModeHelperTest extends UiServiceTestCase { mZenModeHelperSpy.mConfig.automaticRules = automaticRules; // set previous version - ByteArrayOutputStream baos = writeXmlAndPurge(false, 5); + ByteArrayOutputStream baos = writeXmlAndPurge(5); XmlPullParser parser = Xml.newPullParser(); parser.setInput(new BufferedInputStream( new ByteArrayInputStream(baos.toByteArray())), null); parser.nextTag(); - mZenModeHelperSpy.readXml(parser, false); + mZenModeHelperSpy.readXml(parser, false, UserHandle.USER_ALL); // check default rules ArrayMap<String, ZenModeConfig.ZenRule> rules = mZenModeHelperSpy.mConfig.automaticRules; diff --git a/services/tests/wmtests/AndroidManifest.xml b/services/tests/wmtests/AndroidManifest.xml index 3f3b99692e9c..bfda2eac25c9 100644 --- a/services/tests/wmtests/AndroidManifest.xml +++ b/services/tests/wmtests/AndroidManifest.xml @@ -37,8 +37,10 @@ <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.REORDER_TASKS" /> + <!-- TODO: Remove largeHeap hack when memory leak is fixed (b/123984854) --> <application android:debuggable="true" - android:testOnly="true"> + android:testOnly="true" + android:largeHeap="true"> <uses-library android:name="android.test.mock" android:required="true" /> <activity android:name="com.android.server.wm.TaskStackChangedListenerTest$ActivityA" /> diff --git a/telephony/java/android/provider/Telephony.java b/telephony/java/android/provider/Telephony.java index 548227067b67..4539ab3dc310 100644 --- a/telephony/java/android/provider/Telephony.java +++ b/telephony/java/android/provider/Telephony.java @@ -2118,6 +2118,608 @@ public final class Telephony { } /** + * Columns for the "rcs_*" tables used by {@link android.telephony.ims.RcsMessageStore} classes. + * + * @hide - not meant for public use + */ + public interface RcsColumns { + /** + * The authority for the content provider + */ + String AUTHORITY = "rcs"; + + /** + * The URI to start building upon to use {@link com.android.providers.telephony.RcsProvider} + */ + Uri CONTENT_AND_AUTHORITY = Uri.parse("content://" + AUTHORITY); + + /** + * The value to be used whenever a transaction that expects an integer to be returned + * failed. + */ + int TRANSACTION_FAILED = Integer.MIN_VALUE; + + /** + * The value that denotes a timestamp was not set before (e.g. a message that is not + * delivered yet will not have a DELIVERED_TIMESTAMP) + */ + long TIMESTAMP_NOT_SET = 0; + + /** + * The table that {@link android.telephony.ims.RcsThread} gets persisted to + */ + interface RcsThreadColumns { + /** + * The path that should be used for referring to + * {@link android.telephony.ims.RcsThread}s in + * {@link com.android.providers.telephony.RcsProvider} URIs. + */ + String RCS_THREAD_URI_PART = "thread"; + + /** + * The URI to query or modify {@link android.telephony.ims.RcsThread} via the content + * provider. + */ + Uri RCS_THREAD_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY, RCS_THREAD_URI_PART); + + /** + * The unique identifier of an {@link android.telephony.ims.RcsThread} + */ + String RCS_THREAD_ID_COLUMN = "rcs_thread_id"; + } + + /** + * The table that {@link android.telephony.ims.Rcs1To1Thread} gets persisted to + */ + interface Rcs1To1ThreadColumns extends RcsThreadColumns { + /** + * The path that should be used for referring to + * {@link android.telephony.ims.Rcs1To1Thread}s in + * {@link com.android.providers.telephony.RcsProvider} URIs. + */ + String RCS_1_TO_1_THREAD_URI_PART = "p2p_thread"; + + /** + * The URI to query or modify {@link android.telephony.ims.Rcs1To1Thread}s via the + * content provider + */ + Uri RCS_1_TO_1_THREAD_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY, + RCS_1_TO_1_THREAD_URI_PART); + + /** + * The SMS/MMS thread to fallback to in case of an RCS outage + */ + String FALLBACK_THREAD_ID_COLUMN = "rcs_fallback_thread_id"; + } + + /** + * The table that {@link android.telephony.ims.RcsGroupThread} gets persisted to + */ + interface RcsGroupThreadColumns extends RcsThreadColumns { + /** + * The path that should be used for referring to + * {@link android.telephony.ims.RcsGroupThread}s in + * {@link com.android.providers.telephony.RcsProvider} URIs. + */ + String RCS_GROUP_THREAD_URI_PART = "group_thread"; + + /** + * The URI to query or modify {@link android.telephony.ims.RcsGroupThread}s via the + * content provider + */ + Uri RCS_GROUP_THREAD_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY, + RCS_GROUP_THREAD_URI_PART); + + /** + * The owner/admin of the {@link android.telephony.ims.RcsGroupThread} + */ + String OWNER_PARTICIPANT_COLUMN = "owner_participant"; + + /** + * The user visible name of the group + */ + String GROUP_NAME_COLUMN = "group_name"; + + /** + * The user visible icon of the group + */ + String GROUP_ICON_COLUMN = "group_icon"; + + /** + * The RCS conference URI for this group + */ + String CONFERENCE_URI_COLUMN = "conference_uri"; + } + + /** + * The view that enables polling from all types of RCS threads at once + */ + interface RcsUnifiedThreadColumns extends RcsThreadColumns, Rcs1To1ThreadColumns, + RcsGroupThreadColumns { + /** + * The type of this {@link android.telephony.ims.RcsThread} + */ + String THREAD_TYPE_COLUMN = "thread_type"; + + /** + * Integer returned as a result from a database query that denotes the thread is 1 to 1 + */ + int THREAD_TYPE_1_TO_1 = 0; + + /** + * Integer returned as a result from a database query that denotes the thread is 1 to 1 + */ + int THREAD_TYPE_GROUP = 1; + } + + /** + * The table that {@link android.telephony.ims.RcsParticipant} gets persisted to + */ + interface RcsParticipantColumns { + /** + * The path that should be used for referring to + * {@link android.telephony.ims.RcsParticipant}s in + * {@link com.android.providers.telephony.RcsProvider} URIs. + */ + String RCS_PARTICIPANT_URI_PART = "participant"; + + /** + * The URI to query or modify {@link android.telephony.ims.RcsParticipant}s via the + * content provider + */ + Uri RCS_PARTICIPANT_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY, + RCS_PARTICIPANT_URI_PART); + + /** + * The unique identifier of the entry in the database + */ + String RCS_PARTICIPANT_ID_COLUMN = "rcs_participant_id"; + + /** + * A foreign key on canonical_address table, also used by SMS/MMS + */ + String CANONICAL_ADDRESS_ID_COLUMN = "canonical_address_id"; + + /** + * The user visible RCS alias for this participant. + */ + String RCS_ALIAS_COLUMN = "rcs_alias"; + } + + /** + * Additional constants to enable access to {@link android.telephony.ims.RcsParticipant} + * related data + */ + interface RcsParticipantHelpers extends RcsParticipantColumns { + /** + * The view that unifies "rcs_participant" and "canonical_addresses" tables for easy + * access to participant address. + */ + String RCS_PARTICIPANT_WITH_ADDRESS_VIEW = "rcs_participant_with_address_view"; + + /** + * The view that unifies "rcs_participant", "canonical_addresses" and + * "rcs_thread_participant" junction table to get full information on participants that + * contribute to threads. + */ + String RCS_PARTICIPANT_WITH_THREAD_VIEW = "rcs_participant_with_thread_view"; + } + + /** + * The table that {@link android.telephony.ims.RcsMessage} gets persisted to + */ + interface RcsMessageColumns { + /** + * Denotes the type of this message (i.e. + * {@link android.telephony.ims.RcsIncomingMessage} or + * {@link android.telephony.ims.RcsOutgoingMessage} + */ + String MESSAGE_TYPE_COLUMN = "rcs_message_type"; + + /** + * The unique identifier for the message in the database - i.e. the primary key. + */ + String MESSAGE_ID_COLUMN = "rcs_message_row_id"; + + /** + * The globally unique RCS identifier for the message. Please see 4.4.5.2 - GSMA + * RCC.53 (RCS Device API 1.6 Specification) + */ + String GLOBAL_ID_COLUMN = "rcs_message_global_id"; + + /** + * The subscription where this message was sent from/to. + */ + String SUB_ID_COLUMN = "sub_id"; + + /** + * The sending status of the message. + * @see android.telephony.ims.RcsMessage.RcsMessageStatus + */ + String STATUS_COLUMN = "status"; + + /** + * The creation timestamp of the message. + */ + String ORIGINATION_TIMESTAMP_COLUMN = "origination_timestamp"; + + /** + * The text content of the message. + */ + String MESSAGE_TEXT_COLUMN = "rcs_text"; + + /** + * The latitude content of the message, if it contains a location. + */ + String LATITUDE_COLUMN = "latitude"; + + /** + * The longitude content of the message, if it contains a location. + */ + String LONGITUDE_COLUMN = "longitude"; + } + + /** + * The table that additional information of {@link android.telephony.ims.RcsIncomingMessage} + * gets persisted to. + */ + interface RcsIncomingMessageColumns extends RcsMessageColumns { + /** + The path that should be used for referring to + * {@link android.telephony.ims.RcsIncomingMessage}s in + * {@link com.android.providers.telephony.RcsProvider} URIs. + */ + String INCOMING_MESSAGE_URI_PART = "incoming_message"; + + /** + * The URI to query incoming messages through + * {@link com.android.providers.telephony.RcsProvider} + */ + Uri INCOMING_MESSAGE_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY, + INCOMING_MESSAGE_URI_PART); + + /** + * The ID of the {@link android.telephony.ims.RcsParticipant} that sent this message + */ + String SENDER_PARTICIPANT_ID_COLUMN = "sender_participant"; + + /** + * The timestamp of arrival for this message. + */ + String ARRIVAL_TIMESTAMP_COLUMN = "arrival_timestamp"; + + /** + * The time when the recipient has read this message. + */ + String SEEN_TIMESTAMP_COLUMN = "seen_timestamp"; + } + + /** + * The table that additional information of {@link android.telephony.ims.RcsOutgoingMessage} + * gets persisted to. + */ + interface RcsOutgoingMessageColumns extends RcsMessageColumns { + /** + * The path that should be used for referring to + * {@link android.telephony.ims.RcsOutgoingMessage}s in + * {@link com.android.providers.telephony.RcsProvider} URIs. + */ + String OUTGOING_MESSAGE_URI_PART = "outgoing_message"; + + /** + * The URI to query or modify {@link android.telephony.ims.RcsOutgoingMessage}s via the + * content provider + */ + Uri OUTGOING_MESSAGE_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY, + OUTGOING_MESSAGE_URI_PART); + } + + /** + * The delivery information of an {@link android.telephony.ims.RcsOutgoingMessage} + */ + interface RcsMessageDeliveryColumns extends RcsOutgoingMessageColumns { + /** + * The path that should be used for referring to + * {@link android.telephony.ims.RcsOutgoingMessageDelivery}s in + * {@link com.android.providers.telephony.RcsProvider} URIs. + */ + String DELIVERY_URI_PART = "delivery"; + + /** + * The timestamp of delivery of this message. + */ + String DELIVERED_TIMESTAMP_COLUMN = "delivered_timestamp"; + + /** + * The time when the recipient has read this message. + */ + String SEEN_TIMESTAMP_COLUMN = "seen_timestamp"; + } + + /** + * The views that allow querying {@link android.telephony.ims.RcsIncomingMessage} and + * {@link android.telephony.ims.RcsOutgoingMessage} at the same time. + */ + interface RcsUnifiedMessageColumns extends RcsIncomingMessageColumns, + RcsOutgoingMessageColumns { + /** + * The path that is used to query all {@link android.telephony.ims.RcsMessage} in + * {@link com.android.providers.telephony.RcsProvider} URIs. + */ + String UNIFIED_MESSAGE_URI_PART = "message"; + + /** + * The URI to query all types of {@link android.telephony.ims.RcsMessage}s + */ + Uri UNIFIED_MESSAGE_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY, + UNIFIED_MESSAGE_URI_PART); + + /** + * The name of the view that unites rcs_message and rcs_incoming_message tables. + */ + String UNIFIED_INCOMING_MESSAGE_VIEW = "unified_incoming_message_view"; + + /** + * The name of the view that unites rcs_message and rcs_outgoing_message tables. + */ + String UNIFIED_OUTGOING_MESSAGE_VIEW = "unified_outgoing_message_view"; + + /** + * The column that shows from which table the message entry came from. + */ + String MESSAGE_TYPE_COLUMN = "message_type"; + + /** + * Integer returned as a result from a database query that denotes that the message is + * an incoming message + */ + int MESSAGE_TYPE_INCOMING = 1; + + /** + * Integer returned as a result from a database query that denotes that the message is + * an outgoing message + */ + int MESSAGE_TYPE_OUTGOING = 0; + } + + /** + * The table that {@link android.telephony.ims.RcsFileTransferPart} gets persisted to. + */ + interface RcsFileTransferColumns { + /** + * The path that should be used for referring to + * {@link android.telephony.ims.RcsFileTransferPart}s in + * {@link com.android.providers.telephony.RcsProvider} URIs. + */ + String FILE_TRANSFER_URI_PART = "file_transfer"; + + /** + * The URI to query or modify {@link android.telephony.ims.RcsFileTransferPart}s via the + * content provider + */ + Uri FILE_TRANSFER_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY, + FILE_TRANSFER_URI_PART); + + /** + * The globally unique file transfer ID for this RCS file transfer. + */ + String FILE_TRANSFER_ID_COLUMN = "rcs_file_transfer_id"; + + /** + * The RCS session ID for this file transfer. The ID is implementation dependent but + * should be unique. + */ + String SESSION_ID_COLUMN = "session_id"; + + /** + * The URI that points to the content of this file transfer + */ + String CONTENT_URI_COLUMN = "content_uri"; + + /** + * The file type of this file transfer in bytes. The validity of types is not enforced + * in {@link android.telephony.ims.RcsMessageStore} APIs. + */ + String CONTENT_TYPE_COLUMN = "content_type"; + + /** + * The size of the file transfer in bytes. + */ + String FILE_SIZE_COLUMN = "file_size"; + + /** + * Number of bytes that was successfully transmitted for this file transfer + */ + String SUCCESSFULLY_TRANSFERRED_BYTES = "transfer_offset"; + + /** + * The status of this file transfer + * @see android.telephony.ims.RcsFileTransferPart.RcsFileTransferStatus + */ + String TRANSFER_STATUS_COLUMN = "transfer_status"; + + /** + * The on-screen width of the file transfer, if it contains multi-media + */ + String WIDTH_COLUMN = "width"; + + /** + * The on-screen height of the file transfer, if it contains multi-media + */ + String HEIGHT_COLUMN = "height"; + + /** + * The duration of the content in milliseconds if this file transfer contains + * multi-media + */ + String DURATION_MILLIS_COLUMN = "duration"; + + /** + * The URI to the preview of the content of this file transfer + */ + String PREVIEW_URI_COLUMN = "preview_uri"; + + /** + * The type of the preview of the content of this file transfer. The validity of types + * is not enforced in {@link android.telephony.ims.RcsMessageStore} APIs. + */ + String PREVIEW_TYPE_COLUMN = "preview_type"; + } + + /** + * The table that holds the information for + * {@link android.telephony.ims.RcsGroupThreadEvent} and its subclasses. + */ + interface RcsThreadEventColumns { + /** + * The string used in the {@link com.android.providers.telephony.RcsProvider} URI to + * refer to participant joined events (example URI: + * {@code content://rcs/group_thread/3/participant_joined_event}) + */ + String PARTICIPANT_JOINED_URI_PART = "participant_joined_event"; + + /** + * The string used in the {@link com.android.providers.telephony.RcsProvider} URI to + * refer to participant left events. (example URI: + * {@code content://rcs/group_thread/3/participant_left_event/4}) + */ + String PARTICIPANT_LEFT_URI_PART = "participant_left_event"; + + /** + * The string used in the {@link com.android.providers.telephony.RcsProvider} URI to + * refer to name changed events. (example URI: + * {@code content://rcs/group_thread/3/name_changed_event}) + */ + String NAME_CHANGED_URI_PART = "name_changed_event"; + + /** + * The string used in the {@link com.android.providers.telephony.RcsProvider} URI to + * refer to icon changed events. (example URI: + * {@code content://rcs/group_thread/3/icon_changed_event}) + */ + String ICON_CHANGED_URI_PART = "icon_changed_event"; + + /** + * The unique ID of this event in the database, i.e. the primary key + */ + String EVENT_ID_COLUMN = "event_id"; + + /** + * The type of this event + * + * @see RcsEventTypes + */ + String EVENT_TYPE_COLUMN = "event_type"; + + /** + * The timestamp in milliseconds of when this event happened + */ + String TIMESTAMP_COLUMN = "origination_timestamp"; + + /** + * The participant that generated this event + */ + String SOURCE_PARTICIPANT_ID_COLUMN = "source_participant"; + + /** + * The receiving participant of this event if this was an + * {@link android.telephony.ims.RcsGroupThreadParticipantJoinedEvent} or + * {@link android.telephony.ims.RcsGroupThreadParticipantLeftEvent} + */ + String DESTINATION_PARTICIPANT_ID_COLUMN = "destination_participant"; + + /** + * The URI for the new icon of the group thread if this was an + * {@link android.telephony.ims.RcsGroupThreadIconChangedEvent} + */ + String NEW_ICON_URI_COLUMN = "new_icon_uri"; + + /** + * The URI for the new name of the group thread if this was an + * {@link android.telephony.ims.RcsGroupThreadNameChangedEvent} + */ + String NEW_NAME_COLUMN = "new_name"; + } + + /** + * The table that {@link android.telephony.ims.RcsParticipantAliasChangedEvent} gets + * persisted to + */ + interface RcsParticipantEventColumns { + /** + * The path that should be used for referring to + * {@link android.telephony.ims.RcsParticipantAliasChangedEvent}s in + * {@link com.android.providers.telephony.RcsProvider} URIs. + */ + String ALIAS_CHANGE_EVENT_URI_PART = "alias_change_event"; + + /** + * The new alias of the participant + */ + String NEW_ALIAS_COLUMN = "new_alias"; + } + + /** + * These values are used in {@link com.android.providers.telephony.RcsProvider} to determine + * what kind of event is present in the storage. + */ + interface RcsEventTypes { + /** + * Integer constant that is stored in the + * {@link com.android.providers.telephony.RcsProvider} database that denotes the event + * is of type {@link android.telephony.ims.RcsParticipantAliasChangedEvent} + */ + int PARTICIPANT_ALIAS_CHANGED_EVENT_TYPE = 1; + + /** + * Integer constant that is stored in the + * {@link com.android.providers.telephony.RcsProvider} database that denotes the event + * is of type {@link android.telephony.ims.RcsGroupThreadParticipantJoinedEvent} + */ + int PARTICIPANT_JOINED_EVENT_TYPE = 2; + + /** + * Integer constant that is stored in the + * {@link com.android.providers.telephony.RcsProvider} database that denotes the event + * is of type {@link android.telephony.ims.RcsGroupThreadParticipantLeftEvent} + */ + int PARTICIPANT_LEFT_EVENT_TYPE = 4; + + /** + * Integer constant that is stored in the + * {@link com.android.providers.telephony.RcsProvider} database that denotes the event + * is of type {@link android.telephony.ims.RcsGroupThreadIconChangedEvent} + */ + int ICON_CHANGED_EVENT_TYPE = 8; + + /** + * Integer constant that is stored in the + * {@link com.android.providers.telephony.RcsProvider} database that denotes the event + * is of type {@link android.telephony.ims.RcsGroupThreadNameChangedEvent} + */ + int NAME_CHANGED_EVENT_TYPE = 16; + } + + /** + * The view that allows unified querying across all events + */ + interface RcsUnifiedEventHelper extends RcsParticipantEventColumns, RcsThreadEventColumns { + /** + * The path that should be used for referring to + * {@link android.telephony.ims.RcsEvent}s in + * {@link com.android.providers.telephony.RcsProvider} URIs. + */ + String RCS_EVENT_QUERY_URI_PATH = "event"; + + /** + * The URI to query {@link android.telephony.ims.RcsEvent}s via the content provider. + */ + Uri RCS_EVENT_QUERY_URI = Uri.withAppendedPath(CONTENT_AND_AUTHORITY, + RCS_EVENT_QUERY_URI_PATH); + } + } + + /** * Contains all MMS messages. */ public static final class Mms implements BaseMmsColumns { diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 739589412f0b..eab536f94290 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -1326,13 +1326,15 @@ public class TelephonyManager { "android.intent.action.DATA_STALL_DETECTED"; /** - * A service action that identifies a {@link android.app.SmsAppService} subclass in the + * A service action that identifies + * a {@link android.service.carrier.CarrierMessagingClientService} subclass in the * AndroidManifest.xml. * - * <p>See {@link android.app.SmsAppService} for the details. + * <p>See {@link android.service.carrier.CarrierMessagingClientService} for the details. */ @SdkConstant(SdkConstantType.SERVICE_ACTION) - public static final String ACTION_SMS_APP_SERVICE = "android.telephony.action.SMS_APP_SERVICE"; + public static final String ACTION_CARRIER_MESSAGING_CLIENT_SERVICE = + "android.telephony.action.CARRIER_MESSAGING_CLIENT_SERVICE"; /** * An int extra used with {@link #ACTION_DATA_STALL_DETECTED} to indicate the diff --git a/telephony/java/android/telephony/ims/Rcs1To1Thread.java b/telephony/java/android/telephony/ims/Rcs1To1Thread.java index 709b3aa0f804..cc28ee0758c2 100644 --- a/telephony/java/android/telephony/ims/Rcs1To1Thread.java +++ b/telephony/java/android/telephony/ims/Rcs1To1Thread.java @@ -15,42 +15,72 @@ */ package android.telephony.ims; -import android.os.Parcel; +import android.annotation.NonNull; +import android.annotation.WorkerThread; /** * Rcs1To1Thread represents a single RCS conversation thread with a total of two - * {@link RcsParticipant}s. - * @hide - TODO(sahinc) make this public + * {@link RcsParticipant}s. Please see Section 5 (1-to-1 Messaging) - GSMA RCC.71 (RCS Universal + * Profile Service Definition Document) + * + * @hide - TODO(109759350) make this public */ public class Rcs1To1Thread extends RcsThread { + private int mThreadId; + + /** + * Public constructor only for RcsMessageStoreController to initialize new threads. + * + * @hide + */ public Rcs1To1Thread(int threadId) { super(threadId); + mThreadId = threadId; } - public static final Creator<Rcs1To1Thread> CREATOR = new Creator<Rcs1To1Thread>() { - @Override - public Rcs1To1Thread createFromParcel(Parcel in) { - return new Rcs1To1Thread(in); - } - - @Override - public Rcs1To1Thread[] newArray(int size) { - return new Rcs1To1Thread[size]; - } - }; + /** + * @return Returns {@code false} as this is always a 1 to 1 thread. + */ + @Override + public boolean isGroup() { + return false; + } - protected Rcs1To1Thread(Parcel in) { - super(in); + /** + * {@link Rcs1To1Thread}s can fall back to SMS as a back-up protocol. This function returns the + * thread id to be used to query {@code content://mms-sms/conversation/#} to get the fallback + * thread. + * + * @return The thread id to be used to query the mms-sms authority + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public long getFallbackThreadId() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.get1To1ThreadFallbackThreadId(mThreadId)); } - @Override - public int describeContents() { - return 0; + /** + * If the RCS client allows falling back to SMS, it needs to create an MMS-SMS thread in the + * SMS/MMS Provider( see {@link android.provider.Telephony.MmsSms#CONTENT_CONVERSATIONS_URI}. + * Use this function to link the {@link Rcs1To1Thread} to the MMS-SMS thread. This function + * also updates the storage. + * + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setFallbackThreadId(long fallbackThreadId) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn( + iRcs -> iRcs.set1To1ThreadFallbackThreadId(mThreadId, fallbackThreadId)); } - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeInt(RCS_1_TO_1_TYPE); - super.writeToParcel(dest, flags); + /** + * @return Returns the {@link RcsParticipant} that receives the messages sent in this thread. + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @NonNull + @WorkerThread + public RcsParticipant getRecipient() throws RcsMessageStoreException { + return new RcsParticipant( + RcsControllerCall.call(iRcs -> iRcs.get1To1ThreadOtherParticipantId(mThreadId))); } } diff --git a/telephony/java/android/telephony/ims/RcsControllerCall.java b/telephony/java/android/telephony/ims/RcsControllerCall.java new file mode 100644 index 000000000000..5512c4c7b19d --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsControllerCall.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2019 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 android.telephony.ims; + +import android.content.Context; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.telephony.ims.aidl.IRcs; + +/** + * A wrapper class around RPC calls that {@link RcsMessageStore} APIs to minimize boilerplate code. + * + * @hide - not meant for public use + */ +class RcsControllerCall { + static <R> R call(RcsServiceCall<R> serviceCall) throws RcsMessageStoreException { + IRcs iRcs = IRcs.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_RCS_SERVICE)); + if (iRcs == null) { + throw new RcsMessageStoreException("Could not connect to RCS storage service"); + } + + try { + return serviceCall.methodOnIRcs(iRcs); + } catch (RemoteException exception) { + throw new RcsMessageStoreException(exception.getMessage()); + } + } + + static void callWithNoReturn(RcsServiceCallWithNoReturn serviceCall) + throws RcsMessageStoreException { + IRcs iRcs = IRcs.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_RCS_SERVICE)); + if (iRcs == null) { + throw new RcsMessageStoreException("Could not connect to RCS storage service"); + } + + try { + serviceCall.methodOnIRcs(iRcs); + } catch (RemoteException exception) { + throw new RcsMessageStoreException(exception.getMessage()); + } + } + + interface RcsServiceCall<R> { + R methodOnIRcs(IRcs iRcs) throws RemoteException; + } + + interface RcsServiceCallWithNoReturn { + void methodOnIRcs(IRcs iRcs) throws RemoteException; + } +} diff --git a/telephony/java/android/telephony/ims/RcsPart.aidl b/telephony/java/android/telephony/ims/RcsEvent.aidl index 8b8077d57676..08974e0a771c 100644 --- a/telephony/java/android/telephony/ims/RcsPart.aidl +++ b/telephony/java/android/telephony/ims/RcsEvent.aidl @@ -17,4 +17,4 @@ package android.telephony.ims; -parcelable RcsPart; +parcelable RcsEvent; diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryContinuationToken.java b/telephony/java/android/telephony/ims/RcsEvent.java index 931e93dc8bf1..744ac76a7828 100644 --- a/telephony/java/android/telephony/ims/RcsThreadQueryContinuationToken.java +++ b/telephony/java/android/telephony/ims/RcsEvent.java @@ -13,40 +13,48 @@ * See the License for the specific language governing permissions and * limitations under the License. */ - package android.telephony.ims; import android.os.Parcel; import android.os.Parcelable; /** - * A continuation token to provide for {@link RcsMessageStore#getRcsThreads}. Use this token to - * break large queries into manageable chunks - * @hide - TODO make this public + * The base class for events that can happen on {@link RcsParticipant}s and {@link RcsThread}s. + * @hide - TODO(109759350) make this public */ -public class RcsThreadQueryContinuationToken implements Parcelable { - protected RcsThreadQueryContinuationToken(Parcel in) { +public abstract class RcsEvent implements Parcelable { + protected long mTimestamp; + + protected RcsEvent(long timestamp) { + mTimestamp = timestamp; } - public static final Creator<RcsThreadQueryContinuationToken> CREATOR = - new Creator<RcsThreadQueryContinuationToken>() { - @Override - public RcsThreadQueryContinuationToken createFromParcel(Parcel in) { - return new RcsThreadQueryContinuationToken(in); - } + /** + * @return Returns the time of when this event happened. The timestamp is defined as + * milliseconds passed after midnight, January 1, 1970 UTC + */ + public long getTimestamp() { + return mTimestamp; + } - @Override - public RcsThreadQueryContinuationToken[] newArray(int size) { - return new RcsThreadQueryContinuationToken[size]; - } - }; + /** + * Persists the event to the data store + * + * @hide + */ + abstract void persist() throws RcsMessageStoreException; - @Override - public int describeContents() { - return 0; + RcsEvent(Parcel in) { + mTimestamp = in.readLong(); } @Override public void writeToParcel(Parcel dest, int flags) { + dest.writeLong(mTimestamp); + } + + @Override + public int describeContents() { + return 0; } } diff --git a/telephony/java/android/telephony/ims/RcsGroupThread.aidl b/telephony/java/android/telephony/ims/RcsEventQueryParameters.aidl index c4ce5299e512..9a3600bbae90 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThread.aidl +++ b/telephony/java/android/telephony/ims/RcsEventQueryParameters.aidl @@ -17,4 +17,4 @@ package android.telephony.ims; -parcelable RcsGroupThread; +parcelable RcsEventQueryParameters; diff --git a/telephony/java/android/telephony/ims/RcsEventQueryParameters.java b/telephony/java/android/telephony/ims/RcsEventQueryParameters.java new file mode 100644 index 000000000000..6aee56f56f45 --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsEventQueryParameters.java @@ -0,0 +1,322 @@ +/* + * Copyright (C) 2019 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 android.telephony.ims; + +import static android.provider.Telephony.RcsColumns.RcsEventTypes.ICON_CHANGED_EVENT_TYPE; +import static android.provider.Telephony.RcsColumns.RcsEventTypes.NAME_CHANGED_EVENT_TYPE; +import static android.provider.Telephony.RcsColumns.RcsEventTypes.PARTICIPANT_ALIAS_CHANGED_EVENT_TYPE; +import static android.provider.Telephony.RcsColumns.RcsEventTypes.PARTICIPANT_JOINED_EVENT_TYPE; +import static android.provider.Telephony.RcsColumns.RcsEventTypes.PARTICIPANT_LEFT_EVENT_TYPE; + +import android.annotation.CheckResult; +import android.annotation.IntDef; +import android.annotation.IntRange; +import android.annotation.NonNull; +import android.os.Parcel; +import android.os.Parcelable; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.security.InvalidParameterException; + +/** + * The parameters to pass into + * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} in order to select a + * subset of {@link RcsEvent}s present in the message store. + * + * @hide TODO - make the Builder and builder() public. The rest should stay internal only. + */ +public class RcsEventQueryParameters implements Parcelable { + /** + * Flag to be used with {@link Builder#setEventType(int)} to make + * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} return all types of + * {@link RcsEvent}s + */ + public static final int ALL_EVENTS = -1; + + /** + * Flag to be used with {@link Builder#setEventType(int)} to make + * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} return sub-types of + * {@link RcsGroupThreadEvent}s + */ + public static final int ALL_GROUP_THREAD_EVENTS = 0; + + /** + * Flag to be used with {@link Builder#setEventType(int)} to make + * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} return only + * {@link RcsParticipantAliasChangedEvent}s + */ + public static final int PARTICIPANT_ALIAS_CHANGED_EVENT = + PARTICIPANT_ALIAS_CHANGED_EVENT_TYPE; + + /** + * Flag to be used with {@link Builder#setEventType(int)} to make + * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} return only + * {@link RcsGroupThreadParticipantJoinedEvent}s + */ + public static final int GROUP_THREAD_PARTICIPANT_JOINED_EVENT = + PARTICIPANT_JOINED_EVENT_TYPE; + + /** + * Flag to be used with {@link Builder#setEventType(int)} to make + * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} return only + * {@link RcsGroupThreadParticipantLeftEvent}s + */ + public static final int GROUP_THREAD_PARTICIPANT_LEFT_EVENT = + PARTICIPANT_LEFT_EVENT_TYPE; + + /** + * Flag to be used with {@link Builder#setEventType(int)} to make + * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} return only + * {@link RcsGroupThreadNameChangedEvent}s + */ + public static final int GROUP_THREAD_NAME_CHANGED_EVENT = NAME_CHANGED_EVENT_TYPE; + + /** + * Flag to be used with {@link Builder#setEventType(int)} to make + * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} return only + * {@link RcsGroupThreadIconChangedEvent}s + */ + public static final int GROUP_THREAD_ICON_CHANGED_EVENT = ICON_CHANGED_EVENT_TYPE; + + @Retention(RetentionPolicy.SOURCE) + @IntDef({ALL_EVENTS, ALL_GROUP_THREAD_EVENTS, PARTICIPANT_ALIAS_CHANGED_EVENT, + GROUP_THREAD_PARTICIPANT_JOINED_EVENT, GROUP_THREAD_PARTICIPANT_LEFT_EVENT, + GROUP_THREAD_NAME_CHANGED_EVENT, GROUP_THREAD_ICON_CHANGED_EVENT}) + public @interface EventType { + } + + /** + * Flag to be used with {@link Builder#setSortProperty(int)} that makes the result set sorted + * in the order of creation for faster query results. + */ + public static final int SORT_BY_CREATION_ORDER = 0; + + /** + * Flag to be used with {@link Builder#setSortProperty(int)} that makes the result set sorted + * with respect to {@link RcsEvent#getTimestamp()} + */ + public static final int SORT_BY_TIMESTAMP = 1; + + @Retention(RetentionPolicy.SOURCE) + @IntDef({SORT_BY_CREATION_ORDER, SORT_BY_TIMESTAMP}) + public @interface SortingProperty { + } + + /** + * The key to pass into a Bundle, for usage in RcsProvider.query(Bundle) + * @hide - not meant for public use + */ + public static final String EVENT_QUERY_PARAMETERS_KEY = "event_query_parameters"; + + // Which types of events the results should be limited to + private @EventType int mEventType; + // The property which the results should be sorted against + private int mSortingProperty; + // Whether the results should be sorted in ascending order + private boolean mIsAscending; + // The number of results that should be returned with this query + private int mLimit; + // The thread that the results are limited to + private int mThreadId; + + RcsEventQueryParameters(@EventType int eventType, int threadId, + @SortingProperty int sortingProperty, boolean isAscending, int limit) { + mEventType = eventType; + mSortingProperty = sortingProperty; + mIsAscending = isAscending; + mLimit = limit; + mThreadId = threadId; + } + + /** + * @return Returns the type of {@link RcsEvent}s that this {@link RcsEventQueryParameters} is + * set to query for. + */ + public @EventType int getEventType() { + return mEventType; + } + + /** + * @return Returns the type of {@link RcsEvent}s that this {@link RcsEventQueryParameters} is + * set to query for. + */ + public int getLimit() { + return mLimit; + } + + /** + * @return Returns the property where the results should be sorted against. + * @see SortingProperty + */ + public int getSortingProperty() { + return mSortingProperty; + } + + /** + * @return Returns {@code true} if the result set will be sorted in ascending order, + * {@code false} if it will be sorted in descending order. + */ + public boolean getSortDirection() { + return mIsAscending; + } + + /** + * @return Returns the ID of the {@link RcsGroupThread} that the results are limited to. As this + * API exposes an ID, it should stay hidden. + * + * @hide + */ + public int getThreadId() { + return mThreadId; + } + + /** + * A helper class to build the {@link RcsEventQueryParameters}. + */ + public static class Builder { + private @EventType int mEventType; + private @SortingProperty int mSortingProperty; + private boolean mIsAscending; + private int mLimit = 100; + private int mThreadId; + + /** + * Creates a new builder for {@link RcsEventQueryParameters} to be used in + * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} + */ + public Builder() { + // empty implementation + } + + /** + * Desired number of events to be returned from the query. Passing in 0 will return all + * existing events at once. The limit defaults to 100. + * + * @param limit The number to limit the query result to. + * @return The same instance of the builder to chain parameters. + * @throws InvalidParameterException If the given limit is negative. + */ + @CheckResult + public Builder setResultLimit(@IntRange(from = 0) int limit) + throws InvalidParameterException { + if (limit < 0) { + throw new InvalidParameterException("The query limit must be non-negative"); + } + + mLimit = limit; + return this; + } + + /** + * Sets the type of events to be returned from the query. + * + * @param eventType The type of event to be returned. + * @return The same instance of the builder to chain parameters. + */ + @CheckResult + public Builder setEventType(@EventType int eventType) { + mEventType = eventType; + return this; + } + + /** + * Sets the property where the results should be sorted against. Defaults to + * {@link RcsEventQueryParameters.SortingProperty#SORT_BY_CREATION_ORDER} + * + * @param sortingProperty against which property the results should be sorted + * @return The same instance of the builder to chain parameters. + */ + @CheckResult + public Builder setSortProperty(@SortingProperty int sortingProperty) { + mSortingProperty = sortingProperty; + return this; + } + + /** + * Sets whether the results should be sorted ascending or descending + * + * @param isAscending whether the results should be sorted ascending + * @return The same instance of the builder to chain parameters. + */ + @CheckResult + public Builder setSortDirection(boolean isAscending) { + mIsAscending = isAscending; + return this; + } + + /** + * Limits the results to the given {@link RcsGroupThread}. Setting this value prevents + * returning any instances of {@link RcsParticipantAliasChangedEvent}. + * + * @param groupThread The thread to limit the results to. + * @return The same instance of the builder to chain parameters. + */ + @CheckResult + public Builder setGroupThread(@NonNull RcsGroupThread groupThread) { + mThreadId = groupThread.getThreadId(); + return this; + } + + /** + * Builds the {@link RcsEventQueryParameters} to use in + * {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} + * + * @return An instance of {@link RcsEventQueryParameters} to use with the event query. + */ + public RcsEventQueryParameters build() { + return new RcsEventQueryParameters(mEventType, mThreadId, mSortingProperty, + mIsAscending, mLimit); + } + } + + protected RcsEventQueryParameters(Parcel in) { + mEventType = in.readInt(); + mThreadId = in.readInt(); + mSortingProperty = in.readInt(); + mIsAscending = in.readBoolean(); + mLimit = in.readInt(); + } + + public static final Creator<RcsEventQueryParameters> CREATOR = + new Creator<RcsEventQueryParameters>() { + @Override + public RcsEventQueryParameters createFromParcel(Parcel in) { + return new RcsEventQueryParameters(in); + } + + @Override + public RcsEventQueryParameters[] newArray(int size) { + return new RcsEventQueryParameters[size]; + } + }; + + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(mEventType); + dest.writeInt(mThreadId); + dest.writeInt(mSortingProperty); + dest.writeBoolean(mIsAscending); + dest.writeInt(mLimit); + } +} diff --git a/telephony/java/android/telephony/ims/RcsIncomingMessage.aidl b/telephony/java/android/telephony/ims/RcsEventQueryResult.aidl index 6552a82c9072..7d133350973c 100644 --- a/telephony/java/android/telephony/ims/RcsIncomingMessage.aidl +++ b/telephony/java/android/telephony/ims/RcsEventQueryResult.aidl @@ -17,4 +17,4 @@ package android.telephony.ims; -parcelable RcsIncomingMessage; +parcelable RcsEventQueryResult; diff --git a/telephony/java/android/telephony/ims/RcsEventQueryResult.java b/telephony/java/android/telephony/ims/RcsEventQueryResult.java new file mode 100644 index 000000000000..27898ab0d9a2 --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsEventQueryResult.java @@ -0,0 +1,90 @@ +/* + * Copyright (C) 2019 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 android.telephony.ims; + +import android.os.Parcel; +import android.os.Parcelable; + +import java.util.List; + +/** + * The result of a {@link RcsMessageStore#getRcsEvents(RcsEventQueryParameters)} + * call. This class allows getting the token for querying the next batch of events in order to + * prevent handling large amounts of data at once. + * + * @hide + */ +public class RcsEventQueryResult implements Parcelable { + private RcsQueryContinuationToken mContinuationToken; + private List<RcsEvent> mEvents; + + /** + * Internal constructor for {@link com.android.internal.telephony.ims.RcsMessageStoreController} + * to create query results + * + * @hide + */ + public RcsEventQueryResult( + RcsQueryContinuationToken continuationToken, + List<RcsEvent> events) { + mContinuationToken = continuationToken; + mEvents = events; + } + + /** + * Returns a token to call + * {@link RcsMessageStore#getRcsEvents(RcsQueryContinuationToken)} + * to get the next batch of {@link RcsEvent}s. + */ + public RcsQueryContinuationToken getContinuationToken() { + return mContinuationToken; + } + + /** + * Returns all the {@link RcsEvent}s in the current query result. Call {@link + * RcsMessageStore#getRcsEvents(RcsQueryContinuationToken)} to get the next batch + * of {@link RcsEvent}s. + */ + public List<RcsEvent> getEvents() { + return mEvents; + } + + protected RcsEventQueryResult(Parcel in) { + } + + public static final Creator<RcsEventQueryResult> CREATOR = new Creator<RcsEventQueryResult>() { + @Override + public RcsEventQueryResult createFromParcel(Parcel in) { + return new RcsEventQueryResult(in); + } + + @Override + public RcsEventQueryResult[] newArray(int size) { + return new RcsEventQueryResult[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeParcelable(mContinuationToken, flags); + } +} diff --git a/telephony/java/android/telephony/ims/RcsFileTransferCreationParameters.aidl b/telephony/java/android/telephony/ims/RcsFileTransferCreationParameters.aidl new file mode 100644 index 000000000000..5fec021525af --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsFileTransferCreationParameters.aidl @@ -0,0 +1,20 @@ +/* + * + * Copyright 2019, 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 android.telephony.ims; + +parcelable RcsFileTransferCreationParameters; diff --git a/telephony/java/android/telephony/ims/RcsFileTransferCreationParameters.java b/telephony/java/android/telephony/ims/RcsFileTransferCreationParameters.java new file mode 100644 index 000000000000..bd7cb4bc90bc --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsFileTransferCreationParameters.java @@ -0,0 +1,360 @@ +/* + * Copyright (C) 2019 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 android.telephony.ims; + +import android.annotation.CheckResult; +import android.net.Uri; +import android.os.Parcel; +import android.os.Parcelable; + +/** + * Pass an instance of this class to + * {@link RcsMessage#insertFileTransfer(RcsFileTransferCreationParameters)} create an + * {@link RcsFileTransferPart} and save it into storage. + * + * @hide - TODO(109759350) make this public + */ +public class RcsFileTransferCreationParameters implements Parcelable { + private String mRcsFileTransferSessionId; + private Uri mContentUri; + private String mContentMimeType; + private long mFileSize; + private long mTransferOffset; + private int mWidth; + private int mHeight; + private long mMediaDuration; + private Uri mPreviewUri; + private String mPreviewMimeType; + private @RcsFileTransferPart.RcsFileTransferStatus int mFileTransferStatus; + + /** + * @return Returns the globally unique RCS file transfer session ID for the + * {@link RcsFileTransferPart} to be created + */ + public String getRcsFileTransferSessionId() { + return mRcsFileTransferSessionId; + } + + /** + * @return Returns the URI for the content of the {@link RcsFileTransferPart} to be created + */ + public Uri getContentUri() { + return mContentUri; + } + + /** + * @return Returns the MIME type for the content of the {@link RcsFileTransferPart} to be + * created + */ + public String getContentMimeType() { + return mContentMimeType; + } + + /** + * @return Returns the file size in bytes for the {@link RcsFileTransferPart} to be created + */ + public long getFileSize() { + return mFileSize; + } + + /** + * @return Returns the transfer offset for the {@link RcsFileTransferPart} to be created. The + * file transfer offset is defined as how many bytes have been successfully transferred to the + * receiver of this file transfer. + */ + public long getTransferOffset() { + return mTransferOffset; + } + + /** + * @return Returns the width of the {@link RcsFileTransferPart} to be created. The value is in + * pixels. + */ + public int getWidth() { + return mWidth; + } + + /** + * @return Returns the height of the {@link RcsFileTransferPart} to be created. The value is in + * pixels. + */ + public int getHeight() { + return mHeight; + } + + /** + * @return Returns the duration of the {@link RcsFileTransferPart} to be created. + */ + public long getMediaDuration() { + return mMediaDuration; + } + + /** + * @return Returns the URI of the preview of the content of the {@link RcsFileTransferPart} to + * be created. This should only be used for multi-media files. + */ + public Uri getPreviewUri() { + return mPreviewUri; + } + + /** + * @return Returns the MIME type of the preview of the content of the + * {@link RcsFileTransferPart} to be created. This should only be used for multi-media files. + */ + public String getPreviewMimeType() { + return mPreviewMimeType; + } + + /** + * @return Returns the status of the {@link RcsFileTransferPart} to be created. + */ + public @RcsFileTransferPart.RcsFileTransferStatus int getFileTransferStatus() { + return mFileTransferStatus; + } + + /** + * @hide + */ + RcsFileTransferCreationParameters(Builder builder) { + mRcsFileTransferSessionId = builder.mRcsFileTransferSessionId; + mContentUri = builder.mContentUri; + mContentMimeType = builder.mContentMimeType; + mFileSize = builder.mFileSize; + mTransferOffset = builder.mTransferOffset; + mWidth = builder.mWidth; + mHeight = builder.mHeight; + mMediaDuration = builder.mLength; + mPreviewUri = builder.mPreviewUri; + mPreviewMimeType = builder.mPreviewMimeType; + mFileTransferStatus = builder.mFileTransferStatus; + } + + /** + * A builder to create instances of {@link RcsFileTransferCreationParameters} + */ + public class Builder { + private String mRcsFileTransferSessionId; + private Uri mContentUri; + private String mContentMimeType; + private long mFileSize; + private long mTransferOffset; + private int mWidth; + private int mHeight; + private long mLength; + private Uri mPreviewUri; + private String mPreviewMimeType; + private @RcsFileTransferPart.RcsFileTransferStatus int mFileTransferStatus; + + /** + * Sets the globally unique RCS file transfer session ID for the {@link RcsFileTransferPart} + * to be created + * + * @param sessionId The RCS file transfer session ID + * @return The same instance of {@link Builder} to chain methods + */ + @CheckResult + public Builder setFileTransferSessionId(String sessionId) { + mRcsFileTransferSessionId = sessionId; + return this; + } + + /** + * Sets the URI for the content of the {@link RcsFileTransferPart} to be created + * + * @param contentUri The URI for the file + * @return The same instance of {@link Builder} to chain methods + */ + @CheckResult + public Builder setContentUri(Uri contentUri) { + mContentUri = contentUri; + return this; + } + + /** + * Sets the MIME type for the content of the {@link RcsFileTransferPart} to be created + * + * @param contentType The MIME type of the file + * @return The same instance of {@link Builder} to chain methods + */ + @CheckResult + public Builder setContentMimeType(String contentType) { + mContentMimeType = contentType; + return this; + } + + /** + * Sets the file size for the {@link RcsFileTransferPart} to be created + * + * @param size The size of the file in bytes + * @return The same instance of {@link Builder} to chain methods + */ + @CheckResult + public Builder setFileSize(long size) { + mFileSize = size; + return this; + } + + /** + * Sets the transfer offset for the {@link RcsFileTransferPart} to be created. The file + * transfer offset is defined as how many bytes have been successfully transferred to the + * receiver of this file transfer. + * + * @param offset The transfer offset in bytes + * @return The same instance of {@link Builder} to chain methods + */ + @CheckResult + public Builder setTransferOffset(long offset) { + mTransferOffset = offset; + return this; + } + + /** + * Sets the width of the {@link RcsFileTransferPart} to be created. This should only be used + * for multi-media files. + * + * @param width The width of the multi-media file in pixels. + * @return The same instance of {@link Builder} to chain methods + */ + @CheckResult + public Builder setWidth(int width) { + mWidth = width; + return this; + } + + /** + * Sets the height of the {@link RcsFileTransferPart} to be created. This should only be + * used for multi-media files. + * + * @param height The height of the multi-media file in pixels. + * @return The same instance of {@link Builder} to chain methods + */ + @CheckResult + public Builder setHeight(int height) { + mHeight = height; + return this; + } + + /** + * Sets the length of the {@link RcsFileTransferPart} to be created. This should only be + * used for multi-media files such as audio or video. + * + * @param length The length of the multi-media file in milliseconds + * @return The same instance of {@link Builder} to chain methods + */ + @CheckResult + public Builder setMediaDuration(long length) { + mLength = length; + return this; + } + + /** + * Sets the URI of the preview of the content of the {@link RcsFileTransferPart} to be + * created. This should only be used for multi-media files. + * + * @param previewUri The URI of the preview of the file transfer + * @return The same instance of {@link Builder} to chain methods + */ + @CheckResult + public Builder setPreviewUri(Uri previewUri) { + mPreviewUri = previewUri; + return this; + } + + /** + * Sets the MIME type of the preview of the content of the {@link RcsFileTransferPart} to + * be created. This should only be used for multi-media files. + * + * @param previewType The MIME type of the preview of the file transfer + * @return The same instance of {@link Builder} to chain methods + */ + @CheckResult + public Builder setPreviewMimeType(String previewType) { + mPreviewMimeType = previewType; + return this; + } + + /** + * Sets the status of the {@link RcsFileTransferPart} to be created. + * + * @param status The status of the file transfer + * @return The same instance of {@link Builder} to chain methods + */ + @CheckResult + public Builder setFileTransferStatus( + @RcsFileTransferPart.RcsFileTransferStatus int status) { + mFileTransferStatus = status; + return this; + } + + /** + * Creates an instance of {@link RcsFileTransferCreationParameters} with the given + * parameters. + * + * @return The same instance of {@link Builder} to chain methods + * @see RcsMessage#insertFileTransfer(RcsFileTransferCreationParameters) + */ + public RcsFileTransferCreationParameters build() { + return new RcsFileTransferCreationParameters(this); + } + } + + protected RcsFileTransferCreationParameters(Parcel in) { + mRcsFileTransferSessionId = in.readString(); + mContentUri = in.readParcelable(Uri.class.getClassLoader()); + mContentMimeType = in.readString(); + mFileSize = in.readLong(); + mTransferOffset = in.readLong(); + mWidth = in.readInt(); + mHeight = in.readInt(); + mMediaDuration = in.readLong(); + mPreviewUri = in.readParcelable(Uri.class.getClassLoader()); + mPreviewMimeType = in.readString(); + mFileTransferStatus = in.readInt(); + } + + public static final Creator<RcsFileTransferCreationParameters> CREATOR = + new Creator<RcsFileTransferCreationParameters>() { + @Override + public RcsFileTransferCreationParameters createFromParcel(Parcel in) { + return new RcsFileTransferCreationParameters(in); + } + + @Override + public RcsFileTransferCreationParameters[] newArray(int size) { + return new RcsFileTransferCreationParameters[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(mRcsFileTransferSessionId); + dest.writeParcelable(mContentUri, flags); + dest.writeString(mContentMimeType); + dest.writeLong(mFileSize); + dest.writeLong(mTransferOffset); + dest.writeInt(mWidth); + dest.writeInt(mHeight); + dest.writeLong(mMediaDuration); + dest.writeParcelable(mPreviewUri, flags); + dest.writeString(mPreviewMimeType); + dest.writeInt(mFileTransferStatus); + } +} diff --git a/telephony/java/android/telephony/ims/RcsFileTransferPart.java b/telephony/java/android/telephony/ims/RcsFileTransferPart.java index 39c58dd9c15b..2eadc4a1724e 100644 --- a/telephony/java/android/telephony/ims/RcsFileTransferPart.java +++ b/telephony/java/android/telephony/ims/RcsFileTransferPart.java @@ -15,34 +15,346 @@ */ package android.telephony.ims; -import android.os.Parcel; +import android.annotation.IntDef; +import android.annotation.Nullable; +import android.annotation.WorkerThread; +import android.net.Uri; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; /** - * A part of a composite {@link RcsMessage} that holds a file transfer. - * @hide - TODO(sahinc) make this public + * A part of a composite {@link RcsMessage} that holds a file transfer. Please see Section 7 + * (File Transfer) - GSMA RCC.71 (RCS Universal Profile Service Definition Document) + * + * @hide - TODO(109759350) make this public */ -public class RcsFileTransferPart extends RcsPart { - public static final Creator<RcsFileTransferPart> CREATOR = new Creator<RcsFileTransferPart>() { - @Override - public RcsFileTransferPart createFromParcel(Parcel in) { - return new RcsFileTransferPart(in); - } +public class RcsFileTransferPart { + /** + * The status to indicate that this {@link RcsFileTransferPart} is not set yet. + */ + public static final int NOT_SET = 0; + + /** + * The status to indicate that this {@link RcsFileTransferPart} is a draft and is not in the + * process of sending yet. + */ + public static final int DRAFT = 1; + + /** + * The status to indicate that this {@link RcsFileTransferPart} is actively being sent right + * now. + */ + public static final int SENDING = 2; + + /** + * The status to indicate that this {@link RcsFileTransferPart} was being sent, but the user has + * paused the sending process. + */ + public static final int SENDING_PAUSED = 3; + + /** + * The status to indicate that this {@link RcsFileTransferPart} was attempted, but failed to + * send. + */ + public static final int SENDING_FAILED = 4; + + /** + * The status to indicate that this {@link RcsFileTransferPart} is permanently cancelled to + * send. + */ + public static final int SENDING_CANCELLED = 5; + + /** + * The status to indicate that this {@link RcsFileTransferPart} is actively being downloaded + * right now. + */ + public static final int DOWNLOADING = 6; + + /** + * The status to indicate that this {@link RcsFileTransferPart} was being downloaded, but the + * user paused the downloading process. + */ + public static final int DOWNLOADING_PAUSED = 7; + + /** + * The status to indicate that this {@link RcsFileTransferPart} was attempted, but failed to + * download. + */ + public static final int DOWNLOADING_FAILED = 8; + + /** + * The status to indicate that this {@link RcsFileTransferPart} is permanently cancelled to + * download. + */ + public static final int DOWNLOADING_CANCELLED = 9; + + /** + * The status to indicate that this {@link RcsFileTransferPart} was successfully sent or + * received. + */ + public static final int SUCCEEDED = 10; + + @IntDef({ + DRAFT, SENDING, SENDING_PAUSED, SENDING_FAILED, SENDING_CANCELLED, DOWNLOADING, + DOWNLOADING_PAUSED, DOWNLOADING_FAILED, DOWNLOADING_CANCELLED, SUCCEEDED + }) + @Retention(RetentionPolicy.SOURCE) + public @interface RcsFileTransferStatus { + } + + private int mId; + + /** + * @hide + */ + RcsFileTransferPart(int id) { + mId = id; + } + + /** + * @hide + */ + public void setId(int id) { + mId = id; + } + + /** + * @hide + */ + public int getId() { + return mId; + } + + /** + * Sets the RCS file transfer session ID for this file transfer and persists into storage. + * + * @param sessionId The session ID to be used for this file transfer. + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setFileTransferSessionId(String sessionId) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setFileTransferSessionId(mId, sessionId)); + } + + /** + * @return Returns the file transfer session ID. + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public String getFileTransferSessionId() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getFileTransferSessionId(mId)); + } + + /** + * Sets the content URI for this file transfer and persists into storage. The file transfer + * should be reachable using this URI. + * + * @param contentUri The URI for this file transfer. + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setContentUri(Uri contentUri) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setFileTransferContentUri(mId, contentUri)); + } + + /** + * @return Returns the URI for this file transfer + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @Nullable + @WorkerThread + public Uri getContentUri() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getFileTransferContentUri(mId)); + } - @Override - public RcsFileTransferPart[] newArray(int size) { - return new RcsFileTransferPart[size]; - } - }; + /** + * Sets the MIME type of this file transfer and persists into storage. Whether this type + * actually matches any known or supported types is not checked. + * + * @param contentMimeType The type of this file transfer. + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setContentMimeType(String contentMimeType) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn( + iRcs -> iRcs.setFileTransferContentType(mId, contentMimeType)); + } + + /** + * @return Returns the content type of this file transfer + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + @Nullable + public String getContentMimeType() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getFileTransferContentType(mId)); + } + + /** + * Sets the content length (i.e. file size) for this file transfer and persists into storage. + * + * @param contentLength The content length of this file transfer + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setFileSize(long contentLength) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn( + iRcs -> iRcs.setFileTransferFileSize(mId, contentLength)); + } + + /** + * @return Returns the content length (i.e. file size) for this file transfer. + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public long getFileSize() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getFileTransferFileSize(mId)); + } + + /** + * Sets the transfer offset for this file transfer and persists into storage. The file transfer + * offset is defined as how many bytes have been successfully transferred to the receiver of + * this file transfer. + * + * @param transferOffset The transfer offset for this file transfer. + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setTransferOffset(long transferOffset) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn( + iRcs -> iRcs.setFileTransferTransferOffset(mId, transferOffset)); + } + + /** + * @return Returns the number of bytes that have successfully transferred. + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public long getTransferOffset() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getFileTransferTransferOffset(mId)); + } + + /** + * Sets the status for this file transfer and persists into storage. + * + * @param status The status of this file transfer. + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setFileTransferStatus(@RcsFileTransferStatus int status) + throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setFileTransferStatus(mId, status)); + } + + /** + * @return Returns the status of this file transfer. + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public @RcsFileTransferStatus int getFileTransferStatus() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getFileTransferStatus(mId)); + } + + /** + * @return Returns the width of this multi-media message part in pixels. + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public int getWidth() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getFileTransferWidth(mId)); + } + + /** + * Sets the width of this RCS multi-media message part and persists into storage. + * + * @param width The width value in pixels + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setWidth(int width) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setFileTransferWidth(mId, width)); + } + + /** + * @return Returns the height of this multi-media message part in pixels. + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public int getHeight() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getFileTransferHeight(mId)); + } + + /** + * Sets the height of this RCS multi-media message part and persists into storage. + * + * @param height The height value in pixels + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setHeight(int height) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setFileTransferHeight(mId, height)); + } + + /** + * @return Returns the length of this multi-media file (e.g. video or audio) in milliseconds. + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public long getLength() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getFileTransferLength(mId)); + } + + /** + * Sets the length of this multi-media file (e.g. video or audio) and persists into storage. + * + * @param length The length of the file in milliseconds. + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setLength(long length) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setFileTransferLength(mId, length)); + } + + /** + * @return Returns the URI for the preview of this multi-media file (e.g. an image thumbnail for + * a video) + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public Uri getPreviewUri() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getFileTransferPreviewUri(mId)); + } - protected RcsFileTransferPart(Parcel in) { + /** + * Sets the URI for the preview of this multi-media file and persists into storage. + * + * @param previewUri The URI to access to the preview file. + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setPreviewUri(Uri previewUri) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setFileTransferPreviewUri(mId, previewUri)); } - @Override - public int describeContents() { - return 0; + /** + * @return Returns the MIME type of this multi-media file's preview. + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public String getPreviewMimeType() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getFileTransferPreviewType(mId)); } - @Override - public void writeToParcel(Parcel dest, int flags) { + /** + * Sets the MIME type for this multi-media file's preview and persists into storage. + * + * @param previewMimeType The MIME type for the preview + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setPreviewMimeType(String previewMimeType) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn( + iRcs -> iRcs.setFileTransferPreviewType(mId, previewMimeType)); } } diff --git a/telephony/java/android/telephony/ims/RcsGroupThread.java b/telephony/java/android/telephony/ims/RcsGroupThread.java index d954b2d70ac3..6f6258e3d894 100644 --- a/telephony/java/android/telephony/ims/RcsGroupThread.java +++ b/telephony/java/android/telephony/ims/RcsGroupThread.java @@ -15,38 +15,191 @@ */ package android.telephony.ims; -import android.os.Parcel; +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.annotation.WorkerThread; +import android.net.Uri; + +import java.util.Collections; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; /** * RcsGroupThread represents a single RCS conversation thread where {@link RcsParticipant}s can join - * or leave. + * or leave. Please see Section 6 (Group Chat) - GSMA RCC.71 (RCS Universal Profile Service + * Definition Document) + * * @hide - TODO(sahinc) make this public */ public class RcsGroupThread extends RcsThread { - public static final Creator<RcsGroupThread> CREATOR = new Creator<RcsGroupThread>() { - @Override - public RcsGroupThread createFromParcel(Parcel in) { - return new RcsGroupThread(in); + /** + * Public constructor only for RcsMessageStoreController to initialize new threads. + * + * @hide + */ + public RcsGroupThread(int threadId) { + super(threadId); + } + + /** + * @return Returns {@code true} as this is always a group thread + */ + @Override + public boolean isGroup() { + return true; + } + + /** + * @return Returns the given name of this {@link RcsGroupThread}. Please see US6-2 - GSMA RCC.71 + * (RCS Universal Profile Service Definition Document) + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @Nullable + @WorkerThread + public String getGroupName() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getGroupThreadName(mThreadId)); + } + + /** + * Sets the name of this {@link RcsGroupThread} and saves it into storage. Please see US6-2 - + * GSMA RCC.71 (RCS Universal Profile Service Definition Document) + * + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setGroupName(String groupName) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setGroupThreadName(mThreadId, groupName)); + } + + /** + * @return Returns a URI that points to the group's icon {@link RcsGroupThread}. Please see + * US6-2 - GSMA RCC.71 (RCS Universal Profile Service Definition Document) + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @Nullable + public Uri getGroupIcon() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getGroupThreadIcon(mThreadId)); + } + + /** + * Sets the icon for this {@link RcsGroupThread} and saves it into storage. Please see US6-2 - + * GSMA RCC.71 (RCS Universal Profile Service Definition Document) + * + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setGroupIcon(@Nullable Uri groupIcon) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setGroupThreadIcon(mThreadId, groupIcon)); + } + + /** + * @return Returns the owner of this thread or {@code null} if there doesn't exist an owner + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @Nullable + @WorkerThread + public RcsParticipant getOwner() throws RcsMessageStoreException { + return new RcsParticipant(RcsControllerCall.call( + iRcs -> iRcs.getGroupThreadOwner(mThreadId))); + } + + /** + * Sets the owner of this {@link RcsGroupThread} and saves it into storage. This is intended to + * be used for selecting a new owner for a group thread if the owner leaves the thread. The + * owner needs to be in the list of existing participants. + * + * @param participant The new owner of the thread. {@code null} values are allowed. + * @throws RcsMessageStoreException if the operation could not be persisted into storage + */ + @WorkerThread + public void setOwner(@Nullable RcsParticipant participant) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn( + iRcs -> iRcs.setGroupThreadOwner(mThreadId, participant.getId())); + } + + /** + * Adds a new {@link RcsParticipant} to this group thread and persists into storage. If the user + * is actively participating in this {@link RcsGroupThread}, an {@link RcsParticipant} on behalf + * of them should be added. + * + * @param participant The new participant to be added to the thread. + * @throws RcsMessageStoreException if the operation could not be persisted into storage + */ + @WorkerThread + public void addParticipant(@NonNull RcsParticipant participant) + throws RcsMessageStoreException { + if (participant == null) { + return; } - @Override - public RcsGroupThread[] newArray(int size) { - return new RcsGroupThread[size]; + RcsControllerCall.callWithNoReturn( + iRcs -> iRcs.addParticipantToGroupThread(mThreadId, participant.getId())); + } + + /** + * Removes an {@link RcsParticipant} from this group thread and persists into storage. If the + * removed participant was the owner of this group, the owner will become null. + * + * @throws RcsMessageStoreException if the operation could not be persisted into storage + */ + @WorkerThread + public void removeParticipant(@NonNull RcsParticipant participant) + throws RcsMessageStoreException { + if (participant == null) { + return; } - }; - protected RcsGroupThread(Parcel in) { - super(in); + RcsControllerCall.callWithNoReturn( + iRcs -> iRcs.removeParticipantFromGroupThread(mThreadId, participant.getId())); } - @Override - public int describeContents() { - return 0; + /** + * Returns the set of {@link RcsParticipant}s that contribute to this group thread. The + * returned set does not support modifications, please use + * {@link RcsGroupThread#addParticipant(RcsParticipant)} + * and {@link RcsGroupThread#removeParticipant(RcsParticipant)} instead. + * + * @return the immutable set of {@link RcsParticipant} in this group thread. + * @throws RcsMessageStoreException if the values could not be read from the storage + */ + @WorkerThread + @NonNull + public Set<RcsParticipant> getParticipants() throws RcsMessageStoreException { + RcsParticipantQueryParameters queryParameters = + new RcsParticipantQueryParameters.Builder().setThread(this).build(); + + RcsParticipantQueryResult queryResult = RcsControllerCall.call( + iRcs -> iRcs.getParticipants(queryParameters)); + + List<RcsParticipant> participantList = queryResult.getParticipants(); + Set<RcsParticipant> participantSet = new LinkedHashSet<>(participantList); + return Collections.unmodifiableSet(participantSet); } - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeInt(RCS_GROUP_TYPE); - super.writeToParcel(dest, flags); + /** + * Returns the conference URI for this {@link RcsGroupThread}. Please see 4.4.5.2 - GSMA RCC.53 + * (RCS Device API 1.6 Specification + * + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @Nullable + @WorkerThread + public Uri getConferenceUri() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getGroupThreadConferenceUri(mThreadId)); + } + + /** + * Sets the conference URI for this {@link RcsGroupThread} and persists into storage. Please see + * 4.4.5.2 - GSMA RCC.53 (RCS Device API 1.6 Specification + * + * @param conferenceUri The URI as String to be used as the conference URI. + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @Nullable + @WorkerThread + public void setConferenceUri(Uri conferenceUri) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn( + iRcs -> iRcs.setGroupThreadConferenceUri(mThreadId, conferenceUri)); } } diff --git a/telephony/java/android/telephony/ims/Rcs1To1Thread.aidl b/telephony/java/android/telephony/ims/RcsGroupThreadEvent.aidl index 9fdc41d2bd5f..77a23722f080 100644 --- a/telephony/java/android/telephony/ims/Rcs1To1Thread.aidl +++ b/telephony/java/android/telephony/ims/RcsGroupThreadEvent.aidl @@ -1,5 +1,4 @@ /* - * * Copyright 2019, The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -17,4 +16,4 @@ package android.telephony.ims; -parcelable Rcs1To1Thread; +parcelable RcsGroupThreadEvent; diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadEvent.java new file mode 100644 index 000000000000..a18437b8366e --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsGroupThreadEvent.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.telephony.ims; + +import android.annotation.NonNull; +import android.os.Parcel; + +/** + * An event that happened on an {@link RcsGroupThread}. + * + * @hide - TODO(109759350) make this public + */ +public abstract class RcsGroupThreadEvent extends RcsEvent { + private final int mRcsGroupThreadId; + private final int mOriginatingParticipantId; + + RcsGroupThreadEvent(long timestamp, int rcsGroupThreadId, + int originatingParticipantId) { + super(timestamp); + mRcsGroupThreadId = rcsGroupThreadId; + mOriginatingParticipantId = originatingParticipantId; + } + + /** + * @return Returns the {@link RcsGroupThread} that this event happened on. + */ + @NonNull + public RcsGroupThread getRcsGroupThread() { + return new RcsGroupThread(mRcsGroupThreadId); + } + + /** + * @return Returns the {@link RcsParticipant} that performed the event. + */ + @NonNull + public RcsParticipant getOriginatingParticipant() { + return new RcsParticipant(mOriginatingParticipantId); + } + + RcsGroupThreadEvent(Parcel in) { + super(in); + mRcsGroupThreadId = in.readInt(); + mOriginatingParticipantId = in.readInt(); + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeInt(mRcsGroupThreadId); + dest.writeInt(mOriginatingParticipantId); + } +} diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.aidl b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.aidl new file mode 100644 index 000000000000..daea7922f3df --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.aidl @@ -0,0 +1,19 @@ +/* + * Copyright 2019, 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 android.telephony.ims; + +parcelable RcsGroupThreadIconChangedEvent; diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.java new file mode 100644 index 000000000000..7beed3ba7ec2 --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsGroupThreadIconChangedEvent.java @@ -0,0 +1,109 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.telephony.ims; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.net.Uri; +import android.os.Parcel; + +/** + * An event that indicates an {@link RcsGroupThread}'s icon was changed. Please see R6-2-5 - GSMA + * RCC.71 (RCS Universal Profile Service Definition Document) + * + * @hide - TODO(109759350) make this public + */ +public class RcsGroupThreadIconChangedEvent extends RcsGroupThreadEvent { + private final Uri mNewIcon; + + /** + * Creates a new {@link RcsGroupThreadIconChangedEvent}. This event is not persisted into + * storage until {@link RcsMessageStore#persistRcsEvent(RcsEvent)} is called. + * + * @param timestamp The timestamp of when this event happened, in milliseconds passed after + * midnight, January 1st, 1970 UTC + * @param rcsGroupThread The {@link RcsGroupThread} that this event happened on + * @param originatingParticipant The {@link RcsParticipant} that changed the + * {@link RcsGroupThread}'s icon. + * @param newIcon {@link Uri} to the new icon of this {@link RcsGroupThread} + * @see RcsMessageStore#persistRcsEvent(RcsEvent) + */ + public RcsGroupThreadIconChangedEvent(long timestamp, @NonNull RcsGroupThread rcsGroupThread, + @NonNull RcsParticipant originatingParticipant, @Nullable Uri newIcon) { + super(timestamp, rcsGroupThread.getThreadId(), originatingParticipant.getId()); + mNewIcon = newIcon; + } + + /** + * @hide - internal constructor for queries + */ + public RcsGroupThreadIconChangedEvent(long timestamp, int rcsGroupThreadId, + int originatingParticipantId, @Nullable Uri newIcon) { + super(timestamp, rcsGroupThreadId, originatingParticipantId); + mNewIcon = newIcon; + } + + /** + * @return Returns the {@link Uri} to the icon of the {@link RcsGroupThread} after this + * {@link RcsGroupThreadIconChangedEvent} occured. + */ + @Nullable + public Uri getNewIcon() { + return mNewIcon; + } + + /** + * Persists the event to the data store. + * + * @hide - not meant for public use. + */ + @Override + public void persist() throws RcsMessageStoreException { + // TODO ensure failure throws + RcsControllerCall.call(iRcs -> iRcs.createGroupThreadIconChangedEvent( + getTimestamp(), getRcsGroupThread().getThreadId(), + getOriginatingParticipant().getId(), mNewIcon)); + } + + public static final Creator<RcsGroupThreadIconChangedEvent> CREATOR = + new Creator<RcsGroupThreadIconChangedEvent>() { + @Override + public RcsGroupThreadIconChangedEvent createFromParcel(Parcel in) { + return new RcsGroupThreadIconChangedEvent(in); + } + + @Override + public RcsGroupThreadIconChangedEvent[] newArray(int size) { + return new RcsGroupThreadIconChangedEvent[size]; + } + }; + + protected RcsGroupThreadIconChangedEvent(Parcel in) { + super(in); + mNewIcon = in.readParcelable(Uri.class.getClassLoader()); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeParcelable(mNewIcon, flags); + } +} diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.aidl b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.aidl new file mode 100644 index 000000000000..3ed9bd11dc70 --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.aidl @@ -0,0 +1,20 @@ +/* + * + * Copyright 2019, 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 android.telephony.ims; + +parcelable RcsGroupThreadNameChangedEvent; diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.java new file mode 100644 index 000000000000..0d2ea4febfbc --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsGroupThreadNameChangedEvent.java @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.telephony.ims; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.os.Parcel; + +/** + * An event that indicates an {@link RcsGroupThread}'s name was changed. Please see R6-2-5 - GSMA + * RCC.71 (RCS Universal Profile Service Definition Document) + * + * @hide - TODO(109759350) make this public + */ +public class RcsGroupThreadNameChangedEvent extends RcsGroupThreadEvent { + private String mNewName; + + /** + * Creates a new {@link RcsGroupThreadNameChangedEvent}. This event is not persisted into + * storage until {@link RcsMessageStore#persistRcsEvent(RcsEvent)} is called. + * + * @param timestamp The timestamp of when this event happened, in milliseconds passed after + * midnight, January 1st, 1970 UTC + * @param rcsGroupThread The {@link RcsGroupThread} that this event happened on + * @param originatingParticipant The {@link RcsParticipant} that changed the + * {@link RcsGroupThread}'s icon. + * @param newName The new name of the {@link RcsGroupThread} + * @see RcsMessageStore#persistRcsEvent(RcsEvent) + */ + public RcsGroupThreadNameChangedEvent(long timestamp, @NonNull RcsGroupThread rcsGroupThread, + @NonNull RcsParticipant originatingParticipant, @Nullable String newName) { + super(timestamp, rcsGroupThread.getThreadId(), originatingParticipant.getId()); + mNewName = newName; + } + + /** + * @hide - internal constructor for queries + */ + public RcsGroupThreadNameChangedEvent(long timestamp, int rcsGroupThreadId, + int originatingParticipantId, @Nullable String newName) { + super(timestamp, rcsGroupThreadId, originatingParticipantId); + mNewName = newName; + } + + /** + * @return Returns the name of this {@link RcsGroupThread} after this + * {@link RcsGroupThreadNameChangedEvent} happened. + */ + @Nullable + public String getNewName() { + return mNewName; + } + + /** + * Persists the event to the data store. + * + * @hide - not meant for public use. + */ + @Override + public void persist() throws RcsMessageStoreException { + RcsControllerCall.call(iRcs -> iRcs.createGroupThreadNameChangedEvent( + getTimestamp(), getRcsGroupThread().getThreadId(), + getOriginatingParticipant().getId(), mNewName)); + } + + public static final Creator<RcsGroupThreadNameChangedEvent> CREATOR = + new Creator<RcsGroupThreadNameChangedEvent>() { + @Override + public RcsGroupThreadNameChangedEvent createFromParcel(Parcel in) { + return new RcsGroupThreadNameChangedEvent(in); + } + + @Override + public RcsGroupThreadNameChangedEvent[] newArray(int size) { + return new RcsGroupThreadNameChangedEvent[size]; + } + }; + + protected RcsGroupThreadNameChangedEvent(Parcel in) { + super(in); + mNewName = in.readString(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeString(mNewName); + } +} diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.aidl b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.aidl new file mode 100644 index 000000000000..420abffa067a --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.aidl @@ -0,0 +1,20 @@ +/* + * + * Copyright 2018, The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.telephony.ims; + +parcelable RcsGroupThreadParticipantJoinedEvent; diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.java new file mode 100644 index 000000000000..2adafc7e1bb1 --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantJoinedEvent.java @@ -0,0 +1,107 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.telephony.ims; + +import android.annotation.NonNull; +import android.os.Parcel; + +/** + * An event that indicates an RCS participant has joined an {@link RcsThread}. Please see US6-3 - + * GSMA RCC.71 (RCS Universal Profile Service Definition Document) + * + * @hide - TODO(109759350) make this public + */ +public class RcsGroupThreadParticipantJoinedEvent extends RcsGroupThreadEvent { + private int mJoinedParticipantId; + + /** + * Creates a new {@link RcsGroupThreadParticipantJoinedEvent}. This event is not persisted into + * storage until {@link RcsMessageStore#persistRcsEvent(RcsEvent)} is called. + * + * @param timestamp The timestamp of when this event happened, in milliseconds passed after + * midnight, January 1st, 1970 UTC + * @param rcsGroupThread The {@link RcsGroupThread} that this event happened on + * @param originatingParticipant The {@link RcsParticipant} that added or invited the new + * {@link RcsParticipant} into the {@link RcsGroupThread} + * @param joinedParticipant The new {@link RcsParticipant} that joined the + * {@link RcsGroupThread} + * @see RcsMessageStore#persistRcsEvent(RcsEvent) + */ + public RcsGroupThreadParticipantJoinedEvent(long timestamp, + @NonNull RcsGroupThread rcsGroupThread, @NonNull RcsParticipant originatingParticipant, + @NonNull RcsParticipant joinedParticipant) { + super(timestamp, rcsGroupThread.getThreadId(), originatingParticipant.getId()); + mJoinedParticipantId = joinedParticipant.getId(); + } + + /** + * @hide - internal constructor for queries + */ + public RcsGroupThreadParticipantJoinedEvent(long timestamp, int rcsGroupThreadId, + int originatingParticipantId, int joinedParticipantId) { + super(timestamp, rcsGroupThreadId, originatingParticipantId); + mJoinedParticipantId = joinedParticipantId; + } + + /** + * @return Returns the {@link RcsParticipant} that joined the associated {@link RcsGroupThread} + */ + public RcsParticipant getJoinedParticipant() { + return new RcsParticipant(mJoinedParticipantId); + } + + /** + * Persists the event to the data store. + * + * @hide - not meant for public use. + */ + @Override + public void persist() throws RcsMessageStoreException { + RcsControllerCall.call( + iRcs -> iRcs.createGroupThreadParticipantJoinedEvent(getTimestamp(), + getRcsGroupThread().getThreadId(), getOriginatingParticipant().getId(), + getJoinedParticipant().getId())); + } + + public static final Creator<RcsGroupThreadParticipantJoinedEvent> CREATOR = + new Creator<RcsGroupThreadParticipantJoinedEvent>() { + @Override + public RcsGroupThreadParticipantJoinedEvent createFromParcel(Parcel in) { + return new RcsGroupThreadParticipantJoinedEvent(in); + } + + @Override + public RcsGroupThreadParticipantJoinedEvent[] newArray(int size) { + return new RcsGroupThreadParticipantJoinedEvent[size]; + } + }; + + protected RcsGroupThreadParticipantJoinedEvent(Parcel in) { + super(in); + mJoinedParticipantId = in.readInt(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeInt(mJoinedParticipantId); + } +} diff --git a/telephony/java/android/telephony/ims/RcsMessage.aidl b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.aidl index b32cd1208c40..ff139ac0ab1e 100644 --- a/telephony/java/android/telephony/ims/RcsMessage.aidl +++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.aidl @@ -17,4 +17,4 @@ package android.telephony.ims; -parcelable RcsMessage; +parcelable RcsGroupThreadParticipantLeftEvent; diff --git a/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.java b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.java new file mode 100644 index 000000000000..87c1852964ee --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsGroupThreadParticipantLeftEvent.java @@ -0,0 +1,106 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.telephony.ims; + +import android.annotation.NonNull; +import android.os.Parcel; + +/** + * An event that indicates an RCS participant has left an {@link RcsThread}. Please see US6-23 - + * GSMA RCC.71 (RCS Universal Profile Service Definition Document) + * + * @hide - TODO(109759350) make this public + */ +public class RcsGroupThreadParticipantLeftEvent extends RcsGroupThreadEvent { + private int mLeavingParticipantId; + + /** + * Creates a new {@link RcsGroupThreadParticipantLeftEvent}. his event is not persisted into + * storage until {@link RcsMessageStore#persistRcsEvent(RcsEvent)} is called. + * + * @param timestamp The timestamp of when this event happened, in milliseconds passed after + * midnight, January 1st, 1970 UTC + * @param rcsGroupThread The {@link RcsGroupThread} that this event happened on + * @param originatingParticipant The {@link RcsParticipant} that removed the + * {@link RcsParticipant} from the {@link RcsGroupThread}. It is + * possible that originatingParticipant and leavingParticipant are + * the same (i.e. {@link RcsParticipant} left the group + * themselves) + * @param leavingParticipant The {@link RcsParticipant} that left the {@link RcsGroupThread} + * @see RcsMessageStore#persistRcsEvent(RcsEvent) + */ + public RcsGroupThreadParticipantLeftEvent(long timestamp, + @NonNull RcsGroupThread rcsGroupThread, @NonNull RcsParticipant originatingParticipant, + @NonNull RcsParticipant leavingParticipant) { + super(timestamp, rcsGroupThread.getThreadId(), originatingParticipant.getId()); + mLeavingParticipantId = leavingParticipant.getId(); + } + + /** + * @hide - internal constructor for queries + */ + public RcsGroupThreadParticipantLeftEvent(long timestamp, int rcsGroupThreadId, + int originatingParticipantId, int leavingParticipantId) { + super(timestamp, rcsGroupThreadId, originatingParticipantId); + mLeavingParticipantId = leavingParticipantId; + } + + /** + * @return Returns the {@link RcsParticipant} that left the associated {@link RcsGroupThread} + * after this {@link RcsGroupThreadParticipantLeftEvent} happened. + */ + @NonNull + public RcsParticipant getLeavingParticipantId() { + return new RcsParticipant(mLeavingParticipantId); + } + + @Override + public void persist() throws RcsMessageStoreException { + RcsControllerCall.call( + iRcs -> iRcs.createGroupThreadParticipantJoinedEvent(getTimestamp(), + getRcsGroupThread().getThreadId(), getOriginatingParticipant().getId(), + getLeavingParticipantId().getId())); + } + + public static final Creator<RcsGroupThreadParticipantLeftEvent> CREATOR = + new Creator<RcsGroupThreadParticipantLeftEvent>() { + @Override + public RcsGroupThreadParticipantLeftEvent createFromParcel(Parcel in) { + return new RcsGroupThreadParticipantLeftEvent(in); + } + + @Override + public RcsGroupThreadParticipantLeftEvent[] newArray(int size) { + return new RcsGroupThreadParticipantLeftEvent[size]; + } + }; + + protected RcsGroupThreadParticipantLeftEvent(Parcel in) { + super(in); + mLeavingParticipantId = in.readInt(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeInt(mLeavingParticipantId); + } +} diff --git a/telephony/java/android/telephony/ims/RcsIncomingMessage.java b/telephony/java/android/telephony/ims/RcsIncomingMessage.java index f39e06db068a..2ea115bd675b 100644 --- a/telephony/java/android/telephony/ims/RcsIncomingMessage.java +++ b/telephony/java/android/telephony/ims/RcsIncomingMessage.java @@ -15,34 +15,82 @@ */ package android.telephony.ims; -import android.os.Parcel; +import android.annotation.WorkerThread; /** * This is a single instance of a message received over RCS. - * @hide - TODO(sahinc) make this public + * + * @hide - TODO(109759350) make this public */ public class RcsIncomingMessage extends RcsMessage { - public static final Creator<RcsIncomingMessage> CREATOR = new Creator<RcsIncomingMessage>() { - @Override - public RcsIncomingMessage createFromParcel(Parcel in) { - return new RcsIncomingMessage(in); - } - - @Override - public RcsIncomingMessage[] newArray(int size) { - return new RcsIncomingMessage[size]; - } - }; - - protected RcsIncomingMessage(Parcel in) { + /** + * @hide + */ + RcsIncomingMessage(int id) { + super(id); } - @Override - public int describeContents() { - return 0; + /** + * Sets the timestamp of arrival for this message and persists into storage. The timestamp is + * defined as milliseconds passed after midnight, January 1, 1970 UTC + * + * @param arrivalTimestamp The timestamp to set to. + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setArrivalTimestamp(long arrivalTimestamp) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn( + iRcs -> iRcs.setMessageArrivalTimestamp(mId, true, arrivalTimestamp)); + } + + /** + * @return Returns the timestamp of arrival for this message. The timestamp is defined as + * milliseconds passed after midnight, January 1, 1970 UTC + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public long getArrivalTimestamp() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getMessageArrivalTimestamp(mId, true)); + } + + /** + * Sets the timestamp of when the user saw this message and persists into storage. The timestamp + * is defined as milliseconds passed after midnight, January 1, 1970 UTC + * + * @param notifiedTimestamp The timestamp to set to. + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setSeenTimestamp(long notifiedTimestamp) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn( + iRcs -> iRcs.setMessageSeenTimestamp(mId, true, notifiedTimestamp)); + } + + /** + * @return Returns the timestamp of when the user saw this message. The timestamp is defined as + * milliseconds passed after midnight, January 1, 1970 UTC + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public long getSeenTimestamp() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getMessageSeenTimestamp(mId, true)); + } + + /** + * @return Returns the sender of this incoming message. + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public RcsParticipant getSenderParticipant() throws RcsMessageStoreException { + return new RcsParticipant( + RcsControllerCall.call(iRcs -> iRcs.getSenderParticipant(mId))); } + /** + * @return Returns {@code true} as this is an incoming message + */ @Override - public void writeToParcel(Parcel dest, int flags) { + public boolean isIncoming() { + return true; } } diff --git a/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParameters.aidl b/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParameters.aidl new file mode 100644 index 000000000000..76073c22af0c --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParameters.aidl @@ -0,0 +1,20 @@ +/* + * + * Copyright 2019, 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 android.telephony.ims; + +parcelable RcsIncomingMessageCreationParameters; diff --git a/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParameters.java b/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParameters.java new file mode 100644 index 000000000000..acde8af0d295 --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsIncomingMessageCreationParameters.java @@ -0,0 +1,180 @@ +/* + * Copyright (C) 2019 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 android.telephony.ims; + +import android.annotation.CheckResult; +import android.os.Parcel; +import android.os.Parcelable; + +/** + * {@link RcsIncomingMessageCreationParameters} is a collection of parameters that should be passed + * into {@link RcsThread#addIncomingMessage(RcsIncomingMessageCreationParameters)} to generate an + * {@link RcsIncomingMessage} on that {@link RcsThread} + * + * @hide TODO:make public + */ +public class RcsIncomingMessageCreationParameters extends RcsMessageCreationParameters implements + Parcelable { + // The arrival timestamp for the RcsIncomingMessage to be created + private final long mArrivalTimestamp; + // The seen timestamp for the RcsIncomingMessage to be created + private final long mSeenTimestamp; + // The participant that sent this incoming message + private final int mSenderParticipantId; + + /** + * Builder to help create an {@link RcsIncomingMessageCreationParameters} + * + * @see RcsThread#addIncomingMessage(RcsIncomingMessageCreationParameters) + */ + public static class Builder extends RcsMessageCreationParameters.Builder { + private RcsParticipant mSenderParticipant; + private long mArrivalTimestamp; + private long mSeenTimestamp; + + /** + * Creates a {@link Builder} to create an instance of + * {@link RcsIncomingMessageCreationParameters} + * + * @param originationTimestamp The timestamp of {@link RcsMessage} creation. The origination + * timestamp value in milliseconds passed after midnight, + * January 1, 1970 UTC + * @param arrivalTimestamp The timestamp of arrival, defined as milliseconds passed after + * midnight, January 1, 1970 UTC + * @param subscriptionId The subscription ID that was used to send or receive this + * {@link RcsMessage} + */ + public Builder(long originationTimestamp, long arrivalTimestamp, int subscriptionId) { + super(originationTimestamp, subscriptionId); + mArrivalTimestamp = arrivalTimestamp; + } + + /** + * Sets the {@link RcsParticipant} that send this {@link RcsIncomingMessage} + * + * @param senderParticipant The {@link RcsParticipant} that sent this + * {@link RcsIncomingMessage} + * @return The same instance of {@link Builder} to chain methods. + */ + @CheckResult + public Builder setSenderParticipant(RcsParticipant senderParticipant) { + mSenderParticipant = senderParticipant; + return this; + } + + /** + * Sets the time of the arrival of this {@link RcsIncomingMessage} + + * @return The same instance of {@link Builder} to chain methods. + * @see RcsIncomingMessage#setArrivalTimestamp(long) + */ + @CheckResult + public Builder setArrivalTimestamp(long arrivalTimestamp) { + mArrivalTimestamp = arrivalTimestamp; + return this; + } + + /** + * Sets the time of the when this user saw the {@link RcsIncomingMessage} + * @param seenTimestamp The seen timestamp , defined as milliseconds passed after midnight, + * January 1, 1970 UTC + * @return The same instance of {@link Builder} to chain methods. + * @see RcsIncomingMessage#setSeenTimestamp(long) + */ + @CheckResult + public Builder setSeenTimestamp(long seenTimestamp) { + mSeenTimestamp = seenTimestamp; + return this; + } + + /** + * Creates parameters for creating a new incoming message. + * @return A new instance of {@link RcsIncomingMessageCreationParameters} to create a new + * {@link RcsIncomingMessage} + */ + public RcsIncomingMessageCreationParameters build() { + return new RcsIncomingMessageCreationParameters(this); + } + } + + private RcsIncomingMessageCreationParameters(Builder builder) { + super(builder); + mArrivalTimestamp = builder.mArrivalTimestamp; + mSeenTimestamp = builder.mSeenTimestamp; + mSenderParticipantId = builder.mSenderParticipant.getId(); + } + + protected RcsIncomingMessageCreationParameters(Parcel in) { + super(in); + mArrivalTimestamp = in.readLong(); + mSeenTimestamp = in.readLong(); + mSenderParticipantId = in.readInt(); + } + + /** + * @return Returns the arrival timestamp for the {@link RcsIncomingMessage} to be created. + * Timestamp is defined as milliseconds passed after midnight, January 1, 1970 UTC + */ + public long getArrivalTimestamp() { + return mArrivalTimestamp; + } + + /** + * @return Returns the seen timestamp for the {@link RcsIncomingMessage} to be created. + * Timestamp is defined as milliseconds passed after midnight, January 1, 1970 UTC + */ + public long getSeenTimestamp() { + return mSeenTimestamp; + } + + /** + * Helper getter for {@link com.android.internal.telephony.ims.RcsMessageStoreController} to + * create {@link RcsIncomingMessage}s + * + * Since the API doesn't expose any ID's to API users, this should be hidden. + * @hide + */ + public int getSenderParticipantId() { + return mSenderParticipantId; + } + + public static final Creator<RcsIncomingMessageCreationParameters> CREATOR = + new Creator<RcsIncomingMessageCreationParameters>() { + @Override + public RcsIncomingMessageCreationParameters createFromParcel(Parcel in) { + return new RcsIncomingMessageCreationParameters(in); + } + + @Override + public RcsIncomingMessageCreationParameters[] newArray(int size) { + return new RcsIncomingMessageCreationParameters[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeLong(mArrivalTimestamp); + dest.writeLong(mSeenTimestamp); + dest.writeInt(mSenderParticipantId); + } +} diff --git a/telephony/java/android/telephony/ims/RcsLocationPart.aidl b/telephony/java/android/telephony/ims/RcsLocationPart.aidl deleted file mode 100644 index 4fe5ca97a30d..000000000000 --- a/telephony/java/android/telephony/ims/RcsLocationPart.aidl +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * Copyright 2019, 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 android.telephony.ims; - -parcelable RcsLocationPart; diff --git a/telephony/java/android/telephony/ims/RcsLocationPart.java b/telephony/java/android/telephony/ims/RcsLocationPart.java deleted file mode 100644 index 19be4ceaf688..000000000000 --- a/telephony/java/android/telephony/ims/RcsLocationPart.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2019 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 android.telephony.ims; - -import android.os.Parcel; - -/** - * A part of a composite {@link RcsMessage} that holds a location - * @hide - TODO(sahinc) make this public - */ -public class RcsLocationPart extends RcsPart { - public static final Creator<RcsLocationPart> CREATOR = new Creator<RcsLocationPart>() { - @Override - public RcsLocationPart createFromParcel(Parcel in) { - return new RcsLocationPart(in); - } - - @Override - public RcsLocationPart[] newArray(int size) { - return new RcsLocationPart[size]; - } - }; - - protected RcsLocationPart(Parcel in) { - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - } -} diff --git a/telephony/java/android/telephony/ims/RcsManager.java b/telephony/java/android/telephony/ims/RcsManager.java index df108c88e3b0..e84d4ed9e7be 100644 --- a/telephony/java/android/telephony/ims/RcsManager.java +++ b/telephony/java/android/telephony/ims/RcsManager.java @@ -28,7 +28,7 @@ public class RcsManager { private static final RcsMessageStore sRcsMessageStoreInstance = new RcsMessageStore(); /** - * Returns an instance of RcsMessageStore. + * Returns an instance of {@link RcsMessageStore} */ public RcsMessageStore getRcsMessageStore() { return sRcsMessageStoreInstance; diff --git a/telephony/java/android/telephony/ims/RcsMessage.java b/telephony/java/android/telephony/ims/RcsMessage.java index d46685c4a572..b70a9a7973f5 100644 --- a/telephony/java/android/telephony/ims/RcsMessage.java +++ b/telephony/java/android/telephony/ims/RcsMessage.java @@ -15,11 +15,314 @@ */ package android.telephony.ims; -import android.os.Parcelable; +import android.annotation.IntDef; +import android.annotation.NonNull; +import android.annotation.WorkerThread; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; /** * This is a single instance of a message sent or received over RCS. - * @hide - TODO(sahinc) make this public + * + * @hide - TODO(109759350) make this public */ -public abstract class RcsMessage implements Parcelable { +public abstract class RcsMessage { + /** + * The value to indicate that this {@link RcsMessage} does not have any location information. + */ + public static final double LOCATION_NOT_SET = Double.MIN_VALUE; + + /** + * The status to indicate that this {@link RcsMessage}s status is not set yet. + */ + public static final int NOT_SET = 0; + + /** + * The status to indicate that this {@link RcsMessage} is a draft and is not in the process of + * sending yet. + */ + public static final int DRAFT = 1; + + /** + * The status to indicate that this {@link RcsMessage} was successfully sent. + */ + public static final int QUEUED = 2; + + /** + * The status to indicate that this {@link RcsMessage} is actively being sent. + */ + public static final int SENDING = 3; + + /** + * The status to indicate that this {@link RcsMessage} was successfully sent. + */ + public static final int SENT = 4; + + /** + * The status to indicate that this {@link RcsMessage} failed to send in an attempt before, and + * now being retried. + */ + public static final int RETRYING = 5; + + /** + * The status to indicate that this {@link RcsMessage} has permanently failed to send. + */ + public static final int FAILED = 6; + + /** + * The status to indicate that this {@link RcsMessage} was successfully received. + */ + public static final int RECEIVED = 7; + + /** + * The status to indicate that this {@link RcsMessage} was seen. + */ + public static final int SEEN = 9; + + protected int mId; + + @IntDef({ + DRAFT, QUEUED, SENDING, SENT, RETRYING, FAILED, RECEIVED, SEEN + }) + @Retention(RetentionPolicy.SOURCE) + public @interface RcsMessageStatus { + } + + RcsMessage(int id) { + mId = id; + } + + /** + * Returns the row Id from the common message. + * + * @hide + */ + public int getId() { + return mId; + } + + /** + * @return Returns the subscription ID that this {@link RcsMessage} was sent from, or delivered + * to. + * @throws RcsMessageStoreException if the value could not be read from the storage + * @see android.telephony.SubscriptionInfo#getSubscriptionId + */ + public int getSubscriptionId() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getMessageSubId(mId, isIncoming())); + } + + /** + * Sets the subscription ID that this {@link RcsMessage} was sent from, or delivered to and + * persists it into storage. + * + * @param subId The subscription ID to persists into storage. + * @throws RcsMessageStoreException if the value could not be persisted into storage + * @see android.telephony.SubscriptionInfo#getSubscriptionId + */ + @WorkerThread + public void setSubscriptionId(int subId) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setMessageSubId(mId, isIncoming(), subId)); + } + + /** + * Sets the status of this message and persists it into storage. Please see + * {@link RcsFileTransferPart#setFileTransferStatus(int)} to set statuses around file transfers. + * + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setStatus(@RcsMessageStatus int rcsMessageStatus) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn( + iRcs -> iRcs.setMessageStatus(mId, isIncoming(), rcsMessageStatus)); + } + + /** + * @return Returns the status of this message. Please see + * {@link RcsFileTransferPart#setFileTransferStatus(int)} to set statuses around file transfers. + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public @RcsMessageStatus int getStatus() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getMessageStatus(mId, isIncoming())); + } + + /** + * Sets the origination timestamp of this message and persists it into storage. Origination is + * defined as when the sender tapped the send button. + * + * @param timestamp The origination timestamp value in milliseconds passed after midnight, + * January 1, 1970 UTC + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setOriginationTimestamp(long timestamp) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn( + iRcs -> iRcs.setMessageOriginationTimestamp(mId, isIncoming(), timestamp)); + } + + /** + * @return Returns the origination timestamp of this message in milliseconds passed after + * midnight, January 1, 1970 UTC. Origination is defined as when the sender tapped the send + * button. + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public long getOriginationTimestamp() throws RcsMessageStoreException { + return RcsControllerCall.call( + iRcs -> iRcs.getMessageOriginationTimestamp(mId, isIncoming())); + } + + /** + * Sets the globally unique RCS message identifier for this message and persists it into + * storage. This function does not confirm that this message id is unique. Please see 4.4.5.2 + * - GSMA RCC.53 (RCS Device API 1.6 Specification + * + * @param rcsMessageGlobalId The globally RCS message identifier + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setRcsMessageId(String rcsMessageGlobalId) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn( + iRcs -> iRcs.setGlobalMessageIdForMessage(mId, isIncoming(), rcsMessageGlobalId)); + } + + /** + * @return Returns the globally unique RCS message identifier for this message. Please see + * 4.4.5.2 - GSMA RCC.53 (RCS Device API 1.6 Specification + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public String getRcsMessageId() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getGlobalMessageIdForMessage(mId, isIncoming())); + } + + /** + * @return Returns the user visible text included in this message. + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public String getText() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getTextForMessage(mId, isIncoming())); + } + + /** + * Sets the user visible text for this message and persists in storage. + * + * @param text The text this message now has + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setText(String text) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setTextForMessage(mId, isIncoming(), text)); + } + + /** + * @return Returns the associated latitude for this message, or + * {@link RcsMessage#LOCATION_NOT_SET} if it does not contain a location. + * + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public double getLatitude() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getLatitudeForMessage(mId, isIncoming())); + } + + /** + * Sets the latitude for this message and persists in storage. + * + * @param latitude The latitude for this location message. + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setLatitude(double latitude) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn( + iRcs -> iRcs.setLatitudeForMessage(mId, isIncoming(), latitude)); + } + + /** + * @return Returns the associated longitude for this message, or + * {@link RcsMessage#LOCATION_NOT_SET} if it does not contain a location. + * + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public double getLongitude() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getLongitudeForMessage(mId, isIncoming())); + } + + /** + * Sets the longitude for this message and persists in storage. + * + * @param longitude The longitude for this location message. + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setLongitude(double longitude) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn( + iRcs -> iRcs.setLongitudeForMessage(mId, isIncoming(), longitude)); + } + + /** + * Attaches an {@link RcsFileTransferPart} to this message and persists into storage. + * + * @param fileTransferCreationParameters The parameters to be used to create the + * {@link RcsFileTransferPart} + * @return A new instance of {@link RcsFileTransferPart} + * @throws RcsMessageStoreException if the file transfer could not be persisted into storage. + */ + @NonNull + @WorkerThread + public RcsFileTransferPart insertFileTransfer( + RcsFileTransferCreationParameters fileTransferCreationParameters) + throws RcsMessageStoreException { + return new RcsFileTransferPart(RcsControllerCall.call( + iRcs -> iRcs.storeFileTransfer(mId, isIncoming(), fileTransferCreationParameters))); + } + + /** + * @return Returns all the {@link RcsFileTransferPart}s associated with this message in an + * unmodifiable set. + * @throws RcsMessageStoreException if the file transfers could not be read from the storage + */ + @NonNull + @WorkerThread + public Set<RcsFileTransferPart> getFileTransferParts() throws RcsMessageStoreException { + Set<RcsFileTransferPart> fileTransferParts = new HashSet<>(); + + int[] fileTransferIds = RcsControllerCall.call( + iRcs -> iRcs.getFileTransfersAttachedToMessage(mId, isIncoming())); + + for (int fileTransfer : fileTransferIds) { + fileTransferParts.add(new RcsFileTransferPart(fileTransfer)); + } + + return Collections.unmodifiableSet(fileTransferParts); + } + + /** + * Removes a {@link RcsFileTransferPart} from this message, and deletes it in storage. + * + * @param fileTransferPart The part to delete. + * @throws RcsMessageStoreException if the file transfer could not be removed from storage + */ + @WorkerThread + public void removeFileTransferPart(@NonNull RcsFileTransferPart fileTransferPart) + throws RcsMessageStoreException { + if (fileTransferPart == null) { + return; + } + + RcsControllerCall.callWithNoReturn( + iRcs -> iRcs.deleteFileTransfer(fileTransferPart.getId())); + } + + /** + * @return Returns {@code true} if this message was received on this device, {@code false} if it + * was sent. + */ + public abstract boolean isIncoming(); } diff --git a/telephony/java/android/telephony/ims/RcsMessageCreationParameters.aidl b/telephony/java/android/telephony/ims/RcsMessageCreationParameters.aidl new file mode 100644 index 000000000000..5774d00ca934 --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsMessageCreationParameters.aidl @@ -0,0 +1,20 @@ +/* + * + * Copyright 2019, 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 android.telephony.ims; + +parcelable RcsMessageCreationParameters; diff --git a/telephony/java/android/telephony/ims/RcsMessageCreationParameters.java b/telephony/java/android/telephony/ims/RcsMessageCreationParameters.java new file mode 100644 index 000000000000..ff3f33ed2e1b --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsMessageCreationParameters.java @@ -0,0 +1,265 @@ +/* + * Copyright (C) 2019 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 android.telephony.ims; + +import static android.telephony.ims.RcsMessage.LOCATION_NOT_SET; + +import android.annotation.CheckResult; +import android.annotation.Nullable; +import android.os.Parcel; +import android.os.Parcelable; +import android.telephony.SubscriptionInfo; + +/** + * The collection of parameters to be passed into + * {@link RcsThread#addIncomingMessage(RcsIncomingMessageCreationParameters)} and + * {@link RcsThread#addOutgoingMessage(RcsMessageCreationParameters)} to create and persist + * {@link RcsMessage}s on an {@link RcsThread} + * + * @hide TODO - make public + */ +public class RcsMessageCreationParameters implements Parcelable { + // The globally unique id of the RcsMessage to be created. + private final String mRcsMessageGlobalId; + + // The subscription that this message was/will be received/sent from. + private final int mSubId; + // The sending/receiving status of the message + private final @RcsMessage.RcsMessageStatus int mMessageStatus; + // The timestamp of message creation + private final long mOriginationTimestamp; + // The user visible content of the message + private final String mText; + // The latitude of the message if this is a location message + private final double mLatitude; + // The longitude of the message if this is a location message + private final double mLongitude; + + /** + * @return Returns the globally unique RCS Message ID for the {@link RcsMessage} to be created. + * Please see 4.4.5.2 - GSMA RCC.53 (RCS Device API 1.6 Specification + */ + @Nullable + public String getRcsMessageGlobalId() { + return mRcsMessageGlobalId; + } + + /** + * @return Returns the subscription ID that was used to send or receive the {@link RcsMessage} + * to be created. + */ + public int getSubId() { + return mSubId; + } + + /** + * @return Returns the status for the {@link RcsMessage} to be created. + * @see RcsMessage.RcsMessageStatus + */ + public int getMessageStatus() { + return mMessageStatus; + } + + /** + * @return Returns the origination timestamp of the {@link RcsMessage} to be created in + * milliseconds passed after midnight, January 1, 1970 UTC. Origination is defined as when + * the sender tapped the send button. + */ + public long getOriginationTimestamp() { + return mOriginationTimestamp; + } + + /** + * @return Returns the user visible text contained in the {@link RcsMessage} to be created + */ + @Nullable + public String getText() { + return mText; + } + + /** + * @return Returns the latitude of the {@link RcsMessage} to be created, or + * {@link RcsMessage#LOCATION_NOT_SET} if the message does not contain a location. + */ + public double getLatitude() { + return mLatitude; + } + + /** + * @return Returns the longitude of the {@link RcsMessage} to be created, or + * {@link RcsMessage#LOCATION_NOT_SET} if the message does not contain a location. + */ + public double getLongitude() { + return mLongitude; + } + + /** + * The base builder for creating {@link RcsMessage}s on {@link RcsThread}s. + * + * @see RcsIncomingMessageCreationParameters + */ + public static class Builder { + private String mRcsMessageGlobalId; + private int mSubId; + private @RcsMessage.RcsMessageStatus int mMessageStatus; + private long mOriginationTimestamp; + private String mText; + private double mLatitude = LOCATION_NOT_SET; + private double mLongitude = LOCATION_NOT_SET; + + /** + * Creates a new {@link Builder} to create an instance of + * {@link RcsMessageCreationParameters}. + * + * @param originationTimestamp The timestamp of {@link RcsMessage} creation. The origination + * timestamp value in milliseconds passed after midnight, + * January 1, 1970 UTC + * @param subscriptionId The subscription ID that was used to send or receive this + * {@link RcsMessage} + * @see SubscriptionInfo#getSubscriptionId() + */ + public Builder(long originationTimestamp, int subscriptionId) { + mOriginationTimestamp = originationTimestamp; + mSubId = subscriptionId; + } + + /** + * Sets the status of the {@link RcsMessage} to be built. + * + * @param rcsMessageStatus The status to be set + * @return The same instance of {@link Builder} to chain methods + * @see RcsMessage#setStatus(int) + */ + @CheckResult + public Builder setStatus(@RcsMessage.RcsMessageStatus int rcsMessageStatus) { + mMessageStatus = rcsMessageStatus; + return this; + } + + /** + * Sets the globally unique RCS message identifier for the {@link RcsMessage} to be built. + * This function does not confirm that this message id is unique. Please see 4.4.5.2 - GSMA + * RCC.53 (RCS Device API 1.6 Specification) + * + * @param rcsMessageId The ID to be set + * @return The same instance of {@link Builder} to chain methods + * @see RcsMessage#setRcsMessageId(String) + */ + @CheckResult + public Builder setRcsMessageId(String rcsMessageId) { + mRcsMessageGlobalId = rcsMessageId; + return this; + } + + /** + * Sets the text of the {@link RcsMessage} to be built. + * + * @param text The user visible text of the message + * @return The same instance of {@link Builder} to chain methods + * @see RcsMessage#setText(String) + */ + @CheckResult + public Builder setText(String text) { + mText = text; + return this; + } + + /** + * Sets the latitude of the {@link RcsMessage} to be built. Please see US5-24 - GSMA RCC.71 + * (RCS Universal Profile Service Definition Document) + * + * @param latitude The latitude of the location information associated with this message. + * @return The same instance of {@link Builder} to chain methods + * @see RcsMessage#setLatitude(double) + */ + @CheckResult + public Builder setLatitude(double latitude) { + mLatitude = latitude; + return this; + } + + /** + * Sets the longitude of the {@link RcsMessage} to be built. Please see US5-24 - GSMA RCC.71 + * (RCS Universal Profile Service Definition Document) + * + * @param longitude The longitude of the location information associated with this message. + * @return The same instance of {@link Builder} to chain methods + * @see RcsMessage#setLongitude(double) + */ + @CheckResult + public Builder setLongitude(double longitude) { + mLongitude = longitude; + return this; + } + + /** + * @hide + */ + public RcsMessageCreationParameters build() { + return new RcsMessageCreationParameters(this); + } + } + + protected RcsMessageCreationParameters(Builder builder) { + mRcsMessageGlobalId = builder.mRcsMessageGlobalId; + mSubId = builder.mSubId; + mMessageStatus = builder.mMessageStatus; + mOriginationTimestamp = builder.mOriginationTimestamp; + mText = builder.mText; + mLatitude = builder.mLatitude; + mLongitude = builder.mLongitude; + } + + protected RcsMessageCreationParameters(Parcel in) { + mRcsMessageGlobalId = in.readString(); + mSubId = in.readInt(); + mMessageStatus = in.readInt(); + mOriginationTimestamp = in.readLong(); + mText = in.readString(); + mLatitude = in.readDouble(); + mLongitude = in.readDouble(); + } + + public static final Creator<RcsMessageCreationParameters> CREATOR = + new Creator<RcsMessageCreationParameters>() { + @Override + public RcsMessageCreationParameters createFromParcel(Parcel in) { + return new RcsMessageCreationParameters(in); + } + + @Override + public RcsMessageCreationParameters[] newArray(int size) { + return new RcsMessageCreationParameters[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(mRcsMessageGlobalId); + dest.writeInt(mSubId); + dest.writeInt(mMessageStatus); + dest.writeLong(mOriginationTimestamp); + dest.writeString(mText); + dest.writeDouble(mLatitude); + dest.writeDouble(mLongitude); + } +} diff --git a/telephony/java/android/telephony/ims/RcsMessageQueryParameters.aidl b/telephony/java/android/telephony/ims/RcsMessageQueryParameters.aidl new file mode 100644 index 000000000000..c325c23ba9bd --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsMessageQueryParameters.aidl @@ -0,0 +1,20 @@ +/* + * + * Copyright 2019, 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 android.telephony.ims; + +parcelable RcsMessageQueryParameters; diff --git a/telephony/java/android/telephony/ims/RcsMessageQueryParameters.java b/telephony/java/android/telephony/ims/RcsMessageQueryParameters.java new file mode 100644 index 000000000000..c964cf9af7c5 --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsMessageQueryParameters.java @@ -0,0 +1,361 @@ +/* + * Copyright (C) 2019 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 android.telephony.ims; + +import android.annotation.CheckResult; +import android.annotation.IntDef; +import android.annotation.IntRange; +import android.annotation.Nullable; +import android.os.Parcel; +import android.os.Parcelable; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.security.InvalidParameterException; + +/** + * The parameters to pass into + * {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParameters)} in order to select a + * subset of {@link RcsMessage}s present in the message store. + * + * @hide TODO - make the Builder and builder() public. The rest should stay internal only. + */ +public class RcsMessageQueryParameters implements Parcelable { + /** + * @hide - not meant for public use + */ + public static final int THREAD_ID_NOT_SET = -1; + + /** + * Flag to be used with {@link Builder#setSortProperty(int)} to denote that the results should + * be sorted in the same order of {@link RcsMessage}s that got persisted into storage for faster + * results. + */ + public static final int SORT_BY_CREATION_ORDER = 0; + + /** + * Flag to be used with {@link Builder#setSortProperty(int)} to denote that the results should + * be sorted according to the timestamp of {@link RcsMessage#getOriginationTimestamp()} + */ + public static final int SORT_BY_TIMESTAMP = 1; + + @Retention(RetentionPolicy.SOURCE) + @IntDef({SORT_BY_CREATION_ORDER, SORT_BY_TIMESTAMP}) + public @interface SortingProperty { + } + + /** + * Bitmask flag to be used with {@link Builder#setMessageType(int)} to make + * {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParameters)} return + * {@link RcsIncomingMessage}s. + */ + public static final int MESSAGE_TYPE_INCOMING = 0x0001; + + /** + * Bitmask flag to be used with {@link Builder#setMessageType(int)} to make + * {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParameters)} return + * {@link RcsOutgoingMessage}s. + */ + public static final int MESSAGE_TYPE_OUTGOING = 0x0002; + + /** + * Bitmask flag to be used with {@link Builder#setFileTransferPresence(int)} to make + * {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParameters)} return {@link RcsMessage}s + * that have an {@link RcsFileTransferPart} attached. + */ + public static final int MESSAGES_WITH_FILE_TRANSFERS = 0x0004; + + /** + * Bitmask flag to be used with {@link Builder#setFileTransferPresence(int)} to make + * {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParameters)} return {@link RcsMessage}s + * that don't have an {@link RcsFileTransferPart} attached. + */ + public static final int MESSAGES_WITHOUT_FILE_TRANSFERS = 0x0008; + + /** + * @hide - not meant for public use + */ + public static final String MESSAGE_QUERY_PARAMETERS_KEY = "message_query_parameters"; + + // Whether the result should be filtered against incoming or outgoing messages + private int mMessageType; + // Whether the result should have file transfer messages attached or not + private int mFileTransferPresence; + // The SQL "Like" clause to filter messages + private String mMessageLike; + // The property the messages should be sorted against + private @SortingProperty int mSortingProperty; + // Whether the messages should be sorted in ascending order + private boolean mIsAscending; + // The number of results that should be returned with this query + private int mLimit; + // The thread that the results should be limited to + private int mThreadId; + + RcsMessageQueryParameters(int messageType, int fileTransferPresence, String messageLike, + int threadId, @SortingProperty int sortingProperty, boolean isAscending, int limit) { + mMessageType = messageType; + mFileTransferPresence = fileTransferPresence; + mMessageLike = messageLike; + mSortingProperty = sortingProperty; + mIsAscending = isAscending; + mLimit = limit; + mThreadId = threadId; + } + + /** + * @return Returns the type of {@link RcsMessage}s that this {@link RcsMessageQueryParameters} + * is set to query for. + */ + public int getMessageType() { + return mMessageType; + } + + /** + * @return Returns whether the result query should return {@link RcsMessage}s with + * {@link RcsFileTransferPart}s or not + */ + public int getFileTransferPresence() { + return mFileTransferPresence; + } + + /** + * @return Returns the SQL-inspired "LIKE" clause that will be used to match {@link RcsMessage}s + */ + public String getMessageLike() { + return mMessageLike; + } + + /** + * @return Returns the number of {@link RcsThread}s to be returned from the query. A value of + * 0 means there is no set limit. + */ + public int getLimit() { + return mLimit; + } + + /** + * @return Returns the property that will be used to sort the result against. + * @see SortingProperty + */ + public @SortingProperty int getSortingProperty() { + return mSortingProperty; + } + + /** + * @return Returns {@code true} if the result set will be sorted in ascending order, + * {@code false} if it will be sorted in descending order. + */ + public boolean getSortDirection() { + return mIsAscending; + } + + /** + * This is used in {@link com.android.internal.telephony.ims.RcsMessageStoreController} to get + * the thread that the result query should be limited to. + * + * As we do not expose any sort of integer ID's to public usage, this should be hidden. + * + * @hide - not meant for public use + */ + public int getThreadId() { + return mThreadId; + } + + /** + * A helper class to build the {@link RcsMessageQueryParameters}. + */ + public static class Builder { + private @SortingProperty int mSortingProperty; + private int mMessageType; + private int mFileTransferPresence; + private String mMessageLike; + private boolean mIsAscending; + private int mLimit = 100; + private int mThreadId = THREAD_ID_NOT_SET; + + /** + * Creates a new builder for {@link RcsMessageQueryParameters} to be used in + * {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParameters)} + * + */ + public Builder() { + // empty implementation + } + + /** + * Desired number of threads to be returned from the query. Passing in 0 will return all + * existing threads at once. The limit defaults to 100. + * + * @param limit The number to limit the query result to. + * @return The same instance of the builder to chain parameters. + * @throws InvalidParameterException If the given limit is negative. + */ + @CheckResult + public Builder setResultLimit(@IntRange(from = 0) int limit) + throws InvalidParameterException { + if (limit < 0) { + throw new InvalidParameterException("The query limit must be non-negative"); + } + + mLimit = limit; + return this; + } + + /** + * Sets the type of messages to be returned from the query. + * + * @param messageType The type of message to be returned. + * @return The same instance of the builder to chain parameters. + * @see RcsMessageQueryParameters#MESSAGE_TYPE_INCOMING + * @see RcsMessageQueryParameters#MESSAGE_TYPE_OUTGOING + */ + @CheckResult + public Builder setMessageType(int messageType) { + mMessageType = messageType; + return this; + } + + /** + * Sets whether file transfer messages should be included in the query result or not. + * + * @param fileTransferPresence Whether file transfers should be included in the result + * @return The same instance of the builder to chain parameters. + * @see RcsMessageQueryParameters#MESSAGES_WITH_FILE_TRANSFERS + * @see RcsMessageQueryParameters#MESSAGES_WITHOUT_FILE_TRANSFERS + */ + @CheckResult + public Builder setFileTransferPresence(int fileTransferPresence) { + mFileTransferPresence = fileTransferPresence; + return this; + } + + /** + * Sets an SQL-inspired "like" clause to match with messages. Using a percent sign ('%') + * wildcard matches any sequence of zero or more characters. Using an underscore ('_') + * wildcard matches any single character. Not using any wildcards would only perform a + * string match. The input string is case-insensitive. + * + * The input "Wh%" would match messages "who", "where" and "what", while the input "Wh_" + * would only match "who" + * + * @param messageLike The "like" clause for matching {@link RcsMessage}s. + * @return The same instance of the builder to chain parameters. + */ + @CheckResult + public Builder setMessageLike(String messageLike) { + mMessageLike = messageLike; + return this; + } + + /** + * Sets the property where the results should be sorted against. Defaults to + * {@link RcsMessageQueryParameters.SortingProperty#SORT_BY_CREATION_ORDER} + * + * @param sortingProperty against which property the results should be sorted + * @return The same instance of the builder to chain parameters. + */ + @CheckResult + public Builder setSortProperty(@SortingProperty int sortingProperty) { + mSortingProperty = sortingProperty; + return this; + } + + /** + * Sets whether the results should be sorted ascending or descending + * + * @param isAscending whether the results should be sorted ascending + * @return The same instance of the builder to chain parameters. + */ + @CheckResult + public Builder setSortDirection(boolean isAscending) { + mIsAscending = isAscending; + return this; + } + + /** + * Limits the results to the given thread. + * + * @param thread the {@link RcsThread} that results should be limited to. If set to + * {@code null}, messages on all threads will be queried + * @return The same instance of the builder to chain parameters. + */ + @CheckResult + public Builder setThread(@Nullable RcsThread thread) { + if (thread == null) { + mThreadId = THREAD_ID_NOT_SET; + } else { + mThreadId = thread.getThreadId(); + } + return this; + } + + /** + * Builds the {@link RcsMessageQueryParameters} to use in + * {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParameters)} + * + * @return An instance of {@link RcsMessageQueryParameters} to use with the message + * query. + */ + public RcsMessageQueryParameters build() { + return new RcsMessageQueryParameters(mMessageType, mFileTransferPresence, mMessageLike, + mThreadId, mSortingProperty, mIsAscending, mLimit); + } + } + + /** + * Parcelable boilerplate below. + */ + protected RcsMessageQueryParameters(Parcel in) { + mMessageType = in.readInt(); + mFileTransferPresence = in.readInt(); + mMessageLike = in.readString(); + mSortingProperty = in.readInt(); + mIsAscending = in.readBoolean(); + mLimit = in.readInt(); + mThreadId = in.readInt(); + } + + public static final Creator<RcsMessageQueryParameters> CREATOR = + new Creator<RcsMessageQueryParameters>() { + @Override + public RcsMessageQueryParameters createFromParcel(Parcel in) { + return new RcsMessageQueryParameters(in); + } + + @Override + public RcsMessageQueryParameters[] newArray(int size) { + return new RcsMessageQueryParameters[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(mMessageType); + dest.writeInt(mFileTransferPresence); + dest.writeString(mMessageLike); + dest.writeInt(mSortingProperty); + dest.writeBoolean(mIsAscending); + dest.writeInt(mLimit); + dest.writeInt(mThreadId); + } +} diff --git a/telephony/java/android/telephony/ims/RcsFileTransferPart.aidl b/telephony/java/android/telephony/ims/RcsMessageQueryResult.aidl index eaf312877deb..a73ba50b6591 100644 --- a/telephony/java/android/telephony/ims/RcsFileTransferPart.aidl +++ b/telephony/java/android/telephony/ims/RcsMessageQueryResult.aidl @@ -17,4 +17,4 @@ package android.telephony.ims; -parcelable RcsFileTransferPart; +parcelable RcsMessageQueryResult; diff --git a/telephony/java/android/telephony/ims/RcsMessageQueryResult.java b/telephony/java/android/telephony/ims/RcsMessageQueryResult.java new file mode 100644 index 000000000000..c3846fdebf2e --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsMessageQueryResult.java @@ -0,0 +1,115 @@ +/* + * Copyright (C) 2019 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 android.telephony.ims; + +import static android.provider.Telephony.RcsColumns.RcsUnifiedMessageColumns.MESSAGE_TYPE_INCOMING; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.os.Parcel; +import android.os.Parcelable; + +import com.android.ims.RcsTypeIdPair; + +import java.util.ArrayList; +import java.util.List; + +/** + * The result of a {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParameters)} + * call. This class allows getting the token for querying the next batch of messages in order to + * prevent handling large amounts of data at once. + * + * @hide + */ +public class RcsMessageQueryResult implements Parcelable { + // The token to continue the query to get the next batch of results + private RcsQueryContinuationToken mContinuationToken; + // The message type and message ID pairs for all the messages in this query result + private List<RcsTypeIdPair> mMessageTypeIdPairs; + + /** + * Internal constructor for {@link com.android.internal.telephony.ims.RcsMessageStoreController} + * to create query results + * + * @hide + */ + public RcsMessageQueryResult( + RcsQueryContinuationToken continuationToken, + List<RcsTypeIdPair> messageTypeIdPairs) { + mContinuationToken = continuationToken; + mMessageTypeIdPairs = messageTypeIdPairs; + } + + /** + * Returns a token to call + * {@link RcsMessageStore#getRcsMessages(RcsQueryContinuationToken)} + * to get the next batch of {@link RcsMessage}s. + */ + @Nullable + public RcsQueryContinuationToken getContinuationToken() { + return mContinuationToken; + } + + /** + * Returns all the {@link RcsMessage}s in the current query result. Call {@link + * RcsMessageStore#getRcsMessages(RcsQueryContinuationToken)} to get the next batch + * of {@link RcsMessage}s. + */ + @NonNull + public List<RcsMessage> getMessages() { + List<RcsMessage> messages = new ArrayList<>(); + for (RcsTypeIdPair typeIdPair : mMessageTypeIdPairs) { + if (typeIdPair.getType() == MESSAGE_TYPE_INCOMING) { + messages.add(new RcsIncomingMessage(typeIdPair.getId())); + } else { + messages.add(new RcsOutgoingMessage(typeIdPair.getId())); + } + } + + return messages; + } + + protected RcsMessageQueryResult(Parcel in) { + mContinuationToken = in.readParcelable( + RcsQueryContinuationToken.class.getClassLoader()); + in.readTypedList(mMessageTypeIdPairs, RcsTypeIdPair.CREATOR); + } + + public static final Creator<RcsMessageQueryResult> CREATOR = + new Creator<RcsMessageQueryResult>() { + @Override + public RcsMessageQueryResult createFromParcel(Parcel in) { + return new RcsMessageQueryResult(in); + } + + @Override + public RcsMessageQueryResult[] newArray(int size) { + return new RcsMessageQueryResult[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeParcelable(mContinuationToken, flags); + dest.writeTypedList(mMessageTypeIdPairs); + } +} diff --git a/telephony/java/android/telephony/ims/RcsManager.aidl b/telephony/java/android/telephony/ims/RcsMessageSnippet.aidl index 63bc71c5ee46..99b8eb704e00 100644 --- a/telephony/java/android/telephony/ims/RcsManager.aidl +++ b/telephony/java/android/telephony/ims/RcsMessageSnippet.aidl @@ -17,4 +17,4 @@ package android.telephony.ims; -parcelable RcsManager; +parcelable RcsMessageSnippet; diff --git a/telephony/java/android/telephony/ims/RcsMessageSnippet.java b/telephony/java/android/telephony/ims/RcsMessageSnippet.java new file mode 100644 index 000000000000..9399c2003827 --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsMessageSnippet.java @@ -0,0 +1,98 @@ +/* + * Copyright (C) 2019 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 android.telephony.ims; + +import android.annotation.Nullable; +import android.os.Parcel; +import android.os.Parcelable; +import android.telephony.ims.RcsMessage.RcsMessageStatus; + +/** + * An immutable summary of the latest {@link RcsMessage} on an {@link RcsThread} + * + * @hide TODO: make public + */ +public class RcsMessageSnippet implements Parcelable { + private final String mText; + private final @RcsMessageStatus int mStatus; + private final long mTimestamp; + + /** + * @hide + */ + public RcsMessageSnippet(String text, @RcsMessageStatus int status, long timestamp) { + mText = text; + mStatus = status; + mTimestamp = timestamp; + } + + /** + * @return Returns the text of the {@link RcsMessage} with highest origination timestamp value + * (i.e. latest) in this thread + */ + @Nullable + public String getSnippetText() { + return mText; + } + + /** + * @return Returns the status of the {@link RcsMessage} with highest origination timestamp value + * (i.e. latest) in this thread + */ + public @RcsMessageStatus int getSnippetStatus() { + return mStatus; + } + + /** + * @return Returns the timestamp of the {@link RcsMessage} with highest origination timestamp + * value (i.e. latest) in this thread + */ + public long getSnippetTimestamp() { + return mTimestamp; + } + + protected RcsMessageSnippet(Parcel in) { + mText = in.readString(); + mStatus = in.readInt(); + mTimestamp = in.readLong(); + } + + public static final Creator<RcsMessageSnippet> CREATOR = + new Creator<RcsMessageSnippet>() { + @Override + public RcsMessageSnippet createFromParcel(Parcel in) { + return new RcsMessageSnippet(in); + } + + @Override + public RcsMessageSnippet[] newArray(int size) { + return new RcsMessageSnippet[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(mText); + dest.writeInt(mStatus); + dest.writeLong(mTimestamp); + } +} diff --git a/telephony/java/android/telephony/ims/RcsMessageStore.java b/telephony/java/android/telephony/ims/RcsMessageStore.java index 1bf6ffd81ca0..c8c36a8e479b 100644 --- a/telephony/java/android/telephony/ims/RcsMessageStore.java +++ b/telephony/java/android/telephony/ims/RcsMessageStore.java @@ -16,106 +16,223 @@ package android.telephony.ims; +import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.WorkerThread; -import android.os.RemoteException; -import android.os.ServiceManager; -import android.telephony.Rlog; -import android.telephony.ims.aidl.IRcs; +import android.net.Uri; + +import java.util.List; /** * RcsMessageStore is the application interface to RcsProvider and provides access methods to * RCS related database tables. + * * @hide - TODO make this public */ public class RcsMessageStore { - static final String TAG = "RcsMessageStore"; - /** * Returns the first chunk of existing {@link RcsThread}s in the common storage. + * * @param queryParameters Parameters to specify to return a subset of all RcsThreads. * Passing a value of null will return all threads. + * @throws RcsMessageStoreException if the query could not be completed on the storage */ @WorkerThread - public RcsThreadQueryResult getRcsThreads(@Nullable RcsThreadQueryParameters queryParameters) { - try { - IRcs iRcs = IRcs.Stub.asInterface(ServiceManager.getService("ircs")); - if (iRcs != null) { - return iRcs.getRcsThreads(queryParameters); - } - } catch (RemoteException re) { - Rlog.e(TAG, "RcsMessageStore: Exception happened during getRcsThreads", re); - } - - return null; + @NonNull + public RcsThreadQueryResult getRcsThreads(@Nullable RcsThreadQueryParameters queryParameters) + throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getRcsThreads(queryParameters)); } /** * Returns the next chunk of {@link RcsThread}s in the common storage. + * * @param continuationToken A token to continue the query to get the next chunk. This is - * obtained through {@link RcsThreadQueryResult#nextChunkToken}. + * obtained through {@link RcsThreadQueryResult#getContinuationToken}. + * @throws RcsMessageStoreException if the query could not be completed on the storage */ @WorkerThread - public RcsThreadQueryResult getRcsThreads(RcsThreadQueryContinuationToken continuationToken) { - try { - IRcs iRcs = IRcs.Stub.asInterface(ServiceManager.getService("ircs")); - if (iRcs != null) { - return iRcs.getRcsThreadsWithToken(continuationToken); - } - } catch (RemoteException re) { - Rlog.e(TAG, "RcsMessageStore: Exception happened during getRcsThreads", re); - } + @NonNull + public RcsThreadQueryResult getRcsThreads(@NonNull RcsQueryContinuationToken continuationToken) + throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getRcsThreadsWithToken(continuationToken)); + } + + /** + * Returns the first chunk of existing {@link RcsParticipant}s in the common storage. + * + * @param queryParameters Parameters to specify to return a subset of all RcsParticipants. + * Passing a value of null will return all participants. + * @throws RcsMessageStoreException if the query could not be completed on the storage + */ + @WorkerThread + @NonNull + public RcsParticipantQueryResult getRcsParticipants( + @Nullable RcsParticipantQueryParameters queryParameters) + throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getParticipants(queryParameters)); + } + + /** + * Returns the next chunk of {@link RcsParticipant}s in the common storage. + * + * @param continuationToken A token to continue the query to get the next chunk. This is + * obtained through + * {@link RcsParticipantQueryResult#getContinuationToken} + * @throws RcsMessageStoreException if the query could not be completed on the storage + */ + @WorkerThread + @NonNull + public RcsParticipantQueryResult getRcsParticipants( + @NonNull RcsQueryContinuationToken continuationToken) + throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getParticipantsWithToken(continuationToken)); + } - return null; + /** + * Returns the first chunk of existing {@link RcsMessage}s in the common storage. + * + * @param queryParameters Parameters to specify to return a subset of all RcsMessages. + * Passing a value of null will return all messages. + * @throws RcsMessageStoreException if the query could not be completed on the storage + */ + @WorkerThread + @NonNull + public RcsMessageQueryResult getRcsMessages( + @Nullable RcsMessageQueryParameters queryParameters) throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getMessages(queryParameters)); + } + + /** + * Returns the next chunk of {@link RcsMessage}s in the common storage. + * + * @param continuationToken A token to continue the query to get the next chunk. This is + * obtained through {@link RcsMessageQueryResult#getContinuationToken} + * @throws RcsMessageStoreException if the query could not be completed on the storage + */ + @WorkerThread + @NonNull + public RcsMessageQueryResult getRcsMessages( + @NonNull RcsQueryContinuationToken continuationToken) throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getMessagesWithToken(continuationToken)); + } + + /** + * Returns the first chunk of existing {@link RcsEvent}s in the common storage. + * + * @param queryParameters Parameters to specify to return a subset of all RcsEvents. + * Passing a value of null will return all events. + * @throws RcsMessageStoreException if the query could not be completed on the storage + */ + @WorkerThread + @NonNull + public RcsEventQueryResult getRcsEvents( + @Nullable RcsEventQueryParameters queryParameters) throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getEvents(queryParameters)); + } + + /** + * Returns the next chunk of {@link RcsEvent}s in the common storage. + * + * @param continuationToken A token to continue the query to get the next chunk. This is + * obtained through {@link RcsEventQueryResult#getContinuationToken}. + * @throws RcsMessageStoreException if the query could not be completed on the storage + */ + @WorkerThread + @NonNull + public RcsEventQueryResult getRcsEvents( + @NonNull RcsQueryContinuationToken continuationToken) throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getEventsWithToken(continuationToken)); + } + + /** + * Persists an {@link RcsEvent} to common storage. + * + * @param persistableEvent The {@link RcsEvent} to persist into storage. + * @throws RcsMessageStoreException if the query could not be completed on the storage + * + * @see RcsGroupThreadNameChangedEvent + * @see RcsGroupThreadIconChangedEvent + * @see RcsGroupThreadParticipantJoinedEvent + * @see RcsGroupThreadParticipantLeftEvent + * @see RcsParticipantAliasChangedEvent + */ + @WorkerThread + @NonNull + public void persistRcsEvent(RcsEvent persistableEvent) throws RcsMessageStoreException { + persistableEvent.persist(); } /** * Creates a new 1 to 1 thread with the given participant and persists it in the storage. + * + * @param recipient The {@link RcsParticipant} that will receive the messages in this thread. + * @return The newly created {@link Rcs1To1Thread} + * @throws RcsMessageStoreException if the thread could not be persisted in the storage */ @WorkerThread - public Rcs1To1Thread createRcs1To1Thread(RcsParticipant recipient) { - try { - IRcs iRcs = IRcs.Stub.asInterface(ServiceManager.getService("ircs")); - if (iRcs != null) { - return iRcs.createRcs1To1Thread(recipient); + @NonNull + public Rcs1To1Thread createRcs1To1Thread(@NonNull RcsParticipant recipient) + throws RcsMessageStoreException { + return new Rcs1To1Thread( + RcsControllerCall.call(iRcs -> iRcs.createRcs1To1Thread(recipient.getId()))); + } + + /** + * Creates a new group thread with the given participants and persists it in the storage. + * + * @throws RcsMessageStoreException if the thread could not be persisted in the storage + */ + @WorkerThread + @NonNull + public RcsGroupThread createGroupThread(@Nullable List<RcsParticipant> recipients, + @Nullable String groupName, @Nullable Uri groupIcon) throws RcsMessageStoreException { + int[] recipientIds = null; + if (recipients != null) { + recipientIds = new int[recipients.size()]; + + for (int i = 0; i < recipients.size(); i++) { + recipientIds[i] = recipients.get(i).getId(); } - } catch (RemoteException re) { - Rlog.e(TAG, "RcsMessageStore: Exception happened during createRcs1To1Thread", re); } - return null; + int[] finalRecipientIds = recipientIds; + return new RcsGroupThread(RcsControllerCall.call( + iRcs -> iRcs.createGroupThread(finalRecipientIds, groupName, groupIcon))); } /** - * Delete the {@link RcsThread} identified by the given threadId. - * @param threadId threadId of the thread to be deleted. + * Delete the given {@link RcsThread} from the storage. + * + * @param thread The thread to be deleted. + * @throws RcsMessageStoreException if the thread could not be deleted from the storage */ @WorkerThread - public void deleteThread(int threadId) { - try { - IRcs iRcs = IRcs.Stub.asInterface(ServiceManager.getService("ircs")); - if (iRcs != null) { - iRcs.deleteThread(threadId); - } - } catch (RemoteException re) { - Rlog.e(TAG, "RcsMessageStore: Exception happened during deleteThread", re); + public void deleteThread(@NonNull RcsThread thread) throws RcsMessageStoreException { + if (thread == null) { + return; + } + + boolean isDeleteSucceeded = RcsControllerCall.call( + iRcs -> iRcs.deleteThread(thread.getThreadId(), thread.getThreadType())); + + if (!isDeleteSucceeded) { + throw new RcsMessageStoreException("Could not delete RcsThread"); } } /** * Creates a new participant and persists it in the storage. + * * @param canonicalAddress The defining address (e.g. phone number) of the participant. + * @param alias The RCS alias for the participant. + * @throws RcsMessageStoreException if the participant could not be created on the storage */ - public RcsParticipant createRcsParticipant(String canonicalAddress) { - try { - IRcs iRcs = IRcs.Stub.asInterface(ServiceManager.getService("ircs")); - if (iRcs != null) { - return iRcs.createRcsParticipant(canonicalAddress); - } - } catch (RemoteException re) { - Rlog.e(TAG, "RcsMessageStore: Exception happened during createRcsParticipant", re); - } - - return null; + @WorkerThread + @NonNull + public RcsParticipant createRcsParticipant(String canonicalAddress, @Nullable String alias) + throws RcsMessageStoreException { + return new RcsParticipant( + RcsControllerCall.call(iRcs -> iRcs.createRcsParticipant(canonicalAddress, alias))); } } diff --git a/telephony/java/android/telephony/ims/RcsParticipantEvent.java b/telephony/java/android/telephony/ims/RcsMessageStoreException.java index 371b8b723d0a..e158f1a55aec 100644 --- a/telephony/java/android/telephony/ims/RcsParticipantEvent.java +++ b/telephony/java/android/telephony/ims/RcsMessageStoreException.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2019 The Android Open Source Project + * Copyright (c) 2019 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. @@ -13,13 +13,23 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package android.telephony.ims; -import android.os.Parcelable; +package android.telephony.ims; /** - * An event that is associated with an {@link RcsParticipant} - * @hide - TODO(sahinc) make this public + * An exception that happened on {@link RcsMessageStore} or one of the derived storage classes in + * {@link android.telephony.ims} + * + * @hide TODO: make public */ -public abstract class RcsParticipantEvent implements Parcelable { +public class RcsMessageStoreException extends Exception { + + /** + * Constructs an {@link RcsMessageStoreException} with the specified detail message. + * @param message The detail message + * @see Throwable#getMessage() + */ + public RcsMessageStoreException(String message) { + super(message); + } } diff --git a/telephony/java/android/telephony/ims/RcsMultiMediaPart.java b/telephony/java/android/telephony/ims/RcsMultiMediaPart.java deleted file mode 100644 index d295fba365f0..000000000000 --- a/telephony/java/android/telephony/ims/RcsMultiMediaPart.java +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright (C) 2019 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 android.telephony.ims; - -import android.os.Parcel; - -/** - * A part of a composite {@link RcsMessage} that holds a media that is rendered on the screen - * (i.e. image, video etc) - * @hide - TODO(sahinc) make this public - */ -public class RcsMultiMediaPart extends RcsFileTransferPart { - public static final Creator<RcsMultiMediaPart> CREATOR = new Creator<RcsMultiMediaPart>() { - @Override - public RcsMultiMediaPart createFromParcel(Parcel in) { - return new RcsMultiMediaPart(in); - } - - @Override - public RcsMultiMediaPart[] newArray(int size) { - return new RcsMultiMediaPart[size]; - } - }; - - protected RcsMultiMediaPart(Parcel in) { - super(in); - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - } -} diff --git a/telephony/java/android/telephony/ims/RcsMultimediaPart.aidl b/telephony/java/android/telephony/ims/RcsMultimediaPart.aidl deleted file mode 100644 index 5992d95c3b9c..000000000000 --- a/telephony/java/android/telephony/ims/RcsMultimediaPart.aidl +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * Copyright 2019, 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 android.telephony.ims; - -parcelable RcsMultimediaPart; diff --git a/telephony/java/android/telephony/ims/RcsOutgoingMessage.aidl b/telephony/java/android/telephony/ims/RcsOutgoingMessage.aidl deleted file mode 100644 index 6e0c80f3af81..000000000000 --- a/telephony/java/android/telephony/ims/RcsOutgoingMessage.aidl +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * Copyright 2019, 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 android.telephony.ims; - -parcelable RcsOutgoingMessage; diff --git a/telephony/java/android/telephony/ims/RcsOutgoingMessage.java b/telephony/java/android/telephony/ims/RcsOutgoingMessage.java index bfb161133618..0bd55ec2d25a 100644 --- a/telephony/java/android/telephony/ims/RcsOutgoingMessage.java +++ b/telephony/java/android/telephony/ims/RcsOutgoingMessage.java @@ -15,34 +15,53 @@ */ package android.telephony.ims; -import android.os.Parcel; +import android.annotation.NonNull; +import android.annotation.WorkerThread; + +import java.util.ArrayList; +import java.util.List; /** * This is a single instance of a message sent over RCS. - * @hide - TODO(sahinc) make this public + * + * @hide - TODO(109759350) make this public */ public class RcsOutgoingMessage extends RcsMessage { - public static final Creator<RcsOutgoingMessage> CREATOR = new Creator<RcsOutgoingMessage>() { - @Override - public RcsOutgoingMessage createFromParcel(Parcel in) { - return new RcsOutgoingMessage(in); - } + RcsOutgoingMessage(int id) { + super(id); + } - @Override - public RcsOutgoingMessage[] newArray(int size) { - return new RcsOutgoingMessage[size]; - } - }; + /** + * @return Returns the {@link RcsOutgoingMessageDelivery}s associated with this message. Please + * note that the deliveries returned for the {@link RcsOutgoingMessage} may not always match the + * {@link RcsParticipant}s on the {@link RcsGroupThread} as the group recipients may have + * changed. + * @throws RcsMessageStoreException if the outgoing deliveries could not be read from storage. + */ + @NonNull + @WorkerThread + public List<RcsOutgoingMessageDelivery> getOutgoingDeliveries() + throws RcsMessageStoreException { + int[] deliveryParticipants; + List<RcsOutgoingMessageDelivery> messageDeliveries = new ArrayList<>(); - protected RcsOutgoingMessage(Parcel in) { - } + deliveryParticipants = RcsControllerCall.call( + iRcs -> iRcs.getMessageRecipients(mId)); - @Override - public int describeContents() { - return 0; + if (deliveryParticipants != null) { + for (Integer deliveryParticipant : deliveryParticipants) { + messageDeliveries.add(new RcsOutgoingMessageDelivery(deliveryParticipant, mId)); + } + } + + return messageDeliveries; } + /** + * @return Returns {@code false} as this is not an incoming message. + */ @Override - public void writeToParcel(Parcel dest, int flags) { + public boolean isIncoming() { + return false; } } diff --git a/telephony/java/android/telephony/ims/RcsOutgoingMessageDelivery.java b/telephony/java/android/telephony/ims/RcsOutgoingMessageDelivery.java new file mode 100644 index 000000000000..b93f892df295 --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsOutgoingMessageDelivery.java @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.telephony.ims; + +import android.annotation.NonNull; +import android.annotation.WorkerThread; + +/** + * This class holds the delivery information of an {@link RcsOutgoingMessage} for each + * {@link RcsParticipant} that the message was intended for. + * + * @hide - TODO(109759350) make this public + */ +public class RcsOutgoingMessageDelivery { + // The participant that this delivery is intended for + private final int mRecipientId; + // The message this delivery is associated with + private final int mRcsOutgoingMessageId; + + /** + * Constructor to be used with RcsOutgoingMessage.getDelivery() + * + * @hide + */ + RcsOutgoingMessageDelivery(int recipientId, int messageId) { + mRecipientId = recipientId; + mRcsOutgoingMessageId = messageId; + } + + /** + * Sets the delivery time of this outgoing delivery and persists into storage. + * + * @param deliveredTimestamp The timestamp to set to delivery. It is defined as milliseconds + * passed after midnight, January 1, 1970 UTC + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setDeliveredTimestamp(long deliveredTimestamp) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setOutgoingDeliveryDeliveredTimestamp( + mRcsOutgoingMessageId, mRecipientId, deliveredTimestamp)); + } + + /** + * @return Returns the delivered timestamp of the associated message to the associated + * participant. Timestamp is defined as milliseconds passed after midnight, January 1, 1970 UTC. + * Returns 0 if the {@link RcsOutgoingMessage} is not delivered yet. + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public long getDeliveredTimestamp() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getOutgoingDeliveryDeliveredTimestamp( + mRcsOutgoingMessageId, mRecipientId)); + } + + /** + * Sets the seen time of this outgoing delivery and persists into storage. + * + * @param seenTimestamp The timestamp to set to delivery. It is defined as milliseconds + * passed after midnight, January 1, 1970 UTC + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setSeenTimestamp(long seenTimestamp) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setOutgoingDeliverySeenTimestamp( + mRcsOutgoingMessageId, mRecipientId, seenTimestamp)); + } + + /** + * @return Returns the seen timestamp of the associated message by the associated + * participant. Timestamp is defined as milliseconds passed after midnight, January 1, 1970 UTC. + * Returns 0 if the {@link RcsOutgoingMessage} is not seen yet. + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public long getSeenTimestamp() throws RcsMessageStoreException { + return RcsControllerCall.call( + iRcs -> iRcs.getOutgoingDeliverySeenTimestamp(mRcsOutgoingMessageId, mRecipientId)); + } + + /** + * Sets the status of this outgoing delivery and persists into storage. + * + * @param status The status of the associated {@link RcsMessage}s delivery to the associated + * {@link RcsParticipant} + * @throws RcsMessageStoreException if the value could not be persisted into storage + */ + @WorkerThread + public void setStatus(@RcsMessage.RcsMessageStatus int status) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setOutgoingDeliveryStatus( + mRcsOutgoingMessageId, mRecipientId, status)); + } + + /** + * @return Returns the status of this outgoing delivery. + * @throws RcsMessageStoreException if the value could not be read from the storage + */ + @WorkerThread + public @RcsMessage.RcsMessageStatus int getStatus() throws RcsMessageStoreException { + return RcsControllerCall.call( + iRcs -> iRcs.getOutgoingDeliveryStatus(mRcsOutgoingMessageId, mRecipientId)); + } + + /** + * @return Returns the recipient associated with this delivery. + */ + @NonNull + public RcsParticipant getRecipient() { + return new RcsParticipant(mRecipientId); + } + + /** + * @return Returns the {@link RcsOutgoingMessage} associated with this delivery. + */ + @NonNull + public RcsOutgoingMessage getMessage() { + return new RcsOutgoingMessage(mRcsOutgoingMessageId); + } +} diff --git a/telephony/java/android/telephony/ims/RcsParticipant.aidl b/telephony/java/android/telephony/ims/RcsParticipant.aidl deleted file mode 100644 index 1c4436367e54..000000000000 --- a/telephony/java/android/telephony/ims/RcsParticipant.aidl +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * Copyright 2019, 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 android.telephony.ims; - -parcelable RcsParticipant; diff --git a/telephony/java/android/telephony/ims/RcsParticipant.java b/telephony/java/android/telephony/ims/RcsParticipant.java index f678ec7e435b..ce0ad2c4749b 100644 --- a/telephony/java/android/telephony/ims/RcsParticipant.java +++ b/telephony/java/android/telephony/ims/RcsParticipant.java @@ -15,33 +15,17 @@ */ package android.telephony.ims; -import static android.telephony.ims.RcsMessageStore.TAG; - -import android.annotation.NonNull; +import android.annotation.Nullable; import android.annotation.WorkerThread; -import android.os.Parcel; -import android.os.Parcelable; -import android.os.RemoteException; -import android.os.ServiceManager; -import android.telephony.Rlog; -import android.telephony.ims.aidl.IRcs; -import android.text.TextUtils; - -import com.android.internal.util.Preconditions; /** * RcsParticipant is an RCS capable contact that can participate in {@link RcsThread}s. - * @hide - TODO(sahinc) make this public + * + * @hide - TODO(109759350) make this public */ -public class RcsParticipant implements Parcelable { +public class RcsParticipant { // The row ID of this participant in the database private int mId; - // The phone number of this participant - private String mCanonicalAddress; - // The RCS alias of this participant. This is different than the name of the contact in the - // Contacts app - i.e. RCS protocol allows users to define aliases for themselves that doesn't - // require other users to add them as contacts and give them a name. - private String mAlias; /** * Constructor for {@link com.android.internal.telephony.ims.RcsMessageStoreController} @@ -49,106 +33,95 @@ public class RcsParticipant implements Parcelable { * * @hide */ - public RcsParticipant(int id, @NonNull String canonicalAddress) { + public RcsParticipant(int id) { mId = id; - mCanonicalAddress = canonicalAddress; } /** - * @return Returns the canonical address (i.e. normalized phone number) for this participant + * @return Returns the canonical address (i.e. normalized phone number) for this + * {@link RcsParticipant} + * @throws RcsMessageStoreException if the value could not be read from the storage */ - public String getCanonicalAddress() { - return mCanonicalAddress; + @Nullable + @WorkerThread + public String getCanonicalAddress() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getRcsParticipantCanonicalAddress(mId)); } /** - * Sets the canonical address for this participant and updates it in storage. - * @param canonicalAddress the canonical address to update to. + * @return Returns the alias for this {@link RcsParticipant}. Alias is usually the real name of + * the person themselves. Please see US5-15 - GSMA RCC.71 (RCS Universal Profile Service + * Definition Document) + * @throws RcsMessageStoreException if the value could not be read from the storage */ + @Nullable @WorkerThread - public void setCanonicalAddress(@NonNull String canonicalAddress) { - Preconditions.checkNotNull(canonicalAddress); - if (canonicalAddress.equals(mCanonicalAddress)) { - return; - } - - mCanonicalAddress = canonicalAddress; - - try { - IRcs iRcs = IRcs.Stub.asInterface(ServiceManager.getService("ircs")); - if (iRcs != null) { - iRcs.updateRcsParticipantCanonicalAddress(mId, mCanonicalAddress); - } - } catch (RemoteException re) { - Rlog.e(TAG, "RcsParticipant: Exception happened during setCanonicalAddress", re); - } + public String getAlias() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getRcsParticipantAlias(mId)); } /** - * @return Returns the alias for this participant. Alias is usually the real name of the person - * themselves. + * Sets the alias for this {@link RcsParticipant} and persists it in storage. Alias is usually + * the real name of the person themselves. Please see US5-15 - GSMA RCC.71 (RCS Universal + * Profile Service Definition Document) + * + * @param alias The alias to set to. + * @throws RcsMessageStoreException if the value could not be persisted into storage */ - public String getAlias() { - return mAlias; + @WorkerThread + public void setAlias(String alias) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setRcsParticipantAlias(mId, alias)); } /** - * Sets the alias for this participant and persists it in storage. Alias is usually the real - * name of the person themselves. + * @return Returns the contact ID for this {@link RcsParticipant}. Contact ID is a unique ID for + * an {@link RcsParticipant} that is RCS provisioned. Please see 4.4.5 - GSMA RCC.53 (RCS Device + * API 1.6 Specification) + * @throws RcsMessageStoreException if the value could not be read from the storage */ + @Nullable @WorkerThread - public void setAlias(String alias) { - if (TextUtils.equals(mAlias, alias)) { - return; - } - mAlias = alias; - - try { - IRcs iRcs = IRcs.Stub.asInterface(ServiceManager.getService("ircs")); - if (iRcs != null) { - iRcs.updateRcsParticipantAlias(mId, mAlias); - } - } catch (RemoteException re) { - Rlog.e(TAG, "RcsParticipant: Exception happened during setCanonicalAddress", re); - } + public String getContactId() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getRcsParticipantContactId(mId)); } /** - * Returns the row id of this participant. This is not meant to be part of the SDK + * Sets the contact ID for this {@link RcsParticipant}. Contact ID is a unique ID for + * an {@link RcsParticipant} that is RCS provisioned. Please see 4.4.5 - GSMA RCC.53 (RCS Device + * API 1.6 Specification) * - * @hide + * @param contactId The contact ID to set to. + * @throws RcsMessageStoreException if the value could not be persisted into storage */ - public int getId() { - return mId; + @WorkerThread + public void setContactId(String contactId) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn(iRcs -> iRcs.setRcsParticipantContactId(mId, contactId)); } - public static final Creator<RcsParticipant> CREATOR = new Creator<RcsParticipant>() { - @Override - public RcsParticipant createFromParcel(Parcel in) { - return new RcsParticipant(in); + @Override + public boolean equals(Object obj) { + if (this == obj) { + return true; } - - @Override - public RcsParticipant[] newArray(int size) { - return new RcsParticipant[size]; + if (!(obj instanceof RcsParticipant)) { + return false; } - }; + RcsParticipant other = (RcsParticipant) obj; - protected RcsParticipant(Parcel in) { - mId = in.readInt(); - mCanonicalAddress = in.readString(); - mAlias = in.readString(); + return mId == other.mId; } @Override - public int describeContents() { - return 0; + public int hashCode() { + return mId; } - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeInt(mId); - dest.writeString(mCanonicalAddress); - dest.writeString(mAlias); + /** + * Returns the row id of this participant. This is not meant to be part of the SDK + * + * @hide + */ + public int getId() { + return mId; } } diff --git a/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEvent.java b/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEvent.java index b9ca5a86f84d..04cdf86df9c0 100644 --- a/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEvent.java +++ b/telephony/java/android/telephony/ims/RcsParticipantAliasChangedEvent.java @@ -15,27 +15,93 @@ */ package android.telephony.ims; +import android.annotation.NonNull; +import android.annotation.Nullable; import android.os.Parcel; /** - * An event that indicates an {@link RcsParticipant}'s alias was changed. - * @hide - TODO(sahinc) make this public + * An event that indicates an {@link RcsParticipant}'s alias was changed. Please see US18-2 - GSMA + * RCC.71 (RCS Universal Profile Service Definition Document) + * + * @hide - TODO(109759350) make this public */ -public class RcsParticipantAliasChangedEvent extends RcsParticipantEvent { +public class RcsParticipantAliasChangedEvent extends RcsEvent { + // The ID of the participant that changed their alias + private int mParticipantId; + // The new alias of the above participant + private String mNewAlias; + + /** + * Creates a new {@link RcsParticipantAliasChangedEvent}. This event is not persisted into + * storage until {@link RcsMessageStore#persistRcsEvent(RcsEvent)} is called. + * + * @param timestamp The timestamp of when this event happened, in milliseconds passed after + * midnight, January 1st, 1970 UTC + * @param participant The {@link RcsParticipant} that got their alias changed + * @param newAlias The new alias the {@link RcsParticipant} has. + * @see RcsMessageStore#persistRcsEvent(RcsEvent) + */ + public RcsParticipantAliasChangedEvent(long timestamp, @NonNull RcsParticipant participant, + @Nullable String newAlias) { + super(timestamp); + mParticipantId = participant.getId(); + mNewAlias = newAlias; + } + + /** + * @hide - internal constructor for queries + */ + public RcsParticipantAliasChangedEvent(long timestamp, int participantId, + @Nullable String newAlias) { + super(timestamp); + mParticipantId = participantId; + mNewAlias = newAlias; + } + + /** + * @return Returns the {@link RcsParticipant} whose alias was changed. + */ + @NonNull + public RcsParticipant getParticipantId() { + return new RcsParticipant(mParticipantId); + } + + /** + * @return Returns the alias of the associated {@link RcsParticipant} after this event happened + */ + @Nullable + public String getNewAlias() { + return mNewAlias; + } + + /** + * Persists the event to the data store. + * + * @hide - not meant for public use. + */ + @Override + public void persist() throws RcsMessageStoreException { + RcsControllerCall.call(iRcs -> iRcs.createParticipantAliasChangedEvent( + getTimestamp(), getParticipantId().getId(), getNewAlias())); + } + public static final Creator<RcsParticipantAliasChangedEvent> CREATOR = new Creator<RcsParticipantAliasChangedEvent>() { - @Override - public RcsParticipantAliasChangedEvent createFromParcel(Parcel in) { - return new RcsParticipantAliasChangedEvent(in); - } + @Override + public RcsParticipantAliasChangedEvent createFromParcel(Parcel in) { + return new RcsParticipantAliasChangedEvent(in); + } - @Override - public RcsParticipantAliasChangedEvent[] newArray(int size) { - return new RcsParticipantAliasChangedEvent[size]; - } - }; + @Override + public RcsParticipantAliasChangedEvent[] newArray(int size) { + return new RcsParticipantAliasChangedEvent[size]; + } + }; protected RcsParticipantAliasChangedEvent(Parcel in) { + super(in); + mNewAlias = in.readString(); + mParticipantId = in.readInt(); } @Override @@ -45,5 +111,8 @@ public class RcsParticipantAliasChangedEvent extends RcsParticipantEvent { @Override public void writeToParcel(Parcel dest, int flags) { + super.writeToParcel(dest, flags); + dest.writeString(mNewAlias); + dest.writeInt(mParticipantId); } } diff --git a/telephony/java/android/telephony/ims/RcsParticipantEvent.aidl b/telephony/java/android/telephony/ims/RcsParticipantEvent.aidl deleted file mode 100644 index c0a77897abd5..000000000000 --- a/telephony/java/android/telephony/ims/RcsParticipantEvent.aidl +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * Copyright 2019, 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 android.telephony.ims; - -parcelable RcsParticipantEvent; diff --git a/telephony/java/android/telephony/ims/RcsParticipantQueryParameters.aidl b/telephony/java/android/telephony/ims/RcsParticipantQueryParameters.aidl new file mode 100644 index 000000000000..ea8288cd9f6a --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsParticipantQueryParameters.aidl @@ -0,0 +1,20 @@ +/* + * + * Copyright 2019, 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 android.telephony.ims; + +parcelable RcsParticipantQueryParameters; diff --git a/telephony/java/android/telephony/ims/RcsParticipantQueryParameters.java b/telephony/java/android/telephony/ims/RcsParticipantQueryParameters.java new file mode 100644 index 000000000000..3611fc187fc4 --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsParticipantQueryParameters.java @@ -0,0 +1,310 @@ +/* + * Copyright (C) 2019 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 android.telephony.ims; + +import android.annotation.CheckResult; +import android.annotation.IntDef; +import android.annotation.IntRange; +import android.os.Parcel; +import android.os.Parcelable; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.security.InvalidParameterException; + +/** + * The parameters to pass into + * {@link RcsMessageStore#getRcsParticipants(RcsParticipantQueryParameters)} in order to select a + * subset of {@link RcsThread}s present in the message store. + * + * @hide TODO - make the Builder and builder() public. The rest should stay internal only. + */ +public class RcsParticipantQueryParameters implements Parcelable { + /** + * Flag to set with {@link Builder#setSortProperty(int)} to sort the results in the order of + * creation time for faster query results + */ + public static final int SORT_BY_CREATION_ORDER = 0; + + /** + * Flag to set with {@link Builder#setSortProperty(int)} to sort depending on the + * {@link RcsParticipant} aliases + */ + public static final int SORT_BY_ALIAS = 1; + + /** + * Flag to set with {@link Builder#setSortProperty(int)} to sort depending on the + * {@link RcsParticipant} canonical addresses + */ + public static final int SORT_BY_CANONICAL_ADDRESS = 2; + + @Retention(RetentionPolicy.SOURCE) + @IntDef({SORT_BY_CREATION_ORDER, SORT_BY_ALIAS, SORT_BY_CANONICAL_ADDRESS}) + public @interface SortingProperty { + } + + // The SQL "like" statement to filter against participant aliases + private String mAliasLike; + // The SQL "like" statement to filter against canonical addresses + private String mCanonicalAddressLike; + // The property to sort the result against + private @SortingProperty int mSortingProperty; + // Whether to sort the result in ascending order + private boolean mIsAscending; + // The number of results to be returned from the query + private int mLimit; + // Used to limit the results to participants of a single thread + private int mThreadId; + + /** + * @hide + */ + public static final String PARTICIPANT_QUERY_PARAMETERS_KEY = "participant_query_parameters"; + + RcsParticipantQueryParameters(int rcsThreadId, String aliasLike, String canonicalAddressLike, + @SortingProperty int sortingProperty, boolean isAscending, + int limit) { + mThreadId = rcsThreadId; + mAliasLike = aliasLike; + mCanonicalAddressLike = canonicalAddressLike; + mSortingProperty = sortingProperty; + mIsAscending = isAscending; + mLimit = limit; + } + + /** + * This is used in {@link com.android.internal.telephony.ims.RcsMessageStoreController} to get + * the thread that the result query should be limited to. + * + * As we do not expose any sort of integer ID's to public usage, this should be hidden. + * + * @hide - not meant for public use + */ + public int getThreadId() { + return mThreadId; + } + + /** + * @return Returns the SQL-inspired "LIKE" clause that will be used to match + * {@link RcsParticipant}s with respect to their aliases + * + * @see RcsParticipant#getAlias() + */ + public String getAliasLike() { + return mAliasLike; + } + + /** + * @return Returns the SQL-inspired "LIKE" clause that will be used to match + * {@link RcsParticipant}s with respect to their canonical addresses. + * + * @see RcsParticipant#getCanonicalAddress() + */ + public String getCanonicalAddressLike() { + return mCanonicalAddressLike; + } + + /** + * @return Returns the number of {@link RcsParticipant}s to be returned from the query. A value + * of 0 means there is no set limit. + */ + public int getLimit() { + return mLimit; + } + + /** + * @return Returns the property that will be used to sort the result against. + * @see SortingProperty + */ + public int getSortingProperty() { + return mSortingProperty; + } + + /** + * @return Returns {@code true} if the result set will be sorted in ascending order, + * {@code false} if it will be sorted in descending order. + */ + public boolean getSortDirection() { + return mIsAscending; + } + + /** + * A helper class to build the {@link RcsParticipantQueryParameters}. + */ + public static class Builder { + private String mAliasLike; + private String mCanonicalAddressLike; + private @SortingProperty int mSortingProperty; + private boolean mIsAscending; + private int mLimit = 100; + private int mThreadId; + + /** + * Creates a new builder for {@link RcsParticipantQueryParameters} to be used in + * {@link RcsMessageStore#getRcsParticipants(RcsParticipantQueryParameters)} + */ + public Builder() { + // empty implementation + } + + /** + * Limits the resulting {@link RcsParticipant}s to only the given {@link RcsThread} + * + * @param rcsThread The thread that the participants should be searched in. + * @return The same {@link Builder} to chain methods. + */ + @CheckResult + public Builder setThread(RcsThread rcsThread) { + mThreadId = rcsThread.getThreadId(); + return this; + } + + /** + * Sets an SQL-inspired "like" clause to match with participant aliases. Using a percent + * sign ('%') wildcard matches any sequence of zero or more characters. Using an underscore + * ('_') wildcard matches any single character. Not using any wildcards would only perform a + * string match.The input string is case-insensitive. + * + * The input "An%e" would match {@link RcsParticipant}s with names Anne, Annie, Antonie, + * while the input "An_e" would only match Anne. + * + * @param likeClause The like clause to use for matching {@link RcsParticipant} aliases. + * @return The same {@link Builder} to chain methods + */ + @CheckResult + public Builder setAliasLike(String likeClause) { + mAliasLike = likeClause; + return this; + } + + /** + * Sets an SQL-inspired "like" clause to match with participant addresses. Using a percent + * sign ('%') wildcard matches any sequence of zero or more characters. Using an underscore + * ('_') wildcard matches any single character. Not using any wildcards would only perform a + * string match. The input string is case-insensitive. + * + * The input "+999%111" would match {@link RcsParticipant}s with addresses like "+9995111" + * or "+99955555111", while the input "+999_111" would only match "+9995111". + * + * @param likeClause The like clause to use for matching {@link RcsParticipant} canonical + * addresses. + * @return The same {@link Builder} to chain methods + */ + @CheckResult + public Builder setCanonicalAddressLike(String likeClause) { + mCanonicalAddressLike = likeClause; + return this; + } + + /** + * Desired number of threads to be returned from the query. Passing in 0 will return all + * existing threads at once. The limit defaults to 100. + * + * @param limit The number to limit the query result to. + * @return The same instance of the builder to chain parameters. + * @throws InvalidParameterException If the given limit is negative. + */ + @CheckResult + public Builder setResultLimit(@IntRange(from = 0) int limit) + throws InvalidParameterException { + if (limit < 0) { + throw new InvalidParameterException("The query limit must be non-negative"); + } + + mLimit = limit; + return this; + } + + /** + * Sets the property where the results should be sorted against. Defaults to + * {@link RcsParticipantQueryParameters.SortingProperty#SORT_BY_CREATION_ORDER} + * + * @param sortingProperty against which property the results should be sorted + * @return The same instance of the builder to chain parameters. + */ + @CheckResult + public Builder setSortProperty(@SortingProperty int sortingProperty) { + mSortingProperty = sortingProperty; + return this; + } + + /** + * Sets whether the results should be sorted ascending or descending + * + * @param isAscending whether the results should be sorted ascending + * @return The same instance of the builder to chain parameters. + */ + @CheckResult + public Builder setSortDirection(boolean isAscending) { + mIsAscending = isAscending; + return this; + } + + /** + * Builds the {@link RcsParticipantQueryParameters} to use in + * {@link RcsMessageStore#getRcsParticipants(RcsParticipantQueryParameters)} + * + * @return An instance of {@link RcsParticipantQueryParameters} to use with the participant + * query. + */ + public RcsParticipantQueryParameters build() { + return new RcsParticipantQueryParameters(mThreadId, mAliasLike, mCanonicalAddressLike, + mSortingProperty, mIsAscending, mLimit); + } + } + + /** + * Parcelable boilerplate below. + */ + protected RcsParticipantQueryParameters(Parcel in) { + mAliasLike = in.readString(); + mCanonicalAddressLike = in.readString(); + mSortingProperty = in.readInt(); + mIsAscending = in.readByte() == 1; + mLimit = in.readInt(); + mThreadId = in.readInt(); + } + + public static final Creator<RcsParticipantQueryParameters> CREATOR = + new Creator<RcsParticipantQueryParameters>() { + @Override + public RcsParticipantQueryParameters createFromParcel(Parcel in) { + return new RcsParticipantQueryParameters(in); + } + + @Override + public RcsParticipantQueryParameters[] newArray(int size) { + return new RcsParticipantQueryParameters[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(mAliasLike); + dest.writeString(mCanonicalAddressLike); + dest.writeInt(mSortingProperty); + dest.writeByte((byte) (mIsAscending ? 1 : 0)); + dest.writeInt(mLimit); + dest.writeInt(mThreadId); + } + +} diff --git a/telephony/java/android/telephony/ims/RcsParticipantQueryResult.aidl b/telephony/java/android/telephony/ims/RcsParticipantQueryResult.aidl new file mode 100644 index 000000000000..db5c00c8ce00 --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsParticipantQueryResult.aidl @@ -0,0 +1,20 @@ +/* + * + * Copyright 2019, 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 android.telephony.ims; + +parcelable RcsParticipantQueryResult; diff --git a/telephony/java/android/telephony/ims/RcsParticipantQueryResult.java b/telephony/java/android/telephony/ims/RcsParticipantQueryResult.java new file mode 100644 index 000000000000..2f4ab465a6cf --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsParticipantQueryResult.java @@ -0,0 +1,105 @@ +/* + * Copyright (C) 2019 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 android.telephony.ims; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.os.Parcel; +import android.os.Parcelable; + +import java.util.ArrayList; +import java.util.List; + +/** + * The result of a {@link RcsMessageStore#getRcsParticipants(RcsParticipantQueryParameters)} + * call. This class allows getting the token for querying the next batch of participants in order to + * prevent handling large amounts of data at once. + * + * @hide + */ +public class RcsParticipantQueryResult implements Parcelable { + // A token for the caller to continue their query for the next batch of results + private RcsQueryContinuationToken mContinuationToken; + // The list of participant IDs returned with this query + private List<Integer> mParticipants; + + /** + * Internal constructor for {@link com.android.internal.telephony.ims.RcsMessageStoreController} + * to create query results + * + * @hide + */ + public RcsParticipantQueryResult( + RcsQueryContinuationToken continuationToken, + List<Integer> participants) { + mContinuationToken = continuationToken; + mParticipants = participants; + } + + /** + * Returns a token to call + * {@link RcsMessageStore#getRcsParticipants(RcsQueryContinuationToken)} + * to get the next batch of {@link RcsParticipant}s. + */ + @Nullable + public RcsQueryContinuationToken getContinuationToken() { + return mContinuationToken; + } + + /** + * Returns all the {@link RcsParticipant}s in the current query result. Call {@link + * RcsMessageStore#getRcsParticipants(RcsQueryContinuationToken)} to get the next + * batch of {@link RcsParticipant}s. + */ + @NonNull + public List<RcsParticipant> getParticipants() { + List<RcsParticipant> participantList = new ArrayList<>(); + for (Integer participantId : mParticipants) { + participantList.add(new RcsParticipant(participantId)); + } + + return participantList; + } + + protected RcsParticipantQueryResult(Parcel in) { + mContinuationToken = in.readParcelable( + RcsQueryContinuationToken.class.getClassLoader()); + } + + public static final Creator<RcsParticipantQueryResult> CREATOR = + new Creator<RcsParticipantQueryResult>() { + @Override + public RcsParticipantQueryResult createFromParcel(Parcel in) { + return new RcsParticipantQueryResult(in); + } + + @Override + public RcsParticipantQueryResult[] newArray(int size) { + return new RcsParticipantQueryResult[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeParcelable(mContinuationToken, flags); + } +} diff --git a/telephony/java/android/telephony/ims/RcsQueryContinuationToken.aidl b/telephony/java/android/telephony/ims/RcsQueryContinuationToken.aidl new file mode 100644 index 000000000000..319379a462de --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsQueryContinuationToken.aidl @@ -0,0 +1,20 @@ +/* + * + * Copyright 2019, 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 android.telephony.ims; + +parcelable RcsQueryContinuationToken; diff --git a/telephony/java/android/telephony/ims/RcsQueryContinuationToken.java b/telephony/java/android/telephony/ims/RcsQueryContinuationToken.java new file mode 100644 index 000000000000..e880651d6cdb --- /dev/null +++ b/telephony/java/android/telephony/ims/RcsQueryContinuationToken.java @@ -0,0 +1,151 @@ +/* + * Copyright (C) 2019 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 android.telephony.ims; + +import android.annotation.IntDef; +import android.os.Parcel; +import android.os.Parcelable; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +/** + * This interface allows using the same implementation for continuation token usage in + * {@link com.android.providers.telephony.RcsProvider} + * @hide - TODO make getQueryType() and types public - the rest should stay internal + */ +public class RcsQueryContinuationToken implements Parcelable { + /** + * Denotes that this {@link RcsQueryContinuationToken} token is meant to allow continuing + * {@link RcsEvent} queries + */ + public static final int EVENT_QUERY_CONTINUATION_TOKEN_TYPE = 0; + + /** + * Denotes that this {@link RcsQueryContinuationToken} token is meant to allow continuing + * {@link RcsMessage} queries + */ + public static final int MESSAGE_QUERY_CONTINUATION_TOKEN_TYPE = 1; + + /** + * Denotes that this {@link RcsQueryContinuationToken} token is meant to allow continuing + * {@link RcsParticipant} queries + */ + public static final int PARTICIPANT_QUERY_CONTINUATION_TOKEN_TYPE = 2; + + /** + * Denotes that this {@link RcsQueryContinuationToken} token is meant to allow continuing + * {@link RcsThread} queries + */ + public static final int THREAD_QUERY_CONTINUATION_TOKEN_TYPE = 3; + + /** + * @hide - not meant for public use + */ + public static final String QUERY_CONTINUATION_TOKEN = "query_continuation_token"; + + @Retention(RetentionPolicy.SOURCE) + @IntDef({EVENT_QUERY_CONTINUATION_TOKEN_TYPE, MESSAGE_QUERY_CONTINUATION_TOKEN_TYPE, + PARTICIPANT_QUERY_CONTINUATION_TOKEN_TYPE, THREAD_QUERY_CONTINUATION_TOKEN_TYPE}) + public @interface ContinuationTokenType {} + + // The type of query this token should allow to continue + private @ContinuationTokenType int mQueryType; + // The raw query string for the initial query + private final String mRawQuery; + // The number of results that is returned with each query + private final int mLimit; + // The offset value that this query should start the query from + private int mOffset; + + /** + * @hide + */ + public RcsQueryContinuationToken(@ContinuationTokenType int queryType, String rawQuery, + int limit, int offset) { + mQueryType = queryType; + mRawQuery = rawQuery; + mLimit = limit; + mOffset = offset; + } + + /** + * Returns the original raw query used on {@link com.android.providers.telephony.RcsProvider} + * @hide + */ + public String getRawQuery() { + return mRawQuery; + } + + /** + * Returns which index this continuation query should start from + * @hide + */ + public int getOffset() { + return mOffset; + } + + /** + * Increments the offset by the amount of result rows returned with the continuation query for + * the next query. + * @hide + */ + public void incrementOffset() { + mOffset += mLimit; + } + + /** + * Returns the type of query that this {@link RcsQueryContinuationToken} is intended to be used + * to continue. + */ + public @ContinuationTokenType int getQueryType() { + return mQueryType; + } + + protected RcsQueryContinuationToken(Parcel in) { + mQueryType = in.readInt(); + mRawQuery = in.readString(); + mLimit = in.readInt(); + mOffset = in.readInt(); + } + + public static final Creator<RcsQueryContinuationToken> CREATOR = + new Creator<RcsQueryContinuationToken>() { + @Override + public RcsQueryContinuationToken createFromParcel(Parcel in) { + return new RcsQueryContinuationToken(in); + } + + @Override + public RcsQueryContinuationToken[] newArray(int size) { + return new RcsQueryContinuationToken[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(mQueryType); + dest.writeString(mRawQuery); + dest.writeInt(mLimit); + dest.writeInt(mOffset); + } +} diff --git a/telephony/java/android/telephony/ims/RcsTextPart.aidl b/telephony/java/android/telephony/ims/RcsTextPart.aidl deleted file mode 100644 index 4f9fe1fe26fe..000000000000 --- a/telephony/java/android/telephony/ims/RcsTextPart.aidl +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * Copyright 2019, 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 android.telephony.ims; - -parcelable RcsTextPart; diff --git a/telephony/java/android/telephony/ims/RcsTextPart.java b/telephony/java/android/telephony/ims/RcsTextPart.java deleted file mode 100644 index 2a72df17f32a..000000000000 --- a/telephony/java/android/telephony/ims/RcsTextPart.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2019 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 android.telephony.ims; - -import android.os.Parcel; - -/** - * A part of a composite {@link RcsMessage} that holds a string - * @hide - TODO(sahinc) make this public - */ -public class RcsTextPart extends RcsPart { - public static final Creator<RcsTextPart> CREATOR = new Creator<RcsTextPart>() { - @Override - public RcsTextPart createFromParcel(Parcel in) { - return new RcsTextPart(in); - } - - @Override - public RcsTextPart[] newArray(int size) { - return new RcsTextPart[size]; - } - }; - - protected RcsTextPart(Parcel in) { - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - } -} diff --git a/telephony/java/android/telephony/ims/RcsThread.aidl b/telephony/java/android/telephony/ims/RcsThread.aidl deleted file mode 100644 index d9cf6dbc0ff0..000000000000 --- a/telephony/java/android/telephony/ims/RcsThread.aidl +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * Copyright 2019, 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 android.telephony; - -parcelable RcsThread;
\ No newline at end of file diff --git a/telephony/java/android/telephony/ims/RcsThread.java b/telephony/java/android/telephony/ims/RcsThread.java index c0a0d946d204..238f5e7ce625 100644 --- a/telephony/java/android/telephony/ims/RcsThread.java +++ b/telephony/java/android/telephony/ims/RcsThread.java @@ -16,60 +16,117 @@ package android.telephony.ims; -import android.os.Parcel; -import android.os.Parcelable; -import android.util.Log; +import static android.provider.Telephony.RcsColumns.RcsUnifiedThreadColumns.THREAD_TYPE_1_TO_1; +import static android.provider.Telephony.RcsColumns.RcsUnifiedThreadColumns.THREAD_TYPE_GROUP; + +import android.annotation.NonNull; +import android.annotation.WorkerThread; + +import com.android.internal.annotations.VisibleForTesting; /** * RcsThread represents a single RCS conversation thread. It holds messages that were sent and * received and events that occurred on that thread. - * @hide - TODO(sahinc) make this public + * + * @hide - TODO(109759350) make this public */ -public abstract class RcsThread implements Parcelable { - // Since this is an abstract class that gets parcelled, the sub-classes need to write these - // magic values into the parcel so that we know which type to unparcel into. - protected static final int RCS_1_TO_1_TYPE = 998; - protected static final int RCS_GROUP_TYPE = 999; - +public abstract class RcsThread { + // The rcs_participant_thread_id that represents this thread in the database protected int mThreadId; + /** + * @hide + */ protected RcsThread(int threadId) { mThreadId = threadId; } - protected RcsThread(Parcel in) { - mThreadId = in.readInt(); + /** + * @return Returns the summary of the latest message in this {@link RcsThread} packaged in an + * {@link RcsMessageSnippet} object + */ + @WorkerThread + @NonNull + public RcsMessageSnippet getSnippet() throws RcsMessageStoreException { + return RcsControllerCall.call(iRcs -> iRcs.getMessageSnippet(mThreadId)); + } + + /** + * Adds a new {@link RcsIncomingMessage} to this RcsThread and persists it in storage. + * + * @throws RcsMessageStoreException if the message could not be persisted into storage. + */ + @WorkerThread + @NonNull + public RcsIncomingMessage addIncomingMessage( + @NonNull RcsIncomingMessageCreationParameters rcsIncomingMessageCreationParameters) + throws RcsMessageStoreException { + return new RcsIncomingMessage(RcsControllerCall.call(iRcs -> iRcs.addIncomingMessage( + mThreadId, rcsIncomingMessageCreationParameters))); } - public static final Creator<RcsThread> CREATOR = new Creator<RcsThread>() { - @Override - public RcsThread createFromParcel(Parcel in) { - int type = in.readInt(); + /** + * Adds a new {@link RcsOutgoingMessage} to this RcsThread and persists it in storage. + * + * @throws RcsMessageStoreException if the message could not be persisted into storage. + */ + @WorkerThread + @NonNull + public RcsOutgoingMessage addOutgoingMessage( + @NonNull RcsMessageCreationParameters rcsMessageCreationParameters) + throws RcsMessageStoreException { + int messageId = RcsControllerCall.call(iRcs -> iRcs.addOutgoingMessage( + mThreadId, rcsMessageCreationParameters)); - switch (type) { - case RCS_1_TO_1_TYPE: - return new Rcs1To1Thread(in); - case RCS_GROUP_TYPE: - return new RcsGroupThread(in); - default: - Log.e(RcsMessageStore.TAG, "Cannot unparcel RcsThread, wrong type: " + type); - } - return null; - } + return new RcsOutgoingMessage(messageId); + } + + /** + * Deletes an {@link RcsMessage} from this RcsThread and updates the storage. + * + * @param rcsMessage The message to delete from the thread + * @throws RcsMessageStoreException if the message could not be deleted + */ + @WorkerThread + public void deleteMessage(@NonNull RcsMessage rcsMessage) throws RcsMessageStoreException { + RcsControllerCall.callWithNoReturn( + iRcs -> iRcs.deleteMessage(rcsMessage.getId(), rcsMessage.isIncoming(), mThreadId, + isGroup())); + } + + /** + * Convenience function for loading all the {@link RcsMessage}s in this {@link RcsThread}. For + * a more detailed and paginated query, please use + * {@link RcsMessageStore#getRcsMessages(RcsMessageQueryParameters)} + * + * @return Loads the {@link RcsMessage}s in this thread and returns them in an immutable list. + * @throws RcsMessageStoreException if the messages could not be read from the storage + */ + @WorkerThread + @NonNull + public RcsMessageQueryResult getMessages() throws RcsMessageStoreException { + RcsMessageQueryParameters queryParameters = + new RcsMessageQueryParameters.Builder().setThread(this).build(); + return RcsControllerCall.call(iRcs -> iRcs.getMessages(queryParameters)); + } - @Override - public RcsThread[] newArray(int size) { - return new RcsThread[0]; - } - }; + /** + * @return Returns whether this is a group thread or not + */ + public abstract boolean isGroup(); - @Override - public int describeContents() { - return 0; + /** + * @hide + */ + @VisibleForTesting + public int getThreadId() { + return mThreadId; } - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeInt(mThreadId); + /** + * @hide + */ + public int getThreadType() { + return isGroup() ? THREAD_TYPE_GROUP : THREAD_TYPE_1_TO_1; } } diff --git a/telephony/java/android/telephony/ims/RcsThreadEvent.aidl b/telephony/java/android/telephony/ims/RcsThreadEvent.aidl deleted file mode 100644 index 4a40d8906bbb..000000000000 --- a/telephony/java/android/telephony/ims/RcsThreadEvent.aidl +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * Copyright 2019, 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 android.telephony.ims; - -parcelable RcsThreadEvent; diff --git a/telephony/java/android/telephony/ims/RcsThreadEvent.java b/telephony/java/android/telephony/ims/RcsThreadEvent.java deleted file mode 100644 index e10baab9d8c5..000000000000 --- a/telephony/java/android/telephony/ims/RcsThreadEvent.java +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2019 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 android.telephony.ims; - -import android.os.Parcelable; - -/** - * An event that happened on an {@link RcsThread}. - * @hide - TODO(sahinc) make this public - */ -public abstract class RcsThreadEvent implements Parcelable { -} diff --git a/telephony/java/android/telephony/ims/RcsThreadIconChangedEvent.aidl b/telephony/java/android/telephony/ims/RcsThreadIconChangedEvent.aidl deleted file mode 100644 index 82d985df4c6c..000000000000 --- a/telephony/java/android/telephony/ims/RcsThreadIconChangedEvent.aidl +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * Copyright 2019, 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 android.telephony.ims; - -parcelable RcsThreadIconChangedEvent; diff --git a/telephony/java/android/telephony/ims/RcsThreadIconChangedEvent.java b/telephony/java/android/telephony/ims/RcsThreadIconChangedEvent.java deleted file mode 100644 index b308fef46435..000000000000 --- a/telephony/java/android/telephony/ims/RcsThreadIconChangedEvent.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2019 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 android.telephony.ims; - -import android.os.Parcel; - -/** - * An event that indicates an {@link RcsGroupThread}'s icon was changed. - * @hide - TODO(sahinc) make this public - */ -public class RcsThreadIconChangedEvent extends RcsThreadEvent { - public static final Creator<RcsThreadIconChangedEvent> CREATOR = - new Creator<RcsThreadIconChangedEvent>() { - @Override - public RcsThreadIconChangedEvent createFromParcel(Parcel in) { - return new RcsThreadIconChangedEvent(in); - } - - @Override - public RcsThreadIconChangedEvent[] newArray(int size) { - return new RcsThreadIconChangedEvent[size]; - } - }; - - protected RcsThreadIconChangedEvent(Parcel in) { - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - } -} diff --git a/telephony/java/android/telephony/ims/RcsThreadNameChangedEvent.aidl b/telephony/java/android/telephony/ims/RcsThreadNameChangedEvent.aidl deleted file mode 100644 index 54a311d02958..000000000000 --- a/telephony/java/android/telephony/ims/RcsThreadNameChangedEvent.aidl +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * Copyright 2019, 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 android.telephony.ims; - -parcelable RcsThreadNameChangedEvent; diff --git a/telephony/java/android/telephony/ims/RcsThreadNameChangedEvent.java b/telephony/java/android/telephony/ims/RcsThreadNameChangedEvent.java deleted file mode 100644 index 6f5cfdf3b4c4..000000000000 --- a/telephony/java/android/telephony/ims/RcsThreadNameChangedEvent.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2019 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 android.telephony.ims; - -import android.os.Parcel; - -/** - * An event that indicates an {@link RcsGroupThread}'s name was changed. - * @hide - TODO(sahinc) make this public - */ -public class RcsThreadNameChangedEvent extends RcsThreadEvent { - public static final Creator<RcsThreadNameChangedEvent> CREATOR = - new Creator<RcsThreadNameChangedEvent>() { - @Override - public RcsThreadNameChangedEvent createFromParcel(Parcel in) { - return new RcsThreadNameChangedEvent(in); - } - - @Override - public RcsThreadNameChangedEvent[] newArray(int size) { - return new RcsThreadNameChangedEvent[size]; - } - }; - - protected RcsThreadNameChangedEvent(Parcel in) { - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - } -} diff --git a/telephony/java/android/telephony/ims/RcsThreadParticipantJoinedEvent.aidl b/telephony/java/android/telephony/ims/RcsThreadParticipantJoinedEvent.aidl deleted file mode 100644 index 047a42466ee7..000000000000 --- a/telephony/java/android/telephony/ims/RcsThreadParticipantJoinedEvent.aidl +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * Copyright 2019, 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 android.telephony.ims; - -parcelable RcsThreadParticipantJoinedEvent; diff --git a/telephony/java/android/telephony/ims/RcsThreadParticipantJoinedEvent.java b/telephony/java/android/telephony/ims/RcsThreadParticipantJoinedEvent.java deleted file mode 100644 index 5c4073c430e7..000000000000 --- a/telephony/java/android/telephony/ims/RcsThreadParticipantJoinedEvent.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2019 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 android.telephony.ims; - -import android.os.Parcel; - -/** - * An event that indicates an RCS participant has joined an {@link RcsGroupThread}. - * @hide - TODO(sahinc) make this public - */ -public class RcsThreadParticipantJoinedEvent extends RcsThreadEvent { - public static final Creator<RcsThreadParticipantJoinedEvent> CREATOR = - new Creator<RcsThreadParticipantJoinedEvent>() { - @Override - public RcsThreadParticipantJoinedEvent createFromParcel(Parcel in) { - return new RcsThreadParticipantJoinedEvent(in); - } - - @Override - public RcsThreadParticipantJoinedEvent[] newArray(int size) { - return new RcsThreadParticipantJoinedEvent[size]; - } - }; - - protected RcsThreadParticipantJoinedEvent(Parcel in) { - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - } -} diff --git a/telephony/java/android/telephony/ims/RcsThreadParticipantLeftEvent.aidl b/telephony/java/android/telephony/ims/RcsThreadParticipantLeftEvent.aidl deleted file mode 100644 index 52f9bbd3cd93..000000000000 --- a/telephony/java/android/telephony/ims/RcsThreadParticipantLeftEvent.aidl +++ /dev/null @@ -1,20 +0,0 @@ -/* - * - * Copyright 2019, 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 android.telephony.ims; - -parcelable RcsThreadParticipantLeftEvent; diff --git a/telephony/java/android/telephony/ims/RcsThreadParticipantLeftEvent.java b/telephony/java/android/telephony/ims/RcsThreadParticipantLeftEvent.java deleted file mode 100644 index 4bf86b90ebb7..000000000000 --- a/telephony/java/android/telephony/ims/RcsThreadParticipantLeftEvent.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2019 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 android.telephony.ims; - -import android.os.Parcel; - -/** - * An event that indicates an RCS participant has left an {@link RcsGroupThread}. - * @hide - TODO(sahinc) make this public - */ -public class RcsThreadParticipantLeftEvent extends RcsThreadEvent { - public static final Creator<RcsThreadParticipantLeftEvent> CREATOR = - new Creator<RcsThreadParticipantLeftEvent>() { - @Override - public RcsThreadParticipantLeftEvent createFromParcel(Parcel in) { - return new RcsThreadParticipantLeftEvent(in); - } - - @Override - public RcsThreadParticipantLeftEvent[] newArray(int size) { - return new RcsThreadParticipantLeftEvent[size]; - } - }; - - protected RcsThreadParticipantLeftEvent(Parcel in) { - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - } -} diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryContinuationToken.aidl b/telephony/java/android/telephony/ims/RcsThreadQueryContinuationToken.aidl deleted file mode 100644 index 7bcebfa08fcb..000000000000 --- a/telephony/java/android/telephony/ims/RcsThreadQueryContinuationToken.aidl +++ /dev/null @@ -1,20 +0,0 @@ -/* -** -** Copyright 2018, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ - -package android.telephony.ims; - -parcelable RcsThreadQueryContinuationToken; diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryParameters.aidl b/telephony/java/android/telephony/ims/RcsThreadQueryParameters.aidl index feb2d4dec094..52e73ce02407 100644 --- a/telephony/java/android/telephony/ims/RcsThreadQueryParameters.aidl +++ b/telephony/java/android/telephony/ims/RcsThreadQueryParameters.aidl @@ -1,19 +1,19 @@ /* -** -** Copyright 2018, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ + * + * Copyright 2019, 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 android.telephony.ims; diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryParameters.java b/telephony/java/android/telephony/ims/RcsThreadQueryParameters.java index f2c4ab1884ca..4aa42073b8f8 100644 --- a/telephony/java/android/telephony/ims/RcsThreadQueryParameters.java +++ b/telephony/java/android/telephony/ims/RcsThreadQueryParameters.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 The Android Open Source Project + * Copyright (C) 2019 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. @@ -17,72 +17,133 @@ package android.telephony.ims; import android.annotation.CheckResult; +import android.annotation.IntDef; +import android.annotation.IntRange; +import android.annotation.NonNull; import android.os.Parcel; import android.os.Parcelable; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; import java.security.InvalidParameterException; import java.util.ArrayList; +import java.util.Collections; import java.util.HashSet; +import java.util.List; import java.util.Set; /** * The parameters to pass into {@link RcsMessageStore#getRcsThreads(RcsThreadQueryParameters)} in * order to select a subset of {@link RcsThread}s present in the message store. + * * @hide TODO - make the Builder and builder() public. The rest should stay internal only. */ public class RcsThreadQueryParameters implements Parcelable { - private final boolean mIsGroup; - private final Set<RcsParticipant> mRcsParticipants; + /** + * Bitmask flag to be used with {@link Builder#setThreadType(int)} to make + * {@link RcsMessageStore#getRcsThreads(RcsThreadQueryParameters)} return + * {@link RcsGroupThread}s. + */ + public static final int THREAD_TYPE_GROUP = 0x0001; + + /** + * Bitmask flag to be used with {@link Builder#setThreadType(int)} to make + * {@link RcsMessageStore#getRcsThreads(RcsThreadQueryParameters)} return + * {@link Rcs1To1Thread}s. + */ + public static final int THREAD_TYPE_1_TO_1 = 0x0002; + + // The type of threads to be filtered with the query + private final int mThreadType; + // The list of participants that are expected in the resulting threads + private final List<Integer> mRcsParticipantIds; + // The number of RcsThread's that should be returned with this query private final int mLimit; + // The property which the result of the query should be sorted against + private final @SortingProperty int mSortingProperty; + // Whether the sorting should be done in ascending private final boolean mIsAscending; - RcsThreadQueryParameters(boolean isGroup, Set<RcsParticipant> participants, int limit, - boolean isAscending) { - mIsGroup = isGroup; - mRcsParticipants = participants; - mLimit = limit; - mIsAscending = isAscending; - } + /** + * Flag to be used with {@link Builder#setSortProperty(int)} to denote that the results should + * be sorted in the order of {@link RcsThread} creation time for faster results. + */ + public static final int SORT_BY_CREATION_ORDER = 0; /** - * Returns a new builder to build a query with. - * TODO - make public + * Flag to be used with {@link Builder#setSortProperty(int)} to denote that the results should + * be sorted according to the timestamp of {@link RcsThread#getSnippet()} */ - public static Builder builder() { - return new Builder(); + public static final int SORT_BY_TIMESTAMP = 1; + + @Retention(RetentionPolicy.SOURCE) + @IntDef({SORT_BY_CREATION_ORDER, SORT_BY_TIMESTAMP}) + public @interface SortingProperty { } /** - * This is used in {@link com.android.internal.telephony.ims.RcsMessageStoreController} to get - * the list of participants. * @hide */ - public Set<RcsParticipant> getRcsParticipants() { - return mRcsParticipants; + public static final String THREAD_QUERY_PARAMETERS_KEY = "thread_query_parameters"; + + RcsThreadQueryParameters(int threadType, Set<RcsParticipant> participants, + int limit, int sortingProperty, boolean isAscending) { + mThreadType = threadType; + mRcsParticipantIds = convertParticipantSetToIdList(participants); + mLimit = limit; + mSortingProperty = sortingProperty; + mIsAscending = isAscending; + } + + private static List<Integer> convertParticipantSetToIdList(Set<RcsParticipant> participants) { + List<Integer> ids = new ArrayList<>(participants.size()); + for (RcsParticipant participant : participants) { + ids.add(participant.getId()); + } + return ids; } /** * This is used in {@link com.android.internal.telephony.ims.RcsMessageStoreController} to get - * whether group threads should be queried - * @hide + * the list of participant IDs. + * + * As we don't expose any integer ID's to API users, this should stay hidden + * + * @hide - not meant for public use */ - public boolean isGroupThread() { - return mIsGroup; + public List<Integer> getRcsParticipantsIds() { + return Collections.unmodifiableList(mRcsParticipantIds); } /** - * This is used in {@link com.android.internal.telephony.ims.RcsMessageStoreController} to get - * the number of tuples the result query should be limited to. + * @return Returns the bitmask flag for types of {@link RcsThread}s that this query should + * return. + */ + public int getThreadType() { + return mThreadType; + } + + /** + * @return Returns the number of {@link RcsThread}s to be returned from the query. A value + * of 0 means there is no set limit. */ public int getLimit() { return mLimit; } /** - * This is used in {@link com.android.internal.telephony.ims.RcsMessageStoreController} to - * determine the sort order. + * @return Returns the property that will be used to sort the result against. + * @see SortingProperty */ - public boolean isAscending() { + public @SortingProperty int getSortingProperty() { + return mSortingProperty; + } + + /** + * @return Returns {@code true} if the result set will be sorted in ascending order, + * {@code false} if it will be sorted in descending order. + */ + public boolean getSortDirection() { return mIsAscending; } @@ -90,64 +151,74 @@ public class RcsThreadQueryParameters implements Parcelable { * A helper class to build the {@link RcsThreadQueryParameters}. */ public static class Builder { - private boolean mIsGroupThread; + private int mThreadType; private Set<RcsParticipant> mParticipants; private int mLimit = 100; + private @SortingProperty int mSortingProperty; private boolean mIsAscending; /** - * Package private constructor for {@link RcsThreadQueryParameters.Builder}. To obtain this, - * {@link RcsThreadQueryParameters#builder()} needs to be called. + * Constructs a {@link RcsThreadQueryParameters.Builder} to help build an + * {@link RcsThreadQueryParameters} */ - Builder() { + public Builder() { mParticipants = new HashSet<>(); } /** * Limits the query to only return group threads. - * @param isGroupThread Whether to limit the query result to group threads. + * + * @param threadType Whether to limit the query result to group threads. * @return The same instance of the builder to chain parameters. + * @see RcsThreadQueryParameters#THREAD_TYPE_GROUP + * @see RcsThreadQueryParameters#THREAD_TYPE_1_TO_1 */ @CheckResult - public Builder isGroupThread(boolean isGroupThread) { - mIsGroupThread = isGroupThread; + public Builder setThreadType(int threadType) { + mThreadType = threadType; return this; } /** - * Limits the query to only return threads that contain the given participant. + * Limits the query to only return threads that contain the given participant. If this + * property was not set, participants will not be taken into account while querying for + * threads. + * * @param participant The participant that must be included in all of the returned threads. * @return The same instance of the builder to chain parameters. */ @CheckResult - public Builder withParticipant(RcsParticipant participant) { + public Builder setParticipant(@NonNull RcsParticipant participant) { mParticipants.add(participant); return this; } /** - * Limits the query to only return threads that contain the given list of participants. + * Limits the query to only return threads that contain the given list of participants. If + * this property was not set, participants will not be taken into account while querying + * for threads. + * * @param participants An iterable list of participants that must be included in all of the * returned threads. * @return The same instance of the builder to chain parameters. */ @CheckResult - public Builder withParticipants(Iterable<RcsParticipant> participants) { - for (RcsParticipant participant : participants) { - mParticipants.add(participant); - } + public Builder setParticipants(@NonNull List<RcsParticipant> participants) { + mParticipants.addAll(participants); return this; } /** * Desired number of threads to be returned from the query. Passing in 0 will return all * existing threads at once. The limit defaults to 100. + * * @param limit The number to limit the query result to. * @return The same instance of the builder to chain parameters. * @throws InvalidParameterException If the given limit is negative. */ @CheckResult - public Builder limitResultsTo(int limit) throws InvalidParameterException { + public Builder setResultLimit(@IntRange(from = 0) int limit) + throws InvalidParameterException { if (limit < 0) { throw new InvalidParameterException("The query limit must be non-negative"); } @@ -157,15 +228,26 @@ public class RcsThreadQueryParameters implements Parcelable { } /** - * Sorts the results returned from the query via thread IDs. + * Sets the property where the results should be sorted against. Defaults to + * {@link SortingProperty#SORT_BY_CREATION_ORDER} * - * TODO - add sorting support for other fields + * @param sortingProperty whether to sort in ascending order or not + * @return The same instance of the builder to chain parameters. + */ + @CheckResult + public Builder setSortProperty(@SortingProperty int sortingProperty) { + mSortingProperty = sortingProperty; + return this; + } + + /** + * Sets whether the results should be sorted ascending or descending * - * @param isAscending whether to sort in ascending order or not + * @param isAscending whether the results should be sorted ascending * @return The same instance of the builder to chain parameters. */ @CheckResult - public Builder sort(boolean isAscending) { + public Builder setSortDirection(boolean isAscending) { mIsAscending = isAscending; return this; } @@ -177,8 +259,8 @@ public class RcsThreadQueryParameters implements Parcelable { * @return An instance of {@link RcsThreadQueryParameters} to use with the thread query. */ public RcsThreadQueryParameters build() { - return new RcsThreadQueryParameters( - mIsGroupThread, mParticipants, mLimit, mIsAscending); + return new RcsThreadQueryParameters(mThreadType, mParticipants, mLimit, + mSortingProperty, mIsAscending); } } @@ -186,14 +268,12 @@ public class RcsThreadQueryParameters implements Parcelable { * Parcelable boilerplate below. */ protected RcsThreadQueryParameters(Parcel in) { - mIsGroup = in.readBoolean(); - - ArrayList<RcsParticipant> participantArrayList = new ArrayList<>(); - in.readTypedList(participantArrayList, RcsParticipant.CREATOR); - mRcsParticipants = new HashSet<>(participantArrayList); - + mThreadType = in.readInt(); + mRcsParticipantIds = new ArrayList<>(); + in.readList(mRcsParticipantIds, Integer.class.getClassLoader()); mLimit = in.readInt(); - mIsAscending = in.readBoolean(); + mSortingProperty = in.readInt(); + mIsAscending = in.readByte() == 1; } public static final Creator<RcsThreadQueryParameters> CREATOR = @@ -216,10 +296,10 @@ public class RcsThreadQueryParameters implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { - dest.writeBoolean(mIsGroup); - dest.writeTypedList(new ArrayList<>(mRcsParticipants)); + dest.writeInt(mThreadType); + dest.writeList(mRcsParticipantIds); dest.writeInt(mLimit); - dest.writeBoolean(mIsAscending); + dest.writeInt(mSortingProperty); + dest.writeByte((byte) (mIsAscending ? 1 : 0)); } - } diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryResult.aidl b/telephony/java/android/telephony/ims/RcsThreadQueryResult.aidl index 4b06529d1294..b1d5cf4c7211 100644 --- a/telephony/java/android/telephony/ims/RcsThreadQueryResult.aidl +++ b/telephony/java/android/telephony/ims/RcsThreadQueryResult.aidl @@ -1,19 +1,19 @@ /* -** -** Copyright 2018, The Android Open Source Project -** -** Licensed under the Apache License, Version 2.0 (the "License"); -** you may not use this file except in compliance with the License. -** You may obtain a copy of the License at -** -** http://www.apache.org/licenses/LICENSE-2.0 -** -** Unless required by applicable law or agreed to in writing, software -** distributed under the License is distributed on an "AS IS" BASIS, -** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -** See the License for the specific language governing permissions and -** limitations under the License. -*/ + * + * Copyright 2019, 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 android.telephony.ims; diff --git a/telephony/java/android/telephony/ims/RcsThreadQueryResult.java b/telephony/java/android/telephony/ims/RcsThreadQueryResult.java index 47715f8410d6..6515933fff0e 100644 --- a/telephony/java/android/telephony/ims/RcsThreadQueryResult.java +++ b/telephony/java/android/telephony/ims/RcsThreadQueryResult.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018 The Android Open Source Project + * Copyright (C) 2019 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. @@ -16,22 +16,30 @@ package android.telephony.ims; +import static android.provider.Telephony.RcsColumns.RcsUnifiedThreadColumns.THREAD_TYPE_1_TO_1; + +import android.annotation.NonNull; +import android.annotation.Nullable; import android.os.Parcel; import android.os.Parcelable; +import com.android.ims.RcsTypeIdPair; + +import java.util.ArrayList; import java.util.List; /** - * The result of a {@link RcsMessageStore#getRcsThreads(RcsThreadQueryContinuationToken, - * RcsThreadQueryParameters)} + * The result of a {@link RcsMessageStore#getRcsThreads(RcsThreadQueryParameters)} * call. This class allows getting the token for querying the next batch of threads in order to * prevent handling large amounts of data at once. * * @hide */ public class RcsThreadQueryResult implements Parcelable { - private RcsThreadQueryContinuationToken mContinuationToken; - private List<RcsThread> mRcsThreads; + // A token for the caller to continue their query for the next batch of results + private RcsQueryContinuationToken mContinuationToken; + // The list of thread IDs returned with this query + private List<RcsTypeIdPair> mRcsThreadIds; /** * Internal constructor for {@link com.android.internal.telephony.ims.RcsMessageStoreController} @@ -40,31 +48,47 @@ public class RcsThreadQueryResult implements Parcelable { * @hide */ public RcsThreadQueryResult( - RcsThreadQueryContinuationToken continuationToken, List<RcsThread> rcsThreads) { + RcsQueryContinuationToken continuationToken, + List<RcsTypeIdPair> rcsThreadIds) { mContinuationToken = continuationToken; - mRcsThreads = rcsThreads; + mRcsThreadIds = rcsThreadIds; } /** * Returns a token to call - * {@link RcsMessageStore#getRcsThreads(RcsThreadQueryContinuationToken)} + * {@link RcsMessageStore#getRcsThreads(RcsQueryContinuationToken)} * to get the next batch of {@link RcsThread}s. */ - public RcsThreadQueryContinuationToken nextChunkToken() { + @Nullable + public RcsQueryContinuationToken getContinuationToken() { return mContinuationToken; } /** * Returns all the RcsThreads in the current query result. Call {@link - * RcsMessageStore#getRcsThreads(RcsThreadQueryContinuationToken)} to get the next batch of + * RcsMessageStore#getRcsThreads(RcsQueryContinuationToken)} to get the next batch of * {@link RcsThread}s. */ + @NonNull public List<RcsThread> getThreads() { - return mRcsThreads; + List<RcsThread> rcsThreads = new ArrayList<>(); + + for (RcsTypeIdPair typeIdPair : mRcsThreadIds) { + if (typeIdPair.getType() == THREAD_TYPE_1_TO_1) { + rcsThreads.add(new Rcs1To1Thread(typeIdPair.getId())); + } else { + rcsThreads.add(new RcsGroupThread(typeIdPair.getId())); + } + } + + return rcsThreads; } protected RcsThreadQueryResult(Parcel in) { - // TODO - implement + mContinuationToken = in.readParcelable( + RcsQueryContinuationToken.class.getClassLoader()); + mRcsThreadIds = new ArrayList<>(); + in.readList(mRcsThreadIds, Integer.class.getClassLoader()); } public static final Creator<RcsThreadQueryResult> CREATOR = @@ -87,6 +111,7 @@ public class RcsThreadQueryResult implements Parcelable { @Override public void writeToParcel(Parcel dest, int flags) { - // TODO - implement + dest.writeParcelable(mContinuationToken, flags); + dest.writeList(mRcsThreadIds); } } diff --git a/telephony/java/android/telephony/ims/aidl/IRcs.aidl b/telephony/java/android/telephony/ims/aidl/IRcs.aidl index 0c958ba719f3..a399786dec54 100644 --- a/telephony/java/android/telephony/ims/aidl/IRcs.aidl +++ b/telephony/java/android/telephony/ims/aidl/IRcs.aidl @@ -16,9 +16,18 @@ package android.telephony.ims.aidl; -import android.telephony.ims.RcsParticipant; -import android.telephony.ims.Rcs1To1Thread; -import android.telephony.ims.RcsThreadQueryContinuationToken; +import android.net.Uri; +import android.telephony.ims.RcsEventQueryParameters; +import android.telephony.ims.RcsEventQueryResult; +import android.telephony.ims.RcsFileTransferCreationParameters; +import android.telephony.ims.RcsIncomingMessageCreationParameters; +import android.telephony.ims.RcsMessageCreationParameters; +import android.telephony.ims.RcsMessageSnippet; +import android.telephony.ims.RcsMessageQueryParameters; +import android.telephony.ims.RcsMessageQueryResult; +import android.telephony.ims.RcsParticipantQueryParameters; +import android.telephony.ims.RcsParticipantQueryResult; +import android.telephony.ims.RcsQueryContinuationToken; import android.telephony.ims.RcsThreadQueryParameters; import android.telephony.ims.RcsThreadQueryResult; @@ -27,23 +36,231 @@ import android.telephony.ims.RcsThreadQueryResult; * {@hide} */ interface IRcs { + ///////////////////////// // RcsMessageStore APIs + ///////////////////////// RcsThreadQueryResult getRcsThreads(in RcsThreadQueryParameters queryParameters); RcsThreadQueryResult getRcsThreadsWithToken( - in RcsThreadQueryContinuationToken continuationToken); + in RcsQueryContinuationToken continuationToken); - void deleteThread(int threadId); + RcsParticipantQueryResult getParticipants(in RcsParticipantQueryParameters queryParameters); - Rcs1To1Thread createRcs1To1Thread(in RcsParticipant participant); + RcsParticipantQueryResult getParticipantsWithToken( + in RcsQueryContinuationToken continuationToken); + RcsMessageQueryResult getMessages(in RcsMessageQueryParameters queryParameters); + + RcsMessageQueryResult getMessagesWithToken( + in RcsQueryContinuationToken continuationToken); + + RcsEventQueryResult getEvents(in RcsEventQueryParameters queryParameters); + + RcsEventQueryResult getEventsWithToken( + in RcsQueryContinuationToken continuationToken); + + // returns true if the thread was successfully deleted + boolean deleteThread(int threadId, int threadType); + + // Creates an Rcs1To1Thread and returns its row ID + int createRcs1To1Thread(int participantId); + + // Creates an RcsGroupThread and returns its row ID + int createGroupThread(in int[] participantIds, String groupName, in Uri groupIcon); + + ///////////////////////// // RcsThread APIs - int getMessageCount(int rcsThreadId); + ///////////////////////// + + // Creates a new RcsIncomingMessage on the given thread and returns its row ID + int addIncomingMessage(int rcsThreadId, + in RcsIncomingMessageCreationParameters rcsIncomingMessageCreationParameters); + + // Creates a new RcsOutgoingMessage on the given thread and returns its row ID + int addOutgoingMessage(int rcsThreadId, + in RcsMessageCreationParameters rcsMessageCreationParameters); + + // TODO: modify RcsProvider URI's to allow deleting a message without specifying its thread + void deleteMessage(int rcsMessageId, boolean isIncoming, int rcsThreadId, boolean isGroup); + + RcsMessageSnippet getMessageSnippet(int rcsThreadId); + + ///////////////////////// + // Rcs1To1Thread APIs + ///////////////////////// + void set1To1ThreadFallbackThreadId(int rcsThreadId, long fallbackId); + + long get1To1ThreadFallbackThreadId(int rcsThreadId); + + int get1To1ThreadOtherParticipantId(int rcsThreadId); + + ///////////////////////// + // RcsGroupThread APIs + ///////////////////////// + void setGroupThreadName(int rcsThreadId, String groupName); + + String getGroupThreadName(int rcsThreadId); + + void setGroupThreadIcon(int rcsThreadId, in Uri groupIcon); + + Uri getGroupThreadIcon(int rcsThreadId); + + void setGroupThreadOwner(int rcsThreadId, int participantId); + + int getGroupThreadOwner(int rcsThreadId); + + void setGroupThreadConferenceUri(int rcsThreadId, in Uri conferenceUri); + + Uri getGroupThreadConferenceUri(int rcsThreadId); + void addParticipantToGroupThread(int rcsThreadId, int participantId); + + void removeParticipantFromGroupThread(int rcsThreadId, int participantId); + + ///////////////////////// // RcsParticipant APIs - RcsParticipant createRcsParticipant(String canonicalAddress); + ///////////////////////// + + // Creates a new RcsParticipant and returns its rowId + int createRcsParticipant(String canonicalAddress, String alias); + + String getRcsParticipantCanonicalAddress(int participantId); + + String getRcsParticipantAlias(int participantId); + + void setRcsParticipantAlias(int id, String alias); + + String getRcsParticipantContactId(int participantId); + + void setRcsParticipantContactId(int participantId, String contactId); + + ///////////////////////// + // RcsMessage APIs + ///////////////////////// + void setMessageSubId(int messageId, boolean isIncoming, int subId); + + int getMessageSubId(int messageId, boolean isIncoming); + + void setMessageStatus(int messageId, boolean isIncoming, int status); + + int getMessageStatus(int messageId, boolean isIncoming); + + void setMessageOriginationTimestamp(int messageId, boolean isIncoming, long originationTimestamp); + + long getMessageOriginationTimestamp(int messageId, boolean isIncoming); + + void setGlobalMessageIdForMessage(int messageId, boolean isIncoming, String globalId); + + String getGlobalMessageIdForMessage(int messageId, boolean isIncoming); + + void setMessageArrivalTimestamp(int messageId, boolean isIncoming, long arrivalTimestamp); + + long getMessageArrivalTimestamp(int messageId, boolean isIncoming); + + void setMessageSeenTimestamp(int messageId, boolean isIncoming, long seenTimestamp); + + long getMessageSeenTimestamp(int messageId, boolean isIncoming); + + void setTextForMessage(int messageId, boolean isIncoming, String text); + + String getTextForMessage(int messageId, boolean isIncoming); + + void setLatitudeForMessage(int messageId, boolean isIncoming, double latitude); + + double getLatitudeForMessage(int messageId, boolean isIncoming); + + void setLongitudeForMessage(int messageId, boolean isIncoming, double longitude); + + double getLongitudeForMessage(int messageId, boolean isIncoming); + + // Returns the ID's of the file transfers attached to the given message + int[] getFileTransfersAttachedToMessage(int messageId, boolean isIncoming); + + int getSenderParticipant(int messageId); + + ///////////////////////// + // RcsOutgoingMessageDelivery APIs + ///////////////////////// + + // Returns the participant ID's that this message is intended to be delivered to + int[] getMessageRecipients(int messageId); + + long getOutgoingDeliveryDeliveredTimestamp(int messageId, int participantId); + + void setOutgoingDeliveryDeliveredTimestamp(int messageId, int participantId, long deliveredTimestamp); + + long getOutgoingDeliverySeenTimestamp(int messageId, int participantId); + + void setOutgoingDeliverySeenTimestamp(int messageId, int participantId, long seenTimestamp); + + int getOutgoingDeliveryStatus(int messageId, int participantId); + + void setOutgoingDeliveryStatus(int messageId, int participantId, int status); + + ///////////////////////// + // RcsFileTransferPart APIs + ///////////////////////// + + // Performs the initial write to storage and returns the row ID. + int storeFileTransfer(int messageId, boolean isIncoming, + in RcsFileTransferCreationParameters fileTransferCreationParameters); + + void deleteFileTransfer(int partId); + + void setFileTransferSessionId(int partId, String sessionId); + + String getFileTransferSessionId(int partId); + + void setFileTransferContentUri(int partId, in Uri contentUri); + + Uri getFileTransferContentUri(int partId); + + void setFileTransferContentType(int partId, String contentType); + + String getFileTransferContentType(int partId); + + void setFileTransferFileSize(int partId, long fileSize); + + long getFileTransferFileSize(int partId); + + void setFileTransferTransferOffset(int partId, long transferOffset); + + long getFileTransferTransferOffset(int partId); + + void setFileTransferStatus(int partId, int transferStatus); + + int getFileTransferStatus(int partId); + + void setFileTransferWidth(int partId, int width); + + int getFileTransferWidth(int partId); + + void setFileTransferHeight(int partId, int height); + + int getFileTransferHeight(int partId); + + void setFileTransferLength(int partId, long length); + + long getFileTransferLength(int partId); + + void setFileTransferPreviewUri(int partId, in Uri uri); + + Uri getFileTransferPreviewUri(int partId); + + void setFileTransferPreviewType(int partId, String type); + + String getFileTransferPreviewType(int partId); + + ///////////////////////// + // RcsEvent APIs + ///////////////////////// + int createGroupThreadNameChangedEvent(long timestamp, int threadId, int originationParticipantId, String newName); + + int createGroupThreadIconChangedEvent(long timestamp, int threadId, int originationParticipantId, in Uri newIcon); + + int createGroupThreadParticipantJoinedEvent(long timestamp, int threadId, int originationParticipantId, int participantId); - void updateRcsParticipantCanonicalAddress(int id, String canonicalAddress); + int createGroupThreadParticipantLeftEvent(long timestamp, int threadId, int originationParticipantId, int participantId); - void updateRcsParticipantAlias(int id, String alias); + int createParticipantAliasChangedEvent(long timestamp, int participantId, String newAlias); }
\ No newline at end of file diff --git a/telephony/java/com/android/ims/RcsTypeIdPair.java b/telephony/java/com/android/ims/RcsTypeIdPair.java new file mode 100644 index 000000000000..a5177354002e --- /dev/null +++ b/telephony/java/com/android/ims/RcsTypeIdPair.java @@ -0,0 +1,79 @@ +/* + * Copyright (C) 2019 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.ims; + +import android.os.Parcel; +import android.os.Parcelable; + +/** + * A utility class to pass RCS IDs and types in RPC calls + * + * @hide + */ +public class RcsTypeIdPair implements Parcelable { + private int mType; + private int mId; + + public RcsTypeIdPair(int type, int id) { + mType = type; + mId = id; + } + + public int getType() { + return mType; + } + + public void setType(int type) { + mType = type; + } + + public int getId() { + return mId; + } + + public void setId(int id) { + mId = id; + } + + public RcsTypeIdPair(Parcel in) { + mType = in.readInt(); + mId = in.readInt(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(mType); + dest.writeInt(mId); + } + + public static final Creator<RcsTypeIdPair> CREATOR = + new Creator<RcsTypeIdPair>() { + @Override + public RcsTypeIdPair createFromParcel(Parcel in) { + return new RcsTypeIdPair(in); + } + + @Override + public RcsTypeIdPair[] newArray(int size) { + return new RcsTypeIdPair[size]; + } + }; +} diff --git a/telephony/java/com/android/internal/telephony/TelephonyPermissions.java b/telephony/java/com/android/internal/telephony/TelephonyPermissions.java index c76d153c6112..b9ec7bf56370 100644 --- a/telephony/java/com/android/internal/telephony/TelephonyPermissions.java +++ b/telephony/java/com/android/internal/telephony/TelephonyPermissions.java @@ -29,14 +29,20 @@ import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; +import android.provider.DeviceConfig; import android.provider.Settings; import android.telephony.Rlog; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.util.Log; +import android.util.StatsLog; import com.android.internal.annotations.VisibleForTesting; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; +import java.util.Set; import java.util.function.Supplier; /** Utility class for Telephony permission enforcement. */ @@ -48,6 +54,14 @@ public final class TelephonyPermissions { private static final Supplier<ITelephony> TELEPHONY_SUPPLIER = () -> ITelephony.Stub.asInterface(ServiceManager.getService(Context.TELEPHONY_SERVICE)); + // Contains a mapping of packages that did not meet the new requirements to access device + // identifiers and the methods they were attempting to invoke; used to prevent duplicate + // reporting of packages / methods. + private static final Map<String, Set<String>> sReportedDeviceIDPackages; + static { + sReportedDeviceIDPackages = new HashMap<>(); + } + private TelephonyPermissions() {} /** @@ -284,46 +298,63 @@ public final class TelephonyPermissions { */ private static boolean reportAccessDeniedToReadIdentifiers(Context context, int subId, int pid, int uid, String callingPackage, String message) { - // Check if the application is a 3P app; if so then a separate setting is required to relax - // the check to begin flagging problems with 3P apps early. + // Check if the application is not preinstalled; if not then a separate setting is required + // to relax the check to begin flagging problems with non-preinstalled apps early. boolean relax3PDeviceIdentifierCheck = Settings.Global.getInt(context.getContentResolver(), Settings.Global.PRIVILEGED_DEVICE_IDENTIFIER_3P_CHECK_RELAXED, 0) == 1; - boolean is3PApp = true; + boolean isPreinstalled = false; // Also check if the application is a preloaded non-privileged app; if so there is a // separate setting to relax the check for these apps to ensure users can relax the check - // for 3P or non-priv apps as needed while continuing to test the other. + // for non-preinstalled or non-priv apps as needed while continuing to test the other. boolean relaxNonPrivDeviceIdentifierCheck = Settings.Global.getInt( context.getContentResolver(), Settings.Global.PRIVILEGED_DEVICE_IDENTIFIER_NON_PRIV_CHECK_RELAXED, 0) == 1; - boolean isNonPrivApp = false; + boolean isPrivApp = false; // Similar to above support relaxing the check for privileged apps while still enforcing it - // for non-privileged and 3P apps. + // for non-privileged and non-preinstalled apps. boolean relaxPrivDeviceIdentifierCheck = Settings.Global.getInt( context.getContentResolver(), Settings.Global.PRIVILEGED_DEVICE_IDENTIFIER_PRIV_CHECK_RELAXED, 0) == 1; ApplicationInfo callingPackageInfo = null; try { callingPackageInfo = context.getPackageManager().getApplicationInfo(callingPackage, 0); - if (callingPackageInfo.isPrivilegedApp()) { - is3PApp = false; - } else if (callingPackageInfo.isSystemApp()) { - is3PApp = false; - isNonPrivApp = true; + if (callingPackageInfo.isSystemApp()) { + isPreinstalled = true; + if (callingPackageInfo.isPrivilegedApp()) { + isPrivApp = true; + } } } catch (PackageManager.NameNotFoundException e) { // If the application info for the calling package could not be found then assume the - // calling app is a 3P app to detect any issues with the check + // calling app is a non-preinstalled app to detect any issues with the check Log.e(LOG_TAG, "Exception caught obtaining package info for package " + callingPackage, e); } // The new Q restrictions for device identifier access will be enforced for all apps with // settings to individually disable the new restrictions for privileged, preloaded - // non-privileged, and 3P apps. - if ((!is3PApp && !isNonPrivApp && !relaxPrivDeviceIdentifierCheck) - || (is3PApp && !relax3PDeviceIdentifierCheck) - || (isNonPrivApp && !relaxNonPrivDeviceIdentifierCheck)) { - Log.wtf(LOG_TAG, "reportAccessDeniedToReadIdentifiers:" + callingPackage + ":" + message - + ":is3PApp=" + is3PApp + ":isNonPrivApp=" + isNonPrivApp); + // non-privileged, and non-preinstalled apps. + if (!isIdentifierCheckDisabled() && ( + (isPrivApp && !relaxPrivDeviceIdentifierCheck) + || (!isPreinstalled && !relax3PDeviceIdentifierCheck) + || (isPreinstalled && !isPrivApp && !relaxNonPrivDeviceIdentifierCheck))) { + // The current package should only be reported in StatsLog if it has not previously been + // reported for the currently invoked device identifier method. + boolean packageReported = sReportedDeviceIDPackages.containsKey(callingPackage); + if (!packageReported || !sReportedDeviceIDPackages.get(callingPackage).contains( + message)) { + Set invokedMethods; + if (!packageReported) { + invokedMethods = new HashSet<String>(); + sReportedDeviceIDPackages.put(callingPackage, invokedMethods); + } else { + invokedMethods = sReportedDeviceIDPackages.get(callingPackage); + } + invokedMethods.add(message); + StatsLog.write(StatsLog.DEVICE_IDENTIFIER_ACCESS_DENIED, callingPackage, message, + isPreinstalled, isPrivApp); + } + Log.w(LOG_TAG, "reportAccessDeniedToReadIdentifiers:" + callingPackage + ":" + message + + ":isPreinstalled=" + isPreinstalled + ":isPrivApp=" + isPrivApp); // if the target SDK is pre-Q then check if the calling package would have previously // had access to device identifiers. if (callingPackageInfo != null && ( @@ -348,6 +379,14 @@ public final class TelephonyPermissions { } /** + * Returns true if the new device identifier access restrictions are disabled. + */ + private static boolean isIdentifierCheckDisabled() { + return Boolean.parseBoolean(DeviceConfig.getProperty(DeviceConfig.Privacy.NAMESPACE, + DeviceConfig.Privacy.PROPERTY_DEVICE_IDENTIFIER_ACCESS_RESTRICTIONS_DISABLED)); + } + + /** * Check whether the app with the given pid/uid can read the call log. * @return {@code true} if the specified app has the read call log permission and AppOpp granted * to it, {@code false} otherwise. diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadIconChangedEventTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadIconChangedEventTest.java new file mode 100644 index 000000000000..915a260f5c79 --- /dev/null +++ b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadIconChangedEventTest.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2019 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.tests.ims; + +import static com.google.common.truth.Truth.assertThat; + +import android.net.Uri; +import android.os.Parcel; +import android.support.test.runner.AndroidJUnit4; +import android.telephony.ims.RcsGroupThread; +import android.telephony.ims.RcsGroupThreadIconChangedEvent; +import android.telephony.ims.RcsParticipant; + +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(AndroidJUnit4.class) +public class RcsGroupThreadIconChangedEventTest { + + @Test + public void testCanUnparcel() { + RcsGroupThread rcsGroupThread = new RcsGroupThread(1); + RcsParticipant rcsParticipant = new RcsParticipant(2); + Uri newIconUri = Uri.parse("content://new_icon"); + + RcsGroupThreadIconChangedEvent iconChangedEvent = + new RcsGroupThreadIconChangedEvent(1234567890, rcsGroupThread, rcsParticipant, + newIconUri); + + Parcel parcel = Parcel.obtain(); + iconChangedEvent.writeToParcel(parcel, iconChangedEvent.describeContents()); + + parcel.setDataPosition(0); + + iconChangedEvent = RcsGroupThreadIconChangedEvent.CREATOR.createFromParcel(parcel); + + assertThat(iconChangedEvent.getNewIcon()).isEqualTo(newIconUri); + assertThat(iconChangedEvent.getRcsGroupThread().getThreadId()).isEqualTo(1); + assertThat(iconChangedEvent.getOriginatingParticipant().getId()).isEqualTo(2); + assertThat(iconChangedEvent.getTimestamp()).isEqualTo(1234567890); + } +} diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadNameChangedEventTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadNameChangedEventTest.java new file mode 100644 index 000000000000..1384c016daa8 --- /dev/null +++ b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadNameChangedEventTest.java @@ -0,0 +1,55 @@ +/* + * Copyright (C) 2019 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.tests.ims; + +import static com.google.common.truth.Truth.assertThat; + +import android.os.Parcel; +import android.support.test.runner.AndroidJUnit4; +import android.telephony.ims.RcsGroupThread; +import android.telephony.ims.RcsGroupThreadNameChangedEvent; +import android.telephony.ims.RcsParticipant; + +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(AndroidJUnit4.class) +public class RcsGroupThreadNameChangedEventTest { + @Test + public void testCanUnparcel() { + String newName = "new name"; + + RcsGroupThread rcsGroupThread = new RcsGroupThread(1); + RcsParticipant rcsParticipant = new RcsParticipant(2); + + RcsGroupThreadNameChangedEvent nameChangedEvent = + new RcsGroupThreadNameChangedEvent(1234567890, rcsGroupThread, rcsParticipant, + newName); + + Parcel parcel = Parcel.obtain(); + nameChangedEvent.writeToParcel(parcel, nameChangedEvent.describeContents()); + + parcel.setDataPosition(0); + + nameChangedEvent = RcsGroupThreadNameChangedEvent.CREATOR.createFromParcel( + parcel); + + assertThat(nameChangedEvent.getNewName()).isEqualTo(newName); + assertThat(nameChangedEvent.getRcsGroupThread().getThreadId()).isEqualTo(1); + assertThat(nameChangedEvent.getOriginatingParticipant().getId()).isEqualTo(2); + assertThat(nameChangedEvent.getTimestamp()).isEqualTo(1234567890); + } +} diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantJoinedEventTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantJoinedEventTest.java new file mode 100644 index 000000000000..d0af7db90627 --- /dev/null +++ b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantJoinedEventTest.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2019 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.tests.ims; + +import static com.google.common.truth.Truth.assertThat; + +import android.os.Parcel; +import android.support.test.runner.AndroidJUnit4; +import android.telephony.ims.RcsGroupThread; +import android.telephony.ims.RcsGroupThreadParticipantJoinedEvent; +import android.telephony.ims.RcsParticipant; + +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(AndroidJUnit4.class) +public class RcsGroupThreadParticipantJoinedEventTest { + + @Test + public void testCanUnparcel() { + RcsGroupThread rcsGroupThread = new RcsGroupThread(1); + RcsParticipant rcsParticipant = new RcsParticipant(2); + + RcsGroupThreadParticipantJoinedEvent participantJoinedEvent = + new RcsGroupThreadParticipantJoinedEvent(1234567890, rcsGroupThread, rcsParticipant, + rcsParticipant); + + Parcel parcel = Parcel.obtain(); + participantJoinedEvent.writeToParcel(parcel, participantJoinedEvent.describeContents()); + + parcel.setDataPosition(0); + + participantJoinedEvent = RcsGroupThreadParticipantJoinedEvent.CREATOR.createFromParcel( + parcel); + + assertThat(participantJoinedEvent.getJoinedParticipant().getId()).isEqualTo(2); + assertThat(participantJoinedEvent.getRcsGroupThread().getThreadId()).isEqualTo(1); + assertThat(participantJoinedEvent.getOriginatingParticipant().getId()).isEqualTo(2); + assertThat(participantJoinedEvent.getTimestamp()).isEqualTo(1234567890); + } +} diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantLeftEventTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantLeftEventTest.java new file mode 100644 index 000000000000..7ba5fa653258 --- /dev/null +++ b/tests/RcsTests/src/com/android/tests/ims/RcsGroupThreadParticipantLeftEventTest.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2019 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.tests.ims; + +import static com.google.common.truth.Truth.assertThat; + +import android.os.Parcel; +import android.support.test.runner.AndroidJUnit4; +import android.telephony.ims.RcsGroupThread; +import android.telephony.ims.RcsGroupThreadParticipantLeftEvent; +import android.telephony.ims.RcsParticipant; + +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(AndroidJUnit4.class) +public class RcsGroupThreadParticipantLeftEventTest { + @Test + public void testCanUnparcel() { + RcsGroupThread rcsGroupThread = new RcsGroupThread(1); + RcsParticipant rcsParticipant = new RcsParticipant(2); + + RcsGroupThreadParticipantLeftEvent participantLeftEvent = + new RcsGroupThreadParticipantLeftEvent(1234567890, rcsGroupThread, rcsParticipant, + rcsParticipant); + + Parcel parcel = Parcel.obtain(); + participantLeftEvent.writeToParcel(parcel, participantLeftEvent.describeContents()); + + parcel.setDataPosition(0); + + // create from parcel + parcel.setDataPosition(0); + participantLeftEvent = RcsGroupThreadParticipantLeftEvent.CREATOR.createFromParcel( + parcel); + assertThat(participantLeftEvent.getRcsGroupThread().getThreadId()).isEqualTo(1); + assertThat(participantLeftEvent.getLeavingParticipantId().getId()).isEqualTo(2); + assertThat(participantLeftEvent.getTimestamp()).isEqualTo(1234567890); + } +} diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsMessageStoreTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsMessageStoreTest.java deleted file mode 100644 index 44277edcdb8c..000000000000 --- a/tests/RcsTests/src/com/android/tests/ims/RcsMessageStoreTest.java +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.tests.ims; - -import android.support.test.runner.AndroidJUnit4; -import android.telephony.ims.RcsMessageStore; - -import org.junit.Test; -import org.junit.runner.RunWith; - -@RunWith(AndroidJUnit4.class) -public class RcsMessageStoreTest { - //TODO(sahinc): Add meaningful tests once we have more of the implementation in place - @Test - public void testDeleteThreadDoesntCrash() { - RcsMessageStore mRcsMessageStore = new RcsMessageStore(); - mRcsMessageStore.deleteThread(0); - } -} diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsParticipantAliasChangedEventTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsParticipantAliasChangedEventTest.java new file mode 100644 index 000000000000..3e2bbbf8256c --- /dev/null +++ b/tests/RcsTests/src/com/android/tests/ims/RcsParticipantAliasChangedEventTest.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2019 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.tests.ims; + +import static com.google.common.truth.Truth.assertThat; + +import android.os.Parcel; +import android.support.test.runner.AndroidJUnit4; +import android.telephony.ims.RcsParticipant; +import android.telephony.ims.RcsParticipantAliasChangedEvent; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(AndroidJUnit4.class) +public class RcsParticipantAliasChangedEventTest { + private static final String OLD_ALIAS = "old alias"; + private static final String NEW_ALIAS = "new alias"; + private RcsParticipant mParticipant; + + @Before + public void setUp() { + mParticipant = new RcsParticipant(3); + } + + @Test + public void testCanUnparcel() { + RcsParticipantAliasChangedEvent aliasChangedEvent = + new RcsParticipantAliasChangedEvent(1234567890, mParticipant, NEW_ALIAS); + + Parcel parcel = Parcel.obtain(); + aliasChangedEvent.writeToParcel(parcel, aliasChangedEvent.describeContents()); + + parcel.setDataPosition(0); + + aliasChangedEvent = RcsParticipantAliasChangedEvent.CREATOR.createFromParcel( + parcel); + + assertThat(aliasChangedEvent.getParticipantId().getId()).isEqualTo(3); + assertThat(aliasChangedEvent.getNewAlias()).isEqualTo(NEW_ALIAS); + assertThat(aliasChangedEvent.getTimestamp()).isEqualTo(1234567890); + } +} diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsParticipantQueryParametersTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsParticipantQueryParametersTest.java new file mode 100644 index 000000000000..b4bcb5d12e0d --- /dev/null +++ b/tests/RcsTests/src/com/android/tests/ims/RcsParticipantQueryParametersTest.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.tests.ims; + +import static com.google.common.truth.Truth.assertThat; + +import android.os.Parcel; +import android.support.test.runner.AndroidJUnit4; +import android.telephony.ims.RcsParticipantQueryParameters; + +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(AndroidJUnit4.class) +public class RcsParticipantQueryParametersTest { + + @Test + public void testCanUnparcel() { + RcsParticipantQueryParameters rcsParticipantQueryParameters = + new RcsParticipantQueryParameters.Builder() + .setAliasLike("%alias_") + .setCanonicalAddressLike("_canonical%") + .setSortProperty(RcsParticipantQueryParameters.SORT_BY_CANONICAL_ADDRESS) + .setSortDirection(true) + .setResultLimit(432) + .build(); + + + Parcel parcel = Parcel.obtain(); + rcsParticipantQueryParameters.writeToParcel(parcel, + rcsParticipantQueryParameters.describeContents()); + + parcel.setDataPosition(0); + rcsParticipantQueryParameters = RcsParticipantQueryParameters.CREATOR.createFromParcel( + parcel); + + assertThat(rcsParticipantQueryParameters.getAliasLike()).isEqualTo("%alias_"); + assertThat(rcsParticipantQueryParameters.getCanonicalAddressLike()).contains("_canonical%"); + assertThat(rcsParticipantQueryParameters.getLimit()).isEqualTo(432); + assertThat(rcsParticipantQueryParameters.getSortingProperty()).isEqualTo( + RcsParticipantQueryParameters.SORT_BY_CANONICAL_ADDRESS); + assertThat(rcsParticipantQueryParameters.getSortDirection()).isTrue(); + } +} diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsParticipantTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsParticipantTest.java deleted file mode 100644 index c402dbffc84b..000000000000 --- a/tests/RcsTests/src/com/android/tests/ims/RcsParticipantTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/* - * Copyright (C) 2018 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.tests.ims; - -import static com.google.common.truth.Truth.assertThat; - -import android.os.Bundle; -import android.support.test.runner.AndroidJUnit4; -import android.telephony.ims.RcsParticipant; - -import org.junit.Test; -import org.junit.runner.RunWith; - -@RunWith(AndroidJUnit4.class) -public class RcsParticipantTest { - private static final int ID = 123; - private static final String ALIAS = "alias"; - private static final String CANONICAL_ADDRESS = "+1234567890"; - - @Test - public void testCanUnparcel() { - RcsParticipant rcsParticipant = new RcsParticipant(ID, CANONICAL_ADDRESS); - rcsParticipant.setAlias(ALIAS); - - Bundle bundle = new Bundle(); - bundle.putParcelable("Some key", rcsParticipant); - rcsParticipant = bundle.getParcelable("Some key"); - - assertThat(rcsParticipant.getId()).isEqualTo(ID); - assertThat(rcsParticipant.getAlias()).isEqualTo(ALIAS); - assertThat(rcsParticipant.getCanonicalAddress()).isEqualTo(CANONICAL_ADDRESS); - } -} diff --git a/tests/RcsTests/src/com/android/tests/ims/RcsThreadQueryParametersTest.java b/tests/RcsTests/src/com/android/tests/ims/RcsThreadQueryParametersTest.java index a890a389bdfc..0a70eeccb0fa 100644 --- a/tests/RcsTests/src/com/android/tests/ims/RcsThreadQueryParametersTest.java +++ b/tests/RcsTests/src/com/android/tests/ims/RcsThreadQueryParametersTest.java @@ -15,39 +15,44 @@ */ package com.android.tests.ims; +import static android.telephony.ims.RcsThreadQueryParameters.SORT_BY_TIMESTAMP; +import static android.telephony.ims.RcsThreadQueryParameters.THREAD_TYPE_GROUP; + import static com.google.common.truth.Truth.assertThat; -import android.os.Bundle; +import android.os.Parcel; import android.support.test.runner.AndroidJUnit4; import android.telephony.ims.RcsParticipant; import android.telephony.ims.RcsThreadQueryParameters; import org.junit.Test; import org.junit.runner.RunWith; -import org.mockito.Mock; @RunWith(AndroidJUnit4.class) public class RcsThreadQueryParametersTest { - private RcsThreadQueryParameters mRcsThreadQueryParameters; - @Mock RcsParticipant mMockParticipant; @Test - public void testUnparceling() { - String key = "some key"; - mRcsThreadQueryParameters = RcsThreadQueryParameters.builder() - .isGroupThread(true) - .withParticipant(mMockParticipant) - .limitResultsTo(50) - .sort(true) + public void testCanUnparcel() { + RcsParticipant rcsParticipant = new RcsParticipant(1); + RcsThreadQueryParameters rcsThreadQueryParameters = new RcsThreadQueryParameters.Builder() + .setThreadType(THREAD_TYPE_GROUP) + .setParticipant(rcsParticipant) + .setResultLimit(50) + .setSortProperty(SORT_BY_TIMESTAMP) + .setSortDirection(true) .build(); - Bundle bundle = new Bundle(); - bundle.putParcelable(key, mRcsThreadQueryParameters); - mRcsThreadQueryParameters = bundle.getParcelable(key); + Parcel parcel = Parcel.obtain(); + rcsThreadQueryParameters.writeToParcel(parcel, rcsThreadQueryParameters.describeContents()); + + parcel.setDataPosition(0); + rcsThreadQueryParameters = RcsThreadQueryParameters.CREATOR.createFromParcel(parcel); - assertThat(mRcsThreadQueryParameters.isGroupThread()).isTrue(); - assertThat(mRcsThreadQueryParameters.getRcsParticipants()).contains(mMockParticipant); - assertThat(mRcsThreadQueryParameters.getLimit()).isEqualTo(50); - assertThat(mRcsThreadQueryParameters.isAscending()).isTrue(); + assertThat(rcsThreadQueryParameters.getThreadType()).isEqualTo(THREAD_TYPE_GROUP); + assertThat(rcsThreadQueryParameters.getRcsParticipantsIds()) + .contains(rcsParticipant.getId()); + assertThat(rcsThreadQueryParameters.getLimit()).isEqualTo(50); + assertThat(rcsThreadQueryParameters.getSortingProperty()).isEqualTo(SORT_BY_TIMESTAMP); + assertThat(rcsThreadQueryParameters.getSortDirection()).isTrue(); } } diff --git a/tests/net/java/android/net/LinkPropertiesTest.java b/tests/net/java/android/net/LinkPropertiesTest.java index 299fbefc78e4..bdde0961909d 100644 --- a/tests/net/java/android/net/LinkPropertiesTest.java +++ b/tests/net/java/android/net/LinkPropertiesTest.java @@ -22,18 +22,15 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; -import android.net.IpPrefix; -import android.net.LinkAddress; -import android.net.LinkProperties; import android.net.LinkProperties.CompareResult; import android.net.LinkProperties.ProvisioningChange; -import android.net.RouteInfo; -import android.os.Parcel; import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; import android.system.OsConstants; import android.util.ArraySet; +import com.android.internal.util.TestUtils; + import org.junit.Test; import org.junit.runner.RunWith; @@ -849,18 +846,6 @@ public class LinkPropertiesTest { assertEquals(new ArraySet<>(expectRemoved), (new ArraySet<>(result.removed))); } - private void assertParcelingIsLossless(LinkProperties source) { - Parcel p = Parcel.obtain(); - source.writeToParcel(p, /* flags */ 0); - p.setDataPosition(0); - final byte[] marshalled = p.marshall(); - p = Parcel.obtain(); - p.unmarshall(marshalled, 0, marshalled.length); - p.setDataPosition(0); - LinkProperties dest = LinkProperties.CREATOR.createFromParcel(p); - assertEquals(source, dest); - } - @Test public void testLinkPropertiesParcelable() throws Exception { LinkProperties source = new LinkProperties(); @@ -882,12 +867,12 @@ public class LinkPropertiesTest { source.setNat64Prefix(new IpPrefix("2001:db8:1:2:64:64::/96")); - assertParcelingIsLossless(source); + TestUtils.assertParcelingIsLossless(source, LinkProperties.CREATOR); } @Test public void testParcelUninitialized() throws Exception { LinkProperties empty = new LinkProperties(); - assertParcelingIsLossless(empty); + TestUtils.assertParcelingIsLossless(empty, LinkProperties.CREATOR); } } diff --git a/tests/net/java/android/net/TcpKeepalivePacketDataTest.java b/tests/net/java/android/net/TcpKeepalivePacketDataTest.java new file mode 100644 index 000000000000..1f2dd275bb7b --- /dev/null +++ b/tests/net/java/android/net/TcpKeepalivePacketDataTest.java @@ -0,0 +1,126 @@ +/* + * Copyright (C) 2019 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 android.net; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import android.net.SocketKeepalive.InvalidPacketException; +import android.net.TcpKeepalivePacketData.TcpSocketInfo; + +import com.android.internal.util.TestUtils; + +import libcore.net.InetAddressUtils; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +import java.net.InetAddress; +import java.nio.ByteBuffer; + +@RunWith(JUnit4.class) +public final class TcpKeepalivePacketDataTest { + + @Before + public void setUp() {} + + @Test + public void testV4TcpKeepalivePacket() { + final InetAddress srcAddr = InetAddressUtils.parseNumericAddress("192.168.0.1"); + final InetAddress dstAddr = InetAddressUtils.parseNumericAddress("192.168.0.10"); + final int srcPort = 1234; + final int dstPort = 4321; + final int seq = 0x11111111; + final int ack = 0x22222222; + final int wnd = 8000; + final int wndScale = 2; + TcpKeepalivePacketData resultData = null; + TcpSocketInfo testInfo = new TcpSocketInfo( + srcAddr, srcPort, dstAddr, dstPort, seq, ack, wnd, wndScale); + try { + resultData = TcpKeepalivePacketData.tcpKeepalivePacket(testInfo); + } catch (InvalidPacketException e) { + fail("InvalidPacketException: " + e); + } + + assertEquals(testInfo.srcAddress, resultData.srcAddress); + assertEquals(testInfo.dstAddress, resultData.dstAddress); + assertEquals(testInfo.srcPort, resultData.srcPort); + assertEquals(testInfo.dstPort, resultData.dstPort); + assertEquals(testInfo.seq, resultData.tcpSeq); + assertEquals(testInfo.ack, resultData.tcpAck); + assertEquals(testInfo.rcvWndScale, resultData.tcpWndScale); + + TestUtils.assertParcelingIsLossless(resultData, TcpKeepalivePacketData.CREATOR); + + final byte[] packet = resultData.getPacket(); + // IP version and TOS. + ByteBuffer buf = ByteBuffer.wrap(packet); + assertEquals(buf.getShort(), 0x4500); + // Source IP address. + byte[] ip = new byte[4]; + buf = ByteBuffer.wrap(packet, 12, 4); + buf.get(ip); + assertArrayEquals(ip, srcAddr.getAddress()); + // Destination IP address. + buf = ByteBuffer.wrap(packet, 16, 4); + buf.get(ip); + assertArrayEquals(ip, dstAddr.getAddress()); + + buf = ByteBuffer.wrap(packet, 20, 12); + // Source port. + assertEquals(buf.getShort(), srcPort); + // Destination port. + assertEquals(buf.getShort(), dstPort); + // Sequence number. + assertEquals(buf.getInt(), seq); + // Ack. + assertEquals(buf.getInt(), ack); + // Window size. + buf = ByteBuffer.wrap(packet, 34, 2); + assertEquals(buf.getShort(), wnd >> wndScale); + } + + //TODO: add ipv6 test when ipv6 supported + + @Test + public void testParcel() throws Exception { + final InetAddress srcAddr = InetAddresses.parseNumericAddress("192.168.0.1"); + final InetAddress dstAddr = InetAddresses.parseNumericAddress("192.168.0.10"); + final int srcPort = 1234; + final int dstPort = 4321; + final int sequence = 0x11111111; + final int ack = 0x22222222; + final int wnd = 48_000; + final int wndScale = 2; + TcpKeepalivePacketData testData = null; + TcpKeepalivePacketDataParcelable resultData = null; + TcpSocketInfo testInfo = new TcpSocketInfo( + srcAddr, srcPort, dstAddr, dstPort, sequence, ack, wnd, wndScale); + testData = TcpKeepalivePacketData.tcpKeepalivePacket(testInfo); + resultData = testData.toStableParcelable(); + assertArrayEquals(resultData.srcAddress, srcAddr.getAddress()); + assertArrayEquals(resultData.dstAddress, dstAddr.getAddress()); + assertEquals(resultData.srcPort, srcPort); + assertEquals(resultData.dstPort, dstPort); + assertEquals(resultData.seq, sequence); + assertEquals(resultData.ack, ack); + } +} diff --git a/tests/net/java/com/android/internal/util/TestUtils.java b/tests/net/java/com/android/internal/util/TestUtils.java index 6db01d343756..7e5a1d3ad4d3 100644 --- a/tests/net/java/com/android/internal/util/TestUtils.java +++ b/tests/net/java/com/android/internal/util/TestUtils.java @@ -16,12 +16,15 @@ package com.android.internal.util; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import android.os.ConditionVariable; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; +import android.os.Parcel; +import android.os.Parcelable; public final class TestUtils { private TestUtils() { } @@ -50,4 +53,18 @@ public final class TestUtils { fail(handler.toString() + " did not become idle after " + timeoutMs + " ms"); } } + + // TODO : fetch the creator through reflection or something instead of passing it + public static <T extends Parcelable, C extends Parcelable.Creator<T>> + void assertParcelingIsLossless(T source, C creator) { + Parcel p = Parcel.obtain(); + source.writeToParcel(p, /* flags */ 0); + p.setDataPosition(0); + final byte[] marshalled = p.marshall(); + p = Parcel.obtain(); + p.unmarshall(marshalled, 0, marshalled.length); + p.setDataPosition(0); + T dest = creator.createFromParcel(p); + assertEquals(source, dest); + } } |