diff --git a/Android.mk b/Android.mk index e219661b19f1ddd9795be2bc0302c446c214d66d..d7d9c900e3bf9fca03f6960687e61b699754a2a8 100644 --- a/Android.mk +++ b/Android.mk @@ -252,6 +252,11 @@ framework_docs_LOCAL_DROIDDOC_OPTIONS += \ -federate SupportLib https://developer.android.com \ -federationapi SupportLib prebuilts/sdk/current/support-api.txt +# Federate AndroidX references against local API file. +framework_docs_LOCAL_DROIDDOC_OPTIONS += \ + -federate AndroidX https://developer.android.com \ + -federationapi AndroidX prebuilts/sdk/current/androidx-api.txt + # ==== Public API diff =========================== include $(CLEAR_VARS) diff --git a/apct-tests/perftests/core/AndroidTest.xml b/apct-tests/perftests/core/AndroidTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..6aa34a627940adf67417831988e7c239e5376eb7 --- /dev/null +++ b/apct-tests/perftests/core/AndroidTest.xml @@ -0,0 +1,27 @@ + + + + diff --git a/apct-tests/perftests/multiuser/Android.mk b/apct-tests/perftests/multiuser/Android.mk index a803369d1e03a74ae508cf612a4562a709808392..9bc7d051121ad98ee987fe8b0d35f37df55d0cd8 100644 --- a/apct-tests/perftests/multiuser/Android.mk +++ b/apct-tests/perftests/multiuser/Android.mk @@ -26,6 +26,8 @@ LOCAL_STATIC_JAVA_LIBRARIES := \ LOCAL_PACKAGE_NAME := MultiUserPerfTests LOCAL_PRIVATE_PLATFORM_APIS := true +LOCAL_COMPATIBILITY_SUITE += device-tests + LOCAL_CERTIFICATE := platform include $(BUILD_PACKAGE) diff --git a/apct-tests/perftests/multiuser/AndroidTest.xml b/apct-tests/perftests/multiuser/AndroidTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..6ede8275afcb612a5e2d04413f8def0678c81f42 --- /dev/null +++ b/apct-tests/perftests/multiuser/AndroidTest.xml @@ -0,0 +1,27 @@ + + + + diff --git a/api/current.txt b/api/current.txt index 406ebac6c5ebe0882df35a4d05016082c9a4bb5e..992c60c383d2a0811e6692defcabba3a6fe9bcca 100644 --- a/api/current.txt +++ b/api/current.txt @@ -1605,17 +1605,17 @@ package android { field public static final int holo_purple = 17170458; // 0x106001a field public static final int holo_red_dark = 17170455; // 0x1060017 field public static final int holo_red_light = 17170454; // 0x1060016 - field public static final int primary_text_dark = 17170433; // 0x1060001 - field public static final int primary_text_dark_nodisable = 17170434; // 0x1060002 - field public static final int primary_text_light = 17170435; // 0x1060003 - field public static final int primary_text_light_nodisable = 17170436; // 0x1060004 - field public static final int secondary_text_dark = 17170437; // 0x1060005 - field public static final int secondary_text_dark_nodisable = 17170438; // 0x1060006 - field public static final int secondary_text_light = 17170439; // 0x1060007 - field public static final int secondary_text_light_nodisable = 17170440; // 0x1060008 + field public static final deprecated int primary_text_dark = 17170433; // 0x1060001 + field public static final deprecated int primary_text_dark_nodisable = 17170434; // 0x1060002 + field public static final deprecated int primary_text_light = 17170435; // 0x1060003 + field public static final deprecated int primary_text_light_nodisable = 17170436; // 0x1060004 + field public static final deprecated int secondary_text_dark = 17170437; // 0x1060005 + field public static final deprecated int secondary_text_dark_nodisable = 17170438; // 0x1060006 + field public static final deprecated int secondary_text_light = 17170439; // 0x1060007 + field public static final deprecated int secondary_text_light_nodisable = 17170440; // 0x1060008 field public static final int tab_indicator_text = 17170441; // 0x1060009 - field public static final int tertiary_text_dark = 17170448; // 0x1060010 - field public static final int tertiary_text_light = 17170449; // 0x1060011 + field public static final deprecated int tertiary_text_dark = 17170448; // 0x1060010 + field public static final deprecated int tertiary_text_light = 17170449; // 0x1060011 field public static final int transparent = 17170445; // 0x106000d field public static final int white = 17170443; // 0x106000b field public static final int widget_edittext_dark = 17170442; // 0x106000a @@ -6115,8 +6115,12 @@ package android.app { method public android.view.WindowAnimationFrameStats getWindowAnimationFrameStats(); method public android.view.WindowContentFrameStats getWindowContentFrameStats(int); method public java.util.List getWindows(); + method public void grantRuntimePermission(java.lang.String, java.lang.String); + method public void grantRuntimePermissionAsUser(java.lang.String, java.lang.String, android.os.UserHandle); method public boolean injectInputEvent(android.view.InputEvent, boolean); method public boolean performGlobalAction(int); + method public void revokeRuntimePermission(java.lang.String, java.lang.String); + method public void revokeRuntimePermissionAsUser(java.lang.String, java.lang.String, android.os.UserHandle); method public void setOnAccessibilityEventListener(android.app.UiAutomation.OnAccessibilityEventListener); method public boolean setRotation(int); method public void setRunAsMonkey(boolean); @@ -6464,7 +6468,6 @@ package android.app.admin { method public java.lang.CharSequence getOrganizationName(android.content.ComponentName); method public java.util.List getOverrideApns(android.content.ComponentName); method public android.app.admin.DevicePolicyManager getParentProfileInstance(android.content.ComponentName); - method public java.lang.String getPasswordBlacklistName(android.content.ComponentName); method public long getPasswordExpiration(android.content.ComponentName); method public long getPasswordExpirationTimeout(android.content.ComponentName); method public int getPasswordHistoryLength(android.content.ComponentName); @@ -6501,7 +6504,7 @@ package android.app.admin { method public boolean installExistingPackage(android.content.ComponentName, java.lang.String); method public boolean installKeyPair(android.content.ComponentName, java.security.PrivateKey, java.security.cert.Certificate, java.lang.String); method public boolean installKeyPair(android.content.ComponentName, java.security.PrivateKey, java.security.cert.Certificate[], java.lang.String, boolean); - method public boolean installKeyPair(android.content.ComponentName, java.security.PrivateKey, java.security.cert.Certificate[], java.lang.String, boolean, boolean); + method public boolean installKeyPair(android.content.ComponentName, java.security.PrivateKey, java.security.cert.Certificate[], java.lang.String, int); method public boolean isActivePasswordSufficient(); method public boolean isAdminActive(android.content.ComponentName); method public boolean isAffiliatedUser(); @@ -6573,7 +6576,6 @@ package android.app.admin { method public void setOrganizationName(android.content.ComponentName, java.lang.CharSequence); method public void setOverrideApnsEnabled(android.content.ComponentName, boolean); method public java.lang.String[] setPackagesSuspended(android.content.ComponentName, java.lang.String[], boolean); - method public boolean setPasswordBlacklist(android.content.ComponentName, java.lang.String, java.util.List); method public void setPasswordExpirationTimeout(android.content.ComponentName, long); method public void setPasswordHistoryLength(android.content.ComponentName, int); method public void setPasswordMinimumLength(android.content.ComponentName, int); @@ -6685,6 +6687,8 @@ package android.app.admin { field public static final int ID_TYPE_IMEI = 4; // 0x4 field public static final int ID_TYPE_MEID = 8; // 0x8 field public static final int ID_TYPE_SERIAL = 2; // 0x2 + field public static final int INSTALLKEY_REQUEST_CREDENTIALS_ACCESS = 1; // 0x1 + field public static final int INSTALLKEY_SET_USER_SELECTABLE = 2; // 0x2 field public static final int KEYGUARD_DISABLE_BIOMETRICS = 416; // 0x1a0 field public static final int KEYGUARD_DISABLE_FACE = 128; // 0x80 field public static final int KEYGUARD_DISABLE_FEATURES_ALL = 2147483647; // 0x7fffffff @@ -7213,6 +7217,7 @@ package android.app.slice { field public static final java.lang.String HINT_LIST_ITEM = "list_item"; field public static final java.lang.String HINT_NO_TINT = "no_tint"; field public static final java.lang.String HINT_PARTIAL = "partial"; + field public static final java.lang.String HINT_PERMISSION_REQUEST = "permission_request"; field public static final java.lang.String HINT_SEE_MORE = "see_more"; field public static final java.lang.String HINT_SELECTED = "selected"; field public static final java.lang.String HINT_SHORTCUT = "shortcut"; @@ -7221,6 +7226,7 @@ package android.app.slice { field public static final java.lang.String HINT_TTL = "ttl"; field public static final java.lang.String SUBTYPE_COLOR = "color"; field public static final java.lang.String SUBTYPE_CONTENT_DESCRIPTION = "content_description"; + field public static final java.lang.String SUBTYPE_LAYOUT_DIRECTION = "layout_direction"; field public static final java.lang.String SUBTYPE_MAX = "max"; field public static final java.lang.String SUBTYPE_MESSAGE = "message"; field public static final java.lang.String SUBTYPE_MILLIS = "millis"; @@ -7281,11 +7287,14 @@ package android.app.slice { public class SliceManager { method public android.app.slice.Slice bindSlice(android.net.Uri, java.util.List); method public android.app.slice.Slice bindSlice(android.content.Intent, java.util.List); + method public int checkSlicePermission(android.net.Uri, int, int); method public java.util.List getPinnedSlices(); method public java.util.List getPinnedSpecs(android.net.Uri); method public java.util.Collection getSliceDescendants(android.net.Uri); + method public void grantSlicePermission(java.lang.String, android.net.Uri); method public android.net.Uri mapIntentToUri(android.content.Intent); method public void pinSlice(android.net.Uri, java.util.List); + method public void revokeSlicePermission(java.lang.String, android.net.Uri); method public void unpinSlice(android.net.Uri); field public static final java.lang.String CATEGORY_SLICE = "android.app.slice.category.SLICE"; field public static final java.lang.String SLICE_METADATA_KEY = "android.metadata.SLICE_URI"; @@ -7299,6 +7308,7 @@ package android.app.slice { } public abstract class SliceProvider extends android.content.ContentProvider { + ctor public SliceProvider(java.lang.String...); ctor public SliceProvider(); method public final int delete(android.net.Uri, java.lang.String, java.lang.String[]); method public final java.lang.String getType(android.net.Uri); @@ -10904,6 +10914,7 @@ package android.content.pm { method public java.util.List getShortcutConfigActivityList(java.lang.String, android.os.UserHandle); method public android.graphics.drawable.Drawable getShortcutIconDrawable(android.content.pm.ShortcutInfo, int); method public java.util.List getShortcuts(android.content.pm.LauncherApps.ShortcutQuery, android.os.UserHandle); + method public android.os.Bundle getSuspendedPackageLauncherExtras(java.lang.String, android.os.UserHandle); method public boolean hasShortcutHostPermission(); method public boolean isActivityEnabled(android.content.ComponentName, android.os.UserHandle); method public boolean isPackageEnabled(java.lang.String, android.os.UserHandle); @@ -10928,6 +10939,7 @@ package android.content.pm { method public abstract void onPackageRemoved(java.lang.String, android.os.UserHandle); method public abstract void onPackagesAvailable(java.lang.String[], android.os.UserHandle, boolean); method public void onPackagesSuspended(java.lang.String[], android.os.UserHandle); + method public void onPackagesSuspended(java.lang.String[], android.os.Bundle, android.os.UserHandle); method public abstract void onPackagesUnavailable(java.lang.String[], android.os.UserHandle, boolean); method public void onPackagesUnsuspended(java.lang.String[], android.os.UserHandle); method public void onShortcutsChanged(java.lang.String, java.util.List, android.os.UserHandle); @@ -13639,22 +13651,22 @@ package android.graphics { method public int getAllocator(); method public boolean getConserveMemory(); method public android.graphics.Rect getCrop(); - method public boolean getDecodeAsAlphaMask(); - method public boolean getMutable(); method public android.graphics.ImageDecoder.OnPartialImageListener getOnPartialImageListener(); method public android.graphics.PostProcessor getPostProcessor(); - method public boolean getRequireUnpremultiplied(); - method public android.util.Size getSampledSize(int); - method public android.graphics.ImageDecoder setAllocator(int); - method public android.graphics.ImageDecoder setConserveMemory(boolean); - method public android.graphics.ImageDecoder setCrop(android.graphics.Rect); - method public android.graphics.ImageDecoder setDecodeAsAlphaMask(boolean); - method public android.graphics.ImageDecoder setMutable(boolean); - method public android.graphics.ImageDecoder setOnPartialImageListener(android.graphics.ImageDecoder.OnPartialImageListener); - method public android.graphics.ImageDecoder setPostProcessor(android.graphics.PostProcessor); - method public android.graphics.ImageDecoder setRequireUnpremultiplied(boolean); - method public android.graphics.ImageDecoder setResize(int, int); - method public android.graphics.ImageDecoder setResize(int); + method public boolean isDecodeAsAlphaMaskEnabled(); + method public boolean isMutableRequired(); + method public boolean isUnpremultipliedRequired(); + method public void setAllocator(int); + method public void setConserveMemory(boolean); + method public void setCrop(android.graphics.Rect); + method public void setDecodeAsAlphaMaskEnabled(boolean); + method public void setMutableRequired(boolean); + method public void setOnPartialImageListener(android.graphics.ImageDecoder.OnPartialImageListener); + method public void setPostProcessor(android.graphics.PostProcessor); + method public void setTargetColorSpace(android.graphics.ColorSpace); + method public void setTargetSampleSize(int); + method public void setTargetSize(int, int); + method public void setUnpremultipliedRequired(boolean); field public static final int ALLOCATOR_DEFAULT = 0; // 0x0 field public static final int ALLOCATOR_HARDWARE = 3; // 0x3 field public static final int ALLOCATOR_SHARED_MEMORY = 2; // 0x2 @@ -13670,6 +13682,7 @@ package android.graphics { } public static class ImageDecoder.ImageInfo { + method public android.graphics.ColorSpace getColorSpace(); method public java.lang.String getMimeType(); method public android.util.Size getSize(); method public boolean isAnimated(); @@ -21957,6 +21970,7 @@ package android.media { } public final class AudioDeviceInfo { + method public java.lang.String getAddress(); method public int[] getChannelCounts(); method public int[] getChannelIndexMasks(); method public int[] getChannelMasks(); @@ -24004,6 +24018,7 @@ package android.media { field public static final int MEDIA_INFO_BUFFERING_START = 701; // 0x2bd field public static final int MEDIA_INFO_METADATA_UPDATE = 802; // 0x322 field public static final int MEDIA_INFO_NOT_SEEKABLE = 801; // 0x321 + field public static final int MEDIA_INFO_STARTED_AS_NEXT = 2; // 0x2 field public static final int MEDIA_INFO_SUBTITLE_TIMED_OUT = 902; // 0x386 field public static final int MEDIA_INFO_UNKNOWN = 1; // 0x1 field public static final int MEDIA_INFO_UNSUPPORTED_SUBTITLE = 901; // 0x385 @@ -24447,6 +24462,7 @@ package android.media { } public final class MicrophoneInfo { + method public java.lang.String getAddress(); method public java.util.List> getChannelMapping(); method public java.lang.String getDescription(); method public int getDirectionality(); @@ -27003,8 +27019,8 @@ package android.net { public static final class IpSecManager.UdpEncapsulationSocket implements java.lang.AutoCloseable { method public void close() throws java.io.IOException; + method public java.io.FileDescriptor getFileDescriptor(); method public int getPort(); - method public java.io.FileDescriptor getSocket(); } public final class IpSecTransform implements java.lang.AutoCloseable { @@ -27133,6 +27149,7 @@ package android.net { method public void bindSocket(java.net.Socket) throws java.io.IOException; method public void bindSocket(java.io.FileDescriptor) throws java.io.IOException; method public int describeContents(); + method public static android.net.Network fromNetworkHandle(long); method public java.net.InetAddress[] getAllByName(java.lang.String) throws java.net.UnknownHostException; method public java.net.InetAddress getByName(java.lang.String) throws java.net.UnknownHostException; method public long getNetworkHandle(); @@ -27232,6 +27249,8 @@ package android.net { public class NetworkRequest implements android.os.Parcelable { method public int describeContents(); + method public boolean hasCapability(int); + method public boolean hasTransport(int); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; } @@ -38554,6 +38573,7 @@ package android.security.keystore { method public boolean isRandomizedEncryptionRequired(); method public boolean isStrongBoxBacked(); method public boolean isTrustedUserPresenceRequired(); + method public boolean isUnlockedDeviceRequired(); method public boolean isUserAuthenticationRequired(); method public boolean isUserAuthenticationValidWhileOnBody(); method public boolean isUserConfirmationRequired(); @@ -38581,6 +38601,7 @@ package android.security.keystore { method public android.security.keystore.KeyGenParameterSpec.Builder setRandomizedEncryptionRequired(boolean); method public android.security.keystore.KeyGenParameterSpec.Builder setSignaturePaddings(java.lang.String...); method public android.security.keystore.KeyGenParameterSpec.Builder setTrustedUserPresenceRequired(boolean); + method public android.security.keystore.KeyGenParameterSpec.Builder setUnlockedDeviceRequired(boolean); method public android.security.keystore.KeyGenParameterSpec.Builder setUserAuthenticationRequired(boolean); method public android.security.keystore.KeyGenParameterSpec.Builder setUserAuthenticationValidWhileOnBody(boolean); method public android.security.keystore.KeyGenParameterSpec.Builder setUserAuthenticationValidityDurationSeconds(int); @@ -38673,6 +38694,7 @@ package android.security.keystore { method public boolean isInvalidatedByBiometricEnrollment(); method public boolean isRandomizedEncryptionRequired(); method public boolean isTrustedUserPresenceRequired(); + method public boolean isUnlockedDeviceRequired(); method public boolean isUserAuthenticationRequired(); method public boolean isUserAuthenticationValidWhileOnBody(); method public boolean isUserConfirmationRequired(); @@ -38692,6 +38714,7 @@ package android.security.keystore { method public android.security.keystore.KeyProtection.Builder setRandomizedEncryptionRequired(boolean); method public android.security.keystore.KeyProtection.Builder setSignaturePaddings(java.lang.String...); method public android.security.keystore.KeyProtection.Builder setTrustedUserPresenceRequired(boolean); + method public android.security.keystore.KeyProtection.Builder setUnlockedDeviceRequired(boolean); method public android.security.keystore.KeyProtection.Builder setUserAuthenticationRequired(boolean); method public android.security.keystore.KeyProtection.Builder setUserAuthenticationValidWhileOnBody(boolean); method public android.security.keystore.KeyProtection.Builder setUserAuthenticationValidityDurationSeconds(int); @@ -41911,17 +41934,17 @@ package android.telephony { } public class MbmsDownloadSession implements java.lang.AutoCloseable { - method public int addProgressListener(android.telephony.mbms.DownloadRequest, java.util.concurrent.Executor, android.telephony.mbms.DownloadProgressListener); - method public int addStatusListener(android.telephony.mbms.DownloadRequest, java.util.concurrent.Executor, android.telephony.mbms.DownloadStatusListener); - method public int cancelDownload(android.telephony.mbms.DownloadRequest); + method public void addProgressListener(android.telephony.mbms.DownloadRequest, java.util.concurrent.Executor, android.telephony.mbms.DownloadProgressListener); + method public void addStatusListener(android.telephony.mbms.DownloadRequest, java.util.concurrent.Executor, android.telephony.mbms.DownloadStatusListener); + method public void cancelDownload(android.telephony.mbms.DownloadRequest); method public void close(); method public static android.telephony.MbmsDownloadSession create(android.content.Context, java.util.concurrent.Executor, android.telephony.mbms.MbmsDownloadSessionCallback); method public static android.telephony.MbmsDownloadSession create(android.content.Context, java.util.concurrent.Executor, int, android.telephony.mbms.MbmsDownloadSessionCallback); - method public int download(android.telephony.mbms.DownloadRequest); + method public void download(android.telephony.mbms.DownloadRequest); method public java.io.File getTempFileRootDirectory(); method public java.util.List listPendingDownloads(); - method public int removeProgressListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadProgressListener); - method public int removeStatusListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStatusListener); + method public void removeProgressListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadProgressListener); + method public void removeStatusListener(android.telephony.mbms.DownloadRequest, android.telephony.mbms.DownloadStatusListener); method public void requestDownloadState(android.telephony.mbms.DownloadRequest, android.telephony.mbms.FileInfo); method public void requestUpdateFileServices(java.util.List); method public void resetDownloadKnowledge(android.telephony.mbms.DownloadRequest); @@ -42888,6 +42911,7 @@ package android.telephony.mbms { field public static final int ERROR_MIDDLEWARE_NOT_BOUND = 2; // 0x2 field public static final int ERROR_NO_UNIQUE_MIDDLEWARE = 1; // 0x1 field public static final int SUCCESS = 0; // 0x0 + field public static final int UNKNOWN = -1; // 0xffffffff } public static class MbmsErrors.DownloadErrors { @@ -47277,10 +47301,10 @@ package android.view { method public void addExtraDataToAccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo, java.lang.String, android.os.Bundle); method public void addFocusables(java.util.ArrayList, int); method public void addFocusables(java.util.ArrayList, int, int); - method public void addKeyFallbackListener(android.view.View.OnKeyFallbackListener); method public void addKeyboardNavigationClusters(java.util.Collection, int); method public void addOnAttachStateChangeListener(android.view.View.OnAttachStateChangeListener); method public void addOnLayoutChangeListener(android.view.View.OnLayoutChangeListener); + method public void addOnUnhandledKeyEventListener(android.view.View.OnUnhandledKeyEventListener); method public void addTouchables(java.util.ArrayList); method public android.view.ViewPropertyAnimator animate(); method public void announceForAccessibility(java.lang.CharSequence); @@ -47618,7 +47642,6 @@ package android.view { method public void onInitializeAccessibilityEvent(android.view.accessibility.AccessibilityEvent); method public void onInitializeAccessibilityNodeInfo(android.view.accessibility.AccessibilityNodeInfo); method public boolean onKeyDown(int, android.view.KeyEvent); - method public boolean onKeyFallback(android.view.KeyEvent); method public boolean onKeyLongPress(int, android.view.KeyEvent); method public boolean onKeyMultiple(int, int, android.view.KeyEvent); method public boolean onKeyPreIme(int, android.view.KeyEvent); @@ -47672,9 +47695,9 @@ package android.view { method public void refreshDrawableState(); method public void releasePointerCapture(); method public boolean removeCallbacks(java.lang.Runnable); - method public void removeKeyFallbackListener(android.view.View.OnKeyFallbackListener); method public void removeOnAttachStateChangeListener(android.view.View.OnAttachStateChangeListener); method public void removeOnLayoutChangeListener(android.view.View.OnLayoutChangeListener); + method public void removeOnUnhandledKeyEventListener(android.view.View.OnUnhandledKeyEventListener); method public void requestApplyInsets(); method public deprecated void requestFitSystemWindows(); method public final boolean requestFocus(); @@ -48098,10 +48121,6 @@ package android.view { method public abstract boolean onHover(android.view.View, android.view.MotionEvent); } - public static abstract interface View.OnKeyFallbackListener { - method public abstract boolean onKeyFallback(android.view.View, android.view.KeyEvent); - } - public static abstract interface View.OnKeyListener { method public abstract boolean onKey(android.view.View, int, android.view.KeyEvent); } @@ -48126,6 +48145,10 @@ package android.view { method public abstract boolean onTouch(android.view.View, android.view.MotionEvent); } + public static abstract interface View.OnUnhandledKeyEventListener { + method public abstract boolean onUnhandledKeyEvent(android.view.View, android.view.KeyEvent); + } + public final class ViewAnimationUtils { method public static android.animation.Animator createCircularReveal(android.view.View, int, int, float, float); } @@ -50412,9 +50435,9 @@ package android.view.textclassifier { ctor public TextClassification.Options(); method public int describeContents(); method public android.os.LocaleList getDefaultLocales(); - method public java.util.Calendar getReferenceTime(); + method public java.time.ZonedDateTime getReferenceTime(); method public android.view.textclassifier.TextClassification.Options setDefaultLocales(android.os.LocaleList); - method public android.view.textclassifier.TextClassification.Options setReferenceTime(java.util.Calendar); + method public android.view.textclassifier.TextClassification.Options setReferenceTime(java.time.ZonedDateTime); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator CREATOR; } diff --git a/api/removed.txt b/api/removed.txt index 9fe25c90872b87ce432341d288f574ee4da89665..2d76c5a575a0e70fcc2fe14ef63d0766119266b1 100644 --- a/api/removed.txt +++ b/api/removed.txt @@ -183,7 +183,15 @@ package android.graphics { public final class ImageDecoder implements java.lang.AutoCloseable { method public deprecated boolean getAsAlphaMask(); + method public deprecated boolean getDecodeAsAlphaMask(); + method public deprecated boolean getMutable(); + method public deprecated boolean getRequireUnpremultiplied(); method public deprecated android.graphics.ImageDecoder setAsAlphaMask(boolean); + method public deprecated android.graphics.ImageDecoder setDecodeAsAlphaMask(boolean); + method public deprecated android.graphics.ImageDecoder setMutable(boolean); + method public deprecated android.graphics.ImageDecoder setRequireUnpremultiplied(boolean); + method public deprecated android.graphics.ImageDecoder setResize(int, int); + method public deprecated android.graphics.ImageDecoder setResize(int); field public static final deprecated int ERROR_SOURCE_ERROR = 3; // 0x3 field public static final deprecated int ERROR_SOURCE_EXCEPTION = 1; // 0x1 field public static final deprecated int ERROR_SOURCE_INCOMPLETE = 2; // 0x2 diff --git a/api/system-current.txt b/api/system-current.txt index 5568dbad0e8c778699d9179f6248879485a4a9d9..165c6ae1e628984dc510c8d2c57c90f94414849a 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -57,6 +57,7 @@ package android { field public static final java.lang.String CONFIGURE_DISPLAY_BRIGHTNESS = "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS"; field public static final java.lang.String CONNECTIVITY_INTERNAL = "android.permission.CONNECTIVITY_INTERNAL"; field public static final java.lang.String CONNECTIVITY_USE_RESTRICTED_NETWORKS = "android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS"; + field public static final java.lang.String CONTROL_DISPLAY_SATURATION = "android.permission.CONTROL_DISPLAY_SATURATION"; field public static final java.lang.String CONTROL_INCALL_EXPERIENCE = "android.permission.CONTROL_INCALL_EXPERIENCE"; field public static final java.lang.String CONTROL_LOCATION_UPDATES = "android.permission.CONTROL_LOCATION_UPDATES"; field public static final java.lang.String CONTROL_VPN = "android.permission.CONTROL_VPN"; @@ -1252,6 +1253,7 @@ package android.hardware.display { method public android.hardware.display.BrightnessConfiguration getDefaultBrightnessConfiguration(); method public android.graphics.Point getStableDisplaySize(); method public void setBrightnessConfiguration(android.hardware.display.BrightnessConfiguration); + method public void setSaturationLevel(float); } } @@ -2101,6 +2103,7 @@ package android.hardware.radio { method public java.lang.String getVersion(); method public boolean isBackgroundScanningSupported(); method public boolean isCaptureSupported(); + method public boolean isInitializationRequired(); method public boolean isProgramIdentifierSupported(int); method public boolean isProgramTypeSupported(int); method public void writeToParcel(android.os.Parcel, int); @@ -3102,6 +3105,10 @@ package android.net { field public static final int ERROR_INVALID_NETWORK = 1; // 0x1 } + public final class NetworkCapabilities implements android.os.Parcelable { + field public static final int NET_CAPABILITY_OEM_PAID = 22; // 0x16 + } + public class NetworkKey implements android.os.Parcelable { ctor public NetworkKey(android.net.WifiKey); method public int describeContents(); @@ -5549,6 +5556,7 @@ package android.telephony.euicc { package android.telephony.ims { public final class ImsCallForwardInfo implements android.os.Parcelable { + ctor public ImsCallForwardInfo(int, int, int, int, java.lang.String, int); method public int describeContents(); method public int getCondition(); method public java.lang.String getNumber(); @@ -5863,7 +5871,7 @@ package android.telephony.ims { } public final class ImsSsData implements android.os.Parcelable { - ctor public ImsSsData(); + ctor public ImsSsData(int, int, int, int, int); method public int describeContents(); method public boolean isTypeBarring(); method public boolean isTypeCf(); @@ -5914,7 +5922,7 @@ package android.telephony.ims { } public final class ImsSsInfo implements android.os.Parcelable { - ctor public ImsSsInfo(); + ctor public ImsSsInfo(int, java.lang.String); method public int describeContents(); method public java.lang.String getIcbNum(); method public int getStatus(); diff --git a/api/test-current.txt b/api/test-current.txt index d32372517431593801efffc1a1f998b378e19652..b520dfb441d01a521227a305bafaceb2be258990 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -1,8 +1,10 @@ package android { public static final class Manifest.permission { + field public static final java.lang.String ACTIVITY_EMBEDDING = "android.permission.ACTIVITY_EMBEDDING"; field public static final java.lang.String BRIGHTNESS_SLIDER_USAGE = "android.permission.BRIGHTNESS_SLIDER_USAGE"; field public static final java.lang.String CONFIGURE_DISPLAY_BRIGHTNESS = "android.permission.CONFIGURE_DISPLAY_BRIGHTNESS"; + field public static final java.lang.String MANAGE_ACTIVITY_STACKS = "android.permission.MANAGE_ACTIVITY_STACKS"; } } @@ -127,8 +129,8 @@ package android.app { public final class UiAutomation { method public void destroy(); method public android.os.ParcelFileDescriptor[] executeShellCommandRw(java.lang.String); - method public boolean grantRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle); - method public boolean revokeRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle); + method public deprecated boolean grantRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle); + method public deprecated boolean revokeRuntimePermission(java.lang.String, java.lang.String, android.os.UserHandle); } public class UiModeManager { diff --git a/cmds/incidentd/src/FdBuffer.cpp b/cmds/incidentd/src/FdBuffer.cpp index 2b85ec08f9a6dccb17422508dc725f3ba872e670..c6e561f840528c50caa57ab04b45f0565fe86322 100644 --- a/cmds/incidentd/src/FdBuffer.cpp +++ b/cmds/incidentd/src/FdBuffer.cpp @@ -34,11 +34,11 @@ FdBuffer::FdBuffer() FdBuffer::~FdBuffer() {} -status_t FdBuffer::read(unique_fd* fd, int64_t timeout) { - struct pollfd pfds = {.fd = fd->get(), .events = POLLIN}; +status_t FdBuffer::read(int fd, int64_t timeout) { + struct pollfd pfds = {.fd = fd, .events = POLLIN}; mStartTime = uptimeMillis(); - fcntl(fd->get(), F_SETFL, fcntl(fd->get(), F_GETFL, 0) | O_NONBLOCK); + fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NONBLOCK); while (true) { if (mBuffer.size() >= MAX_BUFFER_COUNT * BUFFER_SIZE) { @@ -67,16 +67,16 @@ status_t FdBuffer::read(unique_fd* fd, int64_t timeout) { VLOG("return event has error %s", strerror(errno)); return errno != 0 ? -errno : UNKNOWN_ERROR; } else { - ssize_t amt = ::read(fd->get(), mBuffer.writeBuffer(), mBuffer.currentToWrite()); + ssize_t amt = ::read(fd, mBuffer.writeBuffer(), mBuffer.currentToWrite()); if (amt < 0) { if (errno == EAGAIN || errno == EWOULDBLOCK) { continue; } else { - VLOG("Fail to read %d: %s", fd->get(), strerror(errno)); + VLOG("Fail to read %d: %s", fd, strerror(errno)); return -errno; } } else if (amt == 0) { - VLOG("Reached EOF of fd=%d", fd->get()); + VLOG("Reached EOF of fd=%d", fd); break; } mBuffer.wp()->move(amt); @@ -87,7 +87,7 @@ status_t FdBuffer::read(unique_fd* fd, int64_t timeout) { return NO_ERROR; } -status_t FdBuffer::readFully(unique_fd* fd) { +status_t FdBuffer::readFully(int fd) { mStartTime = uptimeMillis(); while (true) { @@ -99,10 +99,10 @@ status_t FdBuffer::readFully(unique_fd* fd) { } if (mBuffer.writeBuffer() == NULL) return NO_MEMORY; - ssize_t amt = TEMP_FAILURE_RETRY( - ::read(fd->get(), mBuffer.writeBuffer(), mBuffer.currentToWrite())); + ssize_t amt = + TEMP_FAILURE_RETRY(::read(fd, mBuffer.writeBuffer(), mBuffer.currentToWrite())); if (amt < 0) { - VLOG("Fail to read %d: %s", fd->get(), strerror(errno)); + VLOG("Fail to read %d: %s", fd, strerror(errno)); return -errno; } else if (amt == 0) { VLOG("Done reading %zu bytes", mBuffer.size()); @@ -116,20 +116,20 @@ status_t FdBuffer::readFully(unique_fd* fd) { return NO_ERROR; } -status_t FdBuffer::readProcessedDataInStream(unique_fd* fd, unique_fd* toFd, unique_fd* fromFd, +status_t FdBuffer::readProcessedDataInStream(int fd, unique_fd toFd, unique_fd fromFd, int64_t timeoutMs, const bool isSysfs) { struct pollfd pfds[] = { - {.fd = fd->get(), .events = POLLIN}, - {.fd = toFd->get(), .events = POLLOUT}, - {.fd = fromFd->get(), .events = POLLIN}, + {.fd = fd, .events = POLLIN}, + {.fd = toFd.get(), .events = POLLOUT}, + {.fd = fromFd.get(), .events = POLLIN}, }; mStartTime = uptimeMillis(); // mark all fds non blocking - fcntl(fd->get(), F_SETFL, fcntl(fd->get(), F_GETFL, 0) | O_NONBLOCK); - fcntl(toFd->get(), F_SETFL, fcntl(toFd->get(), F_GETFL, 0) | O_NONBLOCK); - fcntl(fromFd->get(), F_SETFL, fcntl(fromFd->get(), F_GETFL, 0) | O_NONBLOCK); + fcntl(fd, F_SETFL, fcntl(fd, F_GETFL, 0) | O_NONBLOCK); + fcntl(toFd.get(), F_SETFL, fcntl(toFd.get(), F_GETFL, 0) | O_NONBLOCK); + fcntl(fromFd.get(), F_SETFL, fcntl(fromFd.get(), F_GETFL, 0) | O_NONBLOCK); // A circular buffer holds data read from fd and writes to parsing process uint8_t cirBuf[BUFFER_SIZE]; @@ -166,10 +166,10 @@ status_t FdBuffer::readProcessedDataInStream(unique_fd* fd, unique_fd* toFd, uni for (int i = 0; i < 3; ++i) { if ((pfds[i].revents & POLLERR) != 0) { if (i == 0 && isSysfs) { - VLOG("fd %d is sysfs, ignore its POLLERR return value", fd->get()); + VLOG("fd %d is sysfs, ignore its POLLERR return value", fd); continue; } - VLOG("fd[%d]=%d returns error events: %s", i, fd->get(), strerror(errno)); + VLOG("fd[%d]=%d returns error events: %s", i, fd, strerror(errno)); return errno != 0 ? -errno : UNKNOWN_ERROR; } } @@ -178,17 +178,17 @@ status_t FdBuffer::readProcessedDataInStream(unique_fd* fd, unique_fd* toFd, uni if (cirSize != BUFFER_SIZE && pfds[0].fd != -1) { ssize_t amt; if (rpos >= wpos) { - amt = ::read(fd->get(), cirBuf + rpos, BUFFER_SIZE - rpos); + amt = ::read(fd, cirBuf + rpos, BUFFER_SIZE - rpos); } else { - amt = ::read(fd->get(), cirBuf + rpos, wpos - rpos); + amt = ::read(fd, cirBuf + rpos, wpos - rpos); } if (amt < 0) { if (!(errno == EAGAIN || errno == EWOULDBLOCK)) { - VLOG("Fail to read fd %d: %s", fd->get(), strerror(errno)); + VLOG("Fail to read fd %d: %s", fd, strerror(errno)); return -errno; } // otherwise just continue } else if (amt == 0) { - VLOG("Reached EOF of input file %d", fd->get()); + VLOG("Reached EOF of input file %d", fd); pfds[0].fd = -1; // reach EOF so don't have to poll pfds[0]. } else { rpos += amt; @@ -200,13 +200,13 @@ status_t FdBuffer::readProcessedDataInStream(unique_fd* fd, unique_fd* toFd, uni if (cirSize > 0 && pfds[1].fd != -1) { ssize_t amt; if (rpos > wpos) { - amt = ::write(toFd->get(), cirBuf + wpos, rpos - wpos); + amt = ::write(toFd.get(), cirBuf + wpos, rpos - wpos); } else { - amt = ::write(toFd->get(), cirBuf + wpos, BUFFER_SIZE - wpos); + amt = ::write(toFd.get(), cirBuf + wpos, BUFFER_SIZE - wpos); } if (amt < 0) { if (!(errno == EAGAIN || errno == EWOULDBLOCK)) { - VLOG("Fail to write toFd %d: %s", toFd->get(), strerror(errno)); + VLOG("Fail to write toFd.get() %d: %s", toFd.get(), strerror(errno)); return -errno; } // otherwise just continue } else { @@ -217,8 +217,8 @@ status_t FdBuffer::readProcessedDataInStream(unique_fd* fd, unique_fd* toFd, uni // if buffer is empty and fd is closed, close write fd. if (cirSize == 0 && pfds[0].fd == -1 && pfds[1].fd != -1) { - VLOG("Close write pipe %d", toFd->get()); - toFd->reset(); + VLOG("Close write pipe %d", toFd.get()); + toFd.reset(); pfds[1].fd = -1; } @@ -231,14 +231,14 @@ status_t FdBuffer::readProcessedDataInStream(unique_fd* fd, unique_fd* toFd, uni } // read from parsing process - ssize_t amt = ::read(fromFd->get(), mBuffer.writeBuffer(), mBuffer.currentToWrite()); + ssize_t amt = ::read(fromFd.get(), mBuffer.writeBuffer(), mBuffer.currentToWrite()); if (amt < 0) { if (!(errno == EAGAIN || errno == EWOULDBLOCK)) { - VLOG("Fail to read fromFd %d: %s", fromFd->get(), strerror(errno)); + VLOG("Fail to read fromFd.get() %d: %s", fromFd.get(), strerror(errno)); return -errno; } // otherwise just continue } else if (amt == 0) { - VLOG("Reached EOF of fromFd %d", fromFd->get()); + VLOG("Reached EOF of fromFd.get() %d", fromFd.get()); break; } else { mBuffer.wp()->move(amt); diff --git a/cmds/incidentd/src/FdBuffer.h b/cmds/incidentd/src/FdBuffer.h index db3a74b7817821fe9be60cf81eb18b426846f4c3..f467da86602416df68a0851130cda92098bd010b 100644 --- a/cmds/incidentd/src/FdBuffer.h +++ b/cmds/incidentd/src/FdBuffer.h @@ -40,13 +40,13 @@ public: * Returns NO_ERROR if there were no errors or if we timed out. * Will mark the file O_NONBLOCK. */ - status_t read(unique_fd* fd, int64_t timeoutMs); + status_t read(int fd, int64_t timeoutMs); /** * Read the data until we hit eof. * Returns NO_ERROR if there were no errors. */ - status_t readFully(unique_fd* fd); + status_t readFully(int fd); /** * Read processed results by streaming data to a parsing process, e.g. incident helper. @@ -58,8 +58,8 @@ public: * * Poll will return POLLERR if fd is from sysfs, handle this edge case. */ - status_t readProcessedDataInStream(unique_fd* fd, unique_fd* toFd, unique_fd* fromFd, - int64_t timeoutMs, const bool isSysfs = false); + status_t readProcessedDataInStream(int fd, unique_fd toFd, unique_fd fromFd, int64_t timeoutMs, + const bool isSysfs = false); /** * Whether we timed out. diff --git a/cmds/incidentd/src/IncidentService.cpp b/cmds/incidentd/src/IncidentService.cpp index aeccefdd15c0dbb9c23c5432dd76d4c6526248b3..d02b4dd99067ea69b41553b6cac483dd821c8026 100644 --- a/cmds/incidentd/src/IncidentService.cpp +++ b/cmds/incidentd/src/IncidentService.cpp @@ -352,8 +352,7 @@ status_t IncidentService::cmd_privacy(FILE* in, FILE* out, FILE* err, VectortimeoutMs, mIsSysfs); + status_t readStatus = buffer.readProcessedDataInStream(fd.get(), std::move(p2cPipe.writeFd()), + std::move(c2pPipe.readFd()), + this->timeoutMs, mIsSysfs); if (readStatus != NO_ERROR || buffer.timedOut()) { ALOGW("FileSection '%s' failed to read data from incident helper: %s, timedout: %s", @@ -319,8 +320,10 @@ status_t GZipSection::Execute(ReportRequestSet* requests) const { index++; // look at the next file. } VLOG("GZipSection is using file %s, fd=%d", mFilenames[index], fd.get()); - if (fd.get() == -1) return -1; - + if (fd.get() == -1) { + ALOGW("GZipSection %s can't open all the files", this->name.string()); + return NO_ERROR; // e.g. LAST_KMSG will reach here in user build. + } FdBuffer buffer; Fpipe p2cPipe; Fpipe c2pPipe; @@ -354,9 +357,9 @@ status_t GZipSection::Execute(ReportRequestSet* requests) const { VLOG("GZipSection '%s' editPos=%zd, dataBeginAt=%zd", this->name.string(), editPos, dataBeginAt); - status_t readStatus = - buffer.readProcessedDataInStream(&fd, &p2cPipe.writeFd(), &c2pPipe.readFd(), - this->timeoutMs, isSysfs(mFilenames[index])); + status_t readStatus = buffer.readProcessedDataInStream( + fd.get(), std::move(p2cPipe.writeFd()), std::move(c2pPipe.readFd()), this->timeoutMs, + isSysfs(mFilenames[index])); if (readStatus != NO_ERROR || buffer.timedOut()) { ALOGW("GZipSection '%s' failed to read data from gzip: %s, timedout: %s", @@ -466,7 +469,7 @@ status_t WorkerThreadSection::Execute(ReportRequestSet* requests) const { pthread_attr_destroy(&attr); // Loop reading until either the timeout or the worker side is done (i.e. eof). - err = buffer.read(&data->pipe.readFd(), this->timeoutMs); + err = buffer.read(data->pipe.readFd().get(), this->timeoutMs); if (err != NO_ERROR) { // TODO: Log this error into the incident report. ALOGW("WorkerThreadSection '%s' reader failed with error '%s'", this->name.string(), @@ -573,7 +576,7 @@ status_t CommandSection::Execute(ReportRequestSet* requests) const { } cmdPipe.writeFd().reset(); - status_t readStatus = buffer.read(&ihPipe.readFd(), this->timeoutMs); + status_t readStatus = buffer.read(ihPipe.readFd().get(), this->timeoutMs); if (readStatus != NO_ERROR || buffer.timedOut()) { ALOGW("CommandSection '%s' failed to read data from incident helper: %s, timedout: %s", this->name.string(), strerror(-readStatus), buffer.timedOut() ? "true" : "false"); @@ -892,7 +895,7 @@ status_t TombstoneSection::BlockingCall(int pipeWriteFd) const { // Parent process. // Read from the pipe concurrently to avoid blocking the child. FdBuffer buffer; - err = buffer.readFully(&dumpPipe.readFd()); + err = buffer.readFully(dumpPipe.readFd().get()); if (err != NO_ERROR) { ALOGW("TombstoneSection '%s' failed to read stack dump: %d", this->name.string(), err); dumpPipe.readFd().reset(); diff --git a/cmds/incidentd/tests/FdBuffer_test.cpp b/cmds/incidentd/tests/FdBuffer_test.cpp index bf770173793f1284e868e0cdb1bd1f75d2392738..7a05d7e071d0ef992311ed582a9d62d9dbcf815a 100644 --- a/cmds/incidentd/tests/FdBuffer_test.cpp +++ b/cmds/incidentd/tests/FdBuffer_test.cpp @@ -37,7 +37,6 @@ class FdBufferTest : public Test { public: virtual void SetUp() override { ASSERT_NE(tf.fd, -1); - tffd.reset(tf.fd); ASSERT_NE(p2cPipe.init(), -1); ASSERT_NE(c2pPipe.init(), -1); } @@ -57,13 +56,13 @@ public: EXPECT_EQ(expected[i], '\0'); } - bool DoDataStream(unique_fd* rFd, unique_fd* wFd) { + bool DoDataStream(const unique_fd& rFd, const unique_fd& wFd) { char buf[BUFFER_SIZE]; ssize_t nRead; - while ((nRead = read(rFd->get(), buf, BUFFER_SIZE)) > 0) { + while ((nRead = read(rFd.get(), buf, BUFFER_SIZE)) > 0) { ssize_t nWritten = 0; while (nWritten < nRead) { - ssize_t amt = write(wFd->get(), buf + nWritten, nRead - nWritten); + ssize_t amt = write(wFd.get(), buf + nWritten, nRead - nWritten); if (amt < 0) { return false; } @@ -76,7 +75,6 @@ public: protected: FdBuffer buffer; TemporaryFile tf; - unique_fd tffd; Fpipe p2cPipe; Fpipe c2pPipe; @@ -87,7 +85,7 @@ protected: TEST_F(FdBufferTest, ReadAndWrite) { std::string testdata = "FdBuffer test string"; ASSERT_TRUE(WriteStringToFile(testdata, tf.path)); - ASSERT_EQ(NO_ERROR, buffer.read(&tffd, READ_TIMEOUT)); + ASSERT_EQ(NO_ERROR, buffer.read(tf.fd, READ_TIMEOUT)); AssertBufferReadSuccessful(testdata.size()); AssertBufferContent(testdata.c_str()); } @@ -100,7 +98,7 @@ TEST_F(FdBufferTest, IterateEmpty) { TEST_F(FdBufferTest, ReadAndIterate) { std::string testdata = "FdBuffer test string"; ASSERT_TRUE(WriteStringToFile(testdata, tf.path)); - ASSERT_EQ(NO_ERROR, buffer.read(&tffd, READ_TIMEOUT)); + ASSERT_EQ(NO_ERROR, buffer.read(tf.fd, READ_TIMEOUT)); int i = 0; EncodedBuffer::iterator it = buffer.data(); @@ -128,7 +126,7 @@ TEST_F(FdBufferTest, ReadTimeout) { } else { c2pPipe.writeFd().reset(); - status_t status = buffer.read(&c2pPipe.readFd(), QUICK_TIMEOUT_MS); + status_t status = buffer.read(c2pPipe.readFd().get(), QUICK_TIMEOUT_MS); ASSERT_EQ(NO_ERROR, status); EXPECT_TRUE(buffer.timedOut()); @@ -148,7 +146,7 @@ TEST_F(FdBufferTest, ReadInStreamAndWrite) { p2cPipe.writeFd().reset(); c2pPipe.readFd().reset(); ASSERT_TRUE(WriteStringToFd(HEAD, c2pPipe.writeFd())); - ASSERT_TRUE(DoDataStream(&p2cPipe.readFd(), &c2pPipe.writeFd())); + ASSERT_TRUE(DoDataStream(p2cPipe.readFd(), c2pPipe.writeFd())); p2cPipe.readFd().reset(); c2pPipe.writeFd().reset(); // Must exit here otherwise the child process will continue executing the test binary. @@ -157,8 +155,9 @@ TEST_F(FdBufferTest, ReadInStreamAndWrite) { p2cPipe.readFd().reset(); c2pPipe.writeFd().reset(); - ASSERT_EQ(NO_ERROR, buffer.readProcessedDataInStream(&tffd, &p2cPipe.writeFd(), - &c2pPipe.readFd(), READ_TIMEOUT)); + ASSERT_EQ(NO_ERROR, + buffer.readProcessedDataInStream(tf.fd, std::move(p2cPipe.writeFd()), + std::move(c2pPipe.readFd()), READ_TIMEOUT)); AssertBufferReadSuccessful(HEAD.size() + testdata.size()); AssertBufferContent(expected.c_str()); wait(&pid); @@ -189,8 +188,9 @@ TEST_F(FdBufferTest, ReadInStreamAndWriteAllAtOnce) { p2cPipe.readFd().reset(); c2pPipe.writeFd().reset(); - ASSERT_EQ(NO_ERROR, buffer.readProcessedDataInStream(&tffd, &p2cPipe.writeFd(), - &c2pPipe.readFd(), READ_TIMEOUT)); + ASSERT_EQ(NO_ERROR, + buffer.readProcessedDataInStream(tf.fd, std::move(p2cPipe.writeFd()), + std::move(c2pPipe.readFd()), READ_TIMEOUT)); AssertBufferReadSuccessful(HEAD.size() + testdata.size()); AssertBufferContent(expected.c_str()); wait(&pid); @@ -206,7 +206,7 @@ TEST_F(FdBufferTest, ReadInStreamEmpty) { if (pid == 0) { p2cPipe.writeFd().reset(); c2pPipe.readFd().reset(); - ASSERT_TRUE(DoDataStream(&p2cPipe.readFd(), &c2pPipe.writeFd())); + ASSERT_TRUE(DoDataStream(p2cPipe.readFd(), c2pPipe.writeFd())); p2cPipe.readFd().reset(); c2pPipe.writeFd().reset(); _exit(EXIT_SUCCESS); @@ -214,8 +214,9 @@ TEST_F(FdBufferTest, ReadInStreamEmpty) { p2cPipe.readFd().reset(); c2pPipe.writeFd().reset(); - ASSERT_EQ(NO_ERROR, buffer.readProcessedDataInStream(&tffd, &p2cPipe.writeFd(), - &c2pPipe.readFd(), READ_TIMEOUT)); + ASSERT_EQ(NO_ERROR, + buffer.readProcessedDataInStream(tf.fd, std::move(p2cPipe.writeFd()), + std::move(c2pPipe.readFd()), READ_TIMEOUT)); AssertBufferReadSuccessful(0); AssertBufferContent(""); wait(&pid); @@ -233,7 +234,7 @@ TEST_F(FdBufferTest, ReadInStreamMoreThan4MB) { if (pid == 0) { p2cPipe.writeFd().reset(); c2pPipe.readFd().reset(); - ASSERT_TRUE(DoDataStream(&p2cPipe.readFd(), &c2pPipe.writeFd())); + ASSERT_TRUE(DoDataStream(p2cPipe.readFd(), c2pPipe.writeFd())); p2cPipe.readFd().reset(); c2pPipe.writeFd().reset(); _exit(EXIT_SUCCESS); @@ -241,8 +242,9 @@ TEST_F(FdBufferTest, ReadInStreamMoreThan4MB) { p2cPipe.readFd().reset(); c2pPipe.writeFd().reset(); - ASSERT_EQ(NO_ERROR, buffer.readProcessedDataInStream(&fd, &p2cPipe.writeFd(), - &c2pPipe.readFd(), READ_TIMEOUT)); + ASSERT_EQ(NO_ERROR, + buffer.readProcessedDataInStream(fd, std::move(p2cPipe.writeFd()), + std::move(c2pPipe.readFd()), READ_TIMEOUT)); EXPECT_EQ(buffer.size(), fourMB); EXPECT_FALSE(buffer.timedOut()); EXPECT_TRUE(buffer.truncated()); @@ -278,8 +280,9 @@ TEST_F(FdBufferTest, ReadInStreamTimeOut) { p2cPipe.readFd().reset(); c2pPipe.writeFd().reset(); - ASSERT_EQ(NO_ERROR, buffer.readProcessedDataInStream(&tffd, &p2cPipe.writeFd(), - &c2pPipe.readFd(), QUICK_TIMEOUT_MS)); + ASSERT_EQ(NO_ERROR, + buffer.readProcessedDataInStream(tf.fd, std::move(p2cPipe.writeFd()), + std::move(c2pPipe.readFd()), QUICK_TIMEOUT_MS)); EXPECT_TRUE(buffer.timedOut()); kill(pid, SIGKILL); // reap the child process } diff --git a/cmds/incidentd/tests/PrivacyBuffer_test.cpp b/cmds/incidentd/tests/PrivacyBuffer_test.cpp index 5edc0c79785b38de0a54e426cc5cc2b94e7b1043..10c2981d6403de2625a618294db77538ea5011c1 100644 --- a/cmds/incidentd/tests/PrivacyBuffer_test.cpp +++ b/cmds/incidentd/tests/PrivacyBuffer_test.cpp @@ -38,7 +38,7 @@ const uint8_t STRING_TYPE = 9; const uint8_t MESSAGE_TYPE = 11; const string STRING_FIELD_0 = "\x02\viamtestdata"; const string VARINT_FIELD_1 = "\x08\x96\x01"; // 150 -const string STRING_FIELD_2 = "\x12\vwhatthefuck"; +const string STRING_FIELD_2 = "\x12\vandroidwins"; const string FIX64_FIELD_3 = "\x19\xff\xff\xff\xff\xff\xff\xff\xff"; // -1 const string FIX32_FIELD_4 = "\x25\xff\xff\xff\xff"; // -1 const string MESSAGE_FIELD_5 = "\x2a\x10" + VARINT_FIELD_1 + STRING_FIELD_2; @@ -58,8 +58,7 @@ public: void writeToFdBuffer(string str) { ASSERT_TRUE(WriteStringToFile(str, tf.path)); - unique_fd tffd(tf.fd); - ASSERT_EQ(NO_ERROR, buffer.read(&tffd, 10000)); + ASSERT_EQ(NO_ERROR, buffer.read(tf.fd, 10000)); ASSERT_EQ(str.size(), buffer.size()); } @@ -274,4 +273,4 @@ TEST_F(PrivacyBufferTest, AutoMessage) { autoMsg->children = list; string expected = "\x2a\xd" + STRING_FIELD_2; assertStripByFields(DEST_AUTOMATIC, expected, 1, autoMsg); -} \ No newline at end of file +} diff --git a/cmds/incidentd/tests/Section_test.cpp b/cmds/incidentd/tests/Section_test.cpp index f93839b62dcff415d111cd55d347adde987886fc..2f6698bc3116786b43cc284001e926d439897542 100644 --- a/cmds/incidentd/tests/Section_test.cpp +++ b/cmds/incidentd/tests/Section_test.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include #include @@ -31,12 +32,13 @@ const int REVERSE_PARSER = 1; const int QUICK_TIMEOUT_MS = 100; const string VARINT_FIELD_1 = "\x08\x96\x01"; // 150 -const string STRING_FIELD_2 = "\x12\vwhatthefuck"; +const string STRING_FIELD_2 = "\x12\vandroidwins"; const string FIX64_FIELD_3 = "\x19\xff\xff\xff\xff\xff\xff\xff\xff"; // -1 using namespace android::base; using namespace android::binder; using namespace android::os; +using namespace android::util; using namespace std; using ::testing::StrEq; using ::testing::Test; @@ -154,17 +156,26 @@ TEST_F(SectionTest, GZipSection) { requests.setMainDest(android::os::DEST_LOCAL); ASSERT_EQ(NO_ERROR, gs.Execute(&requests)); - std::string expect, gzFile, actual; + std::string expected, gzFile, actual; ASSERT_TRUE(ReadFileToString(testGzFile, &gzFile)); ASSERT_TRUE(ReadFileToString(tf.path, &actual)); - expect = "\x2\xC6\x6\n\"" + testFile + "\x12\x9F\x6" + gzFile; - EXPECT_THAT(actual, StrEq(expect)); + // generates the expected protobuf result. + size_t fileLen = testFile.size(); + size_t totalLen = 1 + get_varint_size(fileLen) + fileLen + 3 + gzFile.size(); + uint8_t header[20]; + header[0] = '\x2'; // header 0 << 3 + 2 + uint8_t* ptr = write_raw_varint(header + 1, totalLen); + *ptr = '\n'; // header 1 << 3 + 2 + ptr = write_raw_varint(++ptr, fileLen); + expected.assign((const char*)header, ptr - header); + expected += testFile + "\x12\x9F\x6" + gzFile; + EXPECT_THAT(actual, StrEq(expected)); } TEST_F(SectionTest, GZipSectionNoFileFound) { GZipSection gs(NOOP_PARSER, "/tmp/nonexist1", "/tmp/nonexist2", NULL); requests.setMainFd(STDOUT_FILENO); - ASSERT_EQ(-1, gs.Execute(&requests)); + ASSERT_EQ(NO_ERROR, gs.Execute(&requests)); } TEST_F(SectionTest, CommandSectionConstructor) { diff --git a/cmds/requestsync/src/com/android/commands/requestsync/RequestSync.java b/cmds/requestsync/src/com/android/commands/requestsync/RequestSync.java index b76d6694ca2dbf6a3b2a69d6aea926fd81c25560..37b7acfaf5e6a8b3a98205978cbbb806bf990a0e 100644 --- a/cmds/requestsync/src/com/android/commands/requestsync/RequestSync.java +++ b/cmds/requestsync/src/com/android/commands/requestsync/RequestSync.java @@ -29,23 +29,21 @@ public class RequestSync { private String[] mArgs; private int mNextArg; private String mCurArgData; - private boolean mIsForegroundRequest; + + private int mExemptionFlag = ContentResolver.SYNC_EXEMPTION_NONE; enum Operation { REQUEST_SYNC { @Override void invoke(RequestSync caller) { - if (caller.mIsForegroundRequest) { - caller.mExtras.putBoolean( - ContentResolver.SYNC_VIRTUAL_EXTRAS_FORCE_FG_SYNC, true); - } else { - caller.mExtras.putBoolean( - ContentResolver.SYNC_VIRTUAL_EXTRAS_FORCE_BG_SYNC, true); + final int flag = caller.mExemptionFlag; + caller.mExtras.putInt(ContentResolver.SYNC_VIRTUAL_EXTRAS_EXEMPTION_FLAG, flag); + if (flag == ContentResolver.SYNC_EXEMPTION_NONE) { System.out.println( "Making a sync request as a background app.\n" + "Note: request may be throttled by App Standby.\n" + "To override this behavior and run a sync immediately," - + " pass a -f option.\n"); + + " pass a -f or -F option (use -h for help).\n"); } final SyncRequest request = new SyncRequest.Builder() @@ -213,7 +211,10 @@ public class RequestSync { mExtras.putBoolean(key, Boolean.valueOf(value)); } else if (opt.equals("-f") || opt.equals("--foreground")) { - mIsForegroundRequest = true; + mExemptionFlag = ContentResolver.SYNC_EXEMPTION_ACTIVE; + + } else if (opt.equals("-F") || opt.equals("--top")) { + mExemptionFlag = ContentResolver.SYNC_EXEMPTION_ACTIVE_WITH_TEMP; } else { System.err.println("Error: Unknown option: " + opt); @@ -293,7 +294,9 @@ public class RequestSync { " -a|--authority \n" + " App-standby related options\n" + "\n" + - " -f|--foreground (Exempt a sync from app standby)\n" + + " -f|--foreground (cause WORKING_SET, FREQUENT sync adapters" + + " to run immediately)\n" + + " -F|--top (cause even RARE sync adapters to run immediately)\n" + " ContentResolver extra options:\n" + " --is|--ignore-settings: Add SYNC_EXTRAS_IGNORE_SETTINGS\n" + " --ib|--ignore-backoff: Add SYNC_EXTRAS_IGNORE_BACKOFF\n" + diff --git a/cmds/statsd/Android.mk b/cmds/statsd/Android.mk index 1aef0c4c43c51057be8cc1f361db79cde92e2594..7723615245b7928704da3dc5d9b25bb16be3ac40 100644 --- a/cmds/statsd/Android.mk +++ b/cmds/statsd/Android.mk @@ -202,6 +202,7 @@ LOCAL_SRC_FILES := \ tests/statsd_test_util.cpp \ tests/e2e/WakelockDuration_e2e_test.cpp \ tests/e2e/MetricConditionLink_e2e_test.cpp \ + tests/e2e/Alarm_e2e_test.cpp \ tests/e2e/Attribution_e2e_test.cpp \ tests/e2e/GaugeMetric_e2e_push_test.cpp \ tests/e2e/DimensionInCondition_e2e_combination_AND_cond_test.cpp \ diff --git a/cmds/statsd/benchmark/metric_util.cpp b/cmds/statsd/benchmark/metric_util.cpp index b67764bd5130aa8c0408be8e84ebd60bc75a1752..50b05cd5b1d869931a6dc42c4b7b062a6fce4d11 100644 --- a/cmds/statsd/benchmark/metric_util.cpp +++ b/cmds/statsd/benchmark/metric_util.cpp @@ -127,25 +127,25 @@ AtomMatcher CreateSyncEndAtomMatcher() { } AtomMatcher CreateActivityForegroundStateChangedAtomMatcher( - const string& name, ActivityForegroundStateChanged::Activity activity) { + const string& name, ActivityForegroundStateChanged::State state) { AtomMatcher atom_matcher; atom_matcher.set_id(StringToId(name)); auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher(); simple_atom_matcher->set_atom_id(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED); auto field_value_matcher = simple_atom_matcher->add_field_value_matcher(); field_value_matcher->set_field(4); // Activity field. - field_value_matcher->set_eq_int(activity); + field_value_matcher->set_eq_int(state); return atom_matcher; } AtomMatcher CreateMoveToBackgroundAtomMatcher() { return CreateActivityForegroundStateChangedAtomMatcher( - "MoveToBackground", ActivityForegroundStateChanged::MOVE_TO_BACKGROUND); + "MoveToBackground", ActivityForegroundStateChanged::BACKGROUND); } AtomMatcher CreateMoveToForegroundAtomMatcher() { return CreateActivityForegroundStateChangedAtomMatcher( - "MoveToForeground", ActivityForegroundStateChanged::MOVE_TO_FOREGROUND); + "MoveToForeground", ActivityForegroundStateChanged::FOREGROUND); } Predicate CreateScheduledJobPredicate() { @@ -315,25 +315,25 @@ std::unique_ptr CreateReleaseWakelockEvent( } std::unique_ptr CreateActivityForegroundStateChangedEvent( - const int uid, const ActivityForegroundStateChanged::Activity activity, uint64_t timestampNs) { + const int uid, const ActivityForegroundStateChanged::State state, uint64_t timestampNs) { auto event = std::make_unique( android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, timestampNs); event->write(uid); event->write("pkg_name"); event->write("class_name"); - event->write(activity); + event->write(state); event->init(); return event; } std::unique_ptr CreateMoveToBackgroundEvent(const int uid, uint64_t timestampNs) { return CreateActivityForegroundStateChangedEvent( - uid, ActivityForegroundStateChanged::MOVE_TO_BACKGROUND, timestampNs); + uid, ActivityForegroundStateChanged::BACKGROUND, timestampNs); } std::unique_ptr CreateMoveToForegroundEvent(const int uid, uint64_t timestampNs) { return CreateActivityForegroundStateChangedEvent( - uid, ActivityForegroundStateChanged::MOVE_TO_FOREGROUND, timestampNs); + uid, ActivityForegroundStateChanged::FOREGROUND, timestampNs); } std::unique_ptr CreateSyncStateChangedEvent( diff --git a/cmds/statsd/src/StatsLogProcessor.cpp b/cmds/statsd/src/StatsLogProcessor.cpp index a458c07394a7d904f33a645d4c6807a22b2d2a30..13f2679e9b0e3a9469eef43740783ec22cc5b58c 100644 --- a/cmds/statsd/src/StatsLogProcessor.cpp +++ b/cmds/statsd/src/StatsLogProcessor.cpp @@ -79,15 +79,13 @@ StatsLogProcessor::StatsLogProcessor(const sp& uidMap, mSendBroadcast(sendBroadcast), mTimeBaseSec(timeBaseSec), mLastLogTimestamp(0) { - StatsPullerManager statsPullerManager; - statsPullerManager.SetTimeBaseSec(mTimeBaseSec); } StatsLogProcessor::~StatsLogProcessor() { } void StatsLogProcessor::onAnomalyAlarmFired( - const uint64_t timestampNs, + const uint64_t& timestampNs, unordered_set, SpHash> alarmSet) { std::lock_guard lock(mMetricsMutex); for (const auto& itr : mMetricsManagers) { @@ -95,7 +93,7 @@ void StatsLogProcessor::onAnomalyAlarmFired( } } void StatsLogProcessor::onPeriodicAlarmFired( - const uint64_t timestampNs, + const uint64_t& timestampNs, unordered_set, SpHash> alarmSet) { std::lock_guard lock(mMetricsMutex); @@ -177,7 +175,7 @@ void StatsLogProcessor::OnLogEvent(LogEvent* event) { uint64_t curTimeSec = getElapsedRealtimeSec(); if (curTimeSec - mLastPullerCacheClearTimeSec > StatsdStats::kPullerCacheClearIntervalSec) { - mStatsPullerManager.ClearPullerCacheIfNecessary(curTimeSec); + mStatsPullerManager.ClearPullerCacheIfNecessary(curTimeSec * NS_PER_SEC); mLastPullerCacheClearTimeSec = curTimeSec; } diff --git a/cmds/statsd/src/StatsLogProcessor.h b/cmds/statsd/src/StatsLogProcessor.h index a07a35587b11fc267c5ecd9e5d647dd025f0bb5a..387a9295055f223147fde3f9024e8c57adc902b3 100644 --- a/cmds/statsd/src/StatsLogProcessor.h +++ b/cmds/statsd/src/StatsLogProcessor.h @@ -51,12 +51,12 @@ public: /* Tells MetricsManager that the alarms in alarmSet have fired. Modifies anomaly alarmSet. */ void onAnomalyAlarmFired( - const uint64_t timestampNs, + const uint64_t& timestampNs, unordered_set, SpHash> alarmSet); /* Tells MetricsManager that the alarms in alarmSet have fired. Modifies periodic alarmSet. */ void onPeriodicAlarmFired( - const uint64_t timestampNs, + const uint64_t& timestampNs, unordered_set, SpHash> alarmSet); /* Flushes data to disk. Data on memory will be gone after written to disk. */ @@ -74,6 +74,10 @@ private: return mAnomalyAlarmMonitor; } + inline sp getPeriodicAlarmMonitor() const { + return mPeriodicAlarmMonitor; + } + mutable mutex mMetricsMutex; std::unordered_map> mMetricsManagers; @@ -147,6 +151,7 @@ private: FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_single_bucket); FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_multiple_buckets); FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_long_refractory_period); + FRIEND_TEST(AlarmE2eTest, TestMultipleAlarms); }; } // namespace statsd diff --git a/cmds/statsd/src/StatsService.cpp b/cmds/statsd/src/StatsService.cpp index b03b4b4a942c59c5b40eabed4ae8a342144879d0..7b0d5d9ca8849bbb508115391cceda1192fd829b 100644 --- a/cmds/statsd/src/StatsService.cpp +++ b/cmds/statsd/src/StatsService.cpp @@ -595,7 +595,7 @@ status_t StatsService::cmd_log_app_breadcrumb(FILE* out, const Vector& status_t StatsService::cmd_print_pulled_metrics(FILE* out, const Vector& args) { int s = atoi(args[1].c_str()); vector > stats; - if (mStatsPullerManager.Pull(s, &stats)) { + if (mStatsPullerManager.Pull(s, getElapsedRealtimeNs(), &stats)) { for (const auto& it : stats) { fprintf(out, "Pull from %d: %s\n", s, it->ToString().c_str()); } @@ -698,7 +698,7 @@ Status StatsService::informAlarmForSubscriberTriggeringFired() { "Only system uid can call informAlarmForSubscriberTriggeringFired"); } - uint64_t currentTimeSec = time(nullptr); + uint64_t currentTimeSec = getElapsedRealtimeSec(); std::unordered_set, SpHash> alarmSet = mPeriodicAlarmMonitor->popSoonerThan(static_cast(currentTimeSec)); if (alarmSet.size() > 0) { diff --git a/cmds/statsd/src/anomaly/AlarmTracker.cpp b/cmds/statsd/src/anomaly/AlarmTracker.cpp index eb283838afd76172b46a2a65bc572ee8718e3891..249cb596d3c6c8612c2605320ed457eff7a572df 100644 --- a/cmds/statsd/src/anomaly/AlarmTracker.cpp +++ b/cmds/statsd/src/anomaly/AlarmTracker.cpp @@ -39,12 +39,14 @@ AlarmTracker::AlarmTracker(uint64_t startMillis, VLOG("AlarmTracker() called"); mAlarmSec = (startMillis + mAlarmConfig.offset_millis()) / MS_PER_SEC; mInternalAlarm = new InternalAlarm{static_cast(mAlarmSec)}; - mAlarmMonitor->add(mInternalAlarm); + if (mAlarmMonitor != nullptr) { + mAlarmMonitor->add(mInternalAlarm); + } } AlarmTracker::~AlarmTracker() { VLOG("~AlarmTracker() called"); - if (mInternalAlarm != nullptr) { + if (mInternalAlarm != nullptr && mAlarmMonitor != nullptr) { mAlarmMonitor->remove(mInternalAlarm); } } @@ -61,7 +63,8 @@ uint64_t AlarmTracker::findNextAlarmSec(uint64_t currentTimeSec) { void AlarmTracker::informAlarmsFired( const uint64_t& timestampNs, unordered_set, SpHash>& firedAlarms) { - if (firedAlarms.empty() || firedAlarms.find(mInternalAlarm) == firedAlarms.end()) { + if (firedAlarms.empty() || mInternalAlarm == nullptr || + firedAlarms.find(mInternalAlarm) == firedAlarms.end()) { return; } if (!mSubscriptions.empty()) { @@ -69,9 +72,11 @@ void AlarmTracker::informAlarmsFired( mSubscriptions); } firedAlarms.erase(mInternalAlarm); - mAlarmSec = findNextAlarmSec(timestampNs / NS_PER_SEC); + mAlarmSec = findNextAlarmSec((timestampNs-1) / NS_PER_SEC + 1); // round up mInternalAlarm = new InternalAlarm{static_cast(mAlarmSec)}; - mAlarmMonitor->add(mInternalAlarm); + if (mAlarmMonitor != nullptr) { + mAlarmMonitor->add(mInternalAlarm); + } } } // namespace statsd diff --git a/cmds/statsd/src/anomaly/AlarmTracker.h b/cmds/statsd/src/anomaly/AlarmTracker.h index d59dacaa1b6983b0fe9dc74483316d1d9e469294..13180a53ccbf1e22b57050bccceb12d76daafd06 100644 --- a/cmds/statsd/src/anomaly/AlarmTracker.h +++ b/cmds/statsd/src/anomaly/AlarmTracker.h @@ -48,6 +48,11 @@ public: unordered_set, SpHash>& firedAlarms); protected: + // For test only. Returns the alarm timestamp in seconds. Otherwise returns 0. + inline uint32_t getAlarmTimestampSec() const { + return mInternalAlarm == nullptr ? 0 : mInternalAlarm->timestampSec; + } + uint64_t findNextAlarmSec(uint64_t currentTimeMillis); // statsd_config.proto Alarm message that defines this tracker. @@ -69,6 +74,7 @@ protected: sp mInternalAlarm; FRIEND_TEST(AlarmTrackerTest, TestTriggerTimestamp); + FRIEND_TEST(AlarmE2eTest, TestMultipleAlarms); }; } // namespace statsd diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto index 5e75359f111e17618b113de271261ce8148ef10b..7fe8e6208e1e80079b28589d1be4309e3444cf63 100644 --- a/cmds/statsd/src/atoms.proto +++ b/cmds/statsd/src/atoms.proto @@ -16,7 +16,6 @@ syntax = "proto2"; -// TODO: Not the right package and class name package android.os.statsd; option java_package = "com.android.os"; option java_outer_classname = "AtomsProto"; @@ -49,7 +48,7 @@ message Atom { oneof pushed { // For StatsLog reasons, 1 is illegal and will not work. Must start at 2. BleScanStateChanged ble_scan_state_changed = 2; - // TODO: 3 is blank, but need not be + // 3 is available for use BleScanResultReceived ble_scan_result_received = 4; SensorStateChanged sensor_state_changed = 5; GpsScanStateChanged gps_scan_state_changed = 6; @@ -60,12 +59,12 @@ message Atom { LongPartialWakelockStateChanged long_partial_wakelock_state_changed = 11; MobileRadioPowerStateChanged mobile_radio_power_state_changed = 12; WifiRadioPowerStateChanged wifi_radio_power_state_changed = 13; - // TODO: 14-19 are blank, but need not be + // 14 - 19 are available BatterySaverModeStateChanged battery_saver_mode_state_changed = 20; DeviceIdleModeStateChanged device_idle_mode_state_changed = 21; DeviceIdlingModeStateChanged device_idling_mode_state_changed = 22; AudioStateChanged audio_state_changed = 23; - MediaCodecActivityChanged media_codec_activity_changed = 24; + MediaCodecStateChanged media_codec_state_changed = 24; CameraStateChanged camera_state_changed = 25; FlashlightStateChanged flashlight_state_changed = 26; UidProcessStateChanged uid_process_state_changed = 27; @@ -74,8 +73,7 @@ message Atom { BatteryLevelChanged battery_level_changed = 30; ChargingStateChanged charging_state_changed = 31; PluggedStateChanged plugged_state_changed = 32; - // TODO: 33 is blank, but is available for use. - DeviceOnStatusChanged device_on_status_changed = 34; + // 33 - 34 are available WakeupAlarmOccurred wakeup_alarm_occurred = 35; KernelWakeupReported kernel_wakeup_reported = 36; WifiLockStateChanged wifi_lock_state_changed = 37; @@ -86,12 +84,12 @@ message Atom { ActivityForegroundStateChanged activity_foreground_state_changed = 42; IsolatedUidChanged isolated_uid_changed = 43; PacketWakeupOccurred packet_wakeup_occurred = 44; - DropboxErrorChanged dropbox_error_changed = 45; + // 45 is available AnomalyDetected anomaly_detected = 46; AppBreadcrumbReported app_breadcrumb_reported = 47; - AppStartChanged app_start_changed = 48; - AppStartCancelChanged app_start_cancel_changed = 49; - AppStartFullyDrawnChanged app_start_fully_drawn_changed = 50; + AppStartOccurred app_start_occurred = 48; + AppStartCanceled app_start_canceled = 49; + AppStartFullyDrawn app_start_fully_drawn = 50; LmkKillOccurred lmk_kill_occurred = 51; PictureInPictureStateChanged picture_in_picture_state_changed = 52; WifiMulticastLockStateChanged wifi_multicast_lock_state_changed = 53; @@ -106,7 +104,7 @@ message Atom { KeyguardStateChanged keyguard_state_changed = 62; KeyguardBouncerStateChanged keyguard_bouncer_state_changed = 63; KeyguardBouncerPasswordEntered keyguard_bouncer_password_entered = 64; - AppDied app_died=65; + AppDied app_died = 65; ResourceConfigurationChanged resource_configuration_changed = 66; BluetoothEnabledStateChanged bluetooth_enabled_state_changed = 67; BluetoothConnectionStateChanged bluetooth_connection_state_changed = 68; @@ -119,6 +117,12 @@ message Atom { MobileConnectionStateChanged mobile_connection_state_changed = 75; MobileRadioTechnologyChanged mobile_radio_technology_changed = 76; UsbDeviceAttached usb_device_attached = 77; + AppCrashOccurred app_crash_occurred = 78; + ANROccurred anr_occurred = 79; + WTFOccurred wtf_occurred = 80; + LowMemReported low_mem_reported = 81; + + } // Pulled events will start at field 10000. @@ -134,7 +138,7 @@ message Atom { CpuTimePerFreq cpu_time_per_freq = 10008; CpuTimePerUid cpu_time_per_uid = 10009; CpuTimePerUidFreq cpu_time_per_uid_freq = 10010; - WifiActivityEnergyInfo wifi_activity_energy_info = 10011; + WifiActivityInfo wifi_activity_info = 10011; ModemActivityInfo modem_activity_info = 10012; BluetoothActivityInfo bluetooth_activity_info = 10007; ProcessMemoryState process_memory_state = 10013; @@ -224,30 +228,27 @@ message UidProcessStateChanged { * frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java */ message ProcessLifeCycleStateChanged { - // TODO: should be a string tagged w/ uid annotation optional int32 uid = 1 [(is_uid) = true]; // The process name (usually same as the app name). - optional string name = 2; + optional string process_name = 2; // What lifecycle state the process changed to. // This enum is specific to atoms.proto. - enum Event { - PROCESS_FINISHED = 0; - PROCESS_STARTED = 1; - PROCESS_CRASHED = 2; - PROCESS_ANRED = 3; + enum State { + FINISHED = 0; + STARTED = 1; + CRASHED = 2; } - optional Event event = 3; + optional State state = 3; } /** * Logs when the ble scan state changes. * * Logged from: - * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java + * packages/apps/Bluetooth/src/com/android/bluetooth/gatt/AppScanStats.java */ -// TODO: Consider changing to tracking per-scanner-id (log from AppScanStats). message BleScanStateChanged { repeated AttributionNode attribution_node = 1; @@ -278,7 +279,7 @@ message BleScanResultReceived { repeated AttributionNode attribution_node = 1; // Number of ble scan results returned. - optional int32 num_of_results = 2; + optional int32 num_results = 2; } /** @@ -290,7 +291,6 @@ message BleScanResultReceived { message SensorStateChanged { repeated AttributionNode attribution_node = 1; - // TODO: Is there a way to get the actual name of the sensor? // The id (int) of the sensor. optional int32 sensor_id = 2; @@ -329,7 +329,7 @@ message SyncStateChanged { repeated AttributionNode attribution_node = 1; // Name of the sync (as named in the app). Can be chosen at run-time. - optional string name = 2; + optional string sync_name = 2; enum State { OFF = 0; @@ -348,7 +348,7 @@ message ScheduledJobStateChanged { repeated AttributionNode attribution_node = 1; // Name of the job (as named in the app) - optional string name = 2; + optional string job_name = 2; enum State { FINISHED = 0; @@ -387,7 +387,7 @@ message AudioStateChanged { * Logged from: * frameworks/base/services/core/java/com/android/server/am/BatteryStatsService.java */ -message MediaCodecActivityChanged { +message MediaCodecStateChanged { repeated AttributionNode attribution_node = 1; enum State { @@ -561,22 +561,6 @@ message PluggedStateChanged { optional android.os.BatteryPluggedStateEnum state = 1; } -// TODO: Define this more precisely. -// TODO: Log the ON state somewhere. It isn't currently logged anywhere. -/** - * Logs when the device turns off or on. - * - * Logged from: - * frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java - */ -message DeviceOnStatusChanged { - enum State { - OFF = 0; - ON = 1; - } - optional State state = 1; -} - /** * Logs when an app's wakeup alarm fires. * @@ -598,8 +582,7 @@ message WakeupAlarmOccurred { * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message MobileRadioPowerStateChanged { - // TODO: Add attribution instead of uid? - optional int32 uid = 1 [(is_uid) = true]; + repeated AttributionNode attribution_node = 1; // Power state, from frameworks/base/core/proto/android/telephony/enums.proto. optional android.telephony.DataConnectionPowerStateEnum state = 2; @@ -613,8 +596,7 @@ message MobileRadioPowerStateChanged { * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message WifiRadioPowerStateChanged { - // TODO: Add attribution instead of uid? - optional int32 uid = 1 [(is_uid) = true]; + repeated AttributionNode attribution_node = 1; // Power state, from frameworks/base/core/proto/android/telephony/enums.proto. optional android.telephony.DataConnectionPowerStateEnum state = 2; @@ -1154,7 +1136,6 @@ message ChargeCyclesReported { message DaveyOccurred { // The UID that logged this atom. optional int32 uid = 1 [(is_uid) = true]; - ; // Amount of time it took to render the frame. Should be >=700ms. optional int64 jank_duration_millis = 2; @@ -1221,42 +1202,70 @@ message ActivityForegroundStateChanged { optional string pkg_name = 2; optional string class_name = 3; - enum Activity { - MOVE_TO_BACKGROUND = 0; - MOVE_TO_FOREGROUND = 1; + enum State { + BACKGROUND = 0; + FOREGROUND = 1; } - optional Activity activity = 4; + optional State state = 4; } /** - * Logs when an error is written to dropbox. + * Logs when an app crashes. * Logged from: * frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java */ -message DropboxErrorChanged { - // The uid if available. -1 means not available. +message AppCrashOccurred { + optional int32 uid = 1 [(is_uid) = true]; + + optional string event_type = 2; + + // The name of the process. + // system_server if it is not by an app + optional string process_name = 3; + + // The pid if available. -1 means not available. + optional sint32 pid = 4; +} + +/** + * Logs when a WTF (What a Terrible Failure) happened. + * Logged from: + * frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java + */ +message WTFOccurred { optional int32 uid = 1 [(is_uid) = true]; - // Tag used when recording this error to dropbox. Contains data_ or system_ prefix. optional string tag = 2; // The name of the process. + // system_server if it is not by an app optional string process_name = 3; // The pid if available. -1 means not available. optional sint32 pid = 4; +} - // 1 indicates is instant app. -1 indicates Not applicable. - optional sint32 is_instant_app = 5; +/** + * Logs when system server reports low memory. + * Logged from: + * frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java + */ +message LowMemReported { +} + +/** + * Logs when an app ANR (App Not Responding) occurs. + * Logged from: + * frameworks/base/services/core/java/com/android/server/am/AppErrors.java + */ +message ANROccurred { + optional int32 uid = 1 [(is_uid) = true]; - // The activity name if available. - optional string activity_name = 6; + optional string process_name = 2; - // The package name if available. - optional string package_name = 7; + optional string short_component_name = 3; - // 1 indicates in foreground. -1 indicates not available. - optional sint32 is_foreground = 8; + optional string reason = 4; } /* @@ -1299,7 +1308,7 @@ message AnomalyDetected { optional int64 alert_id = 3; } -message AppStartChanged { +message AppStartOccurred { // The uid if available. -1 means not available. optional int32 uid = 1 [(is_uid) = true]; @@ -1307,7 +1316,7 @@ message AppStartChanged { optional string pkg_name = 2; enum TransitionType { - APP_START_TRANSITION_TYPE_UNKNOWN = 0; + UNKNOWN = 0; WARM = 1; HOT = 2; COLD = 3; @@ -1346,7 +1355,7 @@ message AppStartChanged { optional int32 package_optimization_compilation_reason = 15; } -message AppStartCancelChanged { +message AppStartCanceled { // The uid if available. -1 means not available. optional int32 uid = 1 [(is_uid) = true]; @@ -1354,7 +1363,7 @@ message AppStartCancelChanged { optional string pkg_name = 2; enum TransitionType { - APP_START_TRANSITION_TYPE_UNKNOWN = 0; + UNKNOWN = 0; WARM = 1; HOT = 2; COLD = 3; @@ -1366,7 +1375,7 @@ message AppStartCancelChanged { optional string activity_name = 4; } -message AppStartFullyDrawnChanged { +message AppStartFullyDrawn { // The uid if available. -1 means not available. optional int32 uid = 1 [(is_uid) = true]; @@ -1374,7 +1383,7 @@ message AppStartFullyDrawnChanged { optional string pkg_name = 2; enum TransitionType { - APP_START_TRANSITION_TYPE_UNKNOWN = 0; + UNKNOWN = 0; WITH_BUNDLE = 1; WITHOUT_BUNDLE = 2; } @@ -1459,8 +1468,8 @@ message ForegroundServiceStateChanged { * frameworks/base/core/java/com/android/internal/os/BatteryStatsImpl.java */ message IsolatedUidChanged { - // NOTE: DO NOT annotate uid field in this atom. This atom is specially handled in statsd. // The host UID. Generally, we should attribute metrics from the isolated uid to the host uid. + // NOTE: DO NOT annotate uid field in this atom. This atom is specially handled in statsd. optional int32 parent_uid = 1; optional int32 isolated_uid = 2; @@ -1621,9 +1630,8 @@ message WifiBytesTransfer { message WifiBytesTransferByFgBg { optional int32 uid = 1 [(is_uid) = true]; - // 1 denotes foreground and 0 denotes background. This is called Set in - // NetworkStats. - optional int32 is_foreground = 2; + // 1 denotes foreground and 0 denotes background. This is called Set in NetworkStats. + optional bool is_foreground = 2; optional int64 rx_bytes = 3; @@ -1663,7 +1671,7 @@ message MobileBytesTransferByFgBg { // 1 denotes foreground and 0 denotes background. This is called Set in // NetworkStats. - optional int32 is_foreground = 2; + optional bool is_foreground = 2; optional int64 rx_bytes = 3; @@ -1760,7 +1768,7 @@ message CpuTimePerUidFreq { /** * Pulls Wifi Controller Activity Energy Info */ -message WifiActivityEnergyInfo { +message WifiActivityInfo { // timestamp(wall clock) of record creation optional uint64 timestamp_millis = 1; // stack reported state diff --git a/cmds/statsd/src/external/StatsPuller.cpp b/cmds/statsd/src/external/StatsPuller.cpp index 3b0cd349168dc6e14bb29a6972707c51e1e99102..b29e979b5236682e47b8e16c99d9944c84261031 100644 --- a/cmds/statsd/src/external/StatsPuller.cpp +++ b/cmds/statsd/src/external/StatsPuller.cpp @@ -35,27 +35,32 @@ void StatsPuller::SetUidMap(const sp& uidMap) { mUidMap = uidMap; } // ValueMetric has a minimum bucket size of 10min so that we don't pull too frequently StatsPuller::StatsPuller(const int tagId) : mTagId(tagId) { - mCoolDownSec = StatsPullerManagerImpl::kAllPullAtomInfo.find(tagId)->second.coolDownSec; - VLOG("Puller for tag %d created. Cooldown set to %ld", mTagId, mCoolDownSec); + mCoolDownNs = StatsPullerManagerImpl::kAllPullAtomInfo.find(tagId)->second.coolDownNs; + VLOG("Puller for tag %d created. Cooldown set to %lld", mTagId, (long long)mCoolDownNs); } -bool StatsPuller::Pull(std::vector>* data) { +bool StatsPuller::Pull(const int64_t elapsedTimeNs, std::vector>* data) { lock_guard lock(mLock); + int64_t wallClockTimeNs = getWallClockNs(); StatsdStats::getInstance().notePull(mTagId); - long curTime = getElapsedRealtimeSec(); - if (curTime - mLastPullTimeSec < mCoolDownSec) { + if (elapsedTimeNs - mLastPullTimeNs < mCoolDownNs) { (*data) = mCachedData; StatsdStats::getInstance().notePullFromCache(mTagId); return true; } - if (mMinPullIntervalSec > curTime - mLastPullTimeSec) { - mMinPullIntervalSec = curTime - mLastPullTimeSec; - StatsdStats::getInstance().updateMinPullIntervalSec(mTagId, mMinPullIntervalSec); + if (mMinPullIntervalNs > elapsedTimeNs - mLastPullTimeNs) { + mMinPullIntervalNs = elapsedTimeNs - mLastPullTimeNs; + StatsdStats::getInstance().updateMinPullIntervalSec(mTagId, + mMinPullIntervalNs / NS_PER_SEC); } mCachedData.clear(); - mLastPullTimeSec = curTime; + mLastPullTimeNs = elapsedTimeNs; bool ret = PullInternal(&mCachedData); - if (ret) { + for (const shared_ptr& data : mCachedData) { + data->setElapsedTimestampNs(elapsedTimeNs); + data->setLogdWallClockTimestampNs(wallClockTimeNs); + } + if (ret && mCachedData.size() > 0) { mergeIsolatedUidsToHostUid(mCachedData, mUidMap, mTagId); (*data) = mCachedData; } @@ -70,12 +75,12 @@ int StatsPuller::clearCache() { lock_guard lock(mLock); int ret = mCachedData.size(); mCachedData.clear(); - mLastPullTimeSec = 0; + mLastPullTimeNs = 0; return ret; } -int StatsPuller::ClearCacheIfNecessary(long timestampSec) { - if (timestampSec - mLastPullTimeSec > mCoolDownSec) { +int StatsPuller::ClearCacheIfNecessary(int64_t timestampNs) { + if (timestampNs - mLastPullTimeNs > mCoolDownNs) { return clearCache(); } else { return 0; diff --git a/cmds/statsd/src/external/StatsPuller.h b/cmds/statsd/src/external/StatsPuller.h index 936c47e92f2ca08636ade12d664274d1d9ca85a0..caac677ee215c4f26fa9cdf95c3ea6e5228ab334 100644 --- a/cmds/statsd/src/external/StatsPuller.h +++ b/cmds/statsd/src/external/StatsPuller.h @@ -37,13 +37,13 @@ public: virtual ~StatsPuller() {} - bool Pull(std::vector>* data); + bool Pull(const int64_t timeNs, std::vector>* data); // Clear cache immediately int ForceClearCache(); // Clear cache if elapsed time is more than cooldown time - int ClearCacheIfNecessary(long timestampSec); + int ClearCacheIfNecessary(int64_t timestampNs); static void SetUidMap(const sp& uidMap); @@ -59,9 +59,9 @@ private: // If a pull request comes before cooldown, a cached version from purevious pull // will be returned. // The actual value should be determined by individual pullers. - long mCoolDownSec; + int64_t mCoolDownNs; // For puller stats - long mMinPullIntervalSec = LONG_MAX; + int64_t mMinPullIntervalNs = LONG_MAX; virtual bool PullInternal(std::vector>* data) = 0; @@ -69,7 +69,7 @@ private: // cached data will be returned. std::vector> mCachedData; - long mLastPullTimeSec; + int64_t mLastPullTimeNs; int clearCache(); diff --git a/cmds/statsd/src/external/StatsPullerManager.h b/cmds/statsd/src/external/StatsPullerManager.h index 2717d5c2de9c16ddcf152af6cf5a2b779629346f..83d59c0a5830c9e9de16f301cecda5df9b2f74cd 100644 --- a/cmds/statsd/src/external/StatsPullerManager.h +++ b/cmds/statsd/src/external/StatsPullerManager.h @@ -26,10 +26,9 @@ class StatsPullerManager { public: virtual ~StatsPullerManager() {} - virtual void RegisterReceiver(int tagId, - wp receiver, - long intervalMs) { - mPullerManager.RegisterReceiver(tagId, receiver, intervalMs); + virtual void RegisterReceiver(int tagId, wp receiver, int64_t nextPullTimeNs, + int64_t intervalNs) { + mPullerManager.RegisterReceiver(tagId, receiver, nextPullTimeNs, intervalNs); }; virtual void UnRegisterReceiver(int tagId, wp receiver) { @@ -45,13 +44,9 @@ class StatsPullerManager { mPullerManager.OnAlarmFired(); } - virtual bool - Pull(const int tagId, vector>* data) { - return mPullerManager.Pull(tagId, data); - } - - void SetTimeBaseSec(const long timeBaseSec) { - mPullerManager.SetTimeBaseSec(timeBaseSec); + virtual bool Pull(const int tagId, const int64_t timesNs, + vector>* data) { + return mPullerManager.Pull(tagId, timesNs, data); } int ForceClearPullerCache() { @@ -62,8 +57,8 @@ class StatsPullerManager { mPullerManager.SetStatsCompanionService(statsCompanionService); } - int ClearPullerCacheIfNecessary(long timestampSec) { - return mPullerManager.ClearPullerCacheIfNecessary(timestampSec); + int ClearPullerCacheIfNecessary(int64_t timestampNs) { + return mPullerManager.ClearPullerCacheIfNecessary(timestampNs); } private: diff --git a/cmds/statsd/src/external/StatsPullerManagerImpl.cpp b/cmds/statsd/src/external/StatsPullerManagerImpl.cpp index dd6406bb90ca103192437340dd217c50cade7402..2f0e88595d45efe6350d00fa199de4f1ce6c3b31 100644 --- a/cmds/statsd/src/external/StatsPullerManagerImpl.cpp +++ b/cmds/statsd/src/external/StatsPullerManagerImpl.cpp @@ -19,15 +19,17 @@ #include #include +#include #include #include +#include "../StatsService.h" #include "../logd/LogEvent.h" #include "../stats_log_util.h" #include "../statscompanion_util.h" #include "ResourceHealthManagerPuller.h" #include "ResourceThermalManagerPuller.h" #include "StatsCompanionServicePuller.h" -#include "StatsService.h" +#include "StatsPullerManagerImpl.h" #include "SubsystemSleepStatePuller.h" #include "statslog.h" @@ -47,89 +49,136 @@ namespace statsd { const std::map StatsPullerManagerImpl::kAllPullAtomInfo = { // wifi_bytes_transfer {android::util::WIFI_BYTES_TRANSFER, - {{2, 3, 4, 5}, {}, 1, + {{2, 3, 4, 5}, + {}, + 1 * NS_PER_SEC, new StatsCompanionServicePuller(android::util::WIFI_BYTES_TRANSFER)}}, // wifi_bytes_transfer_by_fg_bg {android::util::WIFI_BYTES_TRANSFER_BY_FG_BG, - {{3, 4, 5, 6}, {2}, 1, + {{3, 4, 5, 6}, + {2}, + 1 * NS_PER_SEC, new StatsCompanionServicePuller(android::util::WIFI_BYTES_TRANSFER_BY_FG_BG)}}, // mobile_bytes_transfer {android::util::MOBILE_BYTES_TRANSFER, - {{2, 3, 4, 5}, {}, 1, + {{2, 3, 4, 5}, + {}, + 1 * NS_PER_SEC, new StatsCompanionServicePuller(android::util::MOBILE_BYTES_TRANSFER)}}, // mobile_bytes_transfer_by_fg_bg {android::util::MOBILE_BYTES_TRANSFER_BY_FG_BG, - {{3, 4, 5, 6}, {2}, 1, + {{3, 4, 5, 6}, + {2}, + 1 * NS_PER_SEC, new StatsCompanionServicePuller(android::util::MOBILE_BYTES_TRANSFER_BY_FG_BG)}}, // bluetooth_bytes_transfer {android::util::BLUETOOTH_BYTES_TRANSFER, - {{2, 3}, {}, 1, new StatsCompanionServicePuller(android::util::BLUETOOTH_BYTES_TRANSFER)}}, + {{2, 3}, + {}, + 1 * NS_PER_SEC, + new StatsCompanionServicePuller(android::util::BLUETOOTH_BYTES_TRANSFER)}}, // kernel_wakelock {android::util::KERNEL_WAKELOCK, - {{}, {}, 1, new StatsCompanionServicePuller(android::util::KERNEL_WAKELOCK)}}, + {{}, {}, 1 * NS_PER_SEC, new StatsCompanionServicePuller(android::util::KERNEL_WAKELOCK)}}, // subsystem_sleep_state {android::util::SUBSYSTEM_SLEEP_STATE, - {{}, {}, 1, new SubsystemSleepStatePuller()}}, + {{}, {}, 1 * NS_PER_SEC, new SubsystemSleepStatePuller()}}, // cpu_time_per_freq {android::util::CPU_TIME_PER_FREQ, - {{3}, {2}, 1, new StatsCompanionServicePuller(android::util::CPU_TIME_PER_FREQ)}}, + {{3}, + {2}, + 1 * NS_PER_SEC, + new StatsCompanionServicePuller(android::util::CPU_TIME_PER_FREQ)}}, // cpu_time_per_uid {android::util::CPU_TIME_PER_UID, - {{2, 3}, {}, 1, new StatsCompanionServicePuller(android::util::CPU_TIME_PER_UID)}}, + {{2, 3}, + {}, + 1 * NS_PER_SEC, + new StatsCompanionServicePuller(android::util::CPU_TIME_PER_UID)}}, // cpu_time_per_uid_freq - // the throttling is 3sec, handled in frameworks/base/core/java/com/android/internal/os/KernelCpuProcReader + // the throttling is 3sec, handled in + // frameworks/base/core/java/com/android/internal/os/KernelCpuProcReader {android::util::CPU_TIME_PER_UID_FREQ, - {{4}, {2,3}, 0, new StatsCompanionServicePuller(android::util::CPU_TIME_PER_UID_FREQ)}}, + {{4}, + {2, 3}, + 1 * NS_PER_SEC, + new StatsCompanionServicePuller(android::util::CPU_TIME_PER_UID_FREQ)}}, // cpu_active_time - // the throttling is 3sec, handled in frameworks/base/core/java/com/android/internal/os/KernelCpuProcReader + // the throttling is 3sec, handled in + // frameworks/base/core/java/com/android/internal/os/KernelCpuProcReader {android::util::CPU_ACTIVE_TIME, - {{2}, {}, 0, new StatsCompanionServicePuller(android::util::CPU_ACTIVE_TIME)}}, + {{2}, + {}, + 1 * NS_PER_SEC, + new StatsCompanionServicePuller(android::util::CPU_ACTIVE_TIME)}}, // cpu_cluster_time - // the throttling is 3sec, handled in frameworks/base/core/java/com/android/internal/os/KernelCpuProcReader + // the throttling is 3sec, handled in + // frameworks/base/core/java/com/android/internal/os/KernelCpuProcReader {android::util::CPU_CLUSTER_TIME, - {{3}, {2}, 0, new StatsCompanionServicePuller(android::util::CPU_CLUSTER_TIME)}}, + {{3}, + {2}, + 1 * NS_PER_SEC, + new StatsCompanionServicePuller(android::util::CPU_CLUSTER_TIME)}}, // wifi_activity_energy_info - {android::util::WIFI_ACTIVITY_ENERGY_INFO, - {{}, {}, 1, new StatsCompanionServicePuller(android::util::WIFI_ACTIVITY_ENERGY_INFO)}}, + {android::util::WIFI_ACTIVITY_INFO, + {{}, + {}, + 1 * NS_PER_SEC, + new StatsCompanionServicePuller(android::util::WIFI_ACTIVITY_INFO)}}, // modem_activity_info {android::util::MODEM_ACTIVITY_INFO, - {{}, {}, 1, new StatsCompanionServicePuller(android::util::MODEM_ACTIVITY_INFO)}}, + {{}, + {}, + 1 * NS_PER_SEC, + new StatsCompanionServicePuller(android::util::MODEM_ACTIVITY_INFO)}}, // bluetooth_activity_info {android::util::BLUETOOTH_ACTIVITY_INFO, - {{}, {}, 1, new StatsCompanionServicePuller(android::util::BLUETOOTH_ACTIVITY_INFO)}}, + {{}, + {}, + 1 * NS_PER_SEC, + new StatsCompanionServicePuller(android::util::BLUETOOTH_ACTIVITY_INFO)}}, // system_elapsed_realtime {android::util::SYSTEM_ELAPSED_REALTIME, - {{}, {}, 1, new StatsCompanionServicePuller(android::util::SYSTEM_ELAPSED_REALTIME)}}, + {{}, + {}, + 1 * NS_PER_SEC, + new StatsCompanionServicePuller(android::util::SYSTEM_ELAPSED_REALTIME)}}, // system_uptime {android::util::SYSTEM_UPTIME, - {{}, {}, 1, new StatsCompanionServicePuller(android::util::SYSTEM_UPTIME)}}, + {{}, {}, 1 * NS_PER_SEC, new StatsCompanionServicePuller(android::util::SYSTEM_UPTIME)}}, // disk_space {android::util::DISK_SPACE, - {{}, {}, 1, new StatsCompanionServicePuller(android::util::DISK_SPACE)}}, + {{}, {}, 1 * NS_PER_SEC, new StatsCompanionServicePuller(android::util::DISK_SPACE)}}, // remaining_battery_capacity {android::util::REMAINING_BATTERY_CAPACITY, - {{}, {}, 1, new ResourceHealthManagerPuller(android::util::REMAINING_BATTERY_CAPACITY)}}, + {{}, + {}, + 1 * NS_PER_SEC, + new ResourceHealthManagerPuller(android::util::REMAINING_BATTERY_CAPACITY)}}, // full_battery_capacity {android::util::FULL_BATTERY_CAPACITY, - {{}, {}, 1, new ResourceHealthManagerPuller(android::util::FULL_BATTERY_CAPACITY)}}, + {{}, + {}, + 1 * NS_PER_SEC, + new ResourceHealthManagerPuller(android::util::FULL_BATTERY_CAPACITY)}}, // process_memory_state {android::util::PROCESS_MEMORY_STATE, - {{4,5,6,7,8}, - {2,3}, - 0, + {{4, 5, 6, 7, 8}, + {2, 3}, + 1 * NS_PER_SEC, new StatsCompanionServicePuller(android::util::PROCESS_MEMORY_STATE)}}, // temperature {android::util::TEMPERATURE, {{}, {}, 1, new ResourceThermalManagerPuller()}}}; -StatsPullerManagerImpl::StatsPullerManagerImpl() - : mCurrentPullingInterval(LONG_MAX) { +StatsPullerManagerImpl::StatsPullerManagerImpl() : mNextPullTimeNs(LONG_MAX) { } -bool StatsPullerManagerImpl::Pull(int tagId, vector>* data) { +bool StatsPullerManagerImpl::Pull(const int tagId, const int64_t timeNs, + vector>* data) { VLOG("Initiating pulling %d", tagId); if (kAllPullAtomInfo.find(tagId) != kAllPullAtomInfo.end()) { - bool ret = kAllPullAtomInfo.find(tagId)->second.puller->Pull(data); + bool ret = kAllPullAtomInfo.find(tagId)->second.puller->Pull(timeNs, data); VLOG("pulled %d items", (int)data->size()); return ret; } else { @@ -148,12 +197,14 @@ bool StatsPullerManagerImpl::PullerForMatcherExists(int tagId) const { } void StatsPullerManagerImpl::updateAlarmLocked() { - long currentTimeMs = getElapsedRealtimeMillis(); - long nextAlarmTimeMs = currentTimeMs + mCurrentPullingInterval - - (currentTimeMs - mTimeBaseSec * 1000) % mCurrentPullingInterval; + if (mNextPullTimeNs == LONG_MAX) { + VLOG("No need to set alarms. Skipping"); + return; + } + sp statsCompanionServiceCopy = mStatsCompanionService; if (statsCompanionServiceCopy != nullptr) { - statsCompanionServiceCopy->setPullingAlarms(nextAlarmTimeMs, mCurrentPullingInterval); + statsCompanionServiceCopy->setPullingAlarm(mNextPullTimeNs / 1000000); } else { VLOG("StatsCompanionService not available. Alarm not set."); } @@ -174,7 +225,7 @@ void StatsPullerManagerImpl::SetStatsCompanionService( } void StatsPullerManagerImpl::RegisterReceiver(int tagId, wp receiver, - long intervalMs) { + int64_t nextPullTimeNs, int64_t intervalNs) { AutoMutex _l(mLock); auto& receivers = mReceivers[tagId]; for (auto it = receivers.begin(); it != receivers.end(); it++) { @@ -185,21 +236,24 @@ void StatsPullerManagerImpl::RegisterReceiver(int tagId, wp re } ReceiverInfo receiverInfo; receiverInfo.receiver = receiver; - receiverInfo.timeInfo.first = intervalMs; - receivers.push_back(receiverInfo); // Round it to the nearest minutes. This is the limit of alarm manager. - // In practice, we should limit it higher. - long roundedIntervalMs = intervalMs/1000/60 * 1000 * 60; + // In practice, we should always have larger buckets. + int64_t roundedIntervalNs = intervalNs / NS_PER_SEC / 60 * NS_PER_SEC * 60; // Scheduled pulling should be at least 1 min apart. // This can be lower in cts tests, in which case we round it to 1 min. - if (roundedIntervalMs < 60 * 1000) { - roundedIntervalMs = 60 * 1000; + if (roundedIntervalNs < 60 * (int64_t)NS_PER_SEC) { + roundedIntervalNs = 60 * (int64_t)NS_PER_SEC; } + + receiverInfo.intervalNs = roundedIntervalNs; + receiverInfo.nextPullTimeNs = nextPullTimeNs; + receivers.push_back(receiverInfo); + // There is only one alarm for all pulled events. So only set it to the smallest denom. - if (roundedIntervalMs < mCurrentPullingInterval) { - VLOG("Updating pulling interval %ld", intervalMs); - mCurrentPullingInterval = roundedIntervalMs; + if (nextPullTimeNs < mNextPullTimeNs) { + VLOG("Updating next pull time %lld", (long long)mNextPullTimeNs); + mNextPullTimeNs = nextPullTimeNs; updateAlarmLocked(); } VLOG("Puller for tagId %d registered of %d", tagId, (int)receivers.size()); @@ -224,16 +278,22 @@ void StatsPullerManagerImpl::UnRegisterReceiver(int tagId, wp void StatsPullerManagerImpl::OnAlarmFired() { AutoMutex _l(mLock); - uint64_t currentTimeMs = getElapsedRealtimeMillis(); + int64_t currentTimeNs = getElapsedRealtimeNs(); + + int64_t minNextPullTimeNs = LONG_MAX; vector>> needToPull = vector>>(); for (auto& pair : mReceivers) { vector receivers = vector(); if (pair.second.size() != 0) { - for (auto& receiverInfo : pair.second) { - if (receiverInfo.timeInfo.first + receiverInfo.timeInfo.second > currentTimeMs) { + for (ReceiverInfo& receiverInfo : pair.second) { + if (receiverInfo.nextPullTimeNs < currentTimeNs) { receivers.push_back(&receiverInfo); + } else { + if (receiverInfo.nextPullTimeNs < minNextPullTimeNs) { + minNextPullTimeNs = receiverInfo.nextPullTimeNs; + } } } if (receivers.size() > 0) { @@ -244,18 +304,29 @@ void StatsPullerManagerImpl::OnAlarmFired() { for (const auto& pullInfo : needToPull) { vector> data; - if (Pull(pullInfo.first, &data)) { + if (Pull(pullInfo.first, currentTimeNs, &data)) { for (const auto& receiverInfo : pullInfo.second) { sp receiverPtr = receiverInfo->receiver.promote(); if (receiverPtr != nullptr) { receiverPtr->onDataPulled(data); - receiverInfo->timeInfo.second = currentTimeMs; + // we may have just come out of a coma, compute next pull time + receiverInfo->nextPullTimeNs = + ceil((double_t)(currentTimeNs - receiverInfo->nextPullTimeNs) / + receiverInfo->intervalNs) * + receiverInfo->intervalNs + + receiverInfo->nextPullTimeNs; + if (receiverInfo->nextPullTimeNs < minNextPullTimeNs) { + minNextPullTimeNs = receiverInfo->nextPullTimeNs; + } } else { VLOG("receiver already gone."); } } } } + + mNextPullTimeNs = minNextPullTimeNs; + updateAlarmLocked(); } int StatsPullerManagerImpl::ForceClearPullerCache() { @@ -266,10 +337,10 @@ int StatsPullerManagerImpl::ForceClearPullerCache() { return totalCleared; } -int StatsPullerManagerImpl::ClearPullerCacheIfNecessary(long timestampSec) { +int StatsPullerManagerImpl::ClearPullerCacheIfNecessary(int64_t timestampNs) { int totalCleared = 0; for (const auto& pulledAtom : kAllPullAtomInfo) { - totalCleared += pulledAtom.second.puller->ClearCacheIfNecessary(timestampSec); + totalCleared += pulledAtom.second.puller->ClearCacheIfNecessary(timestampNs); } return totalCleared; } diff --git a/cmds/statsd/src/external/StatsPullerManagerImpl.h b/cmds/statsd/src/external/StatsPullerManagerImpl.h index 682ad33a8749a13322a825765dc22219ec97ed38..8c771f31fdc5bfa7a85f7729da9be3936ba22f94 100644 --- a/cmds/statsd/src/external/StatsPullerManagerImpl.h +++ b/cmds/statsd/src/external/StatsPullerManagerImpl.h @@ -41,7 +41,7 @@ typedef struct { std::vector nonAdditiveFields; // How long should the puller wait before doing an actual pull again. Default // 1 sec. Set this to 0 if this is handled elsewhere. - long coolDownSec = 1; + int64_t coolDownNs = 1 * NS_PER_SEC; // The actual puller sp puller; } PullAtomInfo; @@ -50,7 +50,8 @@ class StatsPullerManagerImpl : public virtual RefBase { public: static StatsPullerManagerImpl& GetInstance(); - void RegisterReceiver(int tagId, wp receiver, long intervalMs); + void RegisterReceiver(int tagId, wp receiver, int64_t nextPullTimeNs, + int64_t intervalNs); void UnRegisterReceiver(int tagId, wp receiver); @@ -59,13 +60,11 @@ public: void OnAlarmFired(); - bool Pull(const int tagId, vector>* data); - - void SetTimeBaseSec(long timeBaseSec) {mTimeBaseSec = timeBaseSec;}; + bool Pull(const int tagId, const int64_t timeNs, vector>* data); int ForceClearPullerCache(); - int ClearPullerCacheIfNecessary(long timestampSec); + int ClearPullerCacheIfNecessary(int64_t timestampNs); void SetStatsCompanionService(sp statsCompanionService); @@ -77,8 +76,8 @@ public: sp mStatsCompanionService = nullptr; typedef struct { - // pull_interval_sec : last_pull_time_sec - std::pair timeInfo; + int64_t nextPullTimeNs; + int64_t intervalNs; wp receiver; } ReceiverInfo; @@ -90,12 +89,7 @@ public: void updateAlarmLocked(); - long mCurrentPullingInterval; - - // for pulled metrics, it is important for the buckets to be aligned to multiple of smallest - // bucket size. All pulled metrics start pulling based on this time, so that they can be - // correctly attributed to the correct buckets. - long mTimeBaseSec; + int64_t mNextPullTimeNs; }; } // namespace statsd diff --git a/cmds/statsd/src/guardrail/StatsdStats.cpp b/cmds/statsd/src/guardrail/StatsdStats.cpp index ef637df68ed304874783897d5a5b789ccfedcb3b..22ff9428c83a1a49e1b1e1373d35efc5dbbba8b8 100644 --- a/cmds/statsd/src/guardrail/StatsdStats.cpp +++ b/cmds/statsd/src/guardrail/StatsdStats.cpp @@ -76,6 +76,7 @@ const int FIELD_ID_CONFIG_STATS_MATCHER_STATS = 13; const int FIELD_ID_CONFIG_STATS_CONDITION_STATS = 14; const int FIELD_ID_CONFIG_STATS_METRIC_STATS = 15; const int FIELD_ID_CONFIG_STATS_ALERT_STATS = 16; +const int FIELD_ID_CONFIG_STATS_METRIC_DIMENSION_IN_CONDITION_STATS = 17; const int FIELD_ID_MATCHER_STATS_ID = 1; const int FIELD_ID_MATCHER_STATS_COUNT = 2; @@ -255,6 +256,20 @@ void StatsdStats::noteMetricDimensionSize(const ConfigKey& key, const int64_t& i } } +void StatsdStats::noteMetricDimensionInConditionSize( + const ConfigKey& key, const int64_t& id, int size) { + lock_guard lock(mLock); + // if name doesn't exist before, it will create the key with count 0. + auto statsIt = mConfigStats.find(key); + if (statsIt == mConfigStats.end()) { + return; + } + auto& metricsDimensionMap = statsIt->second->metric_dimension_in_condition_stats; + if (size > metricsDimensionMap[id]) { + metricsDimensionMap[id] = size; + } +} + void StatsdStats::noteMatcherMatched(const ConfigKey& key, const int64_t& id) { lock_guard lock(mLock); @@ -339,6 +354,7 @@ void StatsdStats::resetInternalLocked() { config.second->matcher_stats.clear(); config.second->condition_stats.clear(); config.second->metric_stats.clear(); + config.second->metric_dimension_in_condition_stats.clear(); config.second->alert_stats.clear(); } } @@ -504,6 +520,13 @@ void addConfigStatsToProto(const ConfigStats& configStats, ProtoOutputStream* pr proto->write(FIELD_TYPE_INT32 | FIELD_ID_METRIC_STATS_COUNT, pair.second); proto->end(tmpToken); } + for (const auto& pair : configStats.metric_dimension_in_condition_stats) { + uint64_t tmpToken = proto->start(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED | + FIELD_ID_CONFIG_STATS_METRIC_DIMENSION_IN_CONDITION_STATS); + proto->write(FIELD_TYPE_INT64 | FIELD_ID_METRIC_STATS_ID, (long long)pair.first); + proto->write(FIELD_TYPE_INT32 | FIELD_ID_METRIC_STATS_COUNT, pair.second); + proto->end(tmpToken); + } for (const auto& pair : configStats.alert_stats) { uint64_t tmpToken = proto->start(FIELD_TYPE_MESSAGE | FIELD_COUNT_REPEATED | diff --git a/cmds/statsd/src/guardrail/StatsdStats.h b/cmds/statsd/src/guardrail/StatsdStats.h index 7f8755b8c1e064f95a4c1fd07a4bf8dea1d58cd5..bd395c4c232b7dfbafa833996e9903ac63ceef4b 100644 --- a/cmds/statsd/src/guardrail/StatsdStats.h +++ b/cmds/statsd/src/guardrail/StatsdStats.h @@ -57,6 +57,12 @@ struct ConfigStats { // it means some data has been dropped. The map size is capped by kMaxConfigCount. std::map metric_stats; + // Stores the max number of output tuple of dimensions in condition across dimensions in what + // when it's bigger than kDimensionKeySizeSoftLimit. When you see the number is + // kDimensionKeySizeHardLimit +1, it means some data has been dropped. The map size is capped by + // kMaxConfigCount. + std::map metric_dimension_in_condition_stats; + // Stores the number of times an anomaly detection alert has been declared. // The map size is capped by kMaxConfigCount. std::map alert_stats; @@ -183,6 +189,19 @@ public: */ void noteMetricDimensionSize(const ConfigKey& key, const int64_t& id, int size); + + /** + * Report the max size of output tuple of dimension in condition across dimensions in what. + * + * Note: only report when the metric has an output dimension in condition, and the max tuple + * count > kDimensionKeySizeSoftLimit. + * + * [key]: The config key that this metric belongs to. + * [id]: The id of the metric. + * [size]: The output tuple size. + */ + void noteMetricDimensionInConditionSize(const ConfigKey& key, const int64_t& id, int size); + /** * Report a matcher has been matched. * diff --git a/cmds/statsd/src/metrics/DurationMetricProducer.cpp b/cmds/statsd/src/metrics/DurationMetricProducer.cpp index c28bb8800e20af11ea616ed47778a4f9c57570d7..f02f30756b2d16506d8d2d20ecd42ac361e84946 100644 --- a/cmds/statsd/src/metrics/DurationMetricProducer.cpp +++ b/cmds/statsd/src/metrics/DurationMetricProducer.cpp @@ -308,11 +308,14 @@ void DurationMetricProducer::onSlicedConditionMayChangeLocked_opt2(bool conditio if (mMetric2ConditionLinks.size() == 0 || trueDim.contains(linkedConditionDimensionKey)) { if (!whatIt.second.empty()) { + auto newEventKey = MetricDimensionKey(whatIt.first, trueDim); + if (hitGuardRailLocked(newEventKey)) { + continue; + } unique_ptr newTracker = whatIt.second.begin()->second->clone(eventTime); if (newTracker != nullptr) { - newTracker->setEventKey( - MetricDimensionKey(whatIt.first, trueDim)); + newTracker->setEventKey(newEventKey); newTracker->onConditionChanged(true, eventTime); whatIt.second[trueDim] = std::move(newTracker); } @@ -370,11 +373,14 @@ void DurationMetricProducer::onSlicedConditionMayChangeLocked(bool overallCondit for (const auto& conditionDimension : conditionDimensionsKeySet) { for (auto& whatIt : mCurrentSlicedDurationTrackerMap) { if (!whatIt.second.empty()) { + auto newEventKey = MetricDimensionKey(whatIt.first, conditionDimension); + if (hitGuardRailLocked(newEventKey)) { + continue; + } unique_ptr newTracker = whatIt.second.begin()->second->clone(eventTime); if (newTracker != nullptr) { - newTracker->setEventKey(MetricDimensionKey( - whatIt.first, conditionDimension)); + newTracker->setEventKey(MetricDimensionKey(newEventKey)); newTracker->onSlicedConditionMayChange(overallCondition, eventTime); whatIt.second[conditionDimension] = std::move(newTracker); } @@ -397,10 +403,13 @@ void DurationMetricProducer::onSlicedConditionMayChangeLocked(bool overallCondit for (const auto& conditionDimension : conditionDimensionsKeys) { if (!whatIt.second.empty() && whatIt.second.find(conditionDimension) == whatIt.second.end()) { + auto newEventKey = MetricDimensionKey(whatIt.first, conditionDimension); + if (hitGuardRailLocked(newEventKey)) { + continue; + } auto newTracker = whatIt.second.begin()->second->clone(eventTime); if (newTracker != nullptr) { - newTracker->setEventKey( - MetricDimensionKey(whatIt.first, conditionDimension)); + newTracker->setEventKey(newEventKey); newTracker->onSlicedConditionMayChange(overallCondition, eventTime); whatIt.second[conditionDimension] = std::move(newTracker); } @@ -552,15 +561,35 @@ void DurationMetricProducer::dumpStatesLocked(FILE* out, bool verbose) const { } bool DurationMetricProducer::hitGuardRailLocked(const MetricDimensionKey& newKey) { - // 1. Report the tuple count if the tuple count > soft limit - if (mCurrentSlicedDurationTrackerMap.size() > StatsdStats::kDimensionKeySizeSoftLimit - 1) { - size_t newTupleCount = mCurrentSlicedDurationTrackerMap.size() + 1; - StatsdStats::getInstance().noteMetricDimensionSize(mConfigKey, mMetricId, newTupleCount); - // 2. Don't add more tuples, we are above the allowed threshold. Drop the data. - if (newTupleCount > StatsdStats::kDimensionKeySizeHardLimit) { - ALOGE("DurationMetric %lld dropping data for dimension key %s", - (long long)mMetricId, newKey.toString().c_str()); - return true; + auto whatIt = mCurrentSlicedDurationTrackerMap.find(newKey.getDimensionKeyInWhat()); + if (whatIt != mCurrentSlicedDurationTrackerMap.end()) { + auto condIt = whatIt->second.find(newKey.getDimensionKeyInCondition()); + if (condIt != whatIt->second.end()) { + return false; + } + if (whatIt->second.size() > StatsdStats::kDimensionKeySizeSoftLimit - 1) { + size_t newTupleCount = whatIt->second.size() + 1; + StatsdStats::getInstance().noteMetricDimensionInConditionSize( + mConfigKey, mMetricId, newTupleCount); + // 2. Don't add more tuples, we are above the allowed threshold. Drop the data. + if (newTupleCount > StatsdStats::kDimensionKeySizeHardLimit) { + ALOGE("DurationMetric %lld dropping data for condition dimension key %s", + (long long)mMetricId, newKey.getDimensionKeyInCondition().toString().c_str()); + return true; + } + } + } else { + // 1. Report the tuple count if the tuple count > soft limit + if (mCurrentSlicedDurationTrackerMap.size() > StatsdStats::kDimensionKeySizeSoftLimit - 1) { + size_t newTupleCount = mCurrentSlicedDurationTrackerMap.size() + 1; + StatsdStats::getInstance().noteMetricDimensionSize( + mConfigKey, mMetricId, newTupleCount); + // 2. Don't add more tuples, we are above the allowed threshold. Drop the data. + if (newTupleCount > StatsdStats::kDimensionKeySizeHardLimit) { + ALOGE("DurationMetric %lld dropping data for what dimension key %s", + (long long)mMetricId, newKey.getDimensionKeyInWhat().toString().c_str()); + return true; + } } } return false; diff --git a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp index f0e0df18693a41624bb2834efd7ba6d65055dead..b13c3e7a0487dd780e6a1c1b3e63b85064c3a9dd 100644 --- a/cmds/statsd/src/metrics/GaugeMetricProducer.cpp +++ b/cmds/statsd/src/metrics/GaugeMetricProducer.cpp @@ -112,7 +112,8 @@ GaugeMetricProducer::GaugeMetricProducer(const ConfigKey& key, const GaugeMetric // Kicks off the puller immediately. if (mPullTagId != -1 && mSamplingType == GaugeMetric::RANDOM_ONE_SAMPLE) { - mStatsPullerManager->RegisterReceiver(mPullTagId, this, bucketSizeMills); + mStatsPullerManager->RegisterReceiver( + mPullTagId, this, mCurrentBucketStartTimeNs + mBucketSizeNs, mBucketSizeNs); } VLOG("Gauge metric %lld created. bucket size %lld start_time: %lld sliced %d", @@ -255,7 +256,7 @@ void GaugeMetricProducer::pullLocked() { } vector> allData; - if (!mStatsPullerManager->Pull(mPullTagId, &allData)) { + if (!mStatsPullerManager->Pull(mPullTagId, getElapsedRealtimeNs(), &allData)) { ALOGE("Gauge Stats puller failed for tag: %d", mPullTagId); return; } diff --git a/cmds/statsd/src/metrics/MetricsManager.cpp b/cmds/statsd/src/metrics/MetricsManager.cpp index 1be082a692cc49fb2e9b5f084d10614166fc5b99..00188e8da0fb4a125d03c78e5204a9c9d596f89c 100644 --- a/cmds/statsd/src/metrics/MetricsManager.cpp +++ b/cmds/statsd/src/metrics/MetricsManager.cpp @@ -351,7 +351,7 @@ void MetricsManager::onLogEvent(const LogEvent& event) { } void MetricsManager::onAnomalyAlarmFired( - const uint64_t timestampNs, + const uint64_t& timestampNs, unordered_set, SpHash>& alarmSet) { for (const auto& itr : mAllAnomalyTrackers) { itr->informAlarmsFired(timestampNs, alarmSet); @@ -359,7 +359,7 @@ void MetricsManager::onAnomalyAlarmFired( } void MetricsManager::onPeriodicAlarmFired( - const uint64_t timestampNs, + const uint64_t& timestampNs, unordered_set, SpHash>& alarmSet) { for (const auto& itr : mAllPeriodicAlarmTrackers) { itr->informAlarmsFired(timestampNs, alarmSet); diff --git a/cmds/statsd/src/metrics/MetricsManager.h b/cmds/statsd/src/metrics/MetricsManager.h index 05ce84d7ea8f93447ba31e26ec821bc627bfde8d..da0cd4a29d3b8251cb1d04ed9972eea62956fdcf 100644 --- a/cmds/statsd/src/metrics/MetricsManager.h +++ b/cmds/statsd/src/metrics/MetricsManager.h @@ -48,11 +48,11 @@ public: void onLogEvent(const LogEvent& event); void onAnomalyAlarmFired( - const uint64_t timestampNs, + const uint64_t& timestampNs, unordered_set, SpHash>& alarmSet); void onPeriodicAlarmFired( - const uint64_t timestampNs, + const uint64_t& timestampNs, unordered_set, SpHash>& alarmSet); void notifyAppUpgrade(const uint64_t& eventTimeNs, const string& apk, const int uid, @@ -184,6 +184,7 @@ private: FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_multiple_buckets); FRIEND_TEST(AnomalyDetectionE2eTest, TestDurationMetric_SUM_long_refractory_period); + FRIEND_TEST(AlarmE2eTest, TestMultipleAlarms); }; } // namespace statsd diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.cpp b/cmds/statsd/src/metrics/ValueMetricProducer.cpp index e19e2368f75185d1b3ff016fcff44c976d61573a..d0f510df2aa215eb93c6f98cf7c723d877fc7c2a 100644 --- a/cmds/statsd/src/metrics/ValueMetricProducer.cpp +++ b/cmds/statsd/src/metrics/ValueMetricProducer.cpp @@ -110,10 +110,12 @@ ValueMetricProducer::ValueMetricProducer(const ConfigKey& key, const ValueMetric } mConditionSliced = (metric.links().size() > 0) || (mDimensionsInCondition.size() > 0); - if (!metric.has_condition() && mPullTagId != -1) { - VLOG("Setting up periodic pulling for %d", mPullTagId); - mStatsPullerManager->RegisterReceiver(mPullTagId, this, bucketSizeMills); + // Kicks off the puller immediately. + if (mPullTagId != -1) { + mStatsPullerManager->RegisterReceiver( + mPullTagId, this, mCurrentBucketStartTimeNs + mBucketSizeNs, mBucketSizeNs); } + VLOG("value metric %lld created. bucket size %lld start_time: %lld", (long long)metric.id(), (long long)mBucketSizeNs, (long long)mStartTimeNs); } @@ -194,26 +196,21 @@ void ValueMetricProducer::onDumpReportLocked(const uint64_t dumpTimeNs, // TODO: Clear mDimensionKeyMap once the report is dumped. } -void ValueMetricProducer::onConditionChangedLocked(const bool condition, const uint64_t eventTime) { +void ValueMetricProducer::onConditionChangedLocked(const bool condition, + const uint64_t eventTimeNs) { mCondition = condition; - if (eventTime < mCurrentBucketStartTimeNs) { - VLOG("Skip event due to late arrival: %lld vs %lld", (long long)eventTime, + if (eventTimeNs < mCurrentBucketStartTimeNs) { + VLOG("Skip event due to late arrival: %lld vs %lld", (long long)eventTimeNs, (long long)mCurrentBucketStartTimeNs); return; } - flushIfNeededLocked(eventTime); + flushIfNeededLocked(eventTimeNs); if (mPullTagId != -1) { - if (mCondition == true) { - mStatsPullerManager->RegisterReceiver(mPullTagId, this, mBucketSizeNs / 1000 / 1000); - } else if (mCondition == false) { - mStatsPullerManager->UnRegisterReceiver(mPullTagId, this); - } - vector> allData; - if (mStatsPullerManager->Pull(mPullTagId, &allData)) { + if (mStatsPullerManager->Pull(mPullTagId, eventTimeNs, &allData)) { if (allData.size() == 0) { return; } @@ -315,8 +312,13 @@ void ValueMetricProducer::onMatchedLogEventInternalLocked( if (mPullTagId != -1) { // for pulled events if (mCondition == true) { - interval.start = value; - interval.startUpdated = true; + if (!interval.startUpdated) { + interval.start = value; + interval.startUpdated = true; + } else { + // skip it if there is already value recorded for the start + VLOG("Already recorded value for this dimension %s", eventKey.toString().c_str()); + } } else { // Generally we expect value to be monotonically increasing. // If not, there was a reset event. We take the absolute value as @@ -385,6 +387,7 @@ void ValueMetricProducer::flushCurrentBucketLocked(const uint64_t& eventTimeNs) int tainted = 0; for (const auto& slice : mCurrentSlicedBucket) { tainted += slice.second.tainted; + tainted += slice.second.startUpdated; info.mValue = slice.second.sum; // it will auto create new vector of ValuebucketInfo if the key is not found. auto& bucketList = mPastBuckets[slice.first]; diff --git a/cmds/statsd/src/metrics/ValueMetricProducer.h b/cmds/statsd/src/metrics/ValueMetricProducer.h index 796e83af4f1d381cf0b385e97b8d5a9d2bf4e547..45d95316e8e1c2063b21aa0191ab5c8a9aba5d16 100644 --- a/cmds/statsd/src/metrics/ValueMetricProducer.h +++ b/cmds/statsd/src/metrics/ValueMetricProducer.h @@ -53,7 +53,7 @@ public: if (mPullTagId != -1) { vector> allData; - mStatsPullerManager->Pull(mPullTagId, &allData); + mStatsPullerManager->Pull(mPullTagId, eventTimeNs, &allData); if (allData.size() == 0) { // This shouldn't happen since this valuemetric is not useful now. } @@ -159,6 +159,10 @@ private: FRIEND_TEST(ValueMetricProducerTest, TestPulledValueWithUpgrade); FRIEND_TEST(ValueMetricProducerTest, TestPushedEventsWithoutCondition); FRIEND_TEST(ValueMetricProducerTest, TestAnomalyDetection); + FRIEND_TEST(ValueMetricProducerTest, TestBucketBoundaryNoCondition); + FRIEND_TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition); + FRIEND_TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition2); + FRIEND_TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition3); }; } // namespace statsd diff --git a/cmds/statsd/src/metrics/duration_helper/MaxDurationTracker.cpp b/cmds/statsd/src/metrics/duration_helper/MaxDurationTracker.cpp index 15d9619f02203a36b38a51e0fede5291f6c94d89..5c1e9c0cd65e8a202818f990aa8a986d711ae01c 100644 --- a/cmds/statsd/src/metrics/duration_helper/MaxDurationTracker.cpp +++ b/cmds/statsd/src/metrics/duration_helper/MaxDurationTracker.cpp @@ -327,8 +327,9 @@ int64_t MaxDurationTracker::predictAnomalyTimestampNs(const DurationAnomalyTrack } } } - int64_t threshold = anomalyTracker.getAnomalyThreshold(); - return currentTimestamp + threshold - maxElapsed; + int64_t anomalyTimeNs = currentTimestamp + anomalyTracker.getAnomalyThreshold() - maxElapsed; + int64_t refractoryEndNs = anomalyTracker.getRefractoryPeriodEndsSec(mEventKey) * NS_PER_SEC; + return std::max(anomalyTimeNs, refractoryEndNs); } void MaxDurationTracker::dumpStates(FILE* out, bool verbose) const { diff --git a/cmds/statsd/src/stats_log.proto b/cmds/statsd/src/stats_log.proto index dd3b37c8c2d77a6cb5bb8fe2a5d27cd2de035c57..a25df3fc4c0918d02d0086cd99ab56ff125c1af5 100644 --- a/cmds/statsd/src/stats_log.proto +++ b/cmds/statsd/src/stats_log.proto @@ -241,6 +241,7 @@ message StatsdStatsReport { repeated ConditionStats condition_stats = 14; repeated MetricStats metric_stats = 15; repeated AlertStats alert_stats = 16; + repeated MetricStats metric_dimension_in_condition_stats = 17; } repeated ConfigStats config_stats = 3; diff --git a/cmds/statsd/src/stats_log_util.cpp b/cmds/statsd/src/stats_log_util.cpp index cab61e9787c6559e465d8c19a69d02c5a1ee7d07..efd810f0114045f7834ef833014381c4287b903e 100644 --- a/cmds/statsd/src/stats_log_util.cpp +++ b/cmds/statsd/src/stats_log_util.cpp @@ -221,7 +221,8 @@ void writeFieldValueTreeToStream(int tagId, const std::vector& value int64_t TimeUnitToBucketSizeInMillisGuardrailed(int uid, TimeUnit unit) { int64_t bucketSizeMillis = TimeUnitToBucketSizeInMillis(unit); - if (bucketSizeMillis > 1000 && bucketSizeMillis < 5 * 60 * 1000LL && uid != AID_SHELL) { + if (bucketSizeMillis > 1000 && bucketSizeMillis < 5 * 60 * 1000LL && uid != AID_SHELL && + uid != AID_ROOT) { bucketSizeMillis = 5 * 60 * 1000LL; } return bucketSizeMillis; diff --git a/cmds/statsd/statsd.rc b/cmds/statsd/statsd.rc index 920273b5dfaa72379a33e3ad2582c8fceae9768c..3a0c22425e5ccdf6d873d9d4d9bd21a453ae122b 100644 --- a/cmds/statsd/statsd.rc +++ b/cmds/statsd/statsd.rc @@ -20,5 +20,5 @@ service statsd /system/bin/statsd on post-fs-data # Create directory for statsd - mkdir /data/misc/stats-data/ 0770 statsd statsd - mkdir /data/misc/stats-service/ 0770 statsd statsd + mkdir /data/misc/stats-data/ 0770 statsd system + mkdir /data/misc/stats-service/ 0770 statsd system diff --git a/cmds/statsd/tests/FieldValue_test.cpp b/cmds/statsd/tests/FieldValue_test.cpp index 73e7c44dc3da02fde407f711599fab0b43f02474..5a6aba624d7d5c3626a35d63924ba50fbe7f6755 100644 --- a/cmds/statsd/tests/FieldValue_test.cpp +++ b/cmds/statsd/tests/FieldValue_test.cpp @@ -356,7 +356,7 @@ TEST(AtomMatcherTest, TestWriteAtomToProto) { EXPECT_EQ("location1", atom.attribution_node(0).tag()); EXPECT_EQ(2222, atom.attribution_node(1).uid()); EXPECT_EQ("location2", atom.attribution_node(1).tag()); - EXPECT_EQ(999, atom.num_of_results()); + EXPECT_EQ(999, atom.num_results()); } diff --git a/cmds/statsd/tests/e2e/Alarm_e2e_test.cpp b/cmds/statsd/tests/e2e/Alarm_e2e_test.cpp new file mode 100644 index 0000000000000000000000000000000000000000..73c4e7b859ded0ee561816879a4edfb19a290114 --- /dev/null +++ b/cmds/statsd/tests/e2e/Alarm_e2e_test.cpp @@ -0,0 +1,92 @@ +// Copyright (C) 2017 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. + +#include + +#include "src/StatsLogProcessor.h" +#include "src/stats_log_util.h" +#include "tests/statsd_test_util.h" + +#include + +namespace android { +namespace os { +namespace statsd { + +#ifdef __ANDROID__ + +namespace { + +StatsdConfig CreateStatsdConfig() { + StatsdConfig config; + config.add_allowed_log_source("AID_ROOT"); // LogEvent defaults to UID of root. + + auto alarm = config.add_alarm(); + alarm->set_id(123456); + alarm->set_offset_millis(TimeUnitToBucketSizeInMillis(TEN_MINUTES)); + alarm->set_period_millis(TimeUnitToBucketSizeInMillis(ONE_HOUR)); + + alarm = config.add_alarm(); + alarm->set_id(654321); + alarm->set_offset_millis(TimeUnitToBucketSizeInMillis(FIVE_MINUTES)); + alarm->set_period_millis(TimeUnitToBucketSizeInMillis(THIRTY_MINUTES)); + return config; +} + +} // namespace + +TEST(AlarmE2eTest, TestMultipleAlarms) { + auto config = CreateStatsdConfig(); + int64_t bucketStartTimeNs = 10000000000; + + ConfigKey cfgKey; + auto processor = CreateStatsLogProcessor(bucketStartTimeNs / NS_PER_SEC, config, cfgKey); + EXPECT_EQ(processor->mMetricsManagers.size(), 1u); + EXPECT_TRUE(processor->mMetricsManagers.begin()->second->isConfigValid()); + EXPECT_EQ(2u, processor->mMetricsManagers.begin()->second->mAllPeriodicAlarmTrackers.size()); + + auto alarmTracker1 = processor->mMetricsManagers.begin()->second->mAllPeriodicAlarmTrackers[0]; + auto alarmTracker2 = processor->mMetricsManagers.begin()->second->mAllPeriodicAlarmTrackers[1]; + + int64_t alarmTimestampSec0 = bucketStartTimeNs / NS_PER_SEC + 10 * 60; + int64_t alarmTimestampSec1 = bucketStartTimeNs / NS_PER_SEC + 5 * 60; + EXPECT_EQ(alarmTimestampSec0, alarmTracker1->getAlarmTimestampSec()); + EXPECT_EQ(alarmTimestampSec1, alarmTracker2->getAlarmTimestampSec()); + + // Alarm fired. + const int64_t alarmFiredTimestampSec0 = alarmTimestampSec1 + 5; + auto alarmSet = processor->getPeriodicAlarmMonitor()->popSoonerThan( + static_cast(alarmFiredTimestampSec0)); + EXPECT_EQ(1u, alarmSet.size()); + processor->onPeriodicAlarmFired(alarmFiredTimestampSec0 * NS_PER_SEC, alarmSet); + EXPECT_EQ(alarmTimestampSec0, alarmTracker1->getAlarmTimestampSec()); + EXPECT_EQ(alarmTimestampSec1 + 30 * 60, alarmTracker2->getAlarmTimestampSec()); + + // Alarms fired very late. + const int64_t alarmFiredTimestampSec1 = alarmTimestampSec0 + 2 * 60 * 60 + 125; + alarmSet = processor->getPeriodicAlarmMonitor()->popSoonerThan( + static_cast(alarmFiredTimestampSec1)); + EXPECT_EQ(2u, alarmSet.size()); + processor->onPeriodicAlarmFired(alarmFiredTimestampSec1 * NS_PER_SEC, alarmSet); + EXPECT_EQ(alarmTimestampSec0 + 60 * 60 * 3, alarmTracker1->getAlarmTimestampSec()); + EXPECT_EQ(alarmTimestampSec1 + 30 * 60 * 5, alarmTracker2->getAlarmTimestampSec()); +} + +#else +GTEST_LOG_(INFO) << "This test does nothing.\n"; +#endif + +} // namespace statsd +} // namespace os +} // namespace android diff --git a/cmds/statsd/tests/e2e/GaugeMetric_e2e_push_test.cpp b/cmds/statsd/tests/e2e/GaugeMetric_e2e_push_test.cpp index 2e6a0f05a3412f782172ecd1a4bd527b58698eb4..2b91324a9d193766a253a0bbbe441f4529b8c9c7 100644 --- a/cmds/statsd/tests/e2e/GaugeMetric_e2e_push_test.cpp +++ b/cmds/statsd/tests/e2e/GaugeMetric_e2e_push_test.cpp @@ -34,7 +34,7 @@ StatsdConfig CreateStatsdConfigForPushedEvent(const GaugeMetric::SamplingType sa *config.add_atom_matcher() = CreateMoveToBackgroundAtomMatcher(); *config.add_atom_matcher() = CreateMoveToForegroundAtomMatcher(); - auto atomMatcher = CreateSimpleAtomMatcher("", android::util::APP_START_CHANGED); + auto atomMatcher = CreateSimpleAtomMatcher("", android::util::APP_START_OCCURRED); *config.add_atom_matcher() = atomMatcher; auto isInBackgroundPredicate = CreateIsInBackgroundPredicate(); @@ -49,18 +49,18 @@ StatsdConfig CreateStatsdConfigForPushedEvent(const GaugeMetric::SamplingType sa gaugeMetric->mutable_gauge_fields_filter()->set_include_all(false); gaugeMetric->set_sampling_type(sampling_type); auto fieldMatcher = gaugeMetric->mutable_gauge_fields_filter()->mutable_fields(); - fieldMatcher->set_field(android::util::APP_START_CHANGED); + fieldMatcher->set_field(android::util::APP_START_OCCURRED); fieldMatcher->add_child()->set_field(3); // type (enum) fieldMatcher->add_child()->set_field(4); // activity_name(str) fieldMatcher->add_child()->set_field(7); // activity_start_msec(int64) *gaugeMetric->mutable_dimensions_in_what() = - CreateDimensions(android::util::APP_START_CHANGED, {1 /* uid field */ }); + CreateDimensions(android::util::APP_START_OCCURRED, {1 /* uid field */ }); gaugeMetric->set_bucket(FIVE_MINUTES); auto links = gaugeMetric->add_links(); links->set_condition(isInBackgroundPredicate.id()); auto dimensionWhat = links->mutable_fields_in_what(); - dimensionWhat->set_field(android::util::APP_START_CHANGED); + dimensionWhat->set_field(android::util::APP_START_OCCURRED); dimensionWhat->add_child()->set_field(1); // uid field. auto dimensionCondition = links->mutable_fields_in_condition(); dimensionCondition->set_field(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED); @@ -68,12 +68,12 @@ StatsdConfig CreateStatsdConfigForPushedEvent(const GaugeMetric::SamplingType sa return config; } -std::unique_ptr CreateAppStartChangedEvent( - const int uid, const string& pkg_name, AppStartChanged::TransitionType type, +std::unique_ptr CreateAppStartOccurredEvent( + const int uid, const string& pkg_name, AppStartOccurred::TransitionType type, const string& activity_name, const string& calling_pkg_name, const bool is_instant_app, int64_t activity_start_msec, uint64_t timestampNs) { auto logEvent = std::make_unique( - android::util::APP_START_CHANGED, timestampNs); + android::util::APP_START_OCCURRED, timestampNs); logEvent->write(uid); logEvent->write(pkg_name); logEvent->write(type); @@ -112,32 +112,32 @@ TEST(GaugeMetricE2eTest, TestMultipleFieldsForPushedEvent) { appUid1, bucketStartTimeNs + 2 * bucketSizeNs + 100)); - events.push_back(CreateAppStartChangedEvent( - appUid1, "app1", AppStartChanged::WARM, "activity_name1", "calling_pkg_name1", + events.push_back(CreateAppStartOccurredEvent( + appUid1, "app1", AppStartOccurred::WARM, "activity_name1", "calling_pkg_name1", true /*is_instant_app*/, 101 /*activity_start_msec*/, bucketStartTimeNs + 10)); - events.push_back(CreateAppStartChangedEvent( - appUid1, "app1", AppStartChanged::HOT, "activity_name2", "calling_pkg_name2", + events.push_back(CreateAppStartOccurredEvent( + appUid1, "app1", AppStartOccurred::HOT, "activity_name2", "calling_pkg_name2", true /*is_instant_app*/, 102 /*activity_start_msec*/, bucketStartTimeNs + 20)); - events.push_back(CreateAppStartChangedEvent( - appUid1, "app1", AppStartChanged::COLD, "activity_name3", "calling_pkg_name3", + events.push_back(CreateAppStartOccurredEvent( + appUid1, "app1", AppStartOccurred::COLD, "activity_name3", "calling_pkg_name3", true /*is_instant_app*/, 103 /*activity_start_msec*/, bucketStartTimeNs + 30)); - events.push_back(CreateAppStartChangedEvent( - appUid1, "app1", AppStartChanged::WARM, "activity_name4", "calling_pkg_name4", + events.push_back(CreateAppStartOccurredEvent( + appUid1, "app1", AppStartOccurred::WARM, "activity_name4", "calling_pkg_name4", true /*is_instant_app*/, 104 /*activity_start_msec*/, bucketStartTimeNs + bucketSizeNs + 30)); - events.push_back(CreateAppStartChangedEvent( - appUid1, "app1", AppStartChanged::COLD, "activity_name5", "calling_pkg_name5", + events.push_back(CreateAppStartOccurredEvent( + appUid1, "app1", AppStartOccurred::COLD, "activity_name5", "calling_pkg_name5", true /*is_instant_app*/, 105 /*activity_start_msec*/, bucketStartTimeNs + 2 * bucketSizeNs)); - events.push_back(CreateAppStartChangedEvent( - appUid1, "app1", AppStartChanged::HOT, "activity_name6", "calling_pkg_name6", + events.push_back(CreateAppStartOccurredEvent( + appUid1, "app1", AppStartOccurred::HOT, "activity_name6", "calling_pkg_name6", false /*is_instant_app*/, 106 /*activity_start_msec*/, bucketStartTimeNs + 2 * bucketSizeNs + 10)); events.push_back(CreateMoveToBackgroundEvent( appUid2, bucketStartTimeNs + bucketSizeNs + 10)); - events.push_back(CreateAppStartChangedEvent( - appUid2, "app2", AppStartChanged::COLD, "activity_name7", "calling_pkg_name7", + events.push_back(CreateAppStartOccurredEvent( + appUid2, "app2", AppStartOccurred::COLD, "activity_name7", "calling_pkg_name7", true /*is_instant_app*/, 201 /*activity_start_msec*/, bucketStartTimeNs + 2 * bucketSizeNs + 10)); @@ -159,7 +159,7 @@ TEST(GaugeMetricE2eTest, TestMultipleFieldsForPushedEvent) { EXPECT_EQ(2, gaugeMetrics.data_size()); auto data = gaugeMetrics.data(0); - EXPECT_EQ(android::util::APP_START_CHANGED, data.dimensions_in_what().field()); + EXPECT_EQ(android::util::APP_START_OCCURRED, data.dimensions_in_what().field()); EXPECT_EQ(1, data.dimensions_in_what().value_tuple().dimensions_value_size()); EXPECT_EQ(1 /* uid field */, data.dimensions_in_what().value_tuple().dimensions_value(0).field()); @@ -171,29 +171,29 @@ TEST(GaugeMetricE2eTest, TestMultipleFieldsForPushedEvent) { EXPECT_EQ(2, data.bucket_info(0).wall_clock_timestamp_nanos_size()); EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_nanos()); EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_nanos()); - EXPECT_EQ(AppStartChanged::HOT, data.bucket_info(0).atom(0).app_start_changed().type()); + EXPECT_EQ(AppStartOccurred::HOT, data.bucket_info(0).atom(0).app_start_occurred().type()); EXPECT_EQ("activity_name2", - data.bucket_info(0).atom(0).app_start_changed().activity_name()); + data.bucket_info(0).atom(0).app_start_occurred().activity_name()); EXPECT_EQ(102L, - data.bucket_info(0).atom(0).app_start_changed().activity_start_millis()); - EXPECT_EQ(AppStartChanged::COLD, - data.bucket_info(0).atom(1).app_start_changed().type()); + data.bucket_info(0).atom(0).app_start_occurred().activity_start_millis()); + EXPECT_EQ(AppStartOccurred::COLD, + data.bucket_info(0).atom(1).app_start_occurred().type()); EXPECT_EQ("activity_name3", - data.bucket_info(0).atom(1).app_start_changed().activity_name()); + data.bucket_info(0).atom(1).app_start_occurred().activity_name()); EXPECT_EQ(103L, - data.bucket_info(0).atom(1).app_start_changed().activity_start_millis()); + data.bucket_info(0).atom(1).app_start_occurred().activity_start_millis()); EXPECT_EQ(1, data.bucket_info(1).atom_size()); EXPECT_EQ(1, data.bucket_info(1).elapsed_timestamp_nanos_size()); EXPECT_EQ(1, data.bucket_info(1).wall_clock_timestamp_nanos_size()); EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(1).start_bucket_nanos()); EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, data.bucket_info(1).end_bucket_nanos()); - EXPECT_EQ(AppStartChanged::WARM, - data.bucket_info(1).atom(0).app_start_changed().type()); + EXPECT_EQ(AppStartOccurred::WARM, + data.bucket_info(1).atom(0).app_start_occurred().type()); EXPECT_EQ("activity_name4", - data.bucket_info(1).atom(0).app_start_changed().activity_name()); + data.bucket_info(1).atom(0).app_start_occurred().activity_name()); EXPECT_EQ(104L, - data.bucket_info(1).atom(0).app_start_changed().activity_start_millis()); + data.bucket_info(1).atom(0).app_start_occurred().activity_start_millis()); EXPECT_EQ(2, data.bucket_info(2).atom_size()); EXPECT_EQ(2, data.bucket_info(2).elapsed_timestamp_nanos_size()); @@ -202,41 +202,41 @@ TEST(GaugeMetricE2eTest, TestMultipleFieldsForPushedEvent) { data.bucket_info(2).start_bucket_nanos()); EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs, data.bucket_info(2).end_bucket_nanos()); - EXPECT_EQ(AppStartChanged::COLD, - data.bucket_info(2).atom(0).app_start_changed().type()); + EXPECT_EQ(AppStartOccurred::COLD, + data.bucket_info(2).atom(0).app_start_occurred().type()); EXPECT_EQ("activity_name5", - data.bucket_info(2).atom(0).app_start_changed().activity_name()); + data.bucket_info(2).atom(0).app_start_occurred().activity_name()); EXPECT_EQ(105L, - data.bucket_info(2).atom(0).app_start_changed().activity_start_millis()); - EXPECT_EQ(AppStartChanged::HOT, - data.bucket_info(2).atom(1).app_start_changed().type()); + data.bucket_info(2).atom(0).app_start_occurred().activity_start_millis()); + EXPECT_EQ(AppStartOccurred::HOT, + data.bucket_info(2).atom(1).app_start_occurred().type()); EXPECT_EQ("activity_name6", - data.bucket_info(2).atom(1).app_start_changed().activity_name()); + data.bucket_info(2).atom(1).app_start_occurred().activity_name()); EXPECT_EQ(106L, - data.bucket_info(2).atom(1).app_start_changed().activity_start_millis()); + data.bucket_info(2).atom(1).app_start_occurred().activity_start_millis()); } else { EXPECT_EQ(1, data.bucket_info(0).atom_size()); EXPECT_EQ(1, data.bucket_info(0).elapsed_timestamp_nanos_size()); EXPECT_EQ(1, data.bucket_info(0).wall_clock_timestamp_nanos_size()); EXPECT_EQ(bucketStartTimeNs, data.bucket_info(0).start_bucket_nanos()); EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(0).end_bucket_nanos()); - EXPECT_EQ(AppStartChanged::HOT, data.bucket_info(0).atom(0).app_start_changed().type()); + EXPECT_EQ(AppStartOccurred::HOT, data.bucket_info(0).atom(0).app_start_occurred().type()); EXPECT_EQ("activity_name2", - data.bucket_info(0).atom(0).app_start_changed().activity_name()); + data.bucket_info(0).atom(0).app_start_occurred().activity_name()); EXPECT_EQ(102L, - data.bucket_info(0).atom(0).app_start_changed().activity_start_millis()); + data.bucket_info(0).atom(0).app_start_occurred().activity_start_millis()); EXPECT_EQ(1, data.bucket_info(1).atom_size()); EXPECT_EQ(1, data.bucket_info(1).elapsed_timestamp_nanos_size()); EXPECT_EQ(1, data.bucket_info(1).wall_clock_timestamp_nanos_size()); EXPECT_EQ(bucketStartTimeNs + bucketSizeNs, data.bucket_info(1).start_bucket_nanos()); EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, data.bucket_info(1).end_bucket_nanos()); - EXPECT_EQ(AppStartChanged::WARM, - data.bucket_info(1).atom(0).app_start_changed().type()); + EXPECT_EQ(AppStartOccurred::WARM, + data.bucket_info(1).atom(0).app_start_occurred().type()); EXPECT_EQ("activity_name4", - data.bucket_info(1).atom(0).app_start_changed().activity_name()); + data.bucket_info(1).atom(0).app_start_occurred().activity_name()); EXPECT_EQ(104L, - data.bucket_info(1).atom(0).app_start_changed().activity_start_millis()); + data.bucket_info(1).atom(0).app_start_occurred().activity_start_millis()); EXPECT_EQ(1, data.bucket_info(2).atom_size()); EXPECT_EQ(1, data.bucket_info(2).elapsed_timestamp_nanos_size()); @@ -245,17 +245,17 @@ TEST(GaugeMetricE2eTest, TestMultipleFieldsForPushedEvent) { data.bucket_info(2).start_bucket_nanos()); EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs, data.bucket_info(2).end_bucket_nanos()); - EXPECT_EQ(AppStartChanged::COLD, - data.bucket_info(2).atom(0).app_start_changed().type()); + EXPECT_EQ(AppStartOccurred::COLD, + data.bucket_info(2).atom(0).app_start_occurred().type()); EXPECT_EQ("activity_name5", - data.bucket_info(2).atom(0).app_start_changed().activity_name()); + data.bucket_info(2).atom(0).app_start_occurred().activity_name()); EXPECT_EQ(105L, - data.bucket_info(2).atom(0).app_start_changed().activity_start_millis()); + data.bucket_info(2).atom(0).app_start_occurred().activity_start_millis()); } data = gaugeMetrics.data(1); - EXPECT_EQ(data.dimensions_in_what().field(), android::util::APP_START_CHANGED); + EXPECT_EQ(data.dimensions_in_what().field(), android::util::APP_START_OCCURRED); EXPECT_EQ(data.dimensions_in_what().value_tuple().dimensions_value_size(), 1); EXPECT_EQ(1 /* uid field */, data.dimensions_in_what().value_tuple().dimensions_value(0).field()); @@ -266,10 +266,10 @@ TEST(GaugeMetricE2eTest, TestMultipleFieldsForPushedEvent) { EXPECT_EQ(1, data.bucket_info(0).wall_clock_timestamp_nanos_size()); EXPECT_EQ(bucketStartTimeNs + 2 * bucketSizeNs, data.bucket_info(0).start_bucket_nanos()); EXPECT_EQ(bucketStartTimeNs + 3 * bucketSizeNs, data.bucket_info(0).end_bucket_nanos()); - EXPECT_EQ(AppStartChanged::COLD, data.bucket_info(0).atom(0).app_start_changed().type()); + EXPECT_EQ(AppStartOccurred::COLD, data.bucket_info(0).atom(0).app_start_occurred().type()); EXPECT_EQ("activity_name7", - data.bucket_info(0).atom(0).app_start_changed().activity_name()); - EXPECT_EQ(201L, data.bucket_info(0).atom(0).app_start_changed().activity_start_millis()); + data.bucket_info(0).atom(0).app_start_occurred().activity_name()); + EXPECT_EQ(201L, data.bucket_info(0).atom(0).app_start_occurred().activity_start_millis()); } } diff --git a/cmds/statsd/tests/guardrail/StatsdStats_test.cpp b/cmds/statsd/tests/guardrail/StatsdStats_test.cpp index 5c4eda8348d104c46c7f4d8d0842152f895e55ff..04ce73a76d3b2a90b8d33d21f019e62ecec600e8 100644 --- a/cmds/statsd/tests/guardrail/StatsdStats_test.cpp +++ b/cmds/statsd/tests/guardrail/StatsdStats_test.cpp @@ -210,7 +210,7 @@ TEST(StatsdStatsTest, TestAtomLog) { stats.noteAtomLogged(android::util::SENSOR_STATE_CHANGED, now + 1); stats.noteAtomLogged(android::util::SENSOR_STATE_CHANGED, now + 2); - stats.noteAtomLogged(android::util::DROPBOX_ERROR_CHANGED, now + 3); + stats.noteAtomLogged(android::util::APP_CRASH_OCCURRED, now + 3); // pulled event, should ignore stats.noteAtomLogged(android::util::WIFI_BYTES_TRANSFER, now + 4); @@ -228,7 +228,7 @@ TEST(StatsdStatsTest, TestAtomLog) { if (atomStats.tag() == android::util::SENSOR_STATE_CHANGED && atomStats.count() == 3) { sensorAtomGood = true; } - if (atomStats.tag() == android::util::DROPBOX_ERROR_CHANGED && atomStats.count() == 1) { + if (atomStats.tag() == android::util::APP_CRASH_OCCURRED && atomStats.count() == 1) { dropboxAtomGood = true; } } diff --git a/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp b/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp index 2583c95b2016979e3d30a13592862ab5241e6e2e..7ca66fd361c204cb700240abf3a731f78e3eee62 100644 --- a/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp +++ b/cmds/statsd/tests/metrics/GaugeMetricProducer_test.cpp @@ -63,7 +63,7 @@ TEST(GaugeMetricProducerTest, TestNoCondition) { // For now we still need this so that it doesn't do real pulling. shared_ptr pullerManager = make_shared>(); - EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _)).WillOnce(Return()); + EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return()); GaugeMetricProducer gaugeProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard, @@ -213,10 +213,11 @@ TEST(GaugeMetricProducerTest, TestPulledWithUpgrade) { shared_ptr pullerManager = make_shared>(); - EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _)).WillOnce(Return()); + EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return()); - EXPECT_CALL(*pullerManager, Pull(tagId, _)) - .WillOnce(Invoke([](int tagId, vector>* data) { + EXPECT_CALL(*pullerManager, Pull(tagId, _, _)) + .WillOnce(Invoke([](int tagId, int64_t timeNs, + vector>* data) { data->clear(); shared_ptr event = make_shared(tagId, eventUpgradeTimeNs); event->write("some value"); @@ -281,10 +282,11 @@ TEST(GaugeMetricProducerTest, TestWithCondition) { shared_ptr pullerManager = make_shared>(); - EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _)).WillOnce(Return()); + EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return()); - EXPECT_CALL(*pullerManager, Pull(tagId, _)) - .WillOnce(Invoke([](int tagId, vector>* data) { + EXPECT_CALL(*pullerManager, Pull(tagId, _, _)) + .WillOnce(Invoke([](int tagId, int64_t timeNs, + vector>* data) { data->clear(); shared_ptr event = make_shared(tagId, bucketStartTimeNs + 10); event->write("some value"); @@ -372,10 +374,11 @@ TEST(GaugeMetricProducerTest, TestWithSlicedCondition) { shared_ptr pullerManager = make_shared>(); - EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _)).WillOnce(Return()); + EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return()); - EXPECT_CALL(*pullerManager, Pull(tagId, _)) - .WillOnce(Invoke([](int tagId, vector>* data) { + EXPECT_CALL(*pullerManager, Pull(tagId, _, _)) + .WillOnce(Invoke([](int tagId, int64_t timeNs, + vector>* data) { data->clear(); shared_ptr event = make_shared(tagId, bucketStartTimeNs + 10); event->write(1000); @@ -420,7 +423,7 @@ TEST(GaugeMetricProducerTest, TestAnomalyDetection) { shared_ptr pullerManager = make_shared>(); - EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _)).WillOnce(Return()); + EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return()); GaugeMetric metric; diff --git a/cmds/statsd/tests/metrics/MaxDurationTracker_test.cpp b/cmds/statsd/tests/metrics/MaxDurationTracker_test.cpp index 57a8925a122e3db3ef488e80a7d5faaf73c4500c..a0f1c00b7b48697615a30d4c9e6ea2e940b496c5 100644 --- a/cmds/statsd/tests/metrics/MaxDurationTracker_test.cpp +++ b/cmds/statsd/tests/metrics/MaxDurationTracker_test.cpp @@ -344,8 +344,37 @@ TEST(MaxDurationTrackerTest, TestAnomalyPredictedTimestamp) { tracker.noteConditionChanged(key1, true, conditionStarts2); EXPECT_EQ(1U, anomalyTracker->mAlarms.size()); auto alarm = anomalyTracker->mAlarms.begin()->second; + uint64_t anomalyFireTimeSec = alarm->timestampSec; EXPECT_EQ(conditionStarts2 + 36 * NS_PER_SEC, - (unsigned long long)(alarm->timestampSec * NS_PER_SEC)); + (unsigned long long)anomalyFireTimeSec * NS_PER_SEC); + + // Now we test the calculation now that there's a refractory period. + // At the correct time, declare the anomaly. This will set a refractory period. Make sure it + // gets correctly taken into account in future predictAnomalyTimestampNs calculations. + std::unordered_set, SpHash> firedAlarms({alarm}); + anomalyTracker->informAlarmsFired(anomalyFireTimeSec * NS_PER_SEC, firedAlarms); + EXPECT_EQ(0u, anomalyTracker->mAlarms.size()); + uint64_t refractoryPeriodEndsSec = anomalyFireTimeSec + refPeriodSec; + EXPECT_EQ(anomalyTracker->getRefractoryPeriodEndsSec(eventKey), refractoryPeriodEndsSec); + + // Now stop and start again. Make sure the new predictAnomalyTimestampNs takes into account + // the refractory period correctly. + uint64_t eventStopTimeNs = anomalyFireTimeSec * NS_PER_SEC + 10; + tracker.noteStop(key1, eventStopTimeNs, false); + tracker.noteStop(key2, eventStopTimeNs, false); + tracker.noteStart(key1, true, eventStopTimeNs + 1000000, conditionKey1); + // Anomaly is ongoing, but we're still in the refractory period. + EXPECT_EQ(1U, anomalyTracker->mAlarms.size()); + alarm = anomalyTracker->mAlarms.begin()->second; + EXPECT_EQ(refractoryPeriodEndsSec, (unsigned long long)(alarm->timestampSec)); + + // Makes sure it is correct after the refractory period is over. + tracker.noteStop(key1, eventStopTimeNs + 2000000, false); + uint64_t justBeforeRefPeriodNs = (refractoryPeriodEndsSec - 2) * NS_PER_SEC; + tracker.noteStart(key1, true, justBeforeRefPeriodNs, conditionKey1); + alarm = anomalyTracker->mAlarms.begin()->second; + EXPECT_EQ(justBeforeRefPeriodNs + 40 * NS_PER_SEC, + (unsigned long long)(alarm->timestampSec * NS_PER_SEC)); } // Suppose that within one tracker there are two dimensions A and B. diff --git a/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp b/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp index a8eb27037ebf0294a005a0ab39a12f6e98b87d2e..c650a06fdbe1d59ec26921196a4d8b4bf98ba535 100644 --- a/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp +++ b/cmds/statsd/tests/metrics/ValueMetricProducer_test.cpp @@ -45,6 +45,8 @@ const int64_t bucketSizeNs = TimeUnitToBucketSizeInMillis(ONE_MINUTE) * 1000000L const int64_t bucket2StartTimeNs = bucketStartTimeNs + bucketSizeNs; const int64_t bucket3StartTimeNs = bucketStartTimeNs + 2 * bucketSizeNs; const int64_t bucket4StartTimeNs = bucketStartTimeNs + 3 * bucketSizeNs; +const int64_t bucket5StartTimeNs = bucketStartTimeNs + 4 * bucketSizeNs; +const int64_t bucket6StartTimeNs = bucketStartTimeNs + 5 * bucketSizeNs; const int64_t eventUpgradeTimeNs = bucketStartTimeNs + 15 * NS_PER_SEC; /* @@ -62,7 +64,7 @@ TEST(ValueMetricProducerTest, TestNonDimensionalEvents) { // For now we still need this so that it doesn't do real pulling. shared_ptr pullerManager = make_shared>(); - EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _)).WillOnce(Return()); + EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return()); ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard, @@ -141,11 +143,12 @@ TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition) { sp wizard = new NaggyMock(); shared_ptr pullerManager = make_shared>(); - EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _)).WillOnce(Return()); + EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return()); - EXPECT_CALL(*pullerManager, Pull(tagId, _)) - .WillOnce(Invoke([](int tagId, vector>* data) { + EXPECT_CALL(*pullerManager, Pull(tagId, _, _)) + .WillOnce(Invoke([](int tagId, int64_t timeNs, + vector>* data) { data->clear(); shared_ptr event = make_shared(tagId, bucketStartTimeNs + 10); event->write(tagId); @@ -154,7 +157,8 @@ TEST(ValueMetricProducerTest, TestEventsWithNonSlicedCondition) { data->push_back(event); return true; })) - .WillOnce(Invoke([](int tagId, vector>* data) { + .WillOnce(Invoke([](int tagId, int64_t timeNs, + vector>* data) { data->clear(); shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 10); event->write(tagId); @@ -260,10 +264,11 @@ TEST(ValueMetricProducerTest, TestPulledValueWithUpgrade) { sp wizard = new NaggyMock(); shared_ptr pullerManager = make_shared>(); - EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _)).WillOnce(Return()); + EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return()); - EXPECT_CALL(*pullerManager, Pull(tagId, _)) - .WillOnce(Invoke([](int tagId, vector>* data) { + EXPECT_CALL(*pullerManager, Pull(tagId, _, _)) + .WillOnce(Invoke([](int tagId, int64_t timeNs, + vector>* data) { data->clear(); shared_ptr event = make_shared(tagId, bucketStartTimeNs + 10); event->write(tagId); @@ -428,6 +433,376 @@ TEST(ValueMetricProducerTest, TestAnomalyDetection) { std::ceil(1.0 * event6->GetElapsedTimestampNs() / NS_PER_SEC + refPeriodSec)); } +// Test value metric no condition, the pull on bucket boundary come in time and too late +TEST(ValueMetricProducerTest, TestBucketBoundaryNoCondition) { + 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); + + sp wizard = new NaggyMock(); + shared_ptr pullerManager = + make_shared>(); + EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); + EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillOnce(Return()); + + ValueMetricProducer valueProducer(kConfigKey, metric, -1 /*-1 meaning no condition*/, wizard, + tagId, bucketStartTimeNs, pullerManager); + valueProducer.setBucketSize(60 * NS_PER_SEC); + + vector> allData; + // pull 1 + allData.clear(); + shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 1); + event->write(tagId); + event->write(11); + event->init(); + allData.push_back(event); + + valueProducer.onDataPulled(allData); + // has one slice + EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); + ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + valueProducer.setBucketSize(60 * NS_PER_SEC); + + // startUpdated:true tainted:0 sum:0 start:11 + EXPECT_EQ(true, curInterval.startUpdated); + EXPECT_EQ(0, curInterval.tainted); + EXPECT_EQ(0, curInterval.sum); + EXPECT_EQ(11, curInterval.start); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); + EXPECT_EQ(0, valueProducer.mPastBuckets.begin()->second.back().mValue); + + // pull 2 at correct time + allData.clear(); + event = make_shared(tagId, bucket3StartTimeNs + 1); + event->write(tagId); + event->write(23); + event->init(); + allData.push_back(event); + valueProducer.onDataPulled(allData); + // has one slice + EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + // tartUpdated:false tainted:0 sum:12 + EXPECT_EQ(true, curInterval.startUpdated); + EXPECT_EQ(0, curInterval.tainted); + EXPECT_EQ(0, curInterval.sum); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); + EXPECT_EQ(2UL, valueProducer.mPastBuckets.begin()->second.size()); + EXPECT_EQ(12, valueProducer.mPastBuckets.begin()->second.back().mValue); + + // pull 3 come late. + // The previous bucket gets closed with error. (Has start value 23, no ending) + // Another bucket gets closed with error. (No start, but ending with 36) + // The new bucket is back to normal. + allData.clear(); + event = make_shared(tagId, bucket6StartTimeNs + 1); + event->write(tagId); + event->write(36); + event->init(); + allData.push_back(event); + valueProducer.onDataPulled(allData); + EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + // startUpdated:false tainted:0 sum:12 + EXPECT_EQ(true, curInterval.startUpdated); + EXPECT_EQ(0, curInterval.tainted); + EXPECT_EQ(36, curInterval.start); + EXPECT_EQ(0, curInterval.sum); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); + EXPECT_EQ(4UL, valueProducer.mPastBuckets.begin()->second.size()); + EXPECT_EQ(0, valueProducer.mPastBuckets.begin()->second[0].mValue); + EXPECT_EQ(12, valueProducer.mPastBuckets.begin()->second[1].mValue); + EXPECT_EQ(0, valueProducer.mPastBuckets.begin()->second[2].mValue); + EXPECT_EQ(0, valueProducer.mPastBuckets.begin()->second[3].mValue); +} + +/* + * Test pulled event with non sliced condition. The pull on boundary come late because the alarm + * was delivered late. + */ +TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition) { + 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")); + + sp wizard = new NaggyMock(); + shared_ptr pullerManager = + make_shared>(); + EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); + EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return()); + + EXPECT_CALL(*pullerManager, Pull(tagId, _, _)) + // condition becomes true + .WillOnce(Invoke([](int tagId, int64_t timeNs, + vector>* data) { + data->clear(); + shared_ptr event = make_shared(tagId, bucketStartTimeNs + 10); + event->write(tagId); + event->write(100); + event->init(); + data->push_back(event); + return true; + })) + // condition becomes false + .WillOnce(Invoke([](int tagId, int64_t timeNs, + vector>* data) { + data->clear(); + shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 20); + event->write(tagId); + event->write(120); + event->init(); + data->push_back(event); + return true; + })); + + ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, tagId, bucketStartTimeNs, + pullerManager); + valueProducer.setBucketSize(60 * NS_PER_SEC); + valueProducer.onConditionChanged(true, bucketStartTimeNs + 8); + + // has one slice + EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); + ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + // startUpdated:false tainted:0 sum:0 start:100 + EXPECT_EQ(100, curInterval.start); + EXPECT_EQ(true, curInterval.startUpdated); + EXPECT_EQ(0, curInterval.tainted); + EXPECT_EQ(0, curInterval.sum); + EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); + + // pull on bucket boundary come late, condition change happens before it + valueProducer.onConditionChanged(false, bucket2StartTimeNs + 1); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + EXPECT_EQ(false, curInterval.startUpdated); + EXPECT_EQ(1, curInterval.tainted); + EXPECT_EQ(0, curInterval.sum); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); + EXPECT_EQ(0, valueProducer.mPastBuckets.begin()->second[0].mValue); + + // Now the alarm is delivered. + // since the condition turned to off before this pull finish, it has no effect + vector> allData; + allData.clear(); + shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 30); + event->write(1); + event->write(110); + event->init(); + allData.push_back(event); + valueProducer.onDataPulled(allData); + + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + EXPECT_EQ(false, curInterval.startUpdated); + EXPECT_EQ(1, curInterval.tainted); + EXPECT_EQ(0, curInterval.sum); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); + EXPECT_EQ(0, valueProducer.mPastBuckets.begin()->second[0].mValue); +} + +/* + * Test pulled event with non sliced condition. The pull on boundary come late, after the condition + * change to false, and then true again. This is due to alarm delivered late. + */ +TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition2) { + 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")); + + sp wizard = new NaggyMock(); + shared_ptr pullerManager = + make_shared>(); + EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillRepeatedly(Return()); + EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return()); + + EXPECT_CALL(*pullerManager, Pull(tagId, _, _)) + // condition becomes true + .WillOnce(Invoke([](int tagId, int64_t timeNs, + vector>* data) { + data->clear(); + shared_ptr event = make_shared(tagId, bucketStartTimeNs + 10); + event->write(tagId); + event->write(100); + event->init(); + data->push_back(event); + return true; + })) + // condition becomes false + .WillOnce(Invoke([](int tagId, int64_t timeNs, + vector>* data) { + data->clear(); + shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 20); + event->write(tagId); + event->write(120); + event->init(); + data->push_back(event); + return true; + })) + // condition becomes true again + .WillOnce(Invoke([](int tagId, int64_t timeNs, + vector>* data) { + data->clear(); + shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 30); + event->write(tagId); + event->write(130); + event->init(); + data->push_back(event); + return true; + })); + + ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, tagId, bucketStartTimeNs, + pullerManager); + valueProducer.setBucketSize(60 * NS_PER_SEC); + valueProducer.onConditionChanged(true, bucketStartTimeNs + 8); + + // has one slice + EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); + ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + // startUpdated:false tainted:0 sum:0 start:100 + EXPECT_EQ(100, curInterval.start); + EXPECT_EQ(true, curInterval.startUpdated); + EXPECT_EQ(0, curInterval.tainted); + EXPECT_EQ(0, curInterval.sum); + EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); + + // pull on bucket boundary come late, condition change happens before it + valueProducer.onConditionChanged(false, bucket2StartTimeNs + 1); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + EXPECT_EQ(false, curInterval.startUpdated); + EXPECT_EQ(1, curInterval.tainted); + EXPECT_EQ(0, curInterval.sum); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); + EXPECT_EQ(0, valueProducer.mPastBuckets.begin()->second[0].mValue); + + // condition changed to true again, before the pull alarm is delivered + valueProducer.onConditionChanged(true, bucket2StartTimeNs + 25); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + EXPECT_EQ(true, curInterval.startUpdated); + EXPECT_EQ(130, curInterval.start); + EXPECT_EQ(1, curInterval.tainted); + EXPECT_EQ(0, curInterval.sum); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); + EXPECT_EQ(0, valueProducer.mPastBuckets.begin()->second[0].mValue); + + // Now the alarm is delivered, but it is considered late, it has no effect + vector> allData; + allData.clear(); + shared_ptr event = make_shared(tagId, bucket2StartTimeNs + 50); + event->write(1); + event->write(110); + event->init(); + allData.push_back(event); + valueProducer.onDataPulled(allData); + + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + EXPECT_EQ(true, curInterval.startUpdated); + EXPECT_EQ(130, curInterval.start); + EXPECT_EQ(1, curInterval.tainted); + EXPECT_EQ(0, curInterval.sum); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); + EXPECT_EQ(0, valueProducer.mPastBuckets.begin()->second[0].mValue); +} + +/* + * Test pulled event with non sliced condition. The pull on boundary come late because the puller is + * very slow. + */ +TEST(ValueMetricProducerTest, TestBucketBoundaryWithCondition3) { + 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")); + + sp wizard = new NaggyMock(); + shared_ptr pullerManager = + make_shared>(); + EXPECT_CALL(*pullerManager, RegisterReceiver(tagId, _, _, _)).WillOnce(Return()); + EXPECT_CALL(*pullerManager, UnRegisterReceiver(tagId, _)).WillRepeatedly(Return()); + + EXPECT_CALL(*pullerManager, Pull(tagId, _, _)) + // condition becomes true + .WillOnce(Invoke([](int tagId, int64_t timeNs, + vector>* data) { + data->clear(); + shared_ptr event = make_shared(tagId, bucketStartTimeNs + 10); + event->write(tagId); + event->write(100); + event->init(); + data->push_back(event); + return true; + })) + // condition becomes false + .WillOnce(Invoke([](int tagId, int64_t timeNs, + vector>* data) { + data->clear(); + shared_ptr event = make_shared(tagId, bucket3StartTimeNs + 20); + event->write(tagId); + event->write(120); + event->init(); + data->push_back(event); + return true; + })); + + ValueMetricProducer valueProducer(kConfigKey, metric, 1, wizard, tagId, bucketStartTimeNs, + pullerManager); + valueProducer.setBucketSize(60 * NS_PER_SEC); + valueProducer.onConditionChanged(true, bucketStartTimeNs + 8); + + // has one slice + EXPECT_EQ(1UL, valueProducer.mCurrentSlicedBucket.size()); + ValueMetricProducer::Interval curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + // startUpdated:false tainted:0 sum:0 start:100 + EXPECT_EQ(100, curInterval.start); + EXPECT_EQ(true, curInterval.startUpdated); + EXPECT_EQ(0, curInterval.tainted); + EXPECT_EQ(0, curInterval.sum); + EXPECT_EQ(0UL, valueProducer.mPastBuckets.size()); + + // pull on bucket boundary come late, condition change happens before it. + // But puller is very slow in this one, so the data come after bucket finish + valueProducer.onConditionChanged(false, bucket2StartTimeNs + 1); + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + EXPECT_EQ(false, curInterval.startUpdated); + EXPECT_EQ(1, curInterval.tainted); + EXPECT_EQ(0, curInterval.sum); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); + EXPECT_EQ(0, valueProducer.mPastBuckets.begin()->second[0].mValue); + + // Alarm is delivered in time, but the pull is very slow, and pullers are called in order, + // so this one comes even later + vector> allData; + allData.clear(); + shared_ptr event = make_shared(tagId, bucket3StartTimeNs + 30); + event->write(1); + event->write(110); + event->init(); + allData.push_back(event); + valueProducer.onDataPulled(allData); + + curInterval = valueProducer.mCurrentSlicedBucket.begin()->second; + EXPECT_EQ(false, curInterval.startUpdated); + EXPECT_EQ(1, curInterval.tainted); + EXPECT_EQ(0, curInterval.sum); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.size()); + EXPECT_EQ(1UL, valueProducer.mPastBuckets.begin()->second.size()); + EXPECT_EQ(0, valueProducer.mPastBuckets.begin()->second[0].mValue); +} + } // namespace statsd } // namespace os } // namespace android diff --git a/cmds/statsd/tests/metrics/metrics_test_helper.h b/cmds/statsd/tests/metrics/metrics_test_helper.h index f040bf9f37aea819cf7fa321f1c74af4cb9d668d..5afaba6671fabf9959a8f0d31183a782aa360342 100644 --- a/cmds/statsd/tests/metrics/metrics_test_helper.h +++ b/cmds/statsd/tests/metrics/metrics_test_helper.h @@ -35,9 +35,11 @@ public: class MockStatsPullerManager : public StatsPullerManager { public: - MOCK_METHOD3(RegisterReceiver, void(int tagId, wp receiver, long intervalMs)); + MOCK_METHOD4(RegisterReceiver, void(int tagId, wp receiver, + int64_t nextPulltimeNs, int64_t intervalNs)); MOCK_METHOD2(UnRegisterReceiver, void(int tagId, wp receiver)); - MOCK_METHOD2(Pull, bool(const int pullCode, vector>* data)); + MOCK_METHOD3(Pull, bool(const int pullCode, const int64_t timeNs, + vector>* data)); }; class MockUidMap : public UidMap { diff --git a/cmds/statsd/tests/statsd_test_util.cpp b/cmds/statsd/tests/statsd_test_util.cpp index ce44a35cbf21292ceaa4c35e135af8a74a206f74..d0840f050723744a4aa9562a95fa916545457b06 100644 --- a/cmds/statsd/tests/statsd_test_util.cpp +++ b/cmds/statsd/tests/statsd_test_util.cpp @@ -152,42 +152,42 @@ AtomMatcher CreateSyncEndAtomMatcher() { } AtomMatcher CreateActivityForegroundStateChangedAtomMatcher( - const string& name, ActivityForegroundStateChanged::Activity activity) { + const string& name, ActivityForegroundStateChanged::State state) { AtomMatcher atom_matcher; atom_matcher.set_id(StringToId(name)); auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher(); simple_atom_matcher->set_atom_id(android::util::ACTIVITY_FOREGROUND_STATE_CHANGED); auto field_value_matcher = simple_atom_matcher->add_field_value_matcher(); field_value_matcher->set_field(4); // Activity field. - field_value_matcher->set_eq_int(activity); + field_value_matcher->set_eq_int(state); return atom_matcher; } AtomMatcher CreateMoveToBackgroundAtomMatcher() { return CreateActivityForegroundStateChangedAtomMatcher( - "MoveToBackground", ActivityForegroundStateChanged::MOVE_TO_BACKGROUND); + "Background", ActivityForegroundStateChanged::BACKGROUND); } AtomMatcher CreateMoveToForegroundAtomMatcher() { return CreateActivityForegroundStateChangedAtomMatcher( - "MoveToForeground", ActivityForegroundStateChanged::MOVE_TO_FOREGROUND); + "Foreground", ActivityForegroundStateChanged::FOREGROUND); } AtomMatcher CreateProcessLifeCycleStateChangedAtomMatcher( - const string& name, ProcessLifeCycleStateChanged::Event event) { + const string& name, ProcessLifeCycleStateChanged::State state) { AtomMatcher atom_matcher; atom_matcher.set_id(StringToId(name)); auto simple_atom_matcher = atom_matcher.mutable_simple_atom_matcher(); simple_atom_matcher->set_atom_id(android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED); auto field_value_matcher = simple_atom_matcher->add_field_value_matcher(); field_value_matcher->set_field(3); // Process state field. - field_value_matcher->set_eq_int(event); + field_value_matcher->set_eq_int(state); return atom_matcher; } AtomMatcher CreateProcessCrashAtomMatcher() { return CreateProcessLifeCycleStateChangedAtomMatcher( - "ProcessCrashed", ProcessLifeCycleStateChanged::PROCESS_CRASHED); + "Crashed", ProcessLifeCycleStateChanged::CRASHED); } Predicate CreateScheduledJobPredicate() { @@ -241,8 +241,8 @@ Predicate CreateIsSyncingPredicate() { Predicate CreateIsInBackgroundPredicate() { Predicate predicate; predicate.set_id(StringToId("IsInBackground")); - predicate.mutable_simple_predicate()->set_start(StringToId("MoveToBackground")); - predicate.mutable_simple_predicate()->set_stop(StringToId("MoveToForeground")); + predicate.mutable_simple_predicate()->set_start(StringToId("Background")); + predicate.mutable_simple_predicate()->set_stop(StringToId("Foreground")); return predicate; } @@ -373,25 +373,25 @@ std::unique_ptr CreateReleaseWakelockEvent( } std::unique_ptr CreateActivityForegroundStateChangedEvent( - const int uid, const ActivityForegroundStateChanged::Activity activity, uint64_t timestampNs) { + const int uid, const ActivityForegroundStateChanged::State state, uint64_t timestampNs) { auto event = std::make_unique( android::util::ACTIVITY_FOREGROUND_STATE_CHANGED, timestampNs); event->write(uid); event->write("pkg_name"); event->write("class_name"); - event->write(activity); + event->write(state); event->init(); return event; } std::unique_ptr CreateMoveToBackgroundEvent(const int uid, uint64_t timestampNs) { return CreateActivityForegroundStateChangedEvent( - uid, ActivityForegroundStateChanged::MOVE_TO_BACKGROUND, timestampNs); + uid, ActivityForegroundStateChanged::BACKGROUND, timestampNs); } std::unique_ptr CreateMoveToForegroundEvent(const int uid, uint64_t timestampNs) { return CreateActivityForegroundStateChangedEvent( - uid, ActivityForegroundStateChanged::MOVE_TO_FOREGROUND, timestampNs); + uid, ActivityForegroundStateChanged::FOREGROUND, timestampNs); } std::unique_ptr CreateSyncStateChangedEvent( @@ -418,19 +418,19 @@ std::unique_ptr CreateSyncEndEvent( } std::unique_ptr CreateProcessLifeCycleStateChangedEvent( - const int uid, const ProcessLifeCycleStateChanged::Event event, uint64_t timestampNs) { + const int uid, const ProcessLifeCycleStateChanged::State state, uint64_t timestampNs) { auto logEvent = std::make_unique( android::util::PROCESS_LIFE_CYCLE_STATE_CHANGED, timestampNs); logEvent->write(uid); logEvent->write(""); - logEvent->write(event); + logEvent->write(state); logEvent->init(); return logEvent; } std::unique_ptr CreateAppCrashEvent(const int uid, uint64_t timestampNs) { return CreateProcessLifeCycleStateChangedEvent( - uid, ProcessLifeCycleStateChanged::PROCESS_CRASHED, timestampNs); + uid, ProcessLifeCycleStateChanged::CRASHED, timestampNs); } std::unique_ptr CreateIsolatedUidChangedEvent( @@ -450,7 +450,9 @@ sp CreateStatsLogProcessor(const long timeBaseSec, const Stat sp anomalyAlarmMonitor = new AlarmMonitor(1, [](const sp&, int64_t){}, [](const sp&){}); - sp periodicAlarmMonitor; + sp periodicAlarmMonitor = + new AlarmMonitor(1, [](const sp&, int64_t){}, + [](const sp&){}); sp processor = new StatsLogProcessor( uidMap, anomalyAlarmMonitor, periodicAlarmMonitor, timeBaseSec, [](const ConfigKey&){}); processor->OnConfigUpdated(key, config); diff --git a/config/hiddenapi-light-greylist.txt b/config/hiddenapi-light-greylist.txt index e560dade9fde5fa04a68af6008a00f95d1417f96..015c4b664bc320a678d51ff25d6bc8a3f2381ed9 100644 --- a/config/hiddenapi-light-greylist.txt +++ b/config/hiddenapi-light-greylist.txt @@ -7,6 +7,7 @@ Landroid/animation/ValueAnimator;->animateValue(F)V Landroid/animation/ValueAnimator;->sDurationScale:F Landroid/app/Activity;->getActivityOptions()Landroid/app/ActivityOptions; Landroid/app/Activity;->getActivityToken()Landroid/os/IBinder; +Landroid/app/ActivityGroup;->mLocalActivityManager:Landroid/app/LocalActivityManager; Landroid/app/Activity;->mActivityInfo:Landroid/content/pm/ActivityInfo; Landroid/app/ActivityManager;->clearApplicationUserData(Ljava/lang/String;Landroid/content/pm/IPackageDataObserver;)Z Landroid/app/ActivityManager;->getMaxRecentTasksStatic()I @@ -63,8 +64,10 @@ Landroid/app/ActivityThread$ActivityClientRecord;->token:Landroid/os/IBinder; Landroid/app/ActivityThread$AppBindData;->appInfo:Landroid/content/pm/ApplicationInfo; Landroid/app/ActivityThread$AppBindData;->info:Landroid/app/LoadedApk; Landroid/app/ActivityThread$AppBindData;->instrumentationArgs:Landroid/os/Bundle; +Landroid/app/ActivityThread$AppBindData;->persistent:Z Landroid/app/ActivityThread$AppBindData;->processName:Ljava/lang/String; Landroid/app/ActivityThread$AppBindData;->providers:Ljava/util/List; +Landroid/app/ActivityThread$AppBindData;->restrictedBackupMode:Z Landroid/app/ActivityThread$BindServiceData;->intent:Landroid/content/Intent; Landroid/app/ActivityThread$BindServiceData;->token:Landroid/os/IBinder; Landroid/app/ActivityThread$CreateServiceData;->compatInfo:Landroid/content/res/CompatibilityInfo; @@ -89,11 +92,13 @@ Landroid/app/ActivityThread;->handleBindApplication(Landroid/app/ActivityThread$ Landroid/app/ActivityThread$H;->BIND_SERVICE:I Landroid/app/ActivityThread$H;->CREATE_SERVICE:I Landroid/app/ActivityThread$H;->DUMP_PROVIDER:I +Landroid/app/ActivityThread$H;->ENTER_ANIMATION_COMPLETE:I Landroid/app/ActivityThread$H;->EXIT_APPLICATION:I Landroid/app/ActivityThread$H;->GC_WHEN_IDLE:I Landroid/app/ActivityThread$H;->INSTALL_PROVIDER:I Landroid/app/ActivityThread$H;->RECEIVER:I Landroid/app/ActivityThread$H;->REMOVE_PROVIDER:I +Landroid/app/ActivityThread$H;->SCHEDULE_CRASH:I Landroid/app/ActivityThread$H;->SERVICE_ARGS:I Landroid/app/ActivityThread$H;->STOP_SERVICE:I Landroid/app/ActivityThread$H;->UNBIND_SERVICE:I @@ -102,6 +107,7 @@ Landroid/app/ActivityThread;->installProvider(Landroid/content/Context;Landroid/ Landroid/app/ActivityThread;->mActivities:Landroid/util/ArrayMap; Landroid/app/ActivityThread;->mAllApplications:Ljava/util/ArrayList; Landroid/app/ActivityThread;->mBoundApplication:Landroid/app/ActivityThread$AppBindData; +Landroid/app/ActivityThread;->mConfiguration:Landroid/content/res/Configuration; Landroid/app/ActivityThread;->mDensityCompatMode:Z Landroid/app/ActivityThread;->mH:Landroid/app/ActivityThread$H; Landroid/app/ActivityThread;->mInitialApplication:Landroid/app/Application; @@ -110,8 +116,10 @@ Landroid/app/ActivityThread;->mLocalProvidersByName:Landroid/util/ArrayMap; Landroid/app/ActivityThread;->mLocalProviders:Landroid/util/ArrayMap; Landroid/app/ActivityThread;->mNumVisibleActivities:I Landroid/app/ActivityThread;->mPackages:Landroid/util/ArrayMap; +Landroid/app/ActivityThread;->mPendingConfiguration:Landroid/content/res/Configuration; Landroid/app/ActivityThread;->mProviderMap:Landroid/util/ArrayMap; Landroid/app/ActivityThread;->mResourcePackages:Landroid/util/ArrayMap; +Landroid/app/ActivityThread;->mResourcesManager:Landroid/app/ResourcesManager; Landroid/app/ActivityThread;->mServices:Landroid/util/ArrayMap; Landroid/app/ActivityThread;->performNewIntents(Landroid/os/IBinder;Ljava/util/List;Z)V Landroid/app/ActivityThread;->performStopActivity(Landroid/os/IBinder;ZLjava/lang/String;)V @@ -146,6 +154,7 @@ Landroid/app/AlarmManager;->WINDOW_HEURISTIC:J Landroid/app/AlertDialog$Builder;->P:Lcom/android/internal/app/AlertController$AlertParams; Landroid/app/AlertDialog;->mAlert:Lcom/android/internal/app/AlertController; Landroid/app/AppGlobals;->getInitialApplication()Landroid/app/Application; +Landroid/app/AppGlobals;->getInitialPackage()Ljava/lang/String; Landroid/app/AppGlobals;->getPackageManager()Landroid/content/pm/IPackageManager; Landroid/app/Application;->attach(Landroid/content/Context;)V Landroid/app/Application;->collectActivityLifecycleCallbacks()[Ljava/lang/Object; @@ -166,21 +175,26 @@ Landroid/app/ApplicationPackageManager;->getPackageCurrentVolume(Landroid/conten Landroid/app/ApplicationPackageManager;->getPackageSizeInfoAsUser(Ljava/lang/String;ILandroid/content/pm/IPackageStatsObserver;)V Landroid/app/ApplicationPackageManager;->(Landroid/app/ContextImpl;Landroid/content/pm/IPackageManager;)V Landroid/app/ApplicationPackageManager;->mPM:Landroid/content/pm/IPackageManager; +Landroid/app/ApplicationPackageManager;->shouldShowRequestPermissionRationale(Ljava/lang/String;)Z Landroid/app/AppOpsManager;->checkOp(IILjava/lang/String;)I Landroid/app/AppOpsManager;->checkOpNoThrow(IILjava/lang/String;)I Landroid/app/AppOpsManager;->getOpsForPackage(ILjava/lang/String;[I)Ljava/util/List; Landroid/app/AppOpsManager;->mService:Lcom/android/internal/app/IAppOpsService; Landroid/app/AppOpsManager;->noteOp(I)I Landroid/app/AppOpsManager;->noteOp(IILjava/lang/String;)I +Landroid/app/AppOpsManager;->OP_AUDIO_NOTIFICATION_VOLUME:I Landroid/app/AppOpsManager;->OP_COARSE_LOCATION:I Landroid/app/AppOpsManager$OpEntry;->getDuration()I Landroid/app/AppOpsManager$OpEntry;->getRejectTime()J Landroid/app/AppOpsManager;->OP_FINE_LOCATION:I Landroid/app/AppOpsManager;->OP_GET_USAGE_STATS:I Landroid/app/AppOpsManager;->OP_POST_NOTIFICATION:I +Landroid/app/AppOpsManager;->OP_READ_CONTACTS:I Landroid/app/AppOpsManager;->OP_READ_PHONE_STATE:I Landroid/app/AppOpsManager;->OP_READ_SMS:I +Landroid/app/AppOpsManager;->OP_VIBRATE:I Landroid/app/AppOpsManager;->OP_WIFI_SCAN:I +Landroid/app/AppOpsManager;->OP_WRITE_CONTACTS:I Landroid/app/AppOpsManager;->OP_WRITE_SMS:I Landroid/app/AppOpsManager;->permissionToOpCode(Ljava/lang/String;)I Landroid/app/AppOpsManager;->strOpToOp(Ljava/lang/String;)I @@ -204,6 +218,7 @@ Landroid/app/ContextImpl;->getDisplay()Landroid/view/Display; Landroid/app/ContextImpl;->getPreferencesDir()Ljava/io/File; Landroid/app/ContextImpl;->getReceiverRestrictedContext()Landroid/content/Context; Landroid/app/ContextImpl;->mBasePackageName:Ljava/lang/String; +Landroid/app/ContextImpl;->mClassLoader:Ljava/lang/ClassLoader; Landroid/app/ContextImpl;->mContentResolver:Landroid/app/ContextImpl$ApplicationContentResolver; Landroid/app/ContextImpl;->mMainThread:Landroid/app/ActivityThread; Landroid/app/ContextImpl;->mOpPackageName:Ljava/lang/String; @@ -213,6 +228,7 @@ Landroid/app/ContextImpl;->mPackageManager:Landroid/content/pm/PackageManager; Landroid/app/ContextImpl;->mResources:Landroid/content/res/Resources; Landroid/app/ContextImpl;->mServiceCache:[Ljava/lang/Object; Landroid/app/ContextImpl;->mTheme:Landroid/content/res/Resources$Theme; +Landroid/app/ContextImpl;->mThemeResource:I Landroid/app/ContextImpl;->scheduleFinalCleanup(Ljava/lang/String;Ljava/lang/String;)V Landroid/app/ContextImpl;->setOuterContext(Landroid/content/Context;)V Landroid/app/ContextImpl;->sSharedPrefsCache:Landroid/util/ArrayMap; @@ -230,10 +246,13 @@ Landroid/app/FragmentManagerImpl;->noteStateNotSaved()V Landroid/app/Fragment;->mChildFragmentManager:Landroid/app/FragmentManagerImpl; Landroid/app/Fragment;->mWho:Ljava/lang/String; Landroid/app/IActivityManager;->bindService(Landroid/app/IApplicationThread;Landroid/os/IBinder;Landroid/content/Intent;Ljava/lang/String;Landroid/app/IServiceConnection;ILjava/lang/String;I)I +Landroid/app/IActivityManager;->broadcastIntent(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;Landroid/content/IIntentReceiver;ILjava/lang/String;Landroid/os/Bundle;[Ljava/lang/String;ILandroid/os/Bundle;ZZI)I Landroid/app/IActivityManager;->finishActivity(Landroid/os/IBinder;ILandroid/content/Intent;I)Z Landroid/app/IActivityManager;->finishReceiver(Landroid/os/IBinder;ILjava/lang/String;Landroid/os/Bundle;ZI)V Landroid/app/IActivityManager;->forceStopPackage(Ljava/lang/String;I)V +Landroid/app/IActivityManager;->getIntentSender(ILjava/lang/String;Landroid/os/IBinder;Ljava/lang/String;I[Landroid/content/Intent;[Ljava/lang/String;ILandroid/os/Bundle;I)Landroid/content/IIntentSender; Landroid/app/IActivityManager;->getLaunchedFromPackage(Landroid/os/IBinder;)Ljava/lang/String; +Landroid/app/IActivityManager;->getProviderMimeType(Landroid/net/Uri;I)Ljava/lang/String; Landroid/app/IActivityManager;->getTaskForActivity(Landroid/os/IBinder;Z)I Landroid/app/IActivityManager;->moveTaskToFront(IILandroid/os/Bundle;)V Landroid/app/IActivityManager;->publishContentProviders(Landroid/app/IApplicationThread;Ljava/util/List;)V @@ -241,16 +260,23 @@ Landroid/app/IActivityManager;->requestBugReport(I)V Landroid/app/IActivityManager;->resumeAppSwitches()V Landroid/app/IActivityManager;->setRequestedOrientation(Landroid/os/IBinder;I)V Landroid/app/IActivityManager;->setTaskResizeable(II)V +Landroid/app/IActivityManager;->stopService(Landroid/app/IApplicationThread;Landroid/content/Intent;Ljava/lang/String;I)I Landroid/app/IActivityManager$Stub$Proxy;->getConfiguration()Landroid/content/res/Configuration; Landroid/app/IActivityManager$Stub$Proxy;->getLaunchedFromUid(Landroid/os/IBinder;)I +Landroid/app/IActivityManager$Stub$Proxy;->getProcessLimit()I Landroid/app/IActivityManager$Stub$Proxy;->getProcessPss([I)[J Landroid/app/IActivityManager$Stub$Proxy;->isAppForeground(I)Z Landroid/app/IActivityManager$Stub$Proxy;->mRemote:Landroid/os/IBinder; Landroid/app/IActivityManager;->unbindService(Landroid/app/IServiceConnection;)Z +Landroid/app/IActivityManager;->unstableProviderDied(Landroid/os/IBinder;)V Landroid/app/IAlarmManager$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/app/IAlarmManager$Stub;->TRANSACTION_remove:I Landroid/app/IAlarmManager$Stub;->TRANSACTION_set:I Landroid/app/IApplicationThread;->scheduleTrimMemory(I)V +Landroid/app/INotificationManager;->cancelAllNotifications(Ljava/lang/String;I)V +Landroid/app/INotificationManager;->cancelNotificationWithTag(Ljava/lang/String;Ljava/lang/String;II)V +Landroid/app/INotificationManager;->cancelToast(Ljava/lang/String;Landroid/app/ITransientNotification;)V +Landroid/app/INotificationManager;->enqueueToast(Ljava/lang/String;Landroid/app/ITransientNotification;I)V Landroid/app/INotificationManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/INotificationManager; Landroid/app/INotificationManager$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/app/Instrumentation;->execStartActivities(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Landroid/app/Activity;[Landroid/content/Intent;Landroid/os/Bundle;)V @@ -258,9 +284,12 @@ Landroid/app/Instrumentation;->execStartActivity(Landroid/content/Context;Landro Landroid/app/Instrumentation;->execStartActivity(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Ljava/lang/String;Landroid/content/Intent;ILandroid/os/Bundle;)Landroid/app/Instrumentation$ActivityResult; Landroid/app/Instrumentation;->execStartActivity(Landroid/content/Context;Landroid/os/IBinder;Landroid/os/IBinder;Ljava/lang/String;Landroid/content/Intent;ILandroid/os/Bundle;Landroid/os/UserHandle;)Landroid/app/Instrumentation$ActivityResult; Landroid/app/IntentService;->mServiceHandler:Landroid/app/IntentService$ServiceHandler; +Landroid/app/IProcessObserver$Stub;->()V Landroid/app/ISearchManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/ISearchManager; Landroid/app/ISearchManager$Stub$Proxy;->getGlobalSearchActivity()Landroid/content/ComponentName; Landroid/app/ISearchManager$Stub$Proxy;->getWebSearchActivity()Landroid/content/ComponentName; +Landroid/app/IServiceConnection$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/IServiceConnection; +Landroid/app/IStopUserCallback;->userStopped(I)V Landroid/app/IUiModeManager$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/app/IWallpaperManager;->getWallpaper(Ljava/lang/String;Landroid/app/IWallpaperManagerCallback;ILandroid/os/Bundle;I)Landroid/os/ParcelFileDescriptor; Landroid/app/job/IJobScheduler$Stub;->asInterface(Landroid/os/IBinder;)Landroid/app/job/IJobScheduler; @@ -287,16 +316,21 @@ Landroid/app/LoadedApk;->mSplitResDirs:[Ljava/lang/String; Landroid/app/LoadedApk;->rewriteRValues(Ljava/lang/ClassLoader;Ljava/lang/String;I)V Landroid/app/LocalActivityManager;->mActivities:Ljava/util/Map; Landroid/app/LocalActivityManager;->mActivityArray:Ljava/util/ArrayList; +Landroid/app/LocalActivityManager;->mParent:Landroid/app/Activity; +Landroid/app/LocalActivityManager;->mResumed:Landroid/app/LocalActivityManager$LocalActivityRecord; +Landroid/app/LocalActivityManager;->mSingleMode:Z Landroid/app/NativeActivity;->hideIme(I)V Landroid/app/NativeActivity;->setWindowFlags(II)V Landroid/app/NativeActivity;->setWindowFormat(I)V Landroid/app/NativeActivity;->showIme(I)V Landroid/app/Notification$Builder;->mActions:Ljava/util/ArrayList; +Landroid/app/Notification$Builder;->makePublicContentView()Landroid/widget/RemoteViews; Landroid/app/Notification$Builder;->setChannel(Ljava/lang/String;)Landroid/app/Notification$Builder; Landroid/app/Notification;->isGroupSummary()Z Landroid/app/NotificationManager;->getService()Landroid/app/INotificationManager; Landroid/app/NotificationManager;->notifyAsUser(Ljava/lang/String;ILandroid/app/Notification;Landroid/os/UserHandle;)V Landroid/app/NotificationManager;->sService:Landroid/app/INotificationManager; +Landroid/app/Notification;->mChannelId:Ljava/lang/String; Landroid/app/Notification;->mGroupKey:Ljava/lang/String; Landroid/app/Notification;->mLargeIcon:Landroid/graphics/drawable/Icon; Landroid/app/Notification;->mSmallIcon:Landroid/graphics/drawable/Icon; @@ -309,6 +343,7 @@ Landroid/app/Presentation;->createPresentationContext(Landroid/content/Context;L Landroid/app/ProgressDialog;->mProgressNumber:Landroid/widget/TextView; Landroid/app/QueuedWork;->addFinisher(Ljava/lang/Runnable;)V Landroid/app/QueuedWork;->removeFinisher(Ljava/lang/Runnable;)V +Landroid/app/QueuedWork;->sFinishers:Ljava/util/LinkedList; Landroid/app/ResourcesManager;->appendLibAssetForMainAssetPath(Ljava/lang/String;Ljava/lang/String;)V Landroid/app/ResourcesManager;->getInstance()Landroid/app/ResourcesManager; Landroid/app/ResourcesManager;->mActivityResourceReferences:Ljava/util/WeakHashMap; @@ -322,7 +357,9 @@ Landroid/app/Service;->mStartCompatibility:Z Landroid/app/Service;->mThread:Landroid/app/ActivityThread; Landroid/app/Service;->mToken:Landroid/os/IBinder; Landroid/app/Service;->setForeground(Z)V +Landroid/app/SharedPreferencesImpl;->(Ljava/io/File;I)V Landroid/app/SharedPreferencesImpl;->mFile:Ljava/io/File; +Landroid/app/SharedPreferencesImpl;->startReloadIfChangedUnexpectedly()V Landroid/app/StatusBarManager;->collapsePanels()V Landroid/app/StatusBarManager;->disable(I)V Landroid/app/StatusBarManager;->expandNotificationsPanel()V @@ -429,6 +466,7 @@ Landroid/content/IContentService$Stub;->asInterface(Landroid/os/IBinder;)Landroi Landroid/content/IContentService$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/content/Intent;->ACTION_ALARM_CHANGED:Ljava/lang/String; Landroid/content/IntentFilter;->mActions:Ljava/util/ArrayList; +Landroid/content/Intent;->mExtras:Landroid/os/Bundle; Landroid/content/Intent;->putExtra(Ljava/lang/String;Landroid/os/IBinder;)Landroid/content/Intent; Landroid/content/pm/ActivityInfo;->resizeMode:I Landroid/content/pm/ApplicationInfo;->enabledSetting:I @@ -439,18 +477,33 @@ Landroid/content/pm/ApplicationInfo;->primaryCpuAbi:Ljava/lang/String; Landroid/content/pm/ApplicationInfo;->privateFlags:I Landroid/content/pm/ApplicationInfo;->scanPublicSourceDir:Ljava/lang/String; Landroid/content/pm/ApplicationInfo;->scanSourceDir:Ljava/lang/String; +Landroid/content/pm/ApplicationInfo;->secondaryCpuAbi:Ljava/lang/String; Landroid/content/pm/ApplicationInfo;->secondaryNativeLibraryDir:Ljava/lang/String; Landroid/content/pm/ComponentInfo;->getComponentName()Landroid/content/ComponentName; +Landroid/content/pm/IPackageDataObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageDataObserver; +Landroid/content/pm/IPackageManager;->addPermissionAsync(Landroid/content/pm/PermissionInfo;)Z +Landroid/content/pm/IPackageManager;->addPermission(Landroid/content/pm/PermissionInfo;)Z +Landroid/content/pm/IPackageManager;->getComponentEnabledSetting(Landroid/content/ComponentName;I)I +Landroid/content/pm/IPackageManager;->getInstalledPackages(II)Landroid/content/pm/ParceledListSlice; +Landroid/content/pm/IPackageManager;->getInstallerPackageName(Ljava/lang/String;)Ljava/lang/String; Landroid/content/pm/IPackageManager;->getInstallLocation()I Landroid/content/pm/IPackageManager;->getLastChosenActivity(Landroid/content/Intent;Ljava/lang/String;I)Landroid/content/pm/ResolveInfo; +Landroid/content/pm/IPackageManager;->getProviderInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ProviderInfo; +Landroid/content/pm/IPackageManager;->getReceiverInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ActivityInfo; +Landroid/content/pm/IPackageManager;->getServiceInfo(Landroid/content/ComponentName;II)Landroid/content/pm/ServiceInfo; Landroid/content/pm/IPackageManager;->setApplicationEnabledSetting(Ljava/lang/String;IIILjava/lang/String;)V Landroid/content/pm/IPackageManager;->setComponentEnabledSetting(Landroid/content/ComponentName;III)V +Landroid/content/pm/IPackageManager;->setInstallerPackageName(Ljava/lang/String;Ljava/lang/String;)V Landroid/content/pm/IPackageManager;->setLastChosenActivity(Landroid/content/Intent;Ljava/lang/String;ILandroid/content/IntentFilter;ILandroid/content/ComponentName;)V Landroid/content/pm/IPackageManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageManager; +Landroid/content/pm/IPackageManager$Stub$Proxy;->getInstalledPackages(II)Landroid/content/pm/ParceledListSlice; Landroid/content/pm/IPackageManager$Stub$Proxy;->getPackageInfo(Ljava/lang/String;II)Landroid/content/pm/PackageInfo; Landroid/content/pm/IPackageManager$Stub$Proxy;->getPackagesForUid(I)[Ljava/lang/String; Landroid/content/pm/IPackageManager$Stub$Proxy;->getSystemSharedLibraryNames()[Ljava/lang/String; +Landroid/content/pm/IPackageMoveObserver$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageMoveObserver; +Landroid/content/pm/IPackageMoveObserver$Stub;->()V Landroid/content/pm/IPackageStatsObserver$Stub;->()V +Landroid/content/pm/IShortcutService$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/content/pm/LauncherActivityInfo;->mActivityInfo:Landroid/content/pm/ActivityInfo; Landroid/content/pm/LauncherApps;->mPm:Landroid/content/pm/PackageManager; Landroid/content/pm/LauncherApps;->startShortcut(Ljava/lang/String;Ljava/lang/String;Landroid/graphics/Rect;Landroid/os/Bundle;I)V @@ -475,14 +528,29 @@ Landroid/content/pm/PackageParser;->collectCertificates(Landroid/content/pm/Pack Landroid/content/pm/PackageParser$Component;->className:Ljava/lang/String; Landroid/content/pm/PackageParser$Component;->getComponentName()Landroid/content/ComponentName; Landroid/content/pm/PackageParser$Component;->intents:Ljava/util/ArrayList; +Landroid/content/pm/PackageParser;->generateActivityInfo(Landroid/content/pm/PackageParser$Activity;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ActivityInfo; Landroid/content/pm/PackageParser;->generatePackageInfo(Landroid/content/pm/PackageParser$Package;[IIJJLjava/util/Set;Landroid/content/pm/PackageUserState;I)Landroid/content/pm/PackageInfo; Landroid/content/pm/PackageParser;->generatePackageInfo(Landroid/content/pm/PackageParser$Package;[IIJJLjava/util/Set;Landroid/content/pm/PackageUserState;)Landroid/content/pm/PackageInfo; +Landroid/content/pm/PackageParser;->generateProviderInfo(Landroid/content/pm/PackageParser$Provider;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ProviderInfo; +Landroid/content/pm/PackageParser;->generateServiceInfo(Landroid/content/pm/PackageParser$Service;ILandroid/content/pm/PackageUserState;I)Landroid/content/pm/ServiceInfo; Landroid/content/pm/PackageParser;->()V +Landroid/content/pm/PackageParser$Instrumentation;->info:Landroid/content/pm/InstrumentationInfo; +Landroid/content/pm/PackageParser$IntentInfo;->banner:I +Landroid/content/pm/PackageParser$IntentInfo;->hasDefault:Z +Landroid/content/pm/PackageParser$IntentInfo;->icon:I +Landroid/content/pm/PackageParser$IntentInfo;->()V +Landroid/content/pm/PackageParser$IntentInfo;->labelRes:I +Landroid/content/pm/PackageParser$IntentInfo;->logo:I +Landroid/content/pm/PackageParser$IntentInfo;->nonLocalizedLabel:Ljava/lang/CharSequence; Landroid/content/pm/PackageParser$Package;->activities:Ljava/util/ArrayList; Landroid/content/pm/PackageParser$Package;->applicationInfo:Landroid/content/pm/ApplicationInfo; +Landroid/content/pm/PackageParser$Package;->instrumentation:Ljava/util/ArrayList; +Landroid/content/pm/PackageParser$Package;->mAppMetaData:Landroid/os/Bundle; Landroid/content/pm/PackageParser$Package;->mVersionCode:I Landroid/content/pm/PackageParser$Package;->mVersionName:Ljava/lang/String; Landroid/content/pm/PackageParser$Package;->packageName:Ljava/lang/String; +Landroid/content/pm/PackageParser$Package;->permissionGroups:Ljava/util/ArrayList; +Landroid/content/pm/PackageParser$Package;->permissions:Ljava/util/ArrayList; Landroid/content/pm/PackageParser$Package;->providers:Ljava/util/ArrayList; Landroid/content/pm/PackageParser$Package;->receivers:Ljava/util/ArrayList; Landroid/content/pm/PackageParser$Package;->requestedPermissions:Ljava/util/ArrayList; @@ -493,6 +561,7 @@ Landroid/content/pm/PackageParser;->parsePackage(Ljava/io/File;I)Landroid/conten Landroid/content/pm/PackageParser;->parsePackage(Ljava/io/File;IZ)Landroid/content/pm/PackageParser$Package; Landroid/content/pm/PackageParser$Provider;->info:Landroid/content/pm/ProviderInfo; Landroid/content/pm/PackageParser$ProviderIntentInfo;->provider:Landroid/content/pm/PackageParser$Provider; +Landroid/content/pm/PackageParser$Service;->info:Landroid/content/pm/ServiceInfo; Landroid/content/pm/PackageParser$ServiceIntentInfo;->service:Landroid/content/pm/PackageParser$Service; Landroid/content/pm/PackageUserState;->()V Landroid/content/pm/ParceledListSlice;->(Ljava/util/List;)V @@ -531,14 +600,18 @@ Landroid/content/res/ColorStateList;->mFactory:Landroid/content/res/ColorStateLi Landroid/content/res/CompatibilityInfo;->applicationScale:F Landroid/content/res/CompatibilityInfo;->DEFAULT_COMPATIBILITY_INFO:Landroid/content/res/CompatibilityInfo; Landroid/content/res/DrawableCache;->getInstance(JLandroid/content/res/Resources;Landroid/content/res/Resources$Theme;)Landroid/graphics/drawable/Drawable; +Landroid/content/res/DrawableCache;->()V Landroid/content/res/ObbInfo;->salt:[B Landroid/content/res/Resources;->getCompatibilityInfo()Landroid/content/res/CompatibilityInfo; +Landroid/content/res/ResourcesImpl;->getAssets()Landroid/content/res/AssetManager; Landroid/content/res/ResourcesImpl;->mAccessLock:Ljava/lang/Object; +Landroid/content/res/ResourcesImpl;->mAnimatorCache:Landroid/content/res/ConfigurationBoundResourceCache; Landroid/content/res/ResourcesImpl;->mAssets:Landroid/content/res/AssetManager; Landroid/content/res/ResourcesImpl;->mColorDrawableCache:Landroid/content/res/DrawableCache; Landroid/content/res/ResourcesImpl;->mConfiguration:Landroid/content/res/Configuration; Landroid/content/res/ResourcesImpl;->mDrawableCache:Landroid/content/res/DrawableCache; Landroid/content/res/ResourcesImpl;->mPreloading:Z +Landroid/content/res/ResourcesImpl;->mStateListAnimatorCache:Landroid/content/res/ConfigurationBoundResourceCache; Landroid/content/res/ResourcesImpl;->sPreloadedColorDrawables:Landroid/util/LongSparseArray; Landroid/content/res/ResourcesImpl;->sPreloadedComplexColors:Landroid/util/LongSparseArray; Landroid/content/res/ResourcesImpl;->sPreloadedDrawables:[Landroid/util/LongSparseArray; @@ -554,6 +627,7 @@ Landroid/content/res/Resources;->mTypedArrayPool:Landroid/util/Pools$Synchronize Landroid/content/res/Resources;->setCompatibilityInfo(Landroid/content/res/CompatibilityInfo;)V Landroid/content/res/Resources;->updateSystemConfiguration(Landroid/content/res/Configuration;Landroid/util/DisplayMetrics;Landroid/content/res/CompatibilityInfo;)V Landroid/content/res/StringBlock;->(JZ)V +Landroid/content/res/ThemedResourceCache;->onConfigurationChange(I)V Landroid/content/res/TypedArray;->extractThemeAttrs()[I Landroid/content/res/TypedArray;->getNonConfigurationString(II)Ljava/lang/String; Landroid/content/res/TypedArray;->getValueAt(ILandroid/util/TypedValue;)Z @@ -572,7 +646,10 @@ Landroid/content/res/XmlBlock;->newParser()Landroid/content/res/XmlResourceParse Landroid/content/res/XmlBlock$Parser;->mBlock:Landroid/content/res/XmlBlock; Landroid/content/res/XmlBlock$Parser;->mParseState:J Landroid/content/SearchRecentSuggestionsProvider;->mSuggestionProjection:[Ljava/lang/String; +Landroid/content/SyncContext;->setStatusText(Ljava/lang/String;)V Landroid/content/SyncStatusInfo;->lastSuccessTime:J +Landroid/content/UriMatcher;->mChildren:Ljava/util/ArrayList; +Landroid/content/UriMatcher;->mText:Ljava/lang/String; Landroid/database/AbstractCursor;->mExtras:Landroid/os/Bundle; Landroid/database/AbstractCursor;->mNotifyUri:Landroid/net/Uri; Landroid/database/AbstractCursor;->mRowIdColumnIndex:I @@ -591,6 +668,7 @@ Landroid/database/sqlite/SQLiteDebug$PagerStats;->memoryUsed:I Landroid/database/sqlite/SQLiteDebug$PagerStats;->pageCacheOverflow:I Landroid/database/sqlite/SQLiteOpenHelper;->mName:Ljava/lang/String; Landroid/ddm/DdmHandleAppName;->getAppName()Ljava/lang/String; +Landroid/graphics/AvoidXfermode$Mode;->AVOID:Landroid/graphics/AvoidXfermode$Mode; Landroid/graphics/AvoidXfermode$Mode;->TARGET:Landroid/graphics/AvoidXfermode$Mode; Landroid/graphics/BaseCanvas;->mNativeCanvasWrapper:J Landroid/graphics/Bitmap$Config;->nativeInt:I @@ -612,10 +690,10 @@ Landroid/graphics/Camera;->native_instance:J Landroid/graphics/Canvas;->(J)V Landroid/graphics/Canvas;->release()V Landroid/graphics/Canvas;->save(I)I -Landroid/graphics/Canvas;->saveLayer(Landroid/graphics/RectF;Landroid/graphics/Paint;I)I -Landroid/graphics/Canvas;->saveLayer(FFFFLandroid/graphics/Paint;I)I -Landroid/graphics/Canvas;->saveLayerAlpha(Landroid/graphics/RectF;II)I Landroid/graphics/Canvas;->saveLayerAlpha(FFFFII)I +Landroid/graphics/Canvas;->saveLayerAlpha(Landroid/graphics/RectF;II)I +Landroid/graphics/Canvas;->saveLayer(FFFFLandroid/graphics/Paint;I)I +Landroid/graphics/Canvas;->saveLayer(Landroid/graphics/RectF;Landroid/graphics/Paint;I)I Landroid/graphics/ColorMatrixColorFilter;->setColorMatrix(Landroid/graphics/ColorMatrix;)V Landroid/graphics/drawable/AnimatedImageDrawable;->onAnimationEnd()V Landroid/graphics/drawable/AnimatedStateListDrawable$AnimatedStateListState;->mStateIds:Landroid/util/SparseIntArray; @@ -628,6 +706,7 @@ Landroid/graphics/drawable/BitmapDrawable;->getTint()Landroid/content/res/ColorS Landroid/graphics/drawable/BitmapDrawable;->getTintMode()Landroid/graphics/PorterDuff$Mode; Landroid/graphics/drawable/BitmapDrawable;->mTargetDensity:I Landroid/graphics/drawable/BitmapDrawable;->setBitmap(Landroid/graphics/Bitmap;)V +Landroid/graphics/drawable/ColorDrawable$ColorState;->mUseColor:I Landroid/graphics/drawable/DrawableContainer$DrawableContainerState;->mConstantPadding:Landroid/graphics/Rect; Landroid/graphics/drawable/DrawableContainer;->getOpticalInsets()Landroid/graphics/Insets; Landroid/graphics/drawable/DrawableContainer;->mDrawableContainerState:Landroid/graphics/drawable/DrawableContainer$DrawableContainerState; @@ -771,6 +850,7 @@ Landroid/hardware/Camera;->openLegacy(II)Landroid/hardware/Camera; Landroid/hardware/Camera;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V Landroid/hardware/display/WifiDisplayStatus;->mActiveDisplay:Landroid/hardware/display/WifiDisplay; Landroid/hardware/display/WifiDisplayStatus;->mDisplays:[Landroid/hardware/display/WifiDisplay; +Landroid/hardware/fingerprint/IFingerprintService$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/hardware/HardwareBuffer;->(J)V Landroid/hardware/HardwareBuffer;->mNativeObject:J Landroid/hardware/input/IInputManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/hardware/input/IInputManager; @@ -849,6 +929,9 @@ Landroid/icu/text/Transliterator;->transliterate(Ljava/lang/String;)Ljava/lang/S Landroid/icu/text/UFormat;->getLocale(Landroid/icu/util/ULocale$Type;)Landroid/icu/util/ULocale; Landroid/icu/util/Calendar;->getLocale(Landroid/icu/util/ULocale$Type;)Landroid/icu/util/ULocale; Landroid/inputmethodservice/InputMethodService;->mExtractEditText:Landroid/inputmethodservice/ExtractEditText; +Landroid/inputmethodservice/InputMethodService;->mRootView:Landroid/view/View; +Landroid/inputmethodservice/InputMethodService;->mSettingsObserver:Landroid/inputmethodservice/InputMethodService$SettingsObserver; +Landroid/inputmethodservice/InputMethodService$SettingsObserver;->shouldShowImeWithHardKeyboard()Z Landroid/location/CountryDetector;->detectCountry()Landroid/location/Country; Landroid/location/Country;->getCountryIso()Ljava/lang/String; Landroid/location/Country;->getSource()I @@ -945,11 +1028,14 @@ Landroid/media/AudioTrack;->mNativeTrackInJavaObj:J Landroid/media/AudioTrack;->mStreamType:I Landroid/media/AudioTrack;->native_release()V Landroid/media/AudioTrack;->postEventFromNative(Ljava/lang/Object;IIILjava/lang/Object;)V +Landroid/media/ExifInterface;->getDateTime()J Landroid/media/IAudioService;->getStreamMaxVolume(I)I Landroid/media/IAudioService;->getStreamVolume(I)I Landroid/media/IAudioService;->setStreamVolume(IIILjava/lang/String;)V Landroid/media/IAudioService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IAudioService; Landroid/media/IAudioService$Stub$Proxy;->(Landroid/os/IBinder;)V +Landroid/media/IMediaScannerService;->scanFile(Ljava/lang/String;Ljava/lang/String;)V +Landroid/media/IMediaScannerService$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IMediaScannerService; Landroid/media/IRemoteDisplayCallback;->onStateChanged(Landroid/media/RemoteDisplayState;)V Landroid/media/IVolumeController$Stub;->asInterface(Landroid/os/IBinder;)Landroid/media/IVolumeController; Landroid/media/JetPlayer;->mNativePlayerInJavaObj:J @@ -1060,11 +1146,16 @@ Landroid/net/ConnectivityManager;->TYPE_NONE:I Landroid/net/ConnectivityManager;->TYPE_PROXY:I Landroid/net/ConnectivityManager;->TYPE_WIFI_P2P:I Landroid/net/IConnectivityManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/net/IConnectivityManager; +Landroid/net/IConnectivityManager$Stub$Proxy;->getActiveLinkProperties()Landroid/net/LinkProperties; +Landroid/net/IConnectivityManager$Stub$Proxy;->getActiveNetworkInfo()Landroid/net/NetworkInfo; +Landroid/net/IConnectivityManager$Stub$Proxy;->getAllNetworkInfo()[Landroid/net/NetworkInfo; Landroid/net/IConnectivityManager$Stub$Proxy;->getAllNetworks()[Landroid/net/Network; Landroid/net/IConnectivityManager$Stub$Proxy;->getTetherableIfaces()[Ljava/lang/String; Landroid/net/IConnectivityManager$Stub$Proxy;->getTetherableUsbRegexs()[Ljava/lang/String; +Landroid/net/IConnectivityManager$Stub$Proxy;->getTetheredIfaces()[Ljava/lang/String; Landroid/net/IConnectivityManager$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/net/INetworkStatsService$Stub$Proxy;->getMobileIfaces()[Ljava/lang/String; +Landroid/net/INetworkStatsService$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/net/IpConfiguration;->httpProxy:Landroid/net/ProxyInfo; Landroid/net/LinkProperties;->setHttpProxy(Landroid/net/ProxyInfo;)V Landroid/net/LocalSocketImpl;->inboundFileDescriptors:[Ljava/io/FileDescriptor; @@ -1088,6 +1179,7 @@ Landroid/net/NetworkStats;->txBytes:[J Landroid/net/NetworkStats;->txPackets:[J Landroid/net/NetworkStats;->uid:[I Landroid/net/NetworkTemplate;->buildTemplateWifi()Landroid/net/NetworkTemplate; +Landroid/net/Proxy;->getProxy(Landroid/content/Context;Ljava/lang/String;)Ljava/net/Proxy; Landroid/net/ProxyInfo;->(Ljava/lang/String;ILjava/lang/String;)V Landroid/net/SntpClient;->()V Landroid/net/SSLCertificateSocketFactory;->castToOpenSSLSocket(Ljava/net/Socket;)Lcom/android/org/conscrypt/OpenSSLSocketImpl; @@ -1114,6 +1206,7 @@ Landroid/net/SSLCertificateSocketFactory;->setSoWriteTimeout(Ljava/net/Socket;I) Landroid/net/SSLCertificateSocketFactory;->TAG:Ljava/lang/String; Landroid/net/SSLCertificateSocketFactory;->verifyHostname(Ljava/net/Socket;Ljava/lang/String;)V Landroid/net/SSLSessionCache;->mSessionCache:Lcom/android/org/conscrypt/SSLClientSessionCache; +Landroid/net/TrafficStats;->getMobileIfaces()[Ljava/lang/String; Landroid/net/TrafficStats;->getRxBytes(Ljava/lang/String;)J Landroid/net/TrafficStats;->getStatsService()Landroid/net/INetworkStatsService; Landroid/net/TrafficStats;->getTxBytes(Ljava/lang/String;)J @@ -1122,6 +1215,8 @@ Landroid/net/wifi/IWifiManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/ Landroid/net/wifi/IWifiManager$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/net/wifi/p2p/WifiP2pGroup;->getNetworkId()I Landroid/net/wifi/p2p/WifiP2pGroupList;->getGroupList()Ljava/util/Collection; +Landroid/net/wifi/p2p/WifiP2pManager$Channel;->mAsyncChannel:Lcom/android/internal/util/AsyncChannel; +Landroid/net/wifi/p2p/WifiP2pManager$Channel;->putListener(Ljava/lang/Object;)I Landroid/net/wifi/p2p/WifiP2pManager;->deletePersistentGroup(Landroid/net/wifi/p2p/WifiP2pManager$Channel;ILandroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V Landroid/net/wifi/p2p/WifiP2pManager;->requestPersistentGroupInfo(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Landroid/net/wifi/p2p/WifiP2pManager$PersistentGroupInfoListener;)V Landroid/net/wifi/p2p/WifiP2pManager;->setDeviceName(Landroid/net/wifi/p2p/WifiP2pManager$Channel;Ljava/lang/String;Landroid/net/wifi/p2p/WifiP2pManager$ActionListener;)V @@ -1155,10 +1250,12 @@ Landroid/net/wifi/ScanResult;->wifiSsid:Landroid/net/wifi/WifiSsid; Landroid/net/wifi/WifiConfiguration;->apBand:I Landroid/net/wifi/WifiConfiguration;->apChannel:I Landroid/net/wifi/WifiConfiguration;->defaultGwMacAddress:Ljava/lang/String; +Landroid/net/wifi/WifiConfiguration;->lastConnectUid:I Landroid/net/wifi/WifiConfiguration;->mIpConfiguration:Landroid/net/IpConfiguration; Landroid/net/wifi/WifiConfiguration;->validatedInternetAccess:Z Landroid/net/wifi/WifiEnterpriseConfig;->getCaCertificateAlias()Ljava/lang/String; Landroid/net/wifi/WifiEnterpriseConfig;->getClientCertificateAlias()Ljava/lang/String; +Landroid/net/wifi/WifiInfo;->DEFAULT_MAC_ADDRESS:Ljava/lang/String; Landroid/net/wifi/WifiInfo;->getMeteredHint()Z Landroid/net/wifi/WifiInfo;->mMacAddress:Ljava/lang/String; Landroid/net/wifi/WifiInfo;->removeDoubleQuotes(Ljava/lang/String;)Ljava/lang/String; @@ -1180,17 +1277,30 @@ Landroid/os/AsyncTask;->mTaskInvoked:Ljava/util/concurrent/atomic/AtomicBoolean; Landroid/os/AsyncTask;->mWorker:Landroid/os/AsyncTask$WorkerRunnable; Landroid/os/AsyncTask;->sDefaultExecutor:Ljava/util/concurrent/Executor; Landroid/os/AsyncTask;->setDefaultExecutor(Ljava/util/concurrent/Executor;)V +Landroid/os/BatteryStats$Counter;->getCountLocked(I)I Landroid/os/BatteryStats;->getUidStats()Landroid/util/SparseArray; Landroid/os/BatteryStats$HistoryItem;->states2:I Landroid/os/BatteryStats;->NUM_DATA_CONNECTION_TYPES:I Landroid/os/BatteryStats;->startIteratingHistoryLocked()Z Landroid/os/BatteryStats$Timer;->getTotalTimeLocked(JI)J +Landroid/os/BatteryStats$Uid;->getAudioTurnedOnTimer()Landroid/os/BatteryStats$Timer; Landroid/os/BatteryStats$Uid;->getFullWifiLockTime(JI)J +Landroid/os/BatteryStats$Uid;->getPackageStats()Landroid/util/ArrayMap; Landroid/os/BatteryStats$Uid;->getProcessStats()Landroid/util/ArrayMap; Landroid/os/BatteryStats$Uid;->getSensorStats()Landroid/util/SparseArray; Landroid/os/BatteryStats$Uid;->getUid()I +Landroid/os/BatteryStats$Uid;->getVideoTurnedOnTimer()Landroid/os/BatteryStats$Timer; Landroid/os/BatteryStats$Uid;->getWifiMulticastTime(JI)J Landroid/os/BatteryStats$Uid;->getWifiScanTime(JI)J +Landroid/os/BatteryStats$Uid$Pkg;->getServiceStats()Landroid/util/ArrayMap; +Landroid/os/BatteryStats$Uid$Pkg;->getWakeupAlarmStats()Landroid/util/ArrayMap; +Landroid/os/BatteryStats$Uid$Pkg$Serv;->getLaunches(I)I +Landroid/os/BatteryStats$Uid$Pkg$Serv;->getStartTime(JI)J +Landroid/os/BatteryStats$Uid$Proc;->countExcessivePowers()I +Landroid/os/BatteryStats$Uid$Proc$ExcessivePower;->overTime:J +Landroid/os/BatteryStats$Uid$Proc$ExcessivePower;->type:I +Landroid/os/BatteryStats$Uid$Proc$ExcessivePower;->usedTime:J +Landroid/os/BatteryStats$Uid$Proc;->getExcessivePower(I)Landroid/os/BatteryStats$Uid$Proc$ExcessivePower; Landroid/os/BatteryStats$Uid$Proc;->getForegroundTime(I)J Landroid/os/BatteryStats$Uid$Proc;->getSystemTime(I)J Landroid/os/BatteryStats$Uid$Proc;->getUserTime(I)J @@ -1237,6 +1347,7 @@ Landroid/os/Debug$MemoryInfo;->otherSwappedOut:I Landroid/os/Debug$MemoryInfo;->otherSwappedOutPss:I Landroid/os/Environment;->buildExternalStorageAppDataDirs(Ljava/lang/String;)[Ljava/io/File; Landroid/os/Environment;->getVendorDirectory()Ljava/io/File; +Landroid/os/Environment;->maybeTranslateEmulatedPathToInternal(Ljava/io/File;)Ljava/io/File; Landroid/os/FileObserver$ObserverThread;->onEvent(IILjava/lang/String;)V Landroid/os/FileUtils;->checksumCrc32(Ljava/io/File;)J Landroid/os/FileUtils;->copyFile(Ljava/io/File;Ljava/io/File;)Z @@ -1248,6 +1359,7 @@ Landroid/os/FileUtils;->setPermissions(Ljava/io/File;III)I Landroid/os/FileUtils;->setPermissions(Ljava/lang/String;III)I Landroid/os/FileUtils;->stringToFile(Ljava/io/File;Ljava/lang/String;)V Landroid/os/FileUtils;->stringToFile(Ljava/lang/String;Ljava/lang/String;)V +Landroid/os/FileUtils;->sync(Ljava/io/FileOutputStream;)Z Landroid/os/Handler;->getIMessenger()Landroid/os/IMessenger; Landroid/os/Handler;->hasCallbacks(Ljava/lang/Runnable;)Z Landroid/os/Handler;->(Z)V @@ -1262,6 +1374,7 @@ Landroid/os/IPowerManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/os/IP Landroid/os/IPowerManager$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/os/IPowerManager$Stub$Proxy;->isLightDeviceIdleMode()Z Landroid/os/IPowerManager;->userActivity(JII)V +Landroid/os/IServiceManager;->checkService(Ljava/lang/String;)Landroid/os/IBinder; Landroid/os/IServiceManager;->getService(Ljava/lang/String;)Landroid/os/IBinder; Landroid/os/IUserManager$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/os/Looper;->mQueue:Landroid/os/MessageQueue; @@ -1305,6 +1418,7 @@ Landroid/os/Process;->getUidForPid(I)I Landroid/os/Process;->isIsolated(I)Z Landroid/os/Process;->readProcFile(Ljava/lang/String;[I[Ljava/lang/String;[J[F)Z Landroid/os/Process;->readProcLines(Ljava/lang/String;[Ljava/lang/String;[J)V +Landroid/os/Process;->setArgV0(Ljava/lang/String;)V Landroid/os/SELinux;->isSELinuxEnabled()Z Landroid/os/SELinux;->isSELinuxEnforced()Z Landroid/os/ServiceManager;->addService(Ljava/lang/String;Landroid/os/IBinder;)V @@ -1466,13 +1580,16 @@ Landroid/preference/PreferenceScreen;->mRootAdapter:Landroid/widget/ListAdapter; Landroid/print/PrinterId;->getServiceName()Landroid/content/ComponentName; Landroid/print/PrintJobInfo;->getAdvancedOptions()Landroid/os/Bundle; Landroid/print/PrintJobInfo;->getDocumentInfo()Landroid/print/PrintDocumentInfo; +Landroid/provider/Browser$BookmarkColumns;->DATE:Ljava/lang/String; Landroid/provider/Browser;->BOOKMARKS_URI:Landroid/net/Uri; Landroid/provider/Browser;->canClearHistory(Landroid/content/ContentResolver;)Z Landroid/provider/Browser;->clearHistory(Landroid/content/ContentResolver;)V Landroid/provider/Browser;->clearSearches(Landroid/content/ContentResolver;)V Landroid/provider/Browser;->deleteFromHistory(Landroid/content/ContentResolver;Ljava/lang/String;)V Landroid/provider/Browser;->getVisitedHistory(Landroid/content/ContentResolver;)[Ljava/lang/String; +Landroid/provider/Browser;->SEARCHES_URI:Landroid/net/Uri; Landroid/provider/Browser;->sendString(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V +Landroid/provider/Browser;->updateVisitedHistory(Landroid/content/ContentResolver;Ljava/lang/String;Z)V Landroid/provider/CalendarContract$CalendarAlerts;->findNextAlarmTime(Landroid/content/ContentResolver;J)J Landroid/provider/CalendarContract$CalendarAlerts;->rescheduleMissedAlarms(Landroid/content/ContentResolver;Landroid/content/Context;Landroid/app/AlarmManager;)V Landroid/provider/Settings$ContentProviderHolder;->mContentProvider:Landroid/content/IContentProvider; @@ -1700,6 +1817,7 @@ Landroid/R$styleable;->View_visibility:I Landroid/R$styleable;->Window:[I Landroid/R$styleable;->Window_windowBackground:I Landroid/R$styleable;->Window_windowFrame:I +Landroid/security/keystore/AndroidKeyStoreProvider;->getKeyStoreOperationHandle(Ljava/lang/Object;)J Landroid/security/KeyStore;->getInstance()Landroid/security/KeyStore; Landroid/security/keystore/KeychainProtectionParams;->clearSecret()V Landroid/security/keystore/KeychainProtectionParams;->getKeyDerivationParams()Landroid/security/keystore/KeyDerivationParams; @@ -1848,6 +1966,7 @@ Landroid/telephony/SmsMessage;->mWrappedSmsMessage:Lcom/android/internal/telepho Landroid/telephony/SubscriptionManager;->getActiveSubscriptionIdList()[I Landroid/telephony/SubscriptionManager;->getAllSubscriptionInfoCount()I Landroid/telephony/SubscriptionManager;->getAllSubscriptionInfoList()Ljava/util/List; +Landroid/telephony/SubscriptionManager;->getDefaultDataPhoneId()I Landroid/telephony/SubscriptionManager;->getDefaultDataSubscriptionInfo()Landroid/telephony/SubscriptionInfo; Landroid/telephony/SubscriptionManager;->getDefaultSmsPhoneId()I Landroid/telephony/SubscriptionManager;->getDefaultVoiceSubscriptionInfo()Landroid/telephony/SubscriptionInfo; @@ -1887,6 +2006,7 @@ Landroid/telephony/TelephonyManager;->()V Landroid/telephony/TelephonyManager;->isMultiSimEnabled()Z Landroid/telephony/TelephonyManager;->isNetworkRoaming(I)Z Landroid/telephony/TelephonyManager;->isVolteAvailable()Z +Landroid/telephony/TelephonyManager;->mSubscriptionManager:Landroid/telephony/SubscriptionManager; Landroid/text/AndroidBidi;->bidi(I[C[B)I Landroid/text/DynamicLayout;->(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;Landroid/text/TextDirectionHeuristic;FFZIIILandroid/text/TextUtils$TruncateAt;I)V Landroid/text/DynamicLayout;->sStaticLayout:Landroid/text/StaticLayout; @@ -1943,6 +2063,7 @@ Landroid/text/StaticLayout$LineBreaks;->widths:[F Landroid/text/StaticLayout;->mColumns:I Landroid/text/StaticLayout;->mLineCount:I Landroid/text/StaticLayout;->mLines:[I +Landroid/text/StaticLayout;->mMaximumVisibleLineCount:I Landroid/text/TextLine;->mCharacterStyleSpanSet:Landroid/text/SpanSet; Landroid/text/TextLine;->mMetricAffectingSpanSpanSet:Landroid/text/SpanSet; Landroid/text/TextLine;->mReplacementSpanSpanSet:Landroid/text/SpanSet; @@ -1974,6 +2095,8 @@ Landroid/util/Pools$SynchronizedPool;->acquire()Ljava/lang/Object; Landroid/util/Pools$SynchronizedPool;->(I)V Landroid/util/Rational;->mDenominator:I Landroid/util/Rational;->mNumerator:I +Landroid/util/Singleton;->get()Ljava/lang/Object; +Landroid/util/Singleton;->()V Landroid/util/Singleton;->mInstance:Ljava/lang/Object; Landroid/util/Slog;->d(Ljava/lang/String;Ljava/lang/String;)I Landroid/util/Slog;->w(Ljava/lang/String;Ljava/lang/String;)I @@ -1982,6 +2105,7 @@ Landroid/util/SparseIntArray;->mSize:I Landroid/util/SparseIntArray;->mValues:[I Landroid/view/accessibility/AccessibilityManager;->getInstance(Landroid/content/Context;)Landroid/view/accessibility/AccessibilityManager; Landroid/view/accessibility/AccessibilityManager;->isHighTextContrastEnabled()Z +Landroid/view/accessibility/AccessibilityManager;->mAccessibilityStateChangeListeners:Landroid/util/ArrayMap; Landroid/view/accessibility/AccessibilityManager;->mIsEnabled:Z Landroid/view/accessibility/AccessibilityManager;->mIsHighTextContrastEnabled:Z Landroid/view/accessibility/AccessibilityManager;->sInstance:Landroid/view/accessibility/AccessibilityManager; @@ -2031,6 +2155,7 @@ Landroid/view/InputEventSender;->dispatchInputEventFinished(IZ)V Landroid/view/inputmethod/InputMethodInfo;->mSubtypes:Landroid/view/inputmethod/InputMethodSubtypeArray; Landroid/view/inputmethod/InputMethodManager;->finishInputLocked()V Landroid/view/inputmethod/InputMethodManager;->focusIn(Landroid/view/View;)V +Landroid/view/inputmethod/InputMethodManager;->focusOut(Landroid/view/View;)V Landroid/view/inputmethod/InputMethodManager;->getInputMethodWindowVisibleHeight()I Landroid/view/inputmethod/InputMethodManager;->mCurId:Ljava/lang/String; Landroid/view/inputmethod/InputMethodManager;->mCurRootView:Landroid/view/View; @@ -2039,6 +2164,7 @@ Landroid/view/inputmethod/InputMethodManager;->mNextServedView:Landroid/view/Vie Landroid/view/inputmethod/InputMethodManager;->mServedView:Landroid/view/View; Landroid/view/inputmethod/InputMethodManager;->mService:Lcom/android/internal/view/IInputMethodManager; Landroid/view/inputmethod/InputMethodManager;->notifyUserAction()V +Landroid/view/inputmethod/InputMethodManager;->peekInstance()Landroid/view/inputmethod/InputMethodManager; Landroid/view/inputmethod/InputMethodManager;->showSoftInputUnchecked(ILandroid/os/ResultReceiver;)V Landroid/view/inputmethod/InputMethodManager;->sInstance:Landroid/view/inputmethod/InputMethodManager; Landroid/view/inputmethod/InputMethodManager;->windowDismissed(Landroid/os/IBinder;)V @@ -2052,6 +2178,7 @@ Landroid/view/IWindowManager;->setShelfHeight(ZI)V Landroid/view/IWindowManager;->setStrictModeVisualIndicatorPreference(Ljava/lang/String;)V Landroid/view/IWindowManager$Stub;->asInterface(Landroid/os/IBinder;)Landroid/view/IWindowManager; Landroid/view/IWindowManager$Stub$Proxy;->getBaseDisplayDensity(I)I +Landroid/view/IWindowManager$Stub$Proxy;->getDockedStackSide()I Landroid/view/IWindowManager$Stub$Proxy;->getInitialDisplayDensity(I)I Landroid/view/IWindowManager$Stub$Proxy;->hasNavigationBar()Z Landroid/view/IWindowManager$Stub$Proxy;->(Landroid/os/IBinder;)V @@ -2082,6 +2209,7 @@ Landroid/view/LayoutInflater;->mFactorySet:Z Landroid/view/LayoutInflater;->mPrivateFactory:Landroid/view/LayoutInflater$Factory2; Landroid/view/LayoutInflater;->sConstructorMap:Ljava/util/HashMap; Landroid/view/LayoutInflater;->setPrivateFactory(Landroid/view/LayoutInflater$Factory2;)V +Landroid/view/MotionEvent;->getPointerIdBits()I Landroid/view/MotionEvent;->HISTORY_CURRENT:I Landroid/view/MotionEvent;->mNativePtr:J Landroid/view/MotionEvent;->nativeGetRawAxisValue(JIII)F @@ -2089,6 +2217,7 @@ Landroid/view/MotionEvent;->obtain()Landroid/view/MotionEvent; Landroid/view/MotionEvent$PointerCoords;->mPackedAxisBits:J Landroid/view/MotionEvent$PointerCoords;->mPackedAxisValues:[F Landroid/view/MotionEvent;->scale(F)V +Landroid/view/MotionEvent;->split(I)Landroid/view/MotionEvent; Landroid/view/PointerIcon;->load(Landroid/content/Context;)Landroid/view/PointerIcon; Landroid/view/PointerIcon;->mBitmapFrames:[Landroid/graphics/Bitmap; Landroid/view/PointerIcon;->mBitmap:Landroid/graphics/Bitmap; @@ -2109,6 +2238,8 @@ Landroid/view/RemoteAnimationTarget;->sourceContainerBounds:Landroid/graphics/Re Landroid/view/RemoteAnimationTarget;->taskId:I Landroid/view/RemoteAnimationTarget;->windowConfiguration:Landroid/app/WindowConfiguration; Landroid/view/RenderNodeAnimator;->callOnFinished(Landroid/view/RenderNodeAnimator;)V +Landroid/view/RenderNode;->discardDisplayList()V +Landroid/view/RenderNode;->output()V Landroid/view/ScaleGestureDetector;->mListener:Landroid/view/ScaleGestureDetector$OnScaleGestureListener; Landroid/view/ScaleGestureDetector;->mMinSpan:I Landroid/view/SurfaceControl$PhysicalDisplayInfo;->appVsyncOffsetNanos:J @@ -2143,6 +2274,7 @@ Landroid/view/textclassifier/logging/SmartSelectionEventTracker$SelectionEvent;- Landroid/view/textclassifier/TextClassificationManager;->getTextClassifier(I)Landroid/view/textclassifier/TextClassifier; Landroid/view/textservice/TextServicesManager;->isSpellCheckerEnabled()Z Landroid/view/TextureView;->destroyHardwareLayer()V +Landroid/view/TextureView;->destroyHardwareResources()V Landroid/view/TextureView;->mLayer:Landroid/view/TextureLayer; Landroid/view/TextureView;->mNativeWindow:J Landroid/view/TextureView;->mSurface:Landroid/graphics/SurfaceTexture; @@ -2154,6 +2286,7 @@ Landroid/view/VelocityTracker$Estimator;->xCoeff:[F Landroid/view/VelocityTracker$Estimator;->yCoeff:[F Landroid/view/VelocityTracker;->obtain(Ljava/lang/String;)Landroid/view/VelocityTracker; Landroid/view/View;->applyDrawableToTransparentRegion(Landroid/graphics/drawable/Drawable;Landroid/graphics/Region;)V +Landroid/view/View$AttachInfo;->mContentInsets:Landroid/graphics/Rect; Landroid/view/View$AttachInfo;->mDrawingTime:J Landroid/view/View$AttachInfo;->mStableInsets:Landroid/graphics/Rect; Landroid/view/View;->clearAccessibilityFocus()V @@ -2172,12 +2305,14 @@ Landroid/view/View;->dispatchDetachedFromWindow()V Landroid/view/View;->fitsSystemWindows()Z Landroid/view/View;->getAccessibilityDelegate()Landroid/view/View$AccessibilityDelegate; Landroid/view/View;->getBoundsOnScreen(Landroid/graphics/Rect;)V +Landroid/view/View;->getHorizontalScrollFactor()F Landroid/view/View;->getInverseMatrix()Landroid/graphics/Matrix; Landroid/view/View;->getListenerInfo()Landroid/view/View$ListenerInfo; Landroid/view/View;->getLocationOnScreen()[I Landroid/view/View;->getRawTextAlignment()I Landroid/view/View;->getRawTextDirection()I Landroid/view/View;->getTransitionAlpha()F +Landroid/view/View;->getVerticalScrollFactor()F Landroid/view/View;->getViewRootImpl()Landroid/view/ViewRootImpl; Landroid/view/View;->getWindowDisplayFrame(Landroid/graphics/Rect;)V Landroid/view/ViewGroup;->dispatchViewAdded(Landroid/view/View;)V @@ -2192,18 +2327,23 @@ Landroid/view/ViewGroup;->mChildren:[Landroid/view/View; Landroid/view/ViewGroup;->mFirstTouchTarget:Landroid/view/ViewGroup$TouchTarget; Landroid/view/ViewGroup;->mGroupFlags:I Landroid/view/ViewGroup;->mOnHierarchyChangeListener:Landroid/view/ViewGroup$OnHierarchyChangeListener; +Landroid/view/ViewGroup;->mPersistentDrawingCache:I +Landroid/view/ViewGroup;->offsetChildrenTopAndBottom(I)V Landroid/view/ViewGroup;->resetResolvedDrawables()V Landroid/view/ViewGroup;->resetResolvedLayoutDirection()V Landroid/view/ViewGroup;->resetResolvedPadding()V Landroid/view/ViewGroup;->resetResolvedTextAlignment()V Landroid/view/ViewGroup;->resetResolvedTextDirection()V Landroid/view/ViewGroup;->suppressLayout(Z)V +Landroid/view/View;->includeForAccessibility()Z Landroid/view/View;->initializeScrollbars(Landroid/content/res/TypedArray;)V Landroid/view/View;->internalSetPadding(IIII)V Landroid/view/View;->isPaddingResolved()Z Landroid/view/View;->isVisibleToUser(Landroid/graphics/Rect;)Z Landroid/view/View;->isVisibleToUser()Z +Landroid/view/View$ListenerInfo;->()V Landroid/view/View$ListenerInfo;->mOnClickListener:Landroid/view/View$OnClickListener; +Landroid/view/View$ListenerInfo;->mOnFocusChangeListener:Landroid/view/View$OnFocusChangeListener; Landroid/view/View$ListenerInfo;->mOnLongClickListener:Landroid/view/View$OnLongClickListener; Landroid/view/View$ListenerInfo;->mOnTouchListener:Landroid/view/View$OnTouchListener; Landroid/view/View;->mAccessibilityDelegate:Landroid/view/View$AccessibilityDelegate; @@ -2216,10 +2356,13 @@ Landroid/view/View;->mLeft:I Landroid/view/View;->mListenerInfo:Landroid/view/View$ListenerInfo; Landroid/view/View;->mMinHeight:I Landroid/view/View;->mMinWidth:I +Landroid/view/View;->mPaddingBottom:I Landroid/view/View;->mPaddingLeft:I Landroid/view/View;->mPaddingRight:I +Landroid/view/View;->mPaddingTop:I Landroid/view/View;->mParent:Landroid/view/ViewParent; Landroid/view/View;->mPrivateFlags3:I +Landroid/view/View;->mPrivateFlags:I Landroid/view/View;->mRecreateDisplayList:Z Landroid/view/View;->mResources:Landroid/content/res/Resources; Landroid/view/View;->mRight:I @@ -2232,6 +2375,8 @@ Landroid/view/View;->mTop:I Landroid/view/View;->mUnscaledDrawingCache:Landroid/graphics/Bitmap; Landroid/view/View;->mViewFlags:I Landroid/view/View;->notifySubtreeAccessibilityStateChangedIfNeeded()V +Landroid/view/View;->onDrawVerticalScrollBar(Landroid/graphics/Canvas;Landroid/graphics/drawable/Drawable;IIII)V +Landroid/view/View;->performAccessibilityActionInternal(ILandroid/os/Bundle;)Z Landroid/view/View;->recomputePadding()V Landroid/view/View;->requestAccessibilityFocus()Z Landroid/view/View;->resetDisplayList()V @@ -2292,7 +2437,10 @@ Landroid/view/WindowManager$LayoutParams;->NEEDS_MENU_SET_TRUE:I Landroid/view/WindowManager$LayoutParams;->userActivityTimeout:J Landroid/view/Window;->mAppName:Ljava/lang/String; Landroid/view/Window;->mAppToken:Landroid/os/IBinder; +Landroid/view/Window;->mCallback:Landroid/view/Window$Callback; +Landroid/view/Window;->mContext:Landroid/content/Context; Landroid/view/Window;->mHardwareAccelerated:Z +Landroid/view/Window;->mWindowStyle:Landroid/content/res/TypedArray; Landroid/webkit/IWebViewUpdateService$Stub$Proxy;->(Landroid/os/IBinder;)V Landroid/webkit/WebResourceResponse;->mImmutable:Z Landroid/webkit/WebSyncManager;->mHandler:Landroid/os/Handler; @@ -2305,6 +2453,7 @@ Landroid/webkit/WebViewFactory;->getProvider()Landroid/webkit/WebViewFactoryProv Landroid/webkit/WebViewFactory;->getWebViewContextAndSetProvider()Landroid/content/Context; Landroid/webkit/WebViewFactory;->sPackageInfo:Landroid/content/pm/PackageInfo; Landroid/webkit/WebViewFactory;->sProviderInstance:Landroid/webkit/WebViewFactoryProvider; +Landroid/webkit/WebView;->getTouchIconUrl()Ljava/lang/String; Landroid/webkit/WebView;->getVisibleTitleHeight()I Landroid/webkit/WebView;->isPaused()Z Landroid/webkit/WebView;->mProvider:Landroid/webkit/WebViewProvider; @@ -2326,6 +2475,8 @@ Landroid/widget/AbsListView;->mIsChildViewEnabled:Z Landroid/widget/AbsListView;->mMaximumVelocity:I Landroid/widget/AbsListView;->mMotionPosition:I Landroid/widget/AbsListView;->mOnScrollListener:Landroid/widget/AbsListView$OnScrollListener; +Landroid/widget/AbsListView;->mPendingCheckForLongPress:Landroid/widget/AbsListView$CheckForLongPress; +Landroid/widget/AbsListView;->mPendingCheckForTap:Landroid/widget/AbsListView$CheckForTap; Landroid/widget/AbsListView;->mRecycler:Landroid/widget/AbsListView$RecycleBin; Landroid/widget/AbsListView;->mSelectionTopPadding:I Landroid/widget/AbsListView;->mSelectorPosition:I @@ -2338,6 +2489,8 @@ Landroid/widget/AbsListView;->performLongPress(Landroid/view/View;IJ)Z Landroid/widget/AbsListView$RecycleBin;->clear()V Landroid/widget/AbsListView$RecycleBin;->mRecyclerListener:Landroid/widget/AbsListView$RecyclerListener; Landroid/widget/AbsListView;->reportScrollStateChange(I)V +Landroid/widget/AbsListView$SavedState;->firstId:J +Landroid/widget/AbsListView$SavedState;->viewTop:I Landroid/widget/AbsListView;->smoothScrollBy(IIZZ)V Landroid/widget/AbsListView;->trackMotionScroll(II)Z Landroid/widget/AbsSeekBar;->mIsDragging:Z @@ -2356,7 +2509,9 @@ Landroid/widget/AutoCompleteTextView;->doBeforeTextChanged()V Landroid/widget/AutoCompleteTextView;->ensureImeVisible(Z)V Landroid/widget/AutoCompleteTextView;->mPopup:Landroid/widget/ListPopupWindow; Landroid/widget/AutoCompleteTextView;->setDropDownAlwaysVisible(Z)V +Landroid/widget/AutoCompleteTextView;->setForceIgnoreOutsideTouch(Z)V Landroid/widget/CompoundButton;->mButtonDrawable:Landroid/graphics/drawable/Drawable; +Landroid/widget/CompoundButton;->mOnCheckedChangeListener:Landroid/widget/CompoundButton$OnCheckedChangeListener; Landroid/widget/CursorAdapter;->mChangeObserver:Landroid/widget/CursorAdapter$ChangeObserver; Landroid/widget/CursorAdapter;->mDataSetObserver:Landroid/database/DataSetObserver; Landroid/widget/CursorAdapter;->mDataValid:Z @@ -2367,6 +2522,7 @@ Landroid/widget/Editor;->invalidateTextDisplayList()V Landroid/widget/Editor;->mShowCursor:J Landroid/widget/Editor;->mShowSoftInputOnFocus:Z Landroid/widget/ExpandableListView;->mChildDivider:Landroid/graphics/drawable/Drawable; +Landroid/widget/ExpandableListView;->mGroupIndicator:Landroid/graphics/drawable/Drawable; Landroid/widget/FastScroller;->mContainerRect:Landroid/graphics/Rect; Landroid/widget/FastScroller;->mHeaderCount:I Landroid/widget/FastScroller;->mLongList:Z @@ -2473,13 +2629,17 @@ Landroid/widget/RemoteViews;->mBitmapCache:Landroid/widget/RemoteViews$BitmapCac Landroid/widget/RemoteViews;->mergeRemoteViews(Landroid/widget/RemoteViews;)V Landroid/widget/RemoteViews;->mPortrait:Landroid/widget/RemoteViews; Landroid/widget/RemoteViews$ReflectionAction;->methodName:Ljava/lang/String; +Landroid/widget/RemoteViews$ReflectionAction;->value:Ljava/lang/Object; +Landroid/widget/RemoteViews$SetOnClickPendingIntent;->pendingIntent:Landroid/app/PendingIntent; Landroid/widget/ScrollBarDrawable;->mVerticalThumb:Landroid/graphics/drawable/Drawable; Landroid/widget/ScrollBarDrawable;->setHorizontalThumbDrawable(Landroid/graphics/drawable/Drawable;)V Landroid/widget/ScrollBarDrawable;->setVerticalThumbDrawable(Landroid/graphics/drawable/Drawable;)V +Landroid/widget/Scroller;->mInterpolator:Landroid/view/animation/Interpolator; Landroid/widget/ScrollView;->mChildToScrollTo:Landroid/view/View; Landroid/widget/ScrollView;->mEdgeGlowBottom:Landroid/widget/EdgeEffect; Landroid/widget/ScrollView;->mEdgeGlowTop:Landroid/widget/EdgeEffect; Landroid/widget/ScrollView;->mIsBeingDragged:Z +Landroid/widget/ScrollView;->mMinimumVelocity:I Landroid/widget/ScrollView;->mOverflingDistance:I Landroid/widget/ScrollView;->mOverscrollDistance:I Landroid/widget/ScrollView;->mScroller:Landroid/widget/OverScroller; @@ -2493,7 +2653,11 @@ Landroid/widget/SlidingDrawer;->mTopOffset:I Landroid/widget/Spinner;->mPopup:Landroid/widget/Spinner$SpinnerPopup; Landroid/widget/Switch;->mThumbDrawable:Landroid/graphics/drawable/Drawable; Landroid/widget/Switch;->mTrackDrawable:Landroid/graphics/drawable/Drawable; +Landroid/widget/TabHost$IntentContentStrategy;->getContentView()Landroid/view/View; +Landroid/widget/TabHost$IntentContentStrategy;->tabClosed()V +Landroid/widget/TabHost;->mTabSpecs:Ljava/util/List; Landroid/widget/TabHost$TabSpec;->mContentStrategy:Landroid/widget/TabHost$ContentStrategy; +Landroid/widget/TabWidget;->mSelectedTab:I Landroid/widget/TabWidget;->setTabSelectionListener(Landroid/widget/TabWidget$OnTabSelectionChanged;)V Landroid/widget/TextView;->assumeLayout()V Landroid/widget/TextView;->createEditorIfNeeded()V @@ -2511,7 +2675,11 @@ Landroid/widget/TextView;->mSingleLine:Z Landroid/widget/TextView;->mTextPaint:Landroid/text/TextPaint; Landroid/widget/TextView;->setText(Ljava/lang/CharSequence;Landroid/widget/TextView$BufferType;ZI)V Landroid/widget/Toast;->getService()Landroid/app/INotificationManager; +Landroid/widget/Toast;->getWindowParams()Landroid/view/WindowManager$LayoutParams; +Landroid/widget/Toast;->mTN:Landroid/widget/Toast$TN; Landroid/widget/Toast;->sService:Landroid/app/INotificationManager; +Landroid/widget/Toast$TN;->mNextView:Landroid/view/View; +Landroid/widget/Toast$TN;->mParams:Landroid/view/WindowManager$LayoutParams; Landroid/widget/VideoView2;->getMediaController()Landroid/media/session/MediaController; Landroid/widget/VideoView2$OnViewTypeChangedListener;->onViewTypeChanged(Landroid/view/View;I)V Landroid/widget/VideoView2;->setOnViewTypeChangedListener(Landroid/widget/VideoView2$OnViewTypeChangedListener;)V @@ -2594,6 +2762,7 @@ Lcom/android/internal/app/AlertController$RecycleListView;->(Landroid/cont Lcom/android/internal/app/IAppOpsService$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IAppOpsService; Lcom/android/internal/app/IAppOpsService$Stub$Proxy;->checkOperation(IILjava/lang/String;)I Lcom/android/internal/app/IAppOpsService$Stub$Proxy;->(Landroid/os/IBinder;)V +Lcom/android/internal/app/IAppOpsService$Stub$Proxy;->setMode(IILjava/lang/String;I)V Lcom/android/internal/app/IBatteryStats;->getStatistics()[B Lcom/android/internal/app/IBatteryStats$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/app/IBatteryStats; Lcom/android/internal/app/IBatteryStats$Stub$Proxy;->(Landroid/os/IBinder;)V @@ -2621,10 +2790,12 @@ Lcom/android/internal/os/BatteryStatsHelper;->refreshStats(II)V Lcom/android/internal/os/BatteryStatsImpl;->computeBatteryRealtime(JI)J Lcom/android/internal/os/BatteryStatsImpl;->computeBatteryUptime(JI)J Lcom/android/internal/os/BatteryStatsImpl;->CREATOR:Landroid/os/Parcelable$Creator; +Lcom/android/internal/os/BatteryStatsImpl;->getBatteryRealtime(J)J Lcom/android/internal/os/BatteryStatsImpl;->getDischargeAmount(I)I Lcom/android/internal/os/BatteryStatsImpl;->getGlobalWifiRunningTime(JI)J Lcom/android/internal/os/BatteryStatsImpl;->getScreenOnTime(JI)J Lcom/android/internal/os/BatteryStatsImpl;->getUidStats()Landroid/util/SparseArray; +Lcom/android/internal/os/BatteryStatsImpl;->getUidStatsLocked(I)Lcom/android/internal/os/BatteryStatsImpl$Uid; Lcom/android/internal/os/BatteryStatsImpl$Timer;->getCountLocked(I)I Lcom/android/internal/os/BatteryStatsImpl$Timer;->getTotalTimeLocked(JI)J Lcom/android/internal/os/BatteryStatsImpl$Uid;->getProcessStats()Landroid/util/ArrayMap; @@ -2692,6 +2863,18 @@ Lcom/android/internal/R$string;->kilobyteShort:I Lcom/android/internal/R$string;->megabyteShort:I Lcom/android/internal/R$string;->petabyteShort:I Lcom/android/internal/R$string;->terabyteShort:I +Lcom/android/internal/R$styleable;->AbsListView_cacheColorHint:I +Lcom/android/internal/R$styleable;->AbsListView_choiceMode:I +Lcom/android/internal/R$styleable;->AbsListView_drawSelectorOnTop:I +Lcom/android/internal/R$styleable;->AbsListView_fastScrollAlwaysVisible:I +Lcom/android/internal/R$styleable;->AbsListView_fastScrollEnabled:I +Lcom/android/internal/R$styleable;->AbsListView:[I +Lcom/android/internal/R$styleable;->AbsListView_listSelector:I +Lcom/android/internal/R$styleable;->AbsListView_scrollingCache:I +Lcom/android/internal/R$styleable;->AbsListView_smoothScrollbar:I +Lcom/android/internal/R$styleable;->AbsListView_stackFromBottom:I +Lcom/android/internal/R$styleable;->AbsListView_textFilterEnabled:I +Lcom/android/internal/R$styleable;->AbsListView_transcriptMode:I Lcom/android/internal/R$styleable;->AccountAuthenticator_accountPreferences:I Lcom/android/internal/R$styleable;->AccountAuthenticator_accountType:I Lcom/android/internal/R$styleable;->AccountAuthenticator_customTokens:I @@ -2699,6 +2882,28 @@ Lcom/android/internal/R$styleable;->AccountAuthenticator:[I Lcom/android/internal/R$styleable;->AccountAuthenticator_icon:I Lcom/android/internal/R$styleable;->AccountAuthenticator_label:I Lcom/android/internal/R$styleable;->AccountAuthenticator_smallIcon:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_allowTaskReparenting:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_configChanges:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_description:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_enabled:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_excludeFromRecents:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_exported:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_hardwareAccelerated:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity:[I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_icon:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_immersive:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_label:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_launchMode:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_logo:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_name:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_noHistory:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_permission:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_process:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_screenOrientation:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_taskAffinity:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_theme:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_uiOptions:I +Lcom/android/internal/R$styleable;->AndroidManifestActivity_windowSoftInputMode:I Lcom/android/internal/R$styleable;->AndroidManifestApplication_enabled:I Lcom/android/internal/R$styleable;->AndroidManifestApplication_hardwareAccelerated:I Lcom/android/internal/R$styleable;->AndroidManifestApplication:[I @@ -2710,8 +2915,21 @@ Lcom/android/internal/R$styleable;->AndroidManifestApplication_process:I Lcom/android/internal/R$styleable;->AndroidManifestApplication_supportsRtl:I Lcom/android/internal/R$styleable;->AndroidManifestApplication_theme:I Lcom/android/internal/R$styleable;->AndroidManifestApplication_uiOptions:I +Lcom/android/internal/R$styleable;->AndroidManifestData:[I Lcom/android/internal/R$styleable;->AndroidManifest:[I Lcom/android/internal/R$styleable;->AndroidManifest_installLocation:I +Lcom/android/internal/R$styleable;->AndroidManifestIntentFilter:[I +Lcom/android/internal/R$styleable;->AndroidManifestIntentFilter_priority:I +Lcom/android/internal/R$styleable;->AndroidManifestMetaData:[I +Lcom/android/internal/R$styleable;->AndroidManifestMetaData_name:I +Lcom/android/internal/R$styleable;->AndroidManifestMetaData_resource:I +Lcom/android/internal/R$styleable;->AndroidManifestMetaData_value:I +Lcom/android/internal/R$styleable;->AndroidManifestService_enabled:I +Lcom/android/internal/R$styleable;->AndroidManifestService_exported:I +Lcom/android/internal/R$styleable;->AndroidManifestService:[I +Lcom/android/internal/R$styleable;->AndroidManifestService_name:I +Lcom/android/internal/R$styleable;->AndroidManifestService_permission:I +Lcom/android/internal/R$styleable;->AndroidManifestService_process:I Lcom/android/internal/R$styleable;->AndroidManifest_sharedUserId:I Lcom/android/internal/R$styleable;->AndroidManifestUsesPermission:[I Lcom/android/internal/R$styleable;->AndroidManifestUsesPermission_name:I @@ -2725,6 +2943,7 @@ Lcom/android/internal/R$styleable;->CheckBoxPreference:[I Lcom/android/internal/R$styleable;->CheckBoxPreference_summaryOff:I Lcom/android/internal/R$styleable;->CheckBoxPreference_summaryOn:I Lcom/android/internal/R$styleable;->CompoundButton_button:I +Lcom/android/internal/R$styleable;->CompoundButton_checked:I Lcom/android/internal/R$styleable;->CompoundButton:[I Lcom/android/internal/R$styleable;->DialogPreference_dialogTitle:I Lcom/android/internal/R$styleable;->DialogPreference:[I @@ -2735,6 +2954,15 @@ Lcom/android/internal/R$styleable;->ImageView:[I Lcom/android/internal/R$styleable;->ImageView_src:I Lcom/android/internal/R$styleable;->ListPreference_entries:I Lcom/android/internal/R$styleable;->ListPreference:[I +Lcom/android/internal/R$styleable;->ListView_dividerHeight:I +Lcom/android/internal/R$styleable;->ListView_divider:I +Lcom/android/internal/R$styleable;->ListView_entries:I +Lcom/android/internal/R$styleable;->ListView_footerDividersEnabled:I +Lcom/android/internal/R$styleable;->ListView_headerDividersEnabled:I +Lcom/android/internal/R$styleable;->ListView:[I +Lcom/android/internal/R$styleable;->ListView_overScrollFooter:I +Lcom/android/internal/R$styleable;->ListView_overScrollHeader:I +Lcom/android/internal/R$styleable;->PopupWindow:[I Lcom/android/internal/R$styleable;->Preference_defaultValue:I Lcom/android/internal/R$styleable;->Preference_dependency:I Lcom/android/internal/R$styleable;->Preference_enabled:I @@ -2763,12 +2991,15 @@ Lcom/android/internal/R$styleable;->SyncAdapter_settingsActivity:I Lcom/android/internal/R$styleable;->SyncAdapter_supportsUploading:I Lcom/android/internal/R$styleable;->SyncAdapter_userVisible:I Lcom/android/internal/R$styleable;->TabWidget:[I +Lcom/android/internal/R$styleable;->TextAppearance:[I Lcom/android/internal/R$styleable;->TextView_drawableBottom:I Lcom/android/internal/R$styleable;->TextView_drawableLeft:I Lcom/android/internal/R$styleable;->TextView_drawableRight:I Lcom/android/internal/R$styleable;->TextView_drawableTop:I Lcom/android/internal/R$styleable;->TextView:[I Lcom/android/internal/R$styleable;->TextView_maxLines:I +Lcom/android/internal/R$styleable;->TextView_textColorHint:I +Lcom/android/internal/R$styleable;->TextView_textColor:I Lcom/android/internal/R$styleable;->View_background:I Lcom/android/internal/R$styleable;->ViewGroup_Layout:[I Lcom/android/internal/R$styleable;->ViewGroup_Layout_layout_height:I @@ -2789,23 +3020,35 @@ Lcom/android/internal/telephony/IPhoneSubInfo$Stub;->asInterface(Landroid/os/IBi Lcom/android/internal/telephony/IPhoneSubInfo$Stub$Proxy;->(Landroid/os/IBinder;)V Lcom/android/internal/telephony/ISms$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ISms; Lcom/android/internal/telephony/ISub$Stub$Proxy;->(Landroid/os/IBinder;)V +Lcom/android/internal/telephony/ITelephony;->answerRingingCall()V Lcom/android/internal/telephony/ITelephony;->call(Ljava/lang/String;Ljava/lang/String;)V +Lcom/android/internal/telephony/ITelephony;->dial(Ljava/lang/String;)V Lcom/android/internal/telephony/ITelephony;->disableDataConnectivity()Z Lcom/android/internal/telephony/ITelephony;->enableDataConnectivity()Z Lcom/android/internal/telephony/ITelephony;->endCall()Z +Lcom/android/internal/telephony/ITelephony;->getCallState()I +Lcom/android/internal/telephony/ITelephony;->getDataState()I Lcom/android/internal/telephony/ITelephony;->isIdle(Ljava/lang/String;)Z Lcom/android/internal/telephony/ITelephony;->silenceRinger()V Lcom/android/internal/telephony/ITelephony$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/telephony/ITelephony; Lcom/android/internal/telephony/ITelephony$Stub$Proxy;->endCall()Z Lcom/android/internal/telephony/ITelephony$Stub$Proxy;->(Landroid/os/IBinder;)V +Lcom/android/internal/telephony/ITelephony$Stub;->TRANSACTION_call:I +Lcom/android/internal/telephony/ITelephony$Stub;->TRANSACTION_endCall:I Lcom/android/internal/telephony/ITelephony$Stub;->TRANSACTION_getDeviceId:I +Lcom/android/internal/telephony/SmsRawData;->CREATOR:Landroid/os/Parcelable$Creator; +Lcom/android/internal/telephony/SmsRawData;->([B)V Lcom/android/internal/textservice/ITextServicesManager$Stub$Proxy;->(Landroid/os/IBinder;)V +Lcom/android/internal/util/AsyncChannel;->sendMessage(III)V Lcom/android/internal/util/FastPrintWriter;->(Ljava/io/OutputStream;)V Lcom/android/internal/util/XmlUtils;->readMapXml(Ljava/io/InputStream;)Ljava/util/HashMap; +Lcom/android/internal/util/XmlUtils;->skipCurrentTag(Lorg/xmlpull/v1/XmlPullParser;)V +Lcom/android/internal/util/XmlUtils;->writeMapXml(Ljava/util/Map;Ljava/io/OutputStream;)V Lcom/android/internal/view/IInputMethodManager$Stub;->asInterface(Landroid/os/IBinder;)Lcom/android/internal/view/IInputMethodManager; Lcom/android/internal/view/IInputMethodManager$Stub$Proxy;->getEnabledInputMethodList()Ljava/util/List; Lcom/android/internal/view/IInputMethodManager$Stub$Proxy;->(Landroid/os/IBinder;)V Lcom/android/internal/view/InputBindResult;->CREATOR:Landroid/os/Parcelable$Creator; +Lcom/android/internal/view/menu/MenuBuilder;->(Landroid/content/Context;)V Lcom/android/internal/view/menu/MenuBuilder;->mContext:Landroid/content/Context; Lcom/android/internal/view/menu/MenuBuilder;->setCurrentMenuInfo(Landroid/view/ContextMenu$ContextMenuInfo;)V Lcom/android/internal/view/menu/MenuBuilder;->setOptionalIconsVisible(Z)V @@ -2861,6 +3104,7 @@ Lcom/android/org/conscrypt/ConscryptSocketBase;->getSoWriteTimeout()I Lcom/android/org/conscrypt/ConscryptSocketBase;->setHandshakeTimeout(I)V Lcom/android/org/conscrypt/ConscryptSocketBase;->setHostname(Ljava/lang/String;)V Lcom/android/org/conscrypt/ConscryptSocketBase;->setSoWriteTimeout(I)V +Lcom/android/org/conscrypt/ConscryptSocketBase;->socket:Ljava/net/Socket; Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getAlpnSelectedProtocol()[B Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getChannelId()[B Lcom/android/org/conscrypt/OpenSSLSocketImpl;->getHostname()Ljava/lang/String; @@ -2883,10 +3127,12 @@ Ldalvik/system/BaseDexClassLoader;->getLdLibraryPath()Ljava/lang/String; Ldalvik/system/BaseDexClassLoader;->pathList:Ldalvik/system/DexPathList; Ldalvik/system/BlockGuard;->getThreadPolicy()Ldalvik/system/BlockGuard$Policy; Ldalvik/system/BlockGuard$Policy;->onNetwork()V +Ldalvik/system/BlockGuard$Policy;->onReadFromDisk()V Ldalvik/system/CloseGuard;->close()V Ldalvik/system/CloseGuard;->get()Ldalvik/system/CloseGuard; Ldalvik/system/CloseGuard;->open(Ljava/lang/String;)V Ldalvik/system/CloseGuard;->warnIfOpen()V +Ldalvik/system/DexFile$DFEnum;->mNameList:[Ljava/lang/String; Ldalvik/system/DexFile;->getClassNameList(Ljava/lang/Object;)[Ljava/lang/String; Ldalvik/system/DexFile;->isBackedByOatFile()Z Ldalvik/system/DexFile;->loadClassBinaryName(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/util/List;)Ljava/lang/Class; @@ -2895,6 +3141,7 @@ Ldalvik/system/DexFile;->mFileName:Ljava/lang/String; Ldalvik/system/DexFile;->mInternalCookie:Ljava/lang/Object; Ldalvik/system/DexFile;->openDexFile(Ljava/lang/String;Ljava/lang/String;ILjava/lang/ClassLoader;[Ldalvik/system/DexPathList$Element;)Ljava/lang/Object; Ldalvik/system/DexPathList;->addDexPath(Ljava/lang/String;Ljava/io/File;)V +Ldalvik/system/DexPathList;->definingContext:Ljava/lang/ClassLoader; Ldalvik/system/DexPathList;->dexElements:[Ldalvik/system/DexPathList$Element; Ldalvik/system/DexPathList$Element;->dexFile:Ldalvik/system/DexFile; Ldalvik/system/DexPathList$Element;->(Ldalvik/system/DexFile;Ljava/io/File;)V @@ -2915,6 +3162,7 @@ Ldalvik/system/VMDebug;->dumpReferenceTables()V Ldalvik/system/VMRuntime;->addressOf(Ljava/lang/Object;)J Ldalvik/system/VMRuntime;->clearGrowthLimit()V Ldalvik/system/VMRuntime;->getCurrentInstructionSet()Ljava/lang/String; +Ldalvik/system/VMRuntime;->getInstructionSet(Ljava/lang/String;)Ljava/lang/String; Ldalvik/system/VMRuntime;->getRuntime()Ldalvik/system/VMRuntime; Ldalvik/system/VMRuntime;->is64Bit()Z Ldalvik/system/VMRuntime;->newNonMovableArray(Ljava/lang/Class;I)Ljava/lang/Object; @@ -2932,7 +3180,9 @@ Ldalvik/system/VMStack;->getCallingClassLoader()Ljava/lang/ClassLoader; Ldalvik/system/VMStack;->getStackClass2()Ljava/lang/Class; Ljava/io/FileDescriptor;->descriptor:I Ljava/io/FileDescriptor;->getInt$()I +Ljava/io/FileDescriptor;->isSocket$()Z Ljava/io/FileDescriptor;->setInt$(I)V +Ljava/io/File;->fs:Ljava/io/FileSystem; Ljava/io/FileInputStream;->fd:Ljava/io/FileDescriptor; Ljava/io/FileOutputStream;->fd:Ljava/io/FileDescriptor; Ljava/io/ObjectStreamClass;->getConstructorId(Ljava/lang/Class;)J @@ -2942,8 +3192,10 @@ Ljava/lang/AbstractStringBuilder;->value:[C Ljava/lang/Boolean;->value:Z Ljava/lang/Byte;->value:B Ljava/lang/Character;->value:C +Ljava/lang/Class;->accessFlags:I Ljava/lang/Class;->dexCache:Ljava/lang/Object; Ljava/lang/Class;->dexClassDefIndex:I +Ljava/lang/Class;->ifTable:[Ljava/lang/Object; Ljava/lang/ClassLoader;->parent:Ljava/lang/ClassLoader; Ljava/lang/Daemons$Daemon;->isRunning()Z Ljava/lang/Daemons$Daemon;->start()V @@ -3015,6 +3267,7 @@ Ljava/net/Inet6Address$Inet6AddressHolder;->scope_ifname:Ljava/net/NetworkInterf Ljava/net/Inet6Address;->()V Ljava/net/InetAddress;->clearDnsCache()V Ljava/net/InetAddress;->holder:Ljava/net/InetAddress$InetAddressHolder; +Ljava/net/InetAddress;->holder()Ljava/net/InetAddress$InetAddressHolder; Ljava/net/InetAddress$InetAddressHolder;->address:I Ljava/net/InetAddress$InetAddressHolder;->family:I Ljava/net/InetAddress$InetAddressHolder;->hostName:Ljava/lang/String; @@ -3023,6 +3276,8 @@ Ljava/net/InetAddress;->isNumeric(Ljava/lang/String;)Z Ljava/net/InetAddress;->parseNumericAddress(Ljava/lang/String;)Ljava/net/InetAddress; Ljava/net/Socket;->getFileDescriptor$()Ljava/io/FileDescriptor; Ljava/net/Socket;->impl:Ljava/net/SocketImpl; +Ljava/net/SocketImpl;->serverSocket:Ljava/net/ServerSocket; +Ljava/net/SocketImpl;->socket:Ljava/net/Socket; Ljava/net/URI;->host:Ljava/lang/String; Ljava/net/URL;->handler:Ljava/net/URLStreamHandler; Ljava/net/URL;->handlers:Ljava/util/Hashtable; @@ -3057,11 +3312,16 @@ Ljava/util/Collections$SynchronizedMap;->m:Ljava/util/Map; Ljava/util/Collections$UnmodifiableCollection;->c:Ljava/util/Collection; Ljava/util/Collections$UnmodifiableMap;->m:Ljava/util/Map; Ljava/util/concurrent/ConcurrentHashMap$BaseIterator;->hasMoreElements()Z +Ljava/util/concurrent/Executors$RunnableAdapter;->task:Ljava/lang/Runnable; Ljava/util/concurrent/FutureTask;->callable:Ljava/util/concurrent/Callable; +Ljava/util/concurrent/FutureTask;->EXCEPTIONAL:I +Ljava/util/concurrent/FutureTask;->outcome:Ljava/lang/Object; +Ljava/util/concurrent/FutureTask;->state:I Ljava/util/concurrent/LinkedBlockingQueue;->capacity:I Ljava/util/EnumMap;->keyType:Ljava/lang/Class; Ljava/util/EnumSet;->elementType:Ljava/lang/Class; Ljava/util/HashMap$HashIterator;->hasNext()Z +Ljava/util/jar/JarFile;->manifest:Ljava/util/jar/Manifest; Ljava/util/LinkedHashMap;->eldest()Ljava/util/Map$Entry; Ljava/util/LinkedHashMap$LinkedHashIterator;->hasNext()Z Ljava/util/Locale;->createConstant(Ljava/lang/String;Ljava/lang/String;)Ljava/util/Locale; @@ -3084,11 +3344,15 @@ Ljava/util/zip/ZipEntry;->(Ljava/lang/String;Ljava/lang/String;JJJII[BJ)V Ljava/util/zip/ZipFile;->jzfile:J Ljavax/net/ssl/SSLServerSocketFactory;->defaultServerSocketFactory:Ljavax/net/ssl/SSLServerSocketFactory; Ljavax/net/ssl/SSLSocketFactory;->defaultSocketFactory:Ljavax/net/ssl/SSLSocketFactory; +Llibcore/util/BasicLruCache;->map:Ljava/util/LinkedHashMap; Llibcore/util/ZoneInfo;->mTransitions:[J Lorg/apache/http/conn/ssl/SSLSocketFactory;->(Ljavax/net/ssl/SSLSocketFactory;)V Lorg/apache/http/conn/ssl/SSLSocketFactory;->()V +Lorg/ccil/cowan/tagsoup/AttributesImpl;->data:[Ljava/lang/String; +Lorg/ccil/cowan/tagsoup/AttributesImpl;->length:I Lorg/json/JSONArray;->values:Ljava/util/List; Lorg/json/JSONObject;->append(Ljava/lang/String;Ljava/lang/Object;)Lorg/json/JSONObject; Lorg/json/JSONObject;->keySet()Ljava/util/Set; Lorg/json/JSONObject;->writeTo(Lorg/json/JSONStringer;)V +Lorg/w3c/dom/traversal/NodeIterator;->nextNode()Lorg/w3c/dom/Node; Lsun/misc/Unsafe;->theUnsafe:Lsun/misc/Unsafe; diff --git a/core/java/android/app/AppComponentFactory.java b/core/java/android/app/AppComponentFactory.java index 4df7379994341a4cace378c1b34928e40de06b0b..cfaeec9096eda8ff46936a946edbaaecdb508416 100644 --- a/core/java/android/app/AppComponentFactory.java +++ b/core/java/android/app/AppComponentFactory.java @@ -36,6 +36,10 @@ public class AppComponentFactory { * Allows application to override the creation of the application object. This can be used to * perform things such as dependency injection or class loader changes to these * classes. + *

+ * This method is only intended to provide a hook for instantiation. It does not provide + * earlier access to the Application object. The returned object will not be initialized + * as a Context yet and should not be used to interact with other android APIs. * * @param cl The default classloader to use for instantiation. * @param className The class to be instantiated. @@ -50,6 +54,10 @@ public class AppComponentFactory { * Allows application to override the creation of activities. This can be used to * perform things such as dependency injection or class loader changes to these * classes. + *

+ * This method is only intended to provide a hook for instantiation. It does not provide + * earlier access to the Activity object. The returned object will not be initialized + * as a Context yet and should not be used to interact with other android APIs. * * @param cl The default classloader to use for instantiation. * @param className The class to be instantiated. @@ -80,6 +88,10 @@ public class AppComponentFactory { * Allows application to override the creation of services. This can be used to * perform things such as dependency injection or class loader changes to these * classes. + *

+ * This method is only intended to provide a hook for instantiation. It does not provide + * earlier access to the Service object. The returned object will not be initialized + * as a Context yet and should not be used to interact with other android APIs. * * @param cl The default classloader to use for instantiation. * @param className The class to be instantiated. @@ -95,6 +107,10 @@ public class AppComponentFactory { * Allows application to override the creation of providers. This can be used to * perform things such as dependency injection or class loader changes to these * classes. + *

+ * This method is only intended to provide a hook for instantiation. It does not provide + * earlier access to the ContentProvider object. The returned object will not be initialized + * with a Context yet and should not be used to interact with other android APIs. * * @param cl The default classloader to use for instantiation. * @param className The class to be instantiated. @@ -108,5 +124,5 @@ public class AppComponentFactory { /** * @hide */ - public static AppComponentFactory DEFAULT = new AppComponentFactory(); + public static final AppComponentFactory DEFAULT = new AppComponentFactory(); } diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index f5e138c164b69e61619639a6276e0c6f1f878a8b..71b88fa4ad916a17d918b0acbac0e79dad2ff370 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -1713,6 +1713,9 @@ class ContextImpl extends Context { Slog.w(TAG, "Missing ActivityManager; assuming " + uid + " holds " + permission); return PackageManager.PERMISSION_GRANTED; } + Slog.w(TAG, "Missing ActivityManager; assuming " + uid + " does not hold " + + permission); + return PackageManager.PERMISSION_DENIED; } try { diff --git a/core/java/android/app/NotificationChannel.java b/core/java/android/app/NotificationChannel.java index 30f2697c1b1f073993ad71f5ac89aef734e0098c..4a7cf62356e3402e1dd84f2e0bcd2c9b58f13feb 100644 --- a/core/java/android/app/NotificationChannel.java +++ b/core/java/android/app/NotificationChannel.java @@ -463,7 +463,11 @@ public final class NotificationChannel implements Parcelable { /** * Returns the user specified importance e.g. {@link NotificationManager#IMPORTANCE_LOW} for - * notifications posted to this channel. + * notifications posted to this channel. Note: This value might be > + * {@link NotificationManager#IMPORTANCE_NONE}, but notifications posted to this channel will + * not be shown to the user if the parent {@link NotificationChannelGroup} or app is blocked. + * See {@link NotificationChannelGroup#isBlocked()} and + * {@link NotificationManager#areNotificationsEnabled()}. */ public int getImportance() { return mImportance; diff --git a/core/java/android/app/NotificationChannelGroup.java b/core/java/android/app/NotificationChannelGroup.java index 16166f7cf1cf72c092a57e25e211f2069296a931..0fa3c7fa6492fe62b5412a6a3918b45529466263 100644 --- a/core/java/android/app/NotificationChannelGroup.java +++ b/core/java/android/app/NotificationChannelGroup.java @@ -145,7 +145,9 @@ public final class NotificationChannelGroup implements Parcelable { /** * Returns whether or not notifications posted to {@link NotificationChannel channels} belonging - * to this group are blocked. + * to this group are blocked. This value is independent of + * {@link NotificationManager#areNotificationsEnabled()} and + * {@link NotificationChannel#getImportance()}. */ public boolean isBlocked() { return mBlocked; diff --git a/core/java/android/app/UiAutomation.java b/core/java/android/app/UiAutomation.java index 8f0168530273b544517a835edfbca18a5bbc21db..bd4933a2081c05eb00e545498bfbadd5299e757f 100644 --- a/core/java/android/app/UiAutomation.java +++ b/core/java/android/app/UiAutomation.java @@ -24,7 +24,6 @@ import android.accessibilityservice.IAccessibilityServiceConnection; import android.annotation.NonNull; import android.annotation.TestApi; import android.graphics.Bitmap; -import android.graphics.Canvas; import android.graphics.Point; import android.graphics.Rect; import android.graphics.Region; @@ -47,6 +46,7 @@ import android.view.accessibility.AccessibilityInteractionClient; import android.view.accessibility.AccessibilityNodeInfo; import android.view.accessibility.AccessibilityWindowInfo; import android.view.accessibility.IAccessibilityInteractionConnection; + import libcore.io.IoUtils; import java.io.IOException; @@ -876,16 +876,36 @@ public final class UiAutomation { } /** - * Grants a runtime permission to a package for a user. + * Grants a runtime permission to a package. * @param packageName The package to which to grant. * @param permission The permission to grant. - * @return Whether granting succeeded. - * + * @throws SecurityException if unable to grant the permission. + */ + public void grantRuntimePermission(String packageName, String permission) { + grantRuntimePermissionAsUser(packageName, permission, android.os.Process.myUserHandle()); + } + + /** + * @deprecated replaced by + * {@link #grantRuntimePermissionAsUser(String, String, UserHandle)}. * @hide */ + @Deprecated @TestApi public boolean grantRuntimePermission(String packageName, String permission, UserHandle userHandle) { + grantRuntimePermissionAsUser(packageName, permission, userHandle); + return true; + } + + /** + * Grants a runtime permission to a package for a user. + * @param packageName The package to which to grant. + * @param permission The permission to grant. + * @throws SecurityException if unable to grant the permission. + */ + public void grantRuntimePermissionAsUser(String packageName, String permission, + UserHandle userHandle) { synchronized (mLock) { throwIfNotConnectedLocked(); } @@ -896,25 +916,42 @@ public final class UiAutomation { // Calling out without a lock held. mUiAutomationConnection.grantRuntimePermission(packageName, permission, userHandle.getIdentifier()); - // TODO: The package manager API should return boolean. - return true; - } catch (RemoteException re) { - Log.e(LOG_TAG, "Error granting runtime permission", re); + } catch (Exception e) { + throw new SecurityException("Error granting runtime permission", e); } - return false; } /** - * Revokes a runtime permission from a package for a user. - * @param packageName The package from which to revoke. - * @param permission The permission to revoke. - * @return Whether revoking succeeded. - * + * Revokes a runtime permission from a package. + * @param packageName The package to which to grant. + * @param permission The permission to grant. + * @throws SecurityException if unable to revoke the permission. + */ + public void revokeRuntimePermission(String packageName, String permission) { + revokeRuntimePermissionAsUser(packageName, permission, android.os.Process.myUserHandle()); + } + + /** + * @deprecated replaced by + * {@link #revokeRuntimePermissionAsUser(String, String, UserHandle)}. * @hide */ + @Deprecated @TestApi public boolean revokeRuntimePermission(String packageName, String permission, UserHandle userHandle) { + revokeRuntimePermissionAsUser(packageName, permission, userHandle); + return true; + } + + /** + * Revokes a runtime permission from a package. + * @param packageName The package to which to grant. + * @param permission The permission to grant. + * @throws SecurityException if unable to revoke the permission. + */ + public void revokeRuntimePermissionAsUser(String packageName, String permission, + UserHandle userHandle) { synchronized (mLock) { throwIfNotConnectedLocked(); } @@ -925,12 +962,9 @@ public final class UiAutomation { // Calling out without a lock held. mUiAutomationConnection.revokeRuntimePermission(packageName, permission, userHandle.getIdentifier()); - // TODO: The package manager API should return boolean. - return true; - } catch (RemoteException re) { - Log.e(LOG_TAG, "Error revoking runtime permission", re); + } catch (Exception e) { + throw new SecurityException("Error granting runtime permission", e); } - return false; } /** @@ -949,6 +983,7 @@ public final class UiAutomation { synchronized (mLock) { throwIfNotConnectedLocked(); } + warnIfBetterCommand(command); ParcelFileDescriptor source = null; ParcelFileDescriptor sink = null; @@ -991,6 +1026,7 @@ public final class UiAutomation { synchronized (mLock) { throwIfNotConnectedLocked(); } + warnIfBetterCommand(command); ParcelFileDescriptor source_read = null; ParcelFileDescriptor sink_read = null; @@ -1056,6 +1092,16 @@ public final class UiAutomation { } } + private void warnIfBetterCommand(String cmd) { + if (cmd.startsWith("pm grant ")) { + Log.w(LOG_TAG, "UiAutomation.grantRuntimePermission() " + + "is more robust and should be used instead of 'pm grant'"); + } else if (cmd.startsWith("pm revoke ")) { + Log.w(LOG_TAG, "UiAutomation.revokeRuntimePermission() " + + "is more robust and should be used instead of 'pm revoke'"); + } + } + private class IAccessibilityServiceClientImpl extends IAccessibilityServiceClientWrapper { public IAccessibilityServiceClientImpl(Looper looper) { diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index aec33b35849ac1c1fa242391aeea794dcfd93f01..b64aae5240b23da52a404b37799485e3d2da8ea8 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -124,6 +124,7 @@ import java.util.concurrent.Executor; @SystemService(Context.DEVICE_POLICY_SERVICE) @RequiresFeature(PackageManager.FEATURE_DEVICE_ADMIN) public class DevicePolicyManager { + private static String TAG = "DevicePolicyManager"; private final Context mContext; @@ -1612,8 +1613,6 @@ public class DevicePolicyManager { *

  • keyguard * * - * This is the default configuration for LockTask. - * * @see #setLockTaskFeatures(ComponentName, int) */ public static final int LOCK_TASK_FEATURE_NONE = 0; @@ -1631,7 +1630,10 @@ public class DevicePolicyManager { /** * Enable notifications during LockTask mode. This includes notification icons on the status * bar, heads-up notifications, and the expandable notification shade. Note that the Quick - * Settings panel will still be disabled. + * Settings panel remains disabled. This feature flag can only be used in combination with + * {@link #LOCK_TASK_FEATURE_HOME}. {@link #setLockTaskFeatures(ComponentName, int)} + * throws an {@link IllegalArgumentException} if this feature flag is defined without + * {@link #LOCK_TASK_FEATURE_HOME}. * * @see #setLockTaskFeatures(ComponentName, int) */ @@ -1664,6 +1666,9 @@ public class DevicePolicyManager { * the user long-presses the power button, for example. Note that the user may not be able to * power off the device if this flag is not set. * + *

    This flag is enabled by default until {@link #setLockTaskFeatures(ComponentName, int)} is + * called for the first time. + * * @see #setLockTaskFeatures(ComponentName, int) */ public static final int LOCK_TASK_FEATURE_GLOBAL_ACTIONS = 1 << 4; @@ -1746,6 +1751,25 @@ public class DevicePolicyManager { */ public static final int ID_TYPE_MEID = 8; + /** + * Specifies that the calling app should be granted access to the installed credentials + * immediately. Otherwise, access to the credentials will be gated by user approval. + * For use with {@link #installKeyPair(ComponentName, PrivateKey, Certificate[], String, int)} + * + * @see #installKeyPair(ComponentName, PrivateKey, Certificate[], String, int) + */ + public static final int INSTALLKEY_REQUEST_CREDENTIALS_ACCESS = 1; + + /** + * Specifies that a user can select the key via the Certificate Selection prompt. + * If this flag is not set when calling {@link #installKeyPair}, the key can only be granted + * access by implementing {@link android.app.admin.DeviceAdminReceiver#onChoosePrivateKeyAlias}. + * For use with {@link #installKeyPair(ComponentName, PrivateKey, Certificate[], String, int)} + * + * @see #installKeyPair(ComponentName, PrivateKey, Certificate[], String, int) + */ + public static final int INSTALLKEY_SET_USER_SELECTABLE = 2; + /** * Broadcast action: sent when the profile owner is set, changed or cleared. * @@ -2722,110 +2746,6 @@ public class DevicePolicyManager { return 16; } - /** - * The maximum number of characters allowed in the password blacklist. - */ - private static final int PASSWORD_BLACKLIST_CHARACTER_LIMIT = 128 * 1000; - - /** - * Throws an exception if the password blacklist is too large. - * - * @hide - */ - public static void enforcePasswordBlacklistSize(List blacklist) { - if (blacklist == null) { - return; - } - long characterCount = 0; - for (final String item : blacklist) { - characterCount += item.length(); - } - if (characterCount > PASSWORD_BLACKLIST_CHARACTER_LIMIT) { - throw new IllegalArgumentException("128 thousand blacklist character limit exceeded by " - + (characterCount - PASSWORD_BLACKLIST_CHARACTER_LIMIT) + " characters"); - } - } - - /** - * Called by an application that is administering the device to blacklist passwords. - *

    - * Any blacklisted password or PIN is prevented from being enrolled by the user or the admin. - * Note that the match against the blacklist is case insensitive. The blacklist applies for all - * password qualities requested by {@link #setPasswordQuality} however it is not taken into - * consideration by {@link #isActivePasswordSufficient}. - *

    - * The blacklist can be cleared by passing {@code null} or an empty list. The blacklist is - * given a name that is used to track which blacklist is currently set by calling {@link - * #getPasswordBlacklistName}. If the blacklist is being cleared, the name is ignored and {@link - * #getPasswordBlacklistName} will return {@code null}. The name can only be {@code null} when - * the blacklist is being cleared. - *

    - * The blacklist is limited to a total of 128 thousand characters rather than limiting to a - * number of entries. - *

    - * This method can be called on the {@link DevicePolicyManager} instance returned by - * {@link #getParentProfileInstance(ComponentName)} in order to set restrictions on the parent - * profile. - * - * @param admin the {@link DeviceAdminReceiver} this request is associated with - * @param name name to associate with the blacklist - * @param blacklist list of passwords to blacklist or {@code null} to clear the blacklist - * @return whether the new blacklist was successfully installed - * @throws SecurityException if {@code admin} is not a device or profile owner - * @throws IllegalArgumentException if the blacklist surpasses the character limit - * @throws NullPointerException if {@code name} is {@code null} when setting a non-empty list - * - * @see #getPasswordBlacklistName - * @see #isActivePasswordSufficient - * @see #resetPasswordWithToken - */ - public boolean setPasswordBlacklist(@NonNull ComponentName admin, @Nullable String name, - @Nullable List blacklist) { - enforcePasswordBlacklistSize(blacklist); - - try { - return mService.setPasswordBlacklist(admin, name, blacklist, mParentInstance); - } catch (RemoteException re) { - throw re.rethrowFromSystemServer(); - } - } - - /** - * Get the name of the password blacklist set by the given admin. - * - * @param admin the {@link DeviceAdminReceiver} this request is associated with - * @return the name of the blacklist or {@code null} if no blacklist is set - * - * @see #setPasswordBlacklist - */ - public @Nullable String getPasswordBlacklistName(@NonNull ComponentName admin) { - try { - return mService.getPasswordBlacklistName(admin, myUserId(), mParentInstance); - } catch (RemoteException re) { - throw re.rethrowFromSystemServer(); - } - } - - /** - * Test if a given password is blacklisted. - * - * @param userId the user to valiate for - * @param password the password to check against the blacklist - * @return whether the password is blacklisted - * - * @see #setPasswordBlacklist - * - * @hide - */ - @RequiresPermission(android.Manifest.permission.TEST_BLACKLISTED_PASSWORD) - public boolean isPasswordBlacklisted(@UserIdInt int userId, @NonNull String password) { - try { - return mService.isPasswordBlacklisted(userId, password); - } catch (RemoteException re) { - throw re.rethrowFromSystemServer(); - } - } - /** * Determine whether the current password the user has set is sufficient to meet the policy * requirements (e.g. quality, minimum length) that have been requested by the admins of this @@ -4122,7 +4042,11 @@ public class DevicePolicyManager { */ public boolean installKeyPair(@Nullable ComponentName admin, @NonNull PrivateKey privKey, @NonNull Certificate[] certs, @NonNull String alias, boolean requestAccess) { - return installKeyPair(admin, privKey, certs, alias, requestAccess, true); + int flags = INSTALLKEY_SET_USER_SELECTABLE; + if (requestAccess) { + flags |= INSTALLKEY_REQUEST_CREDENTIALS_ACCESS; + } + return installKeyPair(admin, privKey, certs, alias, flags); } /** @@ -4146,13 +4070,9 @@ public class DevicePolicyManager { * {@link android.security.KeyChain#getCertificateChain}. * @param alias The private key alias under which to install the certificate. If a certificate * with that alias already exists, it will be overwritten. - * @param requestAccess {@code true} to request that the calling app be granted access to the - * credentials immediately. Otherwise, access to the credentials will be gated by user - * approval. - * @param isUserSelectable {@code true} to indicate that a user can select this key via the - * Certificate Selection prompt, false to indicate that this key can only be granted - * access by implementing - * {@link android.app.admin.DeviceAdminReceiver#onChoosePrivateKeyAlias}. + * @param flags Flags to request that the calling app be granted access to the credentials + * and set the key to be user-selectable. See {@link #INSTALLKEY_SET_USER_SELECTABLE} and + * {@link #INSTALLKEY_REQUEST_CREDENTIALS_ACCESS}. * @return {@code true} if the keys were installed, {@code false} otherwise. * @throws SecurityException if {@code admin} is not {@code null} and not a device or profile * owner. @@ -4161,9 +4081,12 @@ public class DevicePolicyManager { * @see #DELEGATION_CERT_INSTALL */ public boolean installKeyPair(@Nullable ComponentName admin, @NonNull PrivateKey privKey, - @NonNull Certificate[] certs, @NonNull String alias, boolean requestAccess, - boolean isUserSelectable) { + @NonNull Certificate[] certs, @NonNull String alias, int flags) { throwIfParentInstance("installKeyPair"); + boolean requestAccess = (flags & INSTALLKEY_REQUEST_CREDENTIALS_ACCESS) + == INSTALLKEY_REQUEST_CREDENTIALS_ACCESS; + boolean isUserSelectable = (flags & INSTALLKEY_SET_USER_SELECTABLE) + == INSTALLKEY_SET_USER_SELECTABLE; try { final byte[] pemCert = Credentials.convertToPem(certs[0]); byte[] pemChain = null; @@ -4242,6 +4165,8 @@ public class DevicePolicyManager { * algorithm specification in {@code keySpec} is not {@code RSAKeyGenParameterSpec} * or {@code ECGenParameterSpec}, or if Device ID attestation was requested but the * {@code keySpec} does not contain an attestation challenge. + * @throws UnsupportedOperationException if Device ID attestation was requested but the + * underlying hardware does not support it. * @see KeyGenParameterSpec.Builder#setAttestationChallenge(byte[]) */ public AttestedKeyPair generateKeyPair(@Nullable ComponentName admin, @@ -6359,6 +6284,7 @@ public class DevicePolicyManager { * @hide */ @SystemApi + @RequiresPermission(android.Manifest.permission.MANAGE_USERS) public @Nullable List getPermittedInputMethodsForCurrentUser() { throwIfParentInstance("getPermittedInputMethodsForCurrentUser"); if (mService != null) { @@ -7186,30 +7112,24 @@ public class DevicePolicyManager { } /** - * Sets which system features to enable for LockTask mode. - *

    - * Feature flags set through this method will only take effect for the duration when the device - * is in LockTask mode. If this method is not called, none of the features listed here will be - * enabled. - *

    - * This function can only be called by the device owner, a profile owner of an affiliated user - * or profile, or the profile owner when no device owner is set. See {@link #isAffiliatedUser}. - * Any features set via this method will be cleared if the user becomes unaffiliated. + * Sets which system features are enabled when the device runs in lock task mode. This method + * doesn't affect the features when lock task mode is inactive. Any system features not included + * in {@code flags} are implicitly disabled when calling this method. By default, only + * {@link #LOCK_TASK_FEATURE_GLOBAL_ACTIONS} is enabled—all the other features are disabled. To + * disable the global actions dialog, call this method omitting + * {@link #LOCK_TASK_FEATURE_GLOBAL_ACTIONS}. + * + *

    This method can only be called by the device owner, a profile owner of an affiliated + * user or profile, or the profile owner when no device owner is set. See + * {@link #isAffiliatedUser}. + * Any features set using this method are cleared if the user becomes unaffiliated. * * @param admin Which {@link DeviceAdminReceiver} this request is associated with. - * @param flags Bitfield of feature flags: - * {@link #LOCK_TASK_FEATURE_NONE} (default), - * {@link #LOCK_TASK_FEATURE_SYSTEM_INFO}, - * {@link #LOCK_TASK_FEATURE_NOTIFICATIONS}, - * {@link #LOCK_TASK_FEATURE_HOME}, - * {@link #LOCK_TASK_FEATURE_OVERVIEW}, - * {@link #LOCK_TASK_FEATURE_GLOBAL_ACTIONS}, - * {@link #LOCK_TASK_FEATURE_KEYGUARD} + * @param flags The system features enabled during lock task mode. * @throws SecurityException if {@code admin} is not the device owner, the profile owner of an * affiliated user or profile, or the profile owner when no device owner is set. * @see #isAffiliatedUser - * @throws SecurityException if {@code admin} is not the device owner or the profile owner. - */ + **/ public void setLockTaskFeatures(@NonNull ComponentName admin, @LockTaskFeature int flags) { throwIfParentInstance("setLockTaskFeatures"); if (mService != null) { @@ -7302,11 +7222,12 @@ public class DevicePolicyManager { public @interface SystemSettingsWhitelist {} /** - * Called by device owner to update {@link android.provider.Settings.System} settings. - * Validation that the value of the setting is in the correct form for the setting type should - * be performed by the caller. + * Called by a device or profile owner to update {@link android.provider.Settings.System} + * settings. Validation that the value of the setting is in the correct form for the setting + * type should be performed by the caller. *

    - * The settings that can be updated with this method are: + * The settings that can be updated by a device owner or profile owner of secondary user with + * this method are: *

      *
    • {@link android.provider.Settings.System#SCREEN_BRIGHTNESS}
    • *
    • {@link android.provider.Settings.System#SCREEN_BRIGHTNESS_MODE}
    • @@ -7318,7 +7239,7 @@ public class DevicePolicyManager { * @param admin Which {@link DeviceAdminReceiver} this request is associated with. * @param setting The name of the setting to update. * @param value The value to update the setting to. - * @throws SecurityException if {@code admin} is not a device owner. + * @throws SecurityException if {@code admin} is not a device or profile owner. */ public void setSystemSetting(@NonNull ComponentName admin, @NonNull @SystemSettingsWhitelist String setting, String value) { diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index 4b39a9a53252ef0a8842daa8894913c2c63df3e9..37508cdc1119f2244978a3347819513e3e5d91d3 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -79,10 +79,6 @@ interface IDevicePolicyManager { long getPasswordExpiration(in ComponentName who, int userHandle, boolean parent); - boolean setPasswordBlacklist(in ComponentName who, String name, in List blacklist, boolean parent); - String getPasswordBlacklistName(in ComponentName who, int userId, boolean parent); - boolean isPasswordBlacklisted(int userId, String password); - boolean isActivePasswordSufficient(int userHandle, boolean parent); boolean isProfileActivePasswordSufficientForParent(int userHandle); boolean isUsingUnifiedPassword(in ComponentName admin); diff --git a/core/java/android/app/slice/ISliceManager.aidl b/core/java/android/app/slice/ISliceManager.aidl index 74e3c3ee4c81661cc56cd521e25c5129cb9d8287..a2aaf12432f8894972b7189aa8521104d3fdf423 100644 --- a/core/java/android/app/slice/ISliceManager.aidl +++ b/core/java/android/app/slice/ISliceManager.aidl @@ -25,7 +25,8 @@ interface ISliceManager { void unpinSlice(String pkg, in Uri uri, in IBinder token); boolean hasSliceAccess(String pkg); SliceSpec[] getPinnedSpecs(in Uri uri, String pkg); - int checkSlicePermission(in Uri uri, String pkg, int pid, int uid); + int checkSlicePermission(in Uri uri, String pkg, int pid, int uid, + in String[] autoGrantPermissions); void grantPermissionFromUser(in Uri uri, String pkg, String callingPkg, boolean allSlices); Uri[] getPinnedSlices(String pkg); diff --git a/core/java/android/app/slice/Slice.java b/core/java/android/app/slice/Slice.java index 95bb1f6827010c597c284302163d1669efea83fe..bf3398ad3c731c5d1b139aaeeaeac4762f61514d 100644 --- a/core/java/android/app/slice/Slice.java +++ b/core/java/android/app/slice/Slice.java @@ -70,6 +70,7 @@ public final class Slice implements Parcelable { HINT_ERROR, HINT_TTL, HINT_LAST_UPDATED, + HINT_PERMISSION_REQUEST, }) @Retention(RetentionPolicy.SOURCE) public @interface SliceHint {} @@ -86,6 +87,7 @@ public final class Slice implements Parcelable { SUBTYPE_SOURCE, SUBTYPE_TOGGLE, SUBTYPE_VALUE, + SUBTYPE_LAYOUT_DIRECTION, }) @Retention(RetentionPolicy.SOURCE) public @interface SliceSubtype {} @@ -183,6 +185,17 @@ public final class Slice implements Parcelable { * Hint indicating an item representing when the content was created or last updated. */ public static final String HINT_LAST_UPDATED = "last_updated"; + /** + * A hint to indicate that this slice represents a permission request for showing + * slices. + */ + public static final String HINT_PERMISSION_REQUEST = "permission_request"; + /** + * Subtype to indicate that this item indicates the layout direction for content + * in the slice. + * Expected to be an item of format {@link SliceItem#FORMAT_INT}. + */ + public static final String SUBTYPE_LAYOUT_DIRECTION = "layout_direction"; /** * Key to retrieve an extra added to an intent when a control is changed. */ diff --git a/core/java/android/app/slice/SliceManager.java b/core/java/android/app/slice/SliceManager.java index 1afe53d8a7b50b77f21af079051af087fff4cd31..0285e9f9cc592e6fa0f123b7ace4ce80439c1ffc 100644 --- a/core/java/android/app/slice/SliceManager.java +++ b/core/java/android/app/slice/SliceManager.java @@ -26,6 +26,7 @@ import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; +import android.content.pm.PackageManager.PermissionResult; import android.content.pm.ResolveInfo; import android.net.Uri; import android.os.Binder; @@ -81,6 +82,17 @@ public class SliceManager { * An activity can be statically linked to a slice uri by including a meta-data item * for this key that contains a valid slice uri for the same application declaring * the activity. + * + *
      +     * {@literal
      +     * 
      +     *     
      +     *  }
      +     * 
      + * + * @see #mapIntentToUri(Intent) + * @see SliceProvider#onMapIntentToUri(Intent) */ public static final String SLICE_METADATA_KEY = "android.metadata.SLICE_URI"; @@ -257,16 +269,17 @@ public class SliceManager { *

      * This goes through a several stage resolution process to determine if any slice * can represent this intent. - * - If the intent contains data that {@link ContentResolver#getType} is - * {@link SliceProvider#SLICE_TYPE} then the data will be returned. - * - If the intent with {@link #CATEGORY_SLICE} added resolves to a provider, then + *

        + *
      1. If the intent contains data that {@link ContentResolver#getType} is + * {@link SliceProvider#SLICE_TYPE} then the data will be returned.
      2. + *
      3. If the intent with {@link #CATEGORY_SLICE} added resolves to a provider, then * the provider will be asked to {@link SliceProvider#onMapIntentToUri} and that result - * will be returned. - * - Lastly, if the intent explicitly points at an activity, and that activity has + * will be returned.
      4. + *
      5. Lastly, if the intent explicitly points at an activity, and that activity has * meta-data for key {@link #SLICE_METADATA_KEY}, then the Uri specified there will be - * returned. - * - If no slice is found, then {@code null} is returned. - * + * returned.
      6. + *
      7. If no slice is found, then {@code null} is returned.
      8. + *
      * @param intent The intent associated with a slice. * @return The Slice Uri provided by the app or null if none exists. * @see Slice @@ -388,11 +401,71 @@ public class SliceManager { } } + /** + * Determine whether a particular process and user ID has been granted + * permission to access a specific slice URI. + * + * @param uri The uri that is being checked. + * @param pid The process ID being checked against. Must be > 0. + * @param uid The user ID being checked against. A uid of 0 is the root + * user, which will pass every permission check. + * + * @return {@link PackageManager#PERMISSION_GRANTED} if the given + * pid/uid is allowed to access that uri, or + * {@link PackageManager#PERMISSION_DENIED} if it is not. + * + * @see #grantSlicePermission(String, Uri) + */ + public @PermissionResult int checkSlicePermission(@NonNull Uri uri, int pid, int uid) { + // TODO: Switch off Uri permissions. + return mContext.checkUriPermission(uri, pid, uid, + Intent.FLAG_GRANT_WRITE_URI_PERMISSION); + } + + /** + * Grant permission to access a specific slice Uri to another package. + * + * @param toPackage The package you would like to allow to access the Uri. + * @param uri The Uri you would like to grant access to. + * + * @see #revokeSlicePermission + */ + public void grantSlicePermission(@NonNull String toPackage, @NonNull Uri uri) { + // TODO: Switch off Uri permissions. + mContext.grantUriPermission(toPackage, uri, + Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION + | Intent.FLAG_GRANT_WRITE_URI_PERMISSION + | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION); + } + + /** + * Remove permissions to access a particular content provider Uri + * that were previously added with {@link #grantSlicePermission} for a specific target + * package. The given Uri will match all previously granted Uris that are the same or a + * sub-path of the given Uri. That is, revoking "content://foo/target" will + * revoke both "content://foo/target" and "content://foo/target/sub", but not + * "content://foo". It will not remove any prefix grants that exist at a + * higher level. + * + * @param toPackage The package you would like to allow to access the Uri. + * @param uri The Uri you would like to revoke access to. + * + * @see #grantSlicePermission + */ + public void revokeSlicePermission(@NonNull String toPackage, @NonNull Uri uri) { + // TODO: Switch off Uri permissions. + mContext.revokeUriPermission(toPackage, uri, + Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION + | Intent.FLAG_GRANT_WRITE_URI_PERMISSION + | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION); + } + /** * Does the permission check to see if a caller has access to a specific slice. * @hide */ - public void enforceSlicePermission(Uri uri, String pkg, int pid, int uid) { + public void enforceSlicePermission(Uri uri, String pkg, int pid, int uid, + String[] autoGrantPermissions) { try { if (UserHandle.isSameApp(uid, Process.myUid())) { return; @@ -400,7 +473,7 @@ public class SliceManager { if (pkg == null) { throw new SecurityException("No pkg specified"); } - int result = mService.checkSlicePermission(uri, pkg, pid, uid); + int result = mService.checkSlicePermission(uri, pkg, pid, uid, autoGrantPermissions); if (result == PERMISSION_DENIED) { throw new SecurityException("User " + uid + " does not have slice permission for " + uri + "."); @@ -412,6 +485,8 @@ public class SliceManager { Intent.FLAG_GRANT_PERSISTABLE_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_PREFIX_URI_PERMISSION); + // Notify a change has happened because we just granted a permission. + mContext.getContentResolver().notifyChange(uri, null); } } catch (RemoteException e) { throw e.rethrowFromSystemServer(); diff --git a/core/java/android/app/slice/SliceProvider.java b/core/java/android/app/slice/SliceProvider.java index bf856b74f0675add7aa571648d30bafb54fc1638..fe5742d6da38d589281776ad29c223eaf507a257 100644 --- a/core/java/android/app/slice/SliceProvider.java +++ b/core/java/android/app/slice/SliceProvider.java @@ -149,10 +149,31 @@ public abstract class SliceProvider extends ContentProvider { private static final boolean DEBUG = false; private static final long SLICE_BIND_ANR = 2000; + private final String[] mAutoGrantPermissions; private String mCallback; private SliceManager mSliceManager; + /** + * A version of constructing a SliceProvider that allows autogranting slice permissions + * to apps that hold specific platform permissions. + *

      + * When an app tries to bind a slice from this provider that it does not have access to, + * This provider will check if the caller holds permissions to any of the autoGrantPermissions + * specified, if they do they will be granted persisted uri access to all slices of this + * provider. + * + * @param autoGrantPermissions List of permissions that holders are auto-granted access + * to slices. + */ + public SliceProvider(@NonNull String... autoGrantPermissions) { + mAutoGrantPermissions = autoGrantPermissions; + } + + public SliceProvider() { + mAutoGrantPermissions = new String[0]; + } + @Override public void attachInfo(Context context, ProviderInfo info) { super.attachInfo(context, info); @@ -402,7 +423,7 @@ public abstract class SliceProvider extends ContentProvider { : getContext().getPackageManager().getNameForUid(callingUid); try { mSliceManager.enforceSlicePermission(sliceUri, pkg, - callingPid, callingUid); + callingPid, callingUid, mAutoGrantPermissions); } catch (SecurityException e) { return createPermissionSlice(getContext(), sliceUri, pkg); } @@ -428,15 +449,17 @@ public abstract class SliceProvider extends ContentProvider { } finally { Handler.getMain().removeCallbacks(mAnr); } - return new Slice.Builder(sliceUri) - .addAction(action, - new Slice.Builder(sliceUri.buildUpon().appendPath("permission").build()) - .addText(getPermissionString(context, callingPackage), null, - Collections.emptyList()) - .build(), - null) - .addHints(Arrays.asList(Slice.HINT_LIST_ITEM)) - .build(); + Slice.Builder parent = new Slice.Builder(sliceUri); + Slice.Builder childAction = new Slice.Builder(parent) + .addHints(Arrays.asList(Slice.HINT_TITLE, Slice.HINT_SHORTCUT)) + .addAction(action, new Slice.Builder(parent).build(), null); + + parent.addSubSlice(new Slice.Builder(sliceUri.buildUpon().appendPath("permission").build()) + .addText(getPermissionString(context, callingPackage), null, + Collections.emptyList()) + .addSubSlice(childAction.build(), null) + .build(), null); + return parent.addHints(Arrays.asList(Slice.HINT_PERMISSION_REQUEST)).build(); } /** diff --git a/core/java/android/app/usage/NetworkStats.java b/core/java/android/app/usage/NetworkStats.java index da36157d85f8c5b924df2e358888df38d2099ccb..e315e9115f418be593d63add62647b9a968df4f1 100644 --- a/core/java/android/app/usage/NetworkStats.java +++ b/core/java/android/app/usage/NetworkStats.java @@ -24,7 +24,6 @@ import android.net.NetworkStatsHistory; import android.net.NetworkTemplate; import android.net.TrafficStats; import android.os.RemoteException; -import android.os.ServiceManager; import android.util.IntArray; import android.util.Log; @@ -98,9 +97,8 @@ public final class NetworkStats implements AutoCloseable { /** @hide */ NetworkStats(Context context, NetworkTemplate template, int flags, long startTimestamp, - long endTimestamp) throws RemoteException, SecurityException { - final INetworkStatsService statsService = INetworkStatsService.Stub.asInterface( - ServiceManager.getService(Context.NETWORK_STATS_SERVICE)); + long endTimestamp, INetworkStatsService statsService) + throws RemoteException, SecurityException { // Open network stats session mSession = statsService.openSessionForUsageStats(flags, context.getOpPackageName()); mCloseGuard.open("close"); diff --git a/core/java/android/app/usage/NetworkStatsManager.java b/core/java/android/app/usage/NetworkStatsManager.java index 5576e86edd8a35bbd2ca4550567feedc91ce12ec..2357637b7270ffb2d3b8b043dce047ea2b2c8ed4 100644 --- a/core/java/android/app/usage/NetworkStatsManager.java +++ b/core/java/android/app/usage/NetworkStatsManager.java @@ -37,6 +37,8 @@ import android.os.ServiceManager; import android.os.ServiceManager.ServiceNotFoundException; import android.util.Log; +import com.android.internal.annotations.VisibleForTesting; + /** * Provides access to network usage history and statistics. Usage data is collected in * discrete bins of time called 'Buckets'. See {@link NetworkStats.Bucket} for details. @@ -107,9 +109,15 @@ public class NetworkStatsManager { * {@hide} */ public NetworkStatsManager(Context context) throws ServiceNotFoundException { + this(context, INetworkStatsService.Stub.asInterface( + ServiceManager.getServiceOrThrow(Context.NETWORK_STATS_SERVICE))); + } + + /** @hide */ + @VisibleForTesting + public NetworkStatsManager(Context context, INetworkStatsService service) { mContext = context; - mService = INetworkStatsService.Stub.asInterface( - ServiceManager.getServiceOrThrow(Context.NETWORK_STATS_SERVICE)); + mService = service; setPollOnOpen(true); } @@ -135,7 +143,8 @@ public class NetworkStatsManager { public Bucket querySummaryForDevice(NetworkTemplate template, long startTime, long endTime) throws SecurityException, RemoteException { Bucket bucket = null; - NetworkStats stats = new NetworkStats(mContext, template, mFlags, startTime, endTime); + NetworkStats stats = new NetworkStats(mContext, template, mFlags, startTime, endTime, + mService); bucket = stats.getDeviceSummaryForNetwork(); stats.close(); @@ -208,7 +217,7 @@ public class NetworkStatsManager { } NetworkStats stats; - stats = new NetworkStats(mContext, template, mFlags, startTime, endTime); + stats = new NetworkStats(mContext, template, mFlags, startTime, endTime, mService); stats.startSummaryEnumeration(); stats.close(); @@ -245,7 +254,7 @@ public class NetworkStatsManager { } NetworkStats result; - result = new NetworkStats(mContext, template, mFlags, startTime, endTime); + result = new NetworkStats(mContext, template, mFlags, startTime, endTime, mService); result.startSummaryEnumeration(); return result; @@ -295,7 +304,7 @@ public class NetworkStatsManager { NetworkStats result; try { - result = new NetworkStats(mContext, template, mFlags, startTime, endTime); + result = new NetworkStats(mContext, template, mFlags, startTime, endTime, mService); result.startHistoryEnumeration(uid, tag); } catch (RemoteException e) { Log.e(TAG, "Error while querying stats for uid=" + uid + " tag=" + tag, e); @@ -341,7 +350,7 @@ public class NetworkStatsManager { } NetworkStats result; - result = new NetworkStats(mContext, template, mFlags, startTime, endTime); + result = new NetworkStats(mContext, template, mFlags, startTime, endTime, mService); result.startUserUidEnumeration(); return result; } @@ -451,19 +460,20 @@ public class NetworkStatsManager { } private static NetworkTemplate createTemplate(int networkType, String subscriberId) { - NetworkTemplate template = null; + final NetworkTemplate template; switch (networkType) { - case ConnectivityManager.TYPE_MOBILE: { - template = NetworkTemplate.buildTemplateMobileAll(subscriberId); - } break; - case ConnectivityManager.TYPE_WIFI: { + case ConnectivityManager.TYPE_MOBILE: + template = subscriberId == null + ? NetworkTemplate.buildTemplateMobileWildcard() + : NetworkTemplate.buildTemplateMobileAll(subscriberId); + break; + case ConnectivityManager.TYPE_WIFI: template = NetworkTemplate.buildTemplateWifiWildcard(); - } break; - default: { + break; + default: throw new IllegalArgumentException("Cannot create template for network type " + networkType + ", subscriberId '" + NetworkIdentity.scrubSubscriberId(subscriberId) + "'."); - } } return template; } diff --git a/core/java/android/app/usage/UsageStatsManager.java b/core/java/android/app/usage/UsageStatsManager.java index d27265259daf798bd1a2d4a588d1e01f5d08619d..eafe91a3450a3aab95b5f366a98105ba5df138a3 100644 --- a/core/java/android/app/usage/UsageStatsManager.java +++ b/core/java/android/app/usage/UsageStatsManager.java @@ -183,10 +183,13 @@ public final class UsageStatsManager { public static final int REASON_SUB_USAGE_SLICE_PINNED = 0x0009; /** @hide */ public static final int REASON_SUB_USAGE_SLICE_PINNED_PRIV = 0x000A; + /** @hide */ + public static final int REASON_SUB_USAGE_EXEMPTED_SYNC_START = 0x000B; /** @hide */ public static final int REASON_SUB_PREDICTED_RESTORED = 0x0001; + /** @hide */ @IntDef(flag = false, prefix = { "STANDBY_BUCKET_" }, value = { STANDBY_BUCKET_EXEMPTED, @@ -665,6 +668,9 @@ public final class UsageStatsManager { case REASON_SUB_USAGE_SLICE_PINNED_PRIV: sb.append("slpp"); break; + case REASON_SUB_USAGE_EXEMPTED_SYNC_START: + sb.append("es"); + break; } break; } diff --git a/core/java/android/app/usage/UsageStatsManagerInternal.java b/core/java/android/app/usage/UsageStatsManagerInternal.java index 09ced2648de1acff210fa0dc5251baf219102945..b8628a4d446bd313cd9a7d5d66e4be349e98c5e7 100644 --- a/core/java/android/app/usage/UsageStatsManagerInternal.java +++ b/core/java/android/app/usage/UsageStatsManagerInternal.java @@ -243,4 +243,12 @@ public abstract class UsageStatsManagerInternal { */ public abstract void reportAppJobState(String packageName, @UserIdInt int userId, int numDeferredJobs, long timeSinceLastJobRun); + + /** + * Report a sync that was scheduled by an active app is about to be executed. + * + * @param packageName name of the package that owns the sync adapter. + * @param userId which user the app is associated with + */ + public abstract void reportExemptedSyncStart(String packageName, @UserIdInt int userId); } diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java index 440103a6d8a46b37400616a3d98d85035daf086c..9f3df377c4e2f0ca81f4ae3e4cc6ae62085e20fe 100644 --- a/core/java/android/content/ContentResolver.java +++ b/core/java/android/content/ContentResolver.java @@ -166,24 +166,13 @@ public abstract class ContentResolver { public static final String SYNC_EXTRAS_DISALLOW_METERED = "allow_metered"; /** - * {@hide} Flag only used by the requestsync command to treat a request as if it was made by - * a foreground app. + * {@hide} Integer extra containing a SyncExemption flag. * * Only the system and the shell user can set it. * * This extra is "virtual". Once passed to the system server, it'll be removed from the bundle. */ - public static final String SYNC_VIRTUAL_EXTRAS_FORCE_FG_SYNC = "force_fg_sync"; - - /** - * {@hide} Flag only used by the requestsync command to treat a request as if it was made by - * a background app. - * - * Only the system and the shell user can set it. - * - * This extra is "virtual". Once passed to the system server, it'll be removed from the bundle. - */ - public static final String SYNC_VIRTUAL_EXTRAS_FORCE_BG_SYNC = "force_bg_sync"; + public static final String SYNC_VIRTUAL_EXTRAS_EXEMPTION_FLAG = "v_exemption"; /** * Set by the SyncManager to request that the SyncAdapter initialize itself for @@ -525,6 +514,38 @@ public abstract class ContentResolver { */ public static final int NOTIFY_SKIP_NOTIFY_FOR_DESCENDANTS = 1<<1; + /** + * No exception, throttled by app standby normally. + * @hide + */ + public static final int SYNC_EXEMPTION_NONE = 0; + + /** + * When executing a sync with this exemption, we'll put the target app in the ACTIVE bucket + * for 10 minutes. This will allow the sync adapter to schedule/run further syncs and jobs. + * + * Note this will still *not* let RARE apps to run syncs, because they still won't get network + * connection. + * @hide + */ + public static final int SYNC_EXEMPTION_ACTIVE = 1; + + /** + * In addition to {@link #SYNC_EXEMPTION_ACTIVE}, we put the sync adapter app in the + * temp whitelist for 10 minutes, so that even RARE apps can run syncs right away. + * @hide + */ + public static final int SYNC_EXEMPTION_ACTIVE_WITH_TEMP = 2; + + /** @hide */ + @IntDef(flag = false, prefix = { "SYNC_EXEMPTION_" }, value = { + SYNC_EXEMPTION_NONE, + SYNC_EXEMPTION_ACTIVE, + SYNC_EXEMPTION_ACTIVE_WITH_TEMP, + }) + @Retention(RetentionPolicy.SOURCE) + public @interface SyncExemption {} + // Always log queries which take 500ms+; shorter queries are // sampled accordingly. private static final boolean ENABLE_CONTENT_SAMPLE = false; diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index d4ec5d509fcd9a6d1a5b2164419c73efe6cfc0bf..000912cd1e4736f42e71dd701b19fa638e3d7b96 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -1851,6 +1851,17 @@ public class Intent implements Parcelable, Cloneable { @SystemApi public static final String EXTRA_RESULT_NEEDED = "android.intent.extra.RESULT_NEEDED"; + /** + * Intent extra: A {@link Bundle} of extras supplied for the launcher when any packages on + * device are suspended. Will be sent with {@link #ACTION_PACKAGES_SUSPENDED}. + * + * @see PackageManager#isPackageSuspended() + * @see #ACTION_PACKAGES_SUSPENDED + * + * @hide + */ + public static final String EXTRA_LAUNCHER_EXTRAS = "android.intent.extra.LAUNCHER_EXTRAS"; + /** * Activity action: Launch UI to manage which apps have a given permission. *

      @@ -2251,8 +2262,8 @@ public class Intent implements Parcelable, Cloneable { /** * Broadcast Action: Sent to a package that has been suspended by the system. This is sent - * whenever a package is put into a suspended state or any of it's app extras change while - * in the suspended state. + * whenever a package is put into a suspended state or any of its app extras change while in the + * suspended state. *

      Optionally includes the following extras: *

        *
      • {@link #EXTRA_SUSPENDED_PACKAGE_EXTRAS} which is a {@link Bundle} which will contain diff --git a/core/java/android/content/pm/ILauncherApps.aidl b/core/java/android/content/pm/ILauncherApps.aidl index c08bd1db83029bef26dd447ed542fd2b484dcad6..ae1c2071eecac6a10d2fdc97f52aa66b7fb4dcb8 100644 --- a/core/java/android/content/pm/ILauncherApps.aidl +++ b/core/java/android/content/pm/ILauncherApps.aidl @@ -49,6 +49,7 @@ interface ILauncherApps { String callingPackage, in ComponentName component, in Rect sourceBounds, in Bundle opts, in UserHandle user); boolean isPackageEnabled(String callingPackage, String packageName, in UserHandle user); + Bundle getSuspendedPackageLauncherExtras(String packageName, in UserHandle user); boolean isActivityEnabled( String callingPackage, in ComponentName component, in UserHandle user); ApplicationInfo getApplicationInfo( diff --git a/core/java/android/content/pm/IOnAppsChangedListener.aidl b/core/java/android/content/pm/IOnAppsChangedListener.aidl index e6525af311ed399701d801b54cf18f10e83aa306..fcb1de016078e4774c9a8c4f7b40ad0459b13d47 100644 --- a/core/java/android/content/pm/IOnAppsChangedListener.aidl +++ b/core/java/android/content/pm/IOnAppsChangedListener.aidl @@ -17,6 +17,7 @@ package android.content.pm; import android.content.pm.ParceledListSlice; +import android.os.Bundle; import android.os.UserHandle; /** @@ -28,7 +29,8 @@ oneway interface IOnAppsChangedListener { void onPackageChanged(in UserHandle user, String packageName); void onPackagesAvailable(in UserHandle user, in String[] packageNames, boolean replacing); void onPackagesUnavailable(in UserHandle user, in String[] packageNames, boolean replacing); - void onPackagesSuspended(in UserHandle user, in String[] packageNames); + void onPackagesSuspended(in UserHandle user, in String[] packageNames, + in Bundle launcherExtras); void onPackagesUnsuspended(in UserHandle user, in String[] packageNames); void onShortcutChanged(in UserHandle user, String packageName, in ParceledListSlice shortcuts); } diff --git a/core/java/android/content/pm/LauncherApps.java b/core/java/android/content/pm/LauncherApps.java index 21ede165efaf887bf5e8dcc35bc6d62103b74d4e..9aace2e7ba8dad3b9d1fe7f06fb2b7af91720acf 100644 --- a/core/java/android/content/pm/LauncherApps.java +++ b/core/java/android/content/pm/LauncherApps.java @@ -211,6 +211,10 @@ public class LauncherApps { * example, this can happen when a Device Administrator suspends * an applicaton. * + *

        Note: On devices running {@link android.os.Build.VERSION_CODES#P Android P} or higher, + * any apps that override {@link #onPackagesSuspended(String[], Bundle, UserHandle)} will + * not receive this callback. + * * @param packageNames The names of the packages that have just been * suspended. * @param user The UserHandle of the profile that generated the change. @@ -218,6 +222,22 @@ public class LauncherApps { public void onPackagesSuspended(String[] packageNames, UserHandle user) { } + /** + * Indicates that one or more packages have been suspended. A device administrator or an app + * with {@code android.permission.SUSPEND_APPS} can do this. + * + * @param packageNames The names of the packages that have just been suspended. + * @param launcherExtras A {@link Bundle} of extras for the launcher. + * @param user the user for which the given packages were suspended. + * + * @see PackageManager#isPackageSuspended() + * @see #getSuspendedPackageLauncherExtras(String, UserHandle) + */ + public void onPackagesSuspended(String[] packageNames, @Nullable Bundle launcherExtras, + UserHandle user) { + onPackagesSuspended(packageNames, user); + } + /** * Indicates that one or more packages have been unsuspended. For * example, this can happen when a Device Administrator unsuspends @@ -637,6 +657,31 @@ public class LauncherApps { } } + /** + * Gets the launcher extras supplied to the system when the given package was suspended via + * {@code PackageManager#setPackagesSuspended(String[], boolean, PersistableBundle, + * PersistableBundle, String)}. + * + *

        Note: This just returns whatever extras were provided to the system, which might + * even be {@code null}. + * + * @param packageName The package for which to fetch the launcher extras. + * @param user The {@link UserHandle} of the profile. + * @return A {@link Bundle} of launcher extras. Or {@code null} if the package is not currently + * suspended. + * + * @see Callback#onPackagesSuspended(String[], Bundle, UserHandle) + * @see PackageManager#isPackageSuspended() + */ + public @Nullable Bundle getSuspendedPackageLauncherExtras(String packageName, UserHandle user) { + logErrorForInvalidProfileAccess(user); + try { + return mService.getSuspendedPackageLauncherExtras(packageName, user); + } catch (RemoteException re) { + throw re.rethrowFromSystemServer(); + } + } + /** * Returns {@link ApplicationInfo} about an application installed for a specific user profile. * @@ -652,7 +697,7 @@ public class LauncherApps { @ApplicationInfoFlags int flags, @NonNull UserHandle user) throws PackageManager.NameNotFoundException { Preconditions.checkNotNull(packageName, "packageName"); - Preconditions.checkNotNull(packageName, "user"); + Preconditions.checkNotNull(user, "user"); logErrorForInvalidProfileAccess(user); try { final ApplicationInfo ai = mService @@ -1163,14 +1208,15 @@ public class LauncherApps { } @Override - public void onPackagesSuspended(UserHandle user, String[] packageNames) + public void onPackagesSuspended(UserHandle user, String[] packageNames, + Bundle launcherExtras) throws RemoteException { if (DEBUG) { Log.d(TAG, "onPackagesSuspended " + user.getIdentifier() + "," + packageNames); } synchronized (LauncherApps.this) { for (CallbackMessageHandler callback : mCallbacks) { - callback.postOnPackagesSuspended(packageNames, user); + callback.postOnPackagesSuspended(packageNames, launcherExtras, user); } } } @@ -1218,6 +1264,7 @@ public class LauncherApps { private static class CallbackInfo { String[] packageNames; String packageName; + Bundle launcherExtras; boolean replacing; UserHandle user; List shortcuts; @@ -1251,7 +1298,8 @@ public class LauncherApps { mCallback.onPackagesUnavailable(info.packageNames, info.user, info.replacing); break; case MSG_SUSPENDED: - mCallback.onPackagesSuspended(info.packageNames, info.user); + mCallback.onPackagesSuspended(info.packageNames, info.launcherExtras, + info.user); break; case MSG_UNSUSPENDED: mCallback.onPackagesUnsuspended(info.packageNames, info.user); @@ -1301,10 +1349,12 @@ public class LauncherApps { obtainMessage(MSG_UNAVAILABLE, info).sendToTarget(); } - public void postOnPackagesSuspended(String[] packageNames, UserHandle user) { + public void postOnPackagesSuspended(String[] packageNames, Bundle launcherExtras, + UserHandle user) { CallbackInfo info = new CallbackInfo(); info.packageNames = packageNames; info.user = user; + info.launcherExtras = launcherExtras; obtainMessage(MSG_SUSPENDED, info).sendToTarget(); } diff --git a/core/java/android/content/pm/PackageManagerInternal.java b/core/java/android/content/pm/PackageManagerInternal.java index dff51f77788ee95ee02495811392b1b71ee9b157..c9b78c08202e0cf4dbf5de0212d61e213c324ec7 100644 --- a/core/java/android/content/pm/PackageManagerInternal.java +++ b/core/java/android/content/pm/PackageManagerInternal.java @@ -26,6 +26,7 @@ import android.content.pm.PackageManager.ComponentInfoFlags; import android.content.pm.PackageManager.PackageInfoFlags; import android.content.pm.PackageManager.ResolveInfoFlags; import android.os.Bundle; +import android.os.PersistableBundle; import android.util.SparseArray; import java.lang.annotation.Retention; @@ -187,6 +188,22 @@ public abstract class PackageManagerInternal { public abstract PackageInfo getPackageInfo(String packageName, @PackageInfoFlags int flags, int filterCallingUid, int userId); + /** + * Retrieve launcher extras for a suspended package provided to the system in + * {@link PackageManager#setPackagesSuspended(String[], boolean, PersistableBundle, + * PersistableBundle, String)} + * + * @param packageName The package for which to return launcher extras. + * @param userId The user for which to check, + * @return The launcher extras. + * + * @see PackageManager#setPackagesSuspended(String[], boolean, PersistableBundle, + * PersistableBundle, String) + * @see PackageManager#isPackageSuspended() + */ + public abstract Bundle getSuspendedPackageLauncherExtras(String packageName, + int userId); + /** * Do a straight uid lookup for the given package/application in the given user. * @see PackageManager#getPackageUidAsUser(String, int, int) diff --git a/core/java/android/hardware/display/DisplayManager.java b/core/java/android/hardware/display/DisplayManager.java index a3b2d22deccbf8b0034d7facc5b6322c70136e7c..efb9517adc008c73c78624714235de299d4b191c 100644 --- a/core/java/android/hardware/display/DisplayManager.java +++ b/core/java/android/hardware/display/DisplayManager.java @@ -534,6 +534,19 @@ public final class DisplayManager { return mGlobal.getWifiDisplayStatus(); } + /** + * Set the level of color saturation to apply to the display. + * @param level The amount of saturation to apply, between 0 and 1 inclusive. + * 0 produces a grayscale image, 1 is normal. + * + * @hide + */ + @SystemApi + @RequiresPermission(Manifest.permission.CONTROL_DISPLAY_SATURATION) + public void setSaturationLevel(float level) { + mGlobal.setSaturationLevel(level); + } + /** * Creates a virtual display. * diff --git a/core/java/android/hardware/display/DisplayManagerGlobal.java b/core/java/android/hardware/display/DisplayManagerGlobal.java index 1f67a6bf71a721b7ecf967aa92baf50598d223bb..2d0ef2f23432edfd1542225635e10e0f0fb40ee2 100644 --- a/core/java/android/hardware/display/DisplayManagerGlobal.java +++ b/core/java/android/hardware/display/DisplayManagerGlobal.java @@ -384,6 +384,17 @@ public final class DisplayManagerGlobal { } } + /** + * Set the level of color saturation to apply to the display. + */ + public void setSaturationLevel(float level) { + try { + mDm.setSaturationLevel(level); + } catch (RemoteException ex) { + throw ex.rethrowFromSystemServer(); + } + } + public VirtualDisplay createVirtualDisplay(Context context, MediaProjection projection, String name, int width, int height, int densityDpi, Surface surface, int flags, VirtualDisplay.Callback callback, Handler handler, String uniqueId) { diff --git a/core/java/android/hardware/display/IDisplayManager.aidl b/core/java/android/hardware/display/IDisplayManager.aidl index 9fcb9d3fc265aa5afde4734129e9dc276cd5df60..b77de748a987d2c9792179c6d04c33a0e965ac32 100644 --- a/core/java/android/hardware/display/IDisplayManager.aidl +++ b/core/java/android/hardware/display/IDisplayManager.aidl @@ -65,6 +65,9 @@ interface IDisplayManager { // Requires CONFIGURE_DISPLAY_COLOR_MODE void requestColorMode(int displayId, int colorMode); + // Requires CONTROL_DISPLAY_SATURATION + void setSaturationLevel(float level); + // Requires CAPTURE_VIDEO_OUTPUT, CAPTURE_SECURE_VIDEO_OUTPUT, or an appropriate // MediaProjection token for certain combinations of flags. int createVirtualDisplay(in IVirtualDisplayCallback callback, diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java index 5e28570c798dc1f93f5379b131bb49daaa6c3354..a6c8c67d29a6db0a3ff68c2410f14c0f0ab97c27 100644 --- a/core/java/android/hardware/fingerprint/FingerprintManager.java +++ b/core/java/android/hardware/fingerprint/FingerprintManager.java @@ -1158,14 +1158,22 @@ public class FingerprintManager implements BiometricFingerprintConstants { @Override // binder call public void onError(long deviceId, int error, int vendorCode) { if (mExecutor != null) { - // BiometricDialog case, post a delayed runnable on the FingerprintManager handler - // that sends the error message after FingerprintDialog.HIDE_DIALOG_DELAY to send - // the error to the application. - mHandler.postDelayed(() -> { + // BiometricDialog case + if (error == FingerprintManager.FINGERPRINT_ERROR_USER_CANCELED) { + // User tapped somewhere to cancel, the biometric dialog is already dismissed. mExecutor.execute(() -> { sendErrorResult(deviceId, error, vendorCode); }); - }, BiometricDialog.HIDE_DIALOG_DELAY); + } else { + // User got an error that needs to be displayed on the dialog, post a delayed + // runnable on the FingerprintManager handler that sends the error message after + // FingerprintDialog.HIDE_DIALOG_DELAY to send the error to the application. + mHandler.postDelayed(() -> { + mExecutor.execute(() -> { + sendErrorResult(deviceId, error, vendorCode); + }); + }, BiometricDialog.HIDE_DIALOG_DELAY); + } } else { mHandler.obtainMessage(MSG_ERROR, error, vendorCode, deviceId).sendToTarget(); } diff --git a/core/java/android/hardware/radio/ProgramList.java b/core/java/android/hardware/radio/ProgramList.java index b2aa9ba532a95c6d736c972511e909984ca2d8c0..e6f523c07e7025412ea901e6155970e690dae45e 100644 --- a/core/java/android/hardware/radio/ProgramList.java +++ b/core/java/android/hardware/radio/ProgramList.java @@ -260,6 +260,17 @@ public final class ProgramList implements AutoCloseable { mVendorFilter = null; } + /** + * @hide for framework use only + */ + public Filter() { + mIdentifierTypes = Collections.emptySet(); + mIdentifiers = Collections.emptySet(); + mIncludeCategories = false; + mExcludeModifications = false; + mVendorFilter = null; + } + /** * @hide for framework use only */ diff --git a/core/java/android/hardware/radio/RadioManager.java b/core/java/android/hardware/radio/RadioManager.java index 8fde82ef201253498b58a955ba3b9136b24d9264..8263bb8dfd2d9080d6b61a552254ea96b5413288 100644 --- a/core/java/android/hardware/radio/RadioManager.java +++ b/core/java/android/hardware/radio/RadioManager.java @@ -211,6 +211,7 @@ public class RadioManager { private final String mSerial; private final int mNumTuners; private final int mNumAudioSources; + private final boolean mIsInitializationRequired; private final boolean mIsCaptureSupported; private final BandDescriptor[] mBands; private final boolean mIsBgScanSupported; @@ -222,7 +223,8 @@ public class RadioManager { /** @hide */ public ModuleProperties(int id, String serviceName, int classId, String implementor, String product, String version, String serial, int numTuners, int numAudioSources, - boolean isCaptureSupported, BandDescriptor[] bands, boolean isBgScanSupported, + boolean isInitializationRequired, boolean isCaptureSupported, + BandDescriptor[] bands, boolean isBgScanSupported, @ProgramSelector.ProgramType int[] supportedProgramTypes, @ProgramSelector.IdentifierType int[] supportedIdentifierTypes, @Nullable Map dabFrequencyTable, @@ -236,6 +238,7 @@ public class RadioManager { mSerial = serial; mNumTuners = numTuners; mNumAudioSources = numAudioSources; + mIsInitializationRequired = isInitializationRequired; mIsCaptureSupported = isCaptureSupported; mBands = bands; mIsBgScanSupported = isBgScanSupported; @@ -329,6 +332,18 @@ public class RadioManager { return mNumAudioSources; } + /** + * Checks, if BandConfig initialization (after {@link RadioManager#openTuner}) + * is required to be done before other operations or not. + * + * If it is, the client has to wait for {@link RadioTuner.Callback#onConfigurationChanged} + * callback before executing any other operations. Otherwise, such operation will fail + * returning {@link RadioManager#STATUS_INVALID_OPERATION} error code. + */ + public boolean isInitializationRequired() { + return mIsInitializationRequired; + } + /** {@code true} if audio capture is possible from radio tuner output. * This indicates if routing to audio devices not connected to the same HAL as the FM radio * is possible (e.g. to USB) or DAR (Digital Audio Recorder) feature can be implemented. @@ -419,6 +434,7 @@ public class RadioManager { mSerial = in.readString(); mNumTuners = in.readInt(); mNumAudioSources = in.readInt(); + mIsInitializationRequired = in.readInt() == 1; mIsCaptureSupported = in.readInt() == 1; Parcelable[] tmp = in.readParcelableArray(BandDescriptor.class.getClassLoader()); mBands = new BandDescriptor[tmp.length]; @@ -454,6 +470,7 @@ public class RadioManager { dest.writeString(mSerial); dest.writeInt(mNumTuners); dest.writeInt(mNumAudioSources); + dest.writeInt(mIsInitializationRequired ? 1 : 0); dest.writeInt(mIsCaptureSupported ? 1 : 0); dest.writeParcelableArray(mBands, flags); dest.writeInt(mIsBgScanSupported ? 1 : 0); @@ -476,6 +493,7 @@ public class RadioManager { + ", mVersion=" + mVersion + ", mSerial=" + mSerial + ", mNumTuners=" + mNumTuners + ", mNumAudioSources=" + mNumAudioSources + + ", mIsInitializationRequired=" + mIsInitializationRequired + ", mIsCaptureSupported=" + mIsCaptureSupported + ", mIsBgScanSupported=" + mIsBgScanSupported + ", mBands=" + Arrays.toString(mBands) + "]"; @@ -484,8 +502,8 @@ public class RadioManager { @Override public int hashCode() { return Objects.hash(mId, mServiceName, mClassId, mImplementor, mProduct, mVersion, - mSerial, mNumTuners, mNumAudioSources, mIsCaptureSupported, mBands, - mIsBgScanSupported, mDabFrequencyTable, mVendorInfo); + mSerial, mNumTuners, mNumAudioSources, mIsInitializationRequired, + mIsCaptureSupported, mBands, mIsBgScanSupported, mDabFrequencyTable, mVendorInfo); } @Override @@ -503,6 +521,7 @@ public class RadioManager { if (!Objects.equals(mSerial, other.mSerial)) return false; if (mNumTuners != other.mNumTuners) return false; if (mNumAudioSources != other.mNumAudioSources) return false; + if (mIsInitializationRequired != other.mIsInitializationRequired) return false; if (mIsCaptureSupported != other.mIsCaptureSupported) return false; if (!Objects.equals(mBands, other.mBands)) return false; if (mIsBgScanSupported != other.mIsBgScanSupported) return false; diff --git a/core/java/android/hardware/radio/TunerAdapter.java b/core/java/android/hardware/radio/TunerAdapter.java index 85f3115689cd998f9c46c47d8413c52f40ddb579..be2846f870799e3fa4d7e73d5a0431fd07acd768 100644 --- a/core/java/android/hardware/radio/TunerAdapter.java +++ b/core/java/android/hardware/radio/TunerAdapter.java @@ -60,6 +60,7 @@ class TunerAdapter extends RadioTuner { mLegacyListProxy.close(); mLegacyListProxy = null; } + mCallback.close(); } try { mTuner.close(); @@ -278,6 +279,7 @@ class TunerAdapter extends RadioTuner { try { mTuner.startProgramListUpdates(filter); } catch (UnsupportedOperationException ex) { + Log.i(TAG, "Program list is not supported with this hardware"); return null; } catch (RemoteException ex) { mCallback.setProgramListObserver(null, () -> { }); diff --git a/core/java/android/hardware/radio/TunerCallbackAdapter.java b/core/java/android/hardware/radio/TunerCallbackAdapter.java index 7437c40351db37eb47ff8eebd76cc5c69edfa3e8..0fb93e532cd3f1cedbca0261a2aa151cf59c58bf 100644 --- a/core/java/android/hardware/radio/TunerCallbackAdapter.java +++ b/core/java/android/hardware/radio/TunerCallbackAdapter.java @@ -53,6 +53,12 @@ class TunerCallbackAdapter extends ITunerCallback.Stub { } } + void close() { + synchronized (mLock) { + if (mProgramList != null) mProgramList.close(); + } + } + void setProgramListObserver(@Nullable ProgramList programList, @NonNull ProgramList.OnCloseListener closeListener) { Objects.requireNonNull(closeListener); diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index e07f586a570193c61b7c11e1ea09aedeb81016fc..80b1c3dfa06d358134f5ea5d9968bba7cf2f5003 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -861,6 +861,10 @@ public class ConnectivityManager { * You should always check {@link NetworkInfo#isConnected()} before initiating * network traffic. This may return {@code null} when there is no default * network. + * Note that if the default network is a VPN, this method will return the + * NetworkInfo for one of its underlying networks instead, or null if the + * VPN agent did not specify any. Apps interested in learning about VPNs + * should use {@link #getNetworkInfo(android.net.Network)} instead. * * @return a {@link NetworkInfo} object for the current default network * or {@code null} if no default network is currently active @@ -1018,7 +1022,11 @@ public class ConnectivityManager { * which you're interested. * @return a {@link NetworkInfo} object for the requested * network type or {@code null} if the type is not - * supported by the device. + * supported by the device. If {@code networkType} is + * TYPE_VPN and a VPN is active for the calling app, + * then this method will try to return one of the + * underlying networks for the VPN or null if the + * VPN agent didn't specify any. * * @deprecated This method does not support multiple connected networks * of the same type. Use {@link #getAllNetworks} and diff --git a/core/java/android/net/IpSecAlgorithm.java b/core/java/android/net/IpSecAlgorithm.java index 57f05884ce6d5d7fb1fc880824776670fa2e5f47..8034bb62c94c693e13e16615dd2af8a85f246490 100644 --- a/core/java/android/net/IpSecAlgorithm.java +++ b/core/java/android/net/IpSecAlgorithm.java @@ -56,7 +56,8 @@ public final class IpSecAlgorithm implements Parcelable { * new applications and is provided for legacy compatibility with 3gpp infrastructure. * *

        Keys for this algorithm must be 128 bits in length. - *

        Valid truncation lengths are multiples of 8 bits from 96 to (default) 128. + * + *

        Valid truncation lengths are multiples of 8 bits from 96 to 128. */ public static final String AUTH_HMAC_MD5 = "hmac(md5)"; @@ -65,7 +66,8 @@ public final class IpSecAlgorithm implements Parcelable { * new applications and is provided for legacy compatibility with 3gpp infrastructure. * *

        Keys for this algorithm must be 160 bits in length. - *

        Valid truncation lengths are multiples of 8 bits from 96 to (default) 160. + * + *

        Valid truncation lengths are multiples of 8 bits from 96 to 160. */ public static final String AUTH_HMAC_SHA1 = "hmac(sha1)"; @@ -73,7 +75,8 @@ public final class IpSecAlgorithm implements Parcelable { * SHA256 HMAC Authentication/Integrity Algorithm. * *

        Keys for this algorithm must be 256 bits in length. - *

        Valid truncation lengths are multiples of 8 bits from 96 to (default) 256. + * + *

        Valid truncation lengths are multiples of 8 bits from 96 to 256. */ public static final String AUTH_HMAC_SHA256 = "hmac(sha256)"; @@ -81,7 +84,8 @@ public final class IpSecAlgorithm implements Parcelable { * SHA384 HMAC Authentication/Integrity Algorithm. * *

        Keys for this algorithm must be 384 bits in length. - *

        Valid truncation lengths are multiples of 8 bits from 192 to (default) 384. + * + *

        Valid truncation lengths are multiples of 8 bits from 192 to 384. */ public static final String AUTH_HMAC_SHA384 = "hmac(sha384)"; @@ -89,7 +93,8 @@ public final class IpSecAlgorithm implements Parcelable { * SHA512 HMAC Authentication/Integrity Algorithm. * *

        Keys for this algorithm must be 512 bits in length. - *

        Valid truncation lengths are multiples of 8 bits from 256 to (default) 512. + * + *

        Valid truncation lengths are multiples of 8 bits from 256 to 512. */ public static final String AUTH_HMAC_SHA512 = "hmac(sha512)"; @@ -112,6 +117,7 @@ public final class IpSecAlgorithm implements Parcelable { AUTH_HMAC_MD5, AUTH_HMAC_SHA1, AUTH_HMAC_SHA256, + AUTH_HMAC_SHA384, AUTH_HMAC_SHA512, AUTH_CRYPT_AES_GCM }) @@ -126,11 +132,14 @@ public final class IpSecAlgorithm implements Parcelable { * Creates an IpSecAlgorithm of one of the supported types. Supported algorithm names are * defined as constants in this class. * + *

        For algorithms that produce an integrity check value, the truncation length is a required + * parameter. See {@link #IpSecAlgorithm(String algorithm, byte[] key, int truncLenBits)} + * * @param algorithm name of the algorithm. * @param key key padded to a multiple of 8 bits. */ public IpSecAlgorithm(@NonNull @AlgorithmName String algorithm, @NonNull byte[] key) { - this(algorithm, key, key.length * 8); + this(algorithm, key, 0); } /** @@ -228,6 +237,7 @@ public final class IpSecAlgorithm implements Parcelable { case AUTH_CRYPT_AES_GCM: // The keying material for GCM is a key plus a 32-bit salt isValidLen = keyLen == 128 + 32 || keyLen == 192 + 32 || keyLen == 256 + 32; + isValidTruncLen = truncLen == 64 || truncLen == 96 || truncLen == 128; break; default: throw new IllegalArgumentException("Couldn't find an algorithm: " + name); diff --git a/core/java/android/net/IpSecManager.java b/core/java/android/net/IpSecManager.java index 972b9c07469035ebd1271ba80a6df1cdc45400ef..15255083260b720c3ba30e9002b6307594112734 100644 --- a/core/java/android/net/IpSecManager.java +++ b/core/java/android/net/IpSecManager.java @@ -274,7 +274,8 @@ public final class IpSecManager { * * @param destinationAddress the destination address for traffic bearing the requested SPI. * For inbound traffic, the destination should be an address currently assigned on-device. - * @param requestedSpi the requested SPI, or '0' to allocate a random SPI + * @param requestedSpi the requested SPI, or '0' to allocate a random SPI. The range 1-255 is + * reserved and may not be used. See RFC 4303 Section 2.1. * @return the reserved SecurityParameterIndex * @throws {@link #ResourceUnavailableException} indicating that too many SPIs are * currently allocated for this user @@ -305,6 +306,19 @@ public final class IpSecManager { * will throw IOException if the user deactivates the transform (by calling {@link * IpSecTransform#close()}) without calling {@link #removeTransportModeTransforms}. * + *

        Note that when applied to TCP sockets, calling {@link IpSecTransform#close()} on an + * applied transform before completion of graceful shutdown may result in the shutdown sequence + * failing to complete. As such, applications requiring graceful shutdown MUST close the socket + * prior to deactivating the applied transform. Socket closure may be performed asynchronously + * (in batches), so the returning of a close function does not guarantee shutdown of a socket. + * Setting an SO_LINGER timeout results in socket closure being performed synchronously, and is + * sufficient to ensure shutdown. + * + * Specifically, if the transform is deactivated (by calling {@link IpSecTransform#close()}), + * prior to the socket being closed, the standard [FIN - FIN/ACK - ACK], or the reset [RST] + * packets are dropped due to the lack of a valid Transform. Similarly, if a socket without the + * SO_LINGER option set is closed, the delayed/batched FIN packets may be dropped. + * *

        Rekey Procedure

        * *

        When applying a new tranform to a socket in the outbound direction, the previous transform @@ -373,6 +387,19 @@ public final class IpSecManager { * will throw IOException if the user deactivates the transform (by calling {@link * IpSecTransform#close()}) without calling {@link #removeTransportModeTransforms}. * + *

        Note that when applied to TCP sockets, calling {@link IpSecTransform#close()} on an + * applied transform before completion of graceful shutdown may result in the shutdown sequence + * failing to complete. As such, applications requiring graceful shutdown MUST close the socket + * prior to deactivating the applied transform. Socket closure may be performed asynchronously + * (in batches), so the returning of a close function does not guarantee shutdown of a socket. + * Setting an SO_LINGER timeout results in socket closure being performed synchronously, and is + * sufficient to ensure shutdown. + * + * Specifically, if the transform is deactivated (by calling {@link IpSecTransform#close()}), + * prior to the socket being closed, the standard [FIN - FIN/ACK - ACK], or the reset [RST] + * packets are dropped due to the lack of a valid Transform. Similarly, if a socket without the + * SO_LINGER option set is closed, the delayed/batched FIN packets may be dropped. + * *

        Rekey Procedure

        * *

        When applying a new tranform to a socket in the outbound direction, the previous transform @@ -476,7 +503,7 @@ public final class IpSecManager { * signalling and UDP encapsulated IPsec traffic. Instances can be obtained by calling {@link * IpSecManager#openUdpEncapsulationSocket}. The provided socket cannot be re-bound by the * caller. The caller should not close the {@code FileDescriptor} returned by {@link - * #getSocket}, but should use {@link #close} instead. + * #getFileDescriptor}, but should use {@link #close} instead. * *

        Allowing the user to close or unbind a UDP encapsulation socket could impact the traffic * of the next user who binds to that port. To prevent this scenario, these sockets are held @@ -515,8 +542,8 @@ public final class IpSecManager { mCloseGuard.open("constructor"); } - /** Get the wrapped socket. */ - public FileDescriptor getSocket() { + /** Get the encapsulation socket's file descriptor. */ + public FileDescriptor getFileDescriptor() { if (mPfd == null) { return null; } diff --git a/core/java/android/net/Network.java b/core/java/android/net/Network.java index 5df168d20586c65bffde212b62fe1d0c3caffc4d..15a0ee5eb2a6066610dbe4e1e0b817582139b10f 100644 --- a/core/java/android/net/Network.java +++ b/core/java/android/net/Network.java @@ -26,6 +26,8 @@ import android.util.proto.ProtoOutputStream; import com.android.okhttp.internalandroidapi.Dns; import com.android.okhttp.internalandroidapi.HttpURLConnectionFactory; +import libcore.io.IoUtils; + import java.io.FileDescriptor; import java.io.IOException; import java.net.DatagramSocket; @@ -77,6 +79,11 @@ public class Network implements Parcelable { httpKeepAlive ? Integer.parseInt(System.getProperty("http.maxConnections", "5")) : 0; private static final long httpKeepAliveDurationMs = Long.parseLong(System.getProperty("http.keepAliveDuration", "300000")); // 5 minutes. + // Value used to obfuscate network handle longs. + // The HANDLE_MAGIC value MUST be kept in sync with the corresponding + // value in the native/android/net.c NDK implementation. + private static final long HANDLE_MAGIC = 0xcafed00dL; + private static final int HANDLE_MAGIC_SIZE = 32; /** * @hide @@ -137,9 +144,15 @@ public class Network implements Parcelable { for (int i = 0; i < hostAddresses.length; i++) { try { Socket socket = createSocket(); - if (localAddress != null) socket.bind(localAddress); - socket.connect(new InetSocketAddress(hostAddresses[i], port)); - return socket; + boolean failed = true; + try { + if (localAddress != null) socket.bind(localAddress); + socket.connect(new InetSocketAddress(hostAddresses[i], port)); + failed = false; + return socket; + } finally { + if (failed) IoUtils.closeQuietly(socket); + } } catch (IOException e) { if (i == (hostAddresses.length - 1)) throw e; } @@ -156,15 +169,27 @@ public class Network implements Parcelable { public Socket createSocket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException { Socket socket = createSocket(); - socket.bind(new InetSocketAddress(localAddress, localPort)); - socket.connect(new InetSocketAddress(address, port)); + boolean failed = true; + try { + socket.bind(new InetSocketAddress(localAddress, localPort)); + socket.connect(new InetSocketAddress(address, port)); + failed = false; + } finally { + if (failed) IoUtils.closeQuietly(socket); + } return socket; } @Override public Socket createSocket(InetAddress host, int port) throws IOException { Socket socket = createSocket(); - socket.connect(new InetSocketAddress(host, port)); + boolean failed = true; + try { + socket.connect(new InetSocketAddress(host, port)); + failed = false; + } finally { + if (failed) IoUtils.closeQuietly(socket); + } return socket; } @@ -176,7 +201,13 @@ public class Network implements Parcelable { @Override public Socket createSocket() throws IOException { Socket socket = new Socket(); - bindSocket(socket); + boolean failed = true; + try { + bindSocket(socket); + failed = false; + } finally { + if (failed) IoUtils.closeQuietly(socket); + } return socket; } } @@ -334,6 +365,25 @@ public class Network implements Parcelable { } } + /** + * Returns a {@link Network} object given a handle returned from {@link #getNetworkHandle}. + * + * @param networkHandle a handle returned from {@link #getNetworkHandle}. + * @return A {@link Network} object derived from {@code networkHandle}. + */ + public static Network fromNetworkHandle(long networkHandle) { + if (networkHandle == 0) { + throw new IllegalArgumentException( + "Network.fromNetworkHandle refusing to instantiate NETID_UNSET Network."); + } + if ((networkHandle & ((1L << HANDLE_MAGIC_SIZE) - 1)) != HANDLE_MAGIC + || networkHandle < 0) { + throw new IllegalArgumentException( + "Value passed to fromNetworkHandle() is not a network handle."); + } + return new Network((int) (networkHandle >> HANDLE_MAGIC_SIZE)); + } + /** * Returns a handle representing this {@code Network}, for use with the NDK API. */ @@ -356,14 +406,10 @@ public class Network implements Parcelable { // At some future date it may be desirable to realign the handle with // Multiple Provisioning Domains API recommendations, as made by the // IETF mif working group. - // - // The handleMagic value MUST be kept in sync with the corresponding - // value in the native/android/net.c NDK implementation. if (netId == 0) { return 0L; // make this zero condition obvious for debugging } - final long handleMagic = 0xcafed00dL; - return (((long) netId) << 32) | handleMagic; + return (((long) netId) << HANDLE_MAGIC_SIZE) | HANDLE_MAGIC; } // implement the Parcelable interface diff --git a/core/java/android/net/NetworkCapabilities.java b/core/java/android/net/NetworkCapabilities.java index ff5714b3821242dae3bb78d23cda93458917b45c..374b3abcb641c56432a35ac98e11c011b78f0899 100644 --- a/core/java/android/net/NetworkCapabilities.java +++ b/core/java/android/net/NetworkCapabilities.java @@ -17,6 +17,7 @@ package android.net; import android.annotation.IntDef; +import android.annotation.SystemApi; import android.net.ConnectivityManager.NetworkCallback; import android.os.Parcel; import android.os.Parcelable; @@ -276,6 +277,7 @@ public final class NetworkCapabilities implements Parcelable { * this network can be used by system apps to upload telemetry data. * @hide */ + @SystemApi public static final int NET_CAPABILITY_OEM_PAID = 22; private static final int MIN_NET_CAPABILITY = NET_CAPABILITY_MMS; diff --git a/core/java/android/net/NetworkRequest.java b/core/java/android/net/NetworkRequest.java index 4f92fa6a7340def151fc3381275a7dd22488dff1..caefd896ef1646a6bdce3c00b3f3e316dddc61cb 100644 --- a/core/java/android/net/NetworkRequest.java +++ b/core/java/android/net/NetworkRequest.java @@ -17,6 +17,8 @@ package android.net; import android.annotation.NonNull; +import android.net.NetworkCapabilities.NetCapability; +import android.net.NetworkCapabilities.Transport; import android.os.Parcel; import android.os.Parcelable; import android.os.Process; @@ -427,6 +429,20 @@ public class NetworkRequest implements Parcelable { return type == Type.BACKGROUND_REQUEST; } + /** + * @see Builder#addCapability(int) + */ + public boolean hasCapability(@NetCapability int capability) { + return networkCapabilities.hasCapability(capability); + } + + /** + * @see Builder#addTransportType(int) + */ + public boolean hasTransport(@Transport int transportType) { + return networkCapabilities.hasTransport(transportType); + } + public String toString() { return "NetworkRequest [ " + type + " id=" + requestId + (legacyType != ConnectivityManager.TYPE_NONE ? ", legacyType=" + legacyType : "") + diff --git a/core/java/android/os/IStatsCompanionService.aidl b/core/java/android/os/IStatsCompanionService.aidl index 402c995452e807765ebfca457cfe444199fc5198..116262e347deb76d53dc396b05a61f232ac0dc91 100644 --- a/core/java/android/os/IStatsCompanionService.aidl +++ b/core/java/android/os/IStatsCompanionService.aidl @@ -47,10 +47,10 @@ interface IStatsCompanionService { * Uses AlarmManager.setRepeating API, so if the timestamp is in past, alarm fires immediately, * and alarm is inexact. */ - oneway void setPullingAlarms(long timestampMs, long intervalMs); + oneway void setPullingAlarm(long nextPullTimeMs); /** Cancel any repeating pulling alarm. */ - oneway void cancelPullingAlarms(); + oneway void cancelPullingAlarm(); /** * Register an alarm when we want to trigger subscribers at the given diff --git a/core/java/android/os/UserHandle.java b/core/java/android/os/UserHandle.java index 5be72bc5c54bb3adcdc6ce87a922480af61bfdf9..094f0046649b43d1a3584603a2aebe51ec9cdd2e 100644 --- a/core/java/android/os/UserHandle.java +++ b/core/java/android/os/UserHandle.java @@ -158,7 +158,7 @@ public final class UserHandle implements Parcelable { * @hide */ public static boolean isCore(int uid) { - if (uid > 0) { + if (uid >= 0) { final int appId = getAppId(uid); return appId < Process.FIRST_APPLICATION_UID; } else { diff --git a/core/java/android/os/ZygoteProcess.java b/core/java/android/os/ZygoteProcess.java index ca4c796ab62dbd98000a711ce23a6a7fe2286548..b9dd376f464b67d52278aae5860e04d5d090deb3 100644 --- a/core/java/android/os/ZygoteProcess.java +++ b/core/java/android/os/ZygoteProcess.java @@ -32,6 +32,7 @@ import java.io.OutputStreamWriter; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; import java.util.List; import java.util.UUID; @@ -157,6 +158,13 @@ public class ZygoteProcess { */ private final Object mLock = new Object(); + /** + * List of exemptions to the API blacklist. These are prefix matches on the runtime format + * symbol signature. Any matching symbol is treated by the runtime as being on the light grey + * list. + */ + private List mApiBlacklistExemptions = Collections.emptyList(); + /** * The state of the connection to the primary zygote. */ @@ -175,7 +183,7 @@ public class ZygoteProcess { * The process will continue running after this function returns. * *

        If processes are not enabled, a new thread in the caller's - * process is created and main() of processClass called there. + * process is created and main() of processclass called there. * *

        The niceName parameter, if not an empty string, is a custom name to * give to the process instead of using processClass. This allows you to @@ -453,6 +461,49 @@ public class ZygoteProcess { } } + /** + * Push hidden API blacklisting exemptions into the zygote process(es). + * + *

        The list of exemptions will take affect for all new processes forked from the zygote after + * this call. + * + * @param exemptions List of hidden API exemption prefixes. + */ + public void setApiBlacklistExemptions(List exemptions) { + synchronized (mLock) { + mApiBlacklistExemptions = exemptions; + maybeSetApiBlacklistExemptions(primaryZygoteState, true); + maybeSetApiBlacklistExemptions(secondaryZygoteState, true); + } + } + + @GuardedBy("mLock") + private void maybeSetApiBlacklistExemptions(ZygoteState state, boolean sendIfEmpty) { + if (state == null || state.isClosed()) { + return; + } + if (!sendIfEmpty && mApiBlacklistExemptions.isEmpty()) { + return; + } + try { + state.writer.write(Integer.toString(mApiBlacklistExemptions.size() + 1)); + state.writer.newLine(); + state.writer.write("--set-api-blacklist-exemptions"); + state.writer.newLine(); + for (int i = 0; i < mApiBlacklistExemptions.size(); ++i) { + state.writer.write(mApiBlacklistExemptions.get(i)); + state.writer.newLine(); + } + state.writer.flush(); + int status = state.inputStream.readInt(); + if (status != 0) { + Slog.e(LOG_TAG, "Failed to set API blacklist exemptions; status " + status); + } + } catch (IOException ioe) { + Slog.e(LOG_TAG, "Failed to set API blacklist exemptions", ioe); + } + } + /** * Tries to open socket to Zygote process if not already open. If * already open, does nothing. May block and retry. Requires that mLock be held. @@ -467,8 +518,8 @@ public class ZygoteProcess { } catch (IOException ioe) { throw new ZygoteStartFailedEx("Error connecting to primary zygote", ioe); } + maybeSetApiBlacklistExemptions(primaryZygoteState, false); } - if (primaryZygoteState.matches(abi)) { return primaryZygoteState; } @@ -480,6 +531,7 @@ public class ZygoteProcess { } catch (IOException ioe) { throw new ZygoteStartFailedEx("Error connecting to secondary zygote", ioe); } + maybeSetApiBlacklistExemptions(secondaryZygoteState, false); } if (secondaryZygoteState.matches(abi)) { diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java index bf20e6a8296235d677a2b8a610de0c8678bfb2c9..8905ad1e6abc3c81dd0f21ef2116b316fe9e5ab8 100644 --- a/core/java/android/os/storage/StorageManager.java +++ b/core/java/android/os/storage/StorageManager.java @@ -756,10 +756,15 @@ public class StorageManager { } try { for (VolumeInfo vol : mStorageManager.getVolumes(0)) { - if (vol.path != null && FileUtils.contains(vol.path, pathString)) { + if (vol.path != null && FileUtils.contains(vol.path, pathString) + && vol.type != VolumeInfo.TYPE_PUBLIC) { // TODO: verify that emulated adopted devices have UUID of // underlying volume - return convert(vol.fsUuid); + try { + return convert(vol.fsUuid); + } catch (IllegalArgumentException e) { + continue; + } } } } catch (RemoteException e) { diff --git a/core/java/android/os/storage/VolumeInfo.java b/core/java/android/os/storage/VolumeInfo.java index 5c99f6c87d7c449958f89545118ebc03644f8e21..9e3e386eedb25f004fe37633e2bd988194645561 100644 --- a/core/java/android/os/storage/VolumeInfo.java +++ b/core/java/android/os/storage/VolumeInfo.java @@ -312,7 +312,7 @@ public class VolumeInfo implements Parcelable { * {@link android.Manifest.permission#WRITE_MEDIA_STORAGE}. */ public File getInternalPathForUser(int userId) { - if (type == TYPE_PUBLIC) { + if (type == TYPE_PUBLIC && !isVisible()) { // TODO: plumb through cleaner path from vold return new File(path.replace("/storage/", "/mnt/media_rw/")); } else { diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 70f343ee5f57b1c267453fdcd3f18c70e6d0dd2c..b0367dc3f2387f9a2792dd8c8442e6e8284eaee4 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -7808,6 +7808,14 @@ public final class Settings { public static final String SUPPRESS_AUTO_BATTERY_SAVER_SUGGESTION = "suppress_auto_battery_saver_suggestion"; + /** + * List of packages, which data need to be unconditionally cleared before full restore. + * Type: string + * @hide + */ + public static final String PACKAGES_TO_CLEAR_DATA_BEFORE_FULL_RESTORE = + "packages_to_clear_data_before_full_restore"; + /** * This are the settings to be backed up. * @@ -11053,7 +11061,14 @@ public final class Settings { */ public static final String LOW_POWER_MODE_TRIGGER_LEVEL_MAX = "low_power_trigger_level_max"; - /** + /** + * See com.android.settingslib.fuelgauge.BatterySaverUtils. + * @hide + */ + public static final String LOW_POWER_MODE_SUGGESTION_PARAMS = + "low_power_mode_suggestion_params"; + + /** * If not 0, the activity manager will aggressively finish activities and * processes as soon as they are no longer needed. If 0, the normal * extended lifetime is used. diff --git a/core/java/android/security/keymaster/KeymasterDefs.java b/core/java/android/security/keymaster/KeymasterDefs.java index 1d13335043508b11e21304a4658437635a0e7b2e..f4dcce1e7e58f64744b82132fd6ca045aa3e8e0a 100644 --- a/core/java/android/security/keymaster/KeymasterDefs.java +++ b/core/java/android/security/keymaster/KeymasterDefs.java @@ -75,6 +75,7 @@ public final class KeymasterDefs { public static final int KM_TAG_ALLOW_WHILE_ON_BODY = KM_BOOL | 506; public static final int KM_TAG_TRUSTED_USER_PRESENCE_REQUIRED = KM_BOOL | 507; public static final int KM_TAG_TRUSTED_CONFIRMATION_REQUIRED = KM_BOOL | 508; + public static final int KM_TAG_UNLOCKED_DEVICE_REQUIRED = KM_BOOL | 509; public static final int KM_TAG_ALL_APPLICATIONS = KM_BOOL | 600; public static final int KM_TAG_APPLICATION_ID = KM_BYTES | 601; @@ -216,6 +217,7 @@ public final class KeymasterDefs { public static final int KM_ERROR_MISSING_MIN_MAC_LENGTH = -58; public static final int KM_ERROR_UNSUPPORTED_MIN_MAC_LENGTH = -59; public static final int KM_ERROR_CANNOT_ATTEST_IDS = -66; + public static final int KM_ERROR_DEVICE_LOCKED = -72; public static final int KM_ERROR_UNIMPLEMENTED = -100; public static final int KM_ERROR_VERSION_MISMATCH = -101; public static final int KM_ERROR_UNKNOWN_ERROR = -1000; @@ -262,6 +264,7 @@ public final class KeymasterDefs { sErrorCodeToString.put(KM_ERROR_INVALID_MAC_LENGTH, "Invalid MAC or authentication tag length"); sErrorCodeToString.put(KM_ERROR_CANNOT_ATTEST_IDS, "Unable to attest device ids"); + sErrorCodeToString.put(KM_ERROR_DEVICE_LOCKED, "Device locked"); sErrorCodeToString.put(KM_ERROR_UNIMPLEMENTED, "Not implemented"); sErrorCodeToString.put(KM_ERROR_UNKNOWN_ERROR, "Unknown error"); } diff --git a/core/java/android/security/keystore/RecoveryController.java b/core/java/android/security/keystore/RecoveryController.java index d50424db4e5684829f558326425a4bf8d0685fca..741af1297763a0fe7b98b29b529c7bd99f539a8c 100644 --- a/core/java/android/security/keystore/RecoveryController.java +++ b/core/java/android/security/keystore/RecoveryController.java @@ -443,16 +443,7 @@ public class RecoveryController { */ public byte[] generateAndStoreKey(@NonNull String alias) throws InternalRecoveryServiceException, LockScreenRequiredException { - try { - return mBinder.generateAndStoreKey(alias); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } catch (ServiceSpecificException e) { - if (e.errorCode == ERROR_INSECURE_USER) { - throw new LockScreenRequiredException(e.getMessage()); - } - throw wrapUnexpectedServiceSpecificException(e); - } + throw new UnsupportedOperationException(); } /** diff --git a/core/java/android/security/keystore/recovery/KeyChainProtectionParams.java b/core/java/android/security/keystore/recovery/KeyChainProtectionParams.java index 2a66206e805eb7d4bd3bb8c62e99be2cf909d4ce..4af1af5f90cf292e4e3ed71a5314aa76e5ef1941 100644 --- a/core/java/android/security/keystore/recovery/KeyChainProtectionParams.java +++ b/core/java/android/security/keystore/recovery/KeyChainProtectionParams.java @@ -50,6 +50,22 @@ import java.util.Arrays; */ @SystemApi public final class KeyChainProtectionParams implements Parcelable { + + // IMPORTANT! PLEASE READ! + // ----------------------- + // If you edit this file (e.g., to add new fields), please MAKE SURE to also do the following: + // - Update the #writeToParcel(Parcel) method below + // - Update the #(Parcel) constructor below + // - Update android.security.keystore.recovery.KeyChainSnapshotTest to make sure nobody + // accidentally breaks your fields in the Parcel in the future. + // - Update com.android.server.locksettings.recoverablekeystore.serialization + // .KeyChainSnapshotSerializer to correctly serialize your new field + // - Update com.android.server.locksettings.recoverablekeystore.serialization + // .KeyChainSnapshotSerializer to correctly deserialize your new field + // - Update com.android.server.locksettings.recoverablekeystore.serialization + // .KeychainSnapshotSerializerTest to make sure nobody breaks serialization of your field + // in the future. + /** @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = {"TYPE_"}, value = {TYPE_LOCKSCREEN}) diff --git a/core/java/android/security/keystore/recovery/KeyChainSnapshot.java b/core/java/android/security/keystore/recovery/KeyChainSnapshot.java index 24ff182ab4bdd974d463fd6940eb415b4d3e1945..9334aa99c86c35ecb32ffdac6adecedf3be34822 100644 --- a/core/java/android/security/keystore/recovery/KeyChainSnapshot.java +++ b/core/java/android/security/keystore/recovery/KeyChainSnapshot.java @@ -48,6 +48,22 @@ import java.util.List; */ @SystemApi public final class KeyChainSnapshot implements Parcelable { + + // IMPORTANT! PLEASE READ! + // ----------------------- + // If you edit this file (e.g., to add new fields), please MAKE SURE to also do the following: + // - Update the #writeToParcel(Parcel) method below + // - Update the #(Parcel) constructor below + // - Update android.security.keystore.recovery.KeyChainSnapshotTest to make sure nobody + // accidentally breaks your fields in the Parcel in the future. + // - Update com.android.server.locksettings.recoverablekeystore.serialization + // .KeyChainSnapshotSerializer to correctly serialize your new field + // - Update com.android.server.locksettings.recoverablekeystore.serialization + // .KeyChainSnapshotSerializer to correctly deserialize your new field + // - Update com.android.server.locksettings.recoverablekeystore.serialization + // .KeychainSnapshotSerializerTest to make sure nobody breaks serialization of your field + // in the future. + private static final int DEFAULT_MAX_ATTEMPTS = 10; private static final long DEFAULT_COUNTER_ID = 1L; @@ -62,23 +78,8 @@ public final class KeyChainSnapshot implements Parcelable { private byte[] mEncryptedRecoveryKeyBlob; /** - * @hide - * Deprecated, consider using builder. + * Use builder to create an instance of the class. */ - public KeyChainSnapshot( - int snapshotVersion, - @NonNull List keyChainProtectionParams, - @NonNull List wrappedApplicationKeys, - @NonNull byte[] encryptedRecoveryKeyBlob) { - mSnapshotVersion = snapshotVersion; - mKeyChainProtectionParams = - Preconditions.checkCollectionElementsNotNull(keyChainProtectionParams, - "KeyChainProtectionParams"); - mEntryRecoveryData = Preconditions.checkCollectionElementsNotNull(wrappedApplicationKeys, - "wrappedApplicationKeys"); - mEncryptedRecoveryKeyBlob = Preconditions.checkNotNull(encryptedRecoveryKeyBlob); - } - private KeyChainSnapshot() { } @@ -92,7 +93,7 @@ public final class KeyChainSnapshot implements Parcelable { } /** - * Number of user secret guesses allowed during Keychain recovery. + * Number of user secret guesses allowed during KeyChain recovery. */ public int getMaxAttempts() { return mMaxAttempts; diff --git a/core/java/android/security/keystore/recovery/KeyDerivationParams.java b/core/java/android/security/keystore/recovery/KeyDerivationParams.java index 225b592d759569f5b7a5add9b635ee6c73c04a27..5165f0c30a36cd703a3003482c2f9f6bd7b45c63 100644 --- a/core/java/android/security/keystore/recovery/KeyDerivationParams.java +++ b/core/java/android/security/keystore/recovery/KeyDerivationParams.java @@ -35,6 +35,22 @@ import java.lang.annotation.RetentionPolicy; */ @SystemApi public final class KeyDerivationParams implements Parcelable { + + // IMPORTANT! PLEASE READ! + // ----------------------- + // If you edit this file (e.g., to add new fields), please MAKE SURE to also do the following: + // - Update the #writeToParcel(Parcel) method below + // - Update the #(Parcel) constructor below + // - Update android.security.keystore.recovery.KeyChainSnapshotTest to make sure nobody + // accidentally breaks your fields in the Parcel in the future. + // - Update com.android.server.locksettings.recoverablekeystore.serialization + // .KeyChainSnapshotSerializer to correctly serialize your new field + // - Update com.android.server.locksettings.recoverablekeystore.serialization + // .KeyChainSnapshotSerializer to correctly deserialize your new field + // - Update com.android.server.locksettings.recoverablekeystore.serialization + // .KeychainSnapshotSerializerTest to make sure nobody breaks serialization of your field + // in the future. + private final int mAlgorithm; private final byte[] mSalt; private final int mMemoryDifficulty; @@ -59,7 +75,7 @@ public final class KeyDerivationParams implements Parcelable { * Creates instance of the class to to derive keys using salted SHA256 hash. * *

        The salted SHA256 hash is computed over the concatenation of four byte strings, salt_len + - * salt + key_material_len + key_material, where salt_len and key_material_len are one-byte, and + * salt + key_material_len + key_material, where salt_len and key_material_len are 4-byte, and * denote the number of bytes for salt and key_material, respectively. */ public static @NonNull KeyDerivationParams createSha256Params(@NonNull byte[] salt) { @@ -90,7 +106,7 @@ public final class KeyDerivationParams implements Parcelable { /** * @hide */ - KeyDerivationParams(@KeyDerivationAlgorithm int algorithm, @NonNull byte[] salt, + private KeyDerivationParams(@KeyDerivationAlgorithm int algorithm, @NonNull byte[] salt, int memoryDifficulty) { mAlgorithm = algorithm; mSalt = Preconditions.checkNotNull(salt); diff --git a/core/java/android/security/keystore/recovery/RecoveryController.java b/core/java/android/security/keystore/recovery/RecoveryController.java index ab52d32ce963c3fc9db22efdbe7d224357a2074b..281822a342f980143afdb59307d8c59e146d46ee 100644 --- a/core/java/android/security/keystore/recovery/RecoveryController.java +++ b/core/java/android/security/keystore/recovery/RecoveryController.java @@ -41,21 +41,133 @@ import java.util.List; import java.util.Map; /** - * An assistant for generating {@link javax.crypto.SecretKey} instances that can be recovered by - * other Android devices belonging to the user. The exported keychain is protected by the user's - * lock screen. + * Backs up cryptographic keys to remote secure hardware, encrypted with the user's lock screen. * - *

        The RecoveryController must be paired with a recovery agent. The recovery agent is responsible - * for transporting the keychain to remote trusted hardware. This hardware must prevent brute force - * attempts against the user's lock screen by limiting the number of allowed guesses (to, e.g., 10). - * After that number of incorrect guesses, the trusted hardware no longer allows access to the - * key chain. + *

        A system app with the {@code android.permission.RECOVER_KEYSTORE} permission may generate or + * import recoverable keys using this class. To generate a key, the app must call + * {@link #generateKey(String)} with the desired alias for the key. This returns an AndroidKeyStore + * reference to a 256-bit {@link javax.crypto.SecretKey}, which can be used for AES/GCM/NoPadding. + * In order to get the same key again at a later time, the app can call {@link #getKey(String)} with + * the same alias. If a key is generated in this way the key's raw material is never directly + * exposed to the calling app. The system app may also import key material using + * {@link #importKey(String, byte[])}. The app may only generate and import keys for its own + * {@code uid}. * - *

        Only the recovery agent itself is able to create keys, so it is expected that the recovery - * agent is itself the system app. + *

        The same system app must also register a Recovery Agent to manage syncing recoverable keys to + * remote secure hardware. The Recovery Agent is a service that registers itself with the controller + * as follows: * - *

        A recovery agent requires the privileged permission - * {@code android.Manifest.permission#RECOVER_KEYSTORE}. + *

          + *
        • Invokes {@link #initRecoveryService(String, byte[], byte[])} + *
            + *
          • The first argument is the alias of the root certificate used to verify trusted + * hardware modules. Each trusted hardware module must have a public key signed with this + * root of trust. Roots of trust must be shipped with the framework. The app can list all + * valid roots of trust by calling {@link #getRootCertificates()}. + *
          • The second argument is the UTF-8 bytes of the XML listing file. It lists the X509 + * certificates containing the public keys of all available remote trusted hardware modules. + * Each of the X509 certificates can be validated against the chosen root of trust. + *
          • The third argument is the UTF-8 bytes of the XML signing file. The file contains a + * signature of the XML listing file. The signature can be validated against the chosen root + * of trust. + *
          + *

          This will cause the controller to choose a random public key from the list. From then + * on the controller will attempt to sync the key chain with the trusted hardware module to whom + * that key belongs. + *

        • Invokes {@link #setServerParams(byte[])} with a byte string that identifies the device + * to a remote server. This server may act as the front-end to the trusted hardware modules. It + * is up to the Recovery Agent to decide how best to identify devices, but this could be, e.g., + * based on the Instance ID of the + * system app. + *
        • Invokes {@link #setRecoverySecretTypes(int[])} with a list of types of secret used to + * secure the recoverable key chain. For now only + * {@link KeyChainProtectionParams#TYPE_LOCKSCREEN} is supported. + *
        • Invokes {@link #setSnapshotCreatedPendingIntent(PendingIntent)} with a + * {@link PendingIntent} that is to be invoked whenever a new snapshot is created. Although the + * controller can create snapshots without the Recovery Agent registering this intent, it is a + * good idea to register the intent so that the Recovery Agent is able to sync this snapshot to + * the trusted hardware module as soon as it is available. + *
        + * + *

        The trusted hardware module's public key MUST be generated on secure hardware with protections + * equivalent to those described in the + * Google + * Cloud Key Vault Service whitepaper. The trusted hardware module itself must protect the key + * chain from brute-forcing using the methods also described in the whitepaper: i.e., it should + * limit the number of allowed attempts to enter the lock screen. If the number of attempts is + * exceeded the key material must no longer be recoverable. + * + *

        A recoverable key chain snapshot is considered pending if any of the following conditions + * are met: + * + *

          + *
        • The system app mutates the key chain. i.e., generates, imports, or removes a key. + *
        • The user changes their lock screen. + *
        + * + *

        Whenever the user unlocks their device, if a snapshot is pending, the Recovery Controller + * generates a new snapshot. It follows these steps to do so: + * + *

          + *
        • Generates a 256-bit AES key using {@link java.security.SecureRandom}. This is the + * Recovery Key. + *
        • Wraps the key material of all keys in the recoverable key chain with the Recovery Key. + *
        • Encrypts the Recovery Key with both the public key of the trusted hardware module and a + * symmetric key derived from the user's lock screen. + *
        + * + *

        The controller then writes this snapshot to disk, and uses the {@link PendingIntent} that was + * set by the Recovery Agent during initialization to inform it that a new snapshot is available. + * The snapshot only contains keys for that Recovery Agent's {@code uid} - i.e., keys the agent's + * app itself generated. If multiple Recovery Agents exist on the device, each will be notified of + * their new snapshots, and each snapshots' keys will be only those belonging to the same + * {@code uid}. + * + *

        The Recovery Agent retrieves its most recent snapshot by calling + * {@link #getKeyChainSnapshot()}. It syncs the snapshot to the remote server. The snapshot contains + * the public key used for encryption, which the server uses to forward the encrypted recovery key + * to the correct trusted hardware module. The snapshot also contains the server params, which are + * used to identify this device to the server. + * + *

        The client uses the server params to identify a device whose key chain it wishes to restore. + * This may be on a different device to the device that originally synced the key chain. The client + * sends the server params identifying the previous device to the server. The server returns the + * X509 certificate identifying the trusted hardware module in which the encrypted Recovery Key is + * stored. It also returns some vault parameters identifying that particular Recovery Key to the + * trusted hardware module. And it also returns a vault challenge, which is used as part of the + * vault opening protocol to ensure the recovery claim is fresh. See the whitepaper for more + * details. + * + *

        The key chain is recovered via a {@link RecoverySession}. A Recovery Agent creates one by + * invoking {@link #createRecoverySession()}. It then invokes + * {@link RecoverySession#start(String, CertPath, byte[], byte[], List)} with these arguments: + * + *

          + *
        • The alias of the root of trust used to verify the trusted hardware module. + *
        • The X509 certificate of the trusted hardware module. + *
        • The vault parameters used to identify the Recovery Key to the trusted hardware module. + *
        • The vault challenge, as issued by the trusted hardware module. + *
        • A list of secrets, corresponding to the secrets used to protect the key chain. At the + * moment this is a single {@link KeyChainProtectionParams} containing the lock screen of the + * device whose key chain is to be recovered. + *
        + * + *

        This method returns a byte array containing the Recovery Claim, which can be issued to the + * remote trusted hardware module. It is encrypted with the trusted hardware module's public key + * (which has itself been certified with the root of trust). It also contains an ephemeral symmetric + * key generated for this recovery session, which the remote trusted hardware module uses to encrypt + * its responses. This is the Session Key. + * + *

        If the lock screen provided is correct, the remote trusted hardware module decrypts one of the + * layers of lock-screen encryption from the Recovery Key. It then returns this key, encrypted with + * the Session Key to the Recovery Agent. As the Recovery Agent does not know the Session Key, it + * must then invoke {@link RecoverySession#recoverKeyChainSnapshot(byte[], List)} with the encrypted + * Recovery Key and the list of wrapped application keys. The controller then decrypts the layer of + * encryption provided by the Session Key, and uses the lock screen to decrypt the final layer of + * encryption. It then uses the Recovery Key to decrypt all of the wrapped application keys, and + * imports them into its own KeyStore. The Recovery Agent's app may then access these keys by + * calling {@link #getKey(String)}. Only this app's {@code uid} may access the keys that have been + * recovered. * * @hide */ @@ -180,7 +292,7 @@ public class RecoveryController { } catch (ServiceSpecificException e) { if (e.errorCode == ERROR_BAD_CERTIFICATE_FORMAT || e.errorCode == ERROR_INVALID_CERTIFICATE) { - throw new CertificateException(e.getMessage()); + throw new CertificateException("Invalid certificate for recovery service", e); } throw wrapUnexpectedServiceSpecificException(e); } @@ -226,7 +338,7 @@ public class RecoveryController { } catch (ServiceSpecificException e) { if (e.errorCode == ERROR_BAD_CERTIFICATE_FORMAT || e.errorCode == ERROR_INVALID_CERTIFICATE) { - throw new CertificateException(e.getMessage()); + throw new CertificateException("Invalid certificate for recovery service", e); } throw wrapUnexpectedServiceSpecificException(e); } @@ -465,16 +577,7 @@ public class RecoveryController { @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) public byte[] generateAndStoreKey(@NonNull String alias, byte[] account) throws InternalRecoveryServiceException, LockScreenRequiredException { - try { - return mBinder.generateAndStoreKey(alias); - } catch (RemoteException e) { - throw e.rethrowFromSystemServer(); - } catch (ServiceSpecificException e) { - if (e.errorCode == ERROR_INSECURE_USER) { - throw new LockScreenRequiredException(e.getMessage()); - } - throw wrapUnexpectedServiceSpecificException(e); - } + throw new UnsupportedOperationException("Operation is not supported, use generateKey"); } /** diff --git a/core/java/android/security/keystore/recovery/RecoverySession.java b/core/java/android/security/keystore/recovery/RecoverySession.java index 0690bd5fb6126c3ef8809fa5a51288516adabf09..835338940905de85b15869b3ac97cce99fabfce4 100644 --- a/core/java/android/security/keystore/recovery/RecoverySession.java +++ b/core/java/android/security/keystore/recovery/RecoverySession.java @@ -102,7 +102,7 @@ public class RecoverySession implements AutoCloseable { } catch (ServiceSpecificException e) { if (e.errorCode == RecoveryController.ERROR_BAD_CERTIFICATE_FORMAT || e.errorCode == RecoveryController.ERROR_INVALID_CERTIFICATE) { - throw new CertificateException(e.getMessage()); + throw new CertificateException("Invalid certificate for recovery session", e); } throw mRecoveryController.wrapUnexpectedServiceSpecificException(e); } @@ -137,7 +137,7 @@ public class RecoverySession implements AutoCloseable { } catch (ServiceSpecificException e) { if (e.errorCode == RecoveryController.ERROR_BAD_CERTIFICATE_FORMAT || e.errorCode == RecoveryController.ERROR_INVALID_CERTIFICATE) { - throw new CertificateException(e.getMessage()); + throw new CertificateException("Invalid certificate for recovery session", e); } throw mRecoveryController.wrapUnexpectedServiceSpecificException(e); } @@ -157,8 +157,8 @@ public class RecoverySession implements AutoCloseable { * @param vaultChallenge Data passed from server for this recovery session and used to prevent * replay attacks. * @param secrets Secrets provided by user, the method only uses type and secret fields. - * @return The recovery claim. Claim provides a b binary blob with recovery claim. It is - * encrypted with verifierPublicKey and contains a proof of user secrets, session symmetric + * @return The binary blob with recovery claim. It is encrypted with verifierPublicKey + * and contains a proof of user secrets possession, session symmetric * key and parameters necessary to identify the counter with the number of failed recovery * attempts. * @throws CertificateException if the {@code verifierCertPath} is invalid. @@ -191,7 +191,7 @@ public class RecoverySession implements AutoCloseable { } catch (ServiceSpecificException e) { if (e.errorCode == RecoveryController.ERROR_BAD_CERTIFICATE_FORMAT || e.errorCode == RecoveryController.ERROR_INVALID_CERTIFICATE) { - throw new CertificateException(e.getMessage()); + throw new CertificateException("Invalid certificate for recovery session", e); } throw mRecoveryController.wrapUnexpectedServiceSpecificException(e); } @@ -228,7 +228,8 @@ public class RecoverySession implements AutoCloseable { * * @param recoveryKeyBlob Recovery blob encrypted by symmetric key generated for this session. * @param applicationKeys Application keys. Key material can be decrypted using recoveryKeyBlob - * and session. + * and session key generated by {@link #start}. + * @return {@code Map} from recovered keys aliases to their references. * @throws SessionExpiredException if {@code session} has since been closed. * @throws DecryptionFailedException if unable to decrypt the snapshot. * @throws InternalRecoveryServiceException if an error occurs internal to the recovery service. @@ -288,8 +289,7 @@ public class RecoverySession implements AutoCloseable { } /** - * Deletes all data associated with {@code session}. Should not be invoked directly but via - * {@link RecoverySession#close()}. + * Deletes all data associated with {@code session}. */ @RequiresPermission(android.Manifest.permission.RECOVER_KEYSTORE) @Override diff --git a/core/java/android/security/keystore/recovery/TrustedRootCertificates.java b/core/java/android/security/keystore/recovery/TrustedRootCertificates.java index 383af424989c4b04b4616a1878c76e12d1089078..63faac3d525d3561d61766a71d9a960d9cffb159 100644 --- a/core/java/android/security/keystore/recovery/TrustedRootCertificates.java +++ b/core/java/android/security/keystore/recovery/TrustedRootCertificates.java @@ -37,6 +37,40 @@ public final class TrustedRootCertificates { public static final String GOOGLE_CLOUD_KEY_VAULT_SERVICE_V1_ALIAS = "GoogleCloudKeyVaultServiceV1"; + /** + * Certificate used for client-side end-to-end encryption tests. + * When recovery controller is initialized with the certificate, recovery snapshots will only + * contain application keys started with {@link INSECURE_KEY_ALIAS}. + * Recovery snapshot will only be created if device is unlocked with password started with + * {@link #INSECURE_PASSWORD_PREFIX}. + * + * @hide + */ + public static final String TEST_ONLY_INSECURE_CERTIFICATE_ALIAS = + "TEST_ONLY_INSECURE_CERTIFICATE_ALIAS"; + + /** + * TODO: Add insecure certificate to TestApi. + * @hide + */ + public static @NonNull X509Certificate getTestOnlyInsecureCertificate() { + return parseBase64Certificate(TEST_ONLY_INSECURE_CERTIFICATE_BASE64); + } + /** + * Keys, which alias starts with the prefix are not protected if + * recovery agent uses {@link #TEST_ONLY_INSECURE_CERTIFICATE_ALIAS} root certificate. + * @hide + */ + public static final String INSECURE_KEY_ALIAS_PREFIX = + "INSECURE_KEY_ALIAS_KEY_MATERIAL_IS_NOT_PROTECTED_"; + /** + * Prefix for insecure passwords with length 14. + * Passwords started with the prefix are not protected if recovery agent uses + * {@link #TEST_ONLY_INSECURE_CERTIFICATE_ALIAS} root certificate. + * @hide + */ + public static final String INSECURE_PASSWORD_PREFIX = + "INSECURE_PSWD_"; private static final String GOOGLE_CLOUD_KEY_VAULT_SERVICE_V1_BASE64 = "" + "MIIFJjCCAw6gAwIBAgIJAIobXsJlzhNdMA0GCSqGSIb3DQEBDQUAMCAxHjAcBgNV" @@ -68,13 +102,43 @@ public final class TrustedRootCertificates { + "/oM58v0orUWINtIc2hBlka36PhATYQiLf+AiWKnwhCaaHExoYKfQlMtXBodNvOK8" + "xqx69x05q/qbHKEcTHrsss630vxrp1niXvA="; + private static final String TEST_ONLY_INSECURE_CERTIFICATE_BASE64 = "" + + "MIIFMDCCAxigAwIBAgIJAIZ9/G8KQie9MA0GCSqGSIb3DQEBDQUAMCUxIzAhBgNV" + + "BAMMGlRlc3QgT25seSBVbnNlY3VyZSBSb290IENBMB4XDTE4MDMyODAwMzIyM1oX" + + "DTM4MDMyMzAwMzIyM1owJTEjMCEGA1UEAwwaVGVzdCBPbmx5IFVuc2VjdXJlIFJv" + + "b3QgQ0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDGxFNzAEyzSPmw" + + "E5gfuBXdXq++bl9Ep62V7Xn1UiejvmS+pRHT39pf/M7sl4Zr9ezanJTrFvf9+B85" + + "VGehdsD32TgfEjThcqaoQCI6pKkHYsUo7FZ5n+G3eE8oabWRZJMVo3QDjnnFYp7z" + + "20vnpjDofI2oQyxHcb/1yep+ca1+4lIvbUp/ybhNFqhRXAMcDXo7pyH38eUQ1JdK" + + "Q/QlBbShpFEqx1Y6KilKfTDf7Wenqr67LkaEim//yLZjlHzn/BpuRTrpo+XmJZx1" + + "P9CX9LGOXTtmsaCcYgD4yijOvV8aEsIJaf1kCIO558oH0oQc+0JG5aXeLN7BDlyZ" + + "vH0RdSx5nQLS9kj2I6nthOw/q00/L+S6A0m5jyNZOAl1SY78p+wO0d9eHbqQzJwf" + + "EsSq3qGAqlgQyyjp6oxHBqT9hZtN4rxw+iq0K1S4kmTLNF1FvmIB1BE+lNvvoGdY" + + "5G0b6Pe4R5JFn9LV3C3PEmSYnae7iG0IQlKmRADIuvfJ7apWAVanJPJAAWh2Akfp" + + "8Uxr02cHoY6o7vsEhJJOeMkipaBHThESm/XeFVubQzNfZ9gjQnB9ZX2v+lyj+WYZ" + + "SAz3RuXx6TlLrmWccMpQDR1ibcgyyjLUtX3kwZl2OxmJXitjuD7xlxvAXYob15N+" + + "K4xKHgxUDrbt2zU/tY0vgepAUg/xbwIDAQABo2MwYTAdBgNVHQ4EFgQUwyeNpYgs" + + "XXYvh9z0/lFrja7sV+swHwYDVR0jBBgwFoAUwyeNpYgsXXYvh9z0/lFrja7sV+sw" + + "DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwDQYJKoZIhvcNAQENBQAD" + + "ggIBAGuOsvMN5SD3RIQnMJtBpcHNrxun+QFjPZFlYCLfIPrUkHpn5O1iIIq8tVLd" + + "2V+12VKnToUEANsYBD3MP8XjP+6GZ7ZQ2rwLGvUABKSX4YXvmjEEXZUZp0y3tIV4" + + "kUDlbACzguPneZDp5Qo7YWH4orgqzHkn0sD/ikO5XrAqmzc245ewJlrf+V11mjcu" + + "ELfDrEejpPhi7Hk/ZNR0ftP737Hs/dNoCLCIaVNgYzBZhgo4kd220TeJu2ttW0XZ" + + "ldyShtpcOmyWKBgVseixR6L/3sspPHyAPXkSuRo0Eh1xvzDKCg9ttb0qoacTlXMF" + + "GkBpNzmVq67NWFGGa9UElift1mv6RfktPCAGZ+Ai8xUiKAUB0Eookpt/8gX9Senq" + + "yP/jMxkxXmHWxUu8+KnLvj6WLrfftuuD7u3cfc7j5kkrheDz3O4h4477GnqL5wdo" + + "9DuEsNc4FxJVz8Iy8RS6cJuW4pihYpM1Tyn7uopLnImpYzEY+R5aQqqr+q/A1diq" + + "ogbEKPH6oUiqJUwq3nD70gPBUKJmIzS4vLwLouqUHEm1k/MgHV/BkEU0uVHszPFa" + + "XUMMCHb0iT9P8LuZ7Ajer3SR/0TRVApCrk/6OV68e+6k/OFpM5kcZnNMD5ANyBri" + + "Tsz3NrDwSw4i4+Dsfh6A9dB/cEghw4skLaBxnQLQIgVeqCzK"; + /** * The X509 certificate of the trusted root CA cert for the recoverable key store service. * * TODO: Change it to the production certificate root CA before the final launch. */ private static final X509Certificate GOOGLE_CLOUD_KEY_VAULT_SERVICE_V1_CERTIFICATE = - parseGoogleCloudKeyVaultServiceV1Certificate(); + parseBase64Certificate(GOOGLE_CLOUD_KEY_VAULT_SERVICE_V1_BASE64); private static final int NUMBER_OF_ROOT_CERTIFICATES = 1; @@ -107,9 +171,9 @@ public final class TrustedRootCertificates { return certificates; } - private static X509Certificate parseGoogleCloudKeyVaultServiceV1Certificate() { + private static X509Certificate parseBase64Certificate(String base64Certificate) { try { - return decodeBase64Cert(GOOGLE_CLOUD_KEY_VAULT_SERVICE_V1_BASE64); + return decodeBase64Cert(base64Certificate); } catch (CertificateException e) { // Should not happen throw new RuntimeException(e); diff --git a/core/java/android/security/keystore/recovery/WrappedApplicationKey.java b/core/java/android/security/keystore/recovery/WrappedApplicationKey.java index 714e35a2e6fcab855ffc15226618b95590851aed..32952db7037db5fa644571ac5a25ba0b9bef9fdd 100644 --- a/core/java/android/security/keystore/recovery/WrappedApplicationKey.java +++ b/core/java/android/security/keystore/recovery/WrappedApplicationKey.java @@ -42,6 +42,21 @@ public final class WrappedApplicationKey implements Parcelable { // The only supported format is AES-256 symmetric key. private byte[] mEncryptedKeyMaterial; + // IMPORTANT! PLEASE READ! + // ----------------------- + // If you edit this file (e.g., to add new fields), please MAKE SURE to also do the following: + // - Update the #writeToParcel(Parcel) method below + // - Update the #(Parcel) constructor below + // - Update android.security.keystore.recovery.KeyChainSnapshotTest to make sure nobody + // accidentally breaks your fields in the Parcel in the future. + // - Update com.android.server.locksettings.recoverablekeystore.serialization + // .KeyChainSnapshotSerializer to correctly serialize your new field + // - Update com.android.server.locksettings.recoverablekeystore.serialization + // .KeyChainSnapshotSerializer to correctly deserialize your new field + // - Update com.android.server.locksettings.recoverablekeystore.serialization + // .KeychainSnapshotSerializerTest to make sure nobody breaks serialization of your field + // in the future. + /** * Builder for creating {@link WrappedApplicationKey}. */ diff --git a/core/java/android/service/autofill/AutofillFieldClassificationService.java b/core/java/android/service/autofill/AutofillFieldClassificationService.java index cf1674989fe5ec1e46812447a43f993457541bf1..1cd76d2e9ec9fd3e878bdab3bd59b3e9d371c058 100644 --- a/core/java/android/service/autofill/AutofillFieldClassificationService.java +++ b/core/java/android/service/autofill/AutofillFieldClassificationService.java @@ -41,11 +41,11 @@ import java.util.List; * *

        A field classification score is a {@code float} representing how well an * {@link AutofillValue} filled matches a expected value predicted by an autofill service - * —a full-match is {@code 1.0} (representing 100%), while a full mismatch is {@code 0.0}. + * —a full match is {@code 1.0} (representing 100%), while a full mismatch is {@code 0.0}. * - *

        The exact score depends on the algorithm used to calculate it— the service must provide + *

        The exact score depends on the algorithm used to calculate it—the service must provide * at least one default algorithm (which is used when the algorithm is not specified or is invalid), - * but it could provide more (in which case the algorithm name should be specifiied by the caller + * but it could provide more (in which case the algorithm name should be specified by the caller * when calculating the scores). * * {@hide} @@ -113,23 +113,67 @@ public abstract class AutofillFieldClassificationService extends Service { /** * Calculates field classification scores in a batch. * - *

        See {@link AutofillFieldClassificationService} for more info about field classification - * scores. + *

        A field classification score is a {@code float} representing how well an + * {@link AutofillValue} filled matches a expected value predicted by an autofill service + * —a full match is {@code 1.0} (representing 100%), while a full mismatch is {@code 0.0}. * - * @param algorithm name of the algorithm to be used to calculate the scores. If invalid, the - * default algorithm will be used instead. - * @param args optional arguments to be passed to the algorithm. + *

        The exact score depends on the algorithm used to calculate it—the service must + * provide at least one default algorithm (which is used when the algorithm is not specified + * or is invalid), but it could provide more (in which case the algorithm name should be + * specified by the caller when calculating the scores). + * + *

        For example, if the service provides an algorithm named {@code EXACT_MATCH} that + * returns {@code 1.0} if all characters match or {@code 0.0} otherwise, a call to: + * + *

        +     * service.onGetScores("EXACT_MATCH", null,
        +     *   Arrays.asList(AutofillValue.forText("email1"), AutofillValue.forText("PHONE1")),
        +     *   Arrays.asList("email1", "phone1"));
        +     * 
        + * + *

        Returns: + * + *

        +     * [
        +     *   [1.0, 0.0], // "email1" compared against ["email1", "phone1"]
        +     *   [0.0, 0.0]  // "PHONE1" compared against ["email1", "phone1"]
        +     * ];
        +     * 
        + * + *

        If the same algorithm allows the caller to specify whether the comparisons should be + * case sensitive by passing a boolean option named {@code "case_sensitive"}, then a call to: + * + *

        +     * Bundle algorithmOptions = new Bundle();
        +     * algorithmOptions.putBoolean("case_sensitive", false);
        +     *
        +     * service.onGetScores("EXACT_MATCH", algorithmOptions,
        +     *   Arrays.asList(AutofillValue.forText("email1"), AutofillValue.forText("PHONE1")),
        +     *   Arrays.asList("email1", "phone1"));
        +     * 
        + * + *

        Returns: + * + *

        +     * [
        +     *   [1.0, 0.0], // "email1" compared against ["email1", "phone1"]
        +     *   [0.0, 1.0]  // "PHONE1" compared against ["email1", "phone1"]
        +     * ];
        +     * 
        + * + * @param algorithm name of the algorithm to be used to calculate the scores. If invalid or + * {@code null}, the default algorithm is used instead. + * @param algorithmOptions optional arguments to be passed to the algorithm. * @param actualValues values entered by the user. * @param userDataValues values predicted from the user data. - * @return the calculated scores, with the first dimension representing actual values and the - * second dimension values from {@link UserData}. + * @return the calculated scores of {@code actualValues} x {@code userDataValues}. * * {@hide} */ @Nullable @SystemApi public float[][] onGetScores(@Nullable String algorithm, - @Nullable Bundle args, @NonNull List actualValues, + @Nullable Bundle algorithmOptions, @NonNull List actualValues, @NonNull List userDataValues) { Log.e(TAG, "service implementation (" + getClass() + " does not implement onGetScore()"); return null; diff --git a/core/java/android/service/autofill/FillEventHistory.java b/core/java/android/service/autofill/FillEventHistory.java index df62446427d34515f7ac95148abfa17d6bdb6570..6e5bacf1aad18b10ecbc033be11ac869f5de3021 100644 --- a/core/java/android/service/autofill/FillEventHistory.java +++ b/core/java/android/service/autofill/FillEventHistory.java @@ -424,7 +424,7 @@ public final class FillEventHistory implements Parcelable { * @return map map whose key is the id of the manually-entered field, and value is the * ids of the datasets that have that value but were not selected by the user. */ - @Nullable public Map> getManuallyEnteredField() { + @NonNull public Map> getManuallyEnteredField() { if (mManuallyFilledFieldIds == null || mManuallyFilledDatasetIds == null) { return Collections.emptyMap(); } diff --git a/core/java/android/service/notification/ScheduleCalendar.java b/core/java/android/service/notification/ScheduleCalendar.java index 8a7ff4da26e3de3d6807f87555568d72114df8f0..01287104f9b231860d5b5203dcb90af66f5aaa5a 100644 --- a/core/java/android/service/notification/ScheduleCalendar.java +++ b/core/java/android/service/notification/ScheduleCalendar.java @@ -144,7 +144,8 @@ public class ScheduleCalendar { } return mSchedule.exitAtAlarm && mSchedule.nextAlarm != 0 - && time >= mSchedule.nextAlarm; + && time >= mSchedule.nextAlarm + && isInSchedule(mSchedule.nextAlarm); } private boolean isInSchedule(int daysOffset, long time, long start, long end) { diff --git a/core/java/android/util/apk/ApkSignatureSchemeV3Verifier.java b/core/java/android/util/apk/ApkSignatureSchemeV3Verifier.java index 4431bcef1ff4a4880750db49137aec7816829bad..758cd2b877f2eadbde52d1dba589678ebbf08aba 100644 --- a/core/java/android/util/apk/ApkSignatureSchemeV3Verifier.java +++ b/core/java/android/util/apk/ApkSignatureSchemeV3Verifier.java @@ -62,6 +62,7 @@ import java.security.spec.InvalidKeySpecException; import java.security.spec.X509EncodedKeySpec; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashSet; import java.util.List; import java.util.Map; @@ -457,6 +458,7 @@ public class ApkSignatureSchemeV3Verifier { // get the version code, but don't do anything with it: creator knew about all our flags porBuf.getInt(); + HashSet certHistorySet = new HashSet<>(); while (porBuf.hasRemaining()) { levelCount++; ByteBuffer level = getLengthPrefixedSlice(porBuf); @@ -495,6 +497,12 @@ public class ApkSignatureSchemeV3Verifier { lastCert = new VerbatimX509Certificate(lastCert, encodedCert); lastSigAlgorithm = sigAlgorithm; + if (certHistorySet.contains(lastCert)) { + throw new SecurityException("Encountered duplicate entries in " + + "Proof-of-rotation record at certificate #" + levelCount + ". All " + + "signing certificates should be unique"); + } + certHistorySet.add(lastCert); certs.add(lastCert); flagsList.add(flags); } diff --git a/core/java/android/util/apk/ApkVerityBuilder.java b/core/java/android/util/apk/ApkVerityBuilder.java index 3b8fc5c53d2a63bae74a3a5be9d30886ea7f0e30..f15e1a1a7c528017ee330948e71fbb18c8bcd09a 100644 --- a/core/java/android/util/apk/ApkVerityBuilder.java +++ b/core/java/android/util/apk/ApkVerityBuilder.java @@ -72,22 +72,31 @@ abstract class ApkVerityBuilder { signatureInfo.centralDirOffset - signatureInfo.apkSigningBlockOffset; long dataSize = apk.length() - signingBlockSize; int[] levelOffset = calculateVerityLevelOffset(dataSize); + int merkleTreeSize = levelOffset[levelOffset.length - 1]; ByteBuffer output = bufferFactory.create( - CHUNK_SIZE_BYTES + // fsverity header + extensions + padding - levelOffset[levelOffset.length - 1]); // Merkle tree size + merkleTreeSize + + CHUNK_SIZE_BYTES); // maximum size of fsverity metadata output.order(ByteOrder.LITTLE_ENDIAN); - ByteBuffer header = slice(output, 0, FSVERITY_HEADER_SIZE_BYTES); - ByteBuffer extensions = slice(output, FSVERITY_HEADER_SIZE_BYTES, CHUNK_SIZE_BYTES); - ByteBuffer tree = slice(output, CHUNK_SIZE_BYTES, output.limit()); + ByteBuffer tree = slice(output, 0, merkleTreeSize); + ByteBuffer header = slice(output, merkleTreeSize, + merkleTreeSize + FSVERITY_HEADER_SIZE_BYTES); + ByteBuffer extensions = slice(output, merkleTreeSize + FSVERITY_HEADER_SIZE_BYTES, + merkleTreeSize + CHUNK_SIZE_BYTES); byte[] apkDigestBytes = new byte[DIGEST_SIZE_BYTES]; ByteBuffer apkDigest = ByteBuffer.wrap(apkDigestBytes); apkDigest.order(ByteOrder.LITTLE_ENDIAN); + // NB: Buffer limit is set inside once finished. calculateFsveritySignatureInternal(apk, signatureInfo, tree, apkDigest, header, extensions); - output.rewind(); + // Put the reverse offset to fs-verity header at the end. + output.position(merkleTreeSize + FSVERITY_HEADER_SIZE_BYTES + extensions.limit()); + output.putInt(FSVERITY_HEADER_SIZE_BYTES + extensions.limit() + + 4); // size of this integer right before EOF + output.flip(); + return new ApkVerityResult(output, apkDigestBytes); } @@ -101,7 +110,8 @@ abstract class ApkVerityBuilder { ByteBuffer verityBlock = ByteBuffer.allocate(CHUNK_SIZE_BYTES) .order(ByteOrder.LITTLE_ENDIAN); ByteBuffer header = slice(verityBlock, 0, FSVERITY_HEADER_SIZE_BYTES); - ByteBuffer extensions = slice(verityBlock, FSVERITY_HEADER_SIZE_BYTES, CHUNK_SIZE_BYTES); + ByteBuffer extensions = slice(verityBlock, FSVERITY_HEADER_SIZE_BYTES, + CHUNK_SIZE_BYTES - FSVERITY_HEADER_SIZE_BYTES); calculateFsveritySignatureInternal(apk, signatureInfo, null, null, header, extensions); @@ -328,10 +338,10 @@ abstract class ApkVerityBuilder { buffer.put((byte) 12); // log2(block-size): log2(4096) buffer.put((byte) 7); // log2(leaves-per-node): log2(4096 / 32) - buffer.putShort((short) 1); // meta algorithm, SHA256_MODE == 1 - buffer.putShort((short) 1); // data algorithm, SHA256_MODE == 1 + buffer.putShort((short) 1); // meta algorithm, SHA256 == 1 + buffer.putShort((short) 1); // data algorithm, SHA256 == 1 - buffer.putInt(0x0); // flags + buffer.putInt(0); // flags buffer.putInt(0); // reserved buffer.putLong(fileSize); // original file size @@ -362,12 +372,11 @@ abstract class ApkVerityBuilder { // // struct fsverity_extension_patch { // __le64 offset; - // u8 length; - // u8 reserved[7]; // u8 databytes[]; // }; final int kSizeOfFsverityExtensionHeader = 8; + final int kExtensionSizeAlignment = 8; { // struct fsverity_extension #1 @@ -385,24 +394,25 @@ abstract class ApkVerityBuilder { { // struct fsverity_extension #2 - final int kSizeOfFsverityPatchExtension = - 8 + // offset size - 1 + // size of length from offset (up to 255) - 7 + // reserved - ZIP_EOCD_CENTRAL_DIR_OFFSET_FIELD_SIZE; - final int kPadding = (int) divideRoundup(kSizeOfFsverityPatchExtension % 8, 8); + final int kTotalSize = kSizeOfFsverityExtensionHeader + + 8 // offset size + + ZIP_EOCD_CENTRAL_DIR_OFFSET_FIELD_SIZE; - buffer.putShort((short) // total size of extension, padded to 64-bit alignment - (kSizeOfFsverityExtensionHeader + kSizeOfFsverityPatchExtension + kPadding)); + buffer.putShort((short) kTotalSize); buffer.put((byte) 1); // ID of patch extension skip(buffer, 5); // reserved // struct fsverity_extension_patch - buffer.putLong(eocdOffset); // offset - buffer.put((byte) ZIP_EOCD_CENTRAL_DIR_OFFSET_FIELD_SIZE); // length - skip(buffer, 7); // reserved - buffer.putInt(Math.toIntExact(signingBlockOffset)); // databytes - skip(buffer, kPadding); // padding + buffer.putLong(eocdOffset + ZIP_EOCD_CENTRAL_DIR_OFFSET_FIELD_OFFSET); // offset + buffer.putInt(Math.toIntExact(signingBlockOffset)); // databytes + + // The extension needs to be 0-padded at the end, since the length may not be multiple + // of 8. + int kPadding = kExtensionSizeAlignment - kTotalSize % kExtensionSizeAlignment; + if (kPadding == kExtensionSizeAlignment) { + kPadding = 0; + } + skip(buffer, kPadding); // padding } buffer.flip(); diff --git a/core/java/android/util/apk/VerbatimX509Certificate.java b/core/java/android/util/apk/VerbatimX509Certificate.java index 9984c6d26c6497c0e6a0771b376db99db7b3bf76..391c5fc394160a9a7bc056fb9f9df596f38eac66 100644 --- a/core/java/android/util/apk/VerbatimX509Certificate.java +++ b/core/java/android/util/apk/VerbatimX509Certificate.java @@ -18,6 +18,7 @@ package android.util.apk; import java.security.cert.CertificateEncodingException; import java.security.cert.X509Certificate; +import java.util.Arrays; /** * For legacy reasons we need to return exactly the original encoded certificate bytes, instead @@ -25,6 +26,7 @@ import java.security.cert.X509Certificate; */ class VerbatimX509Certificate extends WrappedX509Certificate { private final byte[] mEncodedVerbatim; + private int mHash = -1; VerbatimX509Certificate(X509Certificate wrapped, byte[] encodedVerbatim) { super(wrapped); @@ -35,4 +37,30 @@ class VerbatimX509Certificate extends WrappedX509Certificate { public byte[] getEncoded() throws CertificateEncodingException { return mEncodedVerbatim; } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof VerbatimX509Certificate)) return false; + + try { + byte[] a = this.getEncoded(); + byte[] b = ((VerbatimX509Certificate) o).getEncoded(); + return Arrays.equals(a, b); + } catch (CertificateEncodingException e) { + return false; + } + } + + @Override + public int hashCode() { + if (mHash == -1) { + try { + mHash = Arrays.hashCode(this.getEncoded()); + } catch (CertificateEncodingException e) { + mHash = 0; + } + } + return mHash; + } } diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index f6c669b52370c3651acf1ffc85df4e94e36cfad6..7e6ee76bb6435133667e3e614d38f57eb3a691a4 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -4320,7 +4320,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, OnCapturedPointerListener mOnCapturedPointerListener; - private ArrayList mKeyFallbackListeners; + private ArrayList mUnhandledKeyListeners; } ListenerInfo mListenerInfo; @@ -13917,11 +13917,15 @@ public class View implements Drawable.Callback, KeyEvent.Callback, mAttachInfo.mUnbufferedDispatchRequested = true; } + private boolean hasSize() { + return (mBottom > mTop) && (mRight > mLeft); + } + private boolean canTakeFocus() { return ((mViewFlags & VISIBILITY_MASK) == VISIBLE) && ((mViewFlags & FOCUSABLE) == FOCUSABLE) && ((mViewFlags & ENABLED_MASK) == ENABLED) - && (sCanFocusZeroSized || !isLayoutValid() || (mBottom > mTop) && (mRight > mLeft)); + && (sCanFocusZeroSized || !isLayoutValid() || hasSize()); } /** @@ -13982,7 +13986,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback, || focusableChangedByAuto == 0 || viewRootImpl == null || viewRootImpl.mThread == Thread.currentThread()) { - shouldNotifyFocusableAvailable = true; + shouldNotifyFocusableAvailable = canTakeFocus(); } } } @@ -14001,11 +14005,10 @@ public class View implements Drawable.Callback, KeyEvent.Callback, needGlobalAttributesUpdate(true); - // a view becoming visible is worth notifying the parent - // about in case nothing has focus. even if this specific view - // isn't focusable, it may contain something that is, so let - // the root view try to give this focus if nothing else does. - shouldNotifyFocusableAvailable = true; + // a view becoming visible is worth notifying the parent about in case nothing has + // focus. Even if this specific view isn't focusable, it may contain something that + // is, so let the root view try to give this focus if nothing else does. + shouldNotifyFocusableAvailable = hasSize(); } } @@ -14014,16 +14017,14 @@ public class View implements Drawable.Callback, KeyEvent.Callback, // a view becoming enabled should notify the parent as long as the view is also // visible and the parent wasn't already notified by becoming visible during this // setFlags invocation. - shouldNotifyFocusableAvailable = true; + shouldNotifyFocusableAvailable = canTakeFocus(); } else { if (isFocused()) clearFocus(); } } - if (shouldNotifyFocusableAvailable) { - if (mParent != null && canTakeFocus()) { - mParent.focusableViewAvailable(this); - } + if (shouldNotifyFocusableAvailable && mParent != null) { + mParent.focusableViewAvailable(this); } /* Check if the GONE bit has changed */ @@ -25881,26 +25882,19 @@ public class View implements Drawable.Callback, KeyEvent.Callback, } /** - * Interface definition for a callback to be invoked when a hardware key event is - * dispatched to this view during the fallback phase. This means no view in the hierarchy - * has handled this event. + * Interface definition for a callback to be invoked when a hardware key event hasn't + * been handled by the view hierarchy. */ - public interface OnKeyFallbackListener { + public interface OnUnhandledKeyEventListener { /** - * Called when a hardware key is dispatched to a view in the fallback phase. This allows - * listeners to respond to events after the view hierarchy has had a chance to respond. - *

        Key presses in software keyboards will generally NOT trigger this method, - * although some may elect to do so in some situations. Do not assume a - * software input method has to be key-based; even if it is, it may use key presses - * in a different way than you expect, so there is no way to reliably catch soft - * input key presses. + * Called when a hardware key is dispatched to a view after being unhandled during normal + * {@link KeyEvent} dispatch. * * @param v The view the key has been dispatched to. - * @param event The KeyEvent object containing full information about - * the event. - * @return True if the listener has consumed the event, false otherwise. + * @param event The KeyEvent object containing information about the event. + * @return {@code true} if the listener has consumed the event, {@code false} otherwise. */ - boolean onKeyFallback(View v, KeyEvent event); + boolean onUnhandledKeyEvent(View v, KeyEvent event); } /** @@ -27599,21 +27593,36 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return sUseDefaultFocusHighlight; } - /** + /** + * Dispatch a previously unhandled {@link KeyEvent} to this view. Unlike normal key dispatch, + * this dispatches to ALL child views until it is consumed. The dispatch order is z-order + * (visually on-top views first). + * + * @param evt the previously unhandled {@link KeyEvent}. + * @return the {@link View} which consumed the event or {@code null} if not consumed. + */ + View dispatchUnhandledKeyEvent(KeyEvent evt) { + if (onUnhandledKeyEvent(evt)) { + return this; + } + return null; + } + + /** * Allows this view to handle {@link KeyEvent}s which weren't handled by normal dispatch. This * occurs after the normal view hierarchy dispatch, but before the window callback. By default, * this will dispatch into all the listeners registered via - * {@link #addKeyFallbackListener(OnKeyFallbackListener)} in last-in-first-out order (most - * recently added will receive events first). + * {@link #addOnUnhandledKeyEventListener(OnUnhandledKeyEventListener)} in last-in-first-out + * order (most recently added will receive events first). * - * @param event A not-previously-handled event. + * @param event An unhandled event. * @return {@code true} if the event was handled, {@code false} otherwise. - * @see #addKeyFallbackListener + * @see #addOnUnhandledKeyEventListener */ - public boolean onKeyFallback(@NonNull KeyEvent event) { - if (mListenerInfo != null && mListenerInfo.mKeyFallbackListeners != null) { - for (int i = mListenerInfo.mKeyFallbackListeners.size() - 1; i >= 0; --i) { - if (mListenerInfo.mKeyFallbackListeners.get(i).onKeyFallback(this, event)) { + boolean onUnhandledKeyEvent(@NonNull KeyEvent event) { + if (mListenerInfo != null && mListenerInfo.mUnhandledKeyListeners != null) { + for (int i = mListenerInfo.mUnhandledKeyListeners.size() - 1; i >= 0; --i) { + if (mListenerInfo.mUnhandledKeyListeners.get(i).onUnhandledKeyEvent(this, event)) { return true; } } @@ -27621,31 +27630,47 @@ public class View implements Drawable.Callback, KeyEvent.Callback, return false; } + boolean hasUnhandledKeyListener() { + return (mListenerInfo != null && mListenerInfo.mUnhandledKeyListeners != null + && !mListenerInfo.mUnhandledKeyListeners.isEmpty()); + } + /** - * Adds a listener which will receive unhandled {@link KeyEvent}s. - * @param listener the receiver of fallback {@link KeyEvent}s. - * @see #onKeyFallback(KeyEvent) + * Adds a listener which will receive unhandled {@link KeyEvent}s. This must be called on the + * UI thread. + * + * @param listener a receiver of unhandled {@link KeyEvent}s. + * @see #removeOnUnhandledKeyEventListener */ - public void addKeyFallbackListener(OnKeyFallbackListener listener) { - ArrayList fallbacks = getListenerInfo().mKeyFallbackListeners; - if (fallbacks == null) { - fallbacks = new ArrayList<>(); - getListenerInfo().mKeyFallbackListeners = fallbacks; + public void addOnUnhandledKeyEventListener(OnUnhandledKeyEventListener listener) { + ArrayList listeners = getListenerInfo().mUnhandledKeyListeners; + if (listeners == null) { + listeners = new ArrayList<>(); + getListenerInfo().mUnhandledKeyListeners = listeners; + } + listeners.add(listener); + if (listeners.size() == 1 && mParent instanceof ViewGroup) { + ((ViewGroup) mParent).incrementChildUnhandledKeyListeners(); } - fallbacks.add(listener); } /** - * Removes a listener which will receive unhandled {@link KeyEvent}s. - * @param listener the receiver of fallback {@link KeyEvent}s. - * @see #onKeyFallback(KeyEvent) + * Removes a listener which will receive unhandled {@link KeyEvent}s. This must be called on the + * UI thread. + * + * @param listener a receiver of unhandled {@link KeyEvent}s. + * @see #addOnUnhandledKeyEventListener */ - public void removeKeyFallbackListener(OnKeyFallbackListener listener) { + public void removeOnUnhandledKeyEventListener(OnUnhandledKeyEventListener listener) { if (mListenerInfo != null) { - if (mListenerInfo.mKeyFallbackListeners != null) { - mListenerInfo.mKeyFallbackListeners.remove(listener); - if (mListenerInfo.mKeyFallbackListeners.isEmpty()) { - mListenerInfo.mKeyFallbackListeners = null; + if (mListenerInfo.mUnhandledKeyListeners != null + && !mListenerInfo.mUnhandledKeyListeners.isEmpty()) { + mListenerInfo.mUnhandledKeyListeners.remove(listener); + if (mListenerInfo.mUnhandledKeyListeners.isEmpty()) { + mListenerInfo.mUnhandledKeyListeners = null; + if (mParent instanceof ViewGroup) { + ((ViewGroup) mParent).decrementChildUnhandledKeyListeners(); + } } } } diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java index 33fcf6a74aa17716a16d67b8b862b238d13f7c6f..6002fe512a28a62d51f1a4960050b99571a79522 100644 --- a/core/java/android/view/ViewGroup.java +++ b/core/java/android/view/ViewGroup.java @@ -583,6 +583,11 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager private List mTransientIndices = null; private List mTransientViews = null; + /** + * Keeps track of how many child views have UnhandledKeyEventListeners. This should only be + * updated on the UI thread so shouldn't require explicit synchronization. + */ + int mChildUnhandledKeyListeners = 0; /** * Empty ActionMode used as a sentinel in recursive entries to startActionModeForChild. @@ -5055,6 +5060,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager child.assignParent(this); } else { child.mParent = this; + if (child.hasUnhandledKeyListener()) { + incrementChildUnhandledKeyListeners(); + } } final boolean childHasFocus = child.hasFocus(); @@ -5359,6 +5367,10 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager removeFromArray(index); + if (view.hasUnhandledKeyListener()) { + decrementChildUnhandledKeyListeners(); + } + if (view == mDefaultFocus) { clearDefaultFocus(view); } @@ -7537,6 +7549,62 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager } } + @Override + boolean hasUnhandledKeyListener() { + return (mChildUnhandledKeyListeners > 0) || super.hasUnhandledKeyListener(); + } + + void incrementChildUnhandledKeyListeners() { + mChildUnhandledKeyListeners += 1; + if (mChildUnhandledKeyListeners == 1) { + if (mParent instanceof ViewGroup) { + ((ViewGroup) mParent).incrementChildUnhandledKeyListeners(); + } + } + } + + void decrementChildUnhandledKeyListeners() { + mChildUnhandledKeyListeners -= 1; + if (mChildUnhandledKeyListeners == 0) { + if (mParent instanceof ViewGroup) { + ((ViewGroup) mParent).decrementChildUnhandledKeyListeners(); + } + } + } + + @Override + View dispatchUnhandledKeyEvent(KeyEvent evt) { + if (!hasUnhandledKeyListener()) { + return null; + } + ArrayList orderedViews = buildOrderedChildList(); + if (orderedViews != null) { + try { + for (int i = orderedViews.size() - 1; i >= 0; --i) { + View v = orderedViews.get(i); + View consumer = v.dispatchUnhandledKeyEvent(evt); + if (consumer != null) { + return consumer; + } + } + } finally { + orderedViews.clear(); + } + } else { + for (int i = getChildCount() - 1; i >= 0; --i) { + View v = getChildAt(i); + View consumer = v.dispatchUnhandledKeyEvent(evt); + if (consumer != null) { + return consumer; + } + } + } + if (onUnhandledKeyEvent(evt)) { + return this; + } + return null; + } + /** * LayoutParams are used by views to tell their parents how they want to be * laid out. See diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index d5216843f81e0caa4bb396f0d3a1b0244f65eb52..433c90b3633e9e8d2e8de0ae4fba344f3629b9a9 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -380,7 +380,7 @@ public final class ViewRootImpl implements ViewParent, InputStage mFirstPostImeInputStage; InputStage mSyntheticInputStage; - private final KeyFallbackManager mKeyFallbackManager = new KeyFallbackManager(); + private final UnhandledKeyManager mUnhandledKeyManager = new UnhandledKeyManager(); boolean mWindowAttributesChanged = false; int mWindowAttributesChangesFlag = 0; @@ -4975,10 +4975,10 @@ public final class ViewRootImpl implements ViewParent, private int processKeyEvent(QueuedInputEvent q) { final KeyEvent event = (KeyEvent)q.mEvent; - mKeyFallbackManager.mDispatched = false; + mUnhandledKeyManager.mDispatched = false; - if (mKeyFallbackManager.hasFocus() - && mKeyFallbackManager.dispatchUnique(mView, event)) { + if (mUnhandledKeyManager.hasFocus() + && mUnhandledKeyManager.dispatchUnique(mView, event)) { return FINISH_HANDLED; } @@ -4991,7 +4991,7 @@ public final class ViewRootImpl implements ViewParent, return FINISH_NOT_HANDLED; } - if (mKeyFallbackManager.dispatchUnique(mView, event)) { + if (mUnhandledKeyManager.dispatchUnique(mView, event)) { return FINISH_HANDLED; } @@ -7798,7 +7798,7 @@ public final class ViewRootImpl implements ViewParent, * @return {@code true} if the event was handled, {@code false} otherwise. */ public boolean dispatchKeyFallbackEvent(KeyEvent event) { - return mKeyFallbackManager.dispatch(mView, event); + return mUnhandledKeyManager.dispatch(mView, event); } class TakenSurfaceHolder extends BaseSurfaceHolder { @@ -8374,18 +8374,17 @@ public final class ViewRootImpl implements ViewParent, } } - private static class KeyFallbackManager { + private static class UnhandledKeyManager { - // This is used to ensure that key-fallback events are only dispatched once. We attempt + // This is used to ensure that unhandled events are only dispatched once. We attempt // to dispatch more than once in order to achieve a certain order. Specifically, if we - // are in an Activity or Dialog (and have a Window.Callback), the keyfallback events should + // are in an Activity or Dialog (and have a Window.Callback), the unhandled events should // be dispatched after the view hierarchy, but before the Activity. However, if we aren't - // in an activity, we still want key fallbacks to be dispatched. + // in an activity, we still want unhandled keys to be dispatched. boolean mDispatched = false; SparseBooleanArray mCapturedKeys = new SparseBooleanArray(); - WeakReference mFallbackReceiver = null; - int mVisitCount = 0; + WeakReference mCurrentReceiver = null; private void updateCaptureState(KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN) { @@ -8402,56 +8401,28 @@ public final class ViewRootImpl implements ViewParent, updateCaptureState(event); - if (mFallbackReceiver != null) { - View target = mFallbackReceiver.get(); + if (mCurrentReceiver != null) { + View target = mCurrentReceiver.get(); if (mCapturedKeys.size() == 0) { - mFallbackReceiver = null; + mCurrentReceiver = null; } if (target != null && target.isAttachedToWindow()) { - return target.onKeyFallback(event); + target.onUnhandledKeyEvent(event); } // consume anyways so that we don't feed uncaptured key events to other views return true; } - boolean result = dispatchInZOrder(root, event); - Trace.traceEnd(Trace.TRACE_TAG_VIEW); - return result; - } - - private boolean dispatchInZOrder(View view, KeyEvent evt) { - if (view instanceof ViewGroup) { - ViewGroup vg = (ViewGroup) view; - ArrayList orderedViews = vg.buildOrderedChildList(); - if (orderedViews != null) { - try { - for (int i = orderedViews.size() - 1; i >= 0; --i) { - View v = orderedViews.get(i); - if (dispatchInZOrder(v, evt)) { - return true; - } - } - } finally { - orderedViews.clear(); - } - } else { - for (int i = vg.getChildCount() - 1; i >= 0; --i) { - View v = vg.getChildAt(i); - if (dispatchInZOrder(v, evt)) { - return true; - } - } - } + View consumer = root.dispatchUnhandledKeyEvent(event); + if (consumer != null) { + mCurrentReceiver = new WeakReference<>(consumer); } - if (view.onKeyFallback(evt)) { - mFallbackReceiver = new WeakReference<>(view); - return true; - } - return false; + Trace.traceEnd(Trace.TRACE_TAG_VIEW); + return consumer != null; } boolean hasFocus() { - return mFallbackReceiver != null; + return mCurrentReceiver != null; } boolean dispatchUnique(View root, KeyEvent event) { diff --git a/core/java/android/view/textclassifier/TextClassification.java b/core/java/android/view/textclassifier/TextClassification.java index 630007bad9b1b7337f621ba058a13c448a945273..b413d48c6c78a8e0d4eda769299c02f80aff5734 100644 --- a/core/java/android/view/textclassifier/TextClassification.java +++ b/core/java/android/view/textclassifier/TextClassification.java @@ -43,8 +43,8 @@ import com.android.internal.util.Preconditions; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; +import java.time.ZonedDateTime; import java.util.ArrayList; -import java.util.Calendar; import java.util.Collections; import java.util.List; import java.util.Locale; @@ -512,7 +512,7 @@ public final class TextClassification implements Parcelable { public static final class Options implements Parcelable { private @Nullable LocaleList mDefaultLocales; - private @Nullable Calendar mReferenceTime; + private @Nullable ZonedDateTime mReferenceTime; public Options() {} @@ -531,7 +531,7 @@ public final class TextClassification implements Parcelable { * be interpreted. This should usually be the time when the text was originally * composed. If no reference time is set, now is used. */ - public Options setReferenceTime(Calendar referenceTime) { + public Options setReferenceTime(ZonedDateTime referenceTime) { mReferenceTime = referenceTime; return this; } @@ -550,7 +550,7 @@ public final class TextClassification implements Parcelable { * interpreted. */ @Nullable - public Calendar getReferenceTime() { + public ZonedDateTime getReferenceTime() { return mReferenceTime; } @@ -567,7 +567,7 @@ public final class TextClassification implements Parcelable { } dest.writeInt(mReferenceTime != null ? 1 : 0); if (mReferenceTime != null) { - dest.writeSerializable(mReferenceTime); + dest.writeString(mReferenceTime.toString()); } } @@ -589,7 +589,7 @@ public final class TextClassification implements Parcelable { mDefaultLocales = LocaleList.CREATOR.createFromParcel(in); } if (in.readInt() > 0) { - mReferenceTime = (Calendar) in.readSerializable(); + mReferenceTime = ZonedDateTime.parse(in.readString()); } } } diff --git a/core/java/android/view/textclassifier/TextClassifierImpl.java b/core/java/android/view/textclassifier/TextClassifierImpl.java index 5ba470afd961effcef832e89a9298343825f6543..8d1ed0eb68cbde3e9cea83e4eae2b59f8712c381 100644 --- a/core/java/android/view/textclassifier/TextClassifierImpl.java +++ b/core/java/android/view/textclassifier/TextClassifierImpl.java @@ -16,6 +16,8 @@ package android.view.textclassifier; +import static java.time.temporal.ChronoUnit.MILLIS; + import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.WorkerThread; @@ -45,9 +47,10 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; +import java.time.Instant; +import java.time.ZonedDateTime; import java.util.ArrayList; import java.util.Arrays; -import java.util.Calendar; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -119,7 +122,7 @@ public final class TextClassifierImpl implements TextClassifier { && rangeLength <= mSettings.getSuggestSelectionMaxRangeLength()) { final LocaleList locales = (options == null) ? null : options.getDefaultLocales(); final String localesString = concatenateLocales(locales); - final Calendar refTime = Calendar.getInstance(); + final ZonedDateTime refTime = ZonedDateTime.now(); final boolean darkLaunchAllowed = options != null && options.isDarkLaunchAllowed(); final TextClassifierImplNative nativeImpl = getNative(locales); final String string = text.toString(); @@ -143,8 +146,8 @@ public final class TextClassifierImpl implements TextClassifier { nativeImpl.classifyText( string, start, end, new TextClassifierImplNative.ClassificationOptions( - refTime.getTimeInMillis(), - refTime.getTimeZone().getID(), + refTime.toInstant().toEpochMilli(), + refTime.getZone().getId(), localesString)); final int size = results.length; for (int i = 0; i < size; i++) { @@ -183,19 +186,20 @@ public final class TextClassifierImpl implements TextClassifier { final String string = text.toString(); final LocaleList locales = (options == null) ? null : options.getDefaultLocales(); final String localesString = concatenateLocales(locales); - final Calendar refTime = (options != null && options.getReferenceTime() != null) - ? options.getReferenceTime() : Calendar.getInstance(); + final ZonedDateTime refTime = + (options != null && options.getReferenceTime() != null) + ? options.getReferenceTime() : ZonedDateTime.now(); final TextClassifierImplNative.ClassificationResult[] results = getNative(locales) .classifyText(string, startIndex, endIndex, new TextClassifierImplNative.ClassificationOptions( - refTime.getTimeInMillis(), - refTime.getTimeZone().getID(), + refTime.toInstant().toEpochMilli(), + refTime.getZone().getId(), localesString)); if (results.length > 0) { return createClassificationResult( - results, string, startIndex, endIndex, refTime); + results, string, startIndex, endIndex, refTime.toInstant()); } } } catch (Throwable t) { @@ -224,7 +228,7 @@ public final class TextClassifierImpl implements TextClassifier { try { final long startTimeMs = System.currentTimeMillis(); final LocaleList defaultLocales = options != null ? options.getDefaultLocales() : null; - final Calendar refTime = Calendar.getInstance(); + final ZonedDateTime refTime = ZonedDateTime.now(); final Collection entitiesToIdentify = options != null && options.getEntityConfig() != null ? options.getEntityConfig().resolveEntityListModifications( @@ -236,8 +240,8 @@ public final class TextClassifierImpl implements TextClassifier { nativeImpl.annotate( textString, new TextClassifierImplNative.AnnotationOptions( - refTime.getTimeInMillis(), - refTime.getTimeZone().getID(), + refTime.toInstant().toEpochMilli(), + refTime.getZone().getId(), concatenateLocales(defaultLocales))); for (TextClassifierImplNative.AnnotatedSpan span : annotations) { final TextClassifierImplNative.ClassificationResult[] results = @@ -416,7 +420,7 @@ public final class TextClassifierImpl implements TextClassifier { private TextClassification createClassificationResult( TextClassifierImplNative.ClassificationResult[] classifications, - String text, int start, int end, @Nullable Calendar referenceTime) { + String text, int start, int end, @Nullable Instant referenceTime) { final String classifiedText = text.substring(start, end); final TextClassification.Builder builder = new TextClassification.Builder() .setText(classifiedText); @@ -646,7 +650,7 @@ public final class TextClassifierImpl implements TextClassifier { @NonNull public static List create( Context context, - @Nullable Calendar referenceTime, + @Nullable Instant referenceTime, TextClassifierImplNative.ClassificationResult classification, String text) { final String type = classification.getCollection().trim().toLowerCase(Locale.ENGLISH); @@ -663,10 +667,9 @@ public final class TextClassifierImpl implements TextClassifier { case TextClassifier.TYPE_DATE: case TextClassifier.TYPE_DATE_TIME: if (classification.getDatetimeResult() != null) { - Calendar eventTime = Calendar.getInstance(); - eventTime.setTimeInMillis( + final Instant parsedTime = Instant.ofEpochMilli( classification.getDatetimeResult().getTimeMsUtc()); - return createForDatetime(context, type, referenceTime, eventTime); + return createForDatetime(context, type, referenceTime, parsedTime); } else { return new ArrayList<>(); } @@ -758,18 +761,17 @@ public final class TextClassifierImpl implements TextClassifier { @NonNull private static List createForDatetime( - Context context, String type, @Nullable Calendar referenceTime, - Calendar eventTime) { + Context context, String type, @Nullable Instant referenceTime, + Instant parsedTime) { if (referenceTime == null) { // If no reference time was given, use now. - referenceTime = Calendar.getInstance(); + referenceTime = Instant.now(); } List actions = new ArrayList<>(); - actions.add(createCalendarViewIntent(context, eventTime)); - final long millisSinceReference = - eventTime.getTimeInMillis() - referenceTime.getTimeInMillis(); - if (millisSinceReference > MIN_EVENT_FUTURE_MILLIS) { - actions.add(createCalendarCreateEventIntent(context, eventTime, type)); + actions.add(createCalendarViewIntent(context, parsedTime)); + final long millisUntilEvent = referenceTime.until(parsedTime, MILLIS); + if (millisUntilEvent > MIN_EVENT_FUTURE_MILLIS) { + actions.add(createCalendarCreateEventIntent(context, parsedTime, type)); } return actions; } @@ -784,10 +786,10 @@ public final class TextClassifierImpl implements TextClassifier { } @NonNull - private static LabeledIntent createCalendarViewIntent(Context context, Calendar eventTime) { + private static LabeledIntent createCalendarViewIntent(Context context, Instant parsedTime) { Uri.Builder builder = CalendarContract.CONTENT_URI.buildUpon(); builder.appendPath("time"); - ContentUris.appendId(builder, eventTime.getTimeInMillis()); + ContentUris.appendId(builder, parsedTime.toEpochMilli()); return new LabeledIntent( context.getString(com.android.internal.R.string.view_calendar), context.getString(com.android.internal.R.string.view_calendar_desc), @@ -796,7 +798,7 @@ public final class TextClassifierImpl implements TextClassifier { @NonNull private static LabeledIntent createCalendarCreateEventIntent( - Context context, Calendar eventTime, @EntityType String type) { + Context context, Instant parsedTime, @EntityType String type) { final boolean isAllDay = TextClassifier.TYPE_DATE.equals(type); return new LabeledIntent( context.getString(com.android.internal.R.string.add_calendar_event), @@ -805,9 +807,9 @@ public final class TextClassifierImpl implements TextClassifier { .setData(CalendarContract.Events.CONTENT_URI) .putExtra(CalendarContract.EXTRA_EVENT_ALL_DAY, isAllDay) .putExtra(CalendarContract.EXTRA_EVENT_BEGIN_TIME, - eventTime.getTimeInMillis()) + parsedTime.toEpochMilli()) .putExtra(CalendarContract.EXTRA_EVENT_END_TIME, - eventTime.getTimeInMillis() + DEFAULT_EVENT_DURATION)); + parsedTime.toEpochMilli() + DEFAULT_EVENT_DURATION)); } } } diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index 92f496a87c3feb5af794118ee815c4b59bce3ee7..99467265b5c5812dd931d371d26ac1216706327c 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -4585,8 +4585,8 @@ public class Editor { return mContainer.isShowing(); } - private boolean isVisible() { - // Always show a dragging handle. + private boolean shouldShow() { + // A dragging handle should always be shown. if (mIsDragging) { return true; } @@ -4599,6 +4599,10 @@ public class Editor { mPositionX + mHotspotX + getHorizontalOffset(), mPositionY); } + private void setVisible(final boolean visible) { + mContainer.getContentView().setVisibility(visible ? VISIBLE : INVISIBLE); + } + public abstract int getCurrentCursorOffset(); protected abstract void updateSelection(int offset); @@ -4692,7 +4696,7 @@ public class Editor { onHandleMoved(); } - if (isVisible()) { + if (shouldShow()) { // Transform to the window coordinates to follow the view tranformation. final int[] pts = { mPositionX + mHotspotX + getHorizontalOffset(), mPositionY}; mTextView.transformFromViewToWindowSpace(pts); @@ -4745,6 +4749,15 @@ public class Editor { return 0; } + private boolean tooLargeTextForMagnifier() { + final float magnifierContentHeight = Math.round( + mMagnifierAnimator.mMagnifier.getHeight() + / mMagnifierAnimator.mMagnifier.getZoom()); + final Paint.FontMetrics fontMetrics = mTextView.getPaint().getFontMetrics(); + final float glyphHeight = fontMetrics.descent - fontMetrics.ascent; + return glyphHeight > magnifierContentHeight; + } + /** * Computes the position where the magnifier should be shown, relative to * {@code mTextView}, and writes them to {@code showPosInView}. Also decides @@ -4824,13 +4837,12 @@ public class Editor { return true; } - private boolean tooLargeTextForMagnifier() { - final float magnifierContentHeight = Math.round( - mMagnifierAnimator.mMagnifier.getHeight() - / mMagnifierAnimator.mMagnifier.getZoom()); - final Paint.FontMetrics fontMetrics = mTextView.getPaint().getFontMetrics(); - final float glyphHeight = fontMetrics.descent - fontMetrics.ascent; - return glyphHeight > magnifierContentHeight; + private boolean handleOverlapsMagnifier() { + final int handleY = mContainer.getDecorViewLayoutParams().y; + final int magnifierBottomWhenAtWindowTop = + mTextView.getRootWindowInsets().getSystemWindowInsetTop() + + mMagnifierAnimator.mMagnifier.getHeight(); + return handleY <= magnifierBottomWhenAtWindowTop; } protected final void updateMagnifier(@NonNull final MotionEvent event) { @@ -4846,6 +4858,13 @@ public class Editor { mRenderCursorRegardlessTiming = true; mTextView.invalidateCursorPath(); suspendBlink(); + // Hide handle if it overlaps the magnifier. + if (handleOverlapsMagnifier()) { + setVisible(false); + } else { + setVisible(true); + } + mMagnifierAnimator.show(showPosInView.x, showPosInView.y); } else { dismissMagnifier(); @@ -4857,6 +4876,7 @@ public class Editor { mMagnifierAnimator.dismiss(); mRenderCursorRegardlessTiming = false; resumeBlink(); + setVisible(true); } } diff --git a/core/java/com/android/internal/backup/LocalTransport.java b/core/java/com/android/internal/backup/LocalTransport.java index b049db3793410f90a7011c975e5dce6ba410a03a..f4b7032a774cf65372ad1368088f0ff96fb5b161 100644 --- a/core/java/com/android/internal/backup/LocalTransport.java +++ b/core/java/com/android/internal/backup/LocalTransport.java @@ -187,11 +187,27 @@ public class LocalTransport extends BackupTransport { @Override public int performBackup(PackageInfo packageInfo, ParcelFileDescriptor data) { + return performBackup(packageInfo, data, /*flags=*/ 0); + } + + @Override + public int performBackup(PackageInfo packageInfo, ParcelFileDescriptor data, int flags) { + boolean isIncremental = (flags & FLAG_INCREMENTAL) != 0; + boolean isNonIncremental = (flags & FLAG_NON_INCREMENTAL) != 0; + + if (isIncremental) { + Log.i(TAG, "Performing incremental backup for " + packageInfo.packageName); + } else if (isNonIncremental) { + Log.i(TAG, "Performing non-incremental backup for " + packageInfo.packageName); + } else { + Log.i(TAG, "Performing backup for " + packageInfo.packageName); + } + if (DEBUG) { try { - StructStat ss = Os.fstat(data.getFileDescriptor()); - Log.v(TAG, "performBackup() pkg=" + packageInfo.packageName - + " size=" + ss.st_size); + StructStat ss = Os.fstat(data.getFileDescriptor()); + Log.v(TAG, "performBackup() pkg=" + packageInfo.packageName + + " size=" + ss.st_size + " flags=" + flags); } catch (ErrnoException e) { Log.w(TAG, "Unable to stat input file in performBackup() on " + packageInfo.packageName); @@ -199,7 +215,26 @@ public class LocalTransport extends BackupTransport { } File packageDir = new File(mCurrentSetIncrementalDir, packageInfo.packageName); - packageDir.mkdirs(); + boolean hasDataForPackage = !packageDir.mkdirs(); + + if (isIncremental) { + if (mParameters.isNonIncrementalOnly() || !hasDataForPackage) { + if (mParameters.isNonIncrementalOnly()) { + Log.w(TAG, "Transport is in non-incremental only mode."); + + } else { + Log.w(TAG, + "Requested incremental, but transport currently stores no data for the " + + "package, requesting non-incremental retry."); + } + return TRANSPORT_NON_INCREMENTAL_BACKUP_REQUIRED; + } + } + if (isNonIncremental && hasDataForPackage) { + Log.w(TAG, "Requested non-incremental, deleting existing data."); + clearBackupData(packageInfo); + packageDir.mkdirs(); + } // Each 'record' in the restore set is kept in its own file, named by // the record key. Wind through the data file, extracting individual diff --git a/core/java/com/android/internal/backup/LocalTransportParameters.java b/core/java/com/android/internal/backup/LocalTransportParameters.java index 154e79d4f7efd539bd2a9796ebdab3c9d703daeb..2427d39fd65e69f9a0b9fd31949fa18d26f0a5c4 100644 --- a/core/java/com/android/internal/backup/LocalTransportParameters.java +++ b/core/java/com/android/internal/backup/LocalTransportParameters.java @@ -26,8 +26,10 @@ class LocalTransportParameters extends KeyValueSettingObserver { private static final String TAG = "LocalTransportParams"; private static final String SETTING = Settings.Secure.BACKUP_LOCAL_TRANSPORT_PARAMETERS; private static final String KEY_FAKE_ENCRYPTION_FLAG = "fake_encryption_flag"; + private static final String KEY_NON_INCREMENTAL_ONLY = "non_incremental_only"; private boolean mFakeEncryptionFlag; + private boolean mIsNonIncrementalOnly; LocalTransportParameters(Handler handler, ContentResolver resolver) { super(handler, resolver, Settings.Secure.getUriFor(SETTING)); @@ -37,11 +39,16 @@ class LocalTransportParameters extends KeyValueSettingObserver { return mFakeEncryptionFlag; } + boolean isNonIncrementalOnly() { + return mIsNonIncrementalOnly; + } + public String getSettingValue(ContentResolver resolver) { return Settings.Secure.getString(resolver, SETTING); } public void update(KeyValueListParser parser) { mFakeEncryptionFlag = parser.getBoolean(KEY_FAKE_ENCRYPTION_FLAG, false); + mIsNonIncrementalOnly = parser.getBoolean(KEY_NON_INCREMENTAL_ONLY, false); } } diff --git a/core/java/com/android/internal/content/PackageMonitor.java b/core/java/com/android/internal/content/PackageMonitor.java index d2e97897c04212e6cead2aebfb352e04d879554f..3f8fd9bbf0c0431cff031a2181e3cd2da4d67cd6 100644 --- a/core/java/com/android/internal/content/PackageMonitor.java +++ b/core/java/com/android/internal/content/PackageMonitor.java @@ -21,6 +21,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.Uri; +import android.os.Bundle; import android.os.Handler; import android.os.Looper; import android.os.UserHandle; @@ -196,6 +197,10 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { public void onPackagesSuspended(String[] packages) { } + public void onPackagesSuspended(String[] packages, Bundle launcherExtras) { + onPackagesSuspended(packages); + } + public void onPackagesUnsuspended(String[] packages) { } @@ -433,8 +438,9 @@ public abstract class PackageMonitor extends android.content.BroadcastReceiver { } } else if (Intent.ACTION_PACKAGES_SUSPENDED.equals(action)) { String[] pkgList = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST); + final Bundle launcherExtras = intent.getBundleExtra(Intent.EXTRA_LAUNCHER_EXTRAS); mSomePackagesChanged = true; - onPackagesSuspended(pkgList); + onPackagesSuspended(pkgList, launcherExtras); } else if (Intent.ACTION_PACKAGES_UNSUSPENDED.equals(action)) { String[] pkgList = intent.getStringArrayExtra(Intent.EXTRA_CHANGED_PACKAGE_LIST); mSomePackagesChanged = true; diff --git a/core/java/com/android/internal/os/ZygoteConnection.java b/core/java/com/android/internal/os/ZygoteConnection.java index cd83c57f60f94788595fea4d8a9d35dc0dd58fe8..5d40a7300919af930300df45ace089a59a8f3672 100644 --- a/core/java/com/android/internal/os/ZygoteConnection.java +++ b/core/java/com/android/internal/os/ZygoteConnection.java @@ -47,6 +47,8 @@ import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.ArrayList; +import java.util.Arrays; + import libcore.io.IoUtils; /** @@ -159,6 +161,11 @@ class ZygoteConnection { return null; } + if (parsedArgs.apiBlacklistExemptions != null) { + handleApiBlacklistExemptions(parsedArgs.apiBlacklistExemptions); + return null; + } + if (parsedArgs.permittedCapabilities != 0 || parsedArgs.effectiveCapabilities != 0) { throw new ZygoteSecurityException("Client may not specify capabilities: " + "permitted=0x" + Long.toHexString(parsedArgs.permittedCapabilities) + @@ -278,6 +285,15 @@ class ZygoteConnection { } } + private void handleApiBlacklistExemptions(String[] exemptions) { + try { + ZygoteInit.setApiBlacklistExemptions(exemptions); + mSocketOutStream.writeInt(0); + } catch (IOException ioe) { + throw new IllegalStateException("Error writing to command socket", ioe); + } + } + protected void preload() { ZygoteInit.lazyPreload(); } @@ -438,6 +454,12 @@ class ZygoteConnection { */ boolean startChildZygote; + /** + * Exemptions from API blacklisting. These are sent to the pre-forked zygote at boot time, + * or when they change, via --set-api-blacklist-exemptions. + */ + String[] apiBlacklistExemptions; + /** * Constructs instance and parses args * @param args zygote command-line args @@ -592,6 +614,11 @@ class ZygoteConnection { preloadDefault = true; } else if (arg.equals("--start-child-zygote")) { startChildZygote = true; + } else if (arg.equals("--set-api-blacklist-exemptions")) { + // consume all remaining args; this is a stand-alone command, never included + // with the regular fork command. + apiBlacklistExemptions = Arrays.copyOfRange(args, curArg + 1, args.length); + curArg = args.length; } else { break; } @@ -606,7 +633,7 @@ class ZygoteConnection { throw new IllegalArgumentException( "Unexpected arguments after --preload-package."); } - } else if (!preloadDefault) { + } else if (!preloadDefault && apiBlacklistExemptions == null) { if (!seenRuntimeArgs) { throw new IllegalArgumentException("Unexpected argument : " + args[curArg]); } diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java index 9467eccd3ff72e9615617aa59f05aa432c87f818..c5d41db934da5cd9c707aa98aec2d83fac66114d 100644 --- a/core/java/com/android/internal/os/ZygoteInit.java +++ b/core/java/com/android/internal/os/ZygoteInit.java @@ -514,6 +514,10 @@ public class ZygoteInit { /* should never reach here */ } + public static void setApiBlacklistExemptions(String[] exemptions) { + VMRuntime.getRuntime().setHiddenApiExemptions(exemptions); + } + /** * Creates a PathClassLoader for the given class path that is associated with a shared * namespace, i.e., this classloader can access platform-private native libraries. The diff --git a/core/java/com/android/internal/widget/ILockSettings.aidl b/core/java/com/android/internal/widget/ILockSettings.aidl index 59b14f18eb079b52b530f03187c76b53baf3efb6..ae7ba1948c00e8c0d1d151c9d9f2676b3528d49a 100644 --- a/core/java/com/android/internal/widget/ILockSettings.aidl +++ b/core/java/com/android/internal/widget/ILockSettings.aidl @@ -61,7 +61,6 @@ interface ILockSettings { void initRecoveryServiceWithSigFile(in String rootCertificateAlias, in byte[] recoveryServiceCertFile, in byte[] recoveryServiceSigFile); KeyChainSnapshot getKeyChainSnapshot(); - byte[] generateAndStoreKey(String alias); String generateKey(String alias); String importKey(String alias, in byte[] keyBytes); String getKey(String alias); diff --git a/core/java/com/android/internal/widget/LockPatternView.java b/core/java/com/android/internal/widget/LockPatternView.java index 51dd92961f54a21a034a2375ca23fcac271d1f2d..e8fc5989354a663d8e9c80a62d409880d50dde3d 100644 --- a/core/java/com/android/internal/widget/LockPatternView.java +++ b/core/java/com/android/internal/widget/LockPatternView.java @@ -1000,6 +1000,11 @@ public class LockPatternView extends View { setPatternInProgress(false); cancelLineAnimations(); notifyPatternDetected(); + // Also clear pattern if fading is enabled + if (mFadePattern) { + clearPatternDrawLookup(); + mPatternDisplayMode = DisplayMode.Correct; + } invalidate(); } if (PROFILE_DRAWING) { diff --git a/core/jni/android/graphics/ImageDecoder.cpp b/core/jni/android/graphics/ImageDecoder.cpp index 726c450a4af288a816e23f4e6ea90eace11f9255..825b7a0a98845c50aa771c0fb8d7449e686a5273 100644 --- a/core/jni/android/graphics/ImageDecoder.cpp +++ b/core/jni/android/graphics/ImageDecoder.cpp @@ -210,7 +210,7 @@ static jobject ImageDecoder_nDecodeBitmap(JNIEnv* env, jobject /*clazz*/, jlong jint desiredWidth, jint desiredHeight, jobject jsubset, jboolean requireMutable, jint allocator, jboolean requireUnpremul, jboolean preferRamOverQuality, - jboolean asAlphaMask) { + jboolean asAlphaMask, jobject jcolorSpace) { auto* decoder = reinterpret_cast(nativePtr); SkAndroidCodec* codec = decoder->mCodec.get(); const SkISize desiredSize = SkISize::Make(desiredWidth, desiredHeight); @@ -264,7 +264,8 @@ static jobject ImageDecoder_nDecodeBitmap(JNIEnv* env, jobject /*clazz*/, jlong // This is currently the only way to know that we should decode to F16. colorType = codec->computeOutputColorType(colorType); } - sk_sp colorSpace = codec->computeOutputColorSpace(colorType); + sk_sp colorSpace = GraphicsJNI::getNativeColorSpace(env, jcolorSpace); + colorSpace = codec->computeOutputColorSpace(colorType, colorSpace); decodeInfo = decodeInfo.makeColorType(colorType).makeColorSpace(colorSpace); SkBitmap bm; @@ -507,18 +508,26 @@ static jstring ImageDecoder_nGetMimeType(JNIEnv* env, jobject /*clazz*/, jlong n return encodedFormatToString(env, decoder->mCodec->getEncodedFormat()); } +static jobject ImageDecoder_nGetColorSpace(JNIEnv* env, jobject /*clazz*/, jlong nativePtr) { + auto* codec = reinterpret_cast(nativePtr)->mCodec.get(); + auto colorType = codec->computeOutputColorType(codec->getInfo().colorType()); + sk_sp colorSpace = codec->computeOutputColorSpace(colorType); + return GraphicsJNI::getColorSpace(env, colorSpace, colorType); +} + static const JNINativeMethod gImageDecoderMethods[] = { { "nCreate", "(JLandroid/graphics/ImageDecoder$Source;)Landroid/graphics/ImageDecoder;", (void*) ImageDecoder_nCreateAsset }, { "nCreate", "(Ljava/nio/ByteBuffer;IILandroid/graphics/ImageDecoder$Source;)Landroid/graphics/ImageDecoder;", (void*) ImageDecoder_nCreateByteBuffer }, { "nCreate", "([BIILandroid/graphics/ImageDecoder$Source;)Landroid/graphics/ImageDecoder;", (void*) ImageDecoder_nCreateByteArray }, { "nCreate", "(Ljava/io/InputStream;[BLandroid/graphics/ImageDecoder$Source;)Landroid/graphics/ImageDecoder;", (void*) ImageDecoder_nCreateInputStream }, { "nCreate", "(Ljava/io/FileDescriptor;Landroid/graphics/ImageDecoder$Source;)Landroid/graphics/ImageDecoder;", (void*) ImageDecoder_nCreateFd }, - { "nDecodeBitmap", "(JLandroid/graphics/ImageDecoder;ZIILandroid/graphics/Rect;ZIZZZ)Landroid/graphics/Bitmap;", + { "nDecodeBitmap", "(JLandroid/graphics/ImageDecoder;ZIILandroid/graphics/Rect;ZIZZZLandroid/graphics/ColorSpace;)Landroid/graphics/Bitmap;", (void*) ImageDecoder_nDecodeBitmap }, { "nGetSampledSize","(JI)Landroid/util/Size;", (void*) ImageDecoder_nGetSampledSize }, { "nGetPadding", "(JLandroid/graphics/Rect;)V", (void*) ImageDecoder_nGetPadding }, { "nClose", "(J)V", (void*) ImageDecoder_nClose}, { "nGetMimeType", "(J)Ljava/lang/String;", (void*) ImageDecoder_nGetMimeType }, + { "nGetColorSpace", "(J)Landroid/graphics/ColorSpace;", (void*) ImageDecoder_nGetColorSpace }, }; int register_android_graphics_ImageDecoder(JNIEnv* env) { diff --git a/core/jni/android/graphics/Path.cpp b/core/jni/android/graphics/Path.cpp index d3d68826affed0b481089e636d1724441c0f0152..97abd82eaac5d7b291eb66afeda5b95cc68de7aa 100644 --- a/core/jni/android/graphics/Path.cpp +++ b/core/jni/android/graphics/Path.cpp @@ -37,6 +37,14 @@ namespace android { class SkPathGlue { public: + static void finalizer(SkPath* obj) { + // Purge entries from the HWUI path cache if this path's data is unique + if (obj->unique() && android::uirenderer::Caches::hasInstance()) { + android::uirenderer::Caches::getInstance().pathCache.removeDeferred(obj); + } + delete obj; + } + // ---------------- Regular JNI ----------------------------- static jlong init(JNIEnv* env, jclass clazz) { @@ -48,13 +56,8 @@ public: return reinterpret_cast(new SkPath(*val)); } - static void finalize(JNIEnv* env, jclass clazz, jlong objHandle) { - SkPath* obj = reinterpret_cast(objHandle); - // Purge entries from the HWUI path cache if this path's data is unique - if (obj->unique() && android::uirenderer::Caches::hasInstance()) { - android::uirenderer::Caches::getInstance().pathCache.removeDeferred(obj); - } - delete obj; + static jlong getFinalizer(JNIEnv* env, jclass clazz) { + return static_cast(reinterpret_cast(&finalizer)); } static void set(JNIEnv* env, jclass clazz, jlong dstHandle, jlong srcHandle) { @@ -469,7 +472,9 @@ public: SkRect rect; SkPath* obj = reinterpret_cast(objHandle); jboolean result = obj->isRect(&rect); - GraphicsJNI::rect_to_jrectf(rect, env, jrect); + if (jrect) { + GraphicsJNI::rect_to_jrectf(rect, env, jrect); + } return result; } @@ -510,7 +515,7 @@ public: static const JNINativeMethod methods[] = { {"nInit","()J", (void*) SkPathGlue::init}, {"nInit","(J)J", (void*) SkPathGlue::init_Path}, - {"nFinalize", "(J)V", (void*) SkPathGlue::finalize}, + {"nGetFinalizer", "()J", (void*) SkPathGlue::getFinalizer}, {"nSet","(JJ)V", (void*) SkPathGlue::set}, {"nComputeBounds","(JLandroid/graphics/RectF;)V", (void*) SkPathGlue::computeBounds}, {"nIncReserve","(JI)V", (void*) SkPathGlue::incReserve}, diff --git a/core/jni/android_graphics_Canvas.cpp b/core/jni/android_graphics_Canvas.cpp index c9bfa137c7ac0c825dd38518d43dce914f75b86b..7f90d8ee3e4ebb497db4721acccc5b221f8f2a29 100644 --- a/core/jni/android_graphics_Canvas.cpp +++ b/core/jni/android_graphics_Canvas.cpp @@ -448,8 +448,9 @@ static void drawBitmapArray(JNIEnv* env, jobject, jlong canvasHandle, jboolean hasAlpha, jlong paintHandle) { // Note: If hasAlpha is false, kRGB_565_SkColorType will be used, which will // correct the alphaType to kOpaque_SkAlphaType. - SkImageInfo info = SkImageInfo::MakeN32(width, height, kPremul_SkAlphaType, - GraphicsJNI::defaultColorSpace()); + SkImageInfo info = SkImageInfo::Make(width, height, + hasAlpha ? kN32_SkColorType : kRGB_565_SkColorType, + kPremul_SkAlphaType); SkBitmap bitmap; bitmap.setInfo(info); sk_sp androidBitmap = Bitmap::allocateHeapBitmap(&bitmap); diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp index 04cb08f51efa8c673ed6cfa72474c4a14fad4f2c..b0f68cde14866ac3e261ef991ef984c71edd5a66 100644 --- a/core/jni/android_view_SurfaceControl.cpp +++ b/core/jni/android_view_SurfaceControl.cpp @@ -37,7 +37,7 @@ #include #include #include -#include +#include #include #include #include @@ -598,7 +598,7 @@ static jboolean nativeSetActiveConfig(JNIEnv* env, jclass clazz, jobject tokenOb static jintArray nativeGetDisplayColorModes(JNIEnv* env, jclass, jobject tokenObj) { sp token(ibinderForJavaObject(env, tokenObj)); if (token == NULL) return NULL; - Vector colorModes; + Vector colorModes; if (SurfaceComposerClient::getDisplayColorModes(token, &colorModes) != NO_ERROR || colorModes.isEmpty()) { return NULL; @@ -628,7 +628,7 @@ static jboolean nativeSetActiveColorMode(JNIEnv* env, jclass, sp token(ibinderForJavaObject(env, tokenObj)); if (token == NULL) return JNI_FALSE; status_t err = SurfaceComposerClient::setActiveColorMode(token, - static_cast(colorMode)); + static_cast(colorMode)); return err == NO_ERROR ? JNI_TRUE : JNI_FALSE; } diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp index b5fd7929eeae9ee06c5bd7cdb79e55d577e45216..b2853c9f1c6117a32219d20c76556eaff4db4a1f 100644 --- a/core/jni/com_android_internal_os_Zygote.cpp +++ b/core/jni/com_android_internal_os_Zygote.cpp @@ -260,7 +260,7 @@ static void SetUpSeccompFilter(uid_t uid) { } // Apply system or app filter based on uid. - if (getuid() >= AID_APP_START) { + if (uid >= AID_APP_START) { set_app_seccomp_filter(); } else { set_system_seccomp_filter(); @@ -619,11 +619,6 @@ static pid_t ForkAndSpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArra fail_fn(CREATE_ERROR("sigprocmask(SIG_SETMASK, { SIGCHLD }) failed: %s", strerror(errno))); } - // Must be called when the new process still has CAP_SYS_ADMIN. The other alternative is to - // call prctl(PR_SET_NO_NEW_PRIVS, 1) afterward, but that breaks SELinux domain transition (see - // b/71859146). - SetUpSeccompFilter(uid); - // Keep capabilities across UID change, unless we're staying root. if (uid != 0) { if (!EnableKeepCapabilities(&error_msg)) { @@ -699,6 +694,13 @@ static pid_t ForkAndSpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArra fail_fn(CREATE_ERROR("setresgid(%d) failed: %s", gid, strerror(errno))); } + // Must be called when the new process still has CAP_SYS_ADMIN, in this case, before changing + // uid from 0, which clears capabilities. The other alternative is to call + // prctl(PR_SET_NO_NEW_PRIVS, 1) afterward, but that breaks SELinux domain transition (see + // b/71859146). As the result, privileged syscalls used below still need to be accessible in + // app process. + SetUpSeccompFilter(uid); + rc = setresuid(uid, uid, uid); if (rc == -1) { fail_fn(CREATE_ERROR("setresuid(%d) failed: %s", uid, strerror(errno))); diff --git a/core/proto/android/os/incident.proto b/core/proto/android/os/incident.proto index 0fea0dc1c428d283f663f43b09fe1e5c6a85cc10..ea0b825b01a806fcf0b47ebda4cedbc2a65cc9cc 100644 --- a/core/proto/android/os/incident.proto +++ b/core/proto/android/os/incident.proto @@ -175,9 +175,9 @@ message IncidentProto { ]; optional GZippedFileProto last_kmsg = 2007 [ - (section).type = SECTION_NONE, // disable until selinux permission is gained + (section).type = SECTION_GZIP, (section).args = "/sys/fs/pstore/console-ramoops /sys/fs/pstore/console-ramoops-0 /proc/last_kmsg", - (privacy).dest = DEST_AUTOMATIC + (privacy).dest = DEST_EXPLICIT ]; // System Services diff --git a/core/proto/android/os/system_properties.proto b/core/proto/android/os/system_properties.proto index 694b94b6fd2e003ec37807dfabf98fa31a9d608a..8bf3772a6a5d29525c606815ee586862c02c5efb 100644 --- a/core/proto/android/os/system_properties.proto +++ b/core/proto/android/os/system_properties.proto @@ -192,6 +192,8 @@ message SystemPropertiesProto { optional string libc_debug_malloc_program = 15; message Log { + option (android.msg_privacy).dest = DEST_AUTOMATIC; + optional string tag_WifiHAL = 1; optional string tag_stats_log = 2; diff --git a/core/proto/android/providers/settings/global.proto b/core/proto/android/providers/settings/global.proto index c7de947cdca9ad747b1c720f7633ee8d51cdf243..b5303c8a4eec99ce3a556a1de5089f599a6645da 100644 --- a/core/proto/android/providers/settings/global.proto +++ b/core/proto/android/providers/settings/global.proto @@ -672,8 +672,10 @@ message GlobalSettingsProto { option (android.msg_privacy).dest = DEST_LOCAL; // The requested Private DNS mode and an accompanying specifier. - optional SettingProto dns_mode = 1; - optional SettingProto dns_specifier = 2; + // msg_privacy settings don't apply to sub messages, only to primitive + // fields, so these must also be explicitly set to LOCAL. + optional SettingProto dns_mode = 1 [ (android.privacy).dest = DEST_LOCAL ]; + optional SettingProto dns_specifier = 2 [ (android.privacy).dest = DEST_LOCAL ]; } optional Private private = 96; diff --git a/core/proto/android/providers/settings/secure.proto b/core/proto/android/providers/settings/secure.proto index cfb89808b1b29aad916e48871e627c5ce4adfc3b..593747df4ee31e3afca8267db94c4064682a15c8 100644 --- a/core/proto/android/providers/settings/secure.proto +++ b/core/proto/android/providers/settings/secure.proto @@ -145,6 +145,7 @@ message SecureSettingsProto { optional SettingProto transport = 4 [ (android.privacy).dest = DEST_AUTOMATIC ]; optional SettingProto manager_constants = 5; optional SettingProto local_transport_parameters = 6; + optional SettingProto packages_to_clear_data_before_full_restore = 7; } optional Backup backup = 10; diff --git a/core/proto/android/server/jobscheduler.proto b/core/proto/android/server/jobscheduler.proto index bb8ce813b2f901a3d4f24804b8188e73d6ff614e..4df3b63a3eab895f48efea7dcdc137f911dcc434 100644 --- a/core/proto/android/server/jobscheduler.proto +++ b/core/proto/android/server/jobscheduler.proto @@ -527,9 +527,7 @@ message JobStatusShortInfoProto { optional int32 calling_uid = 1; // Job IDs can technically be negative. optional int32 job_id = 2; - optional string battery_name = 3 [ - (.android.privacy).dest = DEST_EXPLICIT - ]; + optional string battery_name = 3; } // Dump from a com.android.server.job.controllers.JobStatus object. diff --git a/core/proto/android/service/usb.proto b/core/proto/android/service/usb.proto index b60c569952236012e02a1578c487c29581d86964..8240d8aff1530aa0b444fc060be07ad30e4af7ca 100644 --- a/core/proto/android/service/usb.proto +++ b/core/proto/android/service/usb.proto @@ -80,7 +80,7 @@ message UsbAccessoryProto { optional string model = 2; optional string description = 3; optional string version = 4; - optional string uri = 5; + optional string uri = 5 [ (android.privacy).dest = DEST_EXPLICIT ]; optional string serial = 6 [ (android.privacy).dest = DEST_EXPLICIT ]; } @@ -155,6 +155,7 @@ message UsbEndPointProto { message UsbConnectionRecordProto { option (android.msg_privacy).dest = DEST_AUTOMATIC; + // usb device's address, e.g. 001/002, nothing about the phone optional string device_address = 1; optional android.service.UsbConnectionRecordMode mode = 2; optional int64 timestamp = 3; @@ -251,6 +252,7 @@ message UsbAlsaDeviceProto { optional string name = 3; optional bool has_playback = 4; optional bool has_capture = 5; + // usb device's address, e.g. 001/002, nothing about the phone optional string address = 6; } @@ -259,6 +261,7 @@ message UsbMidiDeviceProto { optional int32 card = 1; optional int32 device = 2; + // usb device's address, e.g. 001/002, nothing about the phone optional string device_address = 3; } diff --git a/core/proto/android/view/displayinfo.proto b/core/proto/android/view/displayinfo.proto index cbd06fdb8c043221cdeeb153d31b4de59d805b3d..2a030509e617a9a7f7105ecb723a1ecf03597b73 100644 --- a/core/proto/android/view/displayinfo.proto +++ b/core/proto/android/view/displayinfo.proto @@ -29,5 +29,5 @@ message DisplayInfoProto { optional int32 logical_height = 2; optional int32 app_width = 3; optional int32 app_height = 4; - optional string name = 5; + optional string name = 5 [ (.android.privacy).dest = DEST_EXPLICIT ]; } diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 48d394a299c379cb839ad46393ddc6caebbec42f..f4715fc7645d579cbbeeb930f1568176f2b58794 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -2016,11 +2016,11 @@ - + - + @@ -3121,6 +3121,12 @@ + + + - + "Kon nie Wi-Fi-oproepe opstel nie" "Om oproepe te maak en boodskappe oor Wi-Fi te stuur, vra eers jou diensverskaffer om hierdie diens op te stel. Skakel Wi-Fi-oproepe dan weer in Instellings aan. (Foutkode: %1$s)" - + + "Probleem om Wi-Fi-oproepe by jou diensverskaffer te registreer: %1$s" + "%s" "%s Wi-Fi-oproep" @@ -481,6 +483,8 @@ "Laat die program toe om met kortveldkommunikasie- (NFC) merkers, kaarte en lesers te kommunikeer." "deaktiveer jou skermslot" "Laat die program toe om die sleutelslot en enige verwante wagwoordsekuriteit te deaktiveer. Byvoorbeeld, die foon deaktiveer die sleutelslot wanneer ’n oproep inkom, en atkiveer dit dan weer wanneer die oproep eindig." + "gebruik biometriese hardeware" + "Laat die program toe om biometriese hardeware vir stawing te gebruik" "bestuur vingerafdrukhardeware" "Laat die program toe om metodes te benut om vingerafdruksjablone vir gebruik by te voeg en uit te vee." "gebruik vingerafdrukhardeware" @@ -493,6 +497,7 @@ "Nie herken nie" + "Vingerafdruk is gestaaf" "Vingerafdrukhardeware is nie beskikbaar nie." "Vingerafdruk kan nie gestoor word nie. Verwyder asseblief \'n bestaande vingerafdruk." "Vingerafdrukuittelling is bereik. Probeer weer." @@ -1005,14 +1010,23 @@ "Invoermetode" "Teksaksies" "E-pos" + "Stuur e-pos aan gekose adres" "Bel" + "Bel gekose foonnommer" "Spoor op" + "Kry gekose adres" "Maak oop" + "Maak gekose URL oop" "SMS" + "Stuur SMS aan gekose foonnommer" "Voeg by" + "Voeg by kontakte" "Bekyk" + "Bekyk gekose tyd in kalender" "Skeduleer" + "Skeduleer geleentheid vir gekose tyd" "Spoor na" + "Spoor gekose vlug na" "Bergingspasie word min" "Sommige stelselfunksies werk moontlik nie" "Nie genoeg berging vir die stelsel nie. Maak seker jy het 250 MB spasie beskikbaar en herbegin." @@ -1141,8 +1155,7 @@ "Koppel aan oop Wi-Fi-netwerk" "Koppel aan diensverskaffer se Wi‑Fi-netwerk" - - + "Koppel tans aan Wi-Fi-netwerk" "Aan Wi-Fi-netwerk gekoppel" "Kon nie aan Wi-Fi-netwerk koppel nie" "Tik om alle netwerke te sien" @@ -1258,33 +1271,34 @@ "%s wys bo-oor ander programme" "As jy nie wil hê dat %s hierdie kenmerk gebruik nie, tik om instellings oop te maak en skakel dit af." "Skakel af" - "Berei tans %s voor" - "Kyk tans vir foute" - "Nuwe %s bespeur" + "Gaan tans %s na …" + "Gaan tans huidige inhoud na" + "Nuwe %s" + "Tik om op te stel" "Om foto\'s en media oor te dra" - "Gekorrupteerde %s" - "%s is korrup. Tik om reg te maak." + "Kwessie met %s" + "Tik om reg te stel" "%s is korrup. Kies om reg te stel." "Niegesteunde %s" "Hierdie toestel steun nie hierdie %s nie. Tik om in \'n gesteunde formaat op te stel." "Hierdie toestel steun nie hierdie %s nie. Kies om in \'n gesteunde formaat op te stel." "%s is onverwags verwyder" - "Demonteer %s voordat dit verwyder word om dataverlies te voorkom" - "Het %s verwyder" - "%s is verwyder; sit \'n nuwe een in" - "Demonteer %s tans nog …" - "Moenie verwyder nie" + "Maak media los voordat jy dit verwyder om te keer dat jy inhoud verloor" + "%s is verwyder" + "Sommige funksies sal dalk nie behoorlik werk nie. Sit nuwe bergingmedia in." + "Maak tans %s los" + "Moenie verwyder nie" "Stel op" "Haal uit" "Verken" "%s ontbreek" - "Sit hierdie toestel weer in" + "Sit toestel weer in" "Skuif tans %s" "Skuif tans data" - "Skuif voltooi" - "Data na %s geskuif" - "Kon nie data skuif nie" - "Data oor op oorspronklike ligging" + "Inhoudoordrag is klaar" + "Inhoud is geskuif na %s" + "Kon nie inhoud skuif nie" + "Probeer inhoud weer skuif" "Verwyderd" "Uitgegooi" "Kontroleer tans …" @@ -1676,8 +1690,7 @@ "Geïnstalleer deur jou administrateur" "Opgedateer deur jou administrateur" "Uitgevee deur jou administrateur" - - + "Batterybespaarder verlaag jou toestel se werkverrigting en beperk of skakel vibrasie, liggingdienste en agtergronddata af om sodoende jou batterylewe te verleng. E-pos, boodskappe en ander programme wat op sinkronisering staatmaak, sal dalk nie opdateer nie tensy jy hulle oopmaak.\n\nBatterybespaarder skakel outomaties af wanneer jou toestel laai." "Databespaarder verhoed sommige programme om data in die agtergrond te stuur of te aanvaar om datagebruik te help verminder. \'n Program wat jy tans gebruik kan by data ingaan, maar sal dit dalk minder gereeld doen. Dit kan byvoorbeeld beteken dat prente nie wys totdat jy op hulle tik nie." "Skakel Databespaarder aan?" "Skakel aan" @@ -1728,22 +1741,14 @@ "Gedemp deur %1$s" "Daar is \'n interne probleem met jou toestel en dit sal dalk onstabiel wees totdat jy \'n fabriekterugstelling doen." "Daar is \'n interne probleem met jou toestel. Kontak jou vervaardiger vir besonderhede." - - - - - - - - - - - - - - - - + "USSD-versoek is na gewone oproep toe verander" + "USSD-versoek is na SS-versoek toe verander" + "Na nuwe USSD-versoek toe verander" + "USSD-versoek is na video-oproep toe verander" + "SS-versoek is na gewone oproep toe verander" + "SS-versoek is na video-oproep toe verander" + "SS-versoek is na USSD-versoek toe verander" + "Na nuwe SS-versoek toe verander" "Werkprofiel" "Vou uit" "Vou in" @@ -1841,6 +1846,10 @@ "SIM nie opgestel vir stem nie" "SIM nie toegelaat vir stem nie" "Foon nie toegelaat vir stem nie" + "SIM %d word nie toegelaat nie" + "SIM %d is nie opgestel nie" + "SIM %d word nie toegelaat nie" + "SIM %d word nie toegelaat nie" "Opspringvenster" "+ %1$d" "Programweergawe is afgegradeer, of is nie met hierdie kortpad versoenbaar nie" diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index 58772d160024d5a722523c1d5cec5a96104a7a00..2b3c3beba8bfedfeb695df418dacbf8ddf59b42f 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -77,15 +77,16 @@ "የደዋይ ID ነባሪዎች ወደአልተከለከለም። ቀጥሎ ጥሪ፡አልተከለከለም" "አገልግሎት አልቀረበም።" "የደዋይ መታወቂያ ቅንብሮች መለወጥ አትችልም፡፡" - "ምንም የውሂብ አገልግሎት የለም" - "ምንም የአስቸኳይ አደጋ ጥሪ የለም" + "ምንም የተንቀሳቃሽ ስልክ ውሂብ አገልግሎት የለም" + "የድንገተኛ አደጋ ጥሪ አይገኝም" "ምንም የድምፅ ጥሪ አገልግሎት የለም" - "ምንም የድምፅ እና የድንገተኛ አደጋ ጥሪ አገልግሎት የለም" - "ለጊዜው በአካባቢዎ ባለው የተንቀሳቃሽ ስልክ አውታረ መረብ አይቀርብም" - "አውታረ መረብ ላይ መድረስ አይቻልም" - "ቅበላን ለማሻሻል የተመረጠውን ዓይነት በቅንብሮች > አውታረ መረብ እና በይነመረብ > የተንቀሳቃሽ ስልክ አውታረ መረቦች > ተመራጭ የአውታረ መረብ ዓይነት ላይ ለመለወጥ ይሞክሩ።" - "የWi‑Fi ጥሪ ገቢር ነው" - "የአደጋ ጥሪዎች የተንቀሳቃሽ ስልክ አውታረ መረብ ያስፈልጋቸዋል።" + "ምንም የድምፅ አገልግሎት ወይም የድንገተኛ አደጋ ጥሪ የለም" + "ለጊዜው በአገልግሎት አቅራቢዎ ጠፍቷል" + "ለሲም %d ለጊዜው በእርስዎ አገልግሎት አቅራቢ ጠፍቷል" + "የሞባይል አውታረ መረብን መድረስ አልተቻለም" + "ተመራጭ አውታረ መረብን ለመለወጥ ይሞክሩ። ለመለወጥ መታ ያድርጉ።" + "የአደጋ ጊዜ ጥሪ አይገኝም" + "በWi‑Fi በኩል የአደጋ ጊዜ ጥሪዎችን ማድረግ አይችልም" "ማንቂያዎች" "ጥሪ ማስተላለፍ" "የአደጋ ጊዜ ጥሪ ሁነታ" @@ -120,12 +121,12 @@ "የዝውውር ሰንደቅ በርቷል" "የዝውውር ሰንደቅ ጠፍቷል" "አገልግሎት ፍለጋ" - "የWi-Fi ጥሪ ማድረጊያ" + "የWi‑Fi ጥሪን ማቀናበር አልተቻለም" "በWi-Fi ላይ ጥሪዎችን ለማድረግ እና መልዕክቶችን ለመላክ መጀመሪያ የአገልግሎት አቅራቢዎ ይህን አገልግሎት እንዲያዘጋጅልዎ መጠየቅ አለብዎት። ከዚያ ከቅንብሮች ሆነው እንደገና የWi-Fi ጥሪን ያብሩ። (የስህተት ኮድ፦ %1$s)" - "ከእርስዎ አገልግሎት አቅራቢ ጋር ይመዝገቡ (ስህተት ኮድ፦ %1$s)" + "ከእርስዎ አገልግሎት አቅራቢ ጋር የWi‑Fi ጥሪን በማስመዝገብ ላይ ችግር፦ %1$s" "%s" @@ -160,8 +161,8 @@ "እጅግ ብዙ ጥየቃዎች ተካሂደዋል። ትንሽ ቆይተው እንደገና ይሞክሩ።" "ለ %1$s በመለያ መግባት ስህተት" "ሥምሪያ" - "ሥምሪያ" - "በጣም ብዙ %s ስርዞች።" + "ማሳመር አልተቻለም" + "በጣም ብዙ %s ለመሰረዝ ተሞክሯል።" "የጡባዊ ተኮ ማከማቻ ሙሉ ነው! ቦታ ነፃ ለማድረግ አንዳንድ ፋይሎች ሰርዝ።" "የእጅ ሰዓት ማከማቻ ሙሉ ነው። ቦታ ለማስለቀቅ አንዳንድ ፋይሎችን ይሰርዙ።" "የቴሌቪዥን ማከማቻ ሙሉ ነው። ቦታ ለማስለቀቅ አንዳንድ ፋይሎችን ይሰርዙ።" @@ -174,14 +175,13 @@ "በእርስዎ የሥራ መገለጫ አስተዳዳሪ" "በ%s" "የስራ መገለጫ ተሰርዟል" - "በጎደለ የአስተዳዳሪ መተግበሪያ ምክንያት የሥራ መገለጫ ተሰርዟል።" "የሥራ መገለጫ አስተዳዳሪ መተግበሪያው ወይም ይጎድላል ወይም ተበላሽቷል። በዚህ ምክንያት የሥራ መገለጫዎ እና ተዛማጅ ውሂብ ተሰርዘዋል። እርዳታን ለማግኘት አስተዳዳሪዎን ያነጋግሩ።" "የሥራ መገለጫዎ ከዚህ በኋላ በዚህ መሣሪያ ላይ አይገኝም" "በጣም ብዙ የይለፍ ቃል ሙከራዎች" "መሣሪያው የሚተዳደር ነው" "የእርስዎ ድርጅት ይህን መሣሪያ ያስተዳድራል፣ እና የአውታረ መረብ ትራፊክን ሊከታተል ይችላል። ዝርዝሮችን ለማግኘት መታ ያድርጉ።" "የእርስዎ መሣሪያ ይደመሰሳል" - "የአስተዳዳሪ መተግበሪያ ጥቅም ላይ ሊውል አይችልም። የእርስዎን መሣሪያ አሁን ይደመሰሳል።\n\nጥያቄዎች ካልዎት የእርስዎን ድርጅት አስተዳዳሪ ያነጋግሩ።" + "የአስተዳዳሪ መተግበሪያ ስራ ላይ ሊውል አይችልም። የእርስዎን መሣሪያ አሁን ይደመሰሳል።\n\nጥያቄዎች ካለዎት የድርጅትዎን አስተዳዳሪ ያነጋግሩ።" "ማተም በ%s ተሰናክሏል።" "እኔ" "የጡባዊ አማራጮች" @@ -236,6 +236,9 @@ "የአውሮፕላን ሁነታ" "የአውሮፕላንሁነታ በርቷል" "የአውሮፕላንሁነታ ጠፍቷል" + "የባትሪ ኃይል ቆጣቢ" + "የባትሪ ኃይል ቆጣቢ ጠፍቷል" + "የባትሪ ኃይል ቆጣቢ በርቷል" "ቅንብሮች" "ደግፍ" "የድምጽ እርዳታ" @@ -269,31 +272,31 @@ "ወደ የስራ መገለጫ ቀይር" "ዕውቂያዎች" "የእርስዎ እውቂያዎች ላይ ይድረሱባቸው" - "<b>%1$s</b> እውቂያዎችዎን እንዲደርስ ይፍቀዱለት" + "<b>%1$s</b> እውቂያዎችዎን እንዲደርስ ይፈቀድለት?" "መገኛ አካባቢ" "የዚህን መሣሪያ አካባቢ ይድረሱበት" - "<b>%1$s</b> የዚህ መሣሪያ አካባቢን እንዲደርስ ይፍቀዱለት" + "<b>%1$s</b> የዚህ መሣሪያ አካባቢን እንዲደርስ ይፈቀድለት?" "ቀን መቁጠሪያ" "የእርስዎን ቀን መቁጠሪያ ይድረሱበት" - "<b>%1$s</b> ቀን መቁጠሪያዎን እንዲደርስ ይፍቀዱለት" + "<b>%1$s</b> ቀን መቁጠሪያዎን እንዲደርስ ይፈቀድለት?" "ኤስኤምኤስ" "የኤስኤምኤስ መልዕክቶችን ይላኩና ይመልከቱ" - "<b>%1$s</b> የኤስኤምኤስ መልዕክቶችን እንዲልክ እና እንዲመለከት ይፍቀዱለት" + "<b>%1$s</b> የኤስኤምኤስ መልዕክቶችን እንዲልክ እና እንዲመለከት ይፈቀድለት?" "ማከማቻ" "በመሳሪያዎ ላይ ያሉ ፎቶዎችን፣ ማህደረመረጃን እና ፋይሎችን ይድረሱ" - "<b>%1$s</b> በመሣሪያዎ ላይ ያሉ ፎቶዎችን፣ ማህደረ መረጃን እና ፋይሎችን እንዲደርስ ይፍቀዱለት" + "<b>%1$s</b> በመሣሪያዎ ላይ ያሉ ፎቶዎችን፣ ማህደረ መረጃን እና ፋይሎችን እንዲደርስ ይፈቀድለት?" "ማይክሮፎን" "ኦዲዮ ይቅዱ" - "<b>%1$s</b> ኦዲዮን እንዲቀዳ ይፍቀዱለት" + "<b>%1$s</b> ኦዲዮን እንዲቀዳ ይፈቀድለት?" "ካሜራ" "ስዕሎች ያንሱ እና ቪዲዮ ይቅረጹ" - "<b>%1$s</b> ስዕሎችን እንዲያነሳ እና ቪዲዮን እንዲቀርጽ ይፍቀዱለት" + "<b>%1$s</b> ስዕሎችን እንዲያነሳ እና ቪዲዮን እንዲቀርጽ ይፈቀድለት?" "ስልክ" "የስልክ ጥሪዎች ያድርጉ እና ያስተዳድሩ" - "<b>%1$s</b> የስልክ ጥሪዎችን እንዲያደርግ እና እንዲያቀናብር ይፍቀዱለት" + "<b>%1$s</b> የስልክ ጥሪዎችን እንዲያደርግ እና እንዲያቀናብር ይፈቀድለት?" "የሰውነት ዳሳሾች" "ስለአስፈላጊ ምልክቶችዎ ያሉ የዳሳሽ ውሂብ ይድረሱ" - "<b>%1$s</b> የሰውነትዎ መሠረታዊ ምልክቶች የዳሳሽ ውሂብ እንዲደርስ ይፍቀዱለት" + "<b>%1$s</b> የሰውነትዎ መሠረታዊ ምልክቶች የዳሳሽ ውሂብ እንዲደርስ ይፈቀድለት?" "የመስኮት ይዘት ሰርስረው ያውጡ" "መስተጋበር የሚፈጥሩት የመስኮት ይዘት ይመርምሩ።" "በመንካት ያስሱን ያብሩ" @@ -305,7 +308,7 @@ "የጣት ምልክቶችን ያከናውኑ" "መታ ማድረግ፣ ማንሸራተት፣ መቆንጠጥ እና ሌሎች የጣት ምልክቶችን ማከናወን ይችላል።" "የጣት አሻራ ምልክቶች" - "በመሣሪያዎቹ የጣት አሻራ ዳሳሽ ላይ የተከናወኑ የጣት ምልክቶችን መያዝ ይችላል።" + "በመሣሪያው የጣት አሻራ ዳሳሽ ላይ የተከናወኑ የጣት ምልክቶችን መያዝ ይችላል።" "የሁኔቴ አሞሌ አቦዝን ወይም ቀይር" "የስርዓት አዶዎችን ወደ ሁኔታ አሞሌ ላለማስቻል ወይም ለማከል እና ለማስወገድ ለመተግበሪያው ይፈቅዳሉ፡፡" "የሁኔታ አሞሌ መሆን" @@ -356,6 +359,8 @@ "መተግበሪያው የራሱን ክፍሎች በማህደረ ትውስታ ውስጥ በቋሚነት የሚቀጥሉ እንዲያደርግ ይፈቅድለታል። ይህ ለሌላ መተግበሪያዎች ያለውን ማህደረ ትውስታ በመገደብ ጡባዊ ተኮውን ሊያንቀራፍፈው ይችላል።" "መተግበሪያው የእራሱ ክፍሎች በማህደረትውስታ ውስጥ ዘላቂ እንዲያደርግ ያስችለዋል። ይሄ ሌሎች መተግበሪያዎች የሚገኘውን ማህደረትውስታ በመገደብ ቴሌቪዥኑን ሊያንቀራፍፈው ይችላል።" "መተግበሪያው የራሱን ክፍሎች በማህደረ ትውስታ ውስጥ በቋሚነት የሚቀጥሉ እንዲያደርግ ይፈቅድለታል። ይህ ለሌላ መተግበሪያዎች ያለውን ማህደረ ትውስታ በመገደብ ስልኩን ያንቀራፍፈዋል።" + "የፊት አገልግሎትን ማሄድ" + "መተግበሪያው ፊት ላይ ያሉ አገልግሎቶችን እንዲጠቀም ያስችለዋል።" "የመተግበሪያ ማከማቻ ቦታ ለካ" "የራሱን ኮድ ፣ውሂብ እና መሸጎጫ መጠኖች ሰርስሮ ለማውጣት ለመተግበሪያው ይፈቅዳሉ።" "የስርዓት ቅንብሮችን አስተካክል" @@ -478,6 +483,8 @@ "ከቅርብ ግኑኙነት መስክ (NFC) መለያዎች፣ ካርዶች እና አንባቢ ጋር ለማገናኘት ለመተግበሪያው ይፈቅዳሉ።" "የማያ ገጽዎን መቆለፊያ ያሰናክሉ" "መተግበሪያው መቆለፊያውና ማንኛውም የተጎዳኘ የይለፍ ቃል ደህንነት እንዲያሰናክል ይፈቅድለታል። ለምሳሌ ስልኩ ገቢ የስልክ ጥሪ በሚቀበልበት ጊዜ መቆለፊያውን ያሰናክልና ከዚያም ጥሪው ሲጠናቀቅ መቆለፊያውን በድጋሚ ያነቃዋል።" + "ባዮሜትራዊ ሃርድዌርን መጠቀም" + "መተግበሪያው የባዮሜትራዊ ሃርድዌር ለማረጋገጥ ስራ እንዲጠቀም ያስችለዋል" "የጣት አሻራ ሃርድዌርን አስተዳድር" "መተግበሪያው ጥቅም ላይ እንዲውሉ የጣት አሻራ ቅንብር ደንቦችን ለማከል እና ለመሰረዝ የሚያስችሉ ስልቶችን እንዲያስጀምር ያስችለዋል።" "የጣት አሻራ ሃርድዌርን ተጠቀም" @@ -490,6 +497,7 @@ "አልታወቀም" + "የጣት አሻራ ትክክለኛነት ተረጋግጧል" "የጣት አሻራ ሃርድዌር አይገኝም።" "የጣት አሻራ ሊከማች አይችልም። እባክዎ አሁን ያለውን የጣት አሻራ ያስወግዱ።" "የጣት አሻራ ማብቂያ ጊዜ ደርሷል። እንደገና ይሞክሩ።" @@ -802,6 +810,8 @@ "በስርዓተ-ጥለት መክፈት።" "በፊት መክፈት።" "በፒን መክፈት።" + "የሲም ፒን ክፈት።" + "የሲም ፒዩኬ ክፈት።" "በይለፍ ቃል መክፈት።" "የስርዓተ-ጥለት አካባቢ።" "የማንሸራተቻ አካባቢ።" @@ -863,6 +873,12 @@ "ፅሁፍ ወደ ቅንጥብ ሰሌዳ ተገልብጧል።" "ተጨማሪ" "ምናሌ+" + "Meta+" + "Ctrl+" + "Alt+" + "Shift+" + "Sym+" + "Function+" "ቦታ" "አሰገባ" "ሰርዝ" @@ -994,14 +1010,23 @@ "ግቤት ስልት" "የፅሁፍ እርምጃዎች" "ኢሜይል" + "ለተመረጡ አድራሻዎች ኢሜይል ላክ" "ጥሪ" + "ወደተመረጠውን ስልክ ቁጥር ደውል" "ቦታውን አግኝ" + "የተመረጡ አድራሻዎችን በካርታዎች ላይ ያግኙ" "ክፈት" + "የተመረጠውን ዩአርኤል ክፈት" "መልዕክት" + "ለተመረጠው ስልክ ቁጥር መልዕክት ላክ" "አክል" + "ወደ እውቂያዎች ያክሉ" "ይመልከቱ" + "የተመረጠውን ሰዓት በቀን መቁጠሪያ ውስጥ ይመልከቱ" "መርሐግብር" + "ለተመረጠው ጊዜ የክስተት መርሐግብር ያስይዙ" "ተከታተል" + "የተመረጠውን በረራ ይከታተሉ" "የማከማቻ ቦታ እያለቀ ነው" "አንዳንድ የስርዓት ተግባራት ላይሰሩ ይችላሉ" "ለስርዓቱ የሚሆን በቂ ቦታ የለም። 250 ሜባ ነጻ ቦታ እንዳለዎት ያረጋግጡና ዳግም ያስጀምሩ።" @@ -1074,31 +1099,28 @@ "ዝማኔ ካለ አረጋግጥ" "መተግበሪያው %1$s( ሂደት%2$s) በራስ ተነሳሺ StrictMode ደንብን ይተላለፋል።" "ሂደቱ %1$s በራስ ተነሳሺ StrictMode ፖሊሲን ይተላለፋል።" - "Android እያሻሻለ ነው..." - "Android በመጀመር ላይ ነው…" + "ስልክ በመዘመን ላይ ነው…" + "ጡባዊ በመዘመን ላይ ነው…" + "መሣሪያ በመዘመን ላይ ነው…" + "ስልክ በመጀመር ላይ ነው…" + "ጡባዊ በመጀመር ላይ ነው…" + "መሣሪያ በመጀመር ላይ ነው…" "ማከማቻን በማመቻቸት ላይ።" - "የAndroid ዝማኔን በመጨረስ ላይ…" - "አንዳንድ መተግበሪያዎች ማላቁ እስኪጠናቀቅ ድረስ በአግባቡ ላይሰሩ ይችላሉ" + "የስርዓት ዝማኔን በመጨረስ ላይ…" "%1$s በማላቅ ላይ…" "መተግበሪያዎች በአግባቡ በመጠቀም ላይ %1$d%2$d ፡፡" "%1$sን ማዘጋጀት።" "መተግበሪያዎችን በማስጀመር ላይ፡፡" "አጨራረስ ማስነሻ፡፡" "%1$s አሂድ" - - - - - - - - - - - - + "ወደ ጨዋታ ለመመለስ መታ ያድርጉ" + "ጨዋታ ይምረጡ" + "ለተሻለ አፈጻጸም ከእነዚህ መካከል አንዱ ብቻ ነው የሚከፈተው።" + "ወደ %1$s ተመለስ" + "%1$sን ይክፈቱ" + "%1$s ሳያስቀምጥ ይዘጋል" "%1$s የማህደረ ትውስታ ገደብን አልፏል" - "የቆሻሻ ቁልል ተሰብስቧል፤ ለማጋራት መታ ያድርጉ" + "የቆሻሻ ቁልል ተሰብስቧል። ለማጋራት መታ ያድርጉ።" "የቆሻሻ ቁልል ይጋራ?" "የ%1$s ሂደት የማህደረ ትውስታ ሂደት %2$s ገደቡን አልፏል። የቆሻሻ ቁልል ከገንቢው ጋር እንዲያጋሩ ለእርስዎ ሊገኝ ይችላል። ጥንቃቄ ያድርጉ፦ ይህ የቆሻሻ ቁልል መተግበሪያው መዳረሻ ያለው የሆነ የእርስዎ የግል መረጃን ሊይዝ ይችላል።" "ለፅሁፍ ድርጊት ምረጥ" @@ -1133,12 +1155,12 @@ "ከክፍት የWi‑Fi አውታረ መረብ ጋር ያገናኙ" "ከአገልግሎት አቅራቢ Wi-Fi አውታረ መረብ ጋር ይገናኙ" - "ከክፍት የWi‑Fi አውታረ መረብ ጋር በመገናኘት ላይ" + "ከWi‑Fi አውታረ መረብ ጋር በመገናኘት ላይ" "ከWi‑Fi አውታረ መረብ ጋር ተገናኝቷል" "ከWi‑Fi አውታረ መረብ ጋር መገናኘት አልተቻለም" "ሁሉንም አውታረ መረቦችን ለማየት መታ ያድርጉ" "አገናኝ" - "ሁሉም አውታረ መረቦች" + "ሁሉም አውታረ መረቦች" "Wi‑Fi በራስ-ሰር ይበራል" "ከፍተኛ ጥራት ያለው የተቀመጠ አውታረ መረብ አቅራቢያ ሲሆኑ" "መልሰህ አታብራ" @@ -1204,6 +1226,7 @@ "ዳግም ጀምር" "የሞባይል አገልግሎትን አግብር" "የእርስዎን አዲስ ሲም ለማግበር የአገልግሎት አቅራቢውን መተግበሪያ ያውርዱ" + "የእርስዎን አዲስ ሲም ለማግበር የ%1$sን መተግበሪያ ያውርዱ" "መተግበሪያን አውርድ" "አዲስ ሲም ገብቷል" "ለማዋቀር መታ ያድርጉ" @@ -1222,13 +1245,13 @@ "PTP በዩኤስቢ በኩል በርቷል" "ዩኤስቢን እንደ ሞደም መሰካት በርቷል" "MIDI በዩኤስቢ በኩል በርቷል" - "የዩኤስቢ ተቀጥላ መሣሪያ ሁነታ በርቷል" + "የዩኤስቢ ተቀጥላ ተገናኝቷል" "ለተጨማሪ አማራጮች መታ ያድርጉ።" "የተገናኘ መሣሪያን ኃይል በመሙላት ላይ። ለተጨማሪ አማራጮች መታ ያድርጉ።" "የአናሎግ ኦዲዮ ረዳት እንዳለ ተደርሶበታል" "ዓባሪ የተያያዘው መሣሪያ ከዚህ ስልክ ጋር ተኳዃኝ አይደለም። የበለጠ ለመረዳት መታ ያድርጉ።" "USB አድስ ተያይዟል" - "የዩኤስቢ ማረሚያን ለማሰናከል መታ ያድርጉ።" + "የዩኤስቢ ማረሚያን ለማጥፋት መታ ያድርጉ" "USB ማረሚያ ላለማንቃት ምረጥ።" "የሳንካ ሪፖርትን በመውሰድ ላይ…" "የሳንካ ሪፖርት ይጋራ?" @@ -1247,34 +1270,35 @@ "%s በሌሎች መተግበሪያዎች ላይ እያሳየ ነው" "%s በሌሎች መተግበሪያዎች ላይ እያሳየ ነው" "%s ይህን ባህሪ እንዲጠቀም ካልፈለጉ ቅንብሮችን ለመክፈት መታ ያድርጉና ያጥፉት።" - "አጥፋ" - "%sን በማዘጋጀት ላይ" - "ስህተቶች ካሉ በመፈተሽ ላይ" - "አዲስ %s ተገኝቷል" + "አጥፋ" + "%sን በመፈተሽ ላይ…" + "አሁን ያለ ይዘትን በመገምገም ላይ" + "አዲስ %s" + "ለማዋቀር መታ ያድርጉ" "ፎቶዎችን እና ማህደረመረጃን ለማስተላለፍ" - "ተበላሽቷል %s" - "%s ተበላሽቷል። ለማስተካከል መታ ያድርጉ።" + "ከ%s ጋር ችግር" + "ለማስተካከል መታ ያድርጉ" "%s የተበላሸ ነው። ለማስተካከል ይምረጡ።" "ያልተደገፈ %s" "ይህ መሣሪያ ይህን %s አይደግፍም። በሚደገፍ ቅርጸት ለማዘጋጀት መታ ያድርጉ።" "ይህ መሣሪያ ይህን %s አይደግፍም። በሚደገፍ ቅርጸት ለማዘጋጀት ይምረጡ።" "%s ሳይታሰብ ተወግዷል" - "ውሂብ እንዳይጠፋ ለመከላከል ከማስወገድዎ በፊት %sን ያላቅቁት" - %s» ተወግዷል" - "%s ተወግዷል፤ አዲስ ያስገቡ" - "አሁንም %sን በማስወጣት ላይ…" - "አያስወግዱ" + "ይዘት መጥፋትን ለማስቅረት ከማስወገድ በፊት ማህደረ መረጃን ያስወጡ" + "%s ተወግደዋል" + "አንዳንድ ትግበራዎች በአግባቡ ላይሠሩ ይችሉ ይሆናል። አዲስ ማከማቻ ያስገቡ።" + "%sን በማስወጣት ላይ…" + "አያስወግዱ" "አዋቅር" "አስወጣ" "ያስሱ" "%s ይጎድላል" - "ይህን መሣሪያ ዳግም ያስገቡ" + "መሣሪያን እንደገና ያስገቡ" "%sን በመውሰድ ላይ" "ውሂብን በመውሰድ ላይ" - "መውሰድ ተጠናቅቋል" - "ውሂብ ወደ %s ተወስዷል" - "ውሂብ መውሰድ አልተቻለም" - "ውሂብ በመጀመሪያው አካባቢ ላይ ተትቷል" + "የይዘት ማስተላለፍ ተከናውኗል" + "ይዘት ወደ %s ተንቀሳቅሷል" + "ይዘትን ማንቀሳቀስ አልተቻለም" + "ይዘትን እንደገና ለማንቀሳቀስ ይሞክሩ" "ተወግዷል" "ወጥቷል" "በማረጋገጥ ላይ…" @@ -1333,14 +1357,14 @@ "ሁልጊዜ የበራ VPN በመገናኘት ላይ…" "ሁልጊዜ የበራ VPN ተገናኝቷል" "ሁልጊዜ ከበራ ቪፒኤን ጋር ግንኙነት ተቋርጧል" - "ሁልጊዜ የበራ VPN ስህተት" + "ሁልጊዜ ከበራ ቪፒኤን ጋር መገናኘት አልተቻለም" "የአውታረ መረብ ወይም የቪፒኤን ቅንብሮችን ይቀይሩ" "ፋይል ምረጥ" "ምንም ፋይል አልተመረጠም" "ዳግም አስጀምር" "አስረክብ" - "የመኪና ሁነታ ነቅቷል" - "ከመኪና ሁነታ ለመውጣት መታ ያድርጉ።" + "የመንዳት መተግበሪያ እያሄደ ነው" + "ከመንዳት መተግበሪያ ለመውጣት መታ ያድርጉ።" "መሰካት ወይም ገባሪ ድረስ ነጥብ" "ለማዋቀር መታ ያድርጉ።" "እንደ ሞደም መሰካት ተሰናክሏል" @@ -1418,22 +1442,19 @@ "የ%s ዩኤስቢ አንጻፊ" "የUSB ማከማቻ" "አርትዕ" - "የውሂብ አጠቃቀም ማንቂያ" - "አጠቃቀምን እና ቅንብሮችን ለማየት መታ ያድርጉ።" - "የ2ጂ-3ጂ ውሂብ ገደብ ላይ ተደርሷል" - "የ4ጂ ውሂብ ገደብ ላይ ተደርሷል" + "የውሂብ ማስጠንቀቂያ" + "ከውሂብ %s ተጠቅመዋል" "የተንቀሳቃሽ ስልክ ውሂብ ገደብ ላይ ተደርሷል" "የWi-Fi ውሂብ ገደብ ላይ ተደርሷል" - "ለተቀረው ዑደት ውሂብ ለአፍታ ቆሟል" - "2G-3G የውሂብ ወሰን አልፏል" - "4G ውሂብ ወሰን አልፏል" - "የተንቀሳቃሽ ውሂብ ወሰን አልፏል" - "Wi-Fi ውሂብ ገደብ ታልፏል" - "%s ከተወሰነለት በላይ።" + "ለእርስዎ የተቀረው ዑደት ውሂብ ላፍታ ቆሟል" + "ከእርስዎ የተንቀሳቃሽ ስልክ ውሂብ ገደብ በላይ" + "ከእርስዎ Wi-Fi ውሂብ ገደብ በላይ" + "ከተቀመጠው የእርስዎ ገደብ %s በላይ ሄደዋል" "ዳራ ውሂብ የተገደበ ነው" "ገደብን ለማስወገድ መታ ያድርጉ።" - "ትልቅ የውሂብ አጠቃቀም" - "ባለፉት ጥቂት ቀናት ላይ የነበረው የእርስዎ የውሂብ አጠቃቀም ከተለመደው የበለጠ ነው። አጠቃቀምን እና ቅንብሮችን ለመመልከት መታ ያድርጉ።" + "ከፍተኛ የተንቀሳቃሽ ውሂብ አጠቃቀም" + "የእርስዎ መተግበሪያ ከተለመደው በላይ ተጨማሪ ውሂብ ተጠቅሟል" + "%s ከተለመደው በላይ ተጨማሪ ውሂብ ተጠቅሟል" "የደህንነት ዕውቅና ማረጋገጫ" "ይህ የዐዕውቅና ማረጋገጫ ትክክል ነው።" "ለ፡ ተዘጋጀ" @@ -1669,7 +1690,7 @@ "በእርስዎ አስተዳዳሪ ተጭኗል" "በእርስዎ አስተዳዳሪ ተዘምኗል" "በእርስዎ አስተዳዳሪ ተሰርዟል" - "የባትሪ ዕድሜን እንዲሻሻል ለማገዝ የመሣሪያዎን አፈጻጸም ይቀንሳል እና ንዝረትን፣ የአካባቢ አገልግሎቶችን እና አብዛኛው ውሂብ ይገድባል። ኢሜይል፣ መልዕክት መላላኪያ እና ሌሎች በስምረት ላይ የሚወሰኑ መተግበሪያዎች እርስዎ ካልከፈቷቸው በስተቀር ላይዘመኑ ይችላሉ።\n\nየእርስዎ መሣሪያ ኃይል በሚሞላበት ጊዜ ባትሪ ቆጣቢ በራስ-ሰር ይጠፋል።" + "የባትሪ ህይወትን ለማሻሻል ባትሪ ቆጣቢ የመሣሪያዎን አፈጻጸምን ይቀንስና ንዝረትን፣ የአካባቢ አገልግሎቶችን እና የጀርባ ውሂብን ይገድባል። ኢሜይል፣ መልዕክት መላላክ እና ሌሎች በስምረት ላይ የሚወሰኑ መተግበሪያዎች እስኪከፍቷቸው ድረስ ላያዘምኑ ይችላሉ።\n\nመሣሪያዎ ኃይል በሚሞላበት ማንኛውም ጊዜ ላይ ባትሪ ቆጣቢ በራስ-ሰር ይጠፋል።" "የውሂብ አጠቃቀም እንዲቀንስ ለማገዝ ውሂብ ቆጣቢ አንዳንድ መተግበሪያዎች ከበስተጀርባ ሆነው ውሂብ እንዳይልኩ ወይም እንዳይቀበሉ ይከለክላቸዋል። በአሁኑ ጊዜ እየተጠቀሙበት ያለ መተግበሪያ ውሂብ ሊደርስ ይችላል፣ ነገር ግን ባነሰ ተደጋጋሚነት ሊሆን ይችላል። ይሄ ማለት ለምሳሌ ምስሎችን መታ እስኪያደርጓቸው ድረስ ላይታዩ ይችላሉ ማለት ነው።" "ውሂብ ቆጣቢ ይጥፋ?" "አብራ" @@ -1681,9 +1702,9 @@ ለ%1$d ደቂቃ (እስከ %2$s) ለ%1$d ደቂቃ (እስከ %2$s) - - ለ%1$d ሰዓቶች (እስከ %2$s ድረስ) - ለ%1$d ሰዓቶች (እስከ %2$s ድረስ) + + ለ1 ሰዓቶች (እስከ %2$s ድረስ) + ለ1 ሰዓቶች (እስከ %2$s ድረስ) ለ%1$d ሰዓት (እስከ %2$s) @@ -1697,7 +1718,7 @@ ለ%d ደቂቃ ለ%d ደቂቃ - + ለ%d ሰዓቶች ለ%d ሰዓቶች @@ -1720,14 +1741,14 @@ "ድምጽ በ%1$s ተዘግቷል" "መሣሪያዎ ላይ የውስጣዊ ችግር አለ፣ የፋብሪካ ውሂብ ዳግም እስኪያስጀምሩት ድረስ ላይረጋጋ ይችላል።" "መሣሪያዎ ላይ የውስጣዊ ችግር አለ። ዝርዝሮችን ለማግኘት አምራችዎን ያነጋግሩ።" - "USSD ጥያቄ ወደ ደውል ጥያቄ ተሻሽሎዋል።" - "USSD ጥያቄ ወደ SS ጥያቄ ተሻሽሎዋል።" - "USSD ጥያቄ ወደ አዲስ USSD ጥያቄ ተሻሽሎዋል።" - "የUSSD ጥያቄ ወደ የቪድዪኦ ደውል ጥያቄ ተቀይሯል።" - "SS ጥያቄ ወደ ደውል ጥያቄ ተሻሽሎዋል።" - "የSS ጥያቄ ወደ የቪዲዮ ደውል ጥያቄ ተቀይሯል።" - "SS ጥያቄ ወደ USSD ጥያቄ ተሻሽሎዋል።" - "SS ጥያቄ ወደ አዲስ SS ጥያቄ ተሻሽሎዋል።" + "የUSSD ጥያቄ ወደ መደበኛ ጥሪ ተለውጧል" + "የUSSD ጥያቄ ወደ ኤስኤስ ጥያቄ ተለውጧል" + "ወደ አዲስ የUSSD ጥያቄ ተለውጧል" + "የUSSD ጥያቄ ወደ የቪዲዮ ጥሪ ተለውጧል" + "የSS ጥያቄ ወደ መደበኛ ጥሪ ተለውጧል" + "የSS ጥያቄ ወደ የቪዲዮ ጥሪ ተለውጧል" + "የSS ጥያቄ ወደ የUSSD ጥያቄ ተለውጧል" + "ወደ አዲስ የSS ጥያቄ ተለውጧል" "የስራ መገለጫ" "ዘርጋ" "ሰብስብ" @@ -1825,6 +1846,10 @@ "ሲም ለድምጽ አልቀረበም" "ሲም ለድምጽ አይፈቀድም" "ስልክ ለድምጽ አይፈቀድም" + "ሲም %d አይፈቀድም" + "ሲም %d አልቀረበም" + "ሲም %d አይፈቀድም" + "ሲም %d አይፈቀድም" "ብቅ-ባይ መስኮት" "+ %1$d" "የመተግበሪያ ስሪት ደረጃው ዝቅ ብሏል ወይም ከዚህ አቋራጭ ጋር ተኳዃኝ አይደለም" @@ -1837,7 +1862,14 @@ "ጎጂ መተግበሪያ ተገኝቷል" "%1$s%2$s ቁራጮችን ማሳየት ይፈልጋል" "አርትዕ" + "ጥሪዎች እና ማሳወቂያዎች ይነዝራሉ" + "ጥሪዎች እና ማሳወቂያዎች ድምፀ-ከል ይሆናሉ" "የሥርዓት ለውጦች" + "አትረብሽ" + "እርስዎ ትኩረት እንዲሰጡ ለማገዝ አትረብሽ ማሳወቂያዎችን እየደበቀ ነው" + "ይህ አዲስ ባሕሪ ነው። ለመለወጥ መታ ያድርጉ።" "አትረብሽ ተቀይሯል" - "ለማቋረጦች የባህሪ ቅንብሮችዎን ለመፈተሽ መታ ያድርጉ" + "ምን እንደታገደ ለመፈተሽ መታ ያድርጉ።" + "ሥርዓት" + "ቅንብሮች" diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index 1d48e884fc3044a377c2d632b0caaee16c7ad0cc..73b9c0bdc6498750b0ee37a94a64c83f92130bbf 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -81,15 +81,16 @@ "الإعداد الافتراضي لمعرف المتصل هو غير محظور . الاتصال التالي: غير محظور" "الخدمة غير متوفرة." "لا يمكنك تغيير إعداد معرّف المتصل." - "ليست هناك خدمة بيانات" - "لا يوجد اتصال في حالات الطوارئ" + "لا تتوفّر خدمة بيانات جوّال." + "لا تتوفّر مكالمات طوارئ." "لا تتوفر خدمة صوتية" - "لا تتوفر خدمة الصوت/الطوارئ" - "مؤقتا لا تقدمها شبكة الجوال في موقعك" - "يتعذر الوصول إلى الشبكة" - "‏لتحسين الاستقبال، يمكنك محاولة تغيير النوع المحدّد من خلال الإعدادات > الشبكة والإنترنت > شبكات الجوّال > نوع الشبكة المفضّل." - "‏الاتصال عبر Wi-Fi نشط" - "تتطلب مكالمات الطوارئ شبكة جوّال." + "لا تتوفّر خدمة صوتية أو مكالمات طوارئ." + "أجرى مشغّل شبكة الجوّال إيقافًا مؤقتًا للخدمة." + "‏أجرى مشغّل شبكة الجوّال إيقافًا مؤقتًا للخدمة لشريحة SIM رقم %d" + "يتعذّر الوصول إلى شبكة الجوّال." + "حاول تغيير الشبكة المفضلة. انقر لتغييرها." + "لا تتوفر إمكانية الاتصال في حالات الطوارئ." + "‏يتعذّر إجراء مكالمات طوارئ عبر Wi‑Fi." "التنبيهات" "إعادة توجيه المكالمة" "وضع معاودة الاتصال بالطوارئ" @@ -124,12 +125,12 @@ "إعلان بانر للتجوال قيد التشغيل" "إعلان بانر للتجوال متوقف" "البحث عن خدمة" - "‏الاتصال عبر Wi-Fi" + "‏تعذّر إعداد الاتصال عبر Wi‑Fi." "‏لإجراء مكالمات وإرسال رسائل عبر Wi-Fi، اطلب من مشغّل شبكة الجوّال أولاً إعداد هذه الخدمة، ثم شغّل الاتصال عبر Wi-Fi مرة أخرى من خلال الإعدادات. (رمز الخطأ: %1$s)" - "التسجيل لدى مشغِّل شبكة الجوّال (رمز الخطأ: %1$s)" + "‏حدثت مشكلة أثناء تسجيل الاتصال عبر Wi‑Fi باستخدام مشغِّل شبكة الجوّال: %1$s" "%s" @@ -164,8 +165,8 @@ "تتم الآن معالجة طلبات كثيرة للغاية. حاول مرة أخرى في وقت لاحق." "حدث خطأ أثناء تسجيل الدخول إلى %1$s" "مزامنة" - "مزامنة" - "عمليات حذف %s كثيرة للغاية." + "تتعذّر المزامنة." + "تمت محاولة حذف مقدار كبير من محتوى %s." "سعة تخزين الجهاز اللوحي ممتلئة! احذف بعض الملفات لإخلاء مساحة." "سعة تخزين المشاهدة ممتلئة! احذف بعض الملفات لتحرير مساحة." "سعة تخزين التلفزيون ممتلئة. يمكنك حذف بعض الملفات لتوفير مساحة فارغة." @@ -182,14 +183,13 @@ "بواسطة مشرف الملف الشخصي للعمل" "بواسطة %s" "تم حذف الملف الشخصي للعمل." - "تم حذف الملف الشخصي للعمل نتيجة فقد تطبيق المشرف" "تطبيق المشرف للملف الشخصي للعمل مفقود أو تالف لذا تم حذف الملف الشخصي للعمل والبيانات ذات الصلة. اتصل بالمشرف للحصول على المساعدة." "لم يعد ملفك الشخصي للعمل متاحًا على هذا الجهاز" "تم إجراء محاولات كثيرة جدًا لإدخال كلمة المرور" "تتم إدارة الجهاز" "تدير مؤسستك هذا الجهاز ويمكنها مراقبة حركة بيانات الشبكة. يمكنك النقر للحصول على تفاصيل." "سيتم محو بيانات جهازك." - "تعذر استخدام تطبيق المشرف. سيتم محو بيانات جهازك الآن.\n\nإذا كانت لديك أسئلة، فاتصل بمشرف مؤسستك." + "تعذّر استخدام تطبيق المشرف. سيتم محو بيانات جهازك الآن.\n\nإذا كانت لديك أسئلة، اتصل بمشرف مؤسستك." "تم تعطيل الطباعة بواسطة %s." "أنا" "خيارات الجهاز اللوحي" @@ -248,6 +248,9 @@ "وضع الطائرة" "وضع الطائرة قيد التشغيل" "وضع الطائرة متوقف" + "توفير شحن البطارية" + "توفير شحن البطارية غير مفعّل" + "توفير شحن البطارية مفعّل" "الإعدادات" "مساعدة" "المساعد الصوتي" @@ -281,31 +284,31 @@ "التبديل إلى الملف الشخصي للعمل" "جهات الاتصال" "الوصول إلى جهات اتصالك" - "‏السماح لتطبيق <b>%1$s</b> بالوصول إلى جهات الاتصال" + "‏هل تريد السماح لتطبيق <b>%1$s</b> بالدخول إلى جهات الاتصال؟" "الموقع" "الوصول إلى موقع هذا الجهاز" - "‏السماح لتطبيق <b>%1$s</b> بالوصول إلى موقع هذا الجهاز" + "‏هل تريد السماح لتطبيق <b>%1$s</b> بالوصول إلى الموقع الجغرافي لهذا الجهاز؟" "التقويم" "الوصول تقويمك" - "‏السماح لتطبيق <b>%1$s</b> بالوصول إلى التقويم" + "‏هل تريد السماح لتطبيق <b>%1$s</b> بالدخول إلى التقويم؟" "SMS" "‏إرسال رسائل قصيرة SMS وعرضها" - "‏السماح لتطبيق <b>%1$s</b> بإرسال رسائل SMS وعرضها" + "‏هل تريد السماح لتطبيق <b>%1$s</b> بتوجيه رسائل SMS وعرضها؟" "التخزين" "الوصول إلى الصور والوسائط والملفات على جهازك" - "‏السماح لتطبيق <b>%1$s</b> بالوصول إلى الصور والوسائط والملفات على جهازك" + "‏هل تريد السماح لتطبيق <b>%1$s</b> بالدخول إلى الصور والوسائط والملفات على جهازك؟" "الميكروفون" "تسجيل الصوت" - "‏السماح لتطبيق <b>%1$s</b> بتسجيل الصوت" + "‏هل تريد السماح لتطبيق <b>%1$s</b> بتسجيل الصوت؟" "الكاميرا" "التقاط صور وتسجيل فيديو" - "‏السماح لتطبيق <b>%1$s</b> بالتقاط الصور وتسجيل الفيديو" + "‏هل تريد السماح لتطبيق <b>%1$s</b> بالتقاط الصور وتسجيل الفيديو؟" "الهاتف" "إجراء مكالمات هاتفية وإدارتها" - "‏السماح لتطبيق <b>%1$s</b> بإجراء المكالمات الهاتفية وإدارتها" + "‏هل تريد السماح لتطبيق <b>%1$s</b> بإجراء المكالمات الهاتفية وإدارتها؟" "أجهزة استشعار الجسم" "الوصول إلى بيانات المستشعر حول علاماتك الحيوية" - "‏السماح لتطبيق <b>%1$s</b> بالوصول إلى بيانات المستشعر حول علاماتك الحيوية" + "‏هل تريد السماح لتطبيق <b>%1$s</b> بالدخول إلى بيانات المستشعر حول علاماتك الحيوية؟" "استرداد محتوى النافذة" "فحص محتوى نافذة يتم التفاعل معها." "تشغيل الاستكشاف باللمس" @@ -317,7 +320,7 @@ "تنفيذ إيماءات" "يمكن النقر والتمرير بسرعة والتصغير وتنفيذ إيماءات أخرى." "إيماءات بصمات الإصبع" - "يمكن أن تلتقط الإيماءات التي تم تنفيذها على مستشعر بصمات الإصبع في الأجهزة." + "يمكن أن تلتقط الإيماءات التي تم تنفيذها على مستشعر بصمات الإصبع في الجهاز." "تعطيل شريط الحالة أو تعديله" "للسماح للتطبيق بتعطيل شريط الحالة أو إضافة رموز نظام وإزالتها." "العمل كشريط للحالة" @@ -368,6 +371,8 @@ "للسماح للتطبيق بجعل أجزاء منه ثابتة في الذاكرة. وقد يؤدي هذا إلى تقييد الذاكرة المتاحة للتطبيقات الأخرى مما يؤدي إلى حدوث بطء في الجهاز اللوحي." "يتيح للتطبيق تعيين أجزاء من التطبيق نفسه لتظل ثابتة في الذاكرة. وقد يقيد هذا من الذاكرة المتاحة للتطبيقات الأخرى، مما يؤدي إلى بطء في التلفزيون." "للسماح للتطبيق بجعل أجزاء منه ثابتة في الذاكرة. وقد يؤدي هذا إلى تقييد الذاكرة المتاحة للتطبيقات الأخرى مما يؤدي إلى حدوث بطء في الهاتف." + "تشغيل الخدمة في المقدمة" + "للسماح للتطبيق بالاستفادة من الخدمات التي تعمل في المقدمة." "قياس مساحة تخزين التطبيق" "للسماح للتطبيق باسترداد شفرته وبياناته وأحجام ذاكرات التخزين المؤقت" "تعديل إعدادات النظام" @@ -490,6 +495,8 @@ "‏للسماح للتطبيق بالاتصال بعلامات الاتصال قريب المدى (NFC)، والبطاقات وبرامج القراءة." "تعطيل قفل الشاشة" "للسماح للتطبيق بتعطيل تأمين المفاتيح وأي أمان لكلمة مرور مرتبطة. على سبيل المثال، يعطل الهاتف تأمين المفاتيح عند استقبال مكالمة هاتفية واردة، ثم يعيد تمكين تأمين المفاتيح عند انتهاء المكالمة." + "استخدام الأجهزة البيومترية" + "للسماح للتطبيق باستخدام الأجهزة البيومترية للمصادقة" "لإدارة أجهزة بصمة الإصبع" "للسماح للتطبيق باستدعاء طرق لإضافة نماذج من بصمات الأصابع وحذفها." "لاستخدام أجهزة بصمة الإصبع" @@ -502,6 +509,7 @@ "لم يتم التعرف عليها" + "تم مصادقة بصمة الإصبع" "جهاز بصمة الإصبع غير متاح." "يتعذر تخزين بصمة الإصبع؛ يرجى إزالة إحدى البصمات المخزنة." "تم بلوغ مهلة إدخال بصمة الإصبع. أعد المحاولة." @@ -814,6 +822,8 @@ "إلغاء القفل باستخدام النقش." "تأمين الجهاز بالوجه." "‏إلغاء القفل باستخدام رمز PIN." + "‏إلغاء قفل رقم التعريف الشخصي لشريحة SIM." + "‏إلغاء قفل مفتاح PUK لشريحة SIM." "إلغاء القفل باستخدام كلمة المرور." "منطقة النقش." "منطقة التمرير." @@ -875,6 +885,12 @@ "تم نسخ النص إلى الحافظة." "المزيد" "القائمة+" + "Meta+" + "Ctrl+" + "Alt+" + "Shift+" + "Sym+" + "Function+" "مسافة" "enter" "حذف" @@ -1074,14 +1090,23 @@ "طريقة الإرسال" "إجراءات النص" "بريد إلكتروني" + "مراسلة العنوان المختار عبر البريد الإلكتروني" "اتصال" + "الاتصال برقم الهاتف المختار" "تحديد الموقع" + "تحديد موقع العنوان المختار" "فتح" + "‏فتح عنوان URL المختار" "رسالة" + "مراسلة رقم الهاتف المختار" "إضافة" + "إضافة إلى جهات الاتصال" "عرض" + "عرض الوقت المختار في التقويم" "تحديد موعد حدث" + "جدولة الحدث في الوقت المختار" "تتبّع" + "تتبُّع الرحلة الجوية المختارة" "مساحة التخزين منخفضة" "قد لا تعمل بعض وظائف النظام" "ليست هناك سعة تخزينية كافية للنظام. تأكد من أنه لديك مساحة خالية تبلغ ٢٥٠ ميغابايت وأعد التشغيل." @@ -1154,31 +1179,28 @@ "البحث عن تحديث" "‏انتهك التطبيق %1$s (العملية %2$s) سياسة StrictMode المفروضة ذاتيًا." "‏انتهكت العملية %1$s سياسة StrictMode المفروضة ذاتيًا." - "‏جارٍ ترقية Android..." - "‏جارٍ تشغيل Android…" + "جارٍ تحديث الهاتف…" + "جارٍ تحديث الجهاز اللوحي…" + "جارٍ تحديث الجهاز…" + "جارٍ بدء تشغيل الهاتف…" + "جارٍ بدء تشغيل الجهاز اللوحي…" + "جارٍ بدء تشغيل الجهاز…" "جارٍ تحسين السعة التخزينية." - "‏جارٍ إتمام تحديث Android…" - "قد لا تعمل بعض التطبيقات بشكل مناسب إلا بعد انتهاء الترقية" + "جارٍ إنهاء تحديث النظام…" "جارٍ ترقية %1$s…" "جارٍ تحسين التطبيق %1$d من %2$d." "جارٍ تحضير %1$s." "بدء التطبيقات." "جارٍ إعادة التشغيل." "%1$s يعمل" - - - - - - - - - - - - + "انقر للعودة إلى اللعبة" + "اختيار اللعبة" + "للحصول على أداء أفضل، يمكن فتح لعبة واحدة فقط من هذه الألعاب في كل مرة." + "الرجوع إلى %1$s" + "فتح %1$s" + "سيتم إغلاق %1$s من دون حفظ" "لقد تجاوزت %1$s حد الذاكرة." - "تم نسخ الذاكرة، انقر للمشاركة." + "تم جمع مقدار كبير من بيانات الذاكرة. انقر للمشاركة." "هل تريد مشاركة نَسْخ الذاكرة؟" "تجاوزت عملية %1$s حد الذاكرة المخصص لها وقدره %2$s، ويتوفر نَسْخ للذاكرة لمشاركته مع مطور برامج العملية ولكن توخ الحذر حيث قد يحتوي نَسْخ الذاكرة هذا على معلومات شخصية يملك التطبيق حق الوصول إليها." "اختيار إجراء للنص" @@ -1221,12 +1243,12 @@ "‏الاتصال بشبكة Wi-Fi المفتوحة" "‏الاتصال بشبكة Wi‑Fi لمشغِّل شبكة الجوّال" - "‏جارٍ الاتصال بشبكة Wi-Fi المفتوحة" + "‏جارٍ الاتصال بشبكة Wi-Fi" "‏تم الاتصال بشبكة Wi-Fi" "‏تعذَّر الاتصال بشبكة Wi‑Fi" "انقر للاطلاع على جميع الشبكات" "اتصال" - "جميع الشبكات" + "جميع الشبكات" "‏سيتم تشغيل شبكة Wi-Fi تلقائيًا." "عندما تكون بالقرب من شبكة محفوظة عالية الجودة" "عدم إعادة التشغيل" @@ -1292,6 +1314,7 @@ "إعادة التشغيل" "تفعيل خدمة الجوّال" "‏تنزيل تطبيق مشغل شبكة الجوّال لتفعيل شريحة SIM الجديدة" + "‏تنزيل تطبيق %1$s لتفعيل شريحة SIM الجديدة" "تنزيل التطبيق" "‏تم إدخال شريحة SIM جديدة." "انقر لإعداده." @@ -1310,13 +1333,13 @@ "‏تمّ تفعيل PTP عبر USB" "‏تمّ تفعيل التوصيل عبر USB" "‏تمّ تفعيل MIDI عبر USB" - "‏تمّ تفعيل وضع ملحق USB" + "‏تم توصيل ملحق USB." "انقر للحصول على المزيد من الخيارات." "جارٍ شحن الجهاز المتصل. انقر لعرض خيارات أكثر." "تم اكتشاف ملحق صوتي تناظري" "الجهاز الذي تم توصيله بالهاتف غير متوافق معه. انقر للحصول على المزيد من المعلومات." "‏تم توصيل تصحيح أخطاء USB" - "‏انقر لتعطيل تصحيح أخطاء USB." + "‏انقر لإيقاف تصحيح أخطاء USB." "‏اختيار تعطيل تصحيح أخطاء USB." "جارٍ الحصول على تقرير الخطأ…" "هل تريد مشاركة تقرير الخطأ؟" @@ -1335,34 +1358,35 @@ "جارٍ عرض %s فوق تطبيقات أخرى" "يتم عرض %s فوق التطبيقات الأخرى." "إذا كنت لا تريد أن يستخدم %s هذه الميزة، فانقر لفتح الإعدادات، ثم اختر تعطيلها." - "إيقاف" - "جارٍ تحضير %s" - "جارٍ التحقق من الأخطاء" - "تم اكتشاف %s جديدة" + "إيقاف" + "جارٍ التحقق من %s…" + "جارٍ مراجعة المحتوى الحالي" + "%s جديدة" + "انقر للإعداد." "لنقل الصور والوسائط" - "أصاب %s التلف" - "%s تالف. انقر لإصلاحه." + "هناك مشكلة في %s." + "انقر للإصلاح" "%s تالف، ويمكنك اختيار إصلاحه." "%s غير متوافق" "هذا الجهاز غير متوافق مع %s هذا. انقر للإعداد بتنسيق متوافق." "لا يتوافق هذا الجهاز مع %s. يمكنك النقر للإعداد بتنسيق متوافق." "تمت إزالة %s بشكل غير متوقع" - "إلغاء تحميل %s قبل الإزالة لتجنب فقد البيانات" - "تمت إزالة %s" - "تمت إزالة %s؛ أدخل واحدة جديدة" - "لا يزال إخراج %s جاريًا…" - "لا تزِلها" + "إخراج الوسائط قبل الإزالة لتجنّب فقدان المحتوى" + "تمت إزالة %s." + "قد لا تعمل بعض الوظائف بشكل صحيح. أدخل وحدة تخزين جديدة." + "جارٍ إخراج %s" + "عدم الإزالة" "إعداد" "إلغاء" "استكشاف" "%s مفقود" - "أعد إدخال هذا الجهاز" + "إدخال الجهاز مرة أخرى" "جارٍ نقل %s" "جارٍ نقل البيانات" - "اكتمل النقل" - "تم نقل البيانات إلى %s" - "تعذر نقل البيانات" - "تم ترك البيانات في الموقع الأصلي" + "تم نقل المحتوى" + "تم نقل المحتوى إلى %s" + "تعذّر نقل المحتوى" + "جرّب نقل المحتوى مرة أخرى" "تم الإخراج" "تم إنهاء التحميل" "جارٍ التحقق…" @@ -1421,14 +1445,14 @@ "‏جارٍ الاتصال بشبكة افتراضية خاصة (VPN) دائمة التشغيل..." "‏تم الاتصال بشبكة افتراضية خاصة (VPN) دائمة التشغيل" "‏تم قطع الاتصال بالشبكة الافتراضية الخاصة (VPN) التي يتم تشغيلها دائمًا" - "‏خطأ بشبكة افتراضية خاصة (VPN) دائمة التشغيل" + "‏تعذّر الاتصال بشبكة VPN التي يتم تشغيلها دائمًا." "‏تغيير إعدادات الشبكة أو الشبكة الافتراضية الخاصة (VPN)" "اختيار ملف" "لم يتم اختيار أي ملف" "إعادة تعيين" "إرسال" - "تم تمكين وضع السيارة" - "انقر للخروج من وضع السيارة." + "تطبيق القيادة قيد التشغيل" + "انقر للخروج من تطبيق القيادة." "النطاق أو نقطة الاتصال نشطة" "انقر للإعداد." "تم تعطيل التوصيل" @@ -1510,22 +1534,19 @@ "‏محرك أقراص USB من %s" "‏وحدة تخزين USB" "تعديل" - "تنبيه استخدام البيانات" - "انقر لعرض الاستخدام والإعدادات." - "‏تم بلوغ حد بيانات اتصال 2G-3G" - "‏تم بلوغ حد بيانات اتصال 4G" + "تحذيرات البيانات" + "لقد استخدمت %s من البيانات." "تم بلوغ حد بيانات الجوّال" "‏تم بلوغ حد بيانات Wi-Fi" - "توقفت البيانات مؤقتًا لاستكمال الدورة" - "‏تم تجاوز حد بيانات شبكات 2G-3G" - "‏تم تجاوز حد بيانات 4G" - "تم تجاوز حد بيانات الجوّال" - "‏تم تجاوز حد بيانات شبكة Wi-Fi" - "%s فوق الحد المعين." + "تم إيقاف البيانات مؤقتًا لبقية الدورة" + "تم تجاوز أقصى حد لبيانات الجوّال" + "‏تم تجاوز أقصى حد لبيانات Wi-Fi" + "تم تجاوز الحد الأقصى المسموح به الذي عيَّنته بمقدار %s." "تم تقييد بيانات الخلفية" "انقر لإزالة القيد." - "معدل مرتفع لاستخدام البيانات" - "لقد تجاوز استخدامك للبيانات خلال الأيام القليلة الماضية المعدل المعتاد. انقر لعرض البيانات عن الاستخدام والإعدادات." + "استخدام مرتفع لبيانات الجوّال" + "استخدمت تطبيقاتك بيانات أكثر من المعتاد" + "استخدمَ تطبيق %s بيانات أكثر من المعتاد" "شهادة الأمان" "هذه الشهادة صالحة." "إصدار لـ:" @@ -1769,7 +1790,7 @@ "تم التثبيت بواسطة المشرف" "تم التحديث بواسطة المشرف" "تم الحذف بواسطة المشرف" - "للمساعدة في تحسين عمر البطارية، تساعد ميزة توفير شحن البطارية في تقليل أداء الجهاز والحد من الاهتزاز وخدمات المواقع الجغرافي ومعظم بيانات الخلفية. وقد لا يتم تحديث البريد الإلكتروني والمراسلة والتطبيقات الأخرى التي تعتمد على المزامنة ما لم يتم فتحها.\n\nيتم إيقاف ميزة توفير شحن البطارية تلقائيًا عند شحن الجهاز." + "لإطالة عمر البطارية، تعمل ميزة \"توفير شحن البطارية\" على تقليل أداء الجهاز والحد من استخدام الاهتزاز وخدمات الموقع الجغرافي وبيانات الخلفية أو إيقافه. وقد لا يتم تحديث البريد الإلكتروني والمراسلة والتطبيقات الأخرى التي تعتمد على المزامنة ما لم يتم فتحها.\n\nيتم إيقاف ميزة \"توفير شحن البطارية\" تلقائيًا عند شحن الجهاز." "للمساعدة في خفض استخدام البيانات، يمنع توفير البيانات بعض التطبيقات من إرسال البيانات وتلقيها في الخلفية. يمكن للتطبيق الذي تستخدمه الآن الوصول إلى البيانات، ولكن لا يمكنه تنفيذ ذلك كثيرًا. وهذا يعني أن الصور على سبيل المثال لا تظهر حتى تنقر عليها." "هل تريد تشغيل توفير البيانات؟" "تشغيل" @@ -1789,12 +1810,12 @@ ‏لمدة %1$d من الدقائق (حتى %2$s) لمدة دقيقة (حتى %2$s) - - ‏لمدة أقل من ساعة (%1$d) (حتى %2$s) + + ‏لمدة %1$d ساعة (حتى %2$s) ‏لمدة ساعتين (%1$d) (حتى %2$s) ‏لمدة %1$d ساعات (حتى %2$s) - ‏لمدة %1$d ساعة (حتى %2$s) - ‏لمدة %1$d من الساعات (حتى %2$s) + ‏لمدة %1$d ساعة (حتى %2$s) + ‏لمدة %1$d ساعة (حتى %2$s) لمدة ساعة واحدة (حتى %2$s) @@ -1821,12 +1842,12 @@ ‏لمدة %d من الدقائق لمدة دقيقة - - ‏لمدة أقل من ساعة (%d) + + ‏لمدة %d ساعة ‏لمدة ساعتين (%d) ‏لمدة %d ساعات ‏لمدة %d ساعة - ‏لمدة %d من الساعات + ‏لمدة %d ساعة لمدة ساعة واحدة @@ -1852,14 +1873,14 @@ "تم كتم الصوت بواسطة %1$s" "حدثت مشكلة داخلية في جهازك، وقد لا يستقر وضعه حتى إجراء إعادة الضبط بحسب بيانات المصنع." "حدثت مشكلة داخلية في جهازك. يمكنك الاتصال بالمصنِّع للحصول على تفاصيل." - "‏يتم تعديل طلب USSD لطلب الاتصال." - "‏يتم تعديل طلب USSD إلى طلب SS." - "‏يتم تعديل طلب USSD إلى طلب USSD الجديد." - "‏تم تعديل طلب USSD إلى طلب Video DIAL." - "‏يتم تعديل الطلب SS لطلب الاتصال." - "‏تم تعديل طلب SS إلى طلب Video DIAL." - "‏يتم تعديل طلب SS إلى طلب USSD." - "‏يتم تعديل طلب SS إلى طلب SS الجديد." + "‏تم تغيير طلب USSD إلى مكالمة عادية." + "‏تم تغيير طلب USSD إلى طلب SS." + "‏تم التغيير إلى طلب USSD الجديد." + "‏تم تغيير طلب USSD إلى مكالمة فيديو." + "‏تم تغيير طلب SS إلى مكالمة عادية." + "‏تم تغيير طلب SS إلى مكالمة فيديو." + "‏تم تغيير طلب SS إلى طلب USSD." + "‏تم التغيير إلى طلب SS الجديد." "الملف الشخصي للعمل" "توسيع" "تصغير" @@ -1965,6 +1986,10 @@ "‏لم يتم توفير SIM للصوت" "‏غير مسموح باستخدام SIM للصوت" "غير مسموح باستخدام الهاتف للصوت" + "‏غير مسموح بشريحة SIM %d" + "‏لم يتم توفير شريحة SIM %d" + "‏غير مسموح بشريحة SIM %d" + "‏غير مسموح بشريحة SIM %d" "نافذة منبثقة" "+ %1$d" "إصدار التطبيق أقدم من إصداره على الجهاز الآخر أو أنه ليس متوافقًا مع هذا الاختصار." @@ -1977,7 +2002,14 @@ "تم العثور على تطبيق ضار" "يريد تطبيق %1$s عرض شرائح تطبيق %2$s." "تعديل" + "سيهتز الهاتف عند تلقي المكالمات والإشعارات" + "سيتم كتم صوت الهاتف عند تلقي المكالمات والإشعارات" "تغييرات النظام" + "الرجاء عدم الإزعاج" + "يؤدي تفعيل وضع \"الرجاء عدم الإزعاج\" إلى إخفاء الإشعارات لمساعدتك على التركيز." + "هذا السلوك جديد. انقر لتغييره." "تم تغيير وضع \"الرجاء عدم الإزعاج\"." - "انقر للتأكد من عدم وجود انقطاع في إعدادات السلوك." + "انقر للاطّلاع على ما تم حظره." + "النظام" + "الإعدادات" diff --git a/core/res/res/values-as-watch/strings.xml b/core/res/res/values-as-watch/strings.xml index 1c91d10ac22a94cad56a21474603ba1d535e2dd7..a3498c08e47de0eede25c2e1aa3e56586e9b9086 100644 --- a/core/res/res/values-as-watch/strings.xml +++ b/core/res/res/values-as-watch/strings.xml @@ -20,7 +20,6 @@ - - + "%2$dটা এপৰ ভিতৰত %1$dটা" "ছেন্সৰসমূহ" diff --git a/core/res/res/values-as/strings.xml b/core/res/res/values-as/strings.xml index 5ab2fa64a840ede4a8557a7d73a407895c993ce1..90f9822dc54f11174c3b2f92b1b6eebd78c4a975 100644 --- a/core/res/res/values-as/strings.xml +++ b/core/res/res/values-as/strings.xml @@ -77,15 +77,17 @@ "কলাৰ আইডি সীমিত নকৰিবলৈ পূর্বনির্ধাৰণ কৰা হৈছে। পৰৱৰ্তী কল: সীমিত কৰা হোৱা নাই" "সুবিধা যোগান ধৰা হোৱা নাই।" "আপুনি কলাৰ আইডি ছেটিং সলনি কৰিব নোৱাৰে।" - "কোনো ডেটা সেৱা নাই" - "জৰুৰীকালীন কল অৱৰোধিত কৰা হৈছে" + "কোনো ম\'বাইল ডেটা সেৱা নাই" + "জৰুৰীকালীন কল কৰাৰ সুবিধা উপলব্ধ নহয়" "কোনো ভইচ সেৱা নাই" - "কোনো ভইচ/জৰুৰীকালীন সেৱা নাই" - "আপোনাৰ এলেকাত সাময়িকভাৱে ম\'বাইল নেটৱৰ্কটোৱে যোগান ধৰা নাই" - "নেটৱর্ক পাব পৰা নাই" - "বেতাঁৰ সম্প্ৰচাৰ লাভৰ মান উন্নত কৰিবলৈ, ছেটিংসমূহ > নেটৱৰ্ক আৰু ইণ্টাৰনেট > ম\'বাইল নেটৱৰ্কসমূহ > পচন্দৰ নেটৱৰ্কৰ প্ৰকাৰ-লৈ গৈ বাছনি কৰি থোৱা নেটৱৰ্কৰ প্ৰকাৰটো সলনি কৰি চাওক।" - "ৱাই-ফাই কলিং সক্ৰিয় হৈ আছে" - "জৰুৰীকালীন কল কৰিবলৈ নেটৱৰ্কৰ প্ৰয়োজন।" + "ধ্বনি সেৱা বা জৰুৰীকালীন কলৰ সেৱা উপলব্ধ নহয়" + "আপোনাৰ বাহকে সাময়িকভাৱে অফ কৰি থৈছে" + + + "ম\'বাইল নেটৱৰ্কৰ লগত সংযোগ কৰিব পৰা নাই" + "পচন্দৰ নেটৱৰ্ক সলনি কৰি চেষ্টা কৰি চাওক। সলনি কৰিবলৈ টিপক।" + "জৰুৰীকালীন কল কৰাৰ সুবিধা উপলব্ধ নহয়" + "ৱাই-ফাইৰ জৰিয়তে জৰুৰীকালীন কল কৰিব নোৱাৰি" "সতৰ্কবাণীসমূহ" "কল ফৰৱাৰ্ডিং" "জৰুৰীকালীন ক\'লবেক ম\'ড" @@ -93,8 +95,7 @@ "এছএমএছ বার্তাবোৰ" "ভইচমেইলৰ বাৰ্তাসমূহ" "ৱাই-ফাই কলিং" - - + "ছিমৰ স্থিতি" "নেটৱৰ্ক পীয়েৰে TTY ম\'ড FULLলৈ সলনি কৰিবলৈ অনুৰোধ কৰিছে" "নেটৱৰ্ক পীয়েৰে TTY ম\'ড HCOলৈ সলনি কৰিবলৈ অনুৰোধ কৰিছে" "নেটৱৰ্ক পীয়েৰে TTY ম\'ড VCO লৈ সলনি কৰিবলৈ অনুৰোধ কৰিছে" @@ -121,25 +122,21 @@ "ৰ\'মিঙৰ বেনাৰ অন অৱস্থাত আছে" "ৰ\'মিঙৰ বেনাৰ অফ অৱস্থাত আছে" "সেৱাৰ বাবে অনুসন্ধান কৰি থকা হৈছে" - - + "ৱাই-ফাই কলিং ছেট আপ কৰিব পৰা নগ\'ল" "ৱাই-ফাইৰ জৰিয়তে কল কৰিবলৈ আৰু বাৰ্তা পঠাবলৈ, প্ৰথমে আপোনাৰ বাহকক আপোনাৰ ডিভাইচটো ছেট আপ কৰিব দিবলৈ কওক। তাৰ পিচত, ছেটিংসমূহলৈ গৈ আকৌ ৱাই-ফাই কলিং অন কৰক। (ত্ৰুটি ক\'ড: %1$s)" - "আপোনাৰ বাহকৰ ওচৰত পঞ্জীয়ন কৰক (ত্ৰুটি ক\'ড: %1$s)" + "আপোনাৰ বাহকৰ ওচৰত ৱাই-ফাই কলিং সুবিধা পঞ্জীয়ন কৰাত সমস্যাৰ উদ্ভৱ হৈছে: %1$s" "%s" "%s ৱাই- ফাই কলিং" - - - - + "বন্ধ হৈ আছে" + "ৱাই-ফাইক অগ্ৰাধিকাৰ দিয়া হৈছে" "ম\'বাইলক অগ্ৰাধিকাৰ দিয়া হৈছে" - - + "কোৱল ৱাই-ফাই" "{0}: ফৰৱাৰ্ড কৰা নহ\'ল" "{0}: {1}" "{0}: {1} {2} ছেকেণ্ডৰ পাছত" @@ -165,8 +162,8 @@ "বহুত বেছি অনুৰোধৰ প্ৰক্ৰিয়া চলি আছে৷ অনুগ্ৰহ কৰি পিছত আকৌ চেষ্টা কৰক৷" "%1$sত ছাইন ইন কৰাত আসোঁৱাহ" "ছিংক ত্ৰুটি" - "ছিংক ত্ৰুটি" - "বহুতো %s একেলগে মচা হৈছে।" + "ছিংক কৰিব নোৱাৰি" + "একেলগে বহুত %s মচিবলৈ চেষ্টা কৰা হৈছে" "টেবলেটৰ সঞ্চয়াগাৰত খালী ঠাই নাই। ঠাই খালী কৰিবলৈ কিছুমান ফাইল মচক।" "ঘড়ীৰ সঞ্চয়াগাৰ ভৰি পৰিছে। খালী স্থান উলিয়াবলৈ কিছুমান ফাইল মচক।" "টিভিৰ সঞ্চয়াগাৰ ভৰি পৰিছে। খালী ঠাই উলিয়াবলৈ কিছুমান ফাইল মচক।" @@ -186,10 +183,8 @@ "পৰিচালিত ডিভাইচ" "আপোনাৰ প্ৰতিষ্ঠানটোৱে এই ডিভাইচটো পৰিচালনা কৰে আৰু ই নেটৱৰ্কৰ ট্ৰেফিক পৰ্যবেক্ষণ কৰিব পাৰে। সবিশেষ জানিবলৈ টিপক।" "আপোনাৰ ডিভাইচৰ ডেটা মচা হ\'ব" - - - - + "এই প্ৰশাসক এপটো ব্যৱহাৰ কৰিব নোৱাৰি। এতিয়া আপোনাৰ ডিভাইচটোৰ ডেটা মচা হ\'ব।\n\nআপোনাৰ কিবা প্ৰশ্ন থাকিলে আপোনাৰ প্ৰতিষ্ঠানৰ প্ৰশাসকৰ সৈতে যোগাযোগ কৰক।" + "প্ৰিণ্ট কৰা কাৰ্য %sএ অক্ষম কৰি ৰাখিছে।" "মই" "টে\'বলেটৰ বিকল্পসমূহ" "টিভিৰ বিকল্পসমূহ" @@ -207,8 +202,7 @@ "পেকেজ আপডেট কৰা প্ৰক্ৰিয়া চলি আছে…" "ৰিষ্টাৰ্ট কৰা হৈছে…" "ফেক্টৰী ডেটা ৰিছেট কৰক" - - + "ৰিষ্টার্ট হৈ আছে…" "বন্ধ কৰি থকা হৈছে…" "আপোনাৰ টে\'বলেটটো বন্ধ হ\'ব।" "আপোনাৰ টিভি বন্ধ কৰা হ\'ব৷" @@ -227,8 +221,7 @@ "জৰুৰীকালীন কল" "বাগ সম্পর্কীয় অভিযোগ" "ছেশ্বন সমাপ্ত কৰক" - - + "স্ক্ৰীণশ্বট" "বাগ সম্পর্কীয় অভিযোগ লওক" "এই কার্যই ইমেইল বাৰ্তা হিচাপে পঠিয়াবলৈ আপোনাৰ ডিভাইচৰ বৰ্তমান অৱস্থাৰ বিষয়ে তথ্য সংগ্ৰহ কৰিব৷ ইয়াক বাগ সম্পর্কীয় অভিযোগ পঠিওৱা কাৰ্য আৰম্ভ কৰোঁতে অলপ সময় লাগিব; অনুগ্ৰহ কৰি ধৈৰ্য ধৰক।" "ইণ্টাৰেক্টিভ অভিযোগ" @@ -245,19 +238,13 @@ "এয়াৰপ্লেইন ম\'ড" "এয়াৰপ্লেইন ম\'ড অন কৰা আছে" "এয়াৰপ্লেইন ম\'ড অফ কৰা আছে" - - - - - - + "বেটাৰি সঞ্চয়কাৰী" + "বেটাৰি সঞ্চয়কাৰী অফ হৈ আছে" + "বেটাৰি সঞ্চয়কাৰী অন হৈ আছে" "ছেটিংসমূহ" - - - - - - + "সহায়" + "কণ্ঠধ্বনিৰে সহায়" + "লকডাউন" "৯৯৯+" "নতুন জাননী" "ভাৰ্শ্বুৱল কীব\'ৰ্ড" @@ -283,46 +270,35 @@ "%1$s, %2$s" "সুৰক্ষিত ম\'ড" "Android ছিষ্টেম" - - - - - - - - - "<b>%1$s</b>ক আপোনাৰ সম্পৰ্কসূচী চাবলৈ অনুমতি দিয়ক" - - + "ব্যক্তিগত প্ৰ\'ফাইললৈ সলনি কৰক" + "কৰ্মস্থানৰ প্ৰ’ফাইললৈ সলনি কৰক" + "সম্পর্কসূচী" + "আপোনাৰ সম্পৰ্কসূচী চাব পাৰে" + "<b>%1$s</b>ক আপোনাৰ সম্পৰ্কসূচী চাবলৈ অনুমতি দিবনে?" + "অৱস্থান" "এই ডিভাইচৰ অৱস্থান ব্যৱহাৰ কৰিব পাৰে" - "<b>%1$s</b>ক ডিভাইচৰ অৱস্থান জানিবলৈ অনুমতি দিয়ক" + "<b>%1$s</b>ক এই ডিভাইচটোৰ অৱস্থান জানিবলৈ অনুমতি দিবনে?" "কেলেণ্ডাৰ" - - - "<b>%1$s</b>ক আপোনাৰ কেলেণ্ডাৰ চাবলৈ অনুমতি দিয়ক" - - + "আপোনাৰ কেলেণ্ডাৰ ব্যৱহাৰ কৰিব পাৰে" + "<b>%1$s</b>ক আপোনাৰ কেলেণ্ডাৰ চাবলৈ অনুমতি দিবনে?" + "এছএমএছ" "এছএমএছ বার্তা পঠিয়াব আৰু চাব পাৰে" - "<b>%1$s</b>ক এছএমএছ বাৰ্তা পঠিয়াবলৈ আৰু চাবলৈ অনুমতি দিয়ক" + "<b>%1$s</b>ক এছএমএছ বাৰ্তা পঠিয়াবলৈ আৰু চাবলৈ অনুমতি দিবনে?" "সঞ্চয়াগাৰ" "আপোনাৰ ডিভাইচৰ ফট\', মিডিয়া আৰু ফাইলসমূহ ব্যৱহাৰ কৰিব পাৰে" - "<b>%1$s</b>ক আপোনাৰ ডিভাইচত থকা ফট\', মিডিয়া আৰু ফাইল চাবলৈ অনুমতি দিয়ক" + "<b>%1$s</b>ক আপোনাৰ ডিভাইচত থকা ফট\', মিডিয়া আৰু ফাইল চাবলৈ অনুমতি দিবনে?" "মাইক্ৰ\'ফ\'ন" - - - "<b>%1$s</b>ক অডিঅ\' ৰেকৰ্ড কৰিবলৈ অনুমতি দিয়ক" + "অডিঅ\' ৰেকর্ড কৰিব পাৰে" + "<b>%1$s</b>ক অডিঅ\' ৰেকৰ্ড কৰিবলৈ অনুমতি দিবনে?" "কেমেৰা" - - - "<b>%1$s</b>ক ছবি তুলিবলৈ আৰু ভিডিঅ\' ৰেকৰ্ড কৰিবলৈ অনুমতি দিয়ক" - - - - - "<b>%1$s</b>ক ফ\'ন কল কৰিবলৈ আৰু পৰিচালনা কৰিবলৈ অনুমতি দিয়ক" + "ফট\' তুলিব আৰু ভিডিঅ\' ৰেকৰ্ড কৰিব পাৰে" + "<b>%1$s</b>ক ছবি তুলিবলৈ আৰু ভিডিঅ\' ৰেকৰ্ড কৰিবলৈ অনুমতি দিবনে?" + "ফ’ন" + "ফ\'ন কল কৰিব আৰু পৰিচলনা কৰিব পাৰে" + "<b>%1$s</b>ক ফ\'ন কল কৰিবলৈ আৰু পৰিচালনা কৰিবলৈ অনুমতি দিবনে?" "শৰীৰৰ ছেন্সৰসমূহ" "আপোনাৰ দেহৰ গুৰুত্বপূৰ্ণ অংগসমূহৰ অৱস্থাৰ বিষয়ে ছেন্সৰৰ ডেটা লাভ কৰিব পাৰে" - "<b>%1$s</b>ক আপোনাৰ দেহৰ গুৰুত্বপূৰ্ণ অংগসমূহৰ অৱস্থাৰ বিষয়ে ছেন্সৰৰ ডেটা লাভ কৰিবলৈ অনুমতি দিয়ক" + "<b>%1$s</b>ক আপোনাৰ দেহৰ গুৰুত্বপূৰ্ণ অংগসমূহৰ অৱস্থাৰ বিষয়ে ছেন্সৰৰ ডেটা লাভ কৰিবলৈ অনুমতি দিবনে?" "ৱিণ্ড\' সমল বিচাৰি উলিয়াওক" "আপুনি যোগাযোগ কৰি থকা ৱিণ্ড\'খনৰ সমল পৰীক্ষা কৰক।" "স্পৰ্শৰদ্বাৰা অন্বেষণ কৰাৰ সুবিধা অন কৰক" @@ -334,8 +310,7 @@ "আঙুলিৰ স্পৰ্শেৰে নিৰ্দেশ কৰা কার্যসমূহ কৰক" "টেপ কৰা, ছোৱাইপ কৰা, পিঞ্চ কৰা আৰু আঙুলিৰ স্পৰ্শেৰে নিৰ্দেশ কৰা অন্যান্য কাৰ্যসমূহ কৰিব পাৰে।" "ফিংগাৰপ্ৰিণ্ট নিৰ্দেশসমূহ" - - + "ডিভাইচটোৰ ফিংগাৰপ্ৰিণ্ট ছেন্সৰত দিয়া নিৰ্দেশ বুজিব পাৰে।" "স্থিতি দণ্ড অক্ষম কৰক বা সলনি কৰক" "স্থিতি দণ্ড অক্ষম কৰিবলৈ বা ছিষ্টেম আইকন আঁতৰাবলৈ এপটোক অনুমতি দিয়ে।" "স্থিতি দণ্ড হ\'ব পাৰে" @@ -358,8 +333,7 @@ "আপোনাৰ ডিভাইচে লাভ কৰা চেল সম্প্ৰচাৰৰ বার্তাবোৰ পঢ়িবলৈ এপক অনুমতি দিয়ে। আপোনাক জৰুৰীকালীন পৰিস্থিতিবোৰত সর্তক কৰিবলৈ চেল সম্প্ৰচাৰৰ বার্তাবোৰ প্ৰেৰণ কৰা হয়। জৰুৰীকালীন চেল সম্প্ৰচাৰ লাভ কৰাৰ সময়ত আপোনাৰ ডিভাইচৰ কাৰ্যদক্ষতা বা কাৰ্যপ্ৰণালীত ক্ষতিকাৰক এপবোৰে হস্তক্ষেপ কৰিব পাৰে।" "আপুনি সদস্যভুক্ত হোৱা ফীডসমূহ পঢ়ক" "বৰ্তমান ছিংক কৰা ফীডৰ সবিশেষ লাভ কৰিবলৈ এপটোক অনুমতি দিয়ে।" - - + "এছএমএছ ৰ বার্তাবোৰ প্ৰেৰণ কৰিব আৰু চাব পাৰে" "এপটোক এছএমএছ বাৰ্তা পঠিয়াবলৈ অনুমতি দিয়ে৷ ইয়াৰ ফলত অপ্ৰত্যাশিত মাচুল ভৰিবলগা হ\'ব পাৰে৷ ক্ষতিকাৰক এপসমূহে আপোনাৰ অনুমতি নোলোৱাকৈয়ে বাৰ্তা পঠিয়াই আপোনাৰ পৰা মাচুল কাটিব পাৰে৷" "আপোনাৰ পাঠ বার্তাবোৰ পঢ়ক (এছএমএছ বা এমএমএছ)" "এই এপটোৱে আপোনাৰ টেবলেটটোত সংৰক্ষিত সকলো এছএমএছ (পাঠ) বাৰ্তা পঢ়িব পাৰে।" @@ -370,8 +344,7 @@ "চলি থকা এপসমূহ বিচাৰি উলিয়াওক" "এপটোক বৰ্তমানে আৰু শেহতীয়াভাৱে চলি থকা কাৰ্যসমূহৰ বিষয়ে তথ্য পুনৰুদ্ধাৰ কৰিবলৈ অনুমতি দিয়ে৷ এইটোৱে এপটোক ডিভাইচটোত কোনবোৰ এপ্লিকেশ্বন ব্যৱহাৰ হৈ আছে তাৰ বিষয়ে তথ্য বিচাৰি উলিয়াবলৈ অনুমতি দিব পাৰে৷" "প্ৰ\'ফাইল আৰু ডিভাইচৰ গৰাকীসকলক পৰিচালনা কৰিব পাৰে" - - + "প্ৰ\'ফাইলৰ গৰাকী আৰু ডিভাইচৰ গৰাকী ছেট কৰিবলৈ এপটোক অনুমতি দিয়ে।" "চলি থকা এপসমূহক পুনৰাই ক্ৰমবদ্ধ কৰক" "গতিবিধিক অগ্ৰভাগ আৰু নেপথ্যলৈ নিবলৈ এপক অনুমতি দিয়ে। এপে এই কার্য আপোনাৰ ইনপুট অবিহনেই কৰিব পাৰে।" "গাড়ীৰ ম\'ড সক্ষম কৰক" @@ -388,10 +361,8 @@ "মেম\'ৰিত নিজৰ বাবে প্ৰয়োজনীয় ঠাই পৃথক কৰিবলৈ এপক অনুমতি দিয়ে। এই কার্যই টেবলেটৰ কার্যক লেহেমীয়া কৰি অন্য এপবোৰৰ বাবে উপলব্ধ মেম\'ৰিক সীমাবদ্ধ কৰে।" "মেম\'ৰিত নিজৰ বাবে প্ৰয়োজনীয় ঠাই পৃথক কৰিবলৈ এপটোক অনুমতি দিয়ে। এই কার্যই অন্য এপবোৰৰ বাবে উপলব্ধ মেম\'ৰিক সীমাবদ্ধ কৰে যাৰ বাবে টিভিটো লেহেমীয়া হয়।" "মেম\'ৰিত নিজৰ বাবে প্ৰয়োজনীয় ঠাই পৃথক কৰিবলৈ এপক অনুমতি দিয়ে। এই কার্যই ফ\'নৰ কার্যক লেহেমীয়া কৰি অন্য এপবোৰৰ বাবে উপলব্ধ মেম\'ৰিক সীমাবদ্ধ কৰে।" - - - - + "অগ্ৰভূমিৰ সেৱা চলাব পাৰে" + "এপটোক অগ্ৰভূমি সেৱাসমূহ ব্যৱহাৰ কৰিবলৈ অনুমতি দিয়ে।" "এপৰ সঞ্চয়াগাৰৰ খালী ঠাই হিচাপ কৰক" "এপটোক ইয়াৰ ক\'ড, ডেটা আৰু কেশ্বৰ আকাৰ বিচাৰি উলিয়াবলৈ অনুমতি দিয়ে" "ছিষ্টেম ছেটিংসমূহ সংশোধন কৰক" @@ -454,10 +425,8 @@ "ডিভাইচত থকা ফ\'নৰ সুবিধাসমূহ ব্য়ৱহাৰ কৰিবলৈ এপটোক অনুমতি দিয়ে৷ এই অনুমতিয়ে কোনো কল সক্ৰিয় হৈ থাককেই বা নাথাকক আৰু দূৰবৰ্তী নম্বৰটো কলৰ দ্বাৰা সংযোজিত হওকেই বা নহওক এপটোক ফ\'ন নম্বৰ আৰু ডিভাইচৰ পৰিচয় নিৰ্ধাৰণ কৰিবলৈ অনুমতি দিয়ে৷" "ছিষ্টেমৰ জৰিয়তে কল কৰিব পাৰে" "কল কৰাৰ অভিজ্ঞতাক উন্নত কৰিবলৈ এপটোক ছিষ্টেমৰ জৰিয়তে কলসমূহ কৰিবলৈ দিয়ে।" - - - - + "অইন এটা এপত আৰম্ভ হোৱা কল এটা অব্যাহত ৰাখিব পাৰে" + "এপটোক এনে কল কৰিবলৈ দিয়ে যিটোৰ আৰম্ভণি অইন এটা এপত হৈছিল।" "ফ\'ন নম্বৰসমূহ পঢ়ে" "এপটোক ডিভাইচটোৰ ফ\'ন নম্বৰসমূহ চাবলৈ অনুমতি দিয়ে।" "টে\'বলেট সুপ্ত অৱস্থালৈ যোৱাত বাধা দিয়ক" @@ -516,49 +485,35 @@ "এপটোক নিয়েৰ ফিল্ড কমিউনিকেশ্বন (NFC) টেগ, কাৰ্ড আৰু ৰিডাৰসমূহৰ সৈতে যোগাযোগ কৰিবলৈ অনুমতি দিয়ে।" "আপোনাৰ স্ক্ৰীণ ল\'ক অক্ষম কৰক" "এপটোক কী ল\'ক আৰু জড়িত হোৱা যিকোনো পাছৱৰ্ডৰ সুৰক্ষা অক্ষম কৰিব দিয়ে৷ উদাহৰণ স্বৰূপে, কোনো অন্তৰ্গামী ফ\'ন কল উঠোৱাৰ সময়ত ফ\'নটোৱে কী-লকটো অক্ষম কৰে, তাৰপিছত কল শেষ হ\'লেই কী লকটো পুনৰ সক্ষম কৰে৷" - - - - - - - - - - - - - - - - - - + + + + + "ফিংগাৰপ্ৰিণ্ট হাৰ্ডৱেৰ পৰিচালনা কৰিব পাৰে" + "ফিংগাৰপ্ৰিণ্ট টেম্প্লেটসমূহ যোগ কৰা বা মচাৰ পদ্ধতিসমূহ কামত লগাবলৈ নিৰ্দেশ দিবলৈ এপটোক অনুমতি দিয়ে।" + "ফিংগাৰপ্ৰিণ্ট হাৰ্ডৱেৰ ব্যৱহাৰ কৰিব পাৰে" + "প্ৰমাণীকৰণৰ বাবে ফিংগাৰপ্ৰিণ্ট হাৰ্ডৱেৰ ব্য়ৱহাৰ কৰিবলৈ এপটোক অনুমতি দিয়ে" + "ফিংগাৰপ্ৰিণ্ট আংশিকভাৱে চিনাক্ত কৰা হৈছে। অনুগ্ৰহ কৰি আকৌ চেষ্টা কৰক৷" + "ফিগাৰপ্ৰিণ্টৰ প্ৰক্ৰিয়া সম্পাদন কৰিবপৰা নগ\'ল। অনুগ্ৰহ কৰি আকৌ চেষ্টা কৰক৷" + "ফিংগাৰপ্ৰিণ্ট ছেন্সৰটো লেতেৰা হৈ আছে। অনুগ্ৰহ কৰি পৰিষ্কাৰ কৰি আকৌ চেষ্টা কৰক।" + "আঙুলিৰ গতি অতি ক্ষিপ্ৰ আছিল। অনুগ্ৰহ কৰি আকৌ চেষ্টা কৰক৷" + "আঙুলিৰ গতি অতি মন্থৰ আছিল। অনুগ্ৰহ কৰি আকৌ চেষ্টা কৰক৷" - - - - - - - - - - - - - - + "চিনাক্ত কৰিবপৰা নগ\'ল" + + + "ফিংগাৰপ্ৰিণ্ট হাৰ্ডৱেৰ নাই।" + "ফিংগাৰপ্ৰিণ্ট সঞ্চয় কৰিব পৰা নগ\'ল। পূর্বে সঞ্চিত ফিংগাৰপ্ৰিণ্ট এটা আঁতৰাওক।" + "ফিংগাৰপ্ৰিণ্ট গ্ৰহণৰ সময়সীমা উকলি গৈছে। আকৌ চেষ্টা কৰক।" + "ফিংগাৰপ্ৰিণ্ট কাৰ্য বাতিল কৰা হ\'ল।" + "ব্যৱহাৰকাৰীয়ে ফিংগাৰপ্ৰিণ্ট ক্ৰিয়া বাতিল কৰিছে।" + "অত্যধিক ভুল প্ৰয়াস। কিছুসময়ৰ পাছত আকৌ চেষ্টা কৰক।" "অত্যধিক প্ৰয়াস। ফিংগাৰপ্ৰিণ্ট ছেন্সৰ অক্ষম কৰা হ\'ল।" - - - - - - - - + "আকৌ চেষ্টা কৰক।" + "কোনো ফিংগাৰপ্ৰিণ্ট যোগ কৰা নহ\'ল।" + "এই ডিভাইচটোত ফিংগাৰপ্ৰিণ্ট ছেন্সৰ নাই" + "%d আঙুলি" "ফিংগাৰপ্ৰিণ্ট আইকন" @@ -618,52 +573,35 @@ "এটা এপ্লিকেশ্বনক DRM প্ৰমাণপত্ৰ আঁতৰাবলৈ অনুমতি দিয়ে। সাধাৰণ এপসমূহৰ বাবে কেতিয়াও প্ৰয়োজন নহয়।" "বাহকৰ মেছেজিং সেৱাৰ লগত সংযোগ কৰে" "বাহক মেছেজিং সেৱাৰ উচ্চ স্তৰৰ ইণ্টাৰফেইচত সংযোগ কৰিবলৈ ধাৰকক অনুমতি দিয়ে। এয়া সাধাৰণ এপবোৰৰ বাবে কেতিয়াও প্ৰয়োজন নহয়।" - - - - - - - - + "বাহক সেৱাসমূহৰ সৈতে সংযুক্ত হ\'ব পাৰে" + "বাহক সেৱাৰ সৈতে সংযুক্ত হ\'বলৈ ধাৰকক অনুমতি দিয়ে। সাধাৰণ এপসমূহৰ বাবে সাধাৰণতে প্ৰয়োজন হ\'ব নালাগে।" + "অসুবিধা নিদিব চাব পাৰে" + "অসুবিধা নিদিবৰ কনফিগাৰেশ্বনক পঢ়িবলৈ আৰু সালসলনি কৰিবলৈ এপটোক অনুমতি দিয়ে।" "পাছৱর্ডৰ নিয়ম ছেট কৰক" - - + "স্ক্ৰীণ লক পাছৱৰ্ড আৰু পিনৰ দৈর্ঘ্য আৰু কি কি আখৰ ব্যৱহাৰ কৰিব পাৰে তাক নিয়ন্ত্ৰণ কৰক।" "স্ক্ৰীণ আনলক কৰা প্ৰয়াসবোৰ পৰ্যবেক্ষণ কৰিব পাৰে" "স্ক্ৰীণ আনলক কৰোতে লিখা অশুদ্ধ পাছৱৰ্ডৰ হিচাপ ৰাখক, আৰু যদিহে অত্যধিকবাৰ অশুদ্ধ পাছৱৰ্ড লিখা হয় তেন্তে টে\'বলেটটো লক কৰক বা টে\'বলেটটোৰ সকলো ডেটা মোহাৰক।" "স্ক্ৰীণ আনলক কৰোতে লিখা অশুদ্ধ পাছৱৰ্ডৰ হিচাপ ৰাখক, আৰু যদিহে অত্যধিকবাৰ অশুদ্ধ পাছৱৰ্ড লিখা হয় তেন্তে টিভিটো লক কৰক বা টিভিটোৰ সকলো ডেটা মোহাৰক।" "স্ক্ৰীণ আনলক কৰোতে লিখা অশুদ্ধ পাছৱৰ্ডৰ হিচাপ ৰাখক, আৰু যদিহে অত্যধিকবাৰ অশুদ্ধ পাছৱৰ্ড লিখা হয় তেন্তে ফ\'নটো লক কৰক বা ফ\'নটোৰ সকলো ডেটা মোহাৰক।" - - - - - - - - - - + "স্ক্ৰীণ আনলক কৰোতে লিখা অশুদ্ধ পাছৱৰ্ডৰ হিচাপ নিৰীক্ষণ কৰক আৰু যদিহে অত্যধিকবাৰ অশুদ্ধ পাছৱৰ্ড দিয়া হয় তেন্তে টে\'বলেটটো লক কৰক বা এই ব্যৱহাৰকাৰীৰ সকলো ডেটা মচক।" + "স্ক্ৰীণ আনলক কৰোতে দিয়া অশুদ্ধ পাছৱৰ্ডৰ সংখ্যা নিৰীক্ষণ কৰক আৰু যদিহে অত্যধিকবাৰ অশুদ্ধ পাছৱৰ্ড দিয়া হয় তেন্তে টিভিটো লক কৰক বা এই ব্যৱহাৰকাৰীৰ সকলো ডেটা মচক।" + "স্ক্ৰীণ আনলক কৰোতে দিয়া অশুদ্ধ পাছৱৰ্ডৰ হিচাপ নিৰীক্ষণ কৰক আৰু যদিহে অত্যধিকবাৰ অশুদ্ধ পাছৱৰ্ড দিয়া হয় তেন্তে ফ\'নটো লক কৰক বা এই ব্যৱহাৰকাৰীৰ সকলো ডেটা মচক।" + "স্ক্ৰীণ লক সলনি কৰক" + "স্ক্ৰীণ লক সলনি কৰক।" "স্ক্ৰীণখন লক কৰক" "স্ক্ৰীণ কেনেকৈ আৰু কেতিয়া ল\'ক হ\'ব লাগে সেয়া নিয়ন্ত্ৰণ কৰক।" "সকলো ডেটা মচক" "সতৰ্কবাণী প্ৰেৰণ নকৰাকৈয়ে ফেক্টৰী ডেটা ৰিছেট কৰি টেবলেটৰ ডেটা মচক।" "সতৰ্কবাণী প্ৰেৰণ নকৰাকৈয়ে ফেক্টৰী ডেটা ৰিছেট কৰি টিভিৰ ডেটা মোহাৰক।" "সতৰ্কবাণী প্ৰেৰণ নকৰাকৈয়ে ফেক্টৰী ডেটা ৰিছেট কৰি ফ\'নৰ ডেটা মচক।" - - - - - - - - + "ব্য়ৱহাৰকাৰীৰ তথ্য় মচক" + "এই টেবলেটটোত থকা এই ব্যৱহাৰকাৰীৰ তথ্য কোনো সর্তকবাণী নিদিয়াকৈ মচি পেলাওক।" + "এই টিভিটোত থকা এই ব্যৱহাৰকাৰীৰ তথ্য কোনো সর্তকবাণী নিদিয়াকৈ মচি পেলাওক।" + "এই ফ\'নটোত থকা এই ব্যৱহাৰকাৰীৰ তথ্য কোনো সর্তকবাণী নিদিয়াকৈ মচি পেলাওক।" "ডিভাইচৰ বাবে গ্ল\'বেল প্ৰক্সী ছেট কৰক" - - - - - - + "নীতি সক্ষম কৰি থোৱা অৱস্থাত ব্য়ৱহাৰ কৰিবৰ বাবে ডিভাইচৰ বাবে গ্ল\'বেল প্ৰক্সী ছেট কৰক। কেৱল ডিভাইচৰ গৰাকীয়েহে গ্ল\'বেল প্ৰক্সী ছেট কৰিব পাৰে।" + "স্ক্ৰীণ লক পাছৱৰ্ডৰ ম্যাদ ওকলাৰ দিন ছেট কৰক" + "স্ক্ৰীণ লকৰ পাছৱৰ্ড, পিন বা আর্হি কিমান ঘনাই সলনি কৰিব লাগিব তাক সলনি কৰক।" "সঞ্চয়াগাৰৰ এনক্ৰিপশ্বন ছেট কৰক" "সঞ্চয় কৰি ৰখা ডেটাক এনক্ৰিপ্ট কৰাৰ প্ৰয়োজন।" "কেমেৰাবোৰ অক্ষম কৰক" @@ -799,8 +737,7 @@ "আনলক কৰিবলৈ বা জৰুৰীকালীন কল কৰিবলৈ মেনু টিপক।" "আনলক কৰিবলৈ মেনু টিপক।" "আনলক কৰিবলৈ আর্হি আঁকক" - - + "জৰুৰীকালীন" "কললৈ উভতি যাওক" "শুদ্ধ!" "আকৌ চেষ্টা কৰক" @@ -878,10 +815,8 @@ "আৰ্হিৰদ্বাৰা আনলক।" "গৰাকীৰ মুখাৱয়বৰদ্বাৰা আনলক।" "পিনৰদ্বাৰা আনলক।" - - - - + "ছিম পিন আনলক।" + "ছিম পিইউকে আনলক।" "পাছৱৰ্ডৰদ্বাৰা আনলক।" "আৰ্হি ক্ষেত্ৰ।" "শ্লাইড ক্ষেত্ৰ।" @@ -906,8 +841,7 @@ "পৰামৰ্শ: জুম ইন আৰু আউট কৰিবলৈ দুবাৰ টিপক৷" "স্বয়ংপূৰ্তি" "স্বয়ংপূৰ্তি ছেট আপ কৰক" - - + "স্বয়ংপূৰ্তি" " " "$1$2$3" ", " @@ -944,6 +878,12 @@ "ক্লিপব\'র্ডলৈ বাৰ্তা প্ৰতিলিপি কৰা হ\'ল।" "অধিক" "মেনু+" + "মেটা+" + "Ctrl+" + "Alt+" + "শ্বিফ্ট+" + "Sym+" + "ফাংশ্বন+" "স্পেচ" "লিখক" "মচক" @@ -959,7 +899,10 @@ "%1$sএ স্পৰ্শৰ দ্বাৰা অন্বেষণ কৰিব বিচাৰে। যেতিয়া স্পৰ্শৰ দ্বাৰা অন্বেষণ কৰা সুবিধা অন কৰা থাকে তেতিয়া আপোনাৰ আঙুলিৰ তলত থকা বিৱৰণবোৰ শুনিব বা চাব পাৰে বা আঙুলিৰ ইংগিতৰ জৰিয়তে ফ\'ন ব্যৱহাৰ কৰিব পাৰে।" "১ মাহ আগত" "১ মাহতকৈও আগত" - + + যোৱা %d দিনত + যোৱা %d দিনত + "যোৱা মাহ" "পুৰণি" "%s তাৰিখে" @@ -1072,16 +1015,31 @@ "ইনপুট পদ্ধতি" "পাঠ বিষয়ক কাৰ্য" "ইমেইল" + + "কল কৰক" + + "অৱস্থান নিৰূপণ কৰক" + + "খোলক" + + "বাৰ্তা" + + "যোগ দিয়ক" - + + + "চাওক" + - + "সূচী" + - + "ট্ৰেক কৰক" + "সঞ্চয়াগাৰৰ খালী ঠাই শেষ হৈ আছে" "ছিষ্টেমৰ কিছুমান কাৰ্যকলাপে কাম নকৰিবও পাৰে" @@ -1155,47 +1113,30 @@ "আপডেট আছে নেকি চাওক" "এপটোৱে %1$s (প্ৰক্ৰিয়াটোৱে %2$s) নিজে বলবৎ কৰা StrictMode নীতি ভংগ কৰিলে।" "%1$s প্ৰক্ৰিয়াটোৱে নিজে বলৱৎ কৰা StrictMode নীতি ভংগ কৰিলে।" - - - - - - - - - - - - + "ফ\'নটো আপডেট হৈ আছে…" + "টেবলেটটো আপডেট হৈ আছে…" + "ডিভাইচটো আপডেট হৈ আছে…" + "ফ\'নটো আৰম্ভ হৈছে…" + "টেবলেটটো আৰম্ভ হৈছে…" + "ডিভাইচটো আৰম্ভ হৈছে…" "সঞ্চয়াগাৰ অপ্টিমাইজ কৰি থকা হৈছে।" - - + "ছিষ্টেম আপডেট সম্পূৰ্ণ কৰা হৈছে…" "%1$sক আপগ্ৰেড কৰি থকা হৈছে…" "%2$dৰ ভিতৰত %1$d এপ্ অপ্টিমাইজ কৰি থকা হৈছে৷" - - + "%1$sসাজু কৰি থকা হৈছে।" "আৰম্ভ হৈ থকা এপসমূহ।" "বুট কাৰ্য সমাপ্ত কৰিছে।" "%1$s চলি আছে" - - - - - - - - - - - - - - - "হীপ ডাম্প সংগ্ৰহ কৰা হ\'ল। শ্বেয়াৰ কৰিবলৈ টিপক" - - - - + "গেইমলৈ উভতি যাওক" + "গেইম বাছনি কৰক" + "উচ্চ কাৰ্যদক্ষতাৰ বাবে এই গেইমসমূহৰ মাত্ৰ এটাহে এবাৰত খুলিব পাৰি।" + "%1$sলৈ উভতি যাওক" + "%1$s খোলক" + "%1$s ছেভ নকৰাকৈ বন্ধ হ\'ব" + "%1$s মেম\'ৰিৰ সীমা অতিক্ৰম কৰিছে" + "হীপ ডাম্প সংগ্ৰহ কৰা হ\'ল। শ্বেয়াৰ কৰিবলৈ টিপক" + "হীপ ডাম্প শ্বেয়াৰ কৰিবনে?" + "এই %1$s প্ৰক্ৰিয়াটোৱে তাৰ মেম\'ৰিৰ সীমা %2$s অতিক্ৰম কৰিছে। ইয়াৰ বিকাশকৰ্তাৰ সৈতে আপুনি শ্বেয়াৰ কৰিবপৰাকৈ হীপ ডাম্প মজুত আছে। সাৱধান হ\'ব: এই হীপ ডাম্পত এপ্লিকেশ্বনটোৱে ব্যৱহাৰ কৰা আপোনাৰ কোনো ব্য়ক্তিগত তথ্য়ও থাকিব পাৰে।" "বার্তাৰ বাবে কাৰ্য বাছনি কৰক" "ৰিংগাৰৰ ধ্বনি" "মিডিয়াৰ ধ্বনি" @@ -1227,25 +1168,20 @@ পাছৱৰ্ড অবিহনে সংযোগ কৰিব পৰা ৱাই-ফাই নেটৱর্ক উপলব্ধ "পাছৱৰ্ড অবিহনে সংযোগ কৰিবপৰা ৱাই-ফাই নেটৱর্কৰ সৈতে সংযোগ কৰক" - - - "পাছৱৰ্ড অবিহনে সংযোগ কৰিবপৰা ৱাই-ফাই নেটৱর্কৰ সৈতে সংযোগ কৰি থকা হৈছে" + "বাহকৰ ৱাই-ফাই নেটৱৰ্কৰ সৈতে সংযোগ কৰক" + "ৱাই-ফাই নেটৱৰ্কৰ সৈতে সংযোগ কৰি থকা হৈছে" "ৱাই-ফাই নেটৱৰ্কৰ সৈতে সংযোগ কৰা হ\'ল" "ৱাই-ফাই নেটৱৰ্কৰ সৈতে সংযোগ কৰিবপৰা নগ\'ল" "সকলো নেটৱৰ্ক চাবলৈ টিপক" "সংযোগ কৰক" - - + "সকলো নেটৱৰ্ক" "ৱাই-ফাই স্বয়ংক্ৰিয়ভাৱে অন হ\'ব" "যেতিয়া আপুনি ছেভ কৰি থোৱা উচ্চ মানৰ নেটৱৰ্কৰ কাষত থাকে" "পুনৰাই অন নকৰিব" - - - - + "ৱাই-ফাই স্বয়ংক্ৰিয়ভাৱে অন কৰা হ\'ল" + "আপুনি ছেভ কৰি থোৱা নেটৱৰ্ক এটাৰ কাষত আছে: %1$s" "ৱাই-ফাই নেটৱৰ্কত ছাইন ইন কৰক" - - + "নেটৱৰ্কত ছাইন ইন কৰক" "ৱাই-ফাইত ইন্টাৰনেট নাই" @@ -1264,8 +1200,7 @@ "ৱাই-ফাইৰ লগত সংযোগ কৰিব পৰা নগ\'ল" " ইণ্টাৰনেট সংযোগ যথেষ্ট দুর্বল।" "সংযোগ কৰাৰ অনুমতি দিবনে?" - - + "%1$s এপ্লিকেশ্বনটোৱে ৱাই-ফাই নেটৱৰ্ক %2$sৰ সৈতে সংযুক্ত হ\'ব বিচাৰিছে" "এপ্লিকেশ্বন" "ৱাই-ফাই ডাইৰেক্ট" "ৱাই-ফাই ডাইৰেক্ট আৰম্ভ কৰক। এই কার্যই ৱাই-ফাই ক্লাইণ্ট/হ\'টস্প\'ট অফ কৰিব।" @@ -1303,14 +1238,10 @@ "ছিম কাৰ্ড যোগ কৰা হ\'ল" "ম\'বাইলৰ নেটৱর্ক ব্যৱহাৰ কৰিবলৈ আপোনাৰ ডিভাইচটো ৰিষ্টার্ট কৰক।" "ৰিষ্টাৰ্ট কৰক" - - - - - - - - + "ম\'বাইল সেৱা সক্ৰিয় কৰক" + "আপোনাৰ নতুন ছিমখন সক্ৰিয় কৰিবলৈ বাহকৰ এপটো ডাউনল\'ড কৰক" + "আপোনাৰ নতুন ছিমখন সক্ৰিয় কৰিবলৈ %1$s এপটো ডাউনল\'ড কৰক" + "এপ্ ডাউনল\'ড কৰক" "নতুন ছিম ভৰোৱা হৈছে" "ছেট আপ কৰিবলৈ টিপক" "সময় ছেট কৰক" @@ -1322,27 +1253,19 @@ "কোনো অনুমতিৰ প্ৰয়োজন নাই" "ইয়াৰ ফলত আপোনাৰ টকা খৰচ হ\'ব পাৰে" "ঠিক আছে" - - - - - - - - - - - - - - + "ইউএছবিৰ জৰিয়তে এই ডিভাইচটো চ্চাৰ্জ কৰি থকা হৈছে" + "ইউএছবিৰ জৰিয়তে সংযুক্ত ডিভাইচটো চ্চাৰ্জ কৰি থকা হৈছে" + "ইউএছবি জৰিয়তে ফাইল স্থানান্তৰণ অন কৰা হ\'ল" + "ইউএছবিৰ জৰিয়তে পিটিপি অন কৰা হ\'ল" + "ইউএছবি টেডাৰিং অন কৰা হ\'ল" + "ইউএছবিৰ জৰিয়তে এমআইডিআই অন কৰা হ\'ল" + "ইউএছবি সহায়ক সামগ্ৰী সংযোগ কৰা হ\'ল" "অধিক বিকল্পৰ বাবে টিপক।" - - + "সংযুক্ত ডিভাইচ চ্চাৰ্জ কৰি থকা হৈছে। অধিক বিকল্পৰ বাবে টিপক।" "এনাল\'গ অডিঅ\' সহায়ক সামগ্ৰী পোৱা গৈছে" "সংলগ্ন কৰা ডিভাইচটোৱে এই ফ\'নটোৰ সৈতে কাম কৰিব নোৱাৰে। অধিক জানিবলৈ টিপক।" "ইউএছবি ডিবাগিং সংযোগ কৰা হ\'ল" - "ইউএছবি ডিবাগিং অক্ষম কৰিবলৈ টিপক।" + "ইউএছবি ডিবাগিং বন্ধ কৰিবলৈ টিপক" "ইউএছবি ডিবাগিং অক্ষম কৰিবলৈ বাছনি কৰক।" "বাগ সম্পর্কীয় অভিযোগ গ্ৰহণ কৰি থকা হৈছে…" "বাগ সম্পর্কীয় অভিযোগ শ্বেয়াৰ কৰিবনে?" @@ -1361,53 +1284,49 @@ "%s অন্য এপসমূহৰ ওপৰত প্ৰদৰ্শিত হৈ আছে" "%sএ অইন এপবোৰৰ ওপৰত প্ৰদৰ্শিত হৈ আছে" "আপুনি যদি %sএ এই সুবিধাটো ব্যৱহাৰ কৰাটো নিবিচাৰে তেন্তে টিপি ছেটিংসমূহ খোলক আৰু ইয়াক অফ কৰক।" - + "অফ কৰক" + - + - "আসোঁৱাহ বিচাৰি থকা হৈছে" - + - + + + "ফট\' আৰু মিডিয়া স্থানান্তৰণৰ বাবে" + + + - "%s ব্যৱহাৰযোগ্য নহয়" - "%s ব্যৱহাৰযোগ্য নহয়। সমস্যাটো সমাধান কৰিবলৈ টিপক।" - "%s ব্যৱহাৰযোগ্য হৈ থকা নাই। ঠিক কৰিবলৈ বাছনি কৰক।" "%sক ব্যৱহাৰ কৰিব নোৱাৰি" "এই ডিভাইচটোৱে %sক ব্যৱহাৰ কৰিব নোৱাৰে। ব্যৱহাৰ কৰিব পৰা ফৰ্মেটত ছেট আপ কৰিবলৈ টিপক।" "এই ডিভাইচটোৱে %sক চলাব নোৱাৰে। চলাব পৰা কোনো ফৰ্মেটত ছেট আপ কৰিবলৈ বাছনি কৰক।" - - - + "%s অপ্ৰত্য়াশিতভাৱে আঁতৰোৱা হ\'ল" + - + - + - + - + "ছেট আপ কৰক" - - - - - - - - - - - + "বাহিৰ কৰক" + "অন্বেষণ কৰক" + "%s উপলব্ধ নহয়" + - + "%sক স্থানান্তৰ কৰি থকা হৈছে" + "ডেটা স্থানান্তৰ কৰি থকা হৈছে" + - + - + - + "আঁতৰোৱা হ\'ল" "বাহিৰলৈ উলিওৱা হ\'ল" @@ -1426,8 +1345,7 @@ "ইনষ্টল কৰা ছেশ্বনসমূহ পঢ়িব পাৰে" "এটা এপ্লিকেশ্বনক ইনষ্টল কৰা ছেশ্বনসমূহ পঢ়িবলৈ অনুমতি দিয়ে। এই কাৰ্যই সক্ৰিয় পেকেজ ইনষ্টলেশ্বনৰ বিষয়ে চাবলৈ অনুমতি দিয়ে।" "পেকেজ ইনষ্টলৰ বাবে অনুৰোধ কৰিব পাৰে" - - + "পেকেজ ইনষ্টল কৰাৰ অনুৰোধ প্ৰেৰণ কৰিবলৈ এপটোক অনুমতি দিয়ে।" "পেকেজ মচাৰ অনুৰোধ কৰিব পাৰে" "এপটোক পেকেজবোৰ মচাৰ অনুৰোধ কৰিবলৈ দিয়ে।" "বেটাৰি অপ্টিমাইজেশ্বন উপেক্ষা কৰিবলৈ বিচাৰক" @@ -1468,14 +1386,14 @@ "সদা-সক্ৰিয় ভিপিএন সংযোগ কৰি থকা হৈছে…" "সদা-সক্ৰিয় ভিপিএন সংযোগ কৰা হ\'ল" "সদা-সক্ৰিয় ভিপিএনৰ লগত সংযোগ বিচ্ছিন্ন কৰা হৈছে" - "সদা-সক্ৰিয় ভিপিএনত আসোঁৱাহ" + "সদা-সক্ৰিয় ভিপিএনৰ লগত সংযোগ কৰিব পৰা নাই" "নেটৱৰ্ক বা ভিপিএন ছেটিংসমূহ সলনি কৰক" "ফাইল বাছনি কৰক" "কোনো ফাইল বাছনি কৰা হোৱা নাই" "ৰিছেট কৰক" "দাখিল কৰক" - "গাড়ীৰ ম’ড সক্ষম কৰা হ\'ল" - "গাড়ীৰ ম\'ডৰ পৰা বাহিৰ হ\'বলৈ টিপক।" + "ড্ৰাইভিং এপ্ চলি আছে" + "ড্ৰাইভিং এপৰ পৰা বাহিৰ হ\'বলৈ টিপক।" "টেডাৰিং বা হটস্প\'ট সক্ৰিয় অৱস্থাত আছে" "ছেট আপ কৰিবলৈ টিপক।" "টেডাৰিং অক্ষম কৰি থোৱা হৈছে" @@ -1526,10 +1444,8 @@ "দিন হ্ৰাস কৰক" "বছৰ বৃদ্ধি কৰক" "বছৰ হ্ৰাস কৰক" - - - - + "পূৰ্বৱৰ্তী মাহ" + "পৰৱৰ্তী মাহ" "Alt" "বাতিল কৰক" "মচক" @@ -1550,36 +1466,24 @@ "%1$s, %2$s, %3$s" "শ্বেয়াৰ কৰা আভ্যন্তৰীণ সঞ্চয়াগাৰ" "এছডি কাৰ্ড" - - - - - - + "%s এছডি কাৰ্ড" + "ইউএছবি ড্ৰাইভ" + "%s ইউএছবি ড্ৰাইভ" "ইউএছবি সঞ্চয়াগাৰ" "সম্পাদনা কৰক" - - - - + "ডেটা সকীয়নি" + "আপুনি %s ডেটা ব্যৱহাৰ কৰিছে" "ম\'বাইল ডেটা ব্যৱাহৰৰ সীমা শেষ হৈছে" "ৱাই-ফাই ডেটাৰ সীমাত উপনীত হৈছে" - - - - - - - - + "আপোনাৰ ডেটা চক্ৰৰ বাকী অংশৰ বাবে ডেটা পজ কৰা হৈছে" + "ম\'বাইল ডেটাৰ সীমা পাৰ কৰিছে" + "ৱাই-ফাই ডেটাৰ সীমা পাৰ কৰিছে" + "আপুনি নিৰ্ধাৰিত সীমাতকৈ %s অধিক ব্যৱহাৰ কৰিছে" "নেপথ্য ডেটা সীমিত কৰি ৰখা হৈছে৷" "সীমাবদ্ধতা আঁতৰাবলৈ টিপক।" - - - - - - + "অত্যধিক ম\'বাইল ডেটাৰ ব্যৱহাৰ" + "আপোনাৰ এপসমূহে সচৰাচৰতকৈ অধিক ডেটা ব্যৱহাৰ কৰিছে" + "%sএ সচৰাচৰতকৈ অধিক ডেটা ব্যৱহাৰ কৰিছে" "নিৰাপত্তা সম্পৰ্কীয় প্ৰমাণপত্ৰ" "এই প্ৰমাণপত্ৰখন মান্য৷" "প্ৰদান কৰা হৈছে:" @@ -1795,12 +1699,9 @@ %d ছেকেণ্ডত আকৌ চেষ্টা কৰক "পিছত আকৌ চেষ্টা কৰক" - - - - - - + "স্ক্ৰীণ পূৰ্ণৰূপত চাই আছে" + "বাহিৰ হ\'বলৈ ওপৰৰপৰা তললৈ ছোৱাইপ কৰক।" + "বুজি পালোঁ" "সম্পন্ন কৰা হ\'ল" "ঘড়ীৰ বৃত্তাকাৰ শ্লাইডাৰ" "মিনিটৰ বৃত্তাকাৰ শ্লাইডাৰ" @@ -1818,7 +1719,7 @@ "আপোনাৰ প্ৰশাসকে ইনষ্টল কৰিছে" "আপোনাৰ প্ৰশাসকে আপেডট কৰিছে" "আপোনাৰ প্ৰশাসকে মচিছে" - "বেটাৰিৰ অৱস্থা উন্নত কৰাত সহায় কৰিবলৈ বেটাৰি সঞ্চয়কাৰী সুবিধাই আপোনাৰ ডিভাইচৰ কাৰ্যদক্ষতা হ্ৰাস কৰে আৰু কম্পন, অৱস্থান সেৱা আৰু অধিকাংশ নেপথ্য ডেটা সীমিত কৰে। ছিংকৰ ওপৰত নির্ভৰশীল ইমেইল, মেছেজিং আৰু অন্য এপসমূহ আপুনি নোখোলা পৰ্যন্ত আপডেট নহ\'বও পাৰে।\n\nআপোনাৰ ডিভাইচ চ্চার্জ কৰি থকাৰ সময়ত বেটাৰি সঞ্চয়কাৰী সুবিধা স্বয়ংক্ৰিয়ভাৱে অফ হ\'ব।" + "বেটাৰিৰ জীৱনকাল বৃদ্ধি কৰিবলৈ বেটাৰি সঞ্চয়কাৰী সুবিধাই আপোনাৰ ডিভাইচৰ কাৰ্যদক্ষতা হ্ৰাস কৰে আৰু কম্পন, অৱস্থান সেৱা আৰু নেপথ্য ডেটা সীমিত কৰে বা বন্ধ কৰে। ছিংকৰ ওপৰত নির্ভৰশীল ইমেইল, মেছেজিং আৰু অন্য এপসমূহ আপুনি নোখোলা পৰ্যন্ত আপডেট নহ\'বও পাৰে।\n\nআপোনাৰ ডিভাইচ চ্চার্জ কৰি থকাৰ সময়ত বেটাৰি সঞ্চয়কাৰী সুবিধা স্বয়ংক্ৰিয়ভাৱে বন্ধ হ\'ব।" "ডেটা ব্য়ৱহাৰ মাত্ৰা কম কৰিবৰ বাবে ডেটা সঞ্চয়কাৰীয়ে কিছুমান এপক নেপথ্য়ত ডেটা প্ৰেৰণ বা সংগ্ৰহ কৰাত বাধা প্ৰদান কৰে। আপুনি বৰ্তমান ব্য়ৱহাৰ কৰি থকা এটা এপে ডেটা ব্য়ৱহাৰ কৰিব পাৰে, কিন্তু সঘনাই এই কার্য কৰিব নোৱাৰিব পাৰে। ইয়াৰ অৰ্থ এইয়ে হ\'ব পাৰে যে, উদাহৰণস্বৰূপে, আপুনি নিটিপা পর্যন্ত প্ৰতিচ্ছবিসমূহ দেখুওৱা নহ\'ব।" "ডেটা সঞ্চয়কাৰী অন কৰিবনে?" "অন কৰক" @@ -1826,67 +1727,66 @@ %1$d মিনিটৰ বাবে (%2$s পৰ্যন্ত) %1$d মিনিটৰ বাবে (%2$s পৰ্যন্ত) - - + + %1$d মিনিটৰ বাবে (%2$s পর্যন্ত) + %1$d মিনিটৰ বাবে (%2$s পর্যন্ত) + + %1$d ঘণ্টাৰ বাবে (%2$s পৰ্যন্ত) %1$d ঘণ্টাৰ বাবে (%2$s পৰ্যন্ত) - + + %1$d ঘণ্টা (%2$s পর্যন্ত) + %1$d ঘণ্টা (%2$s পর্যন্ত) + %d মিনিটৰ বাবে %d মিনিটৰ বাবে - - + + %d মিনিটৰ বাবে + %d মিনিটৰ বাবে + + + %d ঘণ্টাৰ বাবে + %d ঘণ্টাৰ বাবে + + %d ঘণ্টাৰ বাবে %d ঘণ্টাৰ বাবে - "%1$s পৰ্যন্ত" "%1$s (পৰৱৰ্তী এলার্ম) পর্যন্ত" - - - - - - + "আপুনি অফ নকৰা পর্যন্ত" + "আপুনি যেতিয়ালৈকে অসুবিধা নিদিব অফ নকৰে" + "%1$s / %2$s" "সংকুচিত কৰক" - - - - - - - - - - + "অসুবিধা নিদিব" + "ডাউনটাইম" + "কাৰ্য-দিনৰ নিশা" + "সপ্তাহ অন্ত" + "কার্যক্ৰম" "নিদ্ৰাৰত" "%1$sৰ দ্বাৰা মিউট কৰা হৈছে" "আপোনাৰ ডিভাইচত এটা আভ্যন্তৰীণ সমস্যা আছে আৰু আপুনি ফেক্টৰী ডেটা ৰিছেট নকৰালৈকে ই সুস্থিৰভাৱে কাম নকৰিব পাৰে।" "আপোনাৰ ডিভাইচত এটা আভ্যন্তৰীণ সমস্যা আছে। সবিশেষ জানিবৰ বাবে আপোনাৰ ডিভাইচ নির্মাতাৰ সৈতে যোগাযোগ কৰক।" - "USSD অনুৰোধক DIAL অনুৰোধলৈ সংশোধিত কৰা হৈছে।" - "USSD অনুৰোধক SS অনুৰোধলৈ সংশোধিত কৰা হৈছে।" - "USSD অনুৰোধক নতুন USSD অনুৰোধলৈ সংশোধিত কৰা হৈছে।" - "USSD অনুৰোধক ভিডিঅ\' DIAL অনুৰোধলৈ সংশোধিত কৰা হৈছে।" - "SS অনুৰোধক DIAL অনুৰোধলৈ সংশোধিত কৰা হৈছে।" - "SS অনুৰোধক ভিডিঅ\' DIAL অনুৰোধলৈ সংশোধিত কৰা হৈছে।" - "SS অনুৰোধক USSD অনুৰোধলৈ সংশোধিত কৰা হৈছে।" - "SS অনুৰোধক নতুন SS অনুৰোধলৈ সংশোধিত কৰা হৈছে।" + "USSD অনুৰোধ নিয়মীয়া কললৈ সলনি কৰা হ\'ল" + "USSD অনুৰোধ SS অনুৰোধলৈ সলনি কৰা হ\'ল" + "নতুন USSD অনুৰোধলৈ সলনি কৰা হ\'ল" + "USSD SS অনুৰোধ ভিডিঅ\' কললৈ সলনি কৰা হ\'ল" + "SS অনুৰোধ নিয়মীয়া কললৈ সলনি কৰা হ\'ল" + "SS অনুৰোধ ভিডিঅ\' কললৈ সলনি কৰা হ\'ল" + "SS অনুৰোধ USSD অনুৰোধলৈ সলনি কৰা হ\'ল" + "নতুন SS অনুৰোধলৈ সলনি কৰা হ\'ল" "কৰ্মস্থানৰ প্ৰ\'ফাইল" "বিস্তাৰ কৰক" "সংকুচিত কৰক" "সম্প্ৰসাৰণ ট’গল কৰক" - - - - - - - - - - + "Androidৰ ইউএছবি পেৰিফেৰেল প\'ৰ্ট" + "Android" + "ইউএছবিৰ পেৰিফেৰেল প\'ৰ্ট" + "অধিক বিকল্প" + "টুলবাৰ অভাৰফ্ল\' বন্ধ কৰক" "সৰ্বাধিক মাত্ৰালৈ বঢ়াওক" "বন্ধ কৰক" "%1$s: %2$s" @@ -1906,15 +1806,11 @@ "সকলো ভাষা" "সকলো অঞ্চল" "অনুসন্ধান কৰক" - - - - + "কৰ্মস্থানৰ প্ৰ\'ফাইল অন কৰিবনে?" + "আপোনাৰ কৰ্মস্থানৰ এপসমূহ, জাননীসমূহ, ডেটা আৰু কৰ্মস্থানৰ প্ৰ\'ফাইলৰ অইন সুবিধাসমূহ অন কৰা হ\'ব" "অন কৰক" - - - - + "এই এপটো Androidৰ এটা পুৰণা সংস্কৰণৰ বাবে প্ৰস্তুত কৰা হৈছিল, আৰু ই বিচৰাধৰণে কাম নকৰিবও পাৰে। ইয়াৰ আপডেট আছে নেকি চাওক, বা বিকাশকৰ্তাৰ সৈতে যোগাযোগ কৰক।" + "আপডেট আছে নেকি চাওক" "আপুনি নতুন বার্তা লাভ কৰিছে" "চাবলৈ এছএমএছ এপ্ খোলক" "কিছুমান কৰ্মক্ষমতা সীমিত হ\'ব পাৰে" @@ -1979,28 +1875,34 @@ "ভইচৰ বাবে ছিমৰ প্ৰ\'ভিজন কৰা হোৱা নাই" "ভইচৰ বাবে ছিম ব্যৱহাৰৰ অনুমতি নাই" "ভইচৰ বাবে ফ\'ন ব্যৱহাৰৰ অনুমতি নাই" + + + + + + + + "পপআপ ৱিণ্ড\'" "+ %1$d" - - + "এপৰ সংস্কৰণ অৱনমিত কৰা হৈছে, বা ই এই শ্বৰ্টকাটটোৰ লগত খাপ নাখায়" "এপটোত বেকআপ আৰু পুনঃস্থাপন সুবিধা নথকাৰ বাবে শ্বৰ্টকাট পুনঃস্থাপন কৰিবপৰা নগ\'ল" "এপৰ স্বাক্ষৰৰ অমিল হোৱাৰ বাবে শ্বৰ্টকাট পুনঃস্থাপন কৰিবপৰা নগ\'ল" "শ্বৰ্টকাট পুনঃস্থাপন কৰিবপৰা নগ\'ল" "শ্বৰ্টকাট অক্ষম কৰি থোৱা হৈছে" - - - - - - - - - - - - - - - - + "আনইনষ্টল কৰক" + "যিহ\'লেও খোলক" + "ক্ষতিকাৰক এপ্‌ চিনাক্ত কৰা হৈছে" + "%1$s%2$sৰ অংশ দেখুওৱাব খুজিছে" + "সম্পাদনা কৰক" + "কল আৰু জাননীসমূহে কম্পন কৰিব" + "কল আৰু জাননীসমূহ মিউট কৰা হ\'ব" + "ছিষ্টেমৰ সালসলনি" + "অসুবিধা নিদিব" + "আপুনি যাতে মনোযোগ দিব পাৰে তাৰ কাৰণে অসুবিধা নিদিবই জাননীসমূহ লুকুৱাই থৈছে" + "এইটো এটা নতুন আচৰণ। সলনি কৰিবলৈ টিপক।" + "অসুবিধা নিদিব সলনি হৈছে" + "কি কি অৱৰোধ কৰা হৈছে জানিবলৈ টিপক।" + "ছিষ্টেম" + "ছেটিংসমূহ" diff --git a/core/res/res/values-az/strings.xml b/core/res/res/values-az/strings.xml index 34b4b3d07de759637af95ae4ed7dbafdacadec2c..c51249f4bcd60570f8a223dde59ec2eef893b5cb 100644 --- a/core/res/res/values-az/strings.xml +++ b/core/res/res/values-az/strings.xml @@ -82,6 +82,7 @@ "Səsli xidmət yoxdur" "Səs xidməti və ya təcili zəng yoxdur" "Operator tərəfindən müvəqqəti olaraq deaktiv edildi" + "SIM %d üçün operator tərəfindən müvəqqəti olaraq deaktiv edildi" "Mobil şəbəkəyə daxil olmaq mümkün deyil" "Tərcih edilən şəbəkəni dəyişin. Dəyişmək üçün klikləyin." "Təcili zəng əlçatan deyil" @@ -120,12 +121,13 @@ "Rominq Banneri Açıqdır" "Roaming Banner Off" "Xidmət axtarılır" - - + "Wi‑Fi zəngi ayarlana bilmədi" "Zəng etmək və Wi-Fi üzərindən mesaj göndərmək üçün əvvəlcə operatordan bu cihazı quraşdırmağı tələb edin. Sonra Ayarlardan Wi-Fi zəngini deaktiv edin. (Xəta kodu: %1$s)" - + + "Operatorla Wi‑Fi zənglərini qeydə alarkən xəta baş verdi: %1$s" + "%s" "%s Wi-Fi Zəngi" @@ -481,6 +483,8 @@ "Tətbiqə Yaxın Məsafə Kommunikasiyası (NFC) teqləri, kartları və oxuyucuları ilə əlaqə qurmağa icazə verir." "Ekran kilidini deaktiv edir" "Tətbiqə kilid açarını və təhlükəsizlik parolunu deaktiv etməyə imkan verir. Qanuni misal budur ki, telefon zəng qəbul edən zaman kilidi açır və zəng qurtarandan sonra kilidi bağlayır." + "biometrik proqramdan istifadə edin" + "Doğrulama üçün biometrik proqramdan istifadə etməyə imkan verir" "barmaq izi avadanlığını idarə edin" "Proqrama istifadə üçün barmaq izi şablonlarını əlavə etmək və silmək üçün üsullara müraciət etməyə imkan verir." "barmaq izi avadanlığından istifadə edin" @@ -493,6 +497,7 @@ "Tanınmır" + "Barmaq izi doğrulandı" "Barmaq izi üçün avadanlıq yoxdur." "Barmaq izi saxlana bilməz. Lütfən, mövcud barmaq izini silin." "Barmaq izinin vaxtı başa çatdı. Yenidən cəhd edin." @@ -1005,14 +1010,23 @@ "Daxiletmə metodu" "Mətn əməliyyatları" "E-poçt" + "Seçilmiş ünvana e-məktub yazın" "Zəng" + "Seçilmiş telefon nömrəsinə zəng edin" "Tapmaq" + "Seçilmiş ünvanı yerləşdirin" "Açın" + "Seçilmiş linki açın" "Mesaj" + "Seçilmiş telefon nömrəsini mesajla göndərin" "Əlavə edin" + "Kontakta əlavə edin" "Baxın" + "Təqvimdə seçilmiş vaxta baxın" "Cədvəl" + "Tədbiri seçilmiş vaxta planlaşdırın" "Trek" + "Seçilmiş uçuşu izləyin" "Yaddaş yeri bitir" "Bəzi sistem funksiyaları işləməyə bilər" "Sistem üçün yetərincə yaddaş ehtiyatı yoxdur. 250 MB yaddaş ehtiyatının olmasına əmin olun və yenidən başladın." @@ -1141,8 +1155,7 @@ "Açıq Wi‑Fi şəbəkəsinə qoşulun" "Operatorun Wi‑Fi şəbəkəsinə qoşulun" - - + "Wi‑Fi şəbəkəsinə qoşulur" "Wi‑Fi şəbəkəsinə qoşuldu" "Wi‑Fi şəbəkəsinə qoşulmaq mümkün deyil" "Bütün şəbəkələri görmək üçün klikləyin" @@ -1258,33 +1271,34 @@ "%s tətbiq üzərindən göstərilir" "%s adlı şəxsin bu funksiyadan istifadə etməyini istəmirsinizsə, ayarları açmaq və deaktiv etmək üçün klikləyin." "Deaktiv edin" - "%s hazırlanır" - "Səhvlər yoxlanılır" - "Yeni %s aşkarlandı" + "%s yoxlanılır…" + "Cari kontent nəzərdən keçirilir" + "Yeni %s" + "Quraşdırmaq üçün klikləyin" "Fotoların və medianın köçürülməsi üçün" - "Zədələnmiş %s" - "%s zədələnib. Düzəltmək üçün tıklayın." + "%s ilə bağlı problem" + "Həll etmək üçün klikləyin" "%s zədələnib. Düzəltmək üçün seçin." "Dəstəklənməyən %s" "%s bu cihaz tərəfindən dəstəklənmir. Dəstəklənən formatda ayarlamaq üçün tıklayın." "%s bu cihaz tərəfindən dəstəklənmir. Dəstəklənən formatda ayarlamaq üçün seçin." "%s gözlənilmədən çıxarıldı" - "Data itkisinin qarşısını almaq üçün %s kartını çıxarın" - "%s çıxarıldı" - "%s çıxarıldı; yenisini daxil edin" - "%s hələ də çıxarılır…" - "Çıxarmayın" + "Kontenti itirməmək üçün silmədən öncə medianı çıxarın" + "%s silindi" + "Bəzi funksiyalar düzgün işləməyə bilər. Yeni yaddaşı daxil edin." + "%s çıxarılır" + "Silməyin" "Quraşdırın" "Çıxarın" "Araşdır" "%s yoxdur" - "Bu cihazı yenidən daxil edin" + "Cihazı yenidən daxil edin" "%s daşınır" "Data daşınır" - "Köçürmə tamamdır" - "Data %s adına köçürüldü" - "Data daşına bilmədi" - "Data orijinal yerində saxlanıldı" + "Kontent transferi tamamlandı" + "Kontent %s ünvanına köçürüldü" + "Kontent köçürülmədi" + "Kontenti yenidən köçürün" "Silinib" "Çıxarılıb" "Yoxlanılır..." @@ -1832,6 +1846,10 @@ "SIM səs üçün konfiqurasiya edilməyib" "Səs üçün SIM-ə icazə verilmir" "Səs üçün telefona icazə verilmir" + "SIM %d icazəli deyil" + "SIM %d təmin edilməyib" + "SIM %d icazəli deyil" + "SIM %d icazəli deyil" "Popap Pəncərəsi" "+ %1$d" "Tətbiq versiyası əvvəlki versiyaya endirilib və ya bu qısayol ilə uyğun deyil" diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml index 6941579217e1a9bf49b8c529d963dbbc74fe4b7a..c4b9fa3ac147e8c5f673a5b544bbadb4490f3506 100644 --- a/core/res/res/values-b+sr+Latn/strings.xml +++ b/core/res/res/values-b+sr+Latn/strings.xml @@ -78,15 +78,16 @@ "ID pozivaoca podrazumevano nije ograničen. Sledeći poziv: Nije ograničen." "Usluga nije dobavljena." "Ne možete da promenite podešavanje ID-a korisnika." - "Nema usluge prenosa podataka" - "Hitni pozivi nisu mogući" + "Nema usluge prenosa podataka preko mobilnog operatera" + "Hitni pozivi nisu dostupni" "Nema glasovne usluge" - "Nema glasovne usluge/usluge za hitne pozive" - "Privremeno je onemogućeno na mobilnoj mreži na vašoj lokaciji" - "Povezivanje sa mrežom nije uspelo" - "Da biste poboljšali prijem, probajte da promenite izabrani tip u odeljku Podešavanja > Mreža i internet > Mobilne mreže > Željeni tip mreže." - "Wi‑Fi pozivanje je aktivno" - "Hitni pozivi zahtevaju mobilnu mrežu." + "Nema glasovne usluge ni hitnih poziva" + "Privremeno isključio mobilni operater" + "Privremeno je isključio mobilni operater za SIM %d" + "Povezivanje sa mobilnom mrežom nije uspelo" + "Probajte da promenite željenu mrežu. Dodirnite da biste promenili." + "Hitni pozivi nisu dostupni" + "Ne možete da upućujete hitne pozive preko Wi‑Fi-ja" "Obaveštenja" "Preusmeravanje poziva" "Režim za hitan povratni poziv" @@ -121,12 +122,12 @@ "Baner rominga je uključen" "Baner rominga je isključen" "Pretraživanje usluge" - "Pozivanje preko Wi-Fi-ja" + "Podešavanje pozivanja preko Wi-Fi-ja nije uspelo" "Da biste upućivali pozive i slali poruke preko Wi-Fi-ja, prvo zatražite od mobilnog operatera da vam omogući ovu uslugu. Zatim u Podešavanjima ponovo uključite Pozivanje preko Wi-Fi-ja. (kôd greške: %1$s)" - "Registrujte se kod mobilnog operatera (kôd greške: %1$s)" + "Problem u vezi sa registrovanjem pozivanja preko Wi‑Fi-ja kod mobilnog operatera: %1$s" "%s" @@ -161,8 +162,8 @@ "Previše zahteva se obrađuje. Probajte ponovo kasnije." "Greška pri prijavljivanju za %1$s" "Sinhronizacija" - "Sinhronizacija" - "Previše %s izbrisanih stavki." + "Sinhronizacija nije uspela" + "Previše pokušaja brisanja sadržaja %s." "Memorija tableta je puna! Izbrišite neke datoteke da biste oslobodili prostor." "Memorija sata je puna. Izbrišite neke datoteke da biste oslobodili prostor." "Memorijski prostor na TV-u je popunjen. Izbrišite neke datoteke da biste oslobodili prostor." @@ -176,14 +177,13 @@ "Od strane administratora profila za Work" "Od strane %s" "Poslovni profil je izbrisan" - "Profil za Work je izbrisan jer nedostaje aplikacija za administratore" "Aplikacija za administratore na profilu za Work nedostaje ili je oštećena. Zbog toga su profil za Work i povezani podaci izbrisani. Obratite se administratoru za pomoć." "Profil za Work više nije dostupan na ovom uređaju" "Previše pokušaja unosa lozinke" "Uređajem se upravlja" "Organizacija upravlja ovim uređajem i može da nadgleda mrežni saobraćaj. Dodirnite za detalje." "Uređaj će biti obrisan" - "Ne možete da koristite ovu aplikaciju za administratore. Uređaj će sada biti obrisan.\n\nAko imate pitanja, kontaktirajte administratora organizacije." + "Ne možete da koristite ovu aplikaciju za administratore. Uređaj će sada biti obrisan.\n\nAko imate pitanja, kontaktirajte administratora organizacije." "Štampanje je onemogućila aplikacija %s." "Ja" "Opcije za tablet" @@ -239,6 +239,9 @@ "Režim rada u avionu" "Režim rada u avionu je UKLJUČEN" "Režim rada u avionu je ISKLJUČEN" + "Ušteda baterije" + "Ušteda baterije je ISKLJUČENA" + "Ušteda baterije je UKLJUČENA" "Podešavanja" "Pomoć" "Glasovna pomoć" @@ -272,31 +275,31 @@ "Pređi na poslovni profil" "Kontakti" "pristupi kontaktima" - "Dozvolite da <b>%1$s</b> pristupa kontaktima" + "Želite li da omogućite da <b>%1$s</b> pristupa kontaktima?" "Lokacija" "pristupi lokaciji ovog uređaja" - "Dozvolite da <b>%1$s</b> pristupa lokaciji uređaja" + "Želite li da omogućite da <b>%1$s</b> pristupa lokaciji ovog uređaja?" "Kalendar" "pristupi kalendaru" - "Dozvolite da <b>%1$s</b> pristupa kalendaru" + "Želite li da omogućite da <b>%1$s</b> pristupa kalendaru?" "SMS" "šalje i pregleda SMS poruke" - "Dozvolite da <b>%1$s</b> šalje i pregleda SMS-ove" + "Želite li da omogućite da <b>%1$s</b> šalje i pregleda SMS-ove?" "Skladište" "pristupa slikama, medijima i datotekama na uređaju" - "Dozvolite <b>%1$s</b> da pristupa slikama, medijskim datotekama i datotekama na uređaju" + "Želite li da omogućite da <b>%1$s</b>pristupa slikama, medijskim datotekama i datotekama na uređaju?" "Mikrofon" "snima zvuk" - "Dozvolite da <b>%1$s</b> snima zvuk" + "Želite li da omogućite da <b>%1$s</b> snima zvuk?" "Kamera" "snima slike i video" - "Dozvolite da <b>%1$s</b> snima slike i video snimke" + "Želite li da omogućite da <b>%1$s</b> snima slike i video snimke?" "Telefon" "upućuje telefonske pozive i upravlja njima" - "Dozvolite da <b>%1$s</b> upućuje pozive i upravlja njima" + "Želite li da omogućite da <b>%1$s</b> upućuje pozive i upravlja njima?" "Senzori za telo" "pristupa podacima senzora o vitalnim funkcijama" - "Dozvolite da <b>%1$s</b> pristupa podacima senzora o vitalnim funkcijama" + "Želite li da omogućite da <b>%1$s</b>pristupa podacima senzora o vitalnim funkcijama?" "da preuzima sadržaj prozora" "Proverava sadržaj prozora sa kojim ostvarujete interakciju." "da uključi Istraživanja dodirom" @@ -308,7 +311,7 @@ "Obavljanje pokreta" "Može da dodiruje, lista, skuplja prikaz i obavlja druge pokrete." "Pokreti za otisak prsta" - "Može da registruje pokrete na senzoru za otisak prsta na uređaju." + "Može da registruje pokrete na senzoru za otisak prsta na uređaju." "onemogućavanje ili izmena statusne trake" "Dozvoljava aplikaciji da onemogući statusnu traku ili da dodaje i uklanja sistemske ikone." "funkcionisanje kao statusna traka" @@ -359,6 +362,8 @@ "Dozvoljava aplikaciji da učini sopstvene komponente trajnim u memoriji. Ovo može da ograniči memoriju dostupnu drugim aplikacijama i uspori tablet." "Dozvoljava aplikaciji da neke svoje delove trajno zadrži u memoriji. To može da ograniči memoriju dostupnu drugim aplikacijama i uspori TV." "Dozvoljava aplikaciji da učini sopstvene komponente trajnim u memoriji. Ovo može da ograniči memoriju dostupnu drugim aplikacijama i uspori telefon." + "pokreni uslugu u prvom planu" + "Dozvoljava aplikaciji da koristi usluge u prvom planu." "merenje memorijskog prostora u aplikaciji" "Dozvoljava aplikaciji da preuzme veličine kôda, podataka i keša." "izmena podešavanja sistema" @@ -481,6 +486,8 @@ "Dozvoljava aplikaciji da komunicira sa oznakama, karticama i čitačima komunikacije kratkog dometa (NFC)." "onemogućavanje zaključavanja ekrana" "Dozvoljava aplikaciji da onemogući zaključavanje tastature i sve povezane bezbednosne mere sa lozinkama. Na primer, telefon onemogućava zaključavanje tastature pri prijemu dolaznog telefonskog poziva, a zatim ga ponovo omogućava po završetku poziva." + "koristi biometrijski hardver" + "Dozvoljava aplikaciji da koristi biometrijski hardver za potvrdu autentičnosti" "upravljaj hardverom za otiske prstiju" "Dozvoljava aplikaciji da aktivira metode za dodavanje i brisanje šablona otisaka prstiju koji će se koristiti." "koristi hardver za otiske prstiju" @@ -493,6 +500,7 @@ "Nije prepoznat" + "Otisak prsta je potvrđen" "Hardver za otiske prstiju nije dostupan." "Nije moguće sačuvati otisak prsta. Uklonite neki od postojećih otisaka prstiju." "Vremensko ograničenje za otisak prsta je isteklo. Probajte ponovo." @@ -805,6 +813,8 @@ "Otključavanje šablonom." "Otključavanje licem." "Otključavanje PIN-om." + "Otključava SIM karticu PIN-om." + "Otključava SIM karticu PUK-om." "Otključavanje lozinkom." "Oblast šablona." "Oblast prevlačenja." @@ -866,6 +876,12 @@ "Tekst je kopiran u privremenu memoriju." "Još" "Meni+" + "Meta+" + "Ctrl+" + "Alt+" + "Shift+" + "Sym+" + "Function+" "razmak" "enter" "izbriši" @@ -1014,14 +1030,23 @@ "Metod unosa" "Radnje u vezi sa tekstom" "Pošalji imejl" + "Pošaljite imejl na izabranu adresu" "Pozovi" + "Pozovite izabrani broj telefona" "Pronađi" + "Pronađite izabranu adresu" "Otvori" + "Otvorite izabrani URL" "Pošalji SMS" + "Pošaljite SMS na izabrani broj telefona" "Dodaj" + "Dodajte u kontakte" "Prikaži" + "Pogledajte izabrano vreme u kalendaru" "Zakaži" + "Zakažite događaj u izabrano vreme" "Prati" + "Pratite izabrani let" "Memorijski prostor je na izmaku" "Neke sistemske funkcije možda ne funkcionišu" "Nema dovoljno memorijskog prostora za sistem. Uverite se da imate 250 MB slobodnog prostora i ponovo pokrenite." @@ -1094,31 +1119,28 @@ "Potraži ažuriranje" "Aplikacija %1$s (proces %2$s) je prekršila samonametnute StrictMode smernice." "Proces %1$s je prekršio samonametnute StrictMode smernice." - "Android se nadograđuje…" - "Android se pokreće…" + "Telefon se ažurira…" + "Tablet se ažurira…" + "Uređaj se ažurira…" + "Telefon se pokreće…" + "Tablet se pokreće…" + "Uređaj se pokreće…" "Memorija se optimizuje." - "Dovršavamo ažuriranje Android-a…" - "Neke aplikacije možda neće ispravno funkcionisati dok se nadogradnja ne dovrši" + "Ažuriranje sistema se dovršava…" "%1$s se nadograđuje…" "Optimizovanje aplikacije %1$d od %2$d." "Priprema se %1$s." "Pokretanje aplikacija." "Završavanje pokretanja." "Aplikacija %1$s je pokrenuta" - - - - - - - - - - - - + "Dodirnite da biste se vratili u igru" + "Odaberite igru" + "Da bi učinak bio bolji, možete da otvorite samo jednu od ovih igara odjednom." + "Nazad na %1$s" + "Otvori %1$s" + "%1$s će se zatvoriti bez čuvanja" "%1$s premašuje ograničenje memorije" - "Snimak dinamičkog dela memorije je napravljen; dodirnite za deljenje" + "Snimak dinamičkog dela memorije je napravljen. Dodirnite za deljenje." "Želite li da delite snimak dinamičkog dela memorije?" "Proces %1$s je premašio ograničenje memorije za proces od %2$s. Snimak dinamičkog dela memorije je dostupan i možete da ga delite sa programerom. Budite oprezni: ovaj snimak dinamičkog dela memorije može da sadrži neke lične podatke kojima aplikacija može da pristupa." "Izaberite radnju za tekst" @@ -1155,12 +1177,12 @@ "Povežite se sa otvorenom Wi‑Fi mrežom" "Povežite se na Wi-Fi mrežu mobilnog operatera" - "Povezujete se sa otvorenom Wi‑Fi mrežom" + "Povezuje se sa Wi-Fi mrežom..." "Povezali ste se sa Wi‑Fi mrežom" "Povezivanje sa Wi‑Fi mrežom nije uspelo" "Dodirnite da biste videli sve mreže" "Poveži" - "Sve mreže" + "Sve mreže" "Wi‑Fi će se automatski uključiti" "Kada ste u blizini sačuvane mreže visokog kvaliteta" "Ne uključuj ponovo" @@ -1226,6 +1248,7 @@ "Ponovo pokreni" "Aktivirajte mobilnu uslugu" "Preuzmite aplikaciju mobilnog operatera da biste aktivirali novi SIM" + "Preuzmite aplikaciju %1$s da biste aktivirali novu SIM karticu" "Preuzmite aplikaciju" "Nova SIM kartica je umetnuta" "Dodirnite za podešavanje" @@ -1244,13 +1267,13 @@ "Režim PTP preko USB-a je uključen" "USB privezivanje je uključeno" "Režim MIDI preko USB-a je uključen" - "Režim USB dodatka je uključen" + "USB dodatak je povezan" "Dodirnite za još opcija." "Povezani uređaj se puni. Dodirnite za još opcija." "Otkrivena je analogna dodatna oprema za audio sadržaj" "Priključeni uređaj nije kompatibilan sa ovim telefonom. Dodirnite da biste saznali više." "Otklanjanje grešaka sa USB-a je omogućeno" - "Dodirnite da biste onemogućili otklanjanje grešaka sa USB-a." + "Dodirnite da biste isključili otklanjanje grešaka sa USB-a" "Izaberite da biste onemogućili otklanjanja grešaka sa USB-a." "Izveštaj o grešci se generiše…" "Želite li da podelite izveštaj o grešci?" @@ -1269,34 +1292,35 @@ "Aplikacija %s se prikazuje preko drugih aplikacija" "%s se prikazuje preko drugih aplik." "Ako ne želite ovu funkciju za %s, dodirnite da biste otvorili podešavanja i isključili je." - "ISKLJUČI" - "%s se priprema" - "Proverava se da li postoje greške" - "Novi uređaj %s je otkriven" + "Isključi" + "Proverava se %s…" + "Pregleda se aktuelni sadržaj" + "Novi/a %s" + "Dodirnite da biste podesili" "Za prenos slika i medija" - "Uređaj %s je oštećen" - "Uređaj %s je oštećen. Dodirnite da biste ga popravili." + "Problem sa: %s" + "Dodirnite da biste ispravili" "Medij %s je oštećen. Izaberite da ga popravite." "Uređaj %s nije podržan" "Ovaj uređaj ne podržava ovaj uređaj %s. Dodirnite da biste podesili podržani format." "Ovaj uređaj ne podržava ovaj medij (%s). Izaberite da ga podesite u podržanom formatu." "Uređaj %s je neočekivano uklonjen" - "Isključite uređaj %s pre uklanjanja da ne biste izgubili podatke" - "Uređaj %s je uklonjen" - "Uređaj %s je uklonjen; umetnite novi" - "%s se još uvek izbacuje…" - "Ne uklanjajte" + "Izbacite medijum pre nego što ga uklonite da ne biste izgubili sadržaj" + "%s je uklonjen/a" + "Neke funkcije možda neće ispravno raditi. Umetnite nov memorijski uređaj." + "Izbacuje se %s" + "Ne uklanjajte" "Aktiviraj" "Izbaci" "Istraži" "%s nedostaje" - "Umetnite uređaj ponovo" + "Ponovo umetnite uređaj" "Prenosi se %s" "Podaci se prenose" - "Prenos je završen" - "Podaci su preneseni na uređaj %s" - "Prenos podataka nije uspeo" - "Podaci su ostali na originalnoj lokaciji" + "Prenos sadržaja je gotov" + "Sadržaj je premešen na: %s" + "Premeštanje sadržaja nije uspelo" + "Probajte da ponovo premestite sadržaj" "Uklonjen je" "Izbačen je" "Proverava se..." @@ -1355,14 +1379,14 @@ "Povezivanje stalno uključenog VPN-a..." "Stalno uključeni VPN je povezan" "Veza sa uvek uključenim VPN-om je prekinuta" - "Greška stalno uključenog VPN-a" + "Povezivanje na stalno uključeni VPN nije uspelo" "Promenite podešavanja VPN-a" "Odaberi datoteku" "Nije izabrana nijedna datoteka" "Resetuj" "Pošalji" - "Režim rada u automobilu je omogućen" - "Dodirnite da biste izašli iz režima rada u automobilu." + "Aplikacija za vožnju je pokrenuta" + "Dodirnite da biste izašli iz aplikacije za vožnju." "Aktivno povezivanje sa internetom preko mobilnog uređaja ili hotspot" "Dodirnite da biste podesili." "Privezivanje je onemogućeno" @@ -1441,22 +1465,19 @@ "%s USB disk" "USB memorija" "Izmeni" - "Obaveštenje o potrošnji podataka" - "Dodirnite za potrošnju i podešavanja." - "Nema više 2G-3G podataka" - "Nema više 4G podataka" + "Upozorenje na potrošnju podataka" + "Potrošili ste %s podataka" "Dostigli ste ograničenje podataka" "Nema više Wi-Fi podataka" - "Potrošili ste podatke za ovaj mesec" - "Prekoračen prenos 2G-3G podataka" - "Prekoračenje prenosa 4G podataka" - "Prekoračeno ogranič. pren. pod." - "Prekoračenje prenosa Wi-Fi podat." - "%s preko navedenog ograničenja." + "Podaci su pauzirani tokom ostatka ciklusa" + "Potrošili ste mobilne podatke" + "Potrošili ste Wi-Fi podatke" + "Prekoračili ste %s od podešenog ograničenja" "Pozadinski podaci su ograničeni" "Dodirnite za uklanjanje ograničenja." - "Velika potrošnja podataka" - "Potrošnja podataka tokom poslednjih par dana je veća nego obično. Dodirnite da biste pregledali potrošnju i podešavanja." + "Velika potrošnja mob. podataka" + "Aplikacije su potrošile više podataka nego obično" + "Aplikacija %s je potrošila više podataka nego obično" "Bezbednosni sertifikat" "Ovaj sertifikat je važeći." "Izdato za:" @@ -1694,7 +1715,7 @@ "Instalirao je administrator" "Ažurirao je administrator" "Izbrisao je administrator" - "Da bi produžila trajanje baterije, Ušteda baterije smanjuje performanse uređaja i ograničava vibraciju, usluge lokacije i većinu pozadinskih podataka. Imejl, razmena poruka i druge aplikacije koje se oslanjaju na sinhronizaciju se neće ažurirati ako ih ne otvorite.\n\nUšteda baterije se automatski isključuje kada se uređaj puni." + "Da bi produžila trajanje baterije, Ušteda baterije smanjuje performanse uređaja i ograničava ili isključuje vibraciju, usluge lokacije i pozadinske podatke. Imejl, razmena poruka i druge aplikacije koje se oslanjaju na sinhronizaciju se možda neće ažurirati ako ih ne otvorite.\n\nUšteda baterije se automatski isključuje kada se uređaj puni." "Da bi se smanjila potrošnja podataka, Ušteda podataka sprečava neke aplikacije da šalju ili primaju podatke u pozadini. Aplikacija koju trenutno koristite može da pristupa podacima, ali će to činiti ređe. Na primer, slike se neće prikazivati dok ih ne dodirnete." "Uključiti Uštedu podataka?" "Uključi" @@ -1708,7 +1729,7 @@ Za %1$d min (do %2$s) Za %1$d min (do %2$s) - + %1$d sat (do %2$s) %1$d sata (do %2$s) %1$d sati (do %2$s) @@ -1728,7 +1749,7 @@ Za %d min Za %d min - + %d sat %d sata %d sati @@ -1753,14 +1774,14 @@ "Zvuk je isključio/la %1$s" "Došlo je do internog problema u vezi sa uređajem i možda će biti nestabilan dok ne obavite resetovanje na fabrička podešavanja." "Došlo je do internog problema u vezi sa uređajem. Potražite detalje od proizvođača." - "USSD zahtev je promenjen u DIAL zahtev." - "USSD zahtev je promenjen u SS zahtev." - "USSD zahtev je promenjen u novi USSD zahtev." - "USSD zahtev je promenjen u Video DIAL zahtev." - "SS zahtev je promenjen u DIAL zahtev." - "SS zahtev je promenjen u Video DIAL zahtev." - "SS zahtev je promenjen u USSD zahtev." - "SS zahtev je promenjen u novi SS zahtev." + "USSD zahtev je promenjen u običan poziv" + "USSD zahtev je promenjen u SS zahtev" + "Promenjeno je u novi USSD zahtev" + "USSD zahtev je promenjen u video poziv" + "SS zahtev je promenjen u običan poziv" + "SS zahtev je promenjen u video poziv" + "SS zahtev je promenjen u USSD zahtev" + "Promenjeno je u novi SS zahtev" "Profil za Work" "Proširi" "Skupi" @@ -1860,6 +1881,10 @@ "SIM kartica nije podešena za glasovne usluge" "SIM kartica nije prilagođena za glasovne usluge" "Telefon nije prilagođen za glasovne usluge" + "SIM %d nije dozvoljen" + "SIM %d nije podešen" + "SIM %d nije dozvoljen" + "SIM %d nije dozvoljen" "Iskačući prozor" "i još %1$d" "Aplikacija je vraćena na stariju verziju ili nije kompatibilna sa ovom prečicom" @@ -1872,7 +1897,14 @@ "Otkrivena je štetna aplikacija" "Aplikacija %1$s želi da prikazuje isečke iz aplikacije %2$s" "Izmeni" + "Vibracija za pozive i obaveštenja je uključena" + "Melodija zvona za pozive i obaveštenje je isključena" "Sistemske promene" + "Ne uznemiravaj" + "Režim Ne uznemiravaj krije obaveštenja da bi vam pomogao da se fokusirate" + "Ovo je novo ponašanje. Dodirnite da biste promenili." "Režim Ne uznemiravaj je promenjen" - "Dodirnite da biste proverili da li podešavanja ponašanja obuhvataju prekide" + "Dodirnite da biste proverili šta je blokirano." + "Sistem" + "Podešavanja" diff --git a/core/res/res/values-be/strings.xml b/core/res/res/values-be/strings.xml index 564790dfbae43e072e41eacb6123f2ae603062da..7a43e8b5784ab24530579eaf820cc53e32517f38 100644 --- a/core/res/res/values-be/strings.xml +++ b/core/res/res/values-be/strings.xml @@ -84,6 +84,8 @@ "Няма сэрвісу галасавых выклікаў" "Галасавыя або экстранныя выклікі недаступныя" "Часова выключана аператарам сувязі" + + "Сетка мабільнай сувязі недаступная" "Націсніце, каб выбраць іншую сетку." "Экстранныя выклікі недаступныя" @@ -122,12 +124,13 @@ "Банэр роўмінгу ўключаны" "Банэр роўмінгу адключаны" "Пошук службы" - - + "Не атрымалася падключыць Wi‑Fi-тэлефанію" "Каб рабіць выклікі і адпраўляць паведамленні па Wi-Fi, спачатку папрасіце свайго аператара наладзіць гэту паслугу. Затым зноў уключыце Wi-Fi-тэлефанію ў меню Налады. (Код памылкі: %1$s)" - + + "Памылка падключэння Wi‑Fi-тэлефаніі ў вашага аператара: %1$s" + "%s" "Wi-Fi-тэлефанія %s" @@ -161,10 +164,8 @@ "Апрацоўваецца занадта шмат запытаў. Паспрабуйце яшчэ раз пазней." "Памылка ўваходу ва ўлiковы запiс %1$s" "Сінхранізацыя" - - - - + "Немагчыма сінхранізаваць" + "Вы прабавалі выдаліць надта шмат элементаў %s." "Памяць планшэта поўная. Выдаліце некаторыя файлы, каб вызваліць месца." "Сховішча гадзінніка перапоўнена. Выдаліце некаторыя файлы, каб вызваліць месца." "Сховішча тэлевізара перапоўнена. Выдаліце некаторыя файлы, каб вызваліць месца." @@ -278,40 +279,31 @@ "Пераключыцца на працоўны профіль" "Кантакты" "атрымліваць доступ да вашых кантактаў" - - + "Дазволіць праграме <b>%1$s</b> доступ да вашых кантактаў?" "Месцазнаходжанне" "атрымліваць доступ да месцазнаходжання гэтай прылады" - - + "Дазволіць праграме <b>%1$s</b> доступ да звестак аб месцазнаходжанні гэтай прылады?" "Каляндар" "атрымліваць доступ да вашага календара" - - + "Дазволіць праграме <b>%1$s</b> доступ да вашага календара?" "SMS" "адпраўляць і праглядаць SMS-паведамленні" - - + "Дазволіць праграме <b>%1$s</b> адпраўляць і праглядаць SMS-паведамленні?" "Сховішча" "атрымліваць доступ да фатаграфій, медыяфайлаў і файлаў на вашай прыладзе" - - + "Дазволіць праграме <b>%1$s</b> доступ да фота, мультымедыя і файлаў на вашай прыладзе?" "Мікрафон" "запісваць аўдыя" - - + "Дазволіць праграме <b>%1$s</b> запісваць аўдыя?" "Камера" "рабіць фатаздымкі і запісваць відэа" - - + "Дазволіць праграме <b>%1$s</b> рабіць фота і запісваць відэа?" "Тэлефон" "рабіць тэлефонныя выклікі і кіраваць імі" - - + "Дазволіць праграме <b>%1$s</b> рабіць тэлефонныя выклікі і кіраваць імі?" "Датчыкі цела" "атрымліваць з датчыка даныя асноўных фізіялагічных паказчыкаў" - - + "Дазволіць праграме <b>%1$s</b> доступ да даных з датчыкаў пра вашы асноўныя фізіялагічныя паказчыкі?" "Атрымліваць змесціва вакна" "Аналізаваць змесціва актыўнага вакна." "Уключаць Азнаямленне дотыкам" @@ -498,6 +490,8 @@ "Дазваляе прыкладаннzv спалучацца з тэгамі, картамі і счытваючымі прыладамі Near Field Communication (NFC)." "адключэнне блакiроўкi экрана" "Дазваляе прыкладанням адключаць блакiроўку клавіятуры і любыя сродкі абароны, звязаныя з паролем. Прыкладам гэтага з\'яўляецца адключэнне тэлефонам блакiроўкi клавіятуры пры атрыманні ўваходнага выкліку і паўторнае ўключэнне блакiроўкi клавіятуры, калі выклік завершаны." + "выкарыстоўваць біяметрычнае абсталявання" + "Дазваляе праграме выкарыстоўваць для аўтэнтыфікацыі біяметрычнае абсталяванне" "кіраваць апаратнымі сродкамі для адбіткаў пальцаў" "Дазваляе праграме выкарыстоўваць спосабы дадання і выдалення шаблонаў адбіткаў пальцаў для выкарыстання." "выкарыстоўваць апаратныя сродкі для адбіткаў пальцаў" @@ -510,6 +504,8 @@ "Не распазнаны" + + "Апаратныя сродкі адбіткаў пальцаў недаступныя." "Адбіткі пальцаў нельга захаваць. Выдаліце існы адбітак." "Час чакання адбіткаў пальцаў выйшаў. Паспрабуйце яшчэ раз." @@ -1056,14 +1052,23 @@ "Метад уводу" "Дзеянні з тэкстам" "Электронная пошта" + "Напісаць электронны ліст" "Выклікаць" + "Звязацца з абанентам" "Знайсці" + "Паказаць адрас на карце" "Адкрыць" + "Адкрыць URL у браўзеры" "Паведамленне" + "Адправіць паведамленне" "Дадаць" + "Дадаць у кантакты" "Прагледзець" + "Паказаць выбраны час у календары" "Графік" + "Запланаваць падзею ў выбраны час" "Сачыць" + "Адсочваць рэйс" "Месца для захавання на зыходзе" "Некаторыя сістэмныя функцыі могуць не працаваць" "Не хапае сховішча для сістэмы. Пераканайцеся, што ў вас ёсць 250 МБ свабоднага месца, і перазапусціце." @@ -1157,8 +1162,7 @@ "Адкрыць праграму \"%1$s\"" "Праграма \"%1$s\" будзе закрыта. Даныя не будуць захаваны" "Працэс %1$s перавысіў ліміт памяці" - - + "Быў сабраны дамп кучы; абагульце дотыкам." "Абагуліць дамп дынамічнай вобласці?" "Працэс %1$s перавысіў ліміт памяці працэсу %2$s. Дамп дынамічнай вобласці даступны для вас, вы можаце абагуліць яго з распрацоўшчыкам. Будзьце асцярожныя: гэты дамп дынамічнай вобласці можа ўтрымліваць асабістую інфармацыю, да якой маюць доступ праграмы." "Выберыце дзеянне для тэкста" @@ -1197,8 +1201,7 @@ "Падключыцеся да адкрытай сеткі Wi-Fi" "Падключэнне да сеткі Wi‑Fi аператара" - - + "Падключэнне да сеткі Wi‑Fi" "Выканана падключэнне да адкрытай сеткі Wi‑Fi" "Не атрымалася падключыцца да адкрытай сеткі Wi‑Fi" "Дакраніцеся, каб убачыць усе сеткі" @@ -1314,33 +1317,49 @@ "%s паказв. паверх іншых праграм" "Калі вы не хочаце, каб праграма %s выкарыстоўвала гэту функцыю, дакраніцеся, каб адкрыць налады і адключыць гэта." "Выключыць" - "Падрыхтоўка %s" - "Праверка на наяўнасць памылак" - "Выяўлены новы носьбіт %s" + + + + + + + + "Для перадачы фатаграфій і медыяфайлаў" - "Пашкоджаны носьбіт %s" - "Носьбіт %s пашкоджаны. Дакраніцеся, каб выправіць." - "Носьбіт %s пашкоджаны. Выберыце, каб выправіць." + + + + "%s не падтрымліваецца" "Гэта прылада не падтрымлівае носьбіт %s. Дакраніцеся, каб наладзіць яго ў фармаце, які падтрымліваецца." "Гэта прылада не падтрымлівае носьбіт %s. Выберыце, каб наладзіць яго ў фармаце, які падтрымліваецца." "Носьбіт %s нечакана выняты" - "Адключыце носьбіт %s, перш чым вымаць яго, каб пазбегнуць страты даных." - "Носьбіт %s выдалены" - "Носьбіт %s выдалены; устаўце новы" - "Выманне %s працягваецца..." - "Не выдаляць" + + + + + + + + + + "Наладзіць" "Выняць" "Праглядзець" "%s адсутнічае" - "Паўторна ўстаўце прыладу" + + "Перамяшчэнне %s" "Перамяшчэнне даных" - "Перамяшчэнне завершана" - "Даныя перамешчаны на %s" - "Не атрымалася перамясціць даныя" - "Даныя пакінуты ў зыходным месцы" + + + + + + + + "Носьбіт выдалены" "Носьбіт выняты" "Праверка..." @@ -1399,17 +1418,14 @@ "Падключэнне заўсёды ўключанага VPN..." "Заўсёды ўключаны i падключаны VPN" "Адключана ад заўсёды ўключанай VPN" - - + "Няма падключэння да пастаяннай VPN" "Змяніць налады сеткі ці VPN" "Выберыце файл" "Файл не выбраны" "Скінуць" "Перадаць" - - - - + "Праграма для ваджэння ўключана" + "Націсніце, каб выйсці з праграмы для ваджэння." "USB-мадэм або кропка доступу Wi-Fi актыўныя" "Дакраніцеся, каб наладзіць." "Рэжым мадэма адключаны" @@ -1741,8 +1757,7 @@ "Усталяваны вашым адміністратарам" "Абноўлены вашым адміністратарам" "Выдалены вашым адміністратарам" - - + "Каб падоўжыць час працы акумулятара, у рэжыме эканоміі зараду памяншаецца прадукцыйнасць вашай прылады, абмяжоўваецца выкарыстанне вібрацыі, службаў вызначэння месцазнаходжання і большасці задач фонавай перадачы даных. Электронная пошта, абмен паведамленнямі і іншыя праграмы, якія патрабуюць сінхранізацыі, могуць абнаўляцца, толькі калі вы іх адкрыеце.\n\nРэжым эканоміі зараду адключаецца аўтаматычна, калі прылада зараджаецца." "Каб паменшыць выкарыстанне даных, Эканомія трафіку не дазваляе некаторым праграмам адпраўляць ці атрымліваць даныя ў фонавым рэжыме. Праграма, якую вы зараз выкарыстоўваеце, можа атрымліваць доступ да даных, але можа рабіць гэта радзей. Гэта можа азначаць, напрыклад, што відарысы не паказваюцца, пакуль вы не дакраняцеся да іх." "Уключыць Эканомію трафіка?" "Уключыць" @@ -1809,22 +1824,14 @@ "%1$s адключыў(-ла) гук" "На вашай прыладзе ўзнікла ўнутраная праблема, і яна можа працаваць нестабільна, пакуль вы не зробіце скід да заводскіх налад." "На вашай прыладзе ўзнікла ўнутраная праблема. Для атрымання дадатковай інфармацыі звярніцеся да вытворцы." - - - - - - - - - - - - - - - - + "USSD-запыт заменены на стандартны выклік" + "USSD-запыт заменены на SS-запыт" + "Заменена на новы USSD-запыт" + "USSD-запыт заменены на відэавыклік" + "SS-запыт заменены на стандартны выклік" + "SS-запыт заменены на відэавыклік" + "SS-запыт заменены на USSD-запыт" + "Зроблена замена на новы SS-запыт" "Працоўны профіль" "Разгарнуць" "Згарнуць" @@ -1926,6 +1933,14 @@ "Няма SIM-карты для дзеянняў з голасам" "Дзеянні з голасам для гэтай SIM-карты не дапускаюцца" "Дзеянні з голасам для гэтага тэлефона не дапускаюцца" + + + + + + + + "Выплыўное акно" "+ %1$d" "Ярлык адносіцца да старэйшай версіі праграмы або несумяшчальны з ёю" @@ -1946,8 +1961,6 @@ "Гэта новае дзеянне. Націсніце, каб перайсці ў налады." "Зменены налады рэжыму \"Не турбаваць\"" "Націсніце, каб паглядзець заблакіраванае." - - - - + "Сістэма" + "Налады" diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index 5ef9c72a2b8c27a06876cb42186e2ed38dc49034..c31decc867fec793de1ef399fb843f6bd31c78d6 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -82,6 +82,7 @@ "Няма услуга за гласови обаждания" "Няма достъп до гласовата услуга, нито до спешните обаждания" "Временно е изключено от оператора ви" + "Временно е изключено от оператора ви за SIM карта %d" "Не може да се установи връзка с мобилната мрежа" "Изберете друга предпочитана мрежа. Докоснете за промяна." "Няма достъп до спешните обаждания" @@ -120,12 +121,13 @@ "Банерът за роуминг е включен" "Банерът за роуминг е изключен" "Търси се покритие" - - + "Функцията за обаждания през Wi-Fi не можа да бъде настроена" "За да извършвате обаждания и да изпращате съобщения през Wi-Fi, първо, помолете оператора си да настрои тази услуга. След това включете отново функцията за обаждания през Wi-Fi от настройките. (Код на грешката: %1$s)" - + + "При регистрирането на функцията за обаждания през Wi-Fi с оператора ви възникна грешка: %1$s" + "%s" "%s – обаждания през Wi-Fi" @@ -481,6 +483,8 @@ "Разрешава на приложението да комуникира с маркери, карти и четци, ползващи комуникация в близкото поле (NFC)." "деактивиране на заключването на екрана ви" "Разрешава на приложението да деактивира заключването на клавиатурата и свързаната защита с парола. Например телефонът деактивира заключването при получаване на входящо обаждане и после го активира отново, когато обаждането завърши." + "използване на хардуера за биометрични данни" + "Разрешава на приложението да използва хардуера за биометрични данни с цел удостоверяване" "управление на хардуера за отпечатъци" "Разрешава на приложението да извиква начини за добавяне и изтриване на шаблони за отпечатъци, които да се използват." "използване на хардуера за отпечатъци" @@ -493,6 +497,7 @@ "Не е разпознато" + "Отпечатъкът е удостоверен" "Хардуерът за отпечатъци не е налице." "Отпечатъкът не може да бъде съхранен. Моля, премахнете съществуващ." "Времето за изчакване за отпечатък изтече. Опитайте отново." @@ -1005,14 +1010,23 @@ "Метод на въвеждане" "Действия с текста" "Имейл" + "Изпращане на имейл до избрания адрес" "Обаждане" + "Обаждане на избрания телефонен номер" "Намиране" + "Намиране на избрания адрес" "Отваряне" + "Отваряне на избрания URL адрес" "Съобщение" + "Изпращане на съобщение до избрания телефонен номер" "Добавяне" + "Добавяне към контактите" "Преглед" + "Преглед на избраната дата в календара" "Насрочване" + "Насрочване на събитие за избраната дата" "Проследяване" + "Проследяване на избрания полет" "Мястото в хранилището е на изчерпване" "Възможно е някои функции на системата да не работят" "За системата няма достатъчно място в хранилището. Уверете се, че имате свободни 250 МБ, и рестартирайте." @@ -1141,8 +1155,7 @@ "Свързване с отворена Wi‑Fi мрежа" "Свържете се с Wi‑Fi мрежа на оператор" - - + "Установява се връзка с Wi-Fi мрежата" "Установихте връзка с Wi-Fi мрежата" "Не можа да се установи връзка с Wi‑Fi мрежата" "Докоснете, за да видите всички мрежи" @@ -1258,33 +1271,34 @@ "%s се показва в/у други прилож." "Ако не искате %s да използва тази функция, докоснете, за да отворите настройките, и я изключете." "Изключване" - "%s: Подготвя се" - "Проверява се за грешки" - "Открито е ново хранилище (%s)" + "%s се проверява…" + "Текущото съдържание се преглежда" + "Ново хранилище (%s)" + "Докоснете, за да настроите" "За прехвърляне на снимки и мултимедия" - "%s: Има повреда" - "Носителят (%s) е повреден. Докоснете, за да отстраните проблема." + "Проблем с хранилището (%s)" + "Докоснете за коригиране" "Носителят (%s) е повреден. Изберете, за да отстраните проблема." "%s: Не се поддържа" "Устройството не поддържа този носител (%s). Докоснете, за да настроите в поддържан формат." "Устройството не поддържа този носител (%s). Изберете, за да настроите в поддържан формат." "%s: Неочаквано премахване" - "Спрете хранилището (%s), преди да го извадите, за да не загубите данни" - "Премахнахте %s" - "Хранилището (%s) е премахнато. Поставете ново" - "%s: Още се изважда…" - "Не премахвайте" + "Спрете носителя, преди да го премахнете, за да избегнете загубата на съдържание" + "Премахнахте %s" + "Някои функции може да не работят правилно. Поставете ново хранилище." + "%s се спира" + "Не премахвайте" "Настройване" "Изваждане" "Изследване" "Липсва %s" - "Поставете отново това у-во" + "Поставете отново устройството" "%s се премества" "Данните се преместват" - "Преместването завърши" - "Данните са преместени в/ъв %s" - "Данните не бяха преместени" - "Данните останаха в първоначалното местоположение" + "Прехвърлянето на съдърж. завърши" + "Съдържанието е преместено в хранилището (%s)" + "Съдърж. не можа да се премести" + "Опитайте да преместите съдържанието отново" "Премахнато" "Извадено" "Проверява се…" @@ -1676,8 +1690,7 @@ "Инсталирано от администратора ви" "Актуализирано от администратора ви" "Изтрито от администратора ви" - - + "С цел удължаване на живота на батерията режимът за запазването й намалява ефективността на устройството ви и ограничава или изключва вибрирането, услугите за местоположение и преноса на данни на заден план. Приложенията за електронна поща, съобщения и др., които разчитат на синхронизиране, може да не се актуализират, освен ако не ги отворите.\n\nРежимът за запазване на батерията се изключва автоматично, когато устройството ви се зарежда." "С цел намаляване на преноса на данни функцията за икономия на данни не позволява на някои приложения да изпращат или получават данни на заден план. Понастоящем използвано от вас приложение може да използва данни, но по-рядко. Това например може да означава, че изображенията не се показват, докато не ги докоснете." "Ще вкл. ли Икономия на данни?" "Включване" @@ -1728,22 +1741,14 @@ "Заглушено от %1$s" "Възникна вътрешен проблем с устройството ви. То може да е нестабилно, докато не възстановите фабричните настройки." "Възникна вътрешен проблем с устройството ви. За подробности се свържете с производителя." - - - - - - - - - - - - - - - - + "USSD заявката е променена на обикновено обаждане" + "USSD заявката е променена на SS заявка" + "Променено на нова USSD заявка" + "USSD заявката е променена на видеообаждане" + "SS заявката е променена на обикновено обаждане" + "SS заявката е променена на видеообаждане" + "SS заявката е променена на USSD заявка" + "Променено на нова SS заявка" "Служебен потребителски профил" "Разгъване" "Свиване" @@ -1841,6 +1846,10 @@ "SIM картата не е обезпечена за гласови услуги" "Гласовите услуги не са разрешени за SIM картата" "Гласовите услуги не са разрешени за телефона" + "SIM карта %d не е разрешена" + "SIM карта %d не е обезпечена" + "SIM карта %d не е разрешена" + "SIM карта %d не е разрешена" "Изскачащ прозорец" "+ %1$d" "Версията на приложението е понижена или не е съвместима с този пряк път" diff --git a/core/res/res/values-bn/strings.xml b/core/res/res/values-bn/strings.xml index e189d2f5ca2994ec36ee9913481199f7fcb03077..80bf8cffde283868430f8c49fa55ef495fd1719a 100644 --- a/core/res/res/values-bn/strings.xml +++ b/core/res/res/values-bn/strings.xml @@ -82,6 +82,8 @@ "ভয়েস পরিষেবা নেই" "ভয়েস পরিষেবা অথবা জরুরি কলের সুবিধা নেই" "পরিষেবা প্রদানকারী এই সুবিধা সাময়িকভাবে বন্ধ রেখেছে" + + "মোবাইল নেটওয়ার্কে কানেক্ট করা যাচ্ছে না" "পছন্দের নেটওয়ার্ক পরিবর্তন করে দেখুন। অন্য নেটওয়ার্ক বেছে নিতে ট্যাপ করুন।" "জরুরি কল করা যাবে না" @@ -120,12 +122,13 @@ "রোমিং ব্যানার চালু আছে" "রোমিং ব্যানার বন্ধ আছে" "পরিষেবা অনুসন্ধান করা হচ্ছে" - - + "ওয়াই-ফাই কলিং সেট-আপ করা যায়নি" "ওয়াই-ফাই এর মাধ্যমে কল করতে ও মেসেজ পাঠাতে, প্রথমে আপনার পরিষেবা প্রদানকারীকে এই পরিষেবার সেট-আপ করতে বলুন। তারপর আবার সেটিংস থেকে ওয়াই-ফাই কলিং চালু করুন। (ত্রুটি কোড: %1$s)" - + + "পরিষেবা প্রদানকারীতে ওয়াই-ফাই কলিং রেজিস্টার করতে সমস্যা হয়েছে: %1$s" + "%s" "%s ওয়াই-ফাই কলিং" @@ -159,10 +162,8 @@ "অনেকগুলি অনুরোধের প্রক্রিয়া করা হচ্ছে৷ পরে আবার চেষ্টা করুন৷" "%1$s এ প্রবেশ করায় ত্রুটি" "সিঙ্ক" - - - - + "সিঙ্ক করা যাচ্ছে না" + "অনেক %s মুছে ফেলার চেষ্টা করেছেন।" "ট্যাবলেটের স্টোরেজে আর জায়গা খালি নেই৷ জায়গা খালি করতে কিছু ফাইল মুছে দিন৷" "ঘড়ির স্টোরেজে আর জায়গা খালি নেই৷ জায়গা খালি করতে কিছু ফাইল মুছে দিন৷" "টিভির স্টোরেজ পূর্ণ হয়েছে। জায়গা খালি করতে কিছু ফাইল মুছে ফেলুন৷" @@ -272,40 +273,31 @@ "এর বদলে কাজের প্রোফাইল ব্যবহার করুন" "পরিচিতি" "আপনার পরিচিতিগুলিতে অ্যাক্সেস" - - + "<b>%1$s</b>-কে আপনার পরিচিতিতে অ্যাক্সেস দেবেন?" "অবস্থান" "এই ডিভাইসের অবস্থান অ্যাক্সেস" - - + "<b>%1$s</b>-কে এই ডিভাইসের লোকেশন অ্যাক্সেস করতে দেবেন?" "ক্যালেন্ডার" "আপনার ক্যালেন্ডারে অ্যাক্সেস" - - + "<b>%1$s</b>-কে আপনার ক্যালেন্ডারে অ্যাক্সেস দেবেন?" "SMS" "এসএমএসগুলি পাঠাতে এবং দেখতে" - - + "<b>%1$s</b>-কে এসএমএস দেখতে ও পাঠাতে দেবেন?" "স্টোরেজ" "আপনার ডিভাইসে ফটো, মিডিয়া এবং ফাইলগুলিতে অ্যাক্সেস" - - + "<b>%1$s</b>-কে আপনার ডিভাইসের ফটো, মিডিয়া এবং ফাইলে অ্যাক্সেস দেবেন?" "মাইক্রোফোন" "অডিও রেকর্ড" - - + "<b>%1$s</b>-কে অডিও রেকর্ড করতে দেবেন?" "ক্যামেরা" "ছবি তোলা এবং ভিডিও রেকর্ড" - - + "<b>%1$s</b>-কে ফটো তুলতে এবং ভিডিও রেকর্ড করতে দেবেন?" "ফোন" "ফোন কলগুলি এবং পরিচালনা" - - + "<b>%1$s</b>-কে কল করতে এবং কল পরিচালনা করতে দেবেন?" "বডি সেন্সরগুলি" "আপনার অত্যাবশ্যক লক্ষণগুলির সম্পর্কে সেন্সর ডেটা অ্যাক্সেস করে" - - + "<b>%1$s</b>-কে সেন্সর থেকে আপনার ভাইটাল সাইনের ডেটা অ্যাক্সেস করতে দেবেন?" "উইন্ডোর কন্টেন্ট পুনরুদ্ধার করে" "আপনি ইন্টারঅ্যাক্ট করছেন এমন একটি উইন্ডোর সামগ্রীকে সযত্নে নিরীক্ষণ করে৷" "স্পর্শের মাধ্যমে অন্বেষণ করা চালু করুন" @@ -492,6 +484,10 @@ "অ্যাপ্লিকেশানকে নিয়ার ফিল্ড কমিউনিকেশন (NFC) ট্যাগ, কার্ড এবং রিডারগুলির সাথে যোগাযোগ করতে দেয়৷" "আপনার স্ক্রিন লক অক্ষম করুন" "কী-লক এবং যেকোনো সংশ্লিষ্ট পাসওয়ার্ড সুরক্ষা অক্ষম করতে অ্যাপ্লিকেশানটিকে মঞ্জুর করে৷ উদাহরণস্বরূপ, একটি ইনকামিং ফোন কল গ্রহণ করার সময়ে ফোনটি কী-লক অক্ষম করে, তারপরে কল শেষ হয়ে গেলে কী-লকটিকে আবার সক্ষম করে৷" + + + + "আঙ্গুলের ছাপ নেওয়ার হার্ডওয়্যার পরিচালনা করুন" "ব্যবহার করার জন্য আঙ্গুলের ছাপের টেম্প্লেটগুলি যোগ করা এবং মোছার পদ্ধতিগুলি গ্রহন করতে অ্যাপ্লিকেশানটিতে অমুমতি দেয়৷" "আঙ্গুলের ছাপ নেওয়ার হার্ডওয়্যার ব্যবহার করুন" @@ -504,6 +500,8 @@ "স্বীকৃত নয়" + + "আঙ্গুলের ছাপ নেওয়ার হার্ডওয়্যার অনুপলব্ধ৷" "আঙ্গুলের ছাপ সংরক্ষণ করা যাবে না৷ অনুগ্রহ করে একটি বিদ্যমান আঙ্গুলের ছাপ সরান৷" "আঙ্গুলের ছাপ নেওয়ার সময়সীমা শেষ হযেছে৷ আবার চেষ্টা করুন৷" @@ -1016,14 +1014,32 @@ "ইনপুট পদ্ধতি" "পাঠ্য ক্রিয়াগুলি" "ইমেল" + + "কল" + + "অবস্থান নির্ণয় করুন" + + "খুলুন" + + "মেসেজ" + + "যোগ করুন" + + "দেখুন" + + "সময়সূচী" + + "ট্র্যাক" + + "স্টোরেজ পূর্ণ হতে চলেছে" "কিছু কিছু সিস্টেম ক্রিয়াকলাপ কাজ নাও করতে পারে" "সিস্টেমের জন্য যথেষ্ট স্টোরেজ নেই৷ আপনার কাছে ২৫০এমবি ফাঁকা স্থান রয়েছে কিনা সে বিষয়ে নিশ্চিত হন এবং সিস্টেম চালু করুন৷" @@ -1117,8 +1133,7 @@ "%1$s খুলুন" "সেভ না করেই %1$s বন্ধ হবে" "%1$s মেমরি সীমা অতিক্রম করেছে" - - + "হিপ ডাম্প সংগ্রহ করা হয়েছে। শেয়ার করতে ট্যাপ করুন।" "হিপ ডাম্প শেয়ার করবেন?" "%1$s প্রক্রিয়াটি তার %2$s এর মেমরি সীমা অতিক্রম করেছে৷ তার ডেভেলপারের সাথে শেয়ার করার জন্য একটি হিপ ডাম্প উপলব্ধ৷ সতর্কতা অবলম্বন করুন: এই হিপ ডাম্পে অ্যাপ্লিকেশানটির অ্যাক্সেস আছে এমন আপনার যেকোন ব্যক্তিগত তথ্য থাকতে পারে৷" "পাঠ্যের জন্য একটি কাজ বেছে নিন" @@ -1153,8 +1168,7 @@ "উন্মুক্ত ওয়াই-ফাই নেটওয়ার্কে সংযোগ করুন" "পরিষেবা প্রদানকারীর ওয়াই-ফাই নেটওয়ার্কে সংযোগ করুন" - - + "ওয়াই-ফাই নেটওয়ার্কে কানেক্ট করা হচ্ছে" "উন্মুক্ত ওয়াই-ফাই নেটওয়ার্কে সংযুক্ত করা হয়েছে" "ওয়াই-ফাই নেটওয়ার্কে সংযোগ করা গেল না" "সমস্ত নেটওয়ার্ক দেখতে ট্যাপ করুন" @@ -1271,33 +1285,49 @@ "%s অন্যান্য অ্যাপের ওপর প্রদর্শিত হচ্ছে" "%s কে এই বৈশিষ্ট্যটি ব্যবহার করতে দিতে না চাইলে, ট্যাপ করে সেটিংসে যান ও বৈশিষ্ট্যটি বন্ধ করে দিন।" "বন্ধ করুন" - "%s প্রস্তুত করা হচ্ছে" - "ত্রুটি রয়েছে কিনা পরীক্ষা করা হচ্ছে" - "নতুন %s শনাক্ত করা হয়েছে" + + + + + + + + "ফটো এবং মিডিয়া ট্রান্সফার" - "%s ত্রুটিপূর্ণ" - "%s ত্রুটিপূর্ণ৷ ঠিক করতে আলতো চাপুন৷" - "%s ত্রুটিপূর্ণ। মেরামত করতে বেছে নিন।" + + + + "%s অসমর্থিত" "এই ডিভাইসটি %s সমর্থন করে না। কোনো সমর্থিত ফর্ম্যাটে সেট আপ করতে আলতো চাপুন।" "এই ডিভাইসটি %s সমর্থন করে না। কোনো সমর্থিত ফর্ম্যাটে সেট আপ করতে চাইলে বেছে নিন।" "%s অপ্রত্যাশিতভাবে মুছে ফেলা হয়েছে" - "ডেটা যাতে হারিয়ে না যায় তার জন্য সরানোর আগে %s আনমাউন্ট করুন" - "%s সরানো হয়েছে" - "%s মুছে ফেলা হয়েছে; নতুন একটি ঢোকান" - "এখনও %s সরিয়ে ফেলা হচ্ছে..." - "সরাবেন না" + + + + + + + + + + "সেট আপ করুন" "বের করে নিন" "ঘুরে দেখুন" "%s অনুপস্থিত" - "এই ডিভাইসটিকে আবার সন্নিবেশ করান" + + "%s সরানো হচ্ছে" "ডেটা সরানো হচ্ছে" - "সরানো সম্পূর্ণ হয়েছে" - "ডেটা %s এ সরানো হয়েছে" - "ডেটা সরানো যায়নি" - "মূল অবস্থানে ডেটা রাখুন" + + + + + + + + "সরানো হয়েছে" "সরিয়ে দেওয়া হয়েছে" "পরীক্ষা করা হচ্ছে..." @@ -1356,17 +1386,14 @@ "সর্বদা-চালু VPN সংযুক্ত হচ্ছে..." "সর্বদা-চালু VPN সংযুক্ত হয়েছে" "সবসময়-চালু VPN এর সংযোগ বিচ্ছিন্ন আছে" - - + "সবসময়-চালু VPN-এর সাথে কানেক্ট করা যাচ্ছে না" "নেটওয়ার্ক অথবা VPN সেটিংস পরিবর্তন করুন" "ফাইল বেছে নিন" "কোনো ফাইল নির্বাচন করা হয়নি" "আবার সেট করুন" "জমা দিন" - - - - + "ড্রাইভিং অ্যাপ চালু আছে" + "ড্রাইভিং অ্যাপ বন্ধ করতে ট্যাপ করুন।" "টিথারিং বা হটস্পট সক্রিয় আছে" "সেট আপ করার জন্য আলতো চাপুন৷" "টিথারিং অক্ষম করা আছে" @@ -1692,8 +1719,7 @@ "আপনার প্রশাসক ইনস্টল করেছেন" "আপনার প্রশাসক আপডেট করেছেন" "আপনার প্রশাসক মুছে দিয়েছেন" - - + "ব্যাটারির চার্জ যাতে আরও বেশিক্ষণ থাকে, তার জন্য ব্যাটারি সেভার আপনার ডিভাইসের পারফরম্যান্স হ্রাস করে এবং ভাইব্রেশন, লোকেশন ভিত্তিক পরিষেবা ও ব্যাকগ্রাউন্ড ডেটা সীমিত অথবা বন্ধ করে দেয়৷ ইমেল, মেসেজ এবং সিঙ্কের উপর নির্ভরশীল অন্যান্য অ্যাপগুলি যতক্ষণ না আপনি নিজে চালু করবেন, ততক্ষণ সেগুলি আপডেট নাও হতে পারে।\n\nডিভাইস চার্জে বসালে ব্যাটারি সেভার নিজে থেকেই বন্ধ হয়ে যায়৷" "ডেটার ব্যবহার কমাতে সহায়তা করার জন্য, ডেটা সেভার পটভূমিতে কিছু অ্যাপ্লিকেশনকে ডেটা পাঠাতে বা গ্রহণ করতে বাধা দেয়৷ আপনি বর্তমানে এমন একটি অ্যাপ্লিকেশন ব্যবহার করছেন যেটি ডেটা অ্যাক্সেস করতে পারে, তবে সেটি কমই করে৷ এর ফলে যা হতে পারে, উদাহরণস্বরূপ, আপনি ছবিগুলিতে আলতো চাপ না দেওয়া পর্যন্ত সেগুলি প্রদর্শিত হবে না৷" "ডেটা সেভার চালু করবেন?" "চালু করুন" @@ -1744,22 +1770,14 @@ "%1$s দ্বারা নিঃশব্দ করা হয়েছে" "আপনার ডিভাইসে একটি অভ্যন্তরীন সমস্যা হয়েছে, এবং আপনি যতক্ষণ না পর্যন্ত এটিকে ফ্যাক্টরি ডেটা রিসেট করছেন ততক্ষণ এটি ঠিকভাবে কাজ নাও করতে পারে৷" "আপনার ডিভাইসে একটি অভ্যন্তরীন সমস্যা হয়েছে৷ বিস্তারিত জানার জন্য প্রস্তুতকারকের সাথে যোগাযোগ করুন৷" - - - - - - - - - - - - - - - - + "USSD অনুরোধ সাধারণ কলে পরিবর্তন করা হয়েছে" + "USSD অনুরোধ SS অনুরোধে পরিবর্তন করা হয়েছে" + "নতুন USSD অনুরোধে পরিবর্তন করা হয়েছে" + "USSD অনুরোধ ভিডিও কলে পরিবর্তন করা হয়েছে" + "SS অনুরোধ সাধারণ কলে পরিবর্তন করা হয়েছে" + "SS অনুরোধ ভিডিও কলে পরিবর্তন করা হয়েছে" + "SS অনুরোধ USSD অনুরোধে পরিবর্তন করা হয়েছে" + "নতুন SS অনুরোধে পরিবর্তন করা হয়েছে" "কর্মস্থলের প্রোফাইল" "বড় করুন" "সঙ্কুচিত করুন" @@ -1857,6 +1875,14 @@ "সিমটি ভয়েস কলের জন্য প্রস্তুত নয়" "এই সিম দিয়ে ভয়েস কল করা যাবে না" "এই ফোন দিয়ে ভয়েস কল করা যাবে না" + + + + + + + + "পপ-আপ উইন্ডো" "+ %1$dটি" "অ্যাপের ভার্সন ডাউনগ্রেড করা হয়েছে অথবা এই শর্টকাটের জন্য উপযুক্ত নয়" @@ -1877,8 +1903,6 @@ "এটি নতুন বৈশিষ্ট্য। পরিবর্তন করতে ট্যাপ করুন।" "\'বিরক্ত করবেন না\' মোডের সেটিং বদলে গেছে" "কী কী ব্লক করা আছে তা দেখতে ট্যাপ করুন।" - - - - + "সিস্টেম" + "সেটিংস" diff --git a/core/res/res/values-bs/strings.xml b/core/res/res/values-bs/strings.xml index 3e903de472b08572b35c1aba61169da8784edf3f..70e51b93fe3137b5e84f3ec6e1624bf4b3af2ab4 100644 --- a/core/res/res/values-bs/strings.xml +++ b/core/res/res/values-bs/strings.xml @@ -83,6 +83,7 @@ "Nema usluge govornih poziva" "Nema glasovne usluge ili hitnih poziva" "Privremeno isključio mobilni operater" + "Privremeno isključio mobilni operater za SIM %d" "Nije moguće dosegnuti mobilnu mrežu" "Pokušajte promijeniti preferiranu mrežu. Dodirnite za promjenu." "Hitni pozivi su nedostupni" @@ -121,12 +122,13 @@ "Oznaka da je uređaj u roamingu uključena" "Oznaka da je uređaj u roamingu ugašena" "Traženje usluge" - - + "Nije moguće postaviti Wi-Fi pozivanje" "Da biste pozivali i slali poruke koristeći Wi-Fi mrežu, prvo zatražite od operatera da postavi tu uslugu. Zatim ponovo uključite Wi-Fi pozivanje u Postavkama. (Kôd greške: %1$s)" - + + "Došlo je do problema prilikom registracije pozivanja putem Wi-Fi mreže kod vašeg operatera: %1$s" + "%s" "Wi-Fi pozivanje preko operatera %s" @@ -160,10 +162,8 @@ "Trenutno se obrađuje previše zahtjeva. Pokušajte ponovo kasnije." "Greška u prijavi za račun %1$s" "Sinhroniziranje" - - - - + "Nije moguće sinhronizirati" + "Pokušali ste izbrisati previše sadržaja iz kategorije %s." "Pohrana tableta je puna. Izbrišite fajlove kako biste oslobodili prostor." "Prostor za gledanje je pun. Obrišite neke fajlove da oslobodite prostor." "Prostor TV-a za pohranu je pun. Obrišite neke fajlove da oslobodite prostor." @@ -275,40 +275,31 @@ "Pređite na radni profil" "Kontakti" "pristupa vašim kontaktima" - - + "Dozvoliti aplikaciji <b>%1$s</b> pristup vašim kontaktima?" "Lokacija" "pristupa lokaciji ovog uređaja" - - + "Dozvoliti aplikaciji <b>%1$s</b> pristup lokaciji ovog uređaja?" "Kalendar" "pristupa vašem kalendaru" - - + "Dozvoliti aplikaciji <b>%1$s</b> da pristupi vašem kalendaru?" "SMS" "šalje i pregleda SMS poruke" - - + "Dozvoliti aplikaciji <b>%1$s</b> slanje i pregled SMS poruka?" "Pohrana" "pristupa slikama, medijskim fajlovima i fajlovima na vašem uređaju" - - + "Dozvoliti aplikaciji <b>%1$s</b> pristup fotografijama, medijima i fajlovima na vašem uređaju?" "Mikrofon" "snima zvuk" - - + "Dozvoliti aplikaciji <b>%1$s</b> snimanje zvuka?" "Kamera" "slika i snima videozapise" - - + "Dozvoliti aplikaciji <b>%1$s</b> snimanje slika i videozapisa?" "Telefon" "poziva i upravlja pozivima" - - + "Dozvoliti aplikaciji <b>%1$s</b> uspostavljanje poziva i njihovo upravljanje?" "Tjelesni senzori" "pristupa podacima senzora o vašim vitalnim funkcijama" - - + "Dozvoliti aplikaciji <b>%1$s</b> pristup senzornim podacima o vašim vitalnim znacima?" "Preuzima sadržaj prozora" "Pregleda sadržaj prozora koji trenutno koristite." "Uključi opciju Istraživanje dodirom" @@ -495,6 +486,8 @@ "Dozvoljava aplikaciji komuniciranje sa NFC (komunikacija bliskog polja) oznakama, karticama i čitačima." "deaktivacija zaključavanja ekrana" "Omogućava aplikaciji deaktivaciju zaključane tastature i svih povezanih zaštita. Naprimjer, telefon deaktivira zaključavanje tastature kod dolaznog telefonskog poziva, a zatim ponovo aktivira zaključavanje tastature kada je poziv završen." + "koristi hardver za otiske prstiju" + "Omogućava aplikaciji da za autentifikaciju koristi hardver za otiske prstiju" "upravljanje hardverom za otiske prstiju" "Omogućava aplikaciji da koristi metode za dodavanje i brisanje šablona otisaka prstiju za upotrebu." "korištenje hardvera za otiske prstiju" @@ -507,6 +500,7 @@ "Nije prepoznat" + "Otisak prsta je potvrđen" "Hardver za otisak prsta nije dostupan." "Otisak prsta se ne može pohraniti. Uklonite postojeći otisak prsta." "Vremensko ograničenje za otisak prsta je isteklo. Pokušajte ponovo." @@ -1036,14 +1030,23 @@ "Način unosa" "Akcije za tekst" "E-pošta" + "E-pošta odabrane adrese" "Pozovite" + "Pozovite odabrani broj telefona" "Odredite lokaciju" + "Lokacija odabrane adrese" "Otvorite" + "Otvorite odabrani URL" "Poruka" + "Pošaljite poruku odabranom broju telefona" "Dodajte" + "Dodaj u kontakte" "Prikaži" + "Pogledajte odabrano vrijeme u kalendaru" "Zakaži" + "Zakažite događaj za odabrano vrijeme" "Prati" + "Pratite odabrani let" "Ponestaje prostora za pohranu" "Neke funkcije sistema možda neće raditi" "Nema dovoljno prostora za sistem. Obezbijedite 250MB slobodnog prostora i ponovo pokrenite uređaj." @@ -1139,8 +1142,7 @@ "Otvori aplikaciju %1$s" "Aplikacija %1$s će se zatvoriti bez pohranjivanja" "%1$s premašuje ograničenje memorije" - - + "Snimak dinamičkog stanja memorije je napravljen. Dodirnite za dijeljenje." "Želite li dijeliti snimak dinamičkog dijela memorije?" "Proces %1$s je premašio ograničenje procesne memorije od %2$s. Snimak dinamičkog dijela memorije vam je dostupan i možete ga dijeliti sa njegovim programerom. Budite oprezni: ovaj snimak dinamičkog dijela memorije može sadržavati vaše lične podatke kojima aplikacija ima pristup." "Biranje akcije za tekst" @@ -1177,8 +1179,7 @@ "Povežite se na otvorenu Wi‑Fi mrežu" "Povežite se na Wi‑Fi mrežu mobilnog operatera" - - + "Povezivanje na Wi-Fi mrežu" "Povezani ste na Wi‑Fi mrežu" "Nije se moguće povezati na Wi‑Fi mrežu" "Dodirnite da vidite sve mreže" @@ -1294,33 +1295,34 @@ "Aplikacija %s prekriva druge apl." "Ako ne želite da %s koristi ovu funkciju, dodirnite da otvorite postavke i isključite je." "Isključi" - "Priprema se %s" - "Provjera grešaka" - "Novi uređaj %s je otkriven" + "Provjeravanje medija %s…" + "Pregledanje trenutnog sadržaja" + "Novi medij %s" + "Dodirnite za postavke" "Za prebacivanje slika i medijskih fajlova" - "Uređaj %s je oštećen" - "Uređaj %s je oštećen. Dodirnite da biste popravili." + "Problem s medijem %s" + "Dodirnite da popravite" "Uređaj %s je oštećen. Odaberite za popravak." "Uređaj %s nije podržan" "Ovaj uređaj ne podržava uređaj %s. Dodirnite da biste ga postavili u podržanom formatu." "Ovaj uređaj ne podržava uređaj %s. Dodirnite da ga postavite u podržanom formatu." "Neočekivano uklonjen uređaj %s" - "Isključite uređaj %s prije uklanjanja da izbjegnete gubitak podataka" - "Uređaj %s je uklonjen" - "Uređaj %s je uklonjen, umetnite novi" - "Još uvijek se izbacuje %s…" - "Ne uklanjajte" + "Izbacite medij prije uklanjanja da izbjegnete gubitak sadržaja" + "Medij %s je uklonjen" + "Neke funkcionalnosti možda neće raditi ispravno. Ubacite novu memoriju." + "Izbacivanje medija %s" + "Nemojte uklanjati" "Postavi" "Izbaci" "Istraži" "%s nedostaje" - "Ponovo umetnite ovaj uređaj" + "Ponovo ubacite uređaj" "Premješta se %s" "Premještanje podataka" - "Premještanje je završeno" - "Podaci su premješteni na uređaj %s" - "Podaci se ne mogu premjestiti" - "Podaci su ostali na prvobitnoj lokaciji" + "Prijenos sadržaja je završen" + "Sadržaj je premješten na uređaj %s" + "Nije moguće premjestiti sadržaj" + "Pokušajte ponovo premjestiti sadržaj" "Uređaj je uklonjen" "Uređaj je izbačen" "Provjerava se..." @@ -1379,17 +1381,14 @@ "Povezivanje na uvijek aktivni VPN…" "Povezan na uvijek aktivni VPN" "Prekinuta je veza s uvijek uključenim VPN-om" - - + "Ne može se povezati na stalno uključen VPN" "Promijenite postavke mreže ili VPN-a" "Odabir fajla" "Nije izabran nijedan fajl" "Vraćanje na zadano" "Potvrdi" - - - - + "Aplikacija za vožnju je pokrenuta" + "Dodirnite za izlaz iz aplikacije za vožnju." "Uređaj dijeli vezu ili djeluje kao pristupna tačka" "Dodirnite za postavke" "Povezivanje putem mobitela je onemogućeno" @@ -1718,7 +1717,7 @@ "Instalirao je vaš administrator" "Ažurirao je vaš administrator" "Izbrisao je vaš administrator" - "Da bi se produljilo trajanje baterije, Štednja baterije smanjuje rad uređaja i ograničava ili isključuje vibraciju, usluge lokacije i pozadinske podatke. Aplikacije za e-poštu, slanje poruka i druge aplikacije koje se oslanjaju na sinkronizaciju možda se neće ažurirati ako ih ne otvorite.\n\nŠtednja baterije isključuje se automatski dok se uređaj puni." + "Za produženje vijeka trajanja baterije, Ušteda umanjuje performanse uređaja i ograničava ili isključuje vibriranje, usluge lokacije i pozadinske podatke. Moguće je da se aplikacije za e-poštu, razmjenu poruka i druge aplikacije koje se oslanjaju na sinhronizaciju neće ažurirati dok ih ne otvorite.\n\nUšteda baterije se automatski isključuje prilikom punjenja uređaja." "Da bi se smanjio prijenos podataka, usluga Ušteda podataka sprečava da neke aplikacije šalju ili primaju podatke u pozadini. Aplikacija koju trenutno koristite može pristupiti podacima, ali se to može desiti rjeđe. To može značiti, naprimjer, da se slike ne prikazuju sve dok ih ne dodirnete." "Uključiti Uštedu podataka?" "Uključi" @@ -1777,13 +1776,13 @@ "Ton isključila aplikacija %1$s" "Postoji problem u vašem uređaju i može biti nestabilan dok ga ne vratite na fabričke postavke." "Postoji problem u vašem uređaju. Za više informacija obratite se proizvođaču." - "USSD zahtjev promijenjen je u običan poziv" - "USSD zahtjev promijenjen je u SS zahtjev" + "USSD zahtjev je promijenjen u obični poziv" + "USSD zahtjev je promijenjen u SS zahtjev" "Promijenjeno u novi USSD zahtjev" - "USSD zahtjev promijenjen je u videopoziv" - "SS zahtjev promijenjen je u običan poziv" - "SS zahtjev promijenjen je u videopoziv" - "SS zahtjev promijenjen je u USSD zahtjev" + "USSD zahtjev je promijenjen u video poziv" + "SS zahtjev je promijenjen u obični poziv" + "SS zahtjev je promijenjen u video poziv" + "SS zahtjev je promijenjen u USSD zahtjev" "Promijenjeno u novi SS zahtjev" "Profil za posao" "Proširi" @@ -1884,6 +1883,10 @@ "SIM kartica nije dodijeljena za govor" "SIM kartica nije dozvoljena za govor" "Telefon nije dozvoljen za govor" + "SIM %d nije dozvoljen" + "SIM %d nije dodijeljen" + "SIM %d nije dozvoljen" + "SIM %d nije dozvoljen" "Iskočni prozor" "+ %1$d" "Instalirana je starija verzija aplikacije ili aplikacija nije kompatibilna s ovom prečicom" @@ -1904,8 +1907,6 @@ "Ovo je novo ponašanje. Dodirnite da promijenite." "Način rada Ne ometaj je promijenjen" "Dodirnite da provjerite šta je blokirano." - - - - + "Sistem" + "Postavke" diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index 132cffda605e16bd1522c6b66c1ae664886a3c66..bd3b60206a14fe99114e9fe85d786a8f5603ff0d 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -82,6 +82,8 @@ "Sense servei de veu" "No hi ha servei de veu ni trucades d\'emergència" "L\'operador de telefonia mòbil ho ha desactivat temporalment" + + "No es pot accedir a la xarxa mòbil" "Prova de canviar de xarxa preferida. Toca per canviar-la." "Les trucades d\'emergència no estan disponibles" @@ -120,12 +122,13 @@ "Bàner d\'itinerància activat" "Bàner d\'itinerància desactivat" "S\'està cercant el servei" - - + "No s\'ha pogut configurar la funció Trucades per Wi-Fi" "Per fer trucades i enviar missatges per Wi-Fi, primer has de demanar a l\'operador de telefonia mòbil que configuri aquest servei. Després, torna a activar les trucades per Wi-Fi a Configuració. (Codi d\'error: %1$s)" - + + "Hi ha hagut un problema en registrar la funció Trucades per Wi-Fi amb el teu operador de telefonia mòbil: %1$s" + "%s" "Trucada de Wi-Fi de: %s" @@ -159,10 +162,8 @@ "S\'estan processant massa sol·licituds. Torneu-ho a provar més tard." "Error d\'inici de sessió per a %1$s" "Sincronització" - - - - + "No es pot sincronitzar" + "S\'han provat de suprimir massa %s." "L\'emmagatzematge de la tauleta és ple. Suprimeix uns quants fitxers per alliberar espai." "L\'emmagatzematge del rellotge està ple. Suprimeix uns quants fitxers per alliberar espai." "L\'emmagatzematge del televisor està ple. Suprimeix uns quants fitxers per alliberar espai." @@ -272,40 +273,31 @@ "Canvia al perfil professional" "Contactes" "accedir als contactes" - - + "Vols permetre que <b>%1$s</b> accedeixi als contactes?" "Ubicació" "accedir a la ubicació del dispositiu" - - + "Vols permetre que <b>%1$s</b> accedeixi a la ubicació del dispositiu?" "Calendari" "accedir al calendari" - - + "Vols permetre que <b>%1$s</b> accedeixi al calendari?" "SMS" "enviar i llegir missatges SMS" - - + "Vols permetre que <b>%1$s</b> enviï i llegeixi missatges SMS?" "Emmagatzematge" "accedir a fotos, contingut multimèdia i fitxers del dispositiu" - - + "Vols permetre que <b>%1$s</b> accedeixi a les fotos, al contingut multimèdia i als fitxers del dispositiu?" "Micròfon" "gravar àudio" - - + "Vols permetre que <b>%1$s</b> gravi àudio?" "Càmera" "fer fotos i vídeos" - - + "Vols permetre que <b>%1$s</b> faci fotos i vídeos?" "Telèfon" "fer i gestionar trucades telefòniques" - - + "Vols permetre que <b>%1$s</b> faci trucades i les gestioni?" "Sensors corporals" "accedir a les dades del sensor sobre els signes vitals" - - + "Vols permetre que <b>%1$s</b> accedeixi a les dades del sensor de constants vitals?" "Recuperar el contingut de la finestra" "Inspecciona el contingut d\'una finestra amb què estàs interaccionant." "Activar Exploració tàctil" @@ -492,6 +484,8 @@ "Permet que l\'aplicació es comuniqui amb les etiquetes, les targetes i els lectors de Comunicació de camp proper (NFC)." "desactivació del bloqueig de pantalla" "Permet que l\'aplicació desactivi el bloqueig del teclat i qualsevol element de seguretat de contrasenyes associat. Per exemple, el telèfon desactiva el bloqueig del teclat en rebre una trucada entrant i, a continuació, reactiva el bloqueig del teclat quan finalitza la trucada." + "utilitza maquinari biomètric" + "Permet que l\'aplicació faci servir maquinari biomètric per a l\'autenticació" "Gestionar el maquinari d\'empremtes digitals" "Permet que l\'aplicació invoqui mètodes per afegir i suprimir plantilles d\'empremtes digitals que es puguin fer servir." "Utilitzar el maquinari d\'empremtes digitals" @@ -504,6 +498,8 @@ "No s\'ha reconegut" + + "El maquinari per a empremtes digitals no està disponible." "L\'empremta digital no es pot desar. Suprimeix-ne una." "S\'ha esgotat el temps d\'espera per a l\'empremta digital. Torna-ho a provar." @@ -1016,14 +1012,23 @@ "Mètode d\'introducció de text" "Accions de text" "Correu electrònic" + "Envia un correu electrònic a l\'adreça seleccionada" "Truca" + "Truca al número de telèfon seleccionat" "Localitza" + "Obre l\'adreça seleccionada al mapa" "Obre" + "Obre l\'URL seleccionat" "Missatge" + "Envia un SMS al número de telèfon seleccionat" "Afegeix" + "Afegeix als contactes" "Mostra" + "Consulta l\'hora seleccionada al calendari" "Programa" + "Programa un esdeveniment per a la data seleccionada" "Fes un seguiment" + "Fes un seguiment del vol seleccionat" "L\'espai d\'emmagatzematge s\'està esgotant" "És possible que algunes funcions del sistema no funcionin" "No hi ha prou espai d\'emmagatzematge per al sistema. Comprova que tinguis 250 MB d\'espai lliure i reinicia." @@ -1117,8 +1122,7 @@ "Obre %1$s" "%1$s es tancarà sense desar els canvis" "%1$s ha superat el límit de memòria" - - + "S\'ha recopilat un procés \"heap dump\". Toca per compartir-lo." "Vols compartir el \"heap dump\"?" "El procés %1$s ha superat el límit de %2$s de memòria del procés. Hi ha un procés \"heap dump\" disponible perquè el comparteixis amb el desenvolupador. Ves amb compte: aquest \"heap dump\" pot contenir les dades personals a les quals l\'aplicació tingui accés." "Tria una acció per al text" @@ -1153,8 +1157,7 @@ "Connecta\'t a una xarxa Wi-Fi oberta" "Connecta\'t a la xarxa Wi-Fi de l\'operador de telefonia mòbil" - - + "S\'està connectant a una xarxa Wi-Fi" "S\'ha connectat a la xarxa Wi-Fi" "No s\'ha pogut connectar a una xarxa Wi-Fi" "Toca per veure totes les xarxes" @@ -1270,33 +1273,49 @@ "%s s\'està superposant a altres apps" "Si no vols que %s utilitzi aquesta funció, toca per obrir la configuració i desactiva-la." "Desactiva" - "S\'està preparant %s" - "S\'està comprovant si hi ha errors" - "S\'ha detectat %s" + + + + + + + + "Per transferir fotos i fitxers multimèdia" - "S\'ha malmès %s" - "La unitat %s està malmesa. Toca per solucionar-ho." - "La unitat següent està malmesa: %s. Selecciona-la per solucionar-ho." + + + + "%s no és compatible" "El dispositiu no admet la unitat %s. Toca per configurar-la amb un format compatible." "Aquest dispositiu no admet la unitat següent: %s. Selecciona-la per configurar-la en un format compatible." "S\'ha extret %s de manera inesperada" - "Desactiva %s abans d\'extraure\'l per evitar perdre dades" - "S\'ha extret %s" - "S\'ha extret %s; insereix-ne de nou" - "Encara s\'està expulsant %s…" - "No l\'extreguis" + + + + + + + + + + "Configura" "Expulsa" "Explora" "No es detecta %s" - "Torna a inserir el dispositiu" + + "S\'està desplaçant l\'aplicació %s" "S\'estan desplaçant dades" - "S\'ha completat el desplaçament" - "S\'han desplaçat dades a %s" - "No s\'han pogut desplaçar dades" - "S\'han deixat dades a la ubicació original" + + + + + + + + "S\'ha retirat" "S\'ha expulsat" "S\'està comprovant..." @@ -1355,17 +1374,14 @@ "T\'estàs connectant a la VPN sempre activada…" "Estàs connectat a la VPN sempre activada" "S\'ha desconnectat de la VPN sempre activada" - - + "No s\'ha pogut establir la connexió a la VPN sempre activada" "Canvia la configuració de la xarxa o de la VPN" "Tria un fitxer" "No s\'ha escollit cap fitxer" "Restableix" "Envia" - - - - + "S\'està executant l\'aplicació de conducció" + "Toca per sortir de l\'aplicació de conducció." "Compartició de xarxa o punt d\'accés Wi-Fi activat" "Toca per configurar." "La compartició de xarxa està desactivada" @@ -1553,7 +1569,7 @@ "Si la drecera està activada, prem els dos botons de volum durant 3 segons, per iniciar una funció d\'accessibilitat.\n\n Funció d\'accessibilitat actual:\n %1$s\n\n Pots canviar la funció a Configuració > Accessibilitat." "Desactiva la drecera" "Utilitza la drecera" - "Inversió de color" + "Inversió dels colors" "Correcció del color" "La drecera d\'accessibilitat ha activat %1$s" "La drecera d\'accessibilitat ha desactivat %1$s" @@ -1691,8 +1707,7 @@ "Instal·lat per l\'administrador" "Actualitzat per l\'administrador" "Suprimit per l\'administrador" - - + "Per tal d\'augmentar la durada de la bateria, la funció Estalvi de bateria redueix el rendiment del dispositiu i en limita o desactiva la vibració, els serveis d\'ubicació i les dades en segon pla. És possible que el correu electrònic, la missatgeria i la resta d\'aplicacions que se sincronitzen amb freqüència no s\'actualitzin llevat que les obris.\n\nLa funció Estalvi de bateria es desactiva automàticament mentre el dispositiu s\'està carregant." "Per reduir l\'ús de dades, la funció Economitzador de dades evita que determinades aplicacions enviïn o rebin dades en segon pla. L\'aplicació que estiguis fent servir podrà accedir a dades, però potser ho farà menys sovint. Això vol dir, per exemple, que les imatges no es mostraran fins que no les toquis." "Activar Economitzador de dades?" "Activa" @@ -1743,22 +1758,14 @@ "Silenciat per %1$s" "S\'ha produït un error intern al dispositiu i és possible que funcioni de manera inestable fins que restableixis les dades de fàbrica." "S\'ha produït un error intern al dispositiu. Contacta amb el fabricant del dispositiu per obtenir més informació." - - - - - - - - - - - - - - - - + "La sol·licitud USSD s\'ha canviat per una trucada estàndard" + "La sol·licitud USSD s\'ha canviat per una sol·licitud SS" + "S\'ha canviat a una nova sol·licitud USSD" + "La sol·licitud USSD s\'ha canviat per una videotrucada" + "La sol·licitud SS s\'ha canviat per una trucada estàndard" + "La sol·licitud SS s\'ha canviat per una videotrucada" + "La sol·licitud SS s\'ha canviat per una sol·licitud USSD" + "S\'ha canviat a una nova sol·licitud SS" "Perfil professional" "Desplega" "Replega" @@ -1856,6 +1863,14 @@ "La SIM no està proporcionada per a la veu" "La SIM no és compatible per a la veu" "El telèfon no és compatible per a la veu" + + + + + + + + "Finestra emergent" "%1$d més" "S\'ha canviat a una versió anterior de l\'aplicació o la versió actual no és compatible amb aquesta drecera" @@ -1876,8 +1891,6 @@ "Aquest comportament és nou. Toca per canviar-lo." "S\'ha canviat el mode No molestis" "Toca per consultar què s\'ha bloquejat." - - - - + "Sistema" + "Configuració" diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index d9e15b2c186f6b15a8c847f236f5d08c7e1c7ee7..0fb65eac10e60d076cf719f4fbfe202ab67a3d31 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -79,15 +79,16 @@ "Ve výchozím nastavení není identifikace volajícího omezena. Příští hovor: Neomezeno" "Služba není zřízena." "Nastavení identifikace volajícího nesmíte měnit." - "Datová služba není k dispozici" - "Žádná tísňová volání" + "Není k dispozici žádná mobilní datová služba" + "Tísňová volání jsou nedostupná" "Hlasová volání nejsou k dispozici" - "Hlasová ani tísňová volání nejsou k dispozici" - "Mobilní síť ve vaší oblasti tuto službu dočasně nenabízí" - "K síti se nelze připojit" - "Chcete-li zlepšit příjem, zkuste změnit vybraný typ sítě v Nastavení > Síť a internet > Mobilní sítě > Preferovaný typ sítě." - "Volání přes Wi-Fi je aktivní" - "Tísňová volání vyžadují mobilní síť." + "Není k dispozici žádná hlasová služba ani tísňová volání" + "Dočasně vypnuto operátorem" + "Dočasně vypnuto operátorem (SIM karta %d)" + "Mobilní síť není dostupná" + "Zkuste změnit preferovanou síť. Změníte ji klepnutím." + "Tísňová volání jsou nedostupná" + "Přes Wi‑Fi nelze uskutečňovat tísňová volání" "Upozornění" "Přesměrování hovorů" "Režim tísňového zpětného volání" @@ -122,12 +123,12 @@ "Banner roamingu je zapnutý" "Banner roamingu je vypnutý" "Vyhledávání služby" - "Volání přes Wi-Fi" + "Volání přes Wi-Fi se nepodařilo nastavit" "Chcete-li volat a odesílat SMS přes síť Wi-Fi, nejprve požádejte operátora, aby vám tuto službu nastavil. Poté volání přes Wi-Fi opět zapněte v Nastavení. (Kód chyby: %1$s)" - "Zaregistrujte se u operátora (Kód chyby: %1$s)" + "Při registraci volání přes Wi-Fi u operátora %1$s došlo k chybě" "%s" @@ -162,8 +163,8 @@ "Je zpracováváno příliš mnoho požadavků. Opakujte akci později." "Chyba přihlášení k účtu %1$s" "Synchronizace" - "Synchronizace" - "Příliš mnoho smazaných položek služby %s." + "Nelze synchronizovat" + "Pokusili jste se smazat příliš mnoho položek %s." "Úložiště tabletu je plné. Uvolněte místo smazáním některých souborů." "Úložiště hodinek je plné. Uvolněte místo smazáním některých souborů." "Úložiště televize je plné. Uvolněte místo smazáním některých souborů." @@ -178,14 +179,13 @@ "Sledování má na starosti administrátor pracovního profilu" "Původce: %s" "Pracovní profil byl smazán." - "Pracovní profil byl smazán, protože není k dispozici aplikace pro správu" "Aplikace pro správu pracovního profilu chybí nebo je poškozena. Váš pracovní profil a související data proto byla smazána. Požádejte o pomoc administrátora." "Váš pracovní profil v tomto zařízení již není k dispozici" "Příliš mnoho pokusů o zadání hesla" "Zařízení je spravováno" "Toto zařízení je spravováno vaší organizací, která může sledovat síťový provoz. Podrobnosti zobrazíte klepnutím." "Zařízení bude vymazáno" - "Aplikaci pro správu nelze použít. Zařízení nyní bude vymazáno.\n\nV případě dotazů vám pomůže administrátor organizace." + "Aplikaci pro správu nelze použít. Zařízení nyní bude vymazáno.\n\nV případě dotazů vám pomůže administrátor organizace." "Aplikace %s tisk zakazuje." "Já" "Možnosti tabletu" @@ -242,6 +242,9 @@ "Režim Letadlo" "Režim Letadlo je ZAPNUTÝ" "Režim Letadlo je VYPNUTÝ" + "Spořič baterie" + "Spořič baterie je VYPNUTÝ" + "Spořič baterie je ZAPNUTÝ" "Nastavení" "Asistence" "Hlas. asistence" @@ -275,31 +278,31 @@ "Přepnout na pracovní profil" "Kontakty" "přístup ke kontaktům" - "Povolte aplikaci <b>%1$s</b> přístup ke kontaktům" + "Povolit aplikaci <b>%1$s</b> přístup ke kontaktům?" "Poloha" "přístup k poloze tohoto zařízení" - "Povolte aplikaci <b>%1$s</b> přístup k poloze tohoto zařízení" + "Povolit aplikaci <b>%1$s</b> přístup k poloze tohoto zařízení?" "Kalendář" "přístup ke kalendáři" - "Povolte aplikaci <b>%1$s</b> přístup ke kalendáři" + "Povolit aplikaci <b>%1$s</b> přístup ke kalendáři?" "SMS" "odesílání a zobrazování zpráv SMS" - "Povolte aplikaci <b>%1$s</b> odesílat a zobrazovat SMS" + "Povolit aplikaci <b>%1$s</b> odesílat a zobrazovat SMS?" "Úložiště" "přístup k fotkám, médiím a souborům v zařízení" - "Povolte aplikaci <b>%1$s</b> přístup k fotkám, mediálnímu obsahu a souborům v zařízení" + "Povolit aplikaci <b>%1$s</b> přístup k fotkám, mediálnímu obsahu a souborům v zařízení?" "Mikrofon" "nahrávání zvuku" - "Povolte aplikaci <b>%1$s</b> nahrávat zvuk" + "Povolit aplikaci <b>%1$s</b> nahrávat zvuk?" "Fotoaparát" "pořizování fotografií a nahrávání videa" - "Povolte aplikaci <b>%1$s</b> fotit a nahrávat video" + "Povolit aplikaci <b>%1$s</b> fotit a nahrávat video?" "Telefon" "uskutečňování a spravování telefonních hovorů" - "Povolte aplikaci <b>%1$s</b> uskutečňovat a spravovat telefonní hovory" + "Povolit aplikaci <b>%1$s</b> uskutečňovat a spravovat telefonní hovory?" "Tělesné senzory" "přístup k údajům snímačů vašich životních funkcí" - "Povolte aplikaci <b>%1$s</b> přístup k údajům ze snímačů vašich životních funkcí" + "Povolit aplikaci <b>%1$s</b> přístup k údajům ze snímačů vašich životních funkcí?" "Načítat obsah oken" "Může prozkoumávat obsah oken, se kterými pracujete." "Zapnout funkci Prozkoumání dotykem" @@ -311,7 +314,7 @@ "Provádění gest" "Může provádět gesta klepnutí, přejetí, stažení prstů a další." "Gesta otiskem prstu" - "Dokáže rozpoznat gesta zadaná na snímači otisků prstů." + "Dokáže rozpoznat gesta zadaná na snímači otisků prstů." "zakázání či změny stavového řádku" "Umožňuje aplikaci zakázat stavový řádek nebo přidat či odebrat systémové ikony." "vydávání se za stavový řádek" @@ -362,6 +365,8 @@ "Umožňuje aplikaci uložit některé své části trvale do paměti. Může to omezit paměť dostupnou pro ostatní aplikace a zpomalit tak tablet." "Umožňuje aplikaci zapsat své jednotlivé části natrvalo do paměti. To může omezit paměť dostupnou pro ostatní aplikace a zpomalit tak televizi." "Umožňuje aplikaci uložit některé své části trvale do paměti. Může to omezit paměť dostupnou pro ostatní aplikace a zpomalit tak telefon." + "spouštění služeb na popředí" + "Povolte aplikaci využívání služeb na popředí." "výpočet místa pro ukládání aplikací" "Umožňuje aplikaci načtení svého kódu, dat a velikostí mezipaměti." "změna nastavení systému" @@ -484,6 +489,8 @@ "Umožňuje aplikaci komunikovat se štítky, kartami a čtečkami s podporou technologie NFC." "vypnutí zámku obrazovky" "Umožňuje aplikaci vypnout zámek kláves a související zabezpečení heslem. Telefon například vypne zámek klávesnice při příchozím hovoru a po skončení hovoru jej zase zapne." + "použití biometrického hardwaru" + "Umožňuje aplikaci použít k ověření biometrický hardware" "správa hardwaru na čtení otisků prstů" "Umožňuje aplikaci volat metody k přidání a smazání šablon otisků prstů, které budou použity." "použití hardwaru na čtení otisků prstů" @@ -496,6 +503,7 @@ "Nerozpoznáno" + "Otisk byl ověřen" "Není k dispozici hardware ke snímání otisků prstů." "Otisk prstu nelze uložit. Odstraňte existující otisk prstu." "Časový limit sejmutí otisku prstu vypršel. Zkuste to znovu." @@ -808,6 +816,8 @@ "Odemknutí gestem." "Odemknutí obličejem." "Odemknutí kódem PIN." + "Odemknutí SIM karty kódem PIN." + "Odemknutí SIM karty kódem PUK." "Odemknutí heslem." "Oblast pro zadání bezpečnostního gesta." "Oblast pro přejetí prstem." @@ -869,6 +879,12 @@ "Text byl zkopírován do schránky." "Více" "Menu+" + "Meta+" + "Ctrl+" + "Alt+" + "Shift+" + "Sym+" + "Fn+" "mezerník" "enter" "smazat" @@ -1034,14 +1050,23 @@ "Metoda zadávání dat" "Operace s textem" "Poslat e-mail" + "Napsat na vybranou e-mailovou adresu" "Zavolat" + "Zavolat na vybrané telefonní číslo" "Najít" + "Vyhledat vybranou adresu" "Otevřít" + "Otevřít vybranou adresu URL" "Zpráva" + "Napsat SMS na vybrané telefonní číslo" "Přidat" + "Přidat do kontaktů" "Zobrazit" + "Zobrazit vybraný čas v kalendáři" "Naplánovat" + "Naplánovat událost na vybraný čas" "Sledovat" + "Sledovat vybraný let" "V úložišti je málo místa" "Některé systémové funkce nemusí fungovat" "Pro systém není dostatek místa v úložišti. Uvolněte alespoň 250 MB místa a restartujte zařízení." @@ -1114,31 +1139,28 @@ "Zkontrolovat aktualizace" "Aplikace %1$s (proces %2$s) porušila své vlastní vynucené zásady StrictMode." "Proces %1$s porušil své vlastní vynucené zásady StrictMode." - "Android se upgraduje..." - "Spouštění systému Android…" + "Telefon se aktualizuje…" + "Tablet se aktualizuje…" + "Zařízení se aktualizuje…" + "Telefon se spouští…" + "Tablet se spouští…" + "Zařízení se spouští…" "Probíhá optimalizace úložiště." - "Dokončování aktualizace Androidu…" - "Před dokončením upgradu nemusí některé aplikace fungovat správně" + "Dokončování aktualizace systému…" "Aplikace %1$s se upgraduje…" "Optimalizování aplikace %1$d z %2$d." "Příprava aplikace %1$s." "Spouštění aplikací." "Dokončování inicializace." "Běží aplikace %1$s" - - - - - - - - - - - - + "Klepnutím se vrátíte do hry" + "Vyberte hru" + "Aby byl zajištěn lepší výkon, v jednu chvíli může být otevřena jen jedna taková hra." + "Zpět do aplikace %1$s" + "Otevřít aplikaci %1$s" + "Aplikace %1$s se zavře bez uložení" "Proces %1$s překročil limit paměti" - "Byl shromážděn výpis haldy, klepnutím jej můžete sdílet" + "Byl shromážděn výpis haldy. Klepnutím jej můžete sdílet." "Sdílet výpis haldy?" "Proces %1$s překročil limit paměti procesu %2$s. Je k dispozici výpis haldy, který můžete sdílet s vývojářem. Buďte opatrní, výpis haldy může obsahovat osobní údaje, ke kterým má aplikace přístup." "Vyberte akci pro text" @@ -1177,12 +1199,12 @@ "Připojení k otevřené síti Wi-Fi" "Připojte se k síti Wi-Fi operátora" - "Připojování k otevřené síti Wi-Fi" + "Připojování k síti Wi-Fi..." "Připojeno k síti Wi-Fi" "Připojení k síti Wi-Fi se nezdařilo" "Klepnutím zobrazíte všechny sítě" "Připojit" - "Všechny sítě" + "Všechny sítě" "Wi‑Fi se zapne automaticky" "Když budete v dosahu kvalitní uložené sítě" "Znovu nezapínat" @@ -1248,6 +1270,7 @@ "Restartovat" "Aktivovat mobilní službu" "Chcete-li aktivovat novou SIM kartu, stáhněte si aplikaci operátora" + "Chcete-li aktivovat novou SIM kartu, stáhněte si aplikaci %1$s" "Stáhnout aplikaci" "Byla vložena nová SIM karta" "Klepnutím zahájíte nastavení" @@ -1266,13 +1289,13 @@ "Byl zapnut režim PTP přes USB" "Byl zapnut tethering přes USB" "Byl zapnut režim MIDI přes USB" - "Byl zapnut režim příslušenství USB" + "Je připojeno příslušenství USB" "Klepnutím zobrazíte další možnosti." "Nabíjení připojeného zařízení. Klepnutím zobrazíte další možnosti." "Bylo zjištěno analogové zvukové příslušenství" "Připojené zařízení není s tímto telefonem kompatibilní. Klepnutím zobrazíte další informace." "Ladění přes USB připojeno" - "Klepnutím zakážete ladění USB." + "Klepnutím vypnete ladění přes USB" "Vyberte, chcete-li zakázat ladění USB." "Vytváření zprávy o chybě…" "Sdílet zprávu o chybě?" @@ -1291,34 +1314,35 @@ "Aplikace %s se zobrazuje přes ostatní aplikace" "%s se zobrazuje přes ostatní aplikace" "Pokud nechcete, aby aplikace %s tuto funkci používala, klepnutím otevřete nastavení a funkci vypněte." - "VYPNOUT" - "Probíhá příprava úložiště %s" - "Kontrola chyb" - "Zjištěno nové úložiště %s" + "Vypnout" + "Kontroluje se %s…" + "Kontrola aktuálního obsahu" + "Nové médium %s" + "Klepnutím médium nastavíte" "K přenosu fotek a médií" - "Úložiště %s je poškozeno" - "Úložiště %s je poškozeno. Klepnutím zahájíte opravu." + "Problém s médiem %s" + "Problém odstraníte klepnutím" "Úložiště %s je poškozeno. Vyberte ho a zahajte opravu." "Úložiště %s není podporováno" "Úložiště %s není v tomto zařízení podporováno. Klepnutím zahájíte nastavení v podporovaném formátu." "Úložiště %s není v tomto zařízení podporováno. Vyberte ho a zahajte nastavení v podporovaném formátu." "Úložiště %s neočekávaně odpojeno" - "Před odebráním úložiště %s jej nejprve odpojte. Zabráníte tak ztrátě dat." - "Úložiště %s bylo odpojeno." - "Úložiště %s bylo odpojeno. Vložte nové úložiště." - "Probíhá odpojování úložiště %s…" - "Neodebírat" + "Před odebráním médium nejprve odpojte, zabráníte tak ztrátě obsahu" + "Médium %s bylo odebráno" + "Některé funkce nemusí být k dispozici. Vložte nové úložiště." + "Odpojování média %s" + "Neodebírat" "Nastavit" "Odpojit" "Otevřít" "%s chybí" - "Znovu toto zařízení vložte" + "Znovu vložte zařízení" "Přesouvání aplikace %s" "Probíhá přesun dat" - "Přesunutí bylo dokončeno" - "Data byla přesunuta do úložiště %s" - "Data nelze přesunout" - "Data zůstala v původním umístění" + "Přenos obsahu je dokončen" + "Obsah byl přesunut na médium %s" + "Obsah se nepodařilo přesunout" + "Zkuste obsah přesunout znovu" "Odebráno" "Odpojeno" "Probíhá kontrola…" @@ -1377,14 +1401,14 @@ "Připojování k trvalé síti VPN…" "Je připojena trvalá síť VPN" "Odpojeno od trvalé sítě VPN" - "Chyba trvalé sítě VPN" + "K trvalé VPN se nelze připojit" "Změňte síť nebo nastavení VPN" "Zvolit soubor" "Není vybrán žádný soubor" "Resetovat" "Odeslat" - "Aktivován režim V autě" - "Klepnutím ukončíte režim V autě." + "Jízdní aplikace je spuštěna" + "Jízdní aplikaci zavřete klepnutím." "Sdílené připojení nebo hotspot je aktivní." "Klepnutím zahájíte nastavení." "Tethering je zakázán" @@ -1464,22 +1488,19 @@ "Jednotka USB %s" "Úložiště USB" "Upravit" - "Upozornění na používání dat" - "Klepnutím zobrazíte nastavení." - "Dosáhli jste limitu dat 2G–3G" - "Dosáhli jste limitu dat 4G" + "Upozornění na data" + "Využili jste %s dat" "Byl dosažen limit mobilních dat" "Dosáhli jste limitu dat Wi-Fi" - "Data pro zbytek cyklu pozastavena" - "Překročili jste limit dat 2G–3G" - "Překročili jste limit dat 4G." - "Překročili jste limit mobilních dat." - "Datový limit Wi-Fi byl překročen" - "%s nad stanoveným limitem." + "Data jsou po zbytek cyklu pozastavena" + "Byl překročen limit dat" + "Byl překročen limit Wi-Fi" + "Překročili jste limit o %s" "Data na pozadí jsou omezena" "Klepnutím odstraníte omezení." - "Velké využití dat" - "Za posledních několik dní máte větší využití dat než obvykle. Klepnutím zobrazíte využití a nastavení." + "Vysoké využití mobilních dat" + "Vaše aplikace využily více dat, než je obvyklé" + "Aplikace %s využila více dat, než je obvyklé" "Certifikát zabezpečení" "Tento certifikát je platný." "Vydáno pro:" @@ -1719,7 +1740,7 @@ "Nainstalováno administrátorem" "Aktualizováno administrátorem" "Smazáno administrátorem" - "Spořič baterie za účelem prodloužení výdrže baterie snižuje výkon zařízení a omezuje vibrace, služby určování polohy a většinu dat na pozadí. E-mail, aplikace pro zasílání zpráv a další aplikace, které používají synchronizaci, se nemusejí aktualizovat, dokud je neotevřete.\n\nPři nabíjení zařízení se spořič baterie automaticky vypne." + "Spořič baterie za účelem prodloužení výdrže baterie snižuje výkon zařízení a omezuje nebo vypíná vibrace, služby určování polohy a data na pozadí. E-mail, aplikace pro zasílání zpráv a další aplikace, které používají synchronizaci, se nemusejí aktualizovat, dokud je neotevřete.\n\nPři nabíjení zařízení se spořič baterie automaticky vypne." "Spořič dat z důvodu snížení využití dat některým aplikacím brání v odesílání nebo příjmu dat na pozadí. Aplikace, kterou právě používáte, data přenášet může, ale může tak činit méně často. V důsledku toho se například obrázky nemusejí zobrazit, dokud na ně neklepnete." "Chcete zapnout Spořič dat?" "Zapnout" @@ -1735,11 +1756,11 @@ %1$d min (do %2$s) 1 min (do %2$s) - + %1$d hodiny (do %2$s) %1$d hodiny (do %2$s) %1$d hodin (do %2$s) - Jednu hodinu (do %2$s) + 1 hodina (do %2$s) %1$d h (do %2$s) @@ -1759,11 +1780,11 @@ %d min 1 min - + %d hodiny %d hodiny %d hodin - Jednu hodinu + 1 hodina %d h @@ -1786,14 +1807,14 @@ "Ignorováno stranou %1$s" "V zařízení došlo k internímu problému. Dokud neprovedete obnovení továrních dat, může být nestabilní." "V zařízení došlo k internímu problému. Další informace vám sdělí výrobce." - "Požadavek USSD byl změněn na požadavek DIAL." - "Požadavek USSD byl změněn na požadavek SS." - "Požadavek USSD byl změněn na nový požadavek USSD." - "Požadavek USSD byl změněn na požadavek Video DIAL." - "Požadavek SS byl změněn na požadavek DIAL." - "Požadavek SS byl změněn na požadavek Video DIAL." - "Požadavek SS byl změněn na požadavek USSD." - "Požadavek SS byl změněn na nový požadavek SS." + "Požadavek USSD byl změněn na běžný hovor" + "Požadavek USSD byl změněn na požadavek SS" + "Změněno na nový požadavek USSD" + "Požadavek USSD byl změněn na videohovor" + "Požadavek SS byl změněn na běžný hovor" + "Požadavek SS byl změněn na videohovor" + "Požadavek SS byl změněn na požadavek USSD" + "Změněno na nový požadavek SS" "Pracovní profil" "Rozbalit" "Sbalit" @@ -1895,6 +1916,10 @@ "SIM karta není poskytována pro hlasovou komunikaci" "SIM karta není povolena pro hlasovou komunikaci" "Telefon není povolen pro hlasovou komunikaci" + "SIM karta %d není povolena" + "SIM karta %d není poskytována" + "SIM karta %d není povolena" + "SIM karta %d není povolena" "Vyskakovací okno" "a ještě %1$d" "Verze aplikace byla snížena, případně aplikace není s touto zkratkou kompatibilní" @@ -1907,7 +1932,14 @@ "Byla zjištěna škodlivá aplikace" "Aplikace %1$s chce zobrazovat ukázky z aplikace %2$s" "Upravit" + "Volání a oznámení budou vibrovat" + "Volání a oznámení budou ztlumena" "Změny nastavení systému" + "Nerušit" + "Režim Nerušit skrývá oznámení, abyste se mohli soustředit" + "Toto je nové chování. Změníte ho klepnutím." "Nastavení režimu Nerušit se změnilo" - "Klepnutím zkontrolujete nastavení chování v souvislosti s vyrušeními" + "Klepnutím zkontrolujete, co je blokováno." + "Systém" + "Nastavení" diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 47cf038cca01dd9013736cda90b5327bb00c1213..03ced00629a8c1b8f1cbb3212950b4368f6c51b6 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -77,15 +77,17 @@ "Standarder for opkalds-id til ikke begrænset. Næste opkald: Ikke begrænset" "Tjenesten leveres ikke!" "Du kan ikke ændre indstillingen for opkalds-id\'et." - "Ingen datatjeneste" - "Ingen nødopkald" + "Ingen mobildatatjeneste" + "Det er ikke muligt at foretage nødopkald" "Ingen taletjeneste" - "Ingen tale- og nødtjenester" - "Tilbydes i øjeblikket ikke af mobilnetværket på din placering" - "Der er ingen forbindelse til netværket" - "Hvis du vil forbedre signalet, kan du prøve at ændre den valgte netværkstype i Indstillinger > Netværk og internet > Mobilnetværk > Foretrukken netværkstype." - "Wi‑Fi-opkald er aktiveret" - "Nødopkald kræver adgang til et mobilnetværk." + "Ingen taletjeneste eller nødopkald" + "Midlertidigt deaktiveret af dit mobilselskab" + + + "Der er ingen forbindelse til mobilnetværket" + "Prøv at skifte dit foretrukne netværk. Tryk for skifte." + "Det er ikke muligt at foretage nødopkald" + "Det er ikke muligt at foretage nødopkald via Wi‑Fi" "Underretninger" "Viderestilling af opkald" "Nødtilbagekaldstilstand" @@ -120,12 +122,12 @@ "Roamingbanner til" "Roamingbanner fra" "Søger efter tjeneste" - "Opkald via Wi-Fi" + "Wi-Fi-opkald kunne ikke konfigureres" "Hvis du vil foretage opkald og sende beskeder via Wi-Fi, skal du først anmode dit mobilselskab om at konfigurere denne tjeneste. Derefter skal du aktivere Wi-Fi-opkald igen fra Indstillinger. (Fejlkode: %1$s)" - "Registrer dig hos dit mobilselskab (fejlkode: %1$s)" + "Der opstod et problem under registrering af Wi-Fi-opkald hos dit mobilselskab: %1$s" "%s" @@ -160,8 +162,8 @@ "Der behandles for mange anmodninger. Prøv igen senere." "Loginfejl for %1$s" "Synkroniser" - "Synkroniser" - "For mange %s sletninger" + "Det er ikke muligt at synkronisere" + "Forsøgte at slette for mange %s-elementer." "Din tablets lager er fuldt. Slet nogle filer for at frigøre plads." "Urets lager er fuldt. Slet nogle filer for at frigøre plads." "Fjernsynets hukommelse er fuld. Slet nogle filer for at frigøre plads." @@ -174,14 +176,13 @@ "Af administratoren af din arbejdsprofil" "Af %s" "Arbejdsprofilen blev slettet" - "Arbejdsprofilen blev slettet, fordi der mangler en administrationsapp" "Administrationsappen til arbejdsprofilen mangler eller er beskadiget. Derfor er din arbejdsprofil og dine relaterede data blevet slettet. Kontakt din administrator for at få hjælp." "Din arbejdsprofil er ikke længere tilgængelig på denne enhed" "For mange mislykkede adgangskodeforsøg" "Dette er en administreret enhed" "Din organisation administrerer denne enhed og kan overvåge netværkstrafik. Tryk for at se oplysninger." "Enheden slettes" - "Administrationsappen kan ikke bruges. Enheden vil nu blive ryddet. \n\nKontakt din organisations administrator, hvis du har nogen spørgsmål." + "Administrationsappen kan ikke bruges. Enheden vil nu blive ryddet. \n\nKontakt din organisations administrator, hvis du har spørgsmål." "Udskrivning er deaktiveret af %s." "Mig" "Valgmuligheder for tabletcomputeren" @@ -236,6 +237,9 @@ "Flytilstand" "Flytilstand er TIL" "Flytilstand er slået FRA" + "Batterisparefunktion" + "Batterisparefunktion er slået FRA" + "Batterisparefunktion er slået TIL" "Indstillinger" "Assistance" "Taleassistent" @@ -269,31 +273,31 @@ "Skift til arbejdsprofil" "Kontaktpersoner" "have adgang til dine kontaktpersoner" - "Giv <b>%1$s</b> adgang til dine kontaktpersoner" + "Vil du give <b>%1$s</b> adgang til dine kontaktpersoner?" "Placering" "få adgang til enhedens placering" - "Giv <b>%1$s</b> adgang til enhedens placering" + "Vil du give <b>%1$s</b> adgang til enhedens placering?" "Kalender" "have adgang til din kalender" - "Giv <b>%1$s</b> adgang til din kalender" + "Vil du give <b>%1$s</b> adgang til din kalender?" "Sms" "sende og se sms-beskeder" - "Giv <b>%1$s</b> tilladelse til at sende og se sms-beskeder" + "Vil du give <b>%1$s</b> tilladelse til at sende og se sms-beskeder?" "Lagerplads" "få adgang til billeder, medier og filer på din enhed" - "Giv <b>%1$s</b> adgang til billeder, medier og filer på din enhed" + "Vil du give <b>%1$s</b> adgang til billeder, medier og filer på din enhed?" "Mikrofon" "optage lyd" - "Giv <b>%1$s</b> tilladelse til at optage lyd" + "Vil du give <b>%1$s</b> tilladelse til at optage lyd?" "Kamera" "tage billeder og optage video" - "Giv <b>%1$s</b> tilladelse til at tage billeder og optage video" + "Vil du give <b>%1$s</b> tilladelse til at tage billeder og optage video?" "Telefon" "foretage og administrere telefonopkald" - "Giv <b>%1$s</b> tilladelse til at foretage og administere telefonopkald" + "Vil du give <b>%1$s</b> tilladelse til at foretage og administrere telefonopkald?" "Kropssensorer" "få adgang til sensordata om dine livstegn" - "Giv <b>%1$s</b> adgang til sensordata om dine livstegn" + "Vil du give <b>%1$s</b> adgang til sensordata om dine livstegn?" "hente indholdet i vinduet" "undersøge indholdet i et vindue, du interagerer med." "aktivere Udforsk ved berøring" @@ -305,7 +309,7 @@ "Udfør bevægelser" "Kan trykke, stryge, knibe sammen og udføre andre bevægelser." "Fingeraftryksbevægelser" - "Kan registrere bevægelser, der foretages på enhedernes fingeraftrykslæser." + "Kan registrere bevægelser, der foretages på enhedens fingeraftrykslæser." "deaktivere eller redigere statuslinje" "Tillader, at appen kan deaktivere statusbjælken eller tilføje og fjerne systemikoner." "vær statusbjælken" @@ -337,7 +341,7 @@ "modtage tekstbeskeder (WAP)" "Tillader, at appen kan modtage og behandle WAP-beskeder. Denne tilladelse omfatter muligheden for at overvåge eller slette de beskeder, der sendes til dig, uden at vise dem til dig." "hente kørende apps" - "Tillader, at appen kan hente oplysninger om nuværende og seneste opgaver. Med denne tilladelse kan appen finde oplysninger om, hvilke applikationer der bruges på enheden." + "Tillader, at appen kan hente oplysninger om nuværende og seneste opgaver. Med denne tilladelse kan appen finde oplysninger om, hvilke apps der bruges på enheden." "administrer profil- og enhedsejere" "Tillader, at apps konfigurerer profilejerne og enhedens ejer." "omorganisere kørende apps" @@ -356,6 +360,8 @@ "Tillader, at appen gør dele af sig selv vedholdende i hukommelsen. Dette kan begrænse den tilgængelige hukommelse for andre apps, hvilket gør tabletten langsommere." "Giver appen lov til at gøre dele af sig selv vedholdende i hukommelsen. Dette kan begrænse den tilgængelige hukommelse for andre apps og derved gøre fjernsynet langsommere." "Tillader, at appen gør dele af sig selv vedholdende i hukommelsen. Dette kan begrænse den tilgængelige hukommelse for andre apps, hvilket gør telefonen langsommere." + "kør tjeneste i forgrunden" + "Tillad, at appen anvender tjenester i forgrunden." "måle appens lagerplads" "Tillader, at en app kan hente sin kode, data og cachestørrelser" "ændre systemindstillinger" @@ -441,13 +447,13 @@ "Giver appen lov til at ændre tidszonen på dit tv." "Tillader, at appen kan ændre tidszonen på din telefon." "finde konti på enheden" - "Tillader, at appen kan hente listen over konti, der er kendt af tabletten. Dette kan omfatte alle konti, der er oprettet af de applikationer, som du har installeret." + "Tillader, at appen kan hente listen over konti, der er kendt af tabletten. Dette kan omfatte alle konti, der er oprettet af de apps, som du har installeret." "Giver appen lov til at hente listen over konti, der er kendt af tv\'et. Dette kan omfatte konti, der er oprettet af programmer, som du har installeret." - "Tillader, at appen kan hente listen over konti, der er kendt af telefonen. Dette kan omfatte alle konti, der er oprettet af de applikationer, som du har installeret." + "Tillader, at appen kan hente listen over konti, der er kendt af telefonen. Dette kan omfatte alle konti, der er oprettet af de apps, som du har installeret." "se netværksforbindelser" "Tillader, at appen kan læse oplysninger om netværksforbindelser, f.eks. eksisterende og forbundne netværk." "få fuld netværksadgang" - "Tillader, at appen kan oprette netværkssockets og bruge tilpassede netværksprotokoller. Browseren og andre applikationer indeholder midler til at sende data til internettet, så med denne tilladelse er der ingen forpligtelse til at sende data til internettet." + "Tillader, at appen kan oprette netværkssockets og bruge tilpassede netværksprotokoller. Browseren og andre apps indeholder midler til at sende data til internettet, så med denne tilladelse er der ingen forpligtelse til at sende data til internettet." "skifte netværksforbindelse" "Tillader, at appen kan ændre netværksforbindelsens tilstand." "skifte forbindelse til netdeling" @@ -478,6 +484,8 @@ "Tillader, at appen kan kommunikere med NFC-tags (Near Field Communication), -kort og -læsere." "deaktivere din skærmlås" "Tillader, at appen kan deaktivere tastaturlåsen og anden form for tilknyttet adgangskodesikkerhed. Telefonen deaktiverer f.eks. tastaturlåsen ved indgående telefonopkald og aktiverer tastaturlåsen igen, når opkaldet er afsluttet." + "brug biometrisk hardware" + "Tillader, at appen kan bruge biometrisk hardware til godkendelse" "administrer fingeraftrykhardware" "Tillader, at appen kan køre metoder til at tilføje og slette fingeraftryksskabeloner" "bruge fingeraftrykhardware" @@ -490,6 +498,8 @@ "Ikke genkendt" + + "Hardwaren til fingeraftryk er ikke tilgængelig." "Fingeraftrykket kan ikke gemmes. Fjern et eksisterende fingeraftryk." "Registrering af fingeraftryk fik timeout. Prøv igen." @@ -802,6 +812,8 @@ "Lås op med mønster." "Lås op med ansigt." "Lås op med pinkode." + "Lås op ved hjælp af pinkoden til SIM-kortet." + "Lås op ved hjælp af PUK-koden til SIM-kortet." "Lås op med adgangskode." "Mønsterområde." "Strygeområde." @@ -844,11 +856,11 @@ "Område" "Emirat" "læse dine webbogmærker og -historik" - "Tillader, at appen kan læse historikken om alle webadresser, som browseren har besøgt, og alle browserens bogmærker. Bemærk! Denne tilladelse håndhæves muligvis ikke af tredjepartsbrowsere eller andre applikationer med websøgningsfunktioner." + "Tillader, at appen kan læse historikken om alle webadresser, som browseren har besøgt, og alle browserens bogmærker. Bemærk! Denne tilladelse håndhæves muligvis ikke af tredjepartsbrowsere eller andre apps med websøgningsfunktioner." "skrive webbogmærker og -historik" - "Tillader, at appen kan ændre browserens historik eller de bogmærker, der er gemt på din tablet. Dette kan give appen tilladelse til at slette eller ændre browserdata. Bemærk! Denne tilladelse håndhæves muligvis ikke af tredjepartsbrowsere eller andre applikationer med websøgningsfunktioner." + "Tillader, at appen kan ændre browserens historik eller de bogmærker, der er gemt på din tablet. Dette kan give appen tilladelse til at slette eller ændre browserdata. Bemærk! Denne tilladelse håndhæves muligvis ikke af tredjepartsbrowsere eller andre apps med websøgningsfunktioner." "Giver appen lov til at ændre browserens historik eller bogmærker, der er gemt på dit tv. Dette kan give appen tilladelse til at slette eller ændre browserdata. Bemærk! Denne tilladelse håndhæves muligvis ikke af tredjepartsbrowsere eller andre programmer med mulighed for webbrowsing." - "Tillader, at appen kan ændre browserens historik eller de bogmærker, der er gemt på din telefon. Dette kan give appen tilladelse til at slette eller ændre browserdata. Bemærk! Denne tilladelse håndhæves muligvis ikke af tredjepartsbrowsere eller andre applikationer med websøgningsfunktioner." + "Tillader, at appen kan ændre browserens historik eller de bogmærker, der er gemt på din telefon. Dette kan give appen tilladelse til at slette eller ændre browserdata. Bemærk! Denne tilladelse håndhæves muligvis ikke af tredjepartsbrowsere eller andre apps med websøgningsfunktioner." "indstille en alarm" "Tillader, at appen kan indstille en alarm i en installeret alarmapp. Nogle alarmapps har muligvis ikke denne funktion." "tilføje telefonsvarer" @@ -863,6 +875,12 @@ "Teksten er kopieret til udklipsholderen." "Mere" "Menu+" + "Meta+" + "Ctrl+" + "Alt+" + "Shift+" + "Sym+" + "Fn+" "plads" "indtast" "slet" @@ -994,14 +1012,23 @@ "Inputmetode" "Teksthandlinger" "E-mail" + "Send en mail til den valgte adresse" "Ring op" + "Ring til det valgte telefonnummer" "Find" + "Find den valgte adresse" "Åbn" + "Åbn den valgte webadresse" "Besked" + "Send en besked til det valgte telefonnummer" "Tilføj" + "Føj til kontaktpersoner" "Se" + "Se det valgte tidspunkt i kalenderen" "Planlæg" + "Planlæg begivenhed på det valgte tidspunkt" "Spor" + "Følg det valgte fly" "Der er snart ikke mere lagerplads" "Nogle systemfunktioner virker måske ikke" "Der er ikke nok ledig lagerplads til systemet. Sørg for, at du har 250 MB ledig plads, og genstart." @@ -1074,31 +1101,28 @@ "Søg efter opdatering" "Appen %1$s (proces %2$s) har overtrådt sin egen StrictMode-politik." "Processen %1$s har overtrådt sin egen StrictMode-politik." - "Android opgraderes..." - "Android starter..." + "Telefonen opdaterer…" + "Denne tablet opdaterer…" + "Enheden opdaterer…" + "Telefonen starter…" + "Denne tablet starter…" + "Enheden starter…" "Lageret optimeres." - "Afslutter Android-opdateringen…" - "Nogle apps fungerer muligvis ikke korrekt, før opgraderingen er gennemført" + "Afslutter systemopdatering…" "%1$s opgraderer…" "Optimerer app %1$d ud af %2$d." "Forbereder %1$s." "Åbner dine apps." "Gennemfører start." "%1$s er i gang" - - - - - - - - - - - - + "Tryk for at vende tilbage til spillet" + "Vælg et spil" + "Du kan forbedre ydeevnen ved kun at åbne ét af disse spil ad gangen." + "Gå tilbage til %1$s" + "Åbn %1$s" + "%1$s lukkes uden at gemme" "%1$s har overskredet sin hukommelsesgrænse" - "En heap dump er blevet indsamlet. Tryk for at dele" + "Der er indsamlet en heap dump. Tryk for at dele." "Vil du dele en heap dump?" "Processen %1$s har overskredet sin proceshukommelsesgrænse på %2$s. En heap dump er tilgængelig og kan deles med udvikleren. Vær forsigtig: Denne heap dump kan indeholde dine personlige oplysninger, som appen har adgang til." "Vælg en handling for teksten" @@ -1133,12 +1157,12 @@ "Opret forbindelse til et åbent Wi-Fi-netværk" "Opret forbindelse til dit mobilselskabs Wi‑Fi-netværk" - "Opretter forbindelse til et åbent Wi‑Fi-netværk" + "Opretter forbindelse til Wi-Fi-netværket" "Forbundet til Wi-Fi-netværket" "Der kan ikke oprettes forbindelse til Wi-Fi-netværket" "Tryk for at se alle netværk" "Opret forbindelse" - "Alle netværk" + "Alle netværk" "Wi‑Fi aktiveres automatisk" "Når du er i nærheden af et gemt netværk af høj kvalitet" "Aktivér ikke igen" @@ -1204,6 +1228,7 @@ "Genstart" "Aktivér mobilselskab" "Download mobilselskabsappen for at aktivere dit nye SIM-kort" + "Download appen %1$s for at aktivere dit nye SIM-kort" "Download app" "Nyt SIM-kort er indsat" "Tryk for at konfigurere" @@ -1222,13 +1247,13 @@ "PTP via USB er slået til" "Netdeling via USB er slået til" "MIDI via USB er slået til" - "Tilstanden USB-tilbehør er slået til" + "USB-tilbehør er tilsluttet" "Tryk for at se flere muligheder." "Den tilsluttede enhed oplades. Tryk for at få flere valgmuligheder." "Der blev registreret et analogt lydtilbehør" "Den tilsluttede enhed er ikke kompatibel med denne telefon. Tryk for at få flere oplysninger." "USB-fejlretning er tilsluttet" - "Tryk for at deaktivere fejlretning via USB." + "Tryk for at deaktivere USB-fejlretning" "Vælg for at deaktivere USB-fejlretning." "Opretter fejlrapport…" "Vil du dele fejlrapporten?" @@ -1247,34 +1272,50 @@ "%s vises over andre apps" "%s vises over andre apps" "Hvis du ikke ønsker, at %s skal benytte denne funktion, kan du åbne indstillingerne og deaktivere den." - "SLÅ FRA" - "Forbereder %s" - "Kontrollerer for fejl" - "Der blev registreret et nyt %s" + "Deaktiver" + + + + + + + + "Til overførsel af billeder og medier" - "%s er beskadiget" - "%s er beskadiget. Tryk for at rette problemet." - "%s er beskadiget. Vælg for at rette." + + + + "%s understøttes ikke" "Denne enhed understøtter ikke dette %s. Tryk for at konfigurere det til et understøttet format." "Denne enhed understøtter ikke dette %s. Vælg for at konfigurere mediet i et understøttet format." "%s blev fjernet uventet" - "For at undgå datatab skal %s demonteres inden fjernelse" - "%s blev fjernet" - "%s er fjernet. Indsæt et nyt" - "Skubber stadig %s ud…" - "Fjern ikke" + + + + + + + + + + "Konfigurer" "Skub ud" "Udforsk" "%s er ikke til stede" - "Sæt denne enhed i igen" + + "Flytter %s" "Flytter data" - "Flytningen er gennemført" - "Data flyttet til %s" - "Dine data kunne ikke flyttes" - "Dine data er stadig på den oprindelige placering" + + + + + + + + "Fjernet" "Skubbet ud" "Kontrollerer…" @@ -1333,14 +1374,14 @@ "Opretter forbindelse til konstant VPN…" "Konstant VPN er forbundet" "Forbindelsen til konstant VPN blev afbrudt" - "Fejl i konstant VPN" + "Der kunne ikke oprettes forbindelse til konstant VPN" "Skift netværks- eller VPN-indstillinger" "Vælg fil" "Ingen fil er valgt" "Nulstil" "Send" - "Biltilstand er aktiveret" - "Tryk for at afslutte biltilstand." + "Bilkørselsappen er aktiv" + "Tryk for at lukke bilkørselsappen." "Netdeling eller hotspot er aktivt" "Tryk for at konfigurere" "Netdeling er deaktiveret" @@ -1418,22 +1459,19 @@ "USB-drev fra %s" "USB-lager" "Rediger" - "Underretning om dataforbrug" - "Tryk for at se forbrug og indstillinger." - "Grænsen for 2G-3G-data er nået" - "Grænsen for 4G-data er nået" + "Advarsel om dataforbrug" + "Du har brugt %s data" "Grænsen for mobildata er nået" "Grænsen for Wi-Fi-data er nået" - "Data er afbrudt i resten af perioden" - "2G-3G-data overskredet" - "Grænsen for 4G-data er overskredet" - "Mobildatagrænsen er overskredet" - "Grænsen for Wi-Fi-data er overskredet" - "%s over den angivne grænse." + "Dit forbrug af mobildata er sat på pause i resten af din cyklus" + "Datagrænsen er overskredet" + "Wi-Fi-datagrænsen er overskredet" + "Du har overskredet din angivne grænse med %s" "Baggrundsdata er begrænsede" "Tryk for at fjerne begrænsning." - "Stort dataforbrug" - "Dit dataforbrug i løbet af de seneste 7 dage er større end normalt. Tryk for at se forbrug og indstillinger." + "Højt forbrug af mobildata" + "Dine apps har haft et højere forbrug af mobildata end normalt" + "%s har haft et højere forbrug af mobildata end normalt" "Sikkerhedscertifikat" "Dette certifikat er gyldigt." "Udstedt til:" @@ -1669,7 +1707,7 @@ "Installeret af din administrator" "Opdateret af din administrator" "Slettet af din administrator" - "Batterisparefunktionen hjælper med at forlænge batteritiden ved at reducere enhedens ydeevne og begrænse vibration, placeringstjenester og det meste baggrundsdata. Mail, beskedfunktioner og andre apps, der benytter synkronisering, opdateres muligvis ikke, medmindre du åbner dem.\n\nBatterisparefunktionen deaktiveres automatisk, når enheden oplader." + "Batterisparefunktionen forlænger batteritiden ved at reducere enhedens ydeevne og begrænse eller deaktivere vibration, placeringstjenester og baggrundsdata. Mail, beskedfunktioner og andre apps, der kræver synkronisering, opdateres muligvis ikke, medmindre du åbner dem.\n\nBatterisparefunktionen deaktiveres automatisk, når enheden oplader." "Datasparefunktionen forhindrer nogle apps i at sende eller modtage data i baggrunden for at reducere dataforbruget. En app, der er i brug, kan få adgang til data, men gør det måske ikke så ofte. Dette kan f.eks. betyde, at billeder ikke vises, før du trykker på dem." "Vil du slå Datasparefunktion til?" "Slå til" @@ -1681,7 +1719,7 @@ I %1$d min. (indtil kl. %2$s) I %1$d min. (indtil kl. %2$s) - + I %1$d time (indtil %2$s) I %1$d timer (indtil %2$s) @@ -1697,7 +1735,7 @@ I %d min. I %d min. - + I %d time I %d timer @@ -1720,14 +1758,14 @@ "Lyden blev afbrudt af %1$s" "Der er et internt problem med enheden, og den vil muligvis være ustabil, indtil du gendanner fabriksdataene." "Der er et internt problem med enheden. Kontakt producenten for at få yderligere oplysninger." - "USSD-anmodningen er ændret til en DIAL-anmodning." - "USSD-anmodningen er ændret til en SS-anmodning." - "USSD-anmodningen er ændret til en ny USSD-anmodning." - "USSD-anmodningen er ændret til en Video DIAL-anmodning." - "SS-anmodningen er ændret til en DIAL-anmodning." - "SS-anmodningen er ændret til en Vidieo DIAL-anmodning." - "SS-anmodningen er ændret til en USSD-anmodning." - "SS-anmodningen er ændret til en ny SS-anmodning." + "USSD-anmodningen blev ændret til et almindeligt opkald" + "USSD-anmodningen blev ændret til en SS-anmodning" + "Ændret til en USSD-anmodning" + "USSD-anmodningen blev ændret til et videoopkald" + "SS-anmodningen blev ændret til et almindeligt opkald" + "SS-anmodningen blev ændret til et videoopkald" + "SS-anmodningen blev ændret til en USSD-anmodning" + "Ændret til en SS-anmodning" "Arbejdsprofil" "Udvid" "Skjul" @@ -1825,6 +1863,14 @@ "SIM-kort er ikke aktiveret for tale" "SIM-kort er ikke tilladt for tale" "Telefon er ikke tilladt for tale" + + + + + + + + "Pop op-vindue" "%1$d mere" "Appversionen er nedgraderet, eller også er den ikke kompatibel med denne genvej" @@ -1837,7 +1883,14 @@ "Der er registreret en skadelig app" "%1$s anmoder om tilladelse til at vise eksempler fra %2$s" "Rediger" + "Telefonen vil vibrere ved opkald og underretninger" + "Der afspilles ikke lyd ved opkald og underretninger" "Systemændringer" + "Forstyr ikke" + "Forstyr ikke skjuler underretninger, så du bedre kan koncentrere dig" + "Dette er en ny adfærd. Tryk for at ændre den." "Tilstanden Forstyr ikke blev ændret" - "Tryk for at tjekke indstillingerne for adfærd ved underretninger" + "Tryk for at se, hvad der er blokeret." + "System" + "Indstillinger" diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index 0a98f91edada62efee0c276e6732869bdfbd9c7a..97298b1efb9db787c0ffd26439277ba713f1a8cb 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -82,6 +82,8 @@ "Keine Anrufe" "Keine Anrufe oder Notrufe" "Vorübergehend von deinem Mobilfunkanbieter deaktiviert" + + "Mobilfunknetz nicht erreichbar" "Versuche, das bevorzugte Netzwerk zu ändern. Tippe, um ein anderes auszuwählen." "Notrufe nicht möglich" @@ -120,12 +122,13 @@ "Roaming-Banner ein" "Roaming-Banner aus" "Suche nach Dienst" - - + "WLAN-Telefonie konnte nicht eingerichtet werden" "Um über WLAN telefonieren und Nachrichten senden zu können, bitte zuerst deinen Mobilfunkanbieter, diesen Dienst einzurichten. Aktiviere die Option \"Anrufe über WLAN\" dann noch einmal über die Einstellungen. (Fehlercode: %1$s)" - + + "Probleme beim Registrieren der WLAN-Telefonie bei deinem Mobilfunkanbieter: %1$s" + "%s" "%s Anrufe über WLAN" @@ -159,10 +162,8 @@ "Es werden zurzeit zu viele Anfragen verarbeitet. Versuche es später erneut." "Fehler bei Anmeldung für %1$s" "Synchronisierung" - - - - + "Synchronisierung nicht möglich" + "Es wurde versucht, zu viele %s zu löschen." "Der Tablet-Speicher ist voll. Lösche Dateien, um Speicherplatz freizugeben." "Der Speicher deiner Uhr ist voll. Lösche Dateien, um Speicherplatz freizugeben." "Der TV-Speicher ist voll. Lösche Dateien, um Speicherplatz freizugeben." @@ -272,40 +273,31 @@ "Zum Arbeitsprofil wechseln" "Kontakte" "auf deine Kontakte zugreifen" - - + "<b>%1$s</b> Zugriff auf deine Kontakte erlauben?" "Standort" "auf den Standort deines Geräts zugreifen" - - + "<b>%1$s</b> erlauben, den Gerätestandort abzurufen?" "Kalender" "auf deinen Kalender zugreifen" - - + "<b>%1$s</b> Zugriff auf deinen Kalender erlauben?" "SMS" "SMS senden und abrufen" - - + "<b>%1$s</b> erlauben, SMS zu senden und aufzurufen?" "Speicher" "auf Fotos, Medien und Dateien auf deinem Gerät zugreifen" - - + "<b>%1$s</b> erlauben, auf Fotos, Medien und Dateien auf deinem Gerät zuzugreifen?" "Mikrofon" "Audio aufnehmen" - - + "<b>%1$s</b> erlauben, Audioaufnahmen zu machen?" "Kamera" "Bilder und Videos aufnehmen" - - + "<b>%1$s</b> erlauben, Bilder und Videos aufzunehmen?" "Telefon" "Telefonanrufe tätigen und verwalten" - - + "<b>%1$s</b> erlauben, Anrufe zu tätigen und zu verwalten?" "Körpersensoren" "auf Sensordaten zu deinen Vitaldaten zugreifen" - - + "<b>%1$s</b> erlauben, auf Sensordaten zu deinen Vitalfunktionen zuzugreifen?" "Fensterinhalte abrufen" "Die Inhalte eines Fensters, mit dem du interagierst, werden abgerufen." "\"Tippen & Entdecken\" aktivieren" @@ -492,6 +484,8 @@ "Ermöglicht der App die Kommunikation mit Tags für die Nahfeldkommunikation, Karten und Readern" "Displaysperre deaktivieren" "Ermöglicht der App, die Tastensperre sowie den damit verbundenen Passwortschutz zu deaktivieren. Das Telefon deaktiviert die Tastensperre beispielsweise, wenn ein Anruf eingeht, und aktiviert sie wieder, nachdem das Gespräch beendet wurde." + "Biometrische Hardware verwenden" + "Erlaubt der App, biometrische Hardware zur Authentifizierung zu verwenden" "Fingerabdruckhardware verwalten" "Erlaubt der App, Methoden zum Hinzufügen und Löschen zu verwendender Fingerabdruckvorlagen aufzurufen" "Fingerabdruckhardware verwenden" @@ -504,6 +498,8 @@ "Nicht erkannt" + + "Fingerabdruckhardware nicht verfügbar" "Fingerabdruck kann nicht gespeichert werden. Entferne einen vorhandenen Fingerabdruck." "Zeitüberschreitung für Fingerabdruck. Versuche es erneut." @@ -1016,14 +1012,23 @@ "Eingabemethode" "Textaktionen" "E-Mail" + "E-Mail an ausgewählte Adresse senden" "Anrufen" + "Ausgewählte Telefonnummer anrufen" "Suchen" + "Ausgewählte Adresse finden" "Öffnen" + "Ausgewählte URL öffnen" "SMS" + "SMS an ausgewählte Telefonnummer senden" "Hinzufügen" + "Zu Kontakten hinzufügen" "Anzeigen" + "Ausgewählte Zeit im Kalender anzeigen" "Terminübersicht" + "Termin für die ausgewählte Zeit planen" "Verfolgen" + "Ausgewählten Flug verfolgen" "Der Speicherplatz wird knapp" "Einige Systemfunktionen funktionieren möglicherweise nicht." "Der Speicherplatz reicht nicht für das System aus. Stelle sicher, dass 250 MB freier Speicherplatz vorhanden sind, und starte das Gerät dann neu." @@ -1117,8 +1122,7 @@ "%1$s öffnen" "%1$s wird ohne Speichern geschlossen" "Speicherlimit für \"%1$s\" überschritten" - - + "Heap-Dump wurde erfasst. Tippe, um ihn zu teilen." "Heap-Dump teilen?" "Für den Prozess \"%1$s\" wurde das Prozessspeicherlimit von %2$s überschritten. Es steht ein Heap-Dump zur Verfügung, den du mit dem Entwickler teilen kannst. Beachte jedoch unbedingt, dass der Heap-Dump personenbezogene Daten von dir enthalten kann, auf die die App zugreifen kann." "Aktion für Text auswählen" @@ -1153,8 +1157,7 @@ "Mit offenem WLAN verbinden" "Mit WLAN des Mobilfunkanbieters verbinden" - - + "Verbindung zu WLAN wird hergestellt" "Mit WLAN verbunden" "WLAN-Verbindung konnte nicht hergestellt werden" "Tippen, um alle Netzwerke zu sehen" @@ -1270,33 +1273,49 @@ "%s wird über anderen Apps angezeigt" "Wenn du nicht möchtest, dass %s diese Funktion verwendet, tippe, um die Einstellungen zu öffnen und die Funktion zu deaktivieren." "Deaktivieren" - "%s wird vorbereitet" - "Nach Fehlern wird gesucht" - "Neue %s entdeckt" + + + + + + + + "Zum Übertragen von Fotos und Medien" - "%s beschädigt" - "%s ist beschädigt. Zum Reparieren tippen." - "%s ist beschädigt. Zur Problembehebung auswählen." + + + + "%s nicht unterstützt" "%s wird von diesem Gerät nicht unterstützt. Zum Einrichten in einem unterstützten Format tippen." "%s wird von diesem Gerät nicht unterstützt. Zur Einrichtung eines unterstützten Formats auswählen." "%s wurde unerwartet entfernt" - "Trenne die %s vor dem Entfernen, um Datenverluste zu vermeiden." - "%s wurde entfernt" - "%s entfernt. Neuen Speicher einlegen" - "%s wird gerade ausgeworfen…" - "Nicht entfernen" + + + + + + + + + + "Einrichten" "Auswerfen" "Ansehen" "%s fehlt" - "Dieses Medium wieder einlegen" + + "%s wird verschoben" "Daten werden verschoben" - "Verschieben abgeschlossen" - "Daten auf %s verschoben" - "Fehler bei Datenverschiebung" - "Daten verbleiben am ursprünglichen Speicherort" + + + + + + + + "Entfernt" "Ausgeworfen" "Wird überprüft…" @@ -1355,17 +1374,14 @@ "Verbindung zu durchgehend aktivem VPN wird hergestellt…" "Mit durchgehend aktivem VPN verbunden" "Verbindung mit dauerhaft aktivem VPN getrennt" - - + "Verbindungsaufbau zu dauerhaft aktivem VPN nicht möglich" "Netzwerk- oder VPN-Einstellungen ändern" "Datei auswählen" "Keine ausgewählt" "Zurücksetzen" "Senden" - - - - + "Fahr-App wird ausgeführt" + "Tippen, um die Fahr-App zu beenden." "Tethering oder Hotspot aktiv" "Zum Einrichten tippen." "Tethering ist deaktiviert" @@ -1691,8 +1707,7 @@ "Von deinem Administrator installiert" "Von deinem Administrator aktualisiert" "Von deinem Administrator gelöscht" - - + "Der Energiesparmodus schont den Akku, indem er die Leistung des Geräts reduziert und die Vibrationsfunktion, Standortdienste sowie die Hintergrunddaten einschränkt oder deaktiviert. E-Mail, Messaging und andere Apps, die auf deinem Gerät synchronisiert werden, werden möglicherweise nur aktualisiert, wenn du sie öffnest.\n\nDer Energiesparmodus wird automatisch deaktiviert, wenn dein Gerät aufgeladen wird." "Mit dem Datensparmodus wird die Datennutzung verringert, indem verhindert wird, dass im Hintergrund Daten von Apps gesendet oder empfangen werden. Datenzugriffe sind mit einer aktiven App zwar möglich, erfolgen aber seltener. Als Folge davon könnten Bilder beispielsweise erst dann sichtbar werden, wenn sie angetippt werden." "Datensparmodus aktivieren?" "Aktivieren" @@ -1743,22 +1758,14 @@ "Stummgeschaltet durch %1$s" "Es liegt ein internes Problem mit deinem Gerät vor. Möglicherweise verhält es sich instabil, bis du es auf die Werkseinstellungen zurücksetzt." "Es liegt ein internes Problem mit deinem Gerät vor. Bitte wende dich diesbezüglich an den Hersteller." - - - - - - - - - - - - - - - - + "USSD-Anfrage wurde in normalen Anruf geändert" + "USSD-Anfrage wurde in SS-Anfrage geändert" + "In neue USSD-Anfrage geändert" + "USSD-Anfrage wurde in Videoanruf geändert" + "SS-Anfrage wurde in normalen Anruf geändert" + "SS-Anfrage wurde in Videoanruf geändert" + "SS-Anfrage wurde in USSD-Anfrage geändert" + "In neue SS-Anfrage geändert" "Arbeitsprofil" "Maximieren" "Minimieren" @@ -1856,6 +1863,14 @@ "SIM nicht für Sprachfunktion eingerichtet" "SIM unterstützt die Sprachfunktion nicht" "Smartphone unterstützt Sprachfunktion nicht" + + + + + + + + "Pop-up-Fenster" "+ %1$d" "Die App-Version wurde zurückgestuft oder ist mit dieser Verknüpfung nicht kompatibel" @@ -1876,8 +1891,6 @@ "Das ist ein neues Verhalten. Tippe, um die Einstellung zu ändern." "\"Bitte nicht stören\" wurde geändert" "Tippe, um zu überprüfen, welche Inhalte blockiert werden." - - - - + "System" + "Einstellungen" diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 1371000a899ba0e2061ee7027e7753c1945d1657..6c42468bda1fac32647b50d2cc232aafdaeaaf0c 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -77,15 +77,16 @@ "Η αναγνώριση κλήσης βρίσκεται από προεπιλογή στην \"μη περιορισμένη\". Επόμενη κλήση: Μη περιορισμένη" "Η υπηρεσία δεν προβλέπεται." "Δεν μπορείτε να αλλάξετε τη ρύθμιση του αναγνωριστικού καλούντος." - "Δεν υπάρχει υπηρεσία δεδομένων" - "Δεν επιτρέπονται οι κλήσεις έκτακτης ανάγκης" + "Δεν υπάρχει υπηρεσία δεδομένων κινητής τηλεφωνίας" + "Οι κλήσεις έκτακτης ανάγκης δεν είναι διαθέσιμες" "Δεν υπάρχει φωνητική υπηρεσία" - "Δεν υπάρχει φωνητική υπηρεσία/υπηρεσία έκτακτης ανάγκης" - "Δεν προσφέρεται προσωρινά από το δίκτυο κινητής τηλεφωνίας στην τοποθεσία σας" - "Δεν είναι δυνατή η σύνδεση στο δίκτυο" - "Για να βελτιώσετε τη λήψη, δοκιμάστε να αλλάξετε τον επιλεγμένο τύπο από τις Ρυθμίσεις > Δίκτυο και διαδίκτυο > Δίκτυα κινητής τηλεφωνίας > Προτιμώμενος τύπος δικτύου." - "Η κλήση Wi‑Fi είναι ενεργή" - "Για κλήσεις έκτακτης ανάγκης, απαιτείται δίκτυο κινητής τηλεφωνίας." + "Δεν υπάρχει φωνητική υπηρεσία ή κλήσεις έκτακτης ανάγκης" + "Απενεργοποιήθηκε προσωρινά από την εταιρεία κινητής τηλεφωνίας σας" + "Απενεργοποιήθηκε προσωρινά από την εταιρεία κινητής τηλεφωνίας σας για τον αριθμό SIM %d" + "Δεν είναι δυνατή η σύνδεση στο δίκτυο κινητής τηλεφωνίας" + "Δοκιμάστε να αλλάξετε το προτιμώμενο δίκτυο. Πατήστε για αλλαγή." + "Οι κλήσεις έκτακτης ανάγκης δεν είναι διαθέσιμες" + "Δεν είναι δυνατή η πραγματοποίηση κλήσεων έκτακτης ανάγκης μέσω Wi‑Fi" "Ειδοποιήσεις" "Προώθηση κλήσης" "Λειτουργία επιστροφής κλήσης έκτακτης ανάγκης" @@ -120,12 +121,12 @@ "Ενεργό διαφημιστικό πλαίσιο περιαγωγής" "Διαφημιστικό πλαίσιο περιαγωγής απενεργοποιημένο" "Αναζήτηση υπηρεσιών" - "Κλήση Wi-Fi" + "Δεν ήταν δυνατή η ρύθμιση της κλήσης Wi-Fi" "Για να κάνετε κλήσεις και να στέλνετε μηνύματα μέσω Wi-Fi, ζητήστε πρώτα από την εταιρεία κινητής τηλεφωνίας να ρυθμίσει την υπηρεσία. Στη συνέχεια, ενεργοποιήστε ξανά την Κλήση Wi-Fi από τις Ρυθμίσεις. (Κωδικός σφάλματος: %1$s)" - "Εγγραφείτε μέσω της εταιρείας κινητής τηλεφωνίας που χρησιμοποιείτε (Κωδικός σφάλματος: %1$s)" + "Παρουσιάστηκε πρόβλημα με την εγγραφή της κλήσης Wi‑Fi με την εταιρεία κινητής τηλεφωνίας: %1$s" "%s" @@ -160,8 +161,8 @@ "Πραγματοποιείται επεξεργασία πάρα πολλών αιτημάτων. Προσπαθήστε ξανά αργότερα." "Σφάλμα σύνδεσης για τον λογαριασμό %1$s" "Συγχρονισμός" - "Συγχρονισμός" - "Πάρα πολλές %s διαγραφές." + "Αδυναμία συγχρονισμού" + "Επιχειρήθηκε η διαγραφή πάρα πολλών %s." "Ο αποθηκευτικός χώρος του tablet είναι πλήρης. Διαγράψτε μερικά αρχεία για να δημιουργήσετε ελεύθερο χώρο." "Ο αποθηκευτικός χώρος παρακολούθησης είναι πλήρης! Διαγράψτε μερικά αρχεία για να απελευθερώσετε χώρο." "Ο αποθηκευτικός χώρος της τηλεόρασης είναι πλήρης. Διαγράψτε ορισμένα αρχεία, για να ελευθερώσετε χώρο." @@ -174,14 +175,13 @@ "Από τον διαχειριστή του προφίλ εργασίας σας" "Από %s" "Το προφίλ εργασίας διαγράφηκε" - "Το προφίλ εργασίας διαγράφηκε λόγω απουσίας της εφαρμογής διαχείρισης" "Η εφαρμογή διαχείρισης προφίλ εργασίας είτε λείπει είτε είναι κατεστραμμένη. Ως αποτέλεσμα, διαγράφηκε το προφίλ εργασίας και τα σχετικά δεδομένα. Επικοινωνήστε με τον διαχειριστή σας για βοήθεια." "Το προφίλ εργασίας σας δεν είναι πια διαθέσιμο σε αυτήν τη συσκευή" "Πάρα πολλές προσπάθειες εισαγωγής κωδικού πρόσβασης" "Η συσκευή είναι διαχειριζόμενη" "Ο οργανισμός σας διαχειρίζεται αυτήν τη συσκευή και ενδέχεται να παρακολουθεί την επισκεψιμότητα δικτύου. Πατήστε για λεπτομέρειες." "Η συσκευή σας θα διαγραφεί" - "Δεν είναι δυνατή η χρήση της εφαρμογής διαχείρισης. Θα πραγματοποιηθεί διαγραφή της συσκευής σας.\n\nΕάν έχετε ερωτήσεις, επικοινωνήστε με τον διαχειριστή του οργανισμού σας." + "Δεν είναι δυνατή η χρήση της εφαρμογής διαχειριστή. Η συσκευή σας θα διαγραφεί.\n\nΕάν έχετε ερωτήσεις, επικοινωνήστε με τον διαχειριστή του οργανισμού σας." "Η εκτύπωση απενεργοποιήθηκε από τον χρήστη %s." "Για εμένα" "Επιλογές tablet" @@ -236,6 +236,9 @@ "Λειτουργία πτήσης" "Η λειτουργία πτήσης είναι ενεργοποιημένη." "Λειτ. πτήσης είναι ανενεργή" + "Εξοικονόμηση μπαταρίας" + "Η εξοικονόμηση μπαταρίας είναι ΑΠΕΝΕΡΓΟΠΟΙΗΜΕΝΗ" + "Η Εξοικονόμηση μπαταρίας είναι ΕΝΕΡΓΗ" "Ρυθμίσεις" "Βοήθεια" "Φων.υποβοηθ." @@ -269,31 +272,31 @@ "Εναλλαγή σε προφίλ εργασίας" "Επαφές" "πρόσβαση στις επαφές σας" - "Να επιτρέπεται στην εφαρμογή <b>%1$s</b> να έχει πρόσβαση στις επαφές σας" + "Να επιτρέπεται στην εφαρμογή <b>%1$s</b> να έχει πρόσβαση στις επαφές σας;" "Τοποθεσία" "έχει πρόσβαση στην τοποθεσία της συσκευής" - "Να επιτρέπεται στην εφαρμογή <b>%1$s</b> να έχει πρόσβαση στην τοποθεσία της συσκευής" + "Να επιτρέπεται στην εφαρμογή <b>%1$s</b> να έχει πρόσβαση στην τοποθεσία αυτής της συσκευής;" "Ημερολόγιο" "έχει πρόσβαση στο ημερολόγιό σας" - "Να επιτρέπεται στην εφαρμογή <b>%1$s</b> να έχει πρόσβαση στο ημερολόγιό σας" + "Να επιτρέπεται στην εφαρμογή <b>%1$s</b> να έχει πρόσβαση στο ημερολόγιό σας;" "SMS" "στέλνει και να διαβάζει μηνύματα SMS" - "Να επιτρέπεται στην εφαρμογή <b>%1$s</b> η αποστολή και η προβολή μηνυμάτων SMS" + "Να επιτρέπεται στην εφαρμογή <b>%1$s</b> η αποστολή και η προβολή μηνυμάτων SMS;" "Αποθηκευτικός χώρος" "έχει πρόσβαση στις φωτογραφίες/πολυμέσα/αρχεία στη συσκευή σας" - "Να επιτρέπεται στην εφαρμογή <b>%1$s</b> να έχει πρόσβαση σε φωτογραφίες, μέσα και αρχεία στη συσκευή σας" + "Να επιτρέπεται στην εφαρμογή <b>%1$s</b> να έχει πρόσβαση σε φωτογραφίες, μέσα και αρχεία στη συσκευή σας;" "Μικρόφωνο" "ηχογραφεί" - "Να επιτρέπεται στην εφαρμογή <b>%1$s</b> η εγγραφή ήχου" + "Να επιτρέπεται στην εφαρμογή <b>%1$s</b> η εγγραφή ήχου;" "Κάμερα" "γίνεται λήψη φωτογραφιών και εγγραφή βίντεο" - "Να επιτρέπεται στην εφαρμογή <b>%1$s</b> η λήψη φωτογραφιών και η εγγραφή βίντεο" + "Να επιτρέπεται στην εφαρμογή <b>%1$s</b> η λήψη φωτογραφιών και η εγγραφή βίντεο;" "Τηλέφωνο" "πραγματοποιεί και να διαχειρίζεται τηλ/κές κλήσεις" - "Να επιτρέπεται στην εφαρμογή <b>%1$s</b> η πραγματοποίηση και η διαχείριση τηλεφωνικών κλήσεων" + "Να επιτρέπεται στην εφαρμογή <b>%1$s</b> η πραγματοποίηση και η διαχείριση τηλεφωνικών κλήσεων;" "Αισθητήρες σώματος" "πρόσβαση στα δεδομένα αισθητήρα σχετικά με τις ζωτικές ενδείξεις σας" - "Να επιτρέπεται στην εφαρμογή <b>%1$s</b> να έχει πρόσβαση στα δεδομένα αισθητήρα σχετικά με τις ζωτικές ενδείξεις σας." + "Να επιτρέπεται στην εφαρμογή <b>%1$s</b> να έχει πρόσβαση στα δεδομένα αισθητήρα σχετικά με τις ζωτικές ενδείξεις σας;" "Ανάκτηση του περιεχομένου του παραθύρου" "Έλεγχος του περιεχομένου ενός παραθύρου με το οποίο αλληλεπιδράτε." "Ενεργοποίηση της \"Εξερεύνησης με άγγιγμα\"" @@ -305,7 +308,7 @@ "Εκτέλεση κινήσεων" "Επιτρέπει το πάτημα, την ολίσθηση, το πλησίασμα και άλλες κινήσεις." "Κινήσεις δακτυλικών αποτυπωμάτων" - "Μπορεί να αναγνωρίσει κινήσεις που εκτελούνται στον αισθητήρα δακτυλικών αποτυπωμάτων των συσκευών." + "Μπορεί να αναγνωρίσει κινήσεις που εκτελούνται στον αισθητήρα δακτυλικών αποτυπωμάτων της συσκευής." "απενεργοποιεί ή να τροποποιεί την γραμμή κατάστασης" "Επιτρέπει στην εφαρμογή να απενεργοποιεί τη γραμμή κατάστασης ή να προσθέτει και να αφαιρεί εικονίδια συστήματος." "ορίζεται ως γραμμή κατάστασης" @@ -356,6 +359,8 @@ "Επιτρέπει στην εφαρμογή να δημιουργεί μόνιμα τμήματα του εαυτού της στη μνήμη. Αυτό μπορεί να περιορίζει τη μνήμη που διατίθεται σε άλλες εφαρμογές, καθυστερώντας τη λειτουργία του tablet." "Επιτρέπει στην εφαρμογή να καθιστά τμήματά της μόνιμα στη μνήμη. Αυτό μπορεί να περιορίσει τη μνήμη που διατίθεται σε άλλες εφαρμογές, επιβραδύνοντας τη λειτουργία της τηλεόρασης." "Επιτρέπει στην εφαρμογή να δημιουργεί μόνιμα τμήματα του εαυτού της στη μνήμη. Αυτό μπορεί να περιορίζει τη μνήμη που διατίθεται σε άλλες εφαρμογές, καθυστερώντας τη λειτουργία του τηλεφώνου." + "εκτέλεση υπηρεσίας προσκηνίου" + "Επιτρέπει στην εφαρμογή να χρησιμοποιεί υπηρεσίες προσκηνίου." "υπολογίζει τον αποθηκευτικό χώρο εφαρμογής" "Επιτρέπει στην εφαρμογή να ανακτήσει τα μεγέθη κώδικα, δεδομένων και προσωρινής μνήμης" "τροποποίηση ρυθμίσεων συστήματος" @@ -478,6 +483,8 @@ "Επιτρέπει στην εφαρμογή την επικοινωνία με ετικέτες, κάρτες και αναγνώστες της Επικοινωνίας κοντινού πεδίου (NFC)." "απενεργοποιεί το κλείδωμα οθόνης" "Επιτρέπει στην εφαρμογή την απενεργοποίηση του κλειδώματος πληκτρολογίου και άλλης σχετικής ασφάλειας με κωδικό πρόσβασης. Για παράδειγμα, το κλείδωμα πληκτρολογίου στο τηλέφωνο απενεργοποιείται όταν λαμβάνεται εισερχόμενη τηλεφωνική κλήση και ενεργοποιείται ξανά όταν η κλήση τερματιστεί." + "χρήση βιομετρικού εξοπλισμού" + "Επιτρέπει στην εφαρμογή να χρησιμοποιεί βιομετρικό εξοπλισμό για έλεγχο ταυτότητας" "διαχειρίζεται τον εξοπλισμό δακτυλικού αποτυπώματος" "Επιτρέπει στην εφαρμογή να επικαλείται μεθόδους για την προσθήκη και τη διαγραφή προτύπων μοναδικού χαρακτηριστικού για χρήση." "χρησιμοποιεί τον εξοπλισμό δακτυλικού αποτυπώματος" @@ -490,6 +497,7 @@ "Δεν αναγνωρίστηκε" + "Η ταυτότητα του δακτυλικού αποτυπώματος ελέγχθηκε" "Ο εξοπλισμός μοναδικού χαρακτηριστικού δεν είναι διαθέσιμος." "Δεν είναι δυνατή η αποθήκευση μοναδικού χαρακτηριστικού. Καταργήστε το υπάρχον μοναδικό χαρακτηριστικό." "Λήξη χρονικού ορίου μοναδικού χαρακτηριστικού. Δοκιμάστε ξανά." @@ -802,6 +810,8 @@ "Ξεκλείδωμα μοτίβου." "Face unlock." "Ξεκλείδωμα κωδικού ασφαλείας" + "Ξεκλείδωμα αριθμού PIN κάρτας SIM." + "Ξεκλείδωμα αριθμού PUK κάρτας SIM." "Ξεκλείδωμα κωδικού πρόσβασης." "Περιοχή μοτίβου." "Περιοχή ολίσθησης" @@ -863,6 +873,12 @@ "Το κείμενο αντιγράφηκε στο πρόχειρο." "Περισσότερα" "Πλήκτρο Menu+" + "Meta+" + "Ctrl+" + "Alt+" + "Shift+" + "Sym+" + "Function+" "διάστημα" "εισαγωγή" "διαγραφή" @@ -994,14 +1010,23 @@ "Μέθοδος εισόδου" "Ενέργειες κειμένου" "Ηλεκτρονικό ταχυδρομείο" + "Αποστολή μηνύματος ηλεκτρονικού ταχυδρομείου στην επιλεγμένη διεύθυνση ηλεκτρονικού ταχυδρομείου" "Κλήση" + "Κλήση επιλεγμένου αριθμού τηλεφώνου" "Εντοπισμός" + "Εντοπισμός επιλεγμένης διεύθυνσης" "Άνοιγμα" + "Άνοιγμα επιλεγμένου URL" "Μήνυμα" + "Αποστολή μηνύματος στον επιλεγμένο αριθμό τηλεφώνου" "Προσθήκη" + "Προσθήκη στις επαφές" "Προβολή" + "Προβολή επιλεγμένης ώρας στο ημερολόγιο" "Χρονοδιάγραμμα" + "Προγραμματισμός συμβάντος για επιλεγμένο χρόνο" "Κομμάτι" + "Παρακολούθηση επιλεγμένης πτήσης" "Ο αποθηκευτικός χώρος εξαντλείται" "Ορισμένες λειτουργίες συστήματος ενδέχεται να μην λειτουργούν" "Δεν υπάρχει αρκετός αποθηκευτικός χώρος για το σύστημα. Βεβαιωθείτε ότι διαθέτετε 250 MB ελεύθερου χώρου και κάντε επανεκκίνηση." @@ -1074,31 +1099,28 @@ "Έλεγχος για ενημέρωση" "Η εφαρμογή %1$s (διεργασία %2$s) παραβίασε την αυτοεπιβαλλόμενη πολιτική StrictMode." "Η διεργασία %1$s παραβίασε την αυτοεπιβαλόμενη πολιτική StrictMode." - "Το Android αναβαθμίζεται..." - "Εκκίνηση Android…" + "Ενημέρωση τηλεφώνου…" + "Ενημέρωση tablet…" + "Ενημέρωση συστήματος…" + "Εκκίνηση τηλεφώνου…" + "Εκκίνηση tablet…" + "Εκκίνηση συσκευής…" "Βελτιστοποίηση αποθηκευτικού χώρου." - "Ολοκλήρωση ενημέρωσης Android…" - "Ορισμένες εφαρμογές ενδέχεται να μην λειτουργούν σωστά μέχρι την ολοκλήρωση της αναβάθμισης" + "Ολοκλήρωση ενημέρωσης συστήματος…" "Η εφαρμογή %1$s αναβαθμίζεται…" "Βελτιστοποίηση της εφαρμογής %1$d από %2$d." "Προετοιμασία %1$s." "Έναρξη εφαρμογών." "Ολοκλήρωση εκκίνησης." "Η εφαρμογή %1$s εκτελείται" - - - - - - - - - - - - + "Πατήστε για να επιστρέψετε στο παιχνίδι" + "Επιλέξτε παιχνίδι" + "Για καλύτερη απόδοση, μόνο ένα από αυτά τα παιχνίδια μπορεί να ανοίγει κάθε φορά." + "Επιστρέψτε στην εφαρμογή %1$s" + "Ανοίξτε την εφαρμογή %1$s" + "Η εφαρμογή %1$s θα κλείσει χωρίς αποθήκευση" "Η διαδικασία %1$s υπερβαίνει το όριο μνήμης" - "Έγινε λήψη του στιγμιότυπου μνήμης, πατήστε για κοινή χρήση" + "Το στιγμιότυπο οθόνης λήφθηκε. Πατήστε για κοινοποίηση." "Κοινή χρήση στιγμιότυπου μνήμης;" "Η διαδικασία %1$s υπερβαίνει το όριο μνήμης %2$s. Είναι διαθέσιμο ένα στιγμιότυπο μνήμης για να μοιραστείτε με τον προγραμματιστή. Να είστε προσεκτικοί: αυτό το στιγμιότυπο μνήμης μπορεί να περιέχει οποιοδήποτε από τα προσωπικά σας στοιχεία στα οποία έχει πρόσβαση η εφαρμογή." "Επιλέξτε μια ενέργεια για το κείμενο" @@ -1133,12 +1155,12 @@ "Σύνδεση σε ανοιχτό δίκτυο Wi‑Fi" "Σύνδεση με δίκτυο Wi‑Fi εταιρείας κινητής τηλεφωνίας" - "Σύνδεση σε ανοιχτό δίκτυο Wi‑Fi" + "Σύνδεση σε δίκτυο Wi-Fi" "Ολοκληρώθηκε η σύνδεση στο δίκτυο Wi-Fi" "Δεν ήταν δυνατή η σύνδεση σε δίκτυο Wi‑Fi" "Πατήστε για να δείτε όλα τα δίκτυα" "Σύνδεση" - "Όλα τα δίκτυα" + "Όλα τα δίκτυα" "Το Wi‑Fi θα ενεργοποιηθεί αυτόματα" "Όταν βρίσκεστε κοντά σε αποθηκευμένο δίκτυο υψηλής ποιότητας" "Να μην ενεργοποιηθεί ξανά" @@ -1204,6 +1226,7 @@ "Επανεκκίνηση" "Ενεργοποίηση υπηρεσίας κινητής τηλεφωνίας" "Κατεβάστε την εφαρμογή της εταιρείας κινητής τηλεφωνίας, για να ενεργοποιήσετε τη νέα SIM" + "Κατεβάστε την εφαρμογή %1$s για να ενεργοποιήσετε τη νέα SIM" "Λήψη εφαρμογής" "Τοποθετήθηκε νέα SIM" "Πατήστε για ρύθμιση" @@ -1222,13 +1245,13 @@ "Η λειτουργία PTP μέσω USB ενεργοποιήθηκε" "Η σύνδεση μέσω USB ενεργοποιήθηκε" "Η λειτουργία MIDI μέσω USB ενεργοποιήθηκε" - "Η λειτουργία αξεσουάρ USB ενεργοποιήθηκε" + "Συνδέθηκε αξεσουάρ USB" "Πατήστε για περισσότερες επιλογές." "Φόρτιση συνδεδεμένης συσκευής. Πατήστε για περισσότερες επιλογές." "Εντοπίστηκε αναλογικό αξεσουάρ ήχου" "Η συνδεδεμένη συσκευή δεν είναι συμβατή με αυτό το τηλέφωνο. Πατήστε για να μάθετε περισσότερα." "Συνδέθηκε ο εντοπισμός σφαλμάτων USB" - "Πατήστε για απενεργοποίηση του εντοπισμού σφαλμάτων USB." + "Πατήστε για να απενεργοποιήσετε τον εντοπισμό και τη διόρθωση σφαλμάτων USB" "Επιλογή για απενεργοποίηση του εντοπισμού σφαλμάτων USB." "Λήψη αναφοράς σφάλματος…" "Κοινή χρήση αναφοράς σφάλματος;" @@ -1247,34 +1270,35 @@ "Η εφαρμογή %s προβάλλεται πάνω από άλλες εφαρμογές" "Η εφαρμογή %s επικαλύπτει άλλες" "Εάν δεν θέλετε να χρησιμοποιείται αυτή η λειτουργία από την εφαρμογή %s, πατήστε για να ανοίξετε τις ρυθμίσεις και απενεργοποιήστε την." - "ΑΠΕΝΕΡΓΟΠΟΙΗΣΗ" - "Προετοιμασία %s" - "Έλεγχος για σφάλματα" - "Εντοπίστηκε νέο μέσο αποθήκευσης %s" + "Απενεργοποίηση" + "Έλεγχος %s…" + "Έλεγχος τρέχοντος περιεχομένου" + "Νέο %s" + "Πατήστε για ρύθμιση" "Για μεταφορά φωτ./πολυμέσων" - "Η κάρτα %s είναι κατεστραμμένη" - "Το μέσο %s είναι κατεστραμμένο. Πατήστε για επιδιόρθωση." + "Πρόβλημα με %s" + "Πατήστε για επιδιόρθωση" "Το μέσο %s έχει καταστραφεί. Επιλέξτε να γίνει επιδιόρθωση." "Η κάρτα %s δεν υποστηρίζεται" "Αυτή η συσκευή δεν υποστηρίζει αυτό το μέσο %s. Πατήστε για ρύθμιση σε μια υποστηριζόμενη μορφή." "Αυτή η συσκευή δεν υποστηρίζει το μέσο %s. Επιλέξτε να ρυθμιστεί σε μια υποστηριζόμενη μορφή." "Μη αναμενόμενη αφαίρεση %s" - "Αποπροσαρτήστε το μέσο αποθήκευσης %s πριν τον αφαιρέσετε, προς αποφυγή απώλειας δεδομένων." - "Καταργήθηκε το %s." - "Καταργήθηκε %s. Τοποθετήστε μια νέα κάρτα" - "Εξακολουθεί να γίνεται κατάργηση %s…" - "Να μην καταργηθεί" + "Κάντε εξαγωγή των μέσων πριν τα καταργήσετε, για να μην χάσετε το περιεχόμενό σας" + "Το %s καταργήθηκε" + "Ορισμένες δυνατότητες ενδέχεται να μην λειτουργούν σωστά. Τοποθετήστε νέο αποθηκευτικό χώρο." + "Εξαγωγή %s…" + "Μην το αφαιρείτε" "Ρύθμιση" "Εξαγωγή" "Εξερεύνηση" "Λείπει το μέσο %s" - "Τοποθετήστε ξανά τη συσκευή" + "Τοποθετήστε ξανά τη συσκευή" "Μετακίνηση %s" "Μετακίνηση δεδομένων" - "Η μετακίνηση ολοκληρώθηκε" - "Τα δεδομένα μεταφέρθηκαν σε %s" - "Αδύνατη μετακίνηση των δεδομένων" - "Δεδομένα που απέμειναν στην αρχική τοποθεσία" + "Η μεταφορά περιεχ. ολοκληρώθηκε" + "Το περιεχόμενο μετακινήθηκε σε %s" + "Μη δυνατή μετακίν. περιεχομένου" + "Δοκιμάστε ξανά να μετακινήσετε το περιεχόμενο" "Αφαιρέθηκε" "Καταργήθηκε" "Έλεγχος..." @@ -1333,14 +1357,14 @@ "Σύνδεση πάντα ενεργοποιημένου VPN…" "Έχει συνδεθεί πάντα ενεργοποιημένο VPN" "Αποσύνδεση από μονίμως ενεργό VPN" - "Σφάλμα πάντα ενεργοποιημένου VPN" + "Δεν ήταν δυνατή η σύνδεση σε πάντα ενεργό VPN" "Αλλαγή δικτύου ή ρυθμίσεις VPN" "Επιλογή αρχείου" "Δεν επιλέχθηκε κανένα αρχείο." "Επαναφορά" "Υποβολή" - "Η λειτουργία αυτοκινήτου είναι ενεργοποιημένη" - "Πατήστε για έξοδο από τη λειτουργία αυτοκινήτου." + "Η εφαρμογή οδήγησης εκτελείται" + "Πατήστε για να εξέλθετε από την εφαρμογή οδήγησης." "Πρόσδεση ή σύνδεση σημείου πρόσβασης ενεργή" "Πατήστε για ρύθμιση." "Η σύνδεση είναι απενεργοποιημένη" @@ -1418,22 +1442,19 @@ "Μονάδα USB %s" "Αποθηκευτικός χώρος USB" "Επεξεργασία" - "Ειδοποίηση χρήσης δεδομένων" - "Πατήστε για προβολή χρήσης/ρυθμ." - "Συμπλ. το όριο δεδομένων 2G-3G" - "Συμπλ. το όριο δεδομένων 4G" + "Προειδοποίηση δεδομένων" + "Έχετε χρησιμοποιήσει %s δεδομένων" "Συμπληρώθηκε όριο δεδ. κιν.τηλ." "Συμπλ. το όριο δεδ. Wi-Fi" - "Παύση δεδ. για το υπ. του κύκλ." - "Ξεπεράστηκε το όριο δεδομ. 2G-3G" - "Ξεπεράστηκε το όριο δεδομένων 4G" - "Ξεπεράστηκε το όριο δεδομένων κινητής τηλεφωνίας" - "Υπέρβ. ορίου Wi-Fi" - "%s πάνω από το καθορισμένο όριο." + "Τα δεδομένα τέθηκαν σε παύση για τον υπόλοιπο κύκλο σας" + "Υπέρβαση ορίου δεδομ. κιν. τηλ." + "Υπέρβαση ορίου δεδομένων Wi-Fi" + "Υπερβήκατε το καθορισμένο όριο κατά %s" "Περ.δεδομ.παρασκ." "Πατήστε για κατάργ. περιορισμών." - "Εκτεταμένη χρήση δεδομένων" - "Η χρήση δεδομένων κατά τις τελευταίες ημέρες είναι μεγαλύτερη από το κανονικό. Πατήστε για να δείτε τη χρήση και τις ρυθμίσεις." + "Υψηλή χρήση δεδομ. κιν. τηλεφ." + "Οι εφαρμογές σας έχουν χρησιμοποιήσει περισσότερα δεδομένα από το συνηθισμένο" + "Η εφαρμογή %s έχει χρησιμοποιήσει περισσότερα δεδομένα από το συνηθισμένο" "Πιστοποιητικό ασφαλείας" "Αυτό το πιστοποιητικό είναι έγκυρο." "Εκδόθηκε σε:" @@ -1669,7 +1690,7 @@ "Εγκαταστάθηκε από τον διαχειριστή σας" "Ενημερώθηκε από τον διαχειριστή σας" "Διαγράφηκε από τον διαχειριστή σας" - "Προκειμένου να βελτιώσει τη διάρκεια ζωής της μπαταρίας σας, η Εξοικονόμηση μπαταρίας μειώνει την απόδοση της συσκευής σας και περιορίζει λειτουργίες όπως η δόνηση, οι υπηρεσίες τοποθεσίας και τα περισσότερα δεδομένα παρασκηνίου. Το ηλεκτρονικό ταχυδρομείο, η ανταλλαγή μηνυμάτων και άλλες εφαρμογές που βασίζονται στον συγχρονισμό μπορεί να μην ενημερώνονται έως ότου τις ανοίξετε.\n\nΗ Εξοικονόμηση μπαταρίας απενεργοποιείται αυτόματα κατά τη διάρκεια της φόρτισης της συσκευής σας." + "Προκειμένου να επεκτείνει τη διάρκεια ζωής της μπαταρίας, η Εξοικονόμηση μπαταρίας μειώνει την απόδοση της συσκευής σας και περιορίζει ή απενεργοποιεί τη δόνηση, τις υπηρεσίες τοποθεσίας και τα δεδομένα παρασκηνίου. Οι εφαρμογές ηλεκτρονικού ταχυδρομείου, ανταλλαγής μηνυμάτων και άλλες, οι οποίες βασίζονται στον συγχρονισμό μπορεί να μην ενημερωθούν, εκτός εάν τις ανοίξετε.\n\nΗ Εξοικονόμηση μπαταρίας απενεργοποιείται αυτόματα κατά τη φόρτιση της συσκευής σας." "Προκειμένου να μειωθεί η χρήση δεδομένων, η Εξοικονόμηση δεδομένων αποτρέπει την αποστολή ή λήψη δεδομένων από ορισμένες εφαρμογές στο παρασκήνιο. Μια εφαρμογή που χρησιμοποιείτε αυτήν τη στιγμή μπορεί να χρησιμοποιήσει δεδομένα αλλά με μικρότερη συχνότητα. Για παράδειγμα, οι εικόνες μπορεί να μην εμφανίζονται μέχρι να τις πατήσετε." "Ενεργ.Εξοικονόμησης δεδομένων;" "Ενεργοποίηση" @@ -1681,9 +1702,9 @@ Για %1$d λεπτά (μέχρι %2$s) Για 1 λεπτό (μέχρι %2$s) - - Για %1$d ώρες (έως τις %2$s) - Για μία ώρα (έως τις %2$s) + + Για %1$d ώρες (μέχρι τις %2$s) + Για 1 ώρα (μέχρι τις %2$s) Για %1$d ώρες (μέχρι %2$s) @@ -1697,9 +1718,9 @@ Για %d λεπτά Για 1 λεπτό - + Για %d ώρες - Για μία ώρα + Για 1 ώρα Για %d ώρες @@ -1720,14 +1741,14 @@ "Σίγαση από %1$s" "Υπάρχει ένα εσωτερικό πρόβλημα με τη συσκευή σας και ενδέχεται να είναι ασταθής μέχρι την επαναφορά των εργοστασιακών ρυθμίσεων." "Υπάρχει ένα εσωτερικό πρόβλημα με τη συσκευή σας. Επικοινωνήστε με τον κατασκευαστή σας για λεπτομέρειες." - "Το αίτημα USSD τροποποιήθηκε σε αίτημα DIAL." - "Το αίτημα USSD τροποποιήθηκε σε αίτημα SS." - "Το αίτημα USSD τροποποιήθηκε σε νέο αίτημα USSD." - "Το αίτημα USSD τροποποιήθηκε σε αίτημα Video DIAL." - "Το αίτημα SS τροποποιήθηκε σε αίτημα DIAL." - "Το αίτημα SS τροποποιήθηκε σε αίτημα Video DIAL." - "Το αίτημα SS τροποποιήθηκε σε αίτημα USSD." - "Το αίτημα SS τροποποιήθηκε σε νέο αίτημα SS." + "Το αίτημα USSD τροποποιήθηκε σε κανονική κλήση" + "Το αίτημα USSD τροποποιήθηκε σε αίτημα SS" + "Τροποποιήθηκε σε νέο αίτημα USSD" + "Το αίτημα USSD τροποποιήθηκε σε βιντεοκλήση" + "Το αίτημα SS τροποποιήθηκε σε κανονική κλήση" + "Το αίτημα SS τροποποιήθηκε σε βιντεοκλήση" + "Το αίτημα SS τροποποιήθηκε σε αίτημα USSD" + "Τροποποιήθηκε σε νέο αίτημα SS" "Προφίλ εργασίας" "Ανάπτυξη" "Σύμπτυξη" @@ -1825,6 +1846,10 @@ "Δεν παρέχεται κάρτα SIM για φωνητικές εντολές" "Δεν επιτρέπεται η χρήση της κάρτας SIM για φωνητικές εντολές" "Δεν επιτρέπεται η χρήση του τηλεφώνου για φωνητικές εντολές" + "Ο αριθμός SIM %d δεν επιτρέπεται" + "Ο αριθμός SIM %d δεν παρέχεται" + "Ο αριθμός SIM %d δεν επιτρέπεται" + "Ο αριθμός SIM %d δεν επιτρέπεται" "Αναδυόμενο παράθυρο" "+ %1$d" "Η έκδοση εφαρμογής υποβαθμίστηκε ή δεν είναι συμβατή με αυτήν τη συντόμευση" @@ -1837,7 +1862,14 @@ "Εντοπίστηκε επιβλαβής εφαρμογή" "Η εφαρμογή %1$s θέλει να εμφανίζει τμήματα της εφαρμογής %2$s" "Επεξεργασία" + "Θα υπάρχει δόνηση για κλήσεις και ειδοποιήσεις" + "Οι κλήσεις και οι ειδοποιήσεις θα τεθούν σε παύση" "Αλλαγές στο σύστημα" + "Μην ενοχλείτε" + "Η λειτουργία \"Μην ενοχλείτε\" αποκρύπτει ειδοποιήσεις, για να μπορείτε να συγκεντρώνεστε καλύτερα" + "Αυτή η συμπεριφορά είναι νέα. Πατήστε για αλλαγή." "Η λειτουργία \"Μην ενοχλείτε\" άλλαξε" - "Πατήστε για να ελέγξετε τις ρυθμίσεις συμπεριφοράς για διακοπές" + "Πατήστε για να ελέγξετε το περιεχόμενο που έχει αποκλειστεί." + "Σύστημα" + "Ρυθμίσεις" diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml index 14bc016646395ee4b9cca5bbceff1b24a7806137..e7f40b09a923e5d6c4e924c5c0054402066169ab 100644 --- a/core/res/res/values-en-rAU/strings.xml +++ b/core/res/res/values-en-rAU/strings.xml @@ -82,6 +82,7 @@ "No voice service" "No voice service or emergency calling" "Temporarily turned off by your operator" + "Temporarily turned off by your operator for SIM %d" "Can’t reach mobile network" "Try changing preferred network. Tap to change." "Emergency calling unavailable" @@ -120,12 +121,13 @@ "Roaming Banner On" "Roaming Banner Off" "Searching for Service" - - + "Couldn’t set up Wi‑Fi calling" "To make calls and send messages over Wi-Fi, first ask your operator to set up this service. Then turn on Wi-Fi calling again from Settings. (Error code: %1$s)" - + + "Issue registering Wi‑Fi calling with your operator: %1$s" + "%s" "%s Wi-Fi Calling" @@ -481,6 +483,8 @@ "Allows the app to communicate with Near Field Communication (NFC) tags, cards and readers." "disable your screen lock" "Allows the app to disable the keylock and any associated password security. For example, the phone disables the keylock when receiving an incoming phone call, then re-enables the keylock when the call is finished." + "use biometric hardware" + "Allows the app to use biometric hardware for authentication" "manage fingerprint hardware" "Allows the app to invoke methods to add and delete fingerprint templates for use." "Use fingerprint hardware" @@ -493,6 +497,7 @@ "Not recognised" + "Fingerprint authenticated" "Fingerprint hardware not available." "Fingerprint can\'t be stored. Please remove an existing fingerprint." "Fingerprint timeout reached. Try again." @@ -1005,14 +1010,23 @@ "Input method" "Text actions" "Email" + "Email selected address" "Call" + "Call selected phone number" "Locate" + "Locale selected address" "Open" + "Open selected URL" "Message" + "Message selected phone number" "Add" + "Add to contacts" "View" + "View selected time in calendar" "Schedule" + "Schedule event for selected time" "Track" + "Track selected flight" "Storage space running out" "Some system functions may not work" "Not enough storage for the system. Make sure that you have 250 MB of free space and restart." @@ -1141,8 +1155,7 @@ "Connect to open Wi‑Fi network" "Connect to operator Wi‑Fi network" - - + "Connecting to Wi‑Fi network" "Connected to Wi‑Fi network" "Could not connect to Wi‑Fi network" "Tap to see all networks" @@ -1258,33 +1271,34 @@ "%s is displaying over other apps" "If you don’t want %s to use this feature, tap to open settings and turn it off." "Turn off" - "Preparing %s" - "Checking for errors" - "New %s detected" + "Checking %s…" + "Reviewing current content" + "New %s" + "Tap to set up" "For transferring photos and media" - "Corrupted %s" - "%s is corrupt. Tap to fix." + "Issue with %s" + "Tap to fix" "%s is corrupt. Select to fix." "Unsupported %s" "This device doesn’t support this %s. Tap to set up in a supported format." "This device doesn’t support this %s. Select to set up in a supported format." "%s unexpectedly removed" - "Unmount %s before removing to avoid data loss" - "Removed %s" - "%s removed; insert a new one" - "Still ejecting %s…" - "Don\'t remove" + "Eject media before removing to avoid losing content" + "%s removed" + "Some functionality may not work properly. Insert new storage." + "Ejecting %s" + "Don’t remove" "Set-up" "Eject" "Explore" "%s missing" - "Reinsert this device" + "Insert device again" "Moving %s" "Moving data" - "Move complete" - "Data moved to %s" - "Couldn\'t move data" - "Data left at original location" + "Content transfer is finished" + "Content moved to %s" + "Couldn’t move content" + "Try moving content again" "Removed" "Ejected" "Checking…" @@ -1832,6 +1846,10 @@ "SIM not provisioned for voice" "SIM not allowed for voice" "Phone not allowed for voice" + "SIM %d not allowed" + "SIM %d not provisioned" + "SIM %d not allowed" + "SIM %d not allowed" "Pop-Up Window" "+ %1$d" "App version downgraded or isn’t compatible with this shortcut" diff --git a/core/res/res/values-en-rCA/strings.xml b/core/res/res/values-en-rCA/strings.xml index d04d10a53cdc2d8fbc734237823cdf9d34f6538d..21115a864bc564f926a534dfb885a7b40c66fb09 100644 --- a/core/res/res/values-en-rCA/strings.xml +++ b/core/res/res/values-en-rCA/strings.xml @@ -82,6 +82,7 @@ "No voice service" "No voice service or emergency calling" "Temporarily turned off by your operator" + "Temporarily turned off by your operator for SIM %d" "Can’t reach mobile network" "Try changing preferred network. Tap to change." "Emergency calling unavailable" @@ -120,12 +121,13 @@ "Roaming Banner On" "Roaming Banner Off" "Searching for Service" - - + "Couldn’t set up Wi‑Fi calling" "To make calls and send messages over Wi-Fi, first ask your operator to set up this service. Then turn on Wi-Fi calling again from Settings. (Error code: %1$s)" - + + "Issue registering Wi‑Fi calling with your operator: %1$s" + "%s" "%s Wi-Fi Calling" @@ -481,6 +483,8 @@ "Allows the app to communicate with Near Field Communication (NFC) tags, cards and readers." "disable your screen lock" "Allows the app to disable the keylock and any associated password security. For example, the phone disables the keylock when receiving an incoming phone call, then re-enables the keylock when the call is finished." + "use biometric hardware" + "Allows the app to use biometric hardware for authentication" "manage fingerprint hardware" "Allows the app to invoke methods to add and delete fingerprint templates for use." "Use fingerprint hardware" @@ -493,6 +497,7 @@ "Not recognised" + "Fingerprint authenticated" "Fingerprint hardware not available." "Fingerprint can\'t be stored. Please remove an existing fingerprint." "Fingerprint timeout reached. Try again." @@ -1005,14 +1010,23 @@ "Input method" "Text actions" "Email" + "Email selected address" "Call" + "Call selected phone number" "Locate" + "Locale selected address" "Open" + "Open selected URL" "Message" + "Message selected phone number" "Add" + "Add to contacts" "View" + "View selected time in calendar" "Schedule" + "Schedule event for selected time" "Track" + "Track selected flight" "Storage space running out" "Some system functions may not work" "Not enough storage for the system. Make sure that you have 250 MB of free space and restart." @@ -1141,8 +1155,7 @@ "Connect to open Wi‑Fi network" "Connect to operator Wi‑Fi network" - - + "Connecting to Wi‑Fi network" "Connected to Wi‑Fi network" "Could not connect to Wi‑Fi network" "Tap to see all networks" @@ -1258,33 +1271,34 @@ "%s is displaying over other apps" "If you don’t want %s to use this feature, tap to open settings and turn it off." "Turn off" - "Preparing %s" - "Checking for errors" - "New %s detected" + "Checking %s…" + "Reviewing current content" + "New %s" + "Tap to set up" "For transferring photos and media" - "Corrupted %s" - "%s is corrupt. Tap to fix." + "Issue with %s" + "Tap to fix" "%s is corrupt. Select to fix." "Unsupported %s" "This device doesn’t support this %s. Tap to set up in a supported format." "This device doesn’t support this %s. Select to set up in a supported format." "%s unexpectedly removed" - "Unmount %s before removing to avoid data loss" - "Removed %s" - "%s removed; insert a new one" - "Still ejecting %s…" - "Don\'t remove" + "Eject media before removing to avoid losing content" + "%s removed" + "Some functionality may not work properly. Insert new storage." + "Ejecting %s" + "Don’t remove" "Set-up" "Eject" "Explore" "%s missing" - "Reinsert this device" + "Insert device again" "Moving %s" "Moving data" - "Move complete" - "Data moved to %s" - "Couldn\'t move data" - "Data left at original location" + "Content transfer is finished" + "Content moved to %s" + "Couldn’t move content" + "Try moving content again" "Removed" "Ejected" "Checking…" @@ -1832,6 +1846,10 @@ "SIM not provisioned for voice" "SIM not allowed for voice" "Phone not allowed for voice" + "SIM %d not allowed" + "SIM %d not provisioned" + "SIM %d not allowed" + "SIM %d not allowed" "Pop-Up Window" "+ %1$d" "App version downgraded or isn’t compatible with this shortcut" diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index 14bc016646395ee4b9cca5bbceff1b24a7806137..e7f40b09a923e5d6c4e924c5c0054402066169ab 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -82,6 +82,7 @@ "No voice service" "No voice service or emergency calling" "Temporarily turned off by your operator" + "Temporarily turned off by your operator for SIM %d" "Can’t reach mobile network" "Try changing preferred network. Tap to change." "Emergency calling unavailable" @@ -120,12 +121,13 @@ "Roaming Banner On" "Roaming Banner Off" "Searching for Service" - - + "Couldn’t set up Wi‑Fi calling" "To make calls and send messages over Wi-Fi, first ask your operator to set up this service. Then turn on Wi-Fi calling again from Settings. (Error code: %1$s)" - + + "Issue registering Wi‑Fi calling with your operator: %1$s" + "%s" "%s Wi-Fi Calling" @@ -481,6 +483,8 @@ "Allows the app to communicate with Near Field Communication (NFC) tags, cards and readers." "disable your screen lock" "Allows the app to disable the keylock and any associated password security. For example, the phone disables the keylock when receiving an incoming phone call, then re-enables the keylock when the call is finished." + "use biometric hardware" + "Allows the app to use biometric hardware for authentication" "manage fingerprint hardware" "Allows the app to invoke methods to add and delete fingerprint templates for use." "Use fingerprint hardware" @@ -493,6 +497,7 @@ "Not recognised" + "Fingerprint authenticated" "Fingerprint hardware not available." "Fingerprint can\'t be stored. Please remove an existing fingerprint." "Fingerprint timeout reached. Try again." @@ -1005,14 +1010,23 @@ "Input method" "Text actions" "Email" + "Email selected address" "Call" + "Call selected phone number" "Locate" + "Locale selected address" "Open" + "Open selected URL" "Message" + "Message selected phone number" "Add" + "Add to contacts" "View" + "View selected time in calendar" "Schedule" + "Schedule event for selected time" "Track" + "Track selected flight" "Storage space running out" "Some system functions may not work" "Not enough storage for the system. Make sure that you have 250 MB of free space and restart." @@ -1141,8 +1155,7 @@ "Connect to open Wi‑Fi network" "Connect to operator Wi‑Fi network" - - + "Connecting to Wi‑Fi network" "Connected to Wi‑Fi network" "Could not connect to Wi‑Fi network" "Tap to see all networks" @@ -1258,33 +1271,34 @@ "%s is displaying over other apps" "If you don’t want %s to use this feature, tap to open settings and turn it off." "Turn off" - "Preparing %s" - "Checking for errors" - "New %s detected" + "Checking %s…" + "Reviewing current content" + "New %s" + "Tap to set up" "For transferring photos and media" - "Corrupted %s" - "%s is corrupt. Tap to fix." + "Issue with %s" + "Tap to fix" "%s is corrupt. Select to fix." "Unsupported %s" "This device doesn’t support this %s. Tap to set up in a supported format." "This device doesn’t support this %s. Select to set up in a supported format." "%s unexpectedly removed" - "Unmount %s before removing to avoid data loss" - "Removed %s" - "%s removed; insert a new one" - "Still ejecting %s…" - "Don\'t remove" + "Eject media before removing to avoid losing content" + "%s removed" + "Some functionality may not work properly. Insert new storage." + "Ejecting %s" + "Don’t remove" "Set-up" "Eject" "Explore" "%s missing" - "Reinsert this device" + "Insert device again" "Moving %s" "Moving data" - "Move complete" - "Data moved to %s" - "Couldn\'t move data" - "Data left at original location" + "Content transfer is finished" + "Content moved to %s" + "Couldn’t move content" + "Try moving content again" "Removed" "Ejected" "Checking…" @@ -1832,6 +1846,10 @@ "SIM not provisioned for voice" "SIM not allowed for voice" "Phone not allowed for voice" + "SIM %d not allowed" + "SIM %d not provisioned" + "SIM %d not allowed" + "SIM %d not allowed" "Pop-Up Window" "+ %1$d" "App version downgraded or isn’t compatible with this shortcut" diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index 14bc016646395ee4b9cca5bbceff1b24a7806137..e7f40b09a923e5d6c4e924c5c0054402066169ab 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -82,6 +82,7 @@ "No voice service" "No voice service or emergency calling" "Temporarily turned off by your operator" + "Temporarily turned off by your operator for SIM %d" "Can’t reach mobile network" "Try changing preferred network. Tap to change." "Emergency calling unavailable" @@ -120,12 +121,13 @@ "Roaming Banner On" "Roaming Banner Off" "Searching for Service" - - + "Couldn’t set up Wi‑Fi calling" "To make calls and send messages over Wi-Fi, first ask your operator to set up this service. Then turn on Wi-Fi calling again from Settings. (Error code: %1$s)" - + + "Issue registering Wi‑Fi calling with your operator: %1$s" + "%s" "%s Wi-Fi Calling" @@ -481,6 +483,8 @@ "Allows the app to communicate with Near Field Communication (NFC) tags, cards and readers." "disable your screen lock" "Allows the app to disable the keylock and any associated password security. For example, the phone disables the keylock when receiving an incoming phone call, then re-enables the keylock when the call is finished." + "use biometric hardware" + "Allows the app to use biometric hardware for authentication" "manage fingerprint hardware" "Allows the app to invoke methods to add and delete fingerprint templates for use." "Use fingerprint hardware" @@ -493,6 +497,7 @@ "Not recognised" + "Fingerprint authenticated" "Fingerprint hardware not available." "Fingerprint can\'t be stored. Please remove an existing fingerprint." "Fingerprint timeout reached. Try again." @@ -1005,14 +1010,23 @@ "Input method" "Text actions" "Email" + "Email selected address" "Call" + "Call selected phone number" "Locate" + "Locale selected address" "Open" + "Open selected URL" "Message" + "Message selected phone number" "Add" + "Add to contacts" "View" + "View selected time in calendar" "Schedule" + "Schedule event for selected time" "Track" + "Track selected flight" "Storage space running out" "Some system functions may not work" "Not enough storage for the system. Make sure that you have 250 MB of free space and restart." @@ -1141,8 +1155,7 @@ "Connect to open Wi‑Fi network" "Connect to operator Wi‑Fi network" - - + "Connecting to Wi‑Fi network" "Connected to Wi‑Fi network" "Could not connect to Wi‑Fi network" "Tap to see all networks" @@ -1258,33 +1271,34 @@ "%s is displaying over other apps" "If you don’t want %s to use this feature, tap to open settings and turn it off." "Turn off" - "Preparing %s" - "Checking for errors" - "New %s detected" + "Checking %s…" + "Reviewing current content" + "New %s" + "Tap to set up" "For transferring photos and media" - "Corrupted %s" - "%s is corrupt. Tap to fix." + "Issue with %s" + "Tap to fix" "%s is corrupt. Select to fix." "Unsupported %s" "This device doesn’t support this %s. Tap to set up in a supported format." "This device doesn’t support this %s. Select to set up in a supported format." "%s unexpectedly removed" - "Unmount %s before removing to avoid data loss" - "Removed %s" - "%s removed; insert a new one" - "Still ejecting %s…" - "Don\'t remove" + "Eject media before removing to avoid losing content" + "%s removed" + "Some functionality may not work properly. Insert new storage." + "Ejecting %s" + "Don’t remove" "Set-up" "Eject" "Explore" "%s missing" - "Reinsert this device" + "Insert device again" "Moving %s" "Moving data" - "Move complete" - "Data moved to %s" - "Couldn\'t move data" - "Data left at original location" + "Content transfer is finished" + "Content moved to %s" + "Couldn’t move content" + "Try moving content again" "Removed" "Ejected" "Checking…" @@ -1832,6 +1846,10 @@ "SIM not provisioned for voice" "SIM not allowed for voice" "Phone not allowed for voice" + "SIM %d not allowed" + "SIM %d not provisioned" + "SIM %d not allowed" + "SIM %d not allowed" "Pop-Up Window" "+ %1$d" "App version downgraded or isn’t compatible with this shortcut" diff --git a/core/res/res/values-en-rXC/strings.xml b/core/res/res/values-en-rXC/strings.xml index 06129e046cddc98c91ed9647be1ba93a55e7cbfd..09d735b8f94d335d3b5f9467787d4f3ef534fec6 100644 --- a/core/res/res/values-en-rXC/strings.xml +++ b/core/res/res/values-en-rXC/strings.xml @@ -82,6 +82,7 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‏‏‏‎‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‏‎‎‎‎No voice service‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‏‏‎‎‎‏‏‎‎‏‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‎‏‏‎‎‏‎‎No voice service or emergency calling‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‎‎‎‎Temporarily turned off by your carrier‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‎‎‎‎‏‏‏‎‏‎‏‎‎‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‎‎‎Temporarily turned off by your carrier for SIM ‎‏‎‎‏‏‎%d‎‏‎‎‏‏‏‎‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‎‎‏‏‎‎‏‏‏‎‎‏‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‎Can’t reach mobile network‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‎‎‏‏‎‎‎‏‎‏‎‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎Try changing preferred network. Tap to change.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‎‏‏‎‏‏‎‏‎‎‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‎‎‎‏‏‏‎‎‏‎‎‏‎‎‎‎Emergency calling unavailable‎‏‎‎‏‎" @@ -120,12 +121,13 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‎‎‎‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‎‎Roaming Banner On‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‎‎‏‏‎‏‏‎‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‏‎‎‏‏‎‎‎‎‎Roaming Banner Off‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‎‎‏‏‎‏‏‎Searching for Service‎‏‎‎‏‎" - - + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‏‎‎‏‏‎‏‏‏‎‎‏‎‎Couldn’t set up Wi‑Fi calling‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‏‎‎‎‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‏‏‏‏‎‏‎‏‏‏‏‎‎‏‎‎‏‏‏‎‏‏‎‏‎‎‏‎‏‎‏‎‎To make calls and send messages over Wi-Fi, first ask your carrier to set up this service. Then turn on Wi-Fi calling again from Settings. (Error code: ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎)‎‏‎‎‏‎" - + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‏‏‎‎‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‏‎‎‎‎‎‏‏‏‎‎‎‎‎‎‎‏‏‏‎‏‏‏‎‎Issue registering Wi‑Fi calling with your carrier: ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‏‎‎‏‎‎‏‎‏‎‏‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‎‏‎‏‏‎‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎%s‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‏‏‏‏‎‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎%s Wi-Fi Calling‎‏‎‎‏‎" @@ -481,6 +483,8 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‎‏‎‎‎‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‎‏‎‎‎‎‎‏‏‏‎‏‎‎‏‏‎Allows the app to communicate with Near Field Communication (NFC) tags, cards, and readers.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‏‎‎disable your screen lock‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‏‎‏‏‎‎‎‎‎Allows the app to disable the keylock and any associated password security. For example, the phone disables the keylock when receiving an incoming phone call, then re-enables the keylock when the call is finished.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‏‏‎‎‎‎‎‎‎‏‎‎‎‏‎‎‎‏‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‏‎‎‎‎‏‎‏‎‏‏‎‎use biometric hardware‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‎‏‏‏‏‎‎‎‎‎‏‏‏‏‏‏‎‎Allows the app to use biometric hardware for authentication‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‎‏‏‎‎manage fingerprint hardware‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‎‏‏‏‏‎‎‏‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‎‎‎‏‏‎‏‏‎‏‎‎‏‏‎‏‎‏‎‎‎‎Allows the app to invoke methods to add and delete fingerprint templates for use.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‎‎‎‎‏‎‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‎use fingerprint hardware‎‏‎‎‏‎" @@ -493,6 +497,7 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‏‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‎‏‎Not recognized‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‏‎‎‏‎‎‎‎‎‏‎‏‎‎‎‏‎‏‏‎‎‎‏‏‎‏‎‎‎‎‎‏‎‏‏‏‏‎‎‎‎‎Fingerprint authenticated‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‏‏‎‏‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎Fingerprint hardware not available.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‏‏‏‎‎‎‎‎‏‎‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎‏‏‏‎‎‎‏‏‎‎Fingerprint can\'t be stored. Please remove an existing fingerprint.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎‏‎‏‏‏‎‎‏‏‎‎‏‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‎Fingerprint time out reached. Try again.‎‏‎‎‏‎" @@ -1005,14 +1010,23 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‏‏‎‎‏‎‏‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‎‎‏‎‏‏‎‎‏‎‎‏‎‎‎‏‎‎‎‏‎‎‏‎‎‎‏‏‏‎Input method‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‎‎‎‏‏‎‎‎‎‎‎‏‏‎‎‏‎‎‏‎‏‎‏‏‏‏‎‏‎‎‏‎‏‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‎‎Text actions‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‎‎‎‏‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎Email‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‎‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎‎‎‎‏‎‎‎‏‏‎‎‏‎‏‎‎‏‏‎‏‏‎Email selected address‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‏‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‎‏‏‏‏‎‎‎‏‏‎‏‏‏‎Call‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‎‎‏‎‏‎‏‏‏‎‏‎‏‎‏‎‏‎‎‎‏‎‎‏‏‎‎‎‎‏‎‎Call selected phone number‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‏‏‎‏‏‏‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎‎‎‎‏‎Locate‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‎‎‏‏‏‎‏‎‏‏‏‎‎‏‏‎‎‎‏‎‏‎‎‏‎‎‎‏‎‎‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‎‎Locale selected address‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‏‎‏‎‎‏‎‏‎‎‏‎‏‎‏‏‎‏‎‎‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‎‏‎‎‎‎‏‏‎‏‏‏‏‏‎‎‎‎‏‎‏‎Open‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‎‎‎‎‏‎‏‏‎‏‏‎‎‎‏‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‏‎‏‏‎‏‏‎‏‎‎‏‏‎‎‏‎‏‎‎‎‎‎‏‎‎‎Open selected URL‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‎‎‏‏‏‎‏‏‏‏‎‎‏‎‏‏‎‎‏‏‏‏‏‎‎‎‎‏‎‎‎‏‏‎‎Message‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‎‎‎‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎Message selected phone number‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‏‎‏‎‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‎‎‏‏‎Add‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‎‎‏‏‎‎‎‎‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‏‎Add to contacts‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‏‎‎‎‎‎‎‎‎‎‎‏‏‏‎‎View‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‏‎‎‎‏‎‎‏‎‏‏‎‏‎‎‏‏‎‏‏‎‎‏‏‏‏‏‎‏‎‎‎‏‎‎‎‏‎‎‎‎‎‎‏‎‏‏‎‎‎‏‎‎‎‎View selected time in calendar‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‏‎‎‏‏‎‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‎‎‏‏‎‎‎‏‏‏‎‎Schedule‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‏‎‎‎‎‏‏‎‏‎‏‎‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‎‎‎‏‏‏‎‎‎Schedule event for selected time‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‏‏‎‏‎‏‎‏‏‎‎Track‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‎‎‏‏‎‏‏‎‎‎‎‏‎‎Track selected flight‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‏‎‎‏‎‏‎‏‎‎‎‎‏‎‎‏‎‏‎‏‎‎‎‎‏‎‎‏‎‎‎‎‏‏‎‎‎‏‎‎Storage space running out‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‎‏‏‏‏‏‎‏‎‎‎‎‏‏‎‏‏‎‏‏‏‎‏‏‎‏‎‎‎‎‎‎‎‎‎‎‎‎‏‏‏‎‎‎‏‏‏‎‎‎‏‏‎Some system functions may not work‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‏‏‏‏‏‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‎‎‎‏‏‏‎‎‏‏‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‎‎Not enough storage for the system. Make sure you have 250MB of free space and restart.‎‏‎‎‏‎" @@ -1141,8 +1155,7 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‏‎‎‏‎‎‎‏‎‎‎‎‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‎‏‎‎‎‏‎Connect to open Wi‑Fi network‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‎‎‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‎‎‎‎‏‎‏‏‎‎‏‏‏‏‎‎‎‏‏‎‎‏‎Connect to carrier Wi‑Fi network‎‏‎‎‏‎" - - + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‎‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‎‏‎‎‎‏‏‏‎‏‏‏‎‏‎‎Connecting to Wi‑Fi network‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‏‎‎‏‏‏‏‎‏‎‎‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‎‎‎‎‎‎‏‏‎‎‎Connected to Wi‑Fi network‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‎‏‏‏‏‎‏‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎Could not connect to Wi‑Fi network‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‏‎‎‏‏‎‎‎‎‎‎‏‎‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‏‎‏‎‏‎Tap to see all networks‎‏‎‎‏‎" @@ -1258,33 +1271,34 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‎‎‎‎‏‎‏‏‎‏‏‏‏‎‏‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‏‏‏‏‎‏‎‏‎‏‎‏‎‏‎‎‎‏‏‎‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎ is displaying over other apps‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‎‎‎If you don’t want ‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎ to use this feature, tap to open settings and turn it off.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎‏‎‎‏‎‎‏‎‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‎‎‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎Turn off‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‏‎‎‎‏‏‎‏‎‎‎‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‏‏‏‎‏‏‏‎‎Preparing ‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‎‏‎‎‏‎‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎‏‎‏‏‎‎‎‎Checking for errors‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‎‏‎‎‎‎‏‏‎‎‏‏‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‏‎New ‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎ detected‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‎‏‎‎‏‏‎‏‏‏‎‏‏‏‏‏‏‎‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‏‎‎‏‏‏‏‏‎‎‎Checking ‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎…‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‎‏‎‎‎‏‎‏‎‎‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‏‎‎‎‏‏‎‎‎‎‎‎‏‎‎‎‎‏‏‏‎‏‎‎Reviewing current content‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‏‏‎‎‎‎‏‎‏‏‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‏‎New ‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‏‏‏‏‏‎‏‏‏‎‎‎‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‏‏‏‏‎Tap to set up‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‏‎‏‎‏‏‎‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎‏‎‎‎‎‏‏‏‏‎‎For transferring photos and media‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‏‏‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‏‎‎‏‏‎‎‏‎‎‏‎‏‎‎‎‏‎‎‏‎‏‎‎‎Corrupted ‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‎‏‎‏‏‏‎‎‏‏‏‎‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎‎‎‎‎‎‎‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎ is corrupt. Tap to fix.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‎‎‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‏‎‎‎‏‏‏‎‎‎‏‎‏‏‏‏‎‏‎‏‏‎‏‏‎‎‎‏‎‎‏‎‏‎‎Issue with ‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‏‏‎‎‏‏‏‎‎‏‎‏‎‎‎‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‏‏‎‏‎‏‎‏‏‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎Tap to fix‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‎‎‏‎‎‎‎‎‏‎‏‎‏‏‎‎‏‏‎‎‏‏‏‏‎‎‎‎‎‎‏‏‎‎‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎ is corrupt. Select to fix.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‎‏‏‏‏‏‏‎‎‏‎‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎‏‎Unsupported ‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‎‎‎‎‏‏‎‏‏‎‏‎‏‎‏‎‏‏‎‏‎‎‎‏‎‏‎‎‎‎‎‏‏‏‏‎‎‏‏‎‏‎This device doesn’t support this ‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎. Tap to set up in a supported format.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‏‏‏‏‏‏‎‏‎‎This device doesn’t support this ‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎. Select to set up in a supported format.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‎‎‎‏‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‎‎‎‏‎‎‎‎‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎ unexpectedly removed‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‎‏‎‏‏‎‎‏‎‏‎‎‎‏‎‏‎‏‏‎‏‏‏‏‏‏‎‏‏‎‎‎‏‎‎‎‎‏‎‎‏‎Unmount ‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎ before removing to avoid data loss‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‏‎‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‏‎‏‎‎‎‎‏‏‎‎‎‏‏‎Removed ‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‎‏‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎ removed; insert a new one‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‎‏‎‎‎‎‏‎‎‎‎‏‏‏‎‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‏‏‏‎‎‎Still ejecting ‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎…‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‎‎‎‏‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‏‏‎‎‎‏‏‎‎‎‎‏‏‏‎‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‏‏‏‏‎‎‎Don\'t remove‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‏‎‏‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‎‏‏‎‎‏‏‏‏‎‎Eject media before removing to avoid losing content‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‏‎‎‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‏‏‎‏‎‎‏‎‏‏‎‏‎‏‏‏‏‎‎‎‏‏‏‏‏‎‎‎‎‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎ removed‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‏‎‏‏‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‏‎‎‎‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎Some functionality may not work properly. Insert new storage.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‏‎‎‏‏‎‎‎Ejecting ‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‏‎‏‎‏‎‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‏‎‏‏‏‏‎‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‏‎‏‏‎‏‏‎Don’t remove‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‎‎‎‎‏‏‏‎‎‎‎‏‏‎‎‎‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‏‏‎‎Set up‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‎‏‏‎‏‏‏‎‏‎‏‏‎‏‏‎‏‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎Eject‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‏‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‎‎‎‎‎‎‏‎‎‏‎‏‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‎‏‎‎‏‏‏‎Explore‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‏‏‏‎‏‎‏‎‎‎‎‏‎‎‎‎‏‏‎‏‏‎‎‏‎‎‎‏‏‏‏‎‎‎‎‎‎‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎ missing‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‎‎‏‏‏‏‎‎‎‎‏‏‎‎‏‎‎‎‏‎‎‎‏‎‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‏‎‎Reinsert this device‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‎‏‏‏‎‎‏‏‎‏‎‎Insert device again‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‎‏‎‏‎‎‏‏‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‎‎‏‎‎Moving ‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‏‎‏‏‏‎‏‏‏‎‎‎‏‏‏‎‎‏‎‎‏‏‎‎Moving data‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‏‏‎‏‏‏‏‎Move complete‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‎‎‏‏‎‏‎‎‏‏‎‏‏‏‏‎‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‎‎‏‎‏‎‎‏‎‎Data moved to ‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‏‎‎‏‏‏‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‏‎‎‏‏‏‏‎‏‏‏‎‎‏‎‎‏‏‎‎‎‏‎‏‎‎‎Couldn\'t move data‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‏‎‏‎‎‏‏‏‎‎‎‎‎‏‏‏‎‏‎‎‎‎‎‎Data left at original location‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‎‎‎‎‏‎‏‎‎‏‏‏‎‎‎‎‎‏‎‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‎‏‎‎‎‏‎‎‏‏‎‏‏‏‎‎‎‏‎‎Content transfer is done‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‏‎‎‎‏‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‎‎‎‎‎‎‏‎‎‏‎Content moved to ‎‏‎‎‏‏‎%s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‏‎‎‎‎‎‎‏‏‎‏‏‏‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‏‎‏‏‎‎‏‏‎‎‎Couldn’t move content‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎‏‏‎‏‎‎‏‏‎‏‎‏‎‏‎‎‏‏‎‎‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‎‏‏‎‎‎‏‏‏‎Try moving content again‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‏‎‎‎‎‏‏‎‏‎‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎Removed‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‎‏‏‎‏‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‎‎‏‎‏‏‎‏‎‏‎‎‏‏‏‏‎‏‏‎‎‎‎Ejected‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‏‏‏‎‏‎‏‎‎‏‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‎‎‎‎‎‎‏‏‎‏‎‎‎‏‎‏‎Checking…‎‏‎‎‏‎" @@ -1832,6 +1846,10 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‎‏‎‎‎‏‎‎‏‎‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‏‏‎‏‎‎‏‏‎‏‎‎‎‏‎‎‏‏‏‏‎‎‏‎‏‎‎‏‎SIM not provisioned for voice‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‎‏‏‎‏‎‎‎‎‏‏‏‎‏‎‎‏‏‎‏‏‏‎‎‎‏‏‎‎‏‎‏‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‎‎‎‏‏‏‎‎SIM not allowed for voice‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‎‏‎‎‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‏‎‏‏‏‏‎‎‎‎‎‏‏‎‎‎Phone not allowed for voice‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‏‎‏‏‎‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‏‎‎‏‎‎‎‏‏‏‏‎SIM ‎‏‎‎‏‏‎%d‎‏‎‎‏‏‏‎ not allowed‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‎‎‏‎‎‏‏‎‏‏‏‏‎‎‎‎‏‎‏‎‏‏‏‏‎‏‎‏‎‎SIM ‎‏‎‎‏‏‎%d‎‏‎‎‏‏‏‎ not provisioned‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‏‎‎‏‏‎‎‎‎‎‎‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‏‏‎‎SIM ‎‏‎‎‏‏‎%d‎‏‎‎‏‏‏‎ not allowed‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‎‎‏‏‏‏‎‏‏‏‏‎‏‎‎‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‎‎‎‎‎‎‏‎‎‏‏‎‎‏‎‎SIM ‎‏‎‎‏‏‎%d‎‏‎‎‏‏‏‎ not allowed‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‏‎‎‏‎‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‏‎‎‏‏‎‎‏‏‏‎‏‏‏‎‏‎‎‏‎Popup Window‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‏‎‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‏‏‎‎‏‎‏‏‏‎‎‏‏‎‎‎‏‏‏‎‏‎‏‏‏‏‏‏‎‎‎‎‎+ ‎‏‎‎‏‏‎%1$d‎‏‎‎‏‏‏‎‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‎‎‏‎‏‎‎‎‏‏‎‏‎‎‏‎‎‎‎‎‎‎‎‎App version downgraded, or isn’t compatible with this shortcut‎‏‎‎‏‎" diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index f81f4f8adae65650e41d253c3c8bcdc7593c2096..8a5897298643ebc002c71a11de9e847fd1e1a8ef 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -82,6 +82,8 @@ "Sin servicio de voz" "No hay ningún servicio de voz ni de llamadas de emergencia" "Desactivado temporalmente por tu proveedor" + + "No se puede acceder a la red móvil" "Presiona para cambiar la red preferida." "Servicio de llamadas de emergencia no disponible" @@ -120,12 +122,13 @@ "Banner de roaming activado" "Banner de roaming desactivado" "Buscando servicio" - - + "No se pudo configurar la Llamada con Wi-Fi" "Para hacer llamadas y enviar mensajes mediante Wi-Fi, solicítale a tu proveedor que configure este servicio. Luego, vuelve a activar la Llamada con Wi-Fi en Configuración. (código de error: %1$s)" - + + "Error al registrar la Llamada con Wi‑Fi con tu operador: %1$s" + "%s" "Llamada por Wi-Fi de %s" @@ -159,10 +162,8 @@ "Se están procesando demasiadas solicitudes. Vuelve a intentarlo más tarde." "Error de acceso de %1$s" "Sincronización" - - - - + "No se puede sincronizar" + "Se intentaron borrar demasiados elementos de %s." "Se ha agotado el espacio de almacenamiento de la tablet. Elimina algunos archivos para liberar espacio." "El almacenamiento del reloj está completo. Elimina algunos archivos para liberar espacio." "El almacenamiento de la TV está completo. Elimina algunos archivos para liberar espacio." @@ -272,40 +273,31 @@ "Cambiar al perfil de trabajo" "Contactos" "acceder a los contactos" - - + "¿Permitir que <b>%1$s</b> acceda a tus contactos?" "Ubicación" "acceder a la ubicación de este dispositivo" - - + "¿Permitir que <b>%1$s</b> acceda a la ubicación de este dispositivo?" "Calendario" "acceder al calendario" - - + "¿Permitir que <b>%1$s</b> acceda a tu calendario?" "SMS" "enviar y ver mensajes SMS" - - + "¿Permitir que <b>%1$s</b> envíe y vea SMS?" "Espacio de almacenamiento" "acceder a las fotos, el contenido multimedia y los archivos" - - + "¿Permitir que <b>%1$s</b> acceda a las fotos, el contenido multimedia y los archivos de tu dispositivo?" "Micrófono" "grabar audio" - - + "¿Permitir que <b>%1$s</b> grabe audio?" "Cámara" "tomar fotografías y grabar videos" - - + "¿Permitir que <b>%1$s</b> tome fotos y grabe videos?" "Teléfono" "realizar y administrar llamadas telefónicas" - - + "¿Permitir que <b>%1$s</b> haga y administre las llamadas telefónicas?" "Sensores corporales" "acceder a los datos del sensor acerca de tus signos vitales" - - + "¿Permitir que <b>%1$s</b> acceda a los datos del sensor de tus signos vitales?" "Recuperar el contenido de las ventanas" "Inspecciona el contenido de la ventana con la que estés interactuando." "Activar la Exploración táctil" @@ -492,6 +484,8 @@ "Permite que la aplicación se comunique con lectores, tarjetas y etiquetas de Comunicación de campo cercano (NFC)." "desactivar el bloqueo de pantalla" "Permite que la aplicación desactive el bloqueo del teclado y cualquier protección con contraseña asociada. Por ejemplo, el dispositivo puede desactivar el bloqueo del teclado cuando recibe una llamada telefónica y volver a activarlo cuando finaliza la llamada." + "usar hardware biométrico" + "Permite que la app use hardware biométrico para realizar la autenticación" "Administrar el hardware de huellas digitales" "Permite que la aplicación emplee métodos para agregar y eliminar plantillas de huellas digitales para su uso." "Utilizar hardware de huellas digitales" @@ -504,6 +498,8 @@ "No reconocido" + + "El hardware para detectar huellas digitales no está disponible." "No se puede almacenar la huella digital. Elimina una de las existentes." "Finalizó el tiempo de espera para la huella digital. Vuelve a intentarlo." @@ -1016,14 +1012,23 @@ "Método de entrada" "Acciones de texto" "Correo electrónico" + "Enviar un correo electrónico a la dirección seleccionada" "Llamar" + "Llamar al número de teléfono seleccionado" "Buscar" + "Abrir la dirección seleccionada en el mapa" "Abrir" + "Abrir URL seleccionada" "Mensaje" + "Enviar un mensaje al número de teléfono seleccionado" "Agregar" + "Agregar a contactos" "Ver" + "Ver la hora seleccionada en el calendario" "Programar" + "Programar un evento para la hora seleccionada" "Realizar seguimiento" + "Seguir el vuelo seleccionado" "Queda poco espacio de almacenamiento" "Es posible que algunas funciones del sistema no estén disponibles." "No hay espacio suficiente para el sistema. Asegúrate de que haya 250 MB libres y reinicia el dispositivo." @@ -1117,8 +1122,7 @@ "Abrir %1$s" "%1$s se cerrará sin guardar" "%1$s superó el límite de memoria." - - + "Se recopiló el volcado de pila. Toca para compartir." "¿Compartir volcado de pila?" "El proceso %1$s superó el límite de memoria de proceso de %2$s. Hay un volcado de pila disponible para que puedas compartirlo con el programador. Ten cuidado, este volcado de pila puede contener información personal a la que la aplicación tiene acceso." "Seleccionar una acción para el texto" @@ -1153,8 +1157,7 @@ "Conectarse a una red Wi-Fi abierta" "Conectarse a la red Wi-Fi del proveedor" - - + "Estableciendo conexión con la red Wi-Fi" "Se conectó a la red Wi-Fi" "No fue posible conectarse a la red Wi‑Fi" "Presiona para ver todas las redes" @@ -1270,33 +1273,49 @@ "%s se muestra sobre otras apps" "Si no quieres que %s use esta función, presiona para abrir la configuración y desactivarla." "Desactivar" - "Preparando el medio %s" - "Verificando errores" - "Se detectó un nuevo medio (%s)." + + + + + + + + "Para transferir fotos y contenido multimedia" - "%s está dañado" - "%s está dañado. Presiona para solucionar el problema." - "%s se dañó. Selecciona el medio para solucionar el problema." + + + + "%s no es compatible" "El dispositivo no es compatible con %s. Presiona la pantalla para configurarlo en un formato compatible." "Este dispositivo no es compatible con: %s. Selecciona para configurar el medio en un formato compatible." "Se extrajo %s de forma inesperada." - "Para evitar que se pierdan datos, desactiva el dispositivo %s antes de extraerlo." - "Se extrajo el medio %s" - "Se extrajo el medio %s. Inserta uno nuevo." - "Expulsando el medio %s…" - "No extraer" + + + + + + + + + + "Configurar" "Expulsar" "Explorar" "No se encuentra dispositivo %s." - "Volver a insertar dispositivo" + + "Transfiriendo la aplicación %s" "Transfiriendo los datos" - "Transferencia completa" - "Se transfirieron los datos a %s" - "No se pudieron transferir datos." - "Los datos quedaron en la ubicación original" + + + + + + + + "Extraído" "Expulsado" "Comprobando…" @@ -1355,17 +1374,14 @@ "Estableciendo conexión con la VPN siempre activada..." "Se estableció conexión con la VPN siempre activada." "Desconectado de la VPN siempre activa" - - + "No se puede conectar a la VPN siempre activa" "Cambiar configuración de red o VPN" "Elegir archivo" "No se seleccionó un archivo." "Restablecer" "Enviar" - - - - + "Se está ejecutando la app de conducción" + "Presiona para salir de la app de conducción." "Anclaje a red o zona activa conectados" "Presiona para configurar." "Se inhabilitó la conexión mediante dispositivo portátil" @@ -1691,8 +1707,7 @@ "Tu administrador instaló este paquete" "Tu administrador actualizó este paquete" "Tu administrador borró este paquete" - - + "Para extender la duración de la batería, el Ahorro de batería reduce el rendimiento del dispositivo y limita o desactiva la vibración, los servicios de ubicación y los datos en segundo plano. Es posible que las apps que se sincronizan, como las de correo electrónico y mensajes, no se actualicen a menos que las abras de forma manual.\n\nEl Ahorro de batería se desactiva automáticamente cuando el dispositivo se está cargando." "Para reducir el uso de datos, \"Reducir datos\" evita que algunas apps envíen y reciban datos en segundo plano. La app que estés usando podrá acceder a los datos, pero con menor frecuencia. De esta forma, por ejemplo, las imágenes no se mostrarán hasta que las presiones." "¿Activar Ahorro de datos?" "Activar" @@ -1743,22 +1758,14 @@ "Silenciados por %1$s" "Existe un problema interno con el dispositivo, de modo que el dispositivo puede estar inestable hasta que restablezcas la configuración de fábrica." "Existe un problema interno con el dispositivo. Comunícate con el fabricante para obtener más información." - - - - - - - - - - - - - - - - + "Se cambió la solicitud USSD por una llamada normal" + "Se cambió la solicitud USSD por una solicitud SS" + "Se cambió a una nueva solicitud USSD" + "Se cambió la solicitud USSD por una videollamada" + "Se cambió la solicitud SS por una llamada normal" + "Se cambió la solicitud SS por una videollamada" + "Se cambió la solicitud SS por una solicitud USSD" + "Se cambió a una nueva solicitud SS" "Perfil de trabajo" "Expandir" "Contraer" @@ -1856,6 +1863,14 @@ "No se brindó una SIM para las acciones de voz" "La SIM no admite acciones de voz" "El teléfono no admite acciones de voz" + + + + + + + + "Ventana emergente" "%1$d más" "La app pasó a una versión anterior o no es compatible con este acceso directo" @@ -1876,8 +1891,6 @@ "Este comportamiento es nuevo. Presiona para cambiarlo." "Se modificó la opción No interrumpir" "Presiona para consultar lo que está bloqueado." - - - - + "Sistema" + "Configuración" diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 049a7739120d4bcda2087f469a62cc97406fabff..ec406d4ba45493e3e134f0b5c4094288e8aa1167 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -82,6 +82,8 @@ "Sin servicio de voz" "No hay ningún servicio de voz ni de llamadas de emergencia" "Desactivado temporalmente por tu operador" + + "No se puede establecer conexión con la red móvil" "Toca para cambiar la red preferida." "Servicio de llamadas de emergencia no disponible" @@ -120,12 +122,13 @@ "Banner de itinerancia activado" "Banner de itinerancia desactivado" "Buscando servicio" - - + "No se ha podido configurar la llamada por Wi‑Fi" "Para hacer llamadas y enviar mensajes por Wi-Fi, pide antes a tu operador que configure este servicio. Una vez hecho esto, vuelva a activar la llamada por Wi-Fi en Ajustes. (Código de error: %1$s)" - + + "No se ha podido registrar la llamada por Wi‑Fi con tu operador: %1$s" + "%s" "Llamada Wi-Fi de %s" @@ -159,10 +162,8 @@ "Se están procesando demasiadas solicitudes. Vuelve a intentarlo más tarde." "Error de inicio de sesión de %1$s" "Sincronización" - - - - + "No se puede sincronizar" + "Se han intentado eliminar demasiados elementos de %s." "Se ha agotado el espacio de almacenamiento del tablet. Elimina algunos archivos para liberar espacio." "El almacenamiento del reloj está lleno. Elimina algunos archivos para liberar espacio." "No queda espacio de almacenamiento en la TV. Elimina algunos archivos para liberar espacio." @@ -272,40 +273,31 @@ "Cambiar al perfil de trabajo" "Contactos" "acceder a tus contactos" - - + "¿Quieres permitir que <b>%1$s</b> acceda a tus contactos?" "Ubicación" "acceder a la ubicación de este dispositivo" - - + "¿Quieres permitir que <b>%1$s</b> acceda a la ubicación de este dispositivo?" "Calendario" "acceder a tu calendario" - - + "¿Quieres permitir que <b>%1$s</b> acceda a tu calendario?" "SMS" "enviar y ver mensajes SMS" - - + "¿Quieres permitir que <b>%1$s</b> envíe y lea mensajes SMS?" "Almacenamiento" "acceder a fotos, contenido multimedia y archivos de tu dispositivo" - - + "¿Quieres permitir que <b>%1$s</b> acceda a las fotos, al contenido multimedia y a los archivos de tu dispositivo?" "Micrófono" "grabar audio" - - + "¿Quieres permitir que <b>%1$s</b> grabe audio?" "Cámara" "hacer fotos y grabar vídeos" - - + "¿Quieres permitir que <b>%1$s</b> haga fotos y grabe vídeos?" "Teléfono" "hacer y administrar llamadas telefónicas" - - + "¿Quieres permitir que <b>%1$s</b> haga y gestione llamadas?" "Sensores corporales" "acceder a datos de sensores de tus constantes vitales" - - + "¿Quieres permitir que <b>%1$s</b> acceda a los datos del sensor sobre tus constantes vitales?" "Comprobar el contenido de la ventana" "Inspecciona el contenido de una ventana con la que estés interactuando." "Activar la exploración táctil" @@ -492,6 +484,8 @@ "Permite que la aplicación se comunique con lectores, tarjetas y etiquetas de Comunicación de campo cercano (NFC)." "inhabilitar el bloqueo de pantalla" "Permite que la aplicación inhabilite el bloqueo del teclado y cualquier protección con contraseña asociada. Por ejemplo, el teléfono puede inhabilitar el bloqueo del teclado cuando se recibe una llamada telefónica y volver a habilitarlo cuando finaliza la llamada." + "usar hardware biométrico" + "Permite que la aplicación utilice el hardware biométrico para realizar la autenticación" "administrar hardware de huellas digitales" "Permite que la aplicación invoque métodos para añadir y eliminar plantillas de huellas digitales y utilizarlas." "utilizar hardware de huellas digitales" @@ -504,6 +498,8 @@ "No reconocido" + + "El hardware de huella digital no está disponible." "No se puede almacenar la huella digital. Elimina una ya creada." "Se ha alcanzado el tiempo de espera de la huella digital. Vuelve a intentarlo." @@ -1016,14 +1012,23 @@ "Método de introducción de texto" "Acciones de texto" "Correo electrónico" + "Enviar un correo electrónico a la dirección seleccionada" "Llamar" + "Llamar al número de teléfono seleccionado" "Localizar" + "Abrir la dirección seleccionada en el mapa" "Abrir" + "Abrir la URL seleccionada" "Mensaje" + "Enviar un mensaje al número de teléfono seleccionado" "Añadir" + "Añadir a contactos" "Ver" + "Ver la hora seleccionada en el calendario" "Programar" + "Programar un evento para la hora seleccionada" "Buscar" + "Seguir el vuelo seleccionado" "Queda poco espacio" "Es posible que algunas funciones del sistema no funcionen." "No hay espacio suficiente para el sistema. Comprueba que haya 250 MB libres y reinicia el dispositivo." @@ -1117,8 +1122,7 @@ "Abrir %1$s" "%1$s se cerrará sin guardar" "%1$s ha superado el límite de memoria" - - + "Se ha recopilado un volcado de pila. Toca para compartir." "¿Compartir volcado de pila?" "El proceso %1$s ha superado su límite de memoria de %2$s. Hay un volcado de pila disponible que puedes compartir con su desarrollador (ten cuidado, ya que puede incluir información personal a la que tenga acceso la aplicación)." "Selecciona una acción para el texto" @@ -1153,8 +1157,7 @@ "Conectarse a una red Wi-Fi abierta" "Conectarse a la red Wi‑Fi de un operador" - - + "Estableciendo conexión con la red Wi‑Fi" "Conectado a la red Wi-Fi" "No se ha podido conectar a la red Wi-Fi" "Toca para ver todas las redes" @@ -1270,33 +1273,49 @@ "%s se muestra sobre otras apps" "Si no quieres que %s utilice esta función, toca la notificación para abrir los ajustes y desactivarla." "Desactivar" - "Preparando %s" - "Comprobando errores" - "Nueva %s detectada" + + + + + + + + "Para transferir fotos y multimedia" - "Medio externo (%s) dañado" - "%s está en mal estado. Toca para solucionar el problema." - "%s está dañada. Selecciónala para arreglarla." + + + + "Medio externo (%s) no admitido" "El dispositivo no admite este medio externo (%s). Toca para configurarlo con un formato admitido." "El dispositivo no admite esta %s. Selecciónala para configurarla en un formato admitido." "Extracción inesperada de %s" - "Desconecta tu %s antes de extraer la unidad para evitar pérdidas de datos" - "Tu %s se ha extraído" - "Tu %s se ha extraído: inserta otra unidad" - "Expulsando %s…" - "No extraer" + + + + + + + + + + "Configurar" "Expulsar" "Explorar" "Falta %s" - "Volver a insertar dispositivo" + + "Moviendo %s" "Moviendo datos" - "Datos movidos" - "Datos movidos a %s" - "No se pudieron mover los datos" - "Han quedado datos en la ubicación original" + + + + + + + + "Extraído" "Expulsado" "Comprobando..." @@ -1355,17 +1374,14 @@ "Conectando VPN siempre activada…" "VPN siempre activada conectada" "Desconectado de VPN siempre activada" - - + "No se ha podido establecer la conexión con la VPN siempre activada" "Cambiar ajustes de red o VPN" "Seleccionar archivo" "Archivo no seleccionado" "Restablecer" "Enviar" - - - - + "Se está utilizando la aplicación con el modo de conducción" + "Toca para salir de la aplicación del modo de conducción." "Compartir conexión/Zona Wi-Fi activada" "Toca para configurar." "La conexión compartida está inhabilitada" @@ -1847,6 +1863,14 @@ "SIM no proporcionada para voz" "SIM no permitida para voz" "Teléfono no permitido para voz" + + + + + + + + "Ventana emergente" "%1$d más" "Se ha instalado una versión anterior de la aplicación o no es compatible con este acceso directo" @@ -1867,8 +1891,6 @@ "Este comportamiento es nuevo. Toca para cambiarlo." "Ha cambiado el modo No molestar" "Toca para consultar lo que se está bloqueando." - - - - + "Sistema" + "Ajustes" diff --git a/core/res/res/values-et/strings.xml b/core/res/res/values-et/strings.xml index a307784f26b11058e40dabec13c02f6f2cf8d25a..1dd6cefda6e1add162d86f8a9b14af9f1c9c558c 100644 --- a/core/res/res/values-et/strings.xml +++ b/core/res/res/values-et/strings.xml @@ -82,6 +82,8 @@ "Häälkõned pole saadaval" "Häälteenused ja hädaabikõned puuduvad" "Operaator on ajutiselt välja lülitanud" + + "Mobiilsidevõrguga ei saa ühendust" "Proovige eelistatud võrku vahetada. Puudutage muutmiseks." "Hädaabikõned pole saadaval" @@ -120,12 +122,13 @@ "Rändluse bänner sees" "Rändlusbänner väljas" "Teenuse otsimine" - - + "WiFi-kõnede seadistamine ebaõnnestus" "WiFi-võrgu kaudu helistamiseks ja sõnumite saatmiseks paluge operaatoril esmalt see teenus seadistada. Seejärel lülitage WiFi-kõned menüüs Seaded uuesti sisse. (Veakood: %1$s)" - + + "Probleem WiFi-kõnede registreerimisel teie operaatoriga: %1$s" + "%s" "%s WiFi kaudu helistamine" @@ -481,6 +484,8 @@ "Võimaldab rakendusel suhelda lähiväljaside (NFC) märgendite, kaartide ja lugeritega." "keelake ekraanilukk" "Võimaldab rakendusel keelata klahviluku ja muu seotud parooli turvalisuse. Näiteks keelab telefon klahviluku sissetuleva kõne vastuvõtmisel ja lubab klahviluku uuesti, kui kõne on lõpetatud." + "kasutada biomeetrilist riistvara" + "Võimaldab rakendusel autentimiseks kasutada biomeetrilist riistvara" "sõrmejälje riistvara haldamine" "Võimaldab rakendusel tühistada meetodid kasutatavate sõrmejäljemallide lisamiseks ja kustutamiseks." "sõrmejälje riistvara kasutamine" @@ -493,6 +498,8 @@ "Ei tuvastatud" + + "Sõrmejälje riistvara pole saadaval." "Sõrmejälge ei saa salvestada. Eemaldage olemasolev sõrmejälg." "Sõrmejälje riistvara taimeri ajalõpp. Proovige uuesti." @@ -1005,14 +1012,23 @@ "Sisestusmeetod" "Tekstitoimingud" "E-post" + "Valitud aadressile meili saatmine" "Helista" + "Valitud telefoninumbrile helistamine" "Leia" + "Valitud aadressi leidmine" "Ava" + "Valitud URL-i avamine" "Saada sõnum" + "Valitud telefoninumbrile sõnumi saatmine" "Lisa" + "Kontaktide hulka lisamine" "Kuva" + "Valitud aja vaatamine kalendris" "Lisa ajakavasse" + "Ürituse ajastamine valitud ajale" "Jälgi" + "Valitud lennu jälgimine" "Talletusruum saab täis" "Mõned süsteemifunktsioonid ei pruugi töötada" "Süsteemis pole piisavalt talletusruumi. Veenduge, et seadmes oleks 250 MB vaba ruumi, ja käivitage seade uuesti." @@ -1141,8 +1157,7 @@ "Looge ühendus avatud WiFi-võrguga" "Ühendatud operaatori WiFi-võrguga" - - + "WiFi-võrguga ühendamine" "Ühendatud WiFi-võrguga" "WiFi-võrguga ei õnnestunud ühendust luua" "Puudutage kõikide võrkude nägemiseks" @@ -1258,33 +1273,49 @@ "%s kuvat. teiste rakenduste peal" "Kui te ei soovi, et rakendus %s seda funktsiooni kasutaks, puudutage seadete avamiseks ja lülitage see välja." "Lülita välja" - "Üksuse %s ettevalmistamine" - "Vigade kontrollimine" - "Tuvastati uus üksus %s" + + + + + + + + "Fotode ja meedia ülekandmiseks" - "Rikutud %s" - "Üksus %s on rikutud. Puudutage parandamiseks." - "Kaart %s on rikutud. Valige parandamiseks." + + + + "Toetamata %s" "See seade ei toeta üksust %s. Puudutage toetatud vormingus seadistamiseks." "See seade ei toeta kaarti %s. Valige toetatud vormingus seadistamiseks." "Üksus %s eemaldati ootamatult" - "Andmekao vältimiseks lahutage üksus %s enne eemaldamist" - "Üksus %s on eemaldatud" - "Üksus %s eemaldati; sisestage uus" - "Üksust %s ikka eemaldatakse …" - "Ärge eemaldage" + + + + + + + + + + "Seadistus" "Eemaldamine" "Avastamine" "Üksust %s pole" - "Sisestage see seade uuesti" + + "Seadme %s teisaldamine" "Andmete teisaldamine" - "Teisaldamine lõpetati" - "Andmed teisaldati üksusesse %s" - "Andmeid ei saanud teisaldada" - "Andmed on algses asukohas alles" + + + + + + + + "Eemaldatud" "Väljutatud" "Kontrollimine ..." @@ -1676,8 +1707,7 @@ "Administraator on selle installinud" "Administraator on seda värskendanud" "Administraator on selle kustutanud" - - + "Aku tööea parandamiseks vähendab akusäästja teie seadme toimivust ning piirab vibratsiooni, asukohateenuseid ja taustaandmeid (või lülitab need välja). E-posti, sõnumsidet ja muid sünkroonimisele tuginevaid rakendusi võidakse värskendada ainult siis, kui need avate.\n\nSeadme laadimise ajal lülitatakse akusäästja automaatselt välja." "Andmekasutuse vähendamiseks keelab andmeside mahu säästja mõne rakenduse puhul andmete taustal saatmise ja vastuvõtmise. Rakendus, mida praegu kasutate, pääseb andmesidele juurde, kuid võib seda teha väiksema sagedusega. Seetõttu võidakse näiteks kujutised kuvada alles siis, kui neid puudutate." "Lül. andmemahu säästja sisse?" "Lülita sisse" @@ -1728,22 +1758,14 @@ "%1$s vaigistas" "Seadmes ilmnes sisemine probleem ja seade võib olla ebastabiilne seni, kuni lähtestate seadme tehase andmetele." "Seadmes ilmnes sisemine probleem. Üksikasjaliku teabe saamiseks võtke ühendust tootjaga." - - - - - - - - - - - - - - - - + "USSD-taotlus muudeti tavaliseks kõneks" + "USSD-taotlus muudeti SS-taotluseks" + "Muudeti uueks USSD-taotluseks" + "USSD-taotlus muudeti videokõneks" + "SS-taotlus muudeti tavaliseks kõneks" + "SS-taotlus muudeti videokõneks" + "SS-taotlus muudeti USSD-taotluseks" + "Muudeti uueks SS-taotluseks" "Tööprofiil" "Laienda" "Ahenda" @@ -1841,6 +1863,14 @@ "SIM-kaart pole häälega kasutamiseks ettevalmistatud" "SIM-kaarti ei lubata häälega kasutada" "Telefoni ei lubata häälega kasutada" + + + + + + + + "Hüpikaken" "+ %1$d" "Rakendus viidi üle vanemale versioonile või see ei ühildu selle otseteega" diff --git a/core/res/res/values-eu/strings.xml b/core/res/res/values-eu/strings.xml index 783d05b1e9d75874021c2ac682535e70111ed9d6..c5761294bc853ce8c57faf50ab985c0adc37869d 100644 --- a/core/res/res/values-eu/strings.xml +++ b/core/res/res/values-eu/strings.xml @@ -82,6 +82,8 @@ "Ez dago ahots-deien zerbitzurik" "Ez dago ahozko zerbitzurik eta ezin da egin larrialdi-deirik" "Operadoreak desaktibatu egin du aldi baterako" + + "Ezin da konektatu sare mugikorrera" "Aldatu sare hobetsia. Sakatu aldatzeko." "Ezin da egin larrialdi-deirik" @@ -120,12 +122,13 @@ "Ibiltaritzari buruzko jakinarazpena aktibatuta" "Ibiltaritzari buruzko jakinarazpena desaktibatuta" "Zerbitzu bila" - - + "Ezin izan dira konfiguratu Wi‑Fi bidezko deiak" "Wi-Fi bidez deiak egiteko eta mezuak bidaltzeko, eskatu operadoreari zerbitzu hori gaitzeko. Ondoren, aktibatu Wi-Fi bidezko deiak Ezarpenak atalean. (Errore-kodea: %1$s)" - + + "Arazo bat izan da Wi‑Fi bidezko deiak zure operadorearekin erregistratzean: %1$s" + "%s" "%s Wi-Fi bidezko deiak" @@ -293,8 +296,8 @@ "egin eta kudeatu telefono-deiak" "<b>%1$s</b> aplikazioari telefono-deiak egitea eta kudeatzea baimendu nahi diozu?" "Gorputz-sentsoreak" - "atzitu bizi-konstanteei buruzko sentsore-datuak" - "<b>%1$s</b> aplikazioari bizi-konstanteei buruzko sentsore-datuak atzitzea baimendu nahi diozu?" + "atzitu bizi-konstanteei buruzko sentsorearen datuak" + "Bizi-konstanteei buruzko sentsorearen datuak atzitzea baimendu nahi diozu <b>%1$s</b> aplikazioari?" "Eskuratu leihoko edukia" "Arakatu irekita daukazun leihoko edukia." "Aktibatu \"Arakatu ukituta\"" @@ -481,18 +484,22 @@ "Near Field Communication (NFC) etiketekin, txartelekin eta irakurgailuekin komunikatzea baimentzen die aplikazioei." "desgaitu pantailaren blokeoa" "Teklen blokeoa eta erlazionatutako pasahitz-segurtasuna desgaitzeko baimena ematen die aplikazioei. Adibidez, telefonoak teklen blokeoa desgaitzen du telefono-deiak jasotzen dituenean, eta berriro gaitzen du deiak amaitzean." - "kudeatu hatz-marka digitalen hardwarea" - "Hatz-marka digitalen txantiloiak gehitzeko eta ezabatzeko metodoei dei egitea baimentzen die aplikazioei." - "erabili hatz-marka digitalen hardwarea" - "Autentifikatzeko hatz-marka digitalen hardwarea erabiltzea baimentzen die aplikazioei." + "Erabili hardware biometrikoa" + "Autentifikatzeko hardware biometrikoa erabiltzea baimentzen die aplikazioei." + "kudeatu erreferentzia-gako digitalen hardwarea" + "Erreferentzia-gako digitalen txantiloiak gehitzeko eta ezabatzeko metodoei dei egitea baimentzen die aplikazioei." + "erabili erreferentzia-gako digitalen hardwarea" + "Autentifikatzeko erreferentzia-gako digitalen hardwarea erabiltzea baimentzen die aplikazioei." "Hatz-marka digitala ez da osorik hauteman. Saiatu berriro." - "Ezin izan da hatza-marka prozesatu. Saiatu berriro." + "Ezin izan da prozesatu hatz-marka. Saiatu berriro." "Hatz-marka digitalen sentsorea zikina dago. Garbi ezazu, eta saiatu berriro." "Hatza azkarregi mugitu duzu. Saiatu berriro." "Mantsoegi mugitu duzu hatza. Saiatu berriro." "Ez da ezagutzen" + + "Hatz-markaren hardwarea ez dago erabilgarri." "Ezin da gorde hatz-marka digitala. Kendu lehendik gordeta duzunetako bat." "Hatz-marka digitalak prozesatzeko denbora-muga gainditu da. Saiatu berriro." @@ -840,7 +847,7 @@ "Posta-kodea" "Estatua" "Posta-kodea" - "Eskualdea" + "Lurraldea" "Uhartea" "Barrutia" "Departamentua" @@ -1005,14 +1012,23 @@ "Idazketa-metodoa" "Testu-ekintzak" "Posta" + "Bidali mezu elektroniko bat hautatutako helbidera" "Deitu" + "Deitu hautatutako telefono-zenbakira" "Aurkitu" + "Bilatu hautatutako helbidea" "Ireki" + "Ireki hautatutako URLa" "Bidali mezua" + "Bidali testu-mezu bat hautatutako telefono-zenbakira" "Gehitu" + "Gehitu kontaktuetan" "Ikusi" + "Ikusi hautatutako ordua egutegian" "Antolatu" + "Antolatu gertaera bat hautatutako ordurako" "Egin jarraipena" + "Egin hautatutako hegaldiaren jarraipena" "Memoria betetzen ari da" "Sistemaren funtzio batzuek ez dute agian funtzionatuko" "Sisteman ez dago behar adina memoria. Ziurtatu gutxienez 250 MB erabilgarri dituzula eta, ondoren, berrabiarazi gailua." @@ -1141,8 +1157,7 @@ "Konektatu Wi‑Fi sare irekira" "Konektatu operadorearen Wi‑Fi sarera" - - + "Wi‑Fi sarera konektatzen" "Wi‑Fi sare irekira konektatuta" "Ezin izan da konektatu Wi‑Fi sare irekira" "Sakatu hau sare guztiak ikusteko" @@ -1259,33 +1274,49 @@ "Besteen gainean agertzen da %s" "Ez baduzu nahi %s zerbitzuak eginbide hori erabiltzea, sakatu hau ezarpenak ireki eta aukera desaktibatzeko." "Desaktibatu" - "%s prestatzen" - "Errorerik dagoen egiaztatzen" - "%s berria hauteman da" + + + + + + + + "Argazkiak eta multimedia-fitxategiak transferitzeko" - "%s hondatuta dago" - "%s hondatuta dago. Sakatu konpontzeko." - "Hondatuta dago %s. Hauta ezazu konpontzeko." + + + + "Ez da onartzen %s" "Gailuak ez du %s onartzen. Sakatu onartzen den formatu batean konfiguratzeko." "Gailuak ez du %s onartzen. Hauta ezazu onartzen den formatu batean konfiguratzeko." "%s ustekabean kendu da" - "Daturik ez galtzeko, desmuntatu %s memoria kendu aurretik" - "%s ez dago" - "%s kendu da. Sartu beste bat" - "%s ateratzen oraindik…" - "Ez kendu" + + + + + + + + + + "Konfiguratu" "Atera" "Arakatu" "Ez dago %s" - "Sartu gailua berriro" + + "%s mugitzen" "Datuak mugitzen" - "Mugitu dira datuak" - "Mugitu dira datuak %s gailura" - "Ezin izan dira mugitu datuak" - "Jatorrizko tokian utzi dira datuak" + + + + + + + + "Kendu egin da" "Kanporatu egin da" "Egiaztatzen…" @@ -1454,8 +1485,8 @@ "Iraungitze-data:" "Serie-zenbakia:" "Erreferentzia-fitxategiak:" - "SHA-256 erreferentzia-fitxategia:" - "SHA-1 erreferentzia-fitxategia:" + "SHA-256 erreferentzia-gako digitala:" + "SHA-1 erreferentzia-gako digitala:" "Ikusi guztiak" "Aukeratu jarduera" "Partekatu hauekin:" @@ -1677,8 +1708,7 @@ "Administratzaileak instalatu du" "Administratzaileak eguneratu du" "Administratzaileak ezabatu du" - - + "Bateriak gehiago iraun dezan, bateria-aurrezleak gailuaren funtzionamendua murrizten du, eta dardara, kokapen-zerbitzuak eta atzeko planoko datuen erabilera mugatzen edo desaktibatzen du. Posta elektronikoa, mezuak eta sinkronizatzen diren gainerako zerbitzuak ez dira eguneratuko haiek ireki ezean.\n\nGailua kargatzen ezarri orduko desaktibatzen da bateria-aurrezlea." "Datuen erabilera murrizteko, atzeko planoan datuak bidaltzea eta jasotzea galarazten die datu-aurrezleak aplikazio batzuei. Unean erabiltzen ari zaren aplikazioak atzi ditzake datuak, baina baliteke maiztasun txikiagoarekin atzitzea. Horrela, adibidez, baliteke irudiak ez erakustea haiek sakatu arte." "Datu-aurrezlea aktibatu?" "Aktibatu" @@ -1729,22 +1759,14 @@ "Audioa desaktibatu da (%1$s)" "Barneko arazo bat dago zure gailuan eta agian ezegonkor egongo da jatorrizko datuak berrezartzen dituzun arte." "Barneko arazo bat dago zure gailuan. Xehetasunak jakiteko, jarri fabrikatzailearekin harremanetan." - - - - - - - - - - - - - - - - + "USSD eskaera ohiko deira aldatu da" + "USSD eskaera SS eskaerara aldatu da" + "USSD eskaera berrira aldatu da" + "USSD eskaera bideo-deira aldatu da" + "SS eskaera ohiko deira aldatu da" + "SS eskaera bideo-deira aldatu da" + "SS eskaera USSD eskaerara aldatu da" + "SS eskaera berrira aldatu da" "Work profila" "Zabaldu" "Tolestu" @@ -1842,6 +1864,14 @@ "SIM txartela ez dago hornituta ahotsa erabiltzeko" "SIM txartela ezin da erabili ahotsa erabiltzeko" "Telefonoa ezin da erabili ahotsa erabiltzeko" + + + + + + + + "Leiho gainerakorra" "Beste %1$d" "Aplikazioaren bertsio zaharrago batera aldatu da, edo aplikazioa ez da lasterbide honekin bateragarria" diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index 52e986a2ecd41f1a18d44d0ece970d59ca5b3dcb..7738505ca2a0964e90a04d2c9bf6b945c62b4e19 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -77,15 +77,16 @@ "پیش‌فرض شناسه تماس‌گیرنده روی غیر محدود است. تماس بعدی: بدون محدودیت" "سرویس دارای مجوز نیست." "‏شما می‎توانید تنظیم شناسه تماس‌گیرنده را تغییر دهید." - "سرویس داده دردسترس نیست" - "بدون تماس اضطراری" + "بدون سرویس داده تلفن همراه" + "تماس اضطراری دردسترس نیست" "سرویس صوتی دردسترس نیست" - "سرویس صوتی/اضطراری دردسترس نیست" - "موقتاً توسط شبکه داده دستگاه همراه در مکان شما ارائه نمی‌شود" - "شبکه دردسترس نیست" - "برای بهبود دریافت، نوع شبکه انتخاب‌شده را در «تنظیمات > شبکه‌ و اینترنت > شبکه‌های تلفن همراه > نوع شبکه ترجیحی» تغییر دهید." - "‏تماس ازطریق Wi-Fi فعال است" - "برای انجام تماس‌های اضطراری به شبکه تلفن همراه نیاز دارید." + "بدون سرویس صوتی یا تماس اضطراری" + "شرکت مخابراتی شما موقتاً آن را خاموش کرده است" + "شرکت مخابراتی‌تان موقتاً آن را برای سیم‌کارت %d خاموش کرده است" + "شبکه تلفن همراه دردسترس نیست" + "تغییر شبکه برگزیده را امتحان کنید. برای تغییر ضربه بزنید." + "تماس اضطراری امکان‌پذیر نیست" + "‏تماس اضطراری ازطریق Wi‑Fi امکان‌پذیر نیست" "هشدارها" "بازارسال تماس" "حالت پاسخ تماس اضطراری" @@ -120,12 +121,12 @@ "اعلان رومینگ روشن" "اعلان رومینگ خاموش" "جستجوی سرویس" - "‏تماس از طریق Wi-Fi" + "‏تماس ازطریق Wi‑Fi تنظیم نشد" "‏برای برقراری تماس و ارسال پیام ازطریق Wi-Fi، ابتدا از شرکت مخابراتی خود بخواهید این سرویس را تنظیم کند. سپس در «تنظیمات»۷ دوباره «تماس ازطریق Wi-Fi» را روشن کنید. (کد خطا: %1$s)" - "ازطریق شرکت مخابراتی‌تان ثبت‌نام کنید (کد خطا: %1$s)" + "‏مشکل هنگام ثبت تماس ازطریق Wi‑Fi با شرکت مخابراتی: %1$s" "%s" @@ -160,8 +161,8 @@ "درخواست‌های زیادی در حال پردازش است. بعداً دوباره امتحان کنید." "خطای ورود به سیستم برای %1$s" "همگام‌سازی" - "همگام‌سازی" - "تعداد موارد حذف شده %s بسیار زیاد است." + "همگام‌سازی نشد" + "تعداد %s برای حذف بیش از حد مجاز شد." "‏حافظه رایانهٔ لوحی پر است! برخی از فایل‎ها را حذف کنید تا فضا آزاد شود." "حافظه ساعت پر است. برای آزادسازی فضا، چند فایل را حذف کنید." "فضای ذخیره‌سازی تلویزیون پر است. برای آزاد کردن فضا، برخی از فایل‌ها را حذف کنید." @@ -174,14 +175,13 @@ "توسط سرپرست نمایه کاری شما" "توسط %s" "نمایه کار حذف شد" - "به دلیل نداشتن برنامه سرپرست، نمایه کاری حذف شد" "برنامه سرپرست نمایه کاری یا وجود ندارد یا خراب است. در نتیجه، نمایه کاری شما و داده‌های مرتبط با آن حذف شده است. برای دریافت راهنمایی با سرپرست سیستم تماس بگیرید." "نمایه کاری شما دیگر در این دستگاه دردسترس نیست" "تلاش‌های بسیار زیادی برای وارد کردن گذرواژه انجام شده است" "دستگاه مدیریت می‌شود" "سازمانتان این دستگاه را مدیریت می‌کند و ممکن است ترافیک شبکه را پایش کند. برای اطلاع از جزئیات، ضربه بزنید." "دستگاهتان پاک خواهد شد" - "برنامه سرپرست سیستم نمی‌تواند استفاده شود. دستگاه شما در این لحظه پاک می‌شود.\n\nاگر سؤالی دارید، با سرپرست سیستم سازمانتان تماس بگیرید." + "برنامه سرپرست سیستم را نمی‌توان استفاده کرد. دستگاه شما در این لحظه پاک می‌شود.\n\nاگر سؤالی دارید، با سرپرست سیستم سازمانتان تماس بگیرید." "%s چاپ کردن را غیرفعال کرده است." "من" "گزینه‌های رایانهٔ لوحی" @@ -236,6 +236,9 @@ "حالت هواپیما" "حالت هواپیما روشن است" "حالت هواپیما خاموش است" + "بهینه‌سازی باتری" + "بهینه‌سازی باتری خاموش است" + "بهینه‌سازی باتری روشن است" "تنظیمات" "دستیار" "دستیار صوتی" @@ -269,31 +272,31 @@ "جابه‌جا شدن به نمایه کاری" "مخاطبین" "دسترسی به مخاطبین شما" - "‏به <b>%1$s</b> امکان دهید به مخاطبین شما دسترسی پیدا کند" + "‏به <b>%1$s</b> اجازه داده شود به مخاطبین شما دسترسی پیدا کند؟" "مکان" "دسترسی به موقعیت مکانی این دستگاه" - "‏به <b>%1$s</b> امکان دهید به مکان این دستگاه دسترسی پیدا کند" + "‏به <b>%1$s</b> اجازه داده شود به مکان این دستگاه دسترسی پیدا کند؟" "تقویم" "دسترسی به تقویم شما" - "‏به <b>%1$s</b> امکان دهید به تقویم شما دسترسی پیدا کند" + "‏به <b>%1$s</b> اجازه داده شود به تقویم شما دسترسی پیدا کند؟" "پیامک" "ارسال و مشاهده پیامک‌ها" - "‏به <b>%1$s<b> امکان دهید پیامک‌ها را ارسال و مشاهده کند" + "‏به <b>%1$s<b> اجازه داده شود پیامک‌ها را ارسال و مشاهده کند؟" "حافظه" "دسترسی به عکس‌ها، رسانه‌ها و فایل‌های روی دستگاهتان" - "‏به <b>%1$s<b> امکان دهید به عکس‌ها، رسانه و فایل‌های موجود در دستگاهتان دسترسی پیدا کند" + "‏به <b>%1$s<b> اجازه داده شود به عکس‌ها، رسانه و فایل‌های موجود در دستگاهتان دسترسی پیدا کند؟" "میکروفن" "ضبط صدا" - "‏به </b>%1$s</b>امکان دهید صدا ضبط کند" + "‏به </b>%1$s</b> اجازه داده شود صدا ضبط کند؟" "دوربین" "عکس گرفتن و فیلم‌برداری" - "‏به <b>%1$s</b> امکان دهید عکس بگیرد و ویدئو ضبط کند" + "‏به <b>%1$s</b> اجازه داده شود عکس بگیرد و ویدیو ضبط کند؟" "تلفن" "برقراری و مدیریت تماس‌های تلفنی" - "‏به <b>%1$s<b> امکان دهید تماس‌های تلفنی برقرار کند و آن‌ها را مدیریت کند" + "‏به <b>%1$s<b> اجازه داده شود تماس‌های تلفنی برقرار کند و آن‌ها را مدیریت کند؟" "حسگرهای بدن" "دسترسی به داده‌های حسگر در رابطه با علائم حیاتی شما" - "‏به <b>%1$s<b> امکان دهید به داده‌های حسگر مربوط به علائم حیاتی شما دسترسی پیدا کند" + "‏به <b>%1$s<b> اجازه داده شود به داده‌های حسگر مربوط به علائم حیاتی شما دسترسی پیدا کند؟" "محتوای پنجره را بازیابی کند" "محتوای پنجره‌ای را که درحال تعامل با آن هستید بررسی می‌کند." "فعال‌سازی کاوش لمسی" @@ -305,7 +308,7 @@ "اجرای اشاره‌ها" "می‌توانید ضربه بزنید، انگشتتان را تند بکشید، انگشتانتان را به هم نزدیک یا از هم دور کنید و اشاره‌های دیگری اجرا کنید." "اشاره‌های اثر انگشت" - "می‌تواند اشاره‌های انجام‌شده روی حسگر اثرانگشت دستگاه‌ها را ثبت کند." + "می‌تواند اشاره‌های اجرا‌شده روی حسگر اثرانگشت دستگاه را ثبت کند." "غیرفعال کردن یا تغییر نوار وضعیت" "‏به برنامه اجازه می‎دهد تا نوار وضعیت را غیرفعال کند یا نمادهای سیستم را اضافه یا حذف کند." "نوار وضعیت باشد" @@ -356,6 +359,8 @@ "به برنامه امکان می‌دهد قسمت‌هایی از خود را در حافظه دائمی کند. این کار حافظه موجود را برای سایر برنامه‌ها محدود کرده و باعث کندی رایانهٔ لوحی می‌شود." "به برنامه اجازه می‌دهد تا بخش‌هایی از خودش را در حافظه پایدار کند. ممکن است حافظه در دسترس سایر برنامه‌ها را محدود کند که باعث کند شدن تلویزیون می‌شود." "به برنامه امکان می‌دهد قسمت‌هایی از خود را در حافظه دائمی کند. این کار حافظه موجود را برای سایر برنامه‌ها محدود کرده و باعث کندی تلفن می‌شود." + "اجرای سرویس پیش‌زمینه" + "به برنامه اجازه می‌دهد از سرویس‌های پیش‌زمینه استفاده کند." "اندازه گیری فضای حافظه برنامه" "‏به برنامه اجازه می‎دهد تا کدها، داده‎ها و اندازه‎های حافظهٔ پنهان خود را بازیابی کند" "تغییر تنظیمات سیستم" @@ -478,6 +483,8 @@ "‏به برنامه اجازه می‎دهد تا با تگهای ارتباط میدان نزدیک (NFC)، کارتها و فایل خوان ارتباط برقرار کند." "غیرفعال کردن قفل صفحه شما" "به برنامه امکان می‌دهد قفل کلید و هر گونه امنیت گذرواژه مرتبط را غیرفعال کند. به‌عنوان مثال تلفن هنگام دریافت یک تماس تلفنی ورودی قفل کلید را غیرفعال می‌کند و بعد از پایان تماس، قفل کلید را دوباره فعال می‌کند." + "استفاده از سخت‌افزار بیومتریک" + "به برنامه امکان می‌دهد از سخت‌افزار بیومتریک برای احراز هویت استفاده کند" "مدیریت سخت‌افزار اثر انگشت" "به برنامه امکان می‌دهد روش‌هایی را برای افزودن و حذف الگوهای اثر انگشت جهت استفاده، فعال کند." "استفاده از سخت‌افزار اثر انگشت" @@ -490,6 +497,7 @@ "شناخته نشد" + "اثر انگشت احراز هویت شد" "سخت‌افزار اثرانگشت در دسترس نیست." "ذخیره اثر انگشت ممکن نیست. لطفاً یک اثر انگشت موجود را حذف کنید." "مهلت زمانی ثبت اثر انگشت به پایان رسید. دوباره امتحان کنید." @@ -544,8 +552,8 @@ "به دارنده اجازه می‌دهد به یک رابط سطح بالای سرویس شنونده اعلان متصل شود. هرگز نباید برای برنامه‌های عادی لازم شود." "مقید بودن به سرویس ارائه‌دهنده وضعیت" "به دارنده امکان می‌دهد تا به واسط سطح بالای سرویس ارائه‌دهنده وضعیت مقید باشد. برای برنامه‌های عادی هرگز نباید لازم باشد." - "اتصال به سرویس مورد نظر" - "به برنامه اجازه می‌دهد که به رابط سطح بالای سرویس مورد نظر متصل شود. هرگز نباید برای برنامه‌های معمولی مورد نیاز باشد." + "اتصال به سرویس موردنظر" + "به برنامه اجازه می‌دهد که به رابط سطح بالای سرویس موردنظر متصل شود. هرگز نباید برای برنامه‌های معمولی مورد نیاز باشد." "لغو برنامه پیکربندی ارائه شده توسط شرکت مخابراتی" "به دارنده اجازه می‌دهد که تنظیمات برنامه شرکت مخابراتی را لغو کند. هرگز برای برنامه‌های معمولی مورد نیاز نیست." "گوش دادن برای بررسی شرایط شبکه" @@ -802,6 +810,8 @@ "باز کردن قفل با الگو." "باز کردن قفل با چهره." "باز کردن قفل با پین." + "قفل پین سیم‌کارت باز شد." + "‏قفل Puk سیم‌کارت باز شد." "باز کردن قفل با گذرواژه." "ناحیه الگو." "ناحیه کشیدن انگشت روی صفحه." @@ -863,6 +873,12 @@ "متن در کلیپ بورد کپی شد." "بیشتر" "منو+" + "‎Meta+‎" + "‎Ctrl+‎" + "‎Alt+‎" + "‎Shift+‎" + "‎Sym+‎" + "‎Function+‎" "فاصله" "ورود" "حذف" @@ -994,14 +1010,23 @@ "روش ورودی" "کنش‌های متنی" "رایانامه" + "ارسال رایانامه به نشانی انتخابی" "تماس" + "تماس با شماره تلفن انتخابی" "مکان‌یابی" + "مکان‌یابی نشانی انتخابی" "باز کردن" + "باز کردن نشانی وب انتخابی" "پیام" + "ارسال پیام به شماره تلفن انتخابی" "افزودن" + "افزودن به مخاطبین" "مشاهده" + "مشاهده زمان انتخابی در تقویم" "زمان‌بندی" + "زمان‌بندی رویداد برای زمان انتخابی" "پیگیری" + "ردیابی پرواز انتخابی" "حافظه درحال پر شدن است" "برخی از عملکردهای سیستم ممکن است کار نکنند" "فضای ذخیره‌سازی سیستم کافی نیست. اطمینان حاصل کنید که دارای ۲۵۰ مگابایت فضای خالی هستید و سیستم را راه‌اندازی مجدد کنید." @@ -1074,31 +1099,28 @@ "بررسی وجود به‌روزرسانی" "‏برنامه %1$s (پردازش %2$s) خط‌مشی StrictMode اجرایی خود را نقض کرده است." "‏فرآیند %1$s خط‌مشی StrictMode اجرای خودکار خود را نقض کرده است." - "‏Android در حال ارتقا است..." - "‏Android در حال راه‌اندازی است..." + "تلفن درحال به‌روزرسانی است…" + "رایانه لوحی درحال به‌روزرسانی است…" + "دستگاه درحال به‌روزرسانی است…" + "تلفن درحال راه‌اندازی است…" + "رایانه لوحی درحال راه‌اندازی است…" + "دستگاه درحال راه‌اندازی است…" "بهینه‌سازی فضای ذخیره‌سازی." - "‏درحال پایان به‌روزرسانی Android…" - "تا پایان ارتقا، ممکن است برخی از برنامه‌ها به‌درستی کار نکنند." + "درحال اتمام به‌روزرسانی سیستم…" "%1$s درحال ارتقا است...." "در حال بهینه‌سازی برنامهٔ %1$d از %2$d." "آماده‌سازی %1$s." "در حال آغاز برنامه‌ها." "در حال اتمام راه‌اندازی." "%1$s در حال اجرا" - - - - - - - - - - - - + "برای برگشت به بازی، ضربه بزنید" + "انتخاب بازی" + "برای عملکرد بهتر، هربار فقط یکی از این بازی‌ها را می‌توان باز کرد." + "به %1$s برگردید" + "%1$s را باز کنید" + "%1$s بدون ذخیره شدن بسته می‌شود" "%1$s از حد مجاز حافظه فراتر رفت" - "رون حافظه آزاد جمع‌آوری شد؛ برای اشتراک‌گذاری، ضربه بزنید" + "رونوشت حافظه جمع‌آوری شد. برای هم‌رسانی ضربه بزنید." "رونوشت حافظه آزاد به اشتراک گذاشته شود؟" "فرآیند %1$s از حد مجاز حافظه پردازش خود %2$s فراتر رفته است. یک رونوشت حافظه آزاد برای شما در دسترس است که با برنامه‌نویس به اشتراک بگذارید. مواظب باشید: این رونوشت حافظه آزاد می‌تواند حاوی هر نوع اطلاعات شخصی شما باشد که برنامه به آن دسترسی دارد." "انتخاب یک عملکرد برای نوشتار" @@ -1133,12 +1155,12 @@ "‏اتصال به شبکه Wi‑Fi باز" "‏اتصال به شبکه Wi-Fi شرکت مخابراتی" - "‏درحال اتصال به شبکه Wi‑Fi باز" + "‏درحال اتصال به شبکه Wi‑Fi..." "‏به شبکه Wi‑Fi متصل شد" "‏به شبکه Wi-Fi متصل نشد" "برای دیدن همه شبکه‌ها ضربه بزنید" "اتصال" - "همه شبکه‌ها" + "همه شبکه‌ها" "‏Wi‑Fi به‌طور خودکار روشن خواهد شد" "وقتی نزدیک شبکه ذخیره‌شده با کیفیت بالا هستید" "دوباره روشن نشود" @@ -1204,6 +1226,7 @@ "راه‌اندازی مجدد" "سرویس دستگاه همراه را فعال کنید" "برای فعال کردن سیم‌کارت جدیدتان، برنامه شرکت مخابراتی را بارگیری کنید" + "برای فعال کردن سیم‌کارت جدیدتان، برنامه %1$s را بارگیری کنید" "بارگیری برنامه" "سیم‌کارت جدید جاگذاری شد" "برای تنظیم آن ضربه بزنید" @@ -1222,13 +1245,13 @@ "‏PTP ازطریق USB روشن شد" "‏اتصال به اینترنت با USB تلفن همراه روشن شد" "‏MIDI ازطریق USB روشن شد" - "‏حالت لوازم جانبی USB روشن شد" + "‏وسیله جانبی USB متصل است" "برای گزینه‌های بیشتر ضربه بزنید." "درحال شارژ کردن دستگاه متصل‌‌شده. برای گزینه‌های بیشتر، ضربه بزنید." "لوازم جانبی صوتی آنالوگ شناسایی شد" "دستگاه متصل‌شده با این تلفن سازگار نیست. روی اطلاعات بیشتر، ضربه بزنید." "‏اشکال‌زدایی USB متصل شد" - "‏برای غیرفعال کردن اشکال‌زدایی USB ضربه بزنید." + "‏برای خاموش کردن اشکال‌زدایی USB ضربه بزنید" "‏انتخاب کنید تا رفع عیب USB غیرفعال شود." "درحال گرفتن گزارش اشکال…" "گزارش اشکال به اشتراک گذاشته شود؟" @@ -1247,34 +1270,35 @@ "%s روی برنامه‌های دیگر نشان داده می‌شود" "%s روی برنامه‌های دیگر نشان داده می‌شود" "اگر نمی‌خواهید %s از این قابلیت استفاده کند، با ضربه زدن، تنظیمات را باز کنید و قابلیت را خاموش کنید." - "خاموش کردن" - "در حال آماده‌سازی %s" - "در حال بررسی برای خطاها" - "%s جدید شناسایی شد" + "خاموش کردن" + "درحال بررسی %s…" + "درحال مرور محتوای کنونی" + "%s جدید" + "برای راه‌اندازی ضربه بزنید" "برای انتقال عکس‌ها و رسانه" - "%s خراب است" - "%s خراب است. برای برطرف کردن مشکل ضربه بزنید." + "مشکل مرتبط با %s" + "برای برطرف کردن مشکل، ضربه بزنید" "%s خراب است. رفع خطا را انتخاب کنید." "%s پشتیبانی نشده" "این دستگاه از این %s پشتیبانی نمی‌کند. برای نصب آن در قالب پشتیبانی‌شده ضربه بزنید." "این دستگاه از این %s پشتیبانی نمی‌کند. برای تنظیم در یک قالب پشتیبانی‌شده، آن را انتخاب کنید." "%s به‌طور غیرمنتظره جدا شد" - "قبل از جدا کردن، برای جلوگیری از از دست رفتن اطلاعات، ارتباط %s را قطع کنید." - "%s جدا شده است" - "%s جدا شد؛ رسانه جدیدی وارد کنید" - "همچنان در حال بیرون راندن %s..." - "جدا نکنید" + "برای جلوگیری از از دست رفتن محتوا، رسانه را قبل از برداشتن بیرون برانید" + "%s برداشته شد" + "برخی عملکردها ممکن است به‌درستی کار نکنند. فضای ذخیره‌سازی جدید وارد کنید." + "درحال بیرون راندن %s" + "جدا نکنید" "راه‌اندازی" "بیرون راندن" "کاوش" "%s وجود ندارد" - "جاگذاری مجدد این دستگاه" + "دستگاه را دوباره وارد کنید" "در حال انتقال %s" "در حال انتقال اطلاعات" - "انتقال کامل شد" - "اطلاعات به %s منتقل شد" - "اطلاعات منتقل نشدند" - "اطلاعات در مکان اصلی باقی ماندند" + "انتقال محتوا انجام شد" + "محتوا به %s منتقل شد" + "محتوا منتقل نشد" + "محتوا را دوباره انتقال دهید" "جدا شده" "بیرون رانده شده" "در حال بررسی…" @@ -1333,14 +1357,14 @@ "‏در حال اتصال VPN همیشه فعال…" "‏VPN همیشه فعال متصل شد" "‏ارتباط VPN همیشه روشن قطع شد" - "‏خطای VPN همیشه فعال" + "‏به «VPN همیشه روشن» متصل نشد" "‏تغییر شبکه یا تنظیمات VPN" "انتخاب فایل" "هیچ فایلی انتخاب نشد" "بازنشانی" "ارسال" - "حالت خودرو فعال شد" - "برای خروج از حالت خودرو ضربه بزنید." + "برنامه رانندگی درحال اجرا است" + "برای خروج از برنامه رانندگی ضربه بزنید." "اتصال داده با سیم یا نقطه اتصال فعال" "برای راه‌اندازی ضربه بزنید." "اتصال به اینترنت با تلفن همراه غیرفعال شده است" @@ -1418,22 +1442,19 @@ "‏درایو USB ‏%s" "‏حافظهٔ USB" "ویرایش" - "هشدار مصرف داده" - "برای مشاهده مصرف و تنظیمات ضربه بزنید." - "‏به حد مجاز مصرف داده 2G-3G رسید" - "‏به حد مجاز مصرف داده 4G رسید" + "هشدار داده" + "%s از داده را مصرف کرده‌اید" "مصرف داده به حد مجاز رسیده است" "‏به حد مجاز مصرف داده Wi-Fi رسید" - "داده برای مابقی دوره متوقف شد" - "‏اطلاعات 2G-3G بیش از حد مجاز است" - "‏بیش از حد مجاز 4G است" - "داده‌های تلفن همراه از مقدار مجاز بیشتر است" - "‏از محدوده مجاز داده‌های Wi-Fi بیشتر شد" - "%s از حد تعیین شده بیشتر شد." + "برای بقیه دوره، داده موقتاً‌ متوقف می‌شود" + "بیش از حداکثر مجاز داده تلفن همراه" + "‏بیش از حداکثر مجاز داده Wi-Fi" + "مصرف داده شما %s از حداکثر مجاز بیشتر شده است" "داده پس‌زمینه محدود شد" "برای برداشتن محدودیت ضربه بزنید." - "مصرف داده زیاد" - "مصرف داده شما در چند روز گذشته بیشتر از حالت عادی بوده است. برای مشاهده میزان مصرف و تنظیمات، ضربه بزنید." + "مصرف بالای داده تلفن همراه" + "برنامه‌های شما بیش از معمول داده مصرف کرده‌اند" + "%s بیش از معمول داده مصرف کرده است" "گواهی امنیتی" "این گواهی معتبر است." "صادر شده برای:" @@ -1669,7 +1690,7 @@ "توسط سرپرست سیستم نصب شد" "توسط سرپرست سیستم به‌روزرسانی شد" "توسط سرپرست سیستم حذف شد" - "برای کمک به بهبود عمر باتری، بهینه‌سازی باتری عملکرد دستگاهتان را کاهش می‌دهد و لرزش، خدمات مکان و دسترسی به اکثر داده‌ها در پس‌زمینه را محدود می‌کند. رایانامه، پیام‌رسانی و برنامه‌های دیگری که به همگام‌سازی وابسته‌ هستند، تا زمانی‌که آن‌ها را باز نکنید نمی‌توانند به‌روز شوند.\n\nبهینه‌سازی باتری به‌صورت خودکار در هنگام شارژ شدن دستگاه خاموش می‌شود." + "برای افزایش عمر باتری، «بهینه‌سازی باتری» عملکرد دستگاهتان را کاهش می‌دهد و لرزش،‌ خدمات مکان و داده‌های پس‌زمینه را محدود یا خاموش می‌کند. رایانامه،‌ پیام‌رسانی و دیگر برنامه‌های وابسته به همگام‌سازی تا زمانی که آن‌ها را باز نکنید، به‌روزرسانی نمی‌شوند.\n\n«بهینه‌سازی باتری» به‌طور خودکار در هنگام شارژ شدن دستگاه خاموش می‌شود." "برای کمک به کاهش مصرف داده، «صرفه‌جویی داده» از ارسال و دریافت داده در پس‌زمینه از طرف بعضی برنامه‌ها جلوگیری می‌کند. برنامه‌ای که درحال‌حاضر استفاده می‌کنید می‌تواند به داده‌ها دسترسی داشته باشد اما دفعات دسترسی آن محدود است.این یعنی، برای مثال، تصاویر تا زمانی که روی آنها ضربه نزنید نشان داده نمی‌شوند." "صرفه‌جویی داده روشن شود؟" "روشن کردن" @@ -1681,9 +1702,9 @@ ‏برای %1$d دقیقه (تا %2$s) ‏برای %1$d دقیقه (تا %2$s) - - ‏به مدت %1$d ساعت (تا %2$s) - ‏به مدت %1$d ساعت (تا %2$s) + + ‏%1$d ساعت (تا %2$s) + ‏%1$d ساعت (تا %2$s) ‏برای %1$d ساعت (تا %2$s) @@ -1697,9 +1718,9 @@ ‏برای %d دقیقه ‏برای %d دقیقه - - ‏به مدت %d ساعت - ‏به مدت %d ساعت + + ‏%d ساعت + ‏%d ساعت ‏برای %d ساعت @@ -1720,14 +1741,14 @@ "%1$s آن را بی‌صدا کرد" "دستگاهتان یک مشکل داخلی دارد، و ممکن است تا زمانی که بازنشانی داده‌های کارخانه انجام نگیرد، بی‌ثبات بماند." "دستگاهتان یک مشکل داخلی دارد. برای جزئیات آن با سازنده‌تان تماس بگیرید." - "‏درخواست USSD به درخواست DIAL اصلاح می‌شود." - "‏درخواست USSD به درخواست SS اصلاح می‌شود." - "‏درخواست USSD به درخواست USSD جدید اصلاح می‌شود." - "‏درخواست USSD به درخواست Video DIAL تغییر کرد." - "‏درخواست SS به درخواست DIAL اصلاح می‌شود." - "‏درخواست SS به درخواست Video DIAL تغییر کرد." - "‏درخواست SS به درخواست USSD اصلاح می‌شود." - "‏درخواست SS به درخواست SS جدید اصلاح می‌شود." + "‏درخواست USSD به تماس معمولی تغییر کرد" + "‏درخواست USSD به‌درخواست SS تغییر کرد" + "‏به‌ درخواست USSD جدید تغییر کرد" + "‏درخواست USSD به تماس ویدیویی تغییر کرد" + "‏درخواست SS به تماس معمولی تغییر کرد" + "‏درخواست SS به تماس ویدیویی تغییر کرد" + "‏درخواست SS به‌ درخواست USSD تغییر کرد" + "‏به‌ درخواست SS جدید تغییر کرد" "نمایه کاری" "بزرگ کردن" "کوچک کردن" @@ -1825,6 +1846,10 @@ "سیم‌کارت مجوز لازم برای عملیات صوتی را ندارد" "سیم‌کارت برای عملیات صوتی مجاز نیست" "تلفن برای عملیات صوتی مجاز نیست" + "سیم‌کارت %d مجاز نیست" + "سیم‌کارت %d مجوز لازم را ندارد" + "سیم‌کارت %d مجاز نیست" + "سیم‌کارت %d مجاز نیست" "پنجره بازشو" "‎+ %1$d‎" "نسخه برنامه تنزل داده شده است یا با این میان‌بر سازگار نیست" @@ -1837,7 +1862,14 @@ "برنامه مضر شناسایی شد" "%1$s می‌خواهد تکه‌های %2$s را نشان دهد" "ویرایش" + "دستگاهتان برای تماس‌ها و اعلان‌ها می‌لرزد" + "دستگاهتان برای تماس‌ها و اعلان‌ها بی‌صدا خواهد شد" "تغییرات سیستم" + "مزاحم نشوید" + "«مزاحم نشوید» اعلان‌ها را پنهان می‌کند تا تمرکز شما به هم نریزد" + "این رفتار جدید است. برای تغییر ضربه بزنید." "«مزاحم نشوید» تغییر کرده است" - "برای بررسی تنظیمات رفتار شما دربرابر وقفه‌ها، ضربه بزنید" + "برای بررسی موارد مسدودشده ضربه بزنید." + "سیستم" + "تنظیمات" diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index a22e74132033d36fb3b4e07b4953f3cc28d27034..b1199111e5796e18660a836da05f9482e29b1655 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -82,6 +82,8 @@ "Ei äänipuheluja" "Ei äänipalvelua tai hätäpuheluita" "Operaattorin tilapäisesti käytöstä poistama" + + "Mobiiliverkkoon ei saada yhteyttä" "Kokeile vaihtaa ensisijaista verkkoa. Vaihda se napauttamalla." "Hätäpuhelut eivät ole käytettävissä" @@ -120,12 +122,13 @@ "Roaming-banneri käytössä" "Roaming-banneri pois käytöstä" "Etsitään signaalia" - - + "Wi-Fi-puhelujen käyttöönotto epäonnistui" "Jos haluat soittaa puheluita ja lähettää viestejä Wi-Fin kautta, pyydä ensin operaattoriasi ottamaan tämä palvelu käyttöön. Ota sitten Wi-Fi-puhelut käyttöön asetuksissa. (Virhekoodi: %1$s)" - + + "Virhe otettaessa Wi-Fi-puheluita käyttöön operaattorille %1$s" + "%s" "Wi-Fi-puhelut: %s" @@ -481,6 +484,8 @@ "Antaa sovelluksen kommunikoida NFC (Near Field Communication) -tagien, -korttien ja -lukijoiden kanssa." "poista näytön lukitus käytöstä" "Antaa sovelluksen ottaa näppäinlukon ja siihen liittyvän salasanasuojauksen pois käytöstä. Esimerkki: puhelin poistaa näppäinlukon käytöstä puhelun saapuessa ja asettaa lukon takaisin käyttöön puhelun päättyessä." + "käytä biometristä laitteistoa" + "Sallii sovelluksen käyttää biometristä laitteistoa todennukseen" "sormenjälkilaitteiston hallinnointi" "Sallii sovelluksen käyttää menetelmiä, joilla voidaan lisätä tai poistaa sormenjälkimalleja." "sormenjälkilaitteiston käyttö" @@ -493,6 +498,8 @@ "Ei tunnistettu" + + "Sormenjälkilaitteisto ei ole käytettävissä." "Sormenjälkeä ei voida tallentaa. Poista aiemmin lisätty sormenjälki." "Sormenjälkitunnistimen toiminta aikakatkaistiin. Yritä uudelleen." @@ -1005,14 +1012,23 @@ "Syöttötapa" "Tekstitoiminnot" "Sähköposti" + "Lähetä sähköposti valittuun osoitteeseen" "Soita" + "Soita valittuun puhelinnumeroon" "Paikanna" + "Etsi valittu osoite kartalta" "Avaa" + "Avaa valittu URL-osoite" "Viesti" + "Lähetä viesti valittuun puhelinnumeroon" "Lisää" + "Lisää yhteystietoihin" "Näytä" + "Näytä valittu aika kalenterissa" "Aikataulu" + "Ajoita tapahtuma valitulle ajalle" "Seuraa" + "Seuraa valittua lentoa" "Tallennustila loppumassa" "Kaikki järjestelmätoiminnot eivät välttämättä toimi" "Tallennustila ei riitä. Varmista, että vapaata tilaa on 250 Mt, ja käynnistä uudelleen." @@ -1141,8 +1157,7 @@ "Yhdistä avoimeen Wi‑Fi-verkkoon" "Yhdistä operaattorin Wi-Fi-verkkoon" - - + "Yhdistetään Wi-Fi-verkkoon" "Yhdistetty Wi-Fi-verkkoon" "Wi‑Fi-verkkoon yhdistäminen epäonnistui" "Napauta, niin näet kaikki verkot." @@ -1258,33 +1273,49 @@ "%s näkyy sovellusten päällä" "Jos et halua, että %s voi käyttää tätä ominaisuutta, avaa asetukset napauttamalla ja poista se käytöstä." "Poista käytöstä" - "Valmistellaan kohdetta %s" - "Tarkistetaan virheiden varalta." - "Uusi %s on havaittu." + + + + + + + + "Kuvien ja median siirtämiseen" - "Vioittunut %s" - "%s on viallinen. Korjaa napauttamalla." - "%s on viallinen. Korjaa valitsemalla." + + + + "Epäyhteensopiva %s" "%s ei ole yhteensopiva tämän laitteen kanssa. Ota se käyttöön tuetussa tilassa napauttamalla." "Tämä laite ei tue laitetta %s. Valitse laite, niin voit suorittaa määrityksen tuetussa muodossa." "%s poistettiin yllättäen" - "Poista %s käytöstä ennen sen irrottamista estääksesi tietoja katoamasta." - "%s on poistettu" - "%s on poistettu. Aseta uusi." - "Kohteen %s poisto on kesken…" - "Älä poista." + + + + + + + + + + "Määritä asetukset" "Poista" "Tutustu" "%s puuttuu." - "Liitä tämä laite uudelleen." + + "Siirretään %s." "Siirretään tietoja." - "Siirto on valmis." - "Tiedot on siirretty kohteeseen %s." - "Tietojen siirto epäonnistui." - "Tietoja jäi alkuperäiseen paikkaan." + + + + + + + + "Irrotettu" "Poistettu" "Tarkistetaan…" @@ -1676,8 +1707,7 @@ "Järjestelmänvalvoja asensi tämän." "Järjestelmänvalvoja päivitti tämän." "Järjestelmänvalvoja poisti tämän." - - + "Parantaakseen akun kestoa virransäästö vähentää laitteesi suorituskykyä ja rajoittaa värinää, sijaintipalveluita ja taustadataa tai poistaa ne käytöstä. Sähköposti, viestit ja muut synkronointiin perustuvat sovellukset eivät välttämättä päivity, ellet avaa niitä.\n\nVirransäästö poistuu käytöstä automaattisesti, kun laitteesi latautuu." "Data Saver estää joitakin sovelluksia lähettämästä tai vastaanottamasta tietoja taustalla, jotta datan käyttöä voidaan vähentää. Käytössäsi oleva sovellus voi yhä käyttää dataa, mutta se saattaa tehdä niin tavallista harvemmin. Tämä voi tarkoittaa esimerkiksi sitä, että kuva ladataan vasta, kun kosketat sitä." "Otetaanko Data Saver käyttöön?" "Ota käyttöön" @@ -1728,22 +1758,14 @@ "Mykistänyt %1$s" "Laitteellasi on sisäinen ongelma, joka aiheuttaa epävakautta. Voit korjata tilanteen palauttamalla tehdasasetukset." "Laitteesi yhdistäminen ei onnistu sisäisen virheen takia. Saat lisätietoja valmistajalta." - - - - - - - - - - - - - - - - + "USSD-pyyntö vaihdettu tavalliseksi puheluksi" + "USSD-pyyntö vaihdettu SS-pyynnöksi" + "Vaihdettu uudeksi USSD-pyynnöksi" + "USSD-pyyntö vaihdettu videopuheluksi" + "SS-pyyntö vaihdettu tavalliseksi puheluksi" + "SS-pyyntö vaihdettu videopuheluksi" + "SS-pyyntö vaihdettu USSD-pyynnöksi" + "Vaihdettu uudeksi SS-pyynnöksi" "Työprofiili" "Laajenna" "Tiivistä" @@ -1841,6 +1863,14 @@ "SIM-kortti ei käyttäjien hallinnassa" "Äänipalvelujen käyttö ei sallittua SIM-kortilla" "Äänipalvelujen käyttö ei sallittua puhelimella" + + + + + + + + "Ponnahdusikkuna" "+ %1$d" "Sovellusversio on päivitetty vanhempaan versioon tai ei ole yhteensopiva tämän pikakuvakkeen kanssa." diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index 1ed7b8f213a4ae4444c89ee7dfc912a9d2ee7fa7..fd5ab0a8654a4a6c45d27d3f6dd6978adb90d918 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -82,6 +82,8 @@ "Aucun service vocal" "Aucun de service vocal ni d\'appel d\'urgence" "Temporairement désactivé par votre fournisseur de services" + + "Impossible de joindre le réseau cellulaire" "Essayez de changer de réseau préféré. Touchez l\'écran pour changer." "Le service d\'appel d\'urgence n\'est pas accessible" @@ -120,12 +122,13 @@ "Bannière d\'itinérance activée" "Bannière d\'itinérance désactivée" "Recherche des services disponibles" - - + "Impossible de configurer les appels Wi-Fi" "Pour effectuer des appels et envoyer des messages par Wi-Fi, demandez tout d\'abord à votre fournisseur de services de configurer ce service. Réactivez ensuite les appels Wi-Fi dans les paramètres. (Code d\'erreur : %1$s)" - + + "Une erreur s\'est produite lors de l\'enregistrement des appels Wi-Fi avec votre fournisseur de services : %1$s" + "%s" "Appels Wi-Fi %s" @@ -159,10 +162,8 @@ "Trop de requêtes sont en cours de traitement. Veuillez réessayer plus tard." "Erreur de connexion au compte %1$s" "Synchroniser" - - - - + "Synchronisation impossible" + "Vous avez tenté de supprimer trop de %s." "La mémoire de la tablette est pleine. Supprimez des fichiers pour libérer de l\'espace." "La mémoire de la montre est pleine. Supprimez des fichiers pour libérer de l\'espace." "L\'espace de stockage du téléviseur est plein. Supprimez des fichiers pour libérer de l\'espace." @@ -272,40 +273,31 @@ "Passer au profil professionnel" "Contacts" "accéder à vos contacts" - - + "Autoriser « %1$s » à accéder à vos contacts?" "Localisation" "accéder à la position de cet appareil" - - + "Autoriser « %1$s » à accéder à la position de cet appareil?" "Agenda" "accéder à votre agenda" - - + "Autoriser « %1$s » à accéder à votre agenda?" "Messagerie texte" "envoyer et afficher des messages texte" - - + "Autoriser « %1$s » à envoyer et à afficher des messages texte?" "Stockage" "accéder aux photos, aux contenus multimédias et aux fichiers sur votre appareil" - - + "Autoriser « %1$s » à accéder aux photos, aux médias et aux fichiers de votre appareil?" "Microphone" "enregistrer des fichiers audio" - - + "Autoriser « %1$s » à enregistrer de l\'audio?" "Appareil photo" "prendre des photos et filmer des vidéos" - - + "Autoriser « %1$s » à prendre des photos et à filmer des vidéos?" "Téléphone" "faire et gérer des appels téléphoniques" - - + "Autoriser « %1$s » à faire et à gérer les appels téléphoniques?" "Capteurs corporels" "accéder aux données des capteurs sur vos signes vitaux" - - + "Autoriser « %1$s » à accéder aux données des capteurs pour vos signes vitaux?" "Récupérer le contenu d\'une fenêtre" "Inspecter le contenu d\'une fenêtre avec laquelle vous interagissez." "Activer la fonctionnalité Explorer au toucher" @@ -492,6 +484,10 @@ "Permet à l\'application de communiquer avec des bornes, des cartes et des lecteurs compatibles avec la technologie NFC (communication en champ proche)." "désactiver le verrouillage de l\'écran" "Permet à l\'application de désactiver le verrouillage des touches et toute mesure de sécurité par mot de passe associée. Par exemple, votre téléphone désactive le verrouillage des touches lorsque vous recevez un appel, puis le réactive lorsque vous raccrochez." + + + + "gérer le matériel d\'empreinte digitale" "Permet à l\'application de faire appel à des méthodes d\'ajout et de suppression de modèles d\'empreinte digitale que vous pouvez utiliser." "utiliser le matériel d\'empreinte digitale" @@ -504,6 +500,8 @@ "Doigt non reconnu" + + "Matériel d\'empreinte numérique indisponible." "L\'empreinte digitale ne peut pas être enregistrée. Veuillez supprimer une empreinte existante." "Le temps attribué pour lire l\'empreinte est écoulé. Veuillez essayer de nouveau." @@ -1016,14 +1014,32 @@ "Mode de saisie" "Actions sur le texte" "Courriel" + + "Appel" + + "Localiser" + + "Ouvrir" + + "Message" + + "Ajouter" + + "Afficher" + + "Calendrier" + + "Effectuer le suivi" + + "Espace de stockage bientôt saturé" "Il est possible que certaines fonctionnalités du système ne soient pas opérationnelles." "Espace de stockage insuffisant pour le système. Assurez-vous de disposer de 250 Mo d\'espace libre, puis redémarrez." @@ -1117,8 +1133,7 @@ "Ouvrir %1$s" "%1$s va fermer sans enregistrement" "%1$s a dépassé la limite de mémoire" - - + "L\'empreinte de mémoire a été recueillie. Touchez ici pour la partager." "Partager l\'empreinte de mémoire?" "Le processus %1$s a dépassé sa limite de mémoire de %2$s. Vous pouvez partager son empreinte de mémoire avec son développeur. Attention : cette empreinte peut contenir certains de vos renseignements personnels auxquels l\'application a accès." "Sélectionner une action pour le texte" @@ -1153,8 +1168,7 @@ "Connectez-vous pour ouvrir un réseau Wi-Fi" "Se connecter au réseau Wi-Fi du fournisseur de services" - - + "Connexion au réseau Wi-Fi en cours…" "Connecté au réseau Wi-Fi" "Impossible de se connecter au réseau Wi-Fi" "Touchez pour afficher tous les réseaux" @@ -1270,33 +1284,49 @@ "%s aff. contenu par-dessus applis" "Si vous ne voulez pas que %s utilise cette fonctionnalités, touchez l\'écran pour ouvrir les paramètres, puis désactivez-la." "Désactiver" - "Préparation de « %s » en cours" - "Recherche d\'erreurs en cours..." - "Une nouvelle mémoire « %s » a été détectée" + + + + + + + + "Pour transférer des photos et d\'autres fichiers" - "Corrompue : %s" - "%s est corrompu. Touchez pour corriger le problème." - "Le média « %s » est corrompu. Sélectionnez-le pour corriger la situation." + + + + "%s non compatible" "Cet appareil n\'est pas compatible avec la mémoire de stockage « %s ». Touchez pour la configurer dans un format compatible." "Cet appareil ne prend pas en charge ce média « %s ». Sélectionnez-le pour le configurer dans un format compatible." "Retrait inattendu de la mémoire « %s »" - "Désinstallez la mémoire « %s » avant de la retirer pour éviter toute perte de données." - "Mémoire de stockage « %s » retirée" - "La mémoire de stockage « %s » a été retirée. Insérez-en une autre." - "Éjection de la mémoire « %s »..." - "Ne pas retirer" + + + + + + + + + + "Configurer" "Éjecter" "Découvrir" "Mémoire de stockage %s manquante" - "Réinsérez le dispositif" + + "Déplacement de %s en cours..." "Déplacement des données..." - "Déplacement terminé" - "Données déplacées vers %s" - "Imposs. de déplacer les données" - "Les données sont restées à l\'emplacement d\'origine" + + + + + + + + "Supprimée" "Éjectée" "Vérification en cours…" @@ -1355,17 +1385,14 @@ "RPV permanent en cours de connexion…" "RPV permanent connecté" "Déconnecté du RPV permanent" - - + "Impossible de se connecter au RPV permanent?" "Modifier les paramètres réseau ou RPV" "Choisir un fichier" "Aucun fichier sélectionné" "Réinitialiser" "Envoyer" - - - - + "L\'application de conduite est en cours d\'exécution" + "Touchez pour quitter l\'application de conduite." "Partage de connexion ou point d\'accès sans fil activé" "Touchez pour configurer." "Le partage de connexion est désactivé" @@ -1691,8 +1718,7 @@ "Installé par votre administrateur" "Mise à jour par votre administrateur" "Supprimé par votre administrateur" - - + "Pour améliorer l\'autonomie de la pile, la fonction Économie d\'énergie réduit les performances de votre appareil et limite ou désactive la vibration, les services de localisation ainsi que la plupart des données en arrière-plan. Les applications de courriels, de messages et d\'autres qui reposent sur la synchronisation ne peuvent pas se mettre à jour, sauf si vous les ouvrez.\n\nLa fonction Économie d\'énergie se désactive automatiquement lorsque votre appareil est en charge." "Pour aider à diminuer l\'utilisation des données, la fonction Économiseur de données empêche certaines applications d\'envoyer ou de recevoir des données en arrière-plan. Une application que vous utilisez actuellement peut accéder à des données, mais peut le faire moins souvent. Cela peut signifier, par exemple, que les images ne s\'affichent pas jusqu\'à ce que vous les touchiez." "Activer l\'Économiseur de données?" "Activer" @@ -1743,22 +1769,14 @@ "Mis en sourdine par %1$s" "Un problème interne est survenu avec votre appareil. Il se peut qu\'il soit instable jusqu\'à ce que vous le réinitialisiez à sa configuration d\'usine." "Un problème interne est survenu avec votre appareil. Communiquez avec le fabricant pour obtenir plus de détails." - - - - - - - - - - - - - - - - + "La demande USSD a été remplacée par une demande d\'appel régulier" + "La demande USSD a été remplacée par une demande SS" + "La demande a été remplacée par une nouvelle demande USSD" + "La demande USSD a été remplacée par une demande d\'appel vidéo" + "La demande SS a été remplacée par une demande d\'appel régulier" + "La demande SS a été remplacée par une demande d\'appel vidéo" + "La demande SS a été remplacée par une demande USSD" + "La demande a été remplacée par une nouvelle demande SS" "Profil professionnel" "Développer" "Réduire" @@ -1856,6 +1874,14 @@ "Cette carte SIM n\'est pas autorisée pour la voix" "Cette carte SIM n\'est pas autorisée pour la voix" "Ce téléphone n\'est pas autorisé pour la voix" + + + + + + + + "Fenêtre contextuelle" "+ %1$d" "La version de l\'application a été rétrogradée ou n\'est pas compatible avec ce raccourci" @@ -1876,8 +1902,6 @@ "C\'est un nouveau comportement. Touchez l\'écran pour changer vos options." "Les paramètres du mode Ne pas déranger ont changé" "Touchez l\'écran pour vérifier ce qui est bloqué." - - - - + "Système" + "Paramètres" diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 34ebece77dd3451e8cfc2d276173e1b89a2eda76..f167b6ff8e93502cb3cc978d369e718e280e6a01 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -82,6 +82,8 @@ "Aucun service vocal" "Aucun service vocal ni d\'appels d\'urgence" "Service temporairement désactivé par votre opérateur" + + "Impossible d\'accéder au réseau mobile" "Essayez de changer le réseau préféré. Appuyez pour le modifier." "Appels d\'urgence non disponibles" @@ -120,12 +122,13 @@ "Bannière d\'itinérance activée" "Bannière d\'itinérance désactivée" "Recherche des services disponibles" - - + "Impossible de configurer les appels Wi‑Fi" "Pour passer des appels et envoyer des messages via le Wi-Fi, demandez d\'abord à votre opérateur de configurer ce service. Ensuite, réactivez les appels Wi-Fi dans les paramètres. (Code d\'erreur : %1$s)" - + + "Problème lors de l\'enregistrement des appels Wi‑Fi avec votre opérateur : %1$s" + "%s" "Appels Wi-Fi %s" @@ -159,10 +162,8 @@ "Trop de requêtes sont en cours de traitement. Veuillez réessayer ultérieurement." "Erreur de connexion au compte \"%1$s\"" "Synchroniser" - - - - + "Synchronisation impossible" + "Vous avez dépassé le nombre limite de tentatives de suppression de ce type de contenu : %s." "La mémoire de la tablette est pleine. Supprimez des fichiers pour libérer de l\'espace." "La mémoire de la montre est saturée. Veuillez supprimer des fichiers pour libérer de l\'espace." "L\'espace de stockage du téléviseur est saturé. Pour libérer de l\'espace, veuillez supprimer des fichiers." @@ -272,40 +273,31 @@ "Passer au profil professionnel" "Contacts" "accéder à vos contacts" - - + "Permettre à <b>%1$s</b> d\'accéder à vos contacts ?" "Localisation" "accéder à la position de l\'appareil" - - + "Permettre à <b>%1$s</b> d\'accéder à la position de cet appareil ?" "Agenda" "accéder à votre agenda" - - + "Permettre à <b>%1$s</b> d\'accéder à votre agenda ?" "SMS" "envoyer et consulter des SMS" - - + "Permettre à <b>%1$s</b> d\'envoyer et d\'afficher des SMS ?" "Stockage" "accéder à des photos, à des contenus multimédias et à des fichiers sur votre appareil" - - + "Permettre à <b>%1$s</b> d\'accéder aux photos, contenus multimédias et fichiers sur votre appareil ?" "Microphone" "enregistrer des fichiers audio" - - + "Permettre à <b>%1$s</b> d\'enregistrer des contenus audio ?" "Appareil photo" "prendre des photos et enregistrer des vidéos" - - + "Permettre à <b>%1$s</b> de prendre des photos et de filmer des vidéos ?" "Téléphone" "effectuer et gérer des appels téléphoniques" - - + "Permettre à <b>%1$s</b> de passer et gérer des appels téléphoniques ?" "Capteurs corporels" "accéder aux données des capteurs relatives à vos signes vitaux" - - + "Permettre à <b>%1$s</b> d\'accéder aux données des capteurs relatives à vos signes vitaux ?" "Récupérer le contenu d\'une fenêtre" "Inspecter le contenu d\'une fenêtre avec laquelle vous interagissez" "Activer la fonctionnalité Explorer au toucher" @@ -492,6 +484,8 @@ "Permet à l\'application de communiquer avec des tags, des cartes et des lecteurs compatibles avec la technologie NFC (communication en champ proche)." "Désactiver le verrouillage de l\'écran" "Permet à l\'application de désactiver le verrouillage des touches et toute mesure de sécurité via mot de passe associée. Par exemple, votre téléphone désactive le verrouillage des touches lorsque vous recevez un appel, puis le réactive lorsque vous raccrochez." + "utiliser les composants biométriques" + "Autoriser l\'application à utiliser les composants biométriques pour l\'authentification" "Gérer le matériel d\'empreintes digitales" "Autoriser l\'application à invoquer des méthodes pour ajouter et supprimer des modèles d\'empreintes digitales" "Utiliser le matériel d\'empreintes digitales" @@ -504,6 +498,8 @@ "Non reconnu" + + "Matériel d\'empreinte numérique indisponible." "Impossible d\'enregistrer l\'empreinte numérique. Veuillez supprimer une empreinte." "Délai de détection de l\'empreinte numérique expiré. Veuillez réessayer." @@ -1016,14 +1012,23 @@ "Mode de saisie" "Actions sur le texte" "E-mail" + "Envoyer un e-mail à l\'adresse sélectionnée" "Appeler" + "Appeler le numéro de téléphone sélectionné" "Localiser" + "Localiser l\'adresse sélectionnée" "Ouvrir" + "Ouvrir l\'URL sélectionnée" "Envoyer un message" + "Envoyer un message au numéro de téléphone sélectionné" "Ajouter" + "Ajouter aux contacts" "Afficher" + "Afficher l\'heure sélectionnée dans l\'agenda" "Planifier" + "Planifier un événement à l\'heure sélectionnée" "Suivre" + "Obtenir des informations sur le vol sélectionné" "Espace de stockage bientôt saturé" "Il est possible que certaines fonctionnalités du système ne soient pas opérationnelles." "Espace de stockage insuffisant pour le système. Assurez-vous de disposer de 250 Mo d\'espace libre, puis redémarrez." @@ -1117,8 +1122,7 @@ "Ouvrir %1$s" "%1$s va se fermer sans enregistrer les données" "Le processus \"%1$s\" a dépassé la limite de mémoire" - - + "Une empreinte de la mémoire a bien été générée. Appuyez pour partager." "Partager l\'empreinte de la mémoire ?" "Le processus \"%1$s\" a dépassé sa limite de mémoire fixée à %2$s. Une empreinte de la mémoire est disponible pour que vous la communiquiez à son développeur. Attention : celle-ci peut contenir des informations personnelles auxquelles l\'application a accès." "Sélectionner une action pour le texte" @@ -1153,8 +1157,7 @@ "Se connecter pour ouvrir le réseau Wi-Fi" "Se connecter au réseau Wi-Fi de l\'opérateur" - - + "Connexion au réseau Wi-Fi" "Connecté au réseau Wi-Fi" "Impossible de se connecter au réseau Wi-Fi" "Appuyer pour afficher tous les réseaux" @@ -1270,33 +1273,49 @@ "%s se superpose aux autres applis" "Si vous ne voulez pas que l\'application %s utilise cette fonctionnalité, appuyez ici pour ouvrir les paramètres et la désactiver." "Désactiver" - "Préparation mémoire \"%s\" en cours" - "Recherche d\'erreurs" - "Une nouvelle mémoire de stockage \"%s\" a été détectée." + + + + + + + + "Pour transférer photos et fichiers" - "Mémoire de stockage \"%s\" corrompue" - "La mémoire de stockage \"%s\" est corrompue. Appuyez ici pour la réparer." - "La %s est corrompue. Sélectionnez cette option pour résoudre le problème." + + + + "%s non compatible" "Cet appareil n\'est pas compatible avec la mémoire de stockage \"%s\". Appuyez ici pour le configurer dans un format accepté." "Cet appareil n\'est pas compatible avec cette %s. Sélectionnez cette option pour la configurer dans un format accepté." "Retrait inattendu de mémoire \"%s\"" - "Désinstallez la mémoire de stockage \"%s\" avant de la retirer pour éviter toute perte de données." - "Mémoire de stockage \"%s\" retirée" - "La mémoire de stockage \"%s\" a été retirée. Insérez-en une autre." - "Éjection de la mémoire \"%s\"" - "Ne retirez pas la mémoire de stockage." + + + + + + + + + + "Configurer" "Éjecter" "Parcourir" "Mémoire de stockage \"%s\" manquante" - "Réinsérez cette mémoire." + + "Transfert de l\'application %s" "Déplacement des données en cours" - "Transfert terminé" - "Les données ont bien été transférées sur la mémoire de stockage \"%s\"" - "Impossible de transférer données" - "Les données sont restées à l\'emplacement d\'origine" + + + + + + + + "Supprimé" "Éjecté" "Vérification en cours…" @@ -1355,17 +1374,14 @@ "VPN permanent en cours de connexion…" "VPN permanent connecté" "Déconnecté du VPN permanent" - - + "Impossible de se connecter au VPN permanent" "Modifier les paramètres réseau ou VPN" "Sélectionner un fichier" "Aucun fichier sélectionné" "Réinitialiser" "Envoyer" - - - - + "L\'application de conduite est en cours d\'exécution" + "Appuyez ici pour quitter l\'application de conduite." "Partage de connexion ou point d\'accès sans fil activé" "Appuyez ici pour configurer." "Le partage de connexion est désactivé" @@ -1691,8 +1707,7 @@ "Installé par votre administrateur" "Mis à jour par votre administrateur" "Supprimé par votre administrateur" - - + "Pour prolonger l\'autonomie de la batterie, l\'économiseur de batterie réduit les performances de votre appareil et limite le vibreur, les services de localisation et la plupart des données en arrière-plan. Vous devrez peut-être ouvrir manuellement vos applications d\'e-mail, de SMS/MMS et autres applications synchronisées pour les mettre à jour.\n\nL\'économiseur de batterie s\'éteint automatiquement lorsque l\'appareil est en charge." "Pour réduire la consommation de données, l\'économiseur de données empêche certaines applications d\'envoyer ou de recevoir des données en arrière-plan. Ainsi, les applications que vous utilisez peuvent toujours accéder aux données, mais pas en permanence. Par exemple, il se peut que les images ne s\'affichent pas tant que vous n\'appuyez pas dessus." "Activer l\'économiseur de données ?" "Activer" @@ -1743,22 +1758,14 @@ "Son coupé par : %1$s" "Un problème interne lié à votre appareil est survenu. Ce dernier risque d\'être instable jusqu\'à ce que vous rétablissiez la configuration d\'usine." "Un problème interne lié à votre appareil est survenu. Veuillez contacter le fabricant pour en savoir plus." - - - - - - - - - - - - - - - - + "Requête USSD transformée en appel standard" + "Requête USSD transformée en requête SS" + "Remplacement par une nouvelle requête USSD" + "Requête USSD transformée en appel vidéo" + "Requête SS transformée en appel standard" + "Requête SS transformée en appel vidéo" + "Requête SS transformée en requête USSD" + "Remplacement par une nouvelle requête SS" "Profil professionnel" "Développer" "Réduire" @@ -1798,7 +1805,7 @@ "Appuyer pour déverrouiller" "Infos sur utilis. verrouillées" "Profil professionnel verrouillé" - "App. pour déver. profil profes." + "Appuyez pour déverrouiller profil pro" "Connecté à %1$s" "Appuyez ici pour voir les fichiers." "Épingler" @@ -1856,6 +1863,14 @@ "Carte SIM non provisionnée pour les commandes vocales" "Carte SIM non autorisée pour les commandes vocales" "Téléphone non autorisé pour les commandes vocales" + + + + + + + + "Fenêtre pop-up" "%1$d autres" "La version de l\'application est revenue à une version antérieure ou n\'est pas compatible avec cet raccourci" @@ -1876,8 +1891,6 @@ "Il s\'agit d\'un nouveau comportement. Appuyez pour modifier les paramètres." "Le mode Ne pas déranger a été modifié" "Appuyez pour vérifier les contenus bloqués." - - - - + "Système" + "Paramètres" diff --git a/core/res/res/values-gl/strings.xml b/core/res/res/values-gl/strings.xml index 2373b6c5bc9d944e6cc7cb63a8c6c0b32e4cfc04..9bbc82accc44e7e102986e951c0efc978472cdab 100644 --- a/core/res/res/values-gl/strings.xml +++ b/core/res/res/values-gl/strings.xml @@ -82,6 +82,7 @@ "Non hai servizo de chamadas de voz" "Non hai servizo de voz nin chamadas de urxencia" "O teu operador desactivou este servizo temporalmente" + "O teu operador desactivou este servizo temporalmente para a SIM %d" "Non se puido conectar coa rede de telefonía móbil" "Proba a cambiar a rede preferida. Toca para cambiar." "As chamadas de emerxencia non están dispoñibles" @@ -120,12 +121,13 @@ "Banner de itinerancia activado" "Banner de itinerancia desactivado" "Buscando servizo" - - + "Non se puideron configurar as chamadas por wifi" "Para facer chamadas e enviar mensaxes a través da wifi, primeiro solicítalle ao operador que configure este servizo. Despois, activa de novo as chamadas por wifi en Configuración. (Código de erro: %1$s)" - + + "Produciuse un problema ao rexistrar as chamadas por wifi co teu operador: %1$s" + "%s" "Chamadas wifi de %s" @@ -159,10 +161,8 @@ "Estanse a procesar demasiadas solicitudes. Téntao de novo máis tarde." "Erro de inicio de sesión en %1$s" "Sincronizar" - - - - + "Non se puido realizar a sincronización" + "Tentáronse eliminar demasiados elementos de %s." "O almacenamento da tableta está cheo. Elimina algúns ficheiros para liberar espazo." "O almacenamento do reloxo está cheo. Elimina algúns ficheiros para liberar espazo." "O almacenamento da televisión está cheo. Elimina algúns ficheiros para liberar espazo." @@ -272,40 +272,31 @@ "Cambiar ao perfil de traballo" "Contactos" "acceder aos teus contactos" - - + "Queres permitir que a aplicación <b>%1$s</b> acceda aos teus contactos?" "Localización" "acceder á localización deste dispositivo" - - + "Queres permitir que a aplicación <b>%1$s</b> acceda á localización deste dispositivo?" "Calendario" "acceder ao teu calendario" - - + "Queres permitir que a aplicación <b>%1$s</b> acceda ao teu calendario?" "SMS" "enviar e consultar mensaxes de SMS" - - + "Queres permitir que a aplicación <b>%1$s</b> envíe e vexa mensaxes SMS?" "Almacenamento" "acceder a fotos, contido multimedia e ficheiros no teu dispositivo" - - + "Queres permitir que a aplicación <b>%1$s</b> acceda a fotos, contido multimedia e ficheiros no teu dispositivo?" "Micrófono" "gravar audio" - - + "Queres permitir que a aplicación <b>%1$s</b> grave audio?" "Cámara" "tirar fotos e gravar vídeos" - - + "Queres permitir que a aplicación <b>%1$s</b> realice fotos e grave vídeos?" "Teléfono" "facer e xestionar chamadas telefónicas" - - + "Queres permitir que a aplicación <b>%1$s</b> realice e xestione chamadas telefónicas?" "Sensores corporais" "acceder aos datos do sensor sobre as túas constantes vitais" - - + "Queres permitir que a aplicación <b>%1$s</b> acceda aos datos do sensor sobre as túas constantes vitais?" "Recuperar contido da ventá" "Inspecciona o contido dunha ventá coa que estás interactuando." "Activar a exploración táctil" @@ -492,6 +483,8 @@ "Permite á aplicación comunicarse con etiquetas, tarxetas e lectores Near Field Communication (NFC)." "desactivar o bloqueo da pantalla" "Permite á aplicación desactivar o bloqueo do teclado e calquera seguranza dos contrasinais asociada. Por exemplo, o teléfono desactiva o bloqueo do teclado ao recibir unha chamada telefónica entrante e, a continuación, volve activar o bloqueo do teclado unha vez finalizada a chamada." + "utilizar hardware biométrico" + "Permite que a aplicación utilice hardware biométrico para a autenticación" "xestionar hardware de impresión dixital" "Permite que a aplicación invoque métodos para engadir e eliminar modelos de uso de impresión dixital." "usar hardware de impresión dixital" @@ -504,6 +497,7 @@ "Non se recoñece" + "Autenticouse a impresión dixital" "Hardware de impresión dixital non dispoñible." "Non se pode almacenar a impresión dixital. Elimina unha impresión dixital existente." "Esgotouse o tempo de espera da impresión dixital. Téntao de novo." @@ -1016,14 +1010,23 @@ "Método de introdución de texto" "Accións de texto" "Correo electrónico" + "Envía un correo electrónico ao enderezo seleccionado" "Chamar" + "Chama ao número de teléfono seleccionado" "Localizar" + "Localiza o enderezo seleccionado" "Abrir" + "Abre o URL seleccionado" "Mensaxe" + "Envía unha mensaxe ao número de teléfono seleccionado" "Engadir" + "Engade o elemento aos contactos" "Ver" + "Consulta a hora seleccionada no calendario" "Programar" + "Programa o evento para a hora seleccionada" "Realizar seguimento" + "Fai un seguimento do voo seleccionado" "Estase esgotando o espazo de almacenamento" "É posible que algunhas funcións do sistema non funcionen" "Non hai almacenamento suficiente para o sistema. Asegúrate de ter un espazo libre de 250 MB e reinicia o dispositivo." @@ -1117,8 +1120,7 @@ "Abrir a aplicación %1$s" "A aplicación %1$s pecharase sen gardar o contido" "%1$s superou o límite de memoria" - - + "Recompilouse un baleirado de montóns. Toca para compartilo." "Queres compartir o baleirado de montóns?" "O proceso %1$s superou o seu límite de memoria de proceso de %2$s. Tes dispoñible un baleirado de montóns para compartir co seu programador. Debes ter coidado, pois este baleirado de montóns pode conter información persoal á que ten acceso a aplicación." "Seleccionar unha acción para o texto" @@ -1153,8 +1155,7 @@ "Conéctate a unha rede wifi aberta" "Conectarse á rede wifi dun operador" - - + "Conectándose á rede wifi" "Conectouse á rede wifi" "Non se puido conectar á rede wifi" "Toca para ver todas as redes" @@ -1271,33 +1272,34 @@ "%s móstrase sobre outras aplicacións" "Se non queres que %s utilice esta función, toca para abrir a configuración e desactívaa." "Desactivar" - "Preparando a %s" - "Comprobando se hai erros" - "Detectouse unha %s nova" + "Comprobando %s…" + "Revisando contido actual" + "Nova %s" + "Toca para configurar" "Para transferir fotos e contidos multimedia" - "%s danado" - "A %s está danada. Toca para corrixir o problema." + "Produciuse un problema coa %s" + "Toca para solucionalo" "A %s está danada. Selecciona para corrixir o problema." "%s incompatible" "Este dispositivo non é compatible con esta %s. Toca para configurala nun formato compatible." "Este dispositivo non é compatible con esta %s. Selecciona para configurala nun formato compatible." "Retirouse a %s de forma inesperada" - "Desactiva a %s antes de retirala para evitar a perda de datos" - "Retirouse a %s" - "Retirouse a %s. Insire unha nova" - "Aínda expulsando a %s…" - "Non retirar" + "Para evitar perder contido, expulsa os dispositivos multimedia antes de quitalos" + "Quitouse a %s" + "É posible que algunhas características non funcionen correctamente. Insire un dispositivo de almacenamento novo." + "Expulsando a %s" + "Non quitar" "Configurar" "Expulsar" "Explorar" "Falta %s" - "Volve inserir o dispositivo" + "Volve inserir o dispositivo" "Migrando %s" "Migrando datos" - "Migración completa" - "Migráronse os datos a %s" - "Non se puideron migrar os datos" - "Quedan datos na localización orixinal" + "Rematou a migración de contido" + "Migrouse o contido á %s" + "Non se puido migrar o contido" + "Volve tentar migrar o contido" "Extraído" "Expulsado" "Comprobando..." @@ -1356,17 +1358,14 @@ "VPN sempre activada conectándose..." "VPN sempre activada conectada" "Desconectácheste da VPN sempre activada" - - + "Non se puido establecer conexión coa VPN sempre activada" "Cambia a configuración da rede ou da VPN" "Escoller un ficheiro" "Non se seleccionou ningún ficheiro" "Restablecer" "Enviar" - - - - + "Estase executando a aplicación de condución" + "Toca para saír da aplicación de condución." "Conexión compartida ou zona wifi activada" "Tocar para configurar." "A conexión compartida está desactivada" @@ -1692,8 +1691,7 @@ "Instalado polo teu administrador" "Actualizado polo teu administrador" "Eliminado polo teu administrador" - - + "Para ampliar a duración da batería, a función Aforro de batería reduce o rendemento do teu dispositivo e limita ou apaga a vibración, os servizos de localización e os datos en segundo plano. É posible que o correo electrónico, as mensaxes e outras aplicacións que dependen da sincronización non se actualicen a menos que as abras.\n\nA función Aforro de batería desactívase automaticamente cando pos a cargar o dispositivo." "Para contribuír a reducir o uso de datos, o Economizador de datos impide que algunhas aplicacións envíen ou reciban datos en segundo plano. Cando esteas utilizando unha aplicación, esta poderá acceder aos datos, pero é posible que o faga con menos frecuencia. Por exemplo, é posible que as imaxes non se mostren ata que as toques." "Queres activar o economizador de datos?" "Activar" @@ -1744,22 +1742,14 @@ "Silenciado por %1$s" "Produciuse un erro interno no teu dispositivo e quizais funcione de maneira inestable ata o restablecemento dos datos de fábrica." "Produciuse un erro interno co teu dispositivo. Contacta co teu fabricante para obter máis información." - - - - - - - - - - - - - - - - + "A solicitude USSD transformouse nunha chamada normal" + "A solicitude USSD transformouse nunha solicitude SS" + "Transformouse nunha nova solicitude USSD" + "A solicitude USSD transformouse nunha videochamada" + "A solicitude SS transformouse nunha chamada normal" + "A solicitude SS transformouse nunha videochamada" + "A solicitude SS transformouse nunha solicitude USSD" + "Transformouse nunha nova solicitude SS" "Perfil de traballo" "Despregar" "Contraer" @@ -1857,6 +1847,10 @@ "Non se introduciu ningunha tarxeta SIM para as accións de voz" "Non se permite a tarxeta SIM para as accións de voz" "Non se permite o teléfono para as accións de voz" + "Non se permite usar a SIM %d" + "Non se inseriu a SIM %d" + "Non se permite usar a SIM %d" + "Non se permite usar a SIM %d" "Ventá emerxente" "%1$d máis" "A aplicación mudou a unha versión anterior ou non é compatible con este atallo" @@ -1877,8 +1871,6 @@ "Este é un comportamento novo. Toca para cambialo." "O modo Non molestar cambiou" "Toca para comprobar o contido bloqueado." - - - - + "Sistema" + "Configuración" diff --git a/core/res/res/values-gu/strings.xml b/core/res/res/values-gu/strings.xml index 36dadd69e4ee701f17bd0215ad16e1eb5ac1b761..1ea5c5ab59011e0c2a560292cfd6c6cf43853c73 100644 --- a/core/res/res/values-gu/strings.xml +++ b/core/res/res/values-gu/strings.xml @@ -82,6 +82,8 @@ "કોઈ વૉઇસ સેવા નથી" "કોઈ વૉઇસ સેવા અથવા કટોકટીની કૉલિંગ સેવા નથી" "તમારા કૅરિઅરે હંગામી રૂપે બંધ કરી છે" + + "મોબાઇલ નેટવર્ક સુધી પહોંચી શકાતું નથી" "પસંદગીનું નેટવર્ક બદલવાનો પ્રયાસ કરો. બદલવા માટે ટૅપ કરો." "કટોકટીની કૉલિંગ સેવા અનુપલબ્ધ" @@ -120,12 +122,13 @@ "રોમિંગ બેનર ચાલુ" "રૉમિંગ બૅનર બંધ" "સેવા શોધી રહ્યું છે" - - + "વાઇ-ફાઇ કૉલિંગ સેટ કરી શકાયું નથી" "વાઇ-ફાઇ પરથી કૉલ કરવા અને સંદેશા મોકલવા માટે પહેલાં તમારા કૅરિઅરને આ સેવા સેટ કરવા માટે કહો. પછી સેટિંગ્સમાંથી વાઇ-ફાઇ કૉલિંગ ફરીથી ચાલુ કરો. (ભૂલ કોડ: %1$s)" - + + "તમારા કૅરિઅરમાં વાઇ-ફાઇ કૉલિંગ રજિસ્ટર કરવામાં સમસ્યા આવી: %1$s" + "%s" "%s વાઇ-ફાઇ કૉલિંગ" @@ -159,10 +162,8 @@ "ઘણી બધી વિનંતીઓ પર પ્રક્રિયા કરવામાં આવી રહી છે. પછીથી ફરી પ્રયાસ કરો." "%1$s માટે સાઇન ઇન ભૂલ" "સમન્વયન" - - - - + "સિંક કરી શકાતું નથી" + "ઘણા બધા %s ડિલીટ કરવાનો પ્રયાસ કર્યો." "ટેબ્લેટ સ્ટોરેજ પૂર્ણ ભરેલું છે. સ્થાન ખાલી કરવા માટે કેટલીક ફાઇલો કાઢી નાખો." "ઘડિયાળ સ્ટોરેજ પૂર્ણ ભરેલું છે. સ્થાન ખાલી કરવા માટે કેટલીક ફાઇલો કાઢી નાખો." "TV સ્ટોરેજ પૂર્ણ ભરેલું છે. સ્થાન ખાલી કરવા માટે કેટલીક ફાઇલો કાઢી નાખો." @@ -272,40 +273,31 @@ "કાર્યાલયની પ્રોફાઇલ પર સ્વિચ કરો" "સંપર્કો" "તમારા સંપર્કોને ઍક્સેસ કરવાની" - - + "<b>%1$s</b>ને તમારા સંપર્કોને ઍક્સેસ કરવાની મંજૂરી આપીએ?" "સ્થાન" "આ ઉપકરણના સ્થાનને ઍક્સેસ કરવાની" - - + "<b>%1$s</b>ને આ ઉપકરણના સ્થાનને ઍક્સેસ કરવાની મંજૂરી આપીએ?" "કૅલેન્ડર" "તમારા કેલેન્ડરને ઍક્સેસ કરવાની" - - + "<b>%1$s</b>ને તમારા કૅલેન્ડરને ઍક્સેસ કરવાની મંજૂરી આપીએ?" "SMS" "SMS સંદેશા મોકલવાની અને જોવાની" - - + "<b>%1$s</b>ને SMS સંદેશા મોકલવા અને જોવાની મંજૂરી આપીએ?" "સ્ટોરેજ" "તમારા ઉપકરણ પર ફોટો, મીડિયા અને ફાઇલો ઍક્સેસ કરવાની" - - + "<b>%1$s</b>ને તમારા ઉપકરણ પર ફોટા, મીડિયા અને ફાઇલોને ઍક્સેસ કરવાની મંજૂરી આપીએ?" "માઇક્રોફોન" "ઑડિઓ રેકોર્ડ કરવાની" - - + "<b>%1$s</b>ને ઑડિઓ રેકૉર્ડ કરવાની મંજૂરી આપીએ?" "કૅમેરો" "ચિત્રો લેવાની અને વીડિઓ રેકોર્ડ કરવાની" - - + "<b>%1$s</b>ને ચિત્રો લેવાની અને વીડિઓ રેકૉર્ડ કરવાની મંજૂરી આપીએ?" "ફોન" "ફોન કૉલ કરો અને સંચાલિત કરો" - - + "<b>%1$s</b>ને ફોન કૉલ કરવાની અને તેને મેનેજ કરવાની મંજૂરી આપીએ?" "બોડી સેન્સર્સ" "તમારા મહત્વપૂર્ણ ચિહ્નો વિશે સેન્સર ડેટા ઍક્સેસ કરો" - - + "<b>%1$s</b>ને તમારી મહત્વપૂર્ણ સહી વિશેના સેન્સર ડેટાને ઍક્સેસ કરવાની મંજૂરી આપીએ?" "વિંડો સામગ્રી પુનર્પ્રાપ્ત કરો" "તમે જેની સાથે ક્રિયાપ્રતિક્રિયા કરી રહ્યાં છો તે વિંડોની સામગ્રીની તપાસ કરો." "સ્પર્શ કરીને શોધખોળ કરવું સક્ષમ કરો" @@ -349,11 +341,11 @@ "ટેક્સ્ટ સંદેશા (WAP) પ્રાપ્ત કરો" "એપ્લિકેશનને WAP સંદેશા પ્રાપ્ત કરવાની અને તેના પર પ્રક્રિયા કરવાની મંજૂરી આપે છે. આ પરવાનગીમાં તમને દર્શાવ્યા વિના તમને મોકલેલ સંદેશાઓનું નિરીક્ષણ કરવાની અને કાઢી નાખવાની ક્ષમતાનો સમાવેશ થાય છે." "ચાલુ ઍપ્લિકેશનો પુનઃપ્રાપ્ત કરો" - "એપ્લિકેશનને વર્તમાનમાં અને તાજેતરમાં ચાલી રહેલ કાર્યો વિશેની વિગતવાર માહિતી પુનઃપ્રાપ્ત કરવાની મંજૂરી આપે છે. આ એપ્લિકેશનને ઉપકરણ પર કઈ એપ્લિકેશન્સનો ઉપયોગ થાય છે તેના વિશેની માહિતી શોધવાની મંજૂરી આપી શકે છે." + "એપ્લિકેશનને વર્તમાનમાં અને તાજેતરમાં ચાલી રહેલ Tasks વિશેની વિગતવાર માહિતી પુનઃપ્રાપ્ત કરવાની મંજૂરી આપે છે. આ એપ્લિકેશનને ઉપકરણ પર કઈ એપ્લિકેશન્સનો ઉપયોગ થાય છે તેના વિશેની માહિતી શોધવાની મંજૂરી આપી શકે છે." "પ્રોફાઇલ અને ઉપકરણ માલિકોને સંચાલિત કરો" "એપ્લિકેશન્સને પ્રોફાઇલ માલિકો અને ઉપકરણ માલિકો સેટ કરવાની મંજૂરી આપે છે." "ચાલુ એપ્લિકેશન્સને ફરી ગોઠવો" - "ઍપ્લિકેશનને અગ્રભૂમિ અને પૃષ્ટભૂમિમાં કાર્યો ખસેડવાની મંજૂરી આપે છે. તમારા ઇનપુટ વિના ઍપ્લિકેશન આ કરી શકે છે." + "ઍપ્લિકેશનને અગ્રભૂમિ અને પૃષ્ટભૂમિમાં Tasks ખસેડવાની મંજૂરી આપે છે. તમારા ઇનપુટ વિના ઍપ્લિકેશન આ કરી શકે છે." "કાર મોડ સક્ષમ કરો" "એપ્લિકેશનને કાર મોડ સક્ષમ કરવાની મંજૂરી આપે છે." "અન્ય ઍપ્લિકેશનો બંધ કરો" @@ -492,6 +484,10 @@ "ઍપ્લિકેશનને નિઅર ફીલ્ડ કમ્યુનિકેશન (NFC) ટૅગ, કાર્ડ અને રીડર સાથે સંચાર કરવાની મંજૂરી આપે છે." "તમારું સ્ક્રીન લૉક અક્ષમ કરો" "એપ્લિકેશનને કીલૉક અને કોઈપણ સંકળાયેલ પાસવર્ડ સુરક્ષા અક્ષમ કરવાની મંજૂરી આપે છે. ઉદાહરણ તરીકે, ઇનકમિંગ ફોન કૉલ પ્રાપ્ત કરતી વખતે ફોન, કીલૉકને અક્ષમ કરે છે, પછી કૉલ સમાપ્ત થઈ જવા પર કીલૉક ફરીથી સક્ષમ કરે છે." + + + + "ફિંગરપ્રિન્ટ હાર્ડવેરને સંચાલિત કરો" "એપ્લિકેશનને ઉપયોગ માટે ફિંગરપ્રિન્ટ નમૂના ઉમેરવા અને કાઢી નાખવા માટે પદ્ધતિઓની વિનંતી કરવાની મંજૂરી આપે છે." "ફિંગરપ્રિન્ટ હાર્ડવેરનો ઉપયોગ કરો" @@ -504,6 +500,8 @@ "ઓળખાયેલ નથી" + + "ફિંગરપ્રિન્ટ હાર્ડવેર ઉપલબ્ધ નથી." "ફિંગરપ્રિન્ટ સંગ્રહિત કરી શકાતી નથી. કૃપા કરીને અસ્તિત્વમાંની ફિંગરપ્રિન્ટ દૂર કરો." "ફિંગરપ્રિન્ટનો સમય બાહ્ય થયો. ફરી પ્રયાસ કરો." @@ -1016,16 +1014,34 @@ "ઇનપુટ પદ્ધતિ" "ટેક્સ્ટ ક્રિયાઓ" "ઇમેઇલ" + + "કૉલ કરો" + + "શોધો" + + "ખોલો" + + "સંદેશ મોકલો" + + "ઉમેરો" + + "જુઓ" + + "શેડ્યૂલ કરો" + + "ટ્રૅક કરો" + + "સ્ટોરેજ સ્થાન સમાપ્ત થયું" - "કેટલાક સિસ્ટમ કાર્યો કામ કરી શકશે નહીં" + "કેટલાક સિસ્ટમ Tasks કામ કરી શકશે નહીં" "સિસ્ટમ માટે પર્યાપ્ત સ્ટોરેજ નથી. ખાતરી કરો કે તમારી પાસે 250MB ખાલી સ્થાન છે અને ફરીથી પ્રારંભ કરો." "%1$s ચાલી રહી છે" "વધુ માહિતી માટે અથવા ઍપ્લિકેશન રોકવા માટે ટૅપ કરો." @@ -1117,8 +1133,7 @@ "%1$s ખોલો" "%1$s ફેરફારો સાચવ્યા વિના બંધ થશે" "%1$s એ મેમરી સીમા વટાવી" - - + "હીપ ડમ્પ એકત્રિત કરવામાં આવ્યો છે. શેર કરવા માટે ટૅપ કરો." "હીપ ડમ્પ શેર કરીએ?" "પ્રક્રિયા %1$s એ તેની %2$s ની પ્રક્રિયા મેમરી મર્યાદા ઓળંગી. તેના વિકાસકર્તા સાથે શેર કરવા તમારી માટે એક હીપ ડમ્પ ઉપલબ્ધ છે. સાવચેત રહો: આ હીપ ડમ્પમાં તમારી વ્યક્તિગત માહિતી શામેલ હોઈ શકે છે કે જેની એપ્લિકેશનને ઍક્સેસ છે." "ટેક્સ્ટ માટે ક્રિયા પસંદ કરો" @@ -1153,8 +1168,7 @@ "ખુલ્લા વાઇ-ફાઇ નેટવર્ક સાથે કનેક્ટ કરો" "કૅરિઅરના વાઇ-ફાઇ નેટવર્ક સાથે કનેક્ટ કરો" - - + "કનેક્ટ કરી રહ્યાં છીએ તે વાઇ-ફાઇ નેટવર્ક" "વાઇ-ફાઇ નેટવર્ક સાથે કનેક્ટ કર્યુ" "વાઇ-ફાઇ નેટવર્ક સાથે કનેક્ટ કરી શકાયું નથી" "બધા નેટવર્ક જોવા ટૅપ કરો" @@ -1271,33 +1285,49 @@ "%s અન્ય ઍપ્લિકેશનો પર દેખાઈ છે" "જો તમે નથી ઇચ્છતા કે %s આ સુવિધાનો ઉપયોગ કરે, તો સેટિંગ્સ ખોલવા માટે ટૅપ કરો અને તેને બંધ કરો." "બંધ કરો" - "%s ને તૈયાર કરી રહ્યું છે" - "ભૂલો માટે તપાસી રહ્યું છે" - "નવું %s મળ્યું" + + + + + + + + "ફોટો અને મીડિયા ટ્રાન્સફર કરવા માટે" - "દૂષિત %s" - "%s દૂષિત છે. ઠીક કરવા માટે ટૅપ કરો." - "%s દૂષિત છે. સુધારવા માટે પસંદ કરો." + + + + "અસમર્થિત %s" "આ ઉપકરણ આ %s નું સમર્થન કરતું નથી. સમર્થિત ફોર્મેટમાં સેટ કરવા માટે ટૅપ કરો." "આ ઉપકરણ આ %s નું સમર્થન કરતું નથી. સમર્થિત ફૉર્મેટમાં સેટ કરવા માટે પસંદ કરો." "%s અનપેક્ષિત રીતે દૂર કર્યું" - "ડેટા નુકસાનને ટાળવા માટે %s ને દૂર કરતાં પહેલાં અનમાઉન્ટ કરો." - "%s દૂર કર્યું" - "%s દૂર કર્યું; એક નવું શામેલ કરો" - "હજીએ %s ને બહાર કાઢી રહ્યાં છે…" - "દૂર કરશો નહીં" + + + + + + + + + + "સેટ કરો" "બહાર કાઢો" "અન્વેષણ કરો" "%s ખૂટે છે" - "આ ઉપકરણ ફરીથી દાખલ કરો" + + "%s ખસેડી રહ્યાં છીએ" "ડેટાને ખસેડી રહ્યાં છીએ" - "ખસેડવાનું પૂર્ણ થયું" - "ડેટાને %s પર ખસેડી રહ્યાં છીએ" - "ડેટા ખસેડી શક્યાં નથી" - "મૂળ સ્થાન પર બાકી ડેટા" + + + + + + + + "દૂર કર્યું" "બહાર કાઢ્યું" "તપાસી રહ્યું છે..." @@ -1356,17 +1386,14 @@ "હંમેશા-ચાલુ VPN કનેક્ટ થઈ રહ્યું છે…" "હંમેશા-ચાલુ VPN કનેક્ટ થયું" "હંમેશાં-ચાલુ VPN થી ડિસ્કનેક્ટ થયું" - - + "હંમેશાં-ચાલુ VPN સાથે કનેક્ટ કરી શકાયું નથી" "નેટવર્ક અથવા VPN સેટિંગ્સ બદલો" "ફાઇલ પસંદ કરો" "કોઈ ફાઇલ પસંદ કરેલી નથી" "ફરીથી સેટ કરો" "સબમિટ કરો" - - - - + "ડ્રાઇવિંગ ઍપ ચાલી રહી છે" + "ડ્રાઇવિંગ ઍપથી બહાર નીકળવા માટે ટૅપ કરો." "ટિથરિંગ અથવા હૉટસ્પૉટ સક્રિય" "સેટ કરવા માટે ટૅપ કરો." "ટિથરિંગ અક્ષમ કરેલ છે" @@ -1692,8 +1719,7 @@ "તમારા વ્યવસ્થાપક દ્વારા ઇન્સ્ટૉલ કરવામાં આવેલ છે" "તમારા વ્યવસ્થાપક દ્વારા અપડેટ કરવામાં આવેલ છે" "તમારા વ્યવસ્થાપક દ્વારા કાઢી નાખવામાં આવેલ છે" - - + "બૅટરીની આવરદા વધારવામાં સહાય કરવા માટે, બૅટરી સેવર તમારા ઉપકરણના કાર્યપ્રદર્શનને ઘટાડે છે અને વાઇબ્રેશન, સ્થાન સેવાઓ અને બૅકગ્રાઉન્ડ ડેટાને સીમિત કરે છે અથવા બંધ કરે છે. ઇમેઇલ, મેસેજિંગ અને અન્ય ઍપ જે સિંક થવા પર આધાર રાખે છે, તેઓ કદાચ તમે ખોલો નહીં ત્યાં સુધી અપડેટ થશે નહીં.\n\nજ્યારે તમારું ઉપકરણ ચાર્જ થઈ રહ્યું હોય ત્યારે બૅટરી સેવર આપમેળે બંધ થઈ જતું હોય છે." "ડેટા વપરાશને ઘટાડવામાં સહાય માટે, ડેટા સેવર કેટલીક ઍપ્લિકેશનોને પૃષ્ઠભૂમિમાં ડેટા મોકલવા અથવા પ્રાપ્ત કરવાથી અટકાવે છે. તમે હાલમાં ઉપયોગ કરી રહ્યાં છો તે ઍપ્લિકેશન ડેટાને ઍક્સેસ કરી શકે છે, પરંતુ તે આ ક્યારેક જ કરી શકે છે. આનો અર્થ એ હોઈ શકે છે, ઉદાહરણ તરીકે, છબીઓ ત્યાં સુધી પ્રદર્શિત થશે નહીં જ્યાં સુધી તમે તેને ટૅપ નહીં કરો." "ડેટા સેવર ચાલુ કરીએ?" "ચાલુ કરો" @@ -1744,22 +1770,14 @@ "%1$s દ્વારા મ્યૂટ કરાયું" "તમારા ઉપકરણમાં આંતરિક સમસ્યા છે અને જ્યાં સુધી તમે ફેક્ટરી ડેટા ફરીથી સેટ કરશો નહીં ત્યાં સુધી તે અસ્થિર રહી શકે છે." "તમારા ઉપકરણમાં આંતરિક સમસ્યા છે. વિગતો માટે તમારા નિર્માતાનો સંપર્ક કરો." - - - - - - - - - - - - - - - - + "USSD વિનંતીને નિયમિત કૉલમાં બદલવામાં આવી છે" + "USSD વિનંતીને SS વિનંતીમાં બદલવામાં આવી છે" + "નવી USSD વિનંતીમાં બદલવામાં આવી છે" + "USSD વિનંતીને વીડિઓ કૉલમાં બદલવામાં આવી છે" + "SS વિનંતીને નિયમિત કૉલમાં બદલવામાં આવી છે" + "SS વિનંતીને વીડિઓ કૉલમાં બદલવામાં આવી છે" + "SS વિનંતીને USSD વિનંતીમાં બદલવામાં આવી છે" + "નવી SS વિનંતીમાં બદલવામાં આવી છે" "કાર્યાલયની પ્રોફાઇલ" "વિસ્તૃત કરો" "સંકુચિત કરો" @@ -1857,6 +1875,14 @@ "આ સિમમાં વૉઇસ માટે કોઈ જોગવાઈ નથી" "વૉઇસ માટે આ સિમને મંજૂરી નથી" "વૉઇસ માટે આ ફોનને મંજૂરી નથી" + + + + + + + + "પૉપઅપ વિંડો" "+ %1$d" "આ ઍપનું વર્ઝન ડાઉનગ્રેડ કરવામાં આવ્યું છે અથવા આ શૉર્ટકટ સાથે સુસંગત નથી" @@ -1877,8 +1903,6 @@ "આ નવી વર્તણૂક છે. બદલવા માટે ટૅપ કરો." "ખલેલ પાડશો નહીંમાં ફેરફાર થયો છે" "શું બ્લૉક કરેલ છે તે તપાસવા માટે ટૅપ કરો." - - - - + "સિસ્ટમ" + "સેટિંગ" diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 57f841b4a822f19b9ba27f8e682e165bc53caf01..3b4f26a186f9970af8202fbcd07aaf9f482ef7ec 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -82,10 +82,12 @@ "कोई वॉइस सेवा नहीं है" "सामान्य (वॉइस) कॉल या आपातकालीन कॉल पर रोक लगा दी गई है" "आपकी मोबाइल और इंटरनेट सेवा देने वाली कंपनी ने सेवा पर कुछ समय के लिए रोक लगा दी है" + + "मोबाइल नेटवर्क से कनेक्ट नहीं किया जा सका" "पसंदीदा नेटवर्क बदलकर देखें. बदलने के लिए टैप करें." "आपातकालीन कॉल करने की सुविधा उपलब्ध नहीं है" - "वाई-फ़ाई नेटवर्क पर आपातकालीन कॉल नहीं की जा सकती" + "वाई-फ़ाई के ज़रिए आपातकालीन कॉल नहीं किया जा सकता" "सूचनाएं" "कॉल को दूसरे नंबर पर भेजना" "आपातकालीन कॉलबैक मोड" @@ -120,12 +122,13 @@ "रोमिंग बैनर चालू" "रोमिंग बैनर बंद" "नेटवर्क खोज रहा है" - - + "वाई-फ़ाई कॉलिंग की सुविधा सेट नहीं की जा सकी" "वाई-फ़ाई से फ़ोन करने और मैसेज भेजने के लिए, सबसे पहले अपनी मोबाइल और इंटरनेट सेवा देने वाली कंपनी से इस सेवा को सेट अप करने के लिए कहें. उसके बाद सेटिंग से वाई-फ़ाई कॉलिंग को फिर से चालू करें. (गड़बड़ी कोड: %1$s)" - + + "वाई-फ़ाई कॉलिंग की सुविधा के लिए आपकी मोबाइल और इंटरनेट सेवा देने वाली कंपनी के साथ रजिस्टर करने से जुड़ी समस्या: %1$s" + "%s" "%s वाई-फ़ाई कॉलिंग" @@ -159,10 +162,8 @@ "बहुत सारे अनुरोधों का संसाधन हो रहा है. बाद में पुन: प्रयास करें." "%1$s के लिए प्रवेश गड़बड़ी" "समन्वयन" - - - - + "सिंक नहीं किया जा सकता" + "बहुत ज़्यादा %s मिटाने की कोशिश की गई." "टैबलेट की मेमोरी भर गई है. जगह खाली करने के लिए कुछ फ़ाइलें मिटाएं." "घड़ी की मेमोरी भर गई है. स्‍थान खाली करने के लिए कुछ फ़ाइलें मिटाएं." "टीवी की मेमोरी भर गई है. जगह खाली करने के लिए कुछ फ़ाइलें मिटाएं." @@ -272,40 +273,31 @@ "प्रोफ़ाइल बदलकर कार्य प्रोफ़ाइल पर जाएं" "संपर्क" "अपने संपर्कों को ऐक्सेस करने की" - - + "<b>%1$s</b> को अपने संपर्क देखने की अनुमति देना चाहते हैं?" "जगह" "इस डिवाइस की जगह तक पहुंचने दें" - - + "<b>%1$s</b> को इस डिवाइस की जगह की जानकारी देखने की अनुमति देना चाहते हैं?" "कैलेंडर" "अपने कैलेंडर को ऐक्सेस करने" - - + "<b>%1$s</b> को अपना कैलेंडर देखने की अनुमति देना चाहते हैं?" "मैसेज (एसएमएस)" "मैसेज (एसएमएस) भेजें और देखें" - - + "<b>%1$s</b> को एसएमएस (मैसेज) भेजने और देखने की अनुमति देना चाहते हैं?" "मेमोरी" "अपने डिवाइस पर मौजूद फ़ोटो, मीडिया और फ़ाइलें ऐक्सेस करने की" - - + "<b>%1$s</b> को अपने डिवाइस पर मौजूद फ़ोटो, मीडिया और फ़ाइलें देखने की अनुमति देना चाहते हैं?" "माइक्रोफ़ोन" "ऑडियो रिकॉर्ड करें" - - + "<b>%1$s</b> को ऑडियो रिकॉर्ड करने की अनुमति देना चाहते हैं?" "कैमरा" "चित्र लेने और वीडियो रिकॉर्ड करने" - - + "<b>%1$s</b> को फ़ोटो खींचने और वीडियो रिकॉर्ड करने की अनुमति देना चाहते हैं?" "फ़ोन" "फ़ोन कॉल करें और प्रबंधित करें" - - + "<b>%1$s</b> को फ़ोन कॉल करने और उन्हें प्रबंधित करने की अनुमति देना चाहते हैं?" "शरीर संवेदक" "अपने महत्वपूर्ण संकेतों के बारे में सेंसर डेटा को ऐक्सेस करें" - - + "<b>%1$s</b> को अपने स्वास्थ्य से जुड़ी ज़रूरी जानकारी इस्तेमाल करने की अनुमति देना चाहते हैं?" "विंडो सामग्री प्राप्त करें" "उस विंडो की सामग्री का निरीक्षण करें जिससे आप सहभागिता कर रहे हैं." "छूकर, उससे जुड़ी जानकारी सुनने की सुविधा चालू करें" @@ -492,6 +484,10 @@ "ऐप्स को नियर फ़ील्ड कम्यूनिकेशन (NFC) टैग, कार्ड, और रीडर के साथ संचार करने देता है." "अपना स्‍क्रीन लॉक अक्षम करें" "ऐप्स को कीलॉक और कोई भी संबद्ध पासवर्ड सुरक्षा अक्षम करने देता है. उदाहरण के लिए, इनकमिंग फ़ोन कॉल प्राप्त करते समय फ़ोन, कीलॉक को अक्षम कर देता है, फिर कॉल समाप्त होने पर कीलॉक को पुन: सक्षम कर देता है." + + + + "उंगली की छाप के लिए हार्डवेयर को प्रबंधित करें" "उंगली की छाप वाले टेम्पलेट का उपयोग करने के लिए जोड़ने और हटाने हेतु ऐप को विधियां प्रारंभ करने देती है." "उंगली की छाप के लिए हार्डवेयर का उपयोग करें" @@ -504,6 +500,8 @@ "पहचाना नहीं गया" + + "फ़िंगरप्रिंट हार्डवेयर उपलब्ध नहीं है." "फ़िंगरप्रिंट को संग्रहित नहीं किया जा सका. कृपया कोई मौजूदा फ़िंगरप्रिंट निकालें." "फ़िंगरप्रिंट का समय समाप्त हो गया. पुनः प्रयास करें." @@ -1016,14 +1014,32 @@ "इनपुट विधि" "लेख क्रियाएं" "ईमेल करें" + + "कॉल करें" + + "पता लगाएं" + + "खोलें" + + "मैसेज" + + "जोड़ें" + + "देखें" + + "शेड्यूल करें" + + "मौजूदा स्थिति जानें" + + "मेमोरी में जगह नहीं बची है" "हो सकता है कुछ सिस्टम फ़ंक्शन कार्य न करें" "सिस्टम के लिए ज़रूरी मेमोरी नहीं है. पक्का करें कि आपके पास 250एमबी की खाली जगह है और फिर से शुरू करें." @@ -1117,8 +1133,7 @@ "%1$s खोलें" "%1$s बिना सेव किए बंद हो जाएगा" "%1$s मेमोरी सीमा को पार कर गई है" - - + "हीप डंप (Java™ प्रोसेस मेमोरी का स्नैपशॉट) ले लिया गया है. शेयर करने के लिए टैप करें." "हीप डंप शेयर करें?" "यह प्रक्रिया %1$s इसकी %2$s की मेमोरी की सीमा को पार कर गई है. एक हीप डंप मौजूद है जिसे आप इसके डेवलपर से शेयर कर सकते हैं. सावधान रहें: इस हीप डंप में आपकी ऐसी कोई भी निजी जानकारी हो सकती है जिस पर ऐप्लिकेशन की पहुंच हो." "मैसेज करने के लिए कोई कार्रवाई चुनें" @@ -1153,8 +1168,7 @@ "खुले वाई-फ़ाई नेटवर्क से कनेक्ट करें" "मोबाइल और इंटरनेट सेवा देने वाली कंपनी के वाई-फ़ाई नेटवर्क से कनेक्ट करें" - - + "वाई-फ़ाई नेटवर्क से जोड़ा जा रहा है" "वाई-फ़ाई नेटवर्क से कनेक्‍ट हो गया है" "वाई-फ़ाई नेटवर्क से कनेक्‍ट नहीं हो सका" "सभी नेटवर्क देखने के लिए यहां पर टैप करें" @@ -1270,33 +1284,49 @@ "%s अन्य ऐप पर दिखाई दे रहा है" "अगर आप नहीं चाहते कि %s इस सुविधा का उपयोग करे, तो सेटिंग खोलने और उसे बंद करने के लिए टैप करें." "बंद करें" - "%s को तैयार किया जा रहा है" - "त्रुटियों की जाँच कर रहा है" - "नए %s का पता लगा" + + + + + + + + "फ़ोटो और मीडिया ट्रांसफर करने के लिए" - "दूषित %s" - "%s दूषित है. ठीक करने के लिए टैप करें." - "%s काम नहीं कर रहा है. ठीक करने के लिए चुनें." + + + + "असमर्थित %s" "यह डिवाइस इस %s का समर्थन नहीं करता है. समर्थित प्रारूप में सेट करने के लिए टैप करें." "इस डिवाइस पर %s काम नहीं करता है. काम करने वाले प्रारूप में सेट अप करने के लिए चुनें." "%s अप्रत्याशित रूप से निकाला गया" - "डेटा हानि से बचने के लिए %s को निकालने से पहले अनमाउंट करें" - "%s निकाल दिया गया" - "%s निकाल दिया गया है; नया डालें" - "%s अभी भी निकाला जा रहा है…" - "निकालें नहीं" + + + + + + + + + + "सेट करें" "निकालें" "एक्सप्लोर करें" "%s गुम है" - "इस डिवाइस को पुन: लगाएं" + + "%s को ले जाया जा रहा है" "डेटा ले जाया जा रहा है" - "ले जाना पूर्ण हुआ" - "डेटा को %s पर ले जाया गया" - "डेटा नहीं ले जाया जा सका" - "डेटा शुरुआती जगह पर छूट गया है" + + + + + + + + "निकाल दिया गया" "निकाला गया" "जाँच की जा रही है..." @@ -1355,17 +1385,14 @@ "हमेशा-चालू VPN कनेक्ट हो रहा है…" "हमेशा-चालू VPN कनेक्ट है" "हमेशा चालू रहने वाले VPN से डिसकनेक्ट किया गया" - - + "हमेशा चालू रहने वाले वीपीएन से नहीं जुड़ पाया" "नेटवर्क या VPN सेटिंग बदलें" "फ़ाइल चुनें" "कोई फ़ाइल चुनी नहीं गई" "रीसेट करें" "सबमिट करें" - - - - + "ड्राइविंग ऐप्लिकेशन चल रहा है" + "ड्राइविंग ऐप्लिकेशन से निकलने के लिए टैप करें." "टेदरिंग या हॉटस्‍पॉट सक्रिय" "सेट करने के लिए टैप करें." "टेदरिंग अक्षम है" @@ -1691,8 +1718,7 @@ "आपके व्यवस्थापक ने इंस्टॉल किया है" "आपके व्यवस्थापक ने अपडेट किया है" "आपके व्यवस्थापक ने हटा दिया है" - - + "बैटरी लाइफ़ बढ़ाने के लिए, बैटरी सेवर आपके डिवाइस पर सिर्फ़ ज़रूरी ऐप्लिकेशन को काम करने देता है. इस सुविधा के चालू होने पर, वाइब्रेशन, जगह की जानकारी से जुड़ी सेवाओं और बैकग्राउंड डेटा का इस्तेमाल या तो बहुत कम हो जाता है या पूरी तरह से बंद हो जाता है. आपके डिवाइस पर ईमेल, मैसेज और ऐसे दूसरे ऐप्लिकेशन मौजूद होते हैं, जिनमें डेटा सिंक होता है. बैटरी सेवर चालू होने पर इन ऐप्लिकेशन में नए ईमेल, मैसेज और दूसरी जानकारी तब तक नहीं जुड़ेगी, जब तक आप इन्हें नहीं खोलेंगे.\n\nजब आपका डिवाइस चार्ज हो रहा होता है, तब बैटरी सेवर की सुविधा अपने आप बंद हो जाती है." "डेटा खर्च, कम करने के लिए डेटा सेवर कुछ ऐप को बैकग्राउंड में डेटा भेजने या पाने से रोकता है. आप फ़िलहाल जिस एेप का इस्तेमाल कर रहे हैं वह डेटा तक पहुंच सकता है, लेकिन ऐसा कभी-कभी ही हो पाएगा. उदाहरण के लिए, इसे समझिये कि तस्वीर तब तक दिखाई नहीं देंगी जब तक कि आप उन्हें टैप नहीं करते." "डेटा बचाने की सेटिंग चालू करें?" "चालू करें" @@ -1743,22 +1769,14 @@ "%1$s द्वारा म्यूट किया गया" "आपके डिवाइस में कोई अंदरूनी समस्या है और यह तब तक ठीक नहीं होगी जब तक आप फ़ैक्‍टरी डेटा रीसेट नहीं करते." "आपके डिवाइस के साथ कोई आंतरिक गड़बड़ी हुई. विवरणों के लिए अपने निर्माता से संपर्क करें." - - - - - - - - - - - - - - - - + "यूएसएसडी कोड चलाने के अनुरोध को सामान्य कॉल में बदला गया" + "यूएसएसडी कोड चलाने के अनुरोध को एसएस कोड चलाने के अनुरोध में बदला गया" + "यूएसएसडी कोड चलाने के नए अनुरोध में बदला गया" + "यूएसएसडी कोड चलाने के अनुरोध को वीडियो कॉल में बदला गया" + "एसएस कोड चलाने के अनुरोध को सामान्य कॉल में बदला गया" + "एसएस कोड चलाने के अनुरोध को वीडियो कॉल में बदला गया" + "एसएस कोड चलाने के अनुरोध को यूएसएसडी कोड चलाने के अनुरोध में बदला गया" + "एसएस कोड चलाने के नए अनुरोध में बदला गया" "कार्य प्रोफ़ाइल" "विस्तार करें" "छोटा करें" @@ -1856,6 +1874,14 @@ "सिम से कॉल करने की इजाज़त नहीं है" "सिम से कॉल करने की इजाज़त नहीं है" "फ़ोन से कॉल करने की इजाज़त नहीं है" + + + + + + + + "पॉपअप विंडो" "+ %1$d" "ऐप्लिकेशन का वर्शन पुराना हो चुका है या यह इस शॉर्टकट के साथ काम नहीं करता" @@ -1876,8 +1902,6 @@ "यह नई सुविधा है. बदलने के लिए टैप करें." "परेशान न करें की सुविधा बदल गई है" "टैप करके देखें कि किन चीज़ों पर रोक लगाई गई है." - - - - + "सिस्टम" + "सेटिंग" diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index 22affdb71ba695b323c577a3e97b49536f0aeb6d..e8cdfdecf0cbd63ed9f187d7e898dd29347b01c7 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -83,6 +83,7 @@ "Nema glasovnih usluga" "Nema glasovne usluge ni hitnih poziva" "Privremeno isključio vaš mobilni operater" + "Uslugu je privremeno isključio mobilni operater za SIM %d" "Mobilna mreža nije dostupna" "Pokušajte promijeniti preferiranu mrežu. Dodirnite da biste je promijenili." "Hitni pozivi nisu dostupni" @@ -121,12 +122,13 @@ "Uključen je natpis roaminga" "Isključen je natpis roaminga" "Pretraživanje usluge" - - + "Postavljanje Wi‑Fi poziva nije uspjelo" "Da biste telefonirali i slali poruke putem Wi-Fi-ja, od mobilnog operatera morate tražiti da postavi tu uslugu. Zatim ponovo uključite Wi-Fi pozive u postavkama. (Kôd pogreške: %1$s)" - + + "Poteškoća s registracijom Wi‑Fi poziva kod mobilnog operatera: %1$s" + "%s" "%s Wi-Fi pozivanje" @@ -160,10 +162,8 @@ "U obradi je previše zahtjeva. Pokušajte ponovo kasnije." "Pogreška prijave za račun %1$s" "Sinkronizacija" - - - - + "Sinkronizacija nije moguća" + "Pokušalo se izbrisati previše sadržaja (%s)." "Prostor za pohranu tabletnog računala pun je. Izbrišite nekoliko datoteka kako biste oslobodili prostor." "Memorija sata je puna. Izbrišite neke datoteke da biste oslobodili prostor." "Prostor za pohranu na televizoru je pun. Izbrišite neke datoteke da biste oslobodili prostor." @@ -275,40 +275,31 @@ "Prijeđite na radni profil" "Kontakti" "pristupati vašim kontaktima" - - + "Želite li dopustiti aplikaciji <b>%1$s</b> da pristupa vašim kontaktima?" "Lokacija" "pristupiti lokaciji ovog uređaja" - - + "Želite li dopustiti aplikaciji <b>%1$s</b> da pristupa lokaciji ovog uređaja?" "Kalendar" "pristupati kalendaru" - - + "Želite li dopustiti aplikaciji <b>%1$s</b> da pristupa vašem kalendaru?" "SMS" "slati i pregledavati SMS poruke" - - + "Želite li dopustiti aplikaciji <b>%1$s</b> da šalje i pregledava SMS poruke?" "Prostor za pohranu" "pristupiti fotografijama, medijima i datotekama na vašem uređaju" - - + "Želite li dopustiti aplikaciji <b>%1$s</b> da pristupa fotografijama, medijima i datotekama na vašem uređaju?" "Mikrofon" "snimati zvuk" - - + "Želite li dopustiti aplikaciji <b>%1$s</b> da snima audiozapise?" "Fotoaparat" "snimati fotografije i videozapise" - - + "Želite li dopustiti aplikaciji <b>%1$s</b> da snima fotografije i videozapise?" "Telefon" "uspostavljati telefonske pozive i upravljati njima" - - + "Želite li dopustiti aplikaciji <b>%1$s</b> da upućuje telefonske pozive i upravlja njima?" "Biometrijski senzori" "pristupiti podacima senzora o vašim vitalnim znakovima" - - + "Želite li dopustiti aplikaciji <b>%1$s</b> da pristupa podacima senzora o vašim vitalnim znakovima?" "Dohvaćati sadržaj prozora" "Pregledat će sadržaj prozora koji upotrebljavate." "Uključiti značajku Istraži dodirom" @@ -495,6 +486,8 @@ "Aplikaciji omogućuje komunikaciju s oznakama, karticama i čitačima komunikacije kratkog dometa (NFC)." "onemogućavanje zaključavanja zaslona" "Aplikaciji omogućuje onemogućavanje zaključavanja tipkovnice i svih pripadajućih sigurnosnih zaporki. Na primjer, telefon onemogućuje zaključavanje tipkovnice kod primanja dolaznog telefonskog poziva, nakon kojeg se zaključavanje tipkovnice ponovo omogućuje." + "koristiti biometrijski hardver" + "Aplikaciji omogućuje upotrebu biometrijskog hardvera radi autentifikacije" "upravljanje hardverom za čitanje otisaka prstiju" "Aplikaciji omogućuje pozivanje načina za dodavanje i brisanje predložaka otisaka prstiju koji će se upotrijebiti." "upotreba hardvera za čitanje otisaka prstiju" @@ -507,6 +500,7 @@ "Nije prepoznat" + "Autentificirano otiskom prsta" "Hardver za otisak prsta nije dostupan." "Otisak prsta nije pohranjen. Uklonite postojeći otisak prsta." "Isteklo je vrijeme čekanja za otisak prsta. Pokušajte ponovo." @@ -1036,14 +1030,23 @@ "Način unosa" "Radnje s tekstom" "E-pošta" + "Slanje e-poruke na odabranu adresu" "Poziv" + "Pozivanje odabranog telefonskog broja" "Lociraj" + "Prikaz odabrane adrese na karti" "Otvori" + "Otvaranje odabranog URL-a" "Poruka" + "Slanje poruke na odabrani telefonski broj" "Dodaj" + "Dodavanje u kontakte" "Prikaži" + "Prikaz odabranog vremena u kalendaru" "Raspored" + "Zakazivanje događaja za određeno vrijeme" "Prati" + "Praćenje odabranog leta" "Ponestaje prostora za pohranu" "Neke sistemske funkcije možda neće raditi" "Nema dovoljno pohrane za sustav. Oslobodite 250 MB prostora i pokrenite uređaj ponovo." @@ -1137,8 +1140,7 @@ "Otvori aplikaciju %1$s" "Aplikacija %1$s zatvorit će se bez spremanja" "Proces %1$s premašio je ograničenje memorije" - - + "Generirana je snimka memorije. Dodirnite za dijeljenje." "Žalite li dijeliti snimku memorije procesa?" "Proces %1$s premašio je ograničenje memorije od %2$s. Dostupna vam je snimka memorije procesa koju možete podijeliti s razvojnim programerom. Budite oprezni: ta snimka memorije može sadržavati vaše osobne podatke kojoj aplikacija ima pristup." "Izaberite radnju za tekst" @@ -1175,8 +1177,7 @@ "Povezivanje s otvorenom Wi‑Fi mrežom" "Povežite se s Wi‑Fi mrežom mobilnog operatera" - - + "Povezivanje s Wi-Fi mrežom" "Povezano s Wi-Fi mrežom" "Nije uspjelo povezivanje s Wi-Fi mrežom" "Dodirnite za prikaz svih mreža" @@ -1292,33 +1293,34 @@ "Apl. %s zakriva druge aplikacije" "Ako ne želite da aplikacija %s upotrebljava tu značajku, dodirnite da biste otvorili postavke i isključili je." "Isključi" - "Priprema uređaja %s" - "Traženje pogrešaka" - "Otkriven je novi uređaj %s" + "Provjeravanje medija %s…" + "Pregled trenutačnog sadržaja" + "Novi medij %s" + "Dodirnite za postavljanje" "Za prijenos fotografija i medija" - "Oštećeni medij za pohranu %s" - "%s ima pogrešku. Dodirnite da biste je ispravili." + "Poteškoća s medijem %s" + "Dodirnite za popravak" "Medij je oštećen (%s). Odaberite da biste ispravili pogrešku." "Nepodržani medij za pohranu %s" "Uređaj ne podržava ovaj medij (%s). Dodirnite da biste ga postavili u podržanom formatu." "Ovaj uređaj ne podržava taj medij (%s). Odaberite da biste postavili u podržanom formatu." "Uređaj %s iznenada je uklonjen" - "Isključite uređaj %s prije uklanjanja da ne biste izgubili podatke" - "Uklonjen je uređaj %s" - "Uklonjen je uređaj %s; umetnite novi" - "I dalje se izbacuje %s…" - "Ne uklanjajte" + "Izbacite medij prije uklanjanja kako ne biste izgubili sadržaj" + "Medij %s uklonjen je" + "Neke funkcije možda neće pravilno raditi. Umetnite novi medij za pohranu." + "Izbacivanje medija %s…" + "Ne uklanjajte" "Postavljanje" "Izbaci" "Istraži" "%s nedostaje" - "Ponovo umetnite uređaj" + "Ponovo umetnite uređaj" "Premještanje aplikacije %s" "Premještanje podataka" - "Premještanje dovršeno" - "Podaci su premješteni u pohranu %s" - "Podaci nisu premješteni" - "Podaci su ostali na izvornoj lokaciji" + "Dovršen je prijenos sadržaja" + "Sadržaj je premješten na medij %s" + "Sadržaj nije premješten" + "Pokušajte ponovo premjestiti sadržaj" "Uklonjen" "Izbačen" "Provjeravanje…" @@ -1377,17 +1379,14 @@ "Povezivanje s uvijek uključenom VPN mrežom…" "Povezan s uvijek uključenom VPN mrežom" "Prekinuta je veza s uvijek uključenim VPN-om" - - + "Povezivanje s uvijek uključenim VPN-om nije bilo moguće" "Promijenite mrežu ili postavke VPN-a" "Odaberite datoteku" "Nema odabranih datoteka" "Ponovo postavi" "Pošalji" - - - - + "Pokrenuta je aplikacija za vožnju" + "Dodirnite za zatvaranje aplikacije za vožnju." "Ograničenje ili aktivan hotspot" "Dodirnite da biste postavili." "Modemsko je povezivanje onemogućeno" @@ -1882,6 +1881,10 @@ "SIM nije omogućen za glasovne pozive" "SIM nije dopušten za glasovne pozive" "Telefon nije dopušten za glasovne pozive" + "SIM %d nije dopušten" + "SIM %d nije pružen" + "SIM %d nije dopušten" + "SIM %d nije dopušten" "Skočni prozor" "još %1$d" "Aplikacija je vraćena na stariju verziju ili verzija nije kompatibilna s ovim prečacem" @@ -1902,8 +1905,6 @@ "Ovo je novo ponašanje. Dodirnite da biste ga promijenili." "Promijenjena je postavka Ne uznemiravaj" "Dodirnite da biste provjerili što je blokirano." - - - - + "Sustav" + "Postavke" diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index 8c19e3fcbdbfb0ab577bd51b05f7d711e2a8a8e5..b140c80f9c86720c4eca59dbeba3cb053e4832b6 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -82,6 +82,8 @@ "Hangszolgáltatás letiltva" "Nincs hanghívás vagy segélyhívás" "A szolgáltató ideiglenesen kikapcsolta" + + "A mobilhálózat nem érhető el" "Próbálja meg módosítani a preferált hálózatot. Koppintson a módosításhoz." "Segélyhívás nem lehetséges" @@ -120,12 +122,13 @@ "Barangolást jelző szalaghirdetés bekapcsolva" "Barangolást jelző szalaghirdetés kikapcsolva" "Szolgáltatás keresése" - - + "Nem sikerült a Wi‑Fi-hívás beállítása" "Ha Wi-Fi-hálózaton szeretne telefonálni és üzenetet küldeni, kérje meg szolgáltatóját, hogy állítsa be ezt a szolgáltatást. Ezután kapcsolja be újra a Wi-Fi-hívást a Beállításokban. (Hibakód: %1$s)" - + + "Hiba történt a Wi‑Fi-hívás szolgáltatónál való regisztrálása során: %1$s" + "%s" "%s Wi-Fi-hívás" @@ -481,6 +484,8 @@ "Lehetővé teszi az alkalmazás számára, hogy NFC (Near Field Communication - kis hatósugarú vezeték nélküli kommunikáció) technológiát használó címkékkel, kártyákkal és leolvasókkal kommunikáljon." "képernyőzár kikapcsolása" "Lehetővé teszi az alkalmazás számára a billentyűzár és bármely kapcsolódó jelszavas védelem kikapcsolását. Például a telefon feloldja a billentyűzárat bejövő hívás esetén, majd újra bekapcsolja azt a hívás végeztével." + "biometrikus hardver használata" + "Lehetővé teszi az alkalmazás számára a biometrikus hardver hitelesítésre való használatát" "ujjlenyomat-olvasó hardver kezelése" "Lehetővé teszi az alkalmazás számára a használni kívánt ujjlenyomatsablonok hozzáadására és törlésére szolgáló metódusok indítását." "ujjlenyomat-olvasó hardver használata" @@ -493,6 +498,8 @@ "Nem sikerült felismerni" + + "Az ujjlenyomathoz szükséges hardver nem érhető el." "Az ujjlenyomat nem tárolható. Távolítson el egy meglévő ujjlenyomatot." "Az ujjlenyomat-beolvasási műveletkor időtúllépés történt. Próbálkozzon újra." @@ -1005,14 +1012,23 @@ "Beviteli mód" "Műveletek szöveggel" "E-mail" + "Kiválasztott cím elküldése e-mailben" "Hívás" + "Kiválasztott telefonszám hívása" "Helymeghatározás" + "Kiválasztott cím megkeresése a térképen" "Megnyitás" + "Kiválasztott URL megnyitása" "Üzenet" + "Üzenet küldése a kijelölt telefonszámra" "Hozzáadás" + "Hozzáadás a névjegyekhez" "Megtekintés" + "Kijelölt idő megtekintése a naptárban" "Ütemezés" + "Esemény ütemezése a kiválasztott időpontra" "Nyomon követés" + "Kiválasztott járat nyomon követése" "Kevés a szabad terület" "Előfordulhat, hogy néhány rendszerfunkció nem működik." "Nincs elegendő tárhely a rendszerhez. Győződjön meg arról, hogy rendelkezik 250 MB szabad területtel, majd kezdje elölről." @@ -1141,8 +1157,7 @@ "Nyílt Wi-Fi-hálózathoz kapcsolódhat" "Csatlakozás szolgáltatói Wi‑Fi-hálózatra" - - + "Csatlakozás Wi-Fi hálózathoz…" "Sikeres kapcsolódás a Wi-Fi-hálózathoz" "Nem sikerült kapcsolódni a Wi‑Fi-hálózathoz" "Koppintással megjelenítheti az összes hálózatot" @@ -1258,33 +1273,49 @@ "%s – a többi alkalmazás felett" "Ha nem szeretné, hogy a(z) %s használja ezt a funkciót, koppintson a beállítások megnyitásához, és kapcsolja ki." "Kikapcsolás" - "%s előkészítése" - "Hibák keresése" - "Új %s észlelve" + + + + + + + + "Fotók és más tartalmak átviteléhez" - "Sérült %s" - "A(z) %s sérült. Koppintson rá a javításhoz." - "A(z) %s sérült. Válassza ki a javításhoz." + + + + "Nem támogatott %s" "Ez az eszköz nem támogatja ezt a(z) %s eszközt. Koppintson rá a támogatott formátumban való beállításhoz." "Ez az eszköz nem támogatja a(z) %s nevű alkalmazást. Válassza ki a támogatott formátumú beállításhoz." "A(z) %s váratlanul eltávolítva" - "Az adatvesztés elkerülése érdekében kezdje a(z) %s leválasztásával, mielőtt eltávolítaná azt" - "%s eltávolítva" - "A(z) %s el lett távolítva; helyezzen be egy másikat" - "A(z) %s kiadása még folyamatban van…" - "Ne távolítsa el" + + + + + + + + + + "Beállítás" "Kiadás" "Tallózás" "A(z) %s nem található" - "Helyezze be újra az eszközt" + + "%s áthelyezése" "Az áthelyezés folyamatban van" - "Az áthelyezés befejeződött" - "Adatok áthelyezve ide: %s" - "Sikertelen az adatok áthelyezése" - "Maradtak adatok az eredeti helyen" + + + + + + + + "Eltávolítva" "Kiadva" "Ellenőrzés…" @@ -1676,8 +1707,7 @@ "A rendszergazda által telepítve" "A rendszergazda által frissítve" "A rendszergazda által törölve" - - + "Az akkumulátor üzemidejének növelése érdekében az Akkumulátorkímélő mód csökkenti az eszköz teljesítményét, és korlátozza vagy kikapcsolja a rezgést, a helyszolgáltatásokat, valamint a háttéradatokat. Előfordulhat, hogy azok az e-mail-, üzenetküldő és egyéb alkalmazások, amelyek szinkronizálást használnak, csak akkor frissítenek, ha megnyitja őket.\n\nAz Akkumulátorkímélő mód automatikusan kikapcsol, ha az eszköz töltőn van." "Az adatforgalom csökkentése érdekében az Adatforgalom-csökkentő megakadályozza, hogy egyes alkalmazások adatokat küldjenek vagy fogadjanak a háttérben. Az Ön által aktuálisan használt alkalmazások hozzáférhetnek az adatokhoz, de csak ritkábban. Ez például azt jelentheti, hogy a képek csak rákoppintás után jelennek meg." "Bekapcsolja az Adatforgalom-csökkentőt?" "Bekapcsolás" @@ -1728,22 +1758,14 @@ "A(z) %1$s elnémította" "Belső probléma van az eszközzel, és instabil lehet, amíg vissza nem állítja a gyári adatokat." "Belső probléma van az eszközzel. A részletekért vegye fel a kapcsolatot a gyártóval." - - - - - - - - - - - - - - - - + "Az USSD-kérés módosítva hagyományos hívásra" + "Az USSD-kérés módosítva SS-kérésre" + "Új USSD-kérésre módosítva" + "Az USSD-kérés módosítva videohívásra" + "Az SS-kérés módosítva hagyományos hívásra" + "Az SS-kérés módosítva videohívásra" + "Az SS-kérés módosítva USSD-kérésre" + "Új SS-kérésre módosítva" "Munkaprofil" "Kibontás" "Összecsukás" @@ -1841,6 +1863,14 @@ "A SIM-kártya nem támogatott a hangnál" "A SIM-kártya nem engedélyezett a hanghoz" "A telefon nem engedélyezett a hanghoz" + + + + + + + + "Előugró ablak" "+ %1$d" "Az alkalmazás alacsonyabb verziójú, vagy nem kompatibilis ezzel a parancsikonnal" diff --git a/core/res/res/values-hy/strings.xml b/core/res/res/values-hy/strings.xml index b299ecf79b5f015edfcae60ecdabd68a5f7da73e..b20b72fb3c054d6421a063e53acd3888bcc347aa 100644 --- a/core/res/res/values-hy/strings.xml +++ b/core/res/res/values-hy/strings.xml @@ -77,15 +77,17 @@ "Զանգողի ID-ն լռելյայն չսահմանափակված է: Հաջորդ զանգը` չսահմանափակված" "Ծառայությունը չի տրամադրվում:" "Դուք չեք կարող փոխել զանգողի ID-ի կարգավորումները:" - "Տվյալների ծառայությունն անհասանելի է" - "Հնարավոր չէ կատարել շտապ կանչ" + "Բջջային ինտերնետի ծառայությունն արգելափակված է" + "Շտապ կանչերը հասանելի չեն" "Ձայնային ծառայությունն անհասանելի է" - "Ձայնային/արտակարգ իրավիճակների ծառայությունն անհասանելի է" - "Ձեր գտնվելու վայրում ծառայությունը ժամանակավորապես չի տրամադրվում բջջային ցանցի կողմից" - "Ցանցն անհասանելի է" - "Ազդանշանի ընդունման որակը լավացնելու համար փոխեք ցանցի տեսակը՝ անցնելով Կարգավորումներ > Ցանց և ինտերնետ > Բջջային ցանցեր > Ցանցի նախընտրած տեսակը։" - "Wi‑Fi կանչերն ակտիվ են" - "Շտապ կանչերի համար բջջային ցանց է անհրաժեշտ" + "Ձայնային ծառայությունն ու շտապ կանչերն արգելափակված են" + "Ձեր օպերատորը ժամանակավորապես անջատել է" + + + "Չհաջողվեց միանալ բջջային ցանցին" + "Փորձեք այլ ցանցի միանալ: Հպեք՝ նախընտրած ցանցը փոխելու համար:" + "Շտապ կանչերը հասանելի չեն" + "Շտապ կանչերը հասանելի չեն Wi‑Fi-ի միջոցով" "Ծանուցումներ" "Զանգի վերահասցեավորում" "Շտապ հետկանչի ռեժիմ" @@ -120,12 +122,12 @@ "Ռոումինգի ազդերիզը միացված է" "Ռոումինգի ազդերիզն անջատված է" "Ծառայության որոնում..." - "Զանգեր Wi-Fi-ի միջոցով" + "Չհաջողվեց կարգավորել Wi‑Fi-ի միջոցով արվող զանգերը" "Wi-Fi-ի միջոցով զանգեր կատարելու և հաղորդագրություններ ուղարկելու համար նախ դիմեք ձեր օպերատորին՝ այս ծառայությունը կարգավորելու համար: Այնուհետև նորից միացրեք «Զանգեր Wi-Fi-ի միջոցով» ընտրանքը Կարգավորումներից: (Սխալի կոդ՝ %1$s)" - "Գրանցվեք ձեր օպերատորի միջոցով (Սխալի կոդ` %1$s)" + "Wi‑Fi-ի միջոցով արվող զանգերը չհաջողվեց գրանցել ձեր օպերատորի մոտ՝ %1$s" "%s" @@ -160,8 +162,8 @@ "Չափից շատ հարցումներ են մշակվում: Փորձեք կրկին ավելի ուշ:" "Մուտք գործելու սխալ` %1$s-ի համար" "Համաժամեցնել" - "Համաժամել" - "Չափից շատ %s հեռացումներ:" + "Չի հաջողվում համաժամեցնել" + "Հետևյալ ծառայությունից չափազանց շատ տարրեր եք ջնջել՝ %s:" "Պլանշետի պահոցը լիքն է: Ջնջեք մի քանի ֆայլ` տարածք ազատելու համար:" "Ժամացույցի ֆայլերի պահեստը լիքն է: Ջնջեք որոշ ֆայլեր՝ տարածք ազատելու համար:" "Հեռուստացույցի պահեստը լիքն է: Ջնջեք որոշ ֆայլեր՝ տեղ ազատելու համար:" @@ -174,14 +176,13 @@ "Ձեր աշխատանքային պրոֆիլի ադմինիստրատորի կողմից" "%s-ի կողմից" "Աշխատանքային պրոֆիլը ջնջվել է" - "Աշխատանքային պրոֆիլը ջնջվել է ադմինիստրատորի հավելվածի բացակայության պատճառով" "Աշխատանքային պրոֆիլի ադմինիստրատորի հավելվածը բացակայում է կամ վնասված է: Արդյունքում ձեր աշխատանքային պրոֆիլը և առնչվող տվյալները ջնջվել են: Օգնության համար դիմեք ձեր ադմինիստրատորին:" "Ձեր աշխատանքային պրոֆիլն այս սարքում այլևս հասանելի չէ" "Գաղտնաբառը մուտքագրելու չափից շատ փորձեր են կատարվել" "Սարքը կառավարվում է" "Ձեր կազմակերպությունը կառավարում է այս սարքը և կարող է վերահսկել ցանցի թրաֆիկը: Հպեք՝ մանրամասները դիտելու համար:" "Ձեր սարքը ջնջվելու է" - "Հնարավոր չէ օգտագործել ադմինիստրատորի հավելվածը։ Ձեր սարքն այժմ կջնջվի։\n\nԵթե ունեք հարցեր, ապա դիմեք ձեր կազմակերպության ադմինիստրատորին։" + "Հնարավոր չէ օգտագործել ադմինիստրատորի հավելվածը։ Ձեր սարքից բոլոր տվյալները կջնջվեն։\n\nՀարցեր ունենալու դեպքում դիմեք ձեր կազմակերպության ադմինիստրատորին։" "Տպումն անջատված է %s հավելվածի կողմից։" "Իմ" "Պլանշետի ընտրանքները" @@ -236,6 +237,9 @@ "Ինքնաթիռի ռեժիմ" "Ինքնաթիռի ռեժիմը միացված է" "Ինքնաթիռի ռեժիմը անջատված է" + "Մարտկոցի տնտեսում" + "Անջատել" + "Միացնել" "Կարգավորումներ" "Օգնական" "Ձայնային օգնութ" @@ -269,31 +273,31 @@ "Բացել աշխատանքային պրոֆիլը" "Կոնտակտներ" "օգտագործել ձեր կոնտակտները" - "Թույլ տալ <b>%1$s</b> հավելվածին օգտագործել ձեր կոնտակտները" + "Թույլ տա՞լ <b>%1$s</b> հավելվածին օգտագործել ձեր կոնտակտները:" "Տեղորոշում" "տեղորոշել այս սարքը" - "Թույլ տալ <b>%1$s</b> հավելվածին օգտագործել այս սարքի տեղադրության տվյալները" + "Թույլ տա՞լ <b>%1$s</b> հավելվածին օգտագործել այս սարքի տեղադրության տվյալները:" "Օրացույց" "օգտագործել օրացույցը" - "Թույլ տալ <b>%1$s</b> հավելվածին օգտագործել ձեր օրացույցը" + "Թույլ տա՞լ <b>%1$s</b> հավելվածին օգտագործել ձեր օրացույցը:" "SMS" "ուղարկել և դիտել SMS-ները" - "Թույլ տալ <b>%1$s</b> հավելվածին ուղարկել և դիտել SMS հաղորդագրություններ" + "Թույլ տա՞լ <b>%1$s</b> հավելվածին ուղարկել և դիտել SMS հաղորդագրություններ:" "Տարածք" "օգտագործել լուսանկարները, մեդիա ֆայլերը և ձեր սարքում պահվող մյուս ֆայլերը" - "Թույլ տալ <b>%1$s</b> հավելվածին օգտագործել սարքում պահված լուսանկարները, մեդիան և ֆայլերը" + "Թույլ տա՞լ <b>%1$s</b> հավելվածին օգտագործել սարքում պահված լուսանկարները, մեդիան և ֆայլերը:" "Խոսափող" "ձայնագրել" - "Թույլ տալ <b>%1$s</b> հավելվածին կատարել ձայնագրություն" + "Թույլ տա՞լ <b>%1$s</b> հավելվածին կատարել ձայնագրություն:" "Տեսախցիկ" "լուսանկարել և տեսագրել" - "Թույլ տալ <b>%1$s</b> հավելվածին լուսա- և տեսանկարել" + "Թույլ տա՞լ <b>%1$s</b> հավելվածին լուսանկարել և տեսանկարել:" "Հեռախոս" "կատարել զանգեր և կառավարել զանգերը" - "Թույլ տալ <b>%1$s</b> հավելվածին կատարել հեռախոսազանգեր և կառավարել դրանք" + "Թույլ տա՞լ <b>%1$s</b> հավելվածին կատարել հեռախոսազանգեր և կառավարել դրանք:" "Մարմնի սենսորներ" "օգտագործել սենսորների տվյալները ձեր օրգանիզմի վիճակի մասին" - "Թույլ տալ <b>%1$s</b> հավելվածին սենսորից ստանա ձեր կենսագործունեության հիմնական տվյալները" + "Թույլ տա՞լ <b>%1$s</b> հավելվածին սենսորից ստանալ ձեր կենսագործունեության հիմնական տվյալները:" "Առբերել պատուհանի բովանդակությունը" "Վերլուծել գործող պատուհանի բովանդակությունը" "Միացնել Հպման միջոցով հետազոտումը" @@ -305,7 +309,7 @@ "Կատարել ժեստեր" "Կարող է հպել, թերթել, պտղունցել և կատարել այլ ժեստեր:" "Մատնահետքերի սկաների ժեստեր" - "Կարող է նկարահանել մատնահետքերի սկաների վրա կատարվող ժեստերը" + "Կարող է արձանագրել մատնահետքերի սկաների վրա կատարվող ժեստերը" "անջատել կամ փոփոխել կարգավիճակի գոտին" "Թույլ է տալիս հավելվածին անջատել կարգավիճակի գոտին կամ ավելացնել ու հեռացնել համակարգի պատկերակները:" "լինել կարգավիճակի գոտի" @@ -356,6 +360,8 @@ "Թույլ է տալիս հավելվածին մնայուն դարձնել իր մասերը հիշողության մեջ: Սա կարող է սահմանափակել այլ հավելվածներին հասանելի հիշողությունը` դանդաղեցնելով պլանշետի աշխատանքը:" "Թույլ է տալիս հավելվածին պահել իր տարրերը հիշողության մեջ: Սա կարող է սահմանափակել այլ հավելվածների համար հատկացված հիշողությունը և դանդաղեցնել հեռուստացույցի աշխատանքը:" "Թույլ է տալիս հավելվածին մնայուն դարձնել իր մասերը հիշողության մեջ: Սա կարող է սահմանափակել այլ հավելվածներին հասանելի հիշողությունը` դանդաղեցնելով հեռախոսի աշխատանքը:" + "աշխատեցնել ակտիվ ծառայությունները" + "Թույլ է տալիս հավելվածին օգտագործել ակտիվ ծառայությունները:" "չափել հավելվածի պահոցի տարածքը" "Թույլ է տալիս հավելվածին առբերել իր կոդը, տվյալները և քեշի չափերը" "փոփոխել համակարգի կարգավորումները" @@ -478,6 +484,8 @@ "Թույլ է տալիս հավելվածին հաղորդակցվել Մոտ տարածությամբ հաղորդակցման (NFC) պիտակների, քարտերի և ընթերցիչների հետ:" "անջատել ձեր էկրանի կողպեքը" "Թույլ է տալիս հավելվածին անջատել ստեղնաշարի կողպումը և ցանկացած կապված գաղտնաբառի պաշտպանվածությունը: Սրա ճիշտ օրինակն է, երբ հեռախոսը անջատում է ստեղնաշարի կողպումը մուտքային զանգ ստանալիս, հետո այն կրկին միացնում է, երբ զանգը ավարտվում է:" + "կենսաչափական սարքի օգտագործում" + "Հավելվածին թույլ է տալիս օգտագործել նույնականացման համար նախատեսված կենսաչափական սարքը" "կառավարել մատնահետքերի գրանցման սարքը" "Հավելվածին թույլ է տալիս կատարել այնպիսի գործառույթներ, որոնց միջոցով կարելի է օգտագործման համար ավելացնել և հեռացնել մատնահետքերի նմուշներ:" "օգտագործել մատնահետքերի գրանցման սարքը" @@ -490,6 +498,8 @@ "Չճանաչվեց" + + "Մատնահետքի սարքն անհասանելի է:" "Հնարավոր չէ պահել մատնահետքը: Հեռացրեք առկա մատնահետքը:" "Մատնահետքի գրանցման ժամանակը սպառվել է: Փորձեք նորից:" @@ -802,6 +812,8 @@ "Սխեմայով ապակողպում:" "Դեմքով ապակողպում:" "Pin-ն ապակողպված է:" + "SIM քարտի ապակողպում PIN կոդի միջոցով:" + "SIM քարտի ապակողպում PUK կոդի միջոցով:" "Գաղտնաբառի ապակողպում:" "Սխեմայի տարածք:" "Սահեցման տարածք:" @@ -863,6 +875,12 @@ "Տեքստը պատճենված է սեղմատախտակին:" "Ավելին" "Ցանկ+" + "Meta+" + "Ctrl+" + "Alt+" + "Shift+" + "Sym+" + "Function+" "բացակ" "մուտք" "ջնջել" @@ -994,14 +1012,23 @@ "Մուտքագրման եղանակը" "Տեքստի գործողությունները" "Էլփոստ" + "Նամակ ուղարկել ընտրված հասցեին" "Զանգել" + "Զանգել ընտրված հեռախոսահամարին" "Գտնել քարտեզում" + "Ցույց տալ ընտրված հասցեն քարտեզի վրա" "Բացել" + "Բացել ընտրված URL-ը" "SMS գրել" + "SMS ուղարկել ընտրված հեռախոսահամարին" "Ավելացնել" + "Ավելացնել կոնտակտներում" "Դիտել" + "Դիտել ընտրված օրն օրացույցում" "Ժամանակացույց" + "Ստեղծել միջոցառում նշված օրվա համար" "Հետագծել" + "Հետագծել ընտրված չվերթը" "Հիշողությունը սպառվում է" "Որոշ գործառույթներ կարող են չաշխատել" "Համակարգի համար բավարար հիշողություն չկա: Համոզվեք, որ ունեք 250ՄԲ ազատ տարածություն և վերագործարկեք:" @@ -1074,31 +1101,28 @@ "Ստուգել նոր տարբերակի առկայությունը" "%1$s ծրագիրը (գործընթաց %2$s) խախտել է իր ինքնահարկադրված Խիստ ռեժիմ քաղաքականությունը:" "%1$s գործընթացը խախտել է իր ինքնահարկադրված Խիստ ռեժիմ քաղաքականությունը:" - "Android-ը նորացվում է..." - "Android-ը մեկնարկում է…" + "Հեռախոսը թարմացվում է…" + "Պլանշետը թարմացվում է…" + "Սարքը թարմացվում է…" + "Հեռախոսը միանում է…" + "Պլանշետը միանում է…" + "Սարքը միանում է…" "Պահեստի օպտիմալացում:" - "Android-ի թարմացումն ավարտվում է…" - "Հնարավոր է՝ որոշ հավելվածներ մինչև նորացման ավարտը ճիշտ չաշխատեն" + "Համակարգի թարմացումը շուտով կվերջանա…" "%1$s հավելվածը նորացվում է…" "Օպտիմալացվում է հավելված %1$d%2$d-ից:" "%1$s հավելվածը պատրաստվում է:" "Հավելվածները մեկնարկում են:" "Բեռնումն ավարտվում է:" "%1$s-ն աշխատում է" - - - - - - - - - - - - + "Հպեք՝ խաղին վերադառնալու համար" + "Ընտրեք խաղ" + "Անխափան աշխատանքի համար միաժամանակ կարող եք բացել միայն մեկ խաղ:" + "Վերադառնալ %1$s" + "Բացել %1$s հավելվածը" + "%1$s հավելվածը կփակվի առանց տվյալները պահելու" "%1$s գործընթացը գերազանցել է հիշողության սահմանաչափը" - "Օգտագործվող օբյեկտների վերաբերյալ տվյալները հավաքվել են: Հպեք՝ դրանք տրամադրելու համար" + "Դինամիկ հիշողության տվյալները հավաքվել են: Հպեք՝ դրանք ուղարկելու համար:" "Տրամադրե՞լ օգտագործվող օբյեկտների վերաբերյալ տվյալները:" "%1$s գործընթացը գերազանցել է իր կողմից հիշողության օգտագործման սահմանաչափը՝ %2$s: Հավաքվել են օգտագործվող օբյեկտների վերաբերյալ տվյալներ, որոնք կարող եք ուղարկել մշակողին: Սակայն զգույշ եղեք՝ նշված տվյալները կարող են ներառել հավելվածի կողմից օգտագործվող ձեր անձնական տվյալները:" "Ընտրեք գործողություն տեքստի համար" @@ -1133,12 +1157,12 @@ "Միացեք բաց Wi‑Fi ցանցին" "Միացեք օպերատորի Wi‑Fi ցանցին" - "Միացում բաց Wi‑Fi ցանցին" + "Միացում Wi‑Fi ցանցին" "Միացել է Wi‑Fi ցանցին" "Չհաջողվեց միանալ Wi‑Fi ցանցին" "Հպեք՝ բոլոր ցանցերը տեսնելու համար" "Միանալ" - "Բոլոր ցանցերը" + "Բոլոր ցանցերը" "Wi‑Fi-ն ավտոմատ կմիանա" "Լավ ազդանշանով պահված ցանցի տարածքում գտնվելիս" "Նորից չմիացնել" @@ -1204,6 +1228,7 @@ "Վերագործարկել" "Ակտիվացրեք բջջային ծառայությունը" "Նոր SIM քարտն ակտիվացնելու համար ներբեռնեք օպերատորի հավելվածը" + "Նոր SIM քարտն ակտիվացնելու համար ներբեռնեք %1$s հավելվածը:" "Ներբեռնել հավելվածը" "Տեղադրվել է նոր SIM քարտ" "Հպեք՝ կարգավորելու համար" @@ -1222,13 +1247,13 @@ "PTP ռեժիմը USB-ի միջոցով միացավ" "USB մոդեմի ռեժիմը միացավ" "MIDI ռեժիմը USB-ի միջոցով միացավ" - "USB լրասարքի ռեժիմը միացավ" + "Միացվել է USB լրասարք" "Հպեք՝ լրացուցիչ ընտրանքների համար:" "Միացված սարքի լիցքավորում: Հպեք՝ ավելի շատ ընտրանքների համար:" "Հայտնաբերված է անալոգային աուդիո լրասարք" "Միացված սարքը համատեղելի չէ այս հեռախոսի հետ: Հպեք` ավելին իմանալու համար:" "USB վրիպազերծումը միացված է" - "Հպեք՝ USB վրիպազերծումն անջատելու համար:" + "Հպեք՝ USB-ի վրիպազերծումն անջատելու համար" "Ընտրել` USB կարգաբերումը կասեցնելու համար:" "Վրիպակի զեկույցի ստեղծում…" "Տրամադրե՞լ վրիպակի զեկույցը:" @@ -1247,34 +1272,50 @@ "%s հավելվածը ցուցադրվում է այլ հավելվածների վերևում" "%s հավելվածը ցուցադրվում է այլ հավելվածների վերևում" "Եթե չեք ցանկանում, որ %s-ն օգտագործի այս գործառույթը, հպեք՝ կարգավորումները բացելու և այն անջատելու համար։" - "ԱՆՋԱՏԵԼ" - "%s-ի նախապատրաստում" - "Սխալների ստուգում" - "Հայտնաբերվել է նոր %s" + "Անջատել" + + + + + + + + "Լուսանկարներ և մեդիա ֆայլեր տեղափոխելու համար" - "%s-ը վնասված է" - "%s-ը վնասված է: Հպեք՝ շտկելու համար:" - "%s-ը վնասված է: Ընտրեք՝ շտկելու համար:" + + + + "Չապահովվող %s" "Այս սարքը չի աջակցում այս %s-ը: Հպեք՝ աջակցվող ձևաչափով կարգավորելու համար:" "Այս սարքը չի աջակցում այս %s-ը: Ընտրեք՝ աջակցվող ձևաչափով կարգավորելու համար:" "%s-ը հեռացվել է առանց անջատելու" - "Տվյալները չկորցնելու համար անջատեք %s-ը՝ մինչ հեռացնելը" - "%s-ը հեռացված է" - "%s-ը հեռացվել է, զետեղեք նորը" - "%s-ը դեռ անջատվում է…" - "Չհեռացնել" + + + + + + + + + + "Կարգավորել" "Անջատել" "Ուսումնասիրել" "%s-ը տեղադրված չէ" - "Նորից զետեղեք այս սարքը" + + "%s-ի տեղափոխում" "Տվյալների տեղափոխում" - "Տեղափոխումն ավարտվեց" - "Տվյալները տեղափոխվեցին %s" - "Չհաջողվեց տեղափոխել տվյալները" - "Սկզբնական տեղադրությունում մնացած տվյալները" + + + + + + + + "Հեռացված է" "Անջատված է" "Ստուգում…" @@ -1333,14 +1374,14 @@ "Միշտ-միացված VPN-ը կապվում է..." "Միշտ-առցանց VPN-ը կապակցված է" "Անջատված է միշտ միացված VPN ցանցից" - "VPN սխալը միշտ միացված" + "Չհաջողվեց միանալ միշտ միացված VPN-ին" "Փոխել ցանցը կամ VPN-ի կարգավորումները" "Ընտրել ֆայլը" "Ոչ մի ֆայլ չի ընտրված" "Վերակայել" "Ուղարկել" - "Մեքենայի ռեժիմը միացված է" - "Հպեք` մեքենայի ռեժիմից դուրս գալու համար:" + "Հավելվածն աշխատում է" + "Հպեք՝ հավելվածը փակելու համար:" "Մոդեմի ռեժիմը միացված է" "Հպեք՝ կարգավորելու համար:" "Մոդեմի ռեժիմն անջատված է" @@ -1418,22 +1459,19 @@ "USB սարքավար %s-ից" "USB կրիչ" "Խմբագրել" - "Տվյալների օգտագործման զգուշացում" - "Հպեք՝ թրաֆիկն ու կարգավորումները տեսնելու համար" - "2G-3G տվյալների սահմանաչափը սպառվել է" - "4G տվյալների սահմանաչափը սպառվել է" + "Զգուշացում թրաֆիկի օգտագործման մասին" + "Դուք օգտագործել եք %s թրաֆիկ" "Բջջային ինտերնետի սահմանաչափը լրացել է" "Wi-Fi տվյալների սահմանը սպառվել է" - "Տվյալները ընդմիվել են ցիկլի հանգստի համար" - "2G-3G տվյալների սահմանը գերազանցված է" - "4G տվյալների սահմանը գերազանցվել է" - "Շարժական տվյալների սահմանը գերազանցվել է" - "Wi-Fi տվյալների սահմանը գերազանցվել է" - "%s-ը գերազանցում է նշված սահմանաչափը:" + "Տվյալների փոխանցումը դադարեցվել է նախքան ցիկլի ավարտը" + "Բջջային թրաֆիկը գերազանցվել է" + "Wi-Fi թրաֆիկը գերազանցվել է" + "Դուք գերազանցել եք ձեր սահմանաչափը %s-ով" "Հետնաշերտային տվյալները սահմանափակ են" "Հպեք և հանեք սահմանափակումը:" - "Թրաֆիկի շատ օգտագործում" - "Վերջին օրերին դուք սովորականից շատ թրաֆիկ եք օգտագործում։ Հպեք՝ օգտագործված թրաֆիկը և կարգավորումները դիտելու համար։" + "Չափազանց շատ թրաֆիկի օգտագործում" + "Ձեր հավելվածները սովորականից շատ թրաֆիկ են օգտագործել" + "%s հավելվածը սովորականից շատ թրաֆիկ է օգտագործել:" "Անվտանգության վկայական" "Այս վկայականը վավեր է:" "Թողարկվել է`" @@ -1669,7 +1707,7 @@ "Տեղադրվել է ձեր ադմինիստրատորի կողմից" "Թարմացվել է ձեր ադմինիստրատորի կողմից" "Ջնջվել է ձեր ադմինիստրատորի կողմից" - "Մարտկոցի աշխատանքի ժամկետը երկարացնելու համար տնտեսման ռեժիմում սահմանափակվում են սարքի արտադրողականությունը, թրթռոցը, տեղորոշման ծառայություններն ու տվյալների ֆոնային փոխանցումը: Տվյալների համաժամեցումից կախված՝ հավելվածները կարող են չթարմացվել, եթե դուք դրանք չգործարկեք:\n\nՄարտկոցի տնտեսումն ավտոմատ անջատվում է սարքի լիցքավորման ժամանակ:" + "Մարտկոցի աշխատաժամանակը երկարացնելու համար տնտեսման ռեժիմում սահմանափակվում են սարքի աշխատանքը, թրթռոցը, տեղորոշման ծառայություններն ու տվյալների ֆոնային փոխանցումը: Տվյալների համաժամեցումից կախված՝ հավելվածները կարող են չթարմացվել, եթե դուք դրանք չգործարկեք:\n\nՍարքի լիցքավորման ժամանակ մարտկոցի տնտեսումն ավտոմատ անջատվում է։" "Թրաֆիկի տնտեսման ռեժիմում որոշ հավելվածների համար ֆոնային փոխանցումն անջատված է։ Հավելվածը, որն օգտագործում եք, կարող է տվյալներ փոխանցել և ստանալ, սակայն ոչ այնքան հաճախ: Օրինակ՝ պատկերները կցուցադրվեն միայն դրանց վրա սեղմելուց հետո։" "Միացնե՞լ թրաֆիկի խնայումը:" "Միացնել" @@ -1681,9 +1719,9 @@ %1$d րոպեով (մինչև %2$s) %1$d րոպեով (մինչև %2$s) - - %1$d ժամ (մինչև %2$s) - %1$d ժամ (մինչև %2$s) + + %1$d ժամով (մինչև %2$s) + %1$d ժամով (մինչև %2$s) %1$d ժամով (մինչև %2$s) @@ -1697,9 +1735,9 @@ %d րոպեով %d րոպեով - - %d ժամ - %d ժամ + + %d ժամով + %d ժամով %d ժամով @@ -1720,14 +1758,14 @@ "Համրեցվել է %1$s-ի կողմից" "Սարքում ներքին խնդիր է առաջացել և այն կարող է կրկնվել, մինչև չվերականգնեք գործարանային կարգավորումները:" "Սարքում ներքին խնդիր է առաջացել: Մանրամասների համար կապվեք արտադրողի հետ:" - "USSD հարցումը փոխվել է DIAL հարցման:" - "USSD հարցումը փոխվել է SS հարցման:" - "USSD հարցումը փոխվել է նոր USSD հարցման:" - "USSD հարցումը փոխվել է Video DIAL հարցման:" - "SS հարցումը փոխվել է DIAL հարցման:" - "SS հարցումը փոխվել է Video DIAL հարցման:" - "SS հարցումը փոխվել է USSD հարցման:" - "SS հարցումը փոխվել է նոր SS հարցման:" + "USSD հարցումը փոխվել է սովորական զանգի" + "USSD հարցումը փոխվել է SS հարցման" + "Փոխվել է նոր USSD հարցման" + "USSD հարցումը փոխվել է տեսազանգի" + "SS հարցումը փոխվել է սովորական զանգի" + "SS հարցումը փոխվել է տեսազանգի" + "SS հարցումը փոխվել է USSD հարցման" + "Փոխվել է նոր SS հարցման" "Աշխատանքային պրոֆիլ" "Ընդարձակել" "Կոծկել" @@ -1825,6 +1863,14 @@ "Այս SIM քարտը նախապատրաստված չէ զանգելու համար" "Այս SIM քարտով չեք կարող զանգել" "Այս հեռախոսով չեք կարող զանգել" + + + + + + + + "Հայտնվող պատուհան" "+ %1$d" "Սա հավելվածի ավելի հին տարբերակն է կամ համատեղելի չէ այս դյուրանցման հետ" @@ -1837,7 +1883,14 @@ "Հայտնաբերվել է վնասաբեր հավելված" "%1$s հավելվածն ուզում է ցուցադրել հատվածներ %2$s հավելվածից" "Փոփոխել" + "Զանգերի և ծանուցումների համար թրթռոցը միացված է" + "Զանգերի և ծանուցումների համար ձայնն անջատած է" "Համակարգի փոփոխություններ" + "Չանհանգստացնել" + "«Չանհանգստացնել» ռեժիմում ծանուցումները կթաքցվեն: Դա կօգնի ձեզ կենտրոնանալ:" + "Սա նոր կարգավորում է: Հպեք՝ փոխելու համար:" "«Չանհանգստացնել» ռեժիմի կարգավորումները փոխվել են" - "Հպեք՝ կարգավորումները ստուգելու համար" + "Հպեք՝ տեսնելու, թե ինչ է արգելափակվել:" + "Համակարգ" + "Կարգավորումներ" diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index 8f4d7df37721f0d0403250562b120288179d9bde..f9831a5651faa59fa0dd46610e502f1b981538ff 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -82,6 +82,7 @@ "Tidak ada layanan panggilan suara" "Tidak ada layanan suara atau panggilan darurat" "Dinonaktifkan sementara oleh operator" + "Dinonaktifkan sementara oleh operator untuk SIM %d" "Tidak dapat menjangkau jaringan seluler" "Coba ubah jaringan pilihan. Tap untuk mengubah." "Panggilan darurat tidak tersedia" @@ -120,12 +121,13 @@ "Spanduk Roaming Hidup" "Spanduk Roaming Mati" "Mencari layanan" - - + "Tidak dapat menyiapkan panggilan Wi-Fi" "Untuk menelepon dan mengirim pesan melalui Wi-Fi, tanyalah ke operator Anda terlebih dahulu untuk menyiapkan layanan ini. Kemudian, aktifkan kembali panggilan Wi-Fi dari Setelan. (Kode error: %1$s)" - + + "Terjadi masalah saat mendaftarkan panggilan Wi‑Fi dengan operator Anda: %1$s" + "%s" "%s Panggilan Wi-Fi" @@ -481,6 +483,8 @@ "Mengizinkan apl berkomunikasi dengan tag, kartu, dan alat pembaca Komunikasi Nirkabel Jarak Dekat (NFC)." "nonaktifkan kunci layar Anda" "Memungkinkan aplikasi menonaktifkan kunci tombol dan keamanan sandi apa pun yang terkait. Misalnya, ponsel menonaktifkan kunci tombol saat menerima panggilan telepon masuk, kemudian mengaktifkan kembali kunci tombol ketika panggilan selesai." + "gunakan hardware biometrik" + "Mengizinkan aplikasi menggunakan hardware biometrik untuk autentikasi" "kelola hardware sidik jari" "Mengizinkan aplikasi memanggil metode untuk menambahkan dan menghapus template sidik jari untuk digunakan." "gunakan hardware sidik jari" @@ -493,6 +497,7 @@ "Tidak dikenali" + "Sidik jari diautentikasi" "Hardware sidik jari tidak tersedia." "Sidik jari tidak dapat disimpan. Hapus sidik jari yang ada." "Waktu sidik jari habis. Coba lagi." @@ -1005,14 +1010,23 @@ "Metode masukan" "Tindakan teks" "Email" + "Mengirimkan email ke alamat yang dipilih" "Panggil" + "Panggil nomor telepon yang dipilih" "Temukan" + "Melokalkan alamat yang dipilih" "Buka" + "Buka URL yang dipilih" "Pesan" + "Mengirimkan SMS ke nomor telepon yang dipilih" "Tambahkan" + "Menambahkan ke kontak" "Lihat" + "Melihat waktu yang dipilih di kalender" "Jadwal" + "Menjadwalkan acara untuk waktu yang dipilih" "Lacak" + "Memantau penerbangan yang dipilih" "Ruang penyimpanan hampir habis" "Beberapa fungsi sistem mungkin tidak dapat bekerja" "Penyimpanan tidak cukup untuk sistem. Pastikan Anda memiliki 250 MB ruang kosong, lalu mulai ulang." @@ -1141,8 +1155,7 @@ "Hubungkan ke jaringan Wi-Fi terbuka" "Hubungkan ke jaringan Wi-Fi operator" - - + "Menghubungkan ke jaringan Wi-Fi" "Terhubung ke jaringan Wi-Fi" "Tidak dapat menghubungkan ke jaringan Wi‑Fi" "Tap untuk melihat semua jaringan" @@ -1258,33 +1271,34 @@ "%s ditampilkan di atas aplikasi lain" "Jika Anda tidak ingin %s menggunakan fitur ini, tap untuk membuka setelan dan menonaktifkannya." "Nonaktifkan" - "Menyiapkan %s" - "Memeriksa kesalahan" - "%s baru terdeteksi" + "Memeriksa %s…" + "Meninjau konten saat ini" + "%s baru" + "Tap untuk menyiapkan" "Untuk mentransfer foto dan media" - "%s rusak" - "%s sudah rusak. Ketuk untuk memperbaiki." + "Masalah pada %s" + "Tap untuk memperbaiki" "%s rusak. Pilih untuk memperbaikinya." "%s tidak didukung" "Perangkat tidak mendukung %s ini. Ketuk untuk menyiapkan dalam format yang didukung." "Perangkat ini tidak mendukung %s ini. Pilih untuk menyiapkan dalam format yang didukung." "%s tiba-tiba dicabut" - "Lingsirkan %s sebelum mencabut agar data tidak hilang" - "%s dicabut" - "%s dicabut; colokkan yang baru" - "Masih mengeluarkan %s…" - "Jangan cabut" + "Keluarkan media sebelum mencabut agar konten tidak hilang" + "%s dicabut" + "Beberapa fungsi mungkin tidak berjalan dengan baik. Masukkan penyimpanan baru." + "Mengeluarkan %s" + "Jangan cabut" "Siapkan" "Keluarkan" "Jelajahi" "Tidak ada %s" - "Colokkan kembali perangkat ini" + "Masukkan perangkat lagi" "Memindahkan %s" "Memindahkan data" - "Pemindahan selesai" - "Data dipindahkan ke %s" - "Tidak dapat memindahkan data" - "Data tertinggal di lokasi asal" + "Transfer konten selesai" + "Konten dipindahkan ke %s" + "Tidak dapat memindahkan konten" + "Coba pindahkan konten lagi" "Dicabut" "Dikeluarkan" "Memeriksa…" @@ -1676,8 +1690,7 @@ "Diinstal oleh admin Anda" "Diupdate oleh admin Anda" "Dihapus oleh admin Anda" - - + "Untuk memperpanjang masa pakai baterai, Penghemat Baterai mengurangi performa perangkat dan membatasi atau menonaktifkan getaran, layanan lokasi, dan data background. Email, messaging, dan aplikasi lain yang mengandalkan sinkronisasi mungkin tidak diupdate, kecuali jika dibuka.\n\nPenghemat Baterai nonaktif otomatis jika perangkat sedang diisi daya baterainya." "Untuk membantu mengurangi penggunaan data, Penghemat Kuota Internet mencegah beberapa aplikasi mengirim atau menerima data di latar belakang. Aplikasi yang sedang digunakan dapat mengakses data, tetapi frekuensinya agak lebih jarang. Misalnya saja, gambar hanya akan ditampilkan setelah disentuh." "Aktifkan Penghemat Kuota Internet?" "Aktifkan" @@ -1728,22 +1741,14 @@ "Dinonaktifkan oleh %1$s" "Ada masalah dengan perangkat. Hal ini mungkin membuat perangkat jadi tidak stabil dan perlu dikembalikan ke setelan pabrik." "Ada masalah dengan perangkat. Hubungi produsen perangkat untuk informasi selengkapnya." - - - - - - - - - - - - - - - - + "Permintaan USSD diubah ke panggilan reguler" + "Permintaan USSD diubah ke permintaan SS" + "Diubah ke permintaan USSD baru" + "Permintaan USSD diubah ke video call" + "Permintaan SS diubah ke panggilan reguler" + "Permintaan SS diubah ke video call" + "Permintaan SS diubah ke permintaan USSD" + "Diubah ke permintaan SS baru" "Profil kerja" "Luaskan" "Ciutkan" @@ -1841,6 +1846,10 @@ "SIM tidak disediakan untuk suara" "SIM tidak diizinkan untuk suara" "Ponsel tidak diizinkan untuk suara" + "SIM %d tidak diizinkan" + "SIM %d tidak tersedia" + "SIM %d tidak diizinkan" + "SIM %d tidak diizinkan" "Jendela Pop-up" "+ %1$d" "Versi aplikasi di-downgrade, atau tidak kompatibel dengan pintasan ini" diff --git a/core/res/res/values-is/strings.xml b/core/res/res/values-is/strings.xml index 2281a54de004a43f63500c6b6fe79188c2a7159a..c17d58aa4103f28e696aeb1b81f1cf631283177c 100644 --- a/core/res/res/values-is/strings.xml +++ b/core/res/res/values-is/strings.xml @@ -77,15 +77,17 @@ "Númerabirting er sjálfgefið án takmarkana. Næsta símtal: Án takmarkana" "Þjónustu ekki útdeilt." "Þú getur ekki breytt stillingu númerabirtingar." - "Gagnasamband er ekki í boði" - "Engin neyðarsímtöl" + "Engin gagnaþjónusta fyrir farsíma" + "Neyðarsímtöl eru ekki í boði" "Símtöl eru ekki í boði" - "Símtöl/neyðarsímtöl eru ekki í boði" - "Ekki í boði á farsímakerfinu á þínum stað eins og er" - "Ekki næst samband við símkerfi" - "Reyndu að breyta valinni gerð í Stillingar > Netkerfi og internet > Farsímakerfi > Valin símkerfistegund til að bæta móttökuskilyrðin." - "Wi-Fi símtöl eru virk" - "Neyðarsímtöl krefjast farsímanets." + "Engin raddþjónusta eða neyðarsímtöl" + "Símafyrirtækið slökkti tímabundið á þessu" + + + "Ekki næst samband við farsímakerfi" + "Prófaðu að velja annað símkerfi. Ýttu til að breyta." + "Neyðarsímtöl eru ekki í boði" + "Ekki er hægt að hringja neyðarsímtöl með Wi-Fi" "Tilkynningar" "Símtalsflutningur" "Stilling fyrir svarhringingu neyðarsímtala" @@ -120,12 +122,12 @@ "Kveikt á reikiborða" "Slökkt á reikiborða" "Leitar að þjónustu" - "Wi-Fi símtöl" + "Ekki tókst að setja upp Wi‑Fi símtöl" "Til að hringja og senda skilaboð yfir Wi-Fi þarftu fyrst að biðja símafyrirtækið þitt um að setja þá þjónustu upp. Kveiktu síðan á Wi-Fi símtölum í stillingunum. (Villukóði: %1$s)" - "Skráðu þig hjá símafyrirtækinu (Villukóði: %1$s)" + "Vandamál kom upp við að skrá Wi‑Fi símtöl hjá símafyrirtækinu: %1$s" "%s" @@ -160,8 +162,8 @@ "Of margir beiðnir eru í vinnslu. Reyndu aftur síðar." "Innskráningarvilla fyrir %1$s" "Samstilla" - "Samstilling" - "Of oft eytt í %s." + "Ekki er hægt að samstilla" + "Reynt var að eyða of mörgum %s." "Geymslurými spjaldtölvunnar er fullt. Eyddu einhverjum skrám til að losa um pláss." "Geymsla úrsins er full. Eyddu einhverjum skrám til að búa til pláss." "Geymslurými sjónvarpsins er fullt. Eyddu skrám til að losa um pláss." @@ -174,14 +176,13 @@ "Af kerfisstjóra vinnusniðsins þíns" "Af %s" "Vinnusniði eytt" - "Vinnusniði eytt vegna þess að stjórnunarforrit vantar" "Stjórnunarforrit vinnusniðsins vantar eða er skemmt. Vinnusniðinu og gögnum því tengdu hefur því verið eytt. Hafðu samband við kerfisstjórann til að fá frekari aðstoð." "Vinnusniðið þitt er ekki lengur í boði á þessu tæki" "Of margar tilraunir til að slá inn aðgangsorð" "Tækinu er stjórnað" "Fyrirtækið þitt stjórnar þessu tæki og kann að fylgjast með netnotkun. Ýttu hér til að fá upplýsingar." "Tækið verður hreinsað" - "Ekki er hægt að nota stjórnunarforritið. Tækinu verður eytt.\n\nEf spurningar vakna skaltu hafa samband við kerfisstjóra fyrirtækisins." + "Ekki er hægt að nota stjórnunarforritið. Tækinu verður eytt.\n\nEf spurningar vakna skaltu hafa samband við kerfisstjóra fyrirtækisins." "%s lokaði á prentun." "Ég" "Valkostir spjaldtölvu" @@ -236,6 +237,9 @@ "Flugstilling" "KVEIKT er á flugstillingu" "SLÖKKT er á flugstillingu" + "Rafhlöðusparnaður" + "Slökkt er á rafhlöðusparnaði" + "Kveikt er á rafhlöðusparnaði" "Stillingar" "Aðstoð" "Raddaðstoð" @@ -269,31 +273,31 @@ "Skipta yfir í vinnusnið" "Tengiliðir" "fá aðgang að tengiliðunum þínum" - "Veita <b>%1$s</b> aðgang að tengiliðunum þínum" + "Viltu veita <b>%1$s</b> aðgang að tengiliðunum þínum?" "Staðsetning" "fá aðgang að staðsetningu þessa tækis" - "Veita <b>%1$s</b> aðgang að staðsetningu þessa tækis" + "Viltu veita <b>%1$s</b> aðgang að staðsetningu þessa tækis?" "Dagatal" "fá aðgang að dagatalinu þínu" - "Leyfa <b>%1$s</b> aðgang að dagatalinu þínu" + "Viltu veita <b>%1$s</b> aðgang að dagatalinu þínu?" "SMS" "senda og skoða SMS-skilaboð" - "Leyfa <b>%1$s</b> að senda og skoða SMS-skilaboð" + "Viltu leyfa <b>%1$s</b> að senda og skoða SMS-skilaboð?" "Geymslurými" "fá aðgang að myndum, efni og skrám í tækinu" - "Veita <b>%1$s</b> aðgang að myndum, efni og skrám í tækinu" + "Viltu veita <b>%1$s</b> aðgang að myndum, efni og skrám í tækinu?" "Hljóðnemi" "taka upp hljóð" - "Leyfa <b>%1$s</b> að taka upp hljóð" + "Viltu leyfa <b>%1$s</b> að taka upp hljóð?" "Myndavél" "taka myndir og taka upp myndskeið" - "Leyfa <b>%1$s</b> að taka myndir og myndskeið" + "Viltu leyfa <b>%1$s</b> að taka myndir og myndskeið?" "Sími" "hringja og stjórna símtölum" - "Leyfa <b>%1$s</b> að hringja og vinna með símtöl" + "Viltu leyfa <b>%1$s</b> að hringja og stjórna símtölum?" "Líkamsskynjarar" "aðgangur að skynjaragögnum yfir lífsmörk þín" - "Veita <b>%1$s</b> aðgang að skynjaragögnum yfir lífsmörk þín" + "Viltu veita <b>%1$s</b> aðgang að skynjaragögnum yfir lífsmörk þín?" "Sækja innihald glugga" "Kanna innihald glugga sem þú ert að nota." "Kveikja á snertikönnun" @@ -305,7 +309,7 @@ "Nota bendingar" "Getur ýtt, strokið, fært fingur saman og gert ýmsar aðrar bendingar." "Fingrafarabendingar" - "Getur fangað bendingar sem eru gerðar á fingrafaraskynjara tækisins." + "Getur fangað bendingar sem eru gerðar á fingrafaralesara tækisins." "slökkva á eða breyta stöðustiku" "Leyfir forriti að slökkva á stöðustikunni eða bæta við og fjarlægja kerfistákn." "vera stöðustikan" @@ -356,6 +360,8 @@ "Leyfir forriti að gera hluta sjálfs sín varanlega í minni. Þetta getur takmarkað það minni sem býðst öðrum forritum og þannig hægt á spjaldtölvunni." "Leyfir forriti að gera hluta sjálfs sín varanlega í minni. Þetta getur takmarkað það minni sem býðst öðrum forritum og þannig hægt á sjónvarpinu." "Leyfir forriti að gera hluta sjálfs sín varanlega í minni. Þetta getur takmarkað það minni sem býðst öðrum forritum og þannig hægt á símanum." + "keyra þjónustu í forgrunni" + "Leyfir forritinu að nota þjónustu sem er í forgrunni." "mæla geymslurými forrits" "Leyfir forriti að sækja stærðir kóða, gagna og skyndiminnis síns." "breyta kerfisstillingum" @@ -478,6 +484,8 @@ "Leyfir forriti að eiga samskipti við NFC-merki, -spjöld og -lesara (nándarsamskipti)." "slökkva á skjálásnum" "Leyfir forriti að slökkva á símalásnum og öðrum öryggisaðgerðum tengdum aðgangsorði. Til dæmis gerir síminn lásinn óvirkan þegar símtal berst og læsist svo aftur að símtali loknu." + "nota búnað fyrir líffræðileg gögn" + "Leyfir forritinu að nota búnað fyrir líffræðileg gögn til auðkenningar" "stjórna fingrafarabúnaði" "Gerir forritinu kleift að beita aðferðum til að bæta við og eyða fingrafarasniðmátum til notkunar." "nota fingrafarabúnað" @@ -490,6 +498,8 @@ "Þekktist ekki" + + "Fingrafarsvélbúnaður ekki til staðar." "Ekki er hægt að vista fingrafarið. Fjarlægðu eitthvert af fingraförunum sem fyrir eru." "Tímamörk runnu út fyrir fingrafar. Reyndu aftur." @@ -802,6 +812,8 @@ "Opnun með mynstri." "Opnun með andliti." "Opnun með PIN-númeri." + "Taka PIN-númer SIM-korts úr lás." + "Taka PUK-númer SIM-korts úr lás." "Opnun með aðgangsorði." "Svæði mynsturs." "Stroksvæði." @@ -863,6 +875,12 @@ "Texti afritaður á klippiborð." "Meira" "Valmynd+" + "Meta+" + "Ctrl+" + "Alt+" + "Shift+" + "Sym+" + "Aðgerðarlykill+" "bil" "enter" "eyða" @@ -994,14 +1012,23 @@ "Innsláttaraðferð" "Textaaðgerðir" "Tölvupóstur" + "Senda á valið netfang" "Símtal" + "Hringja í valið símanúmer" "Staðsetja" + "Opna valið heimilisfang" "Opna" + "Opna valda vefslóð" "Skilaboð" + "Senda skilaboð í valið símanúmer" "Bæta við" + "Bæta við tengiliði" "Skoða" + "Skoða valinn tíma í dagatali" "Setja á dagskrá" + "Skipuleggja viðburð á völdum tíma" "Rekja" + "Fylgjast með völdu flugi" "Geymslurýmið er senn á þrotum" "Sumir kerfiseiginleikar kunna að vera óvirkir" "Ekki nægt geymslurými fyrir kerfið. Gakktu úr skugga um að 250 MB séu laus og endurræstu." @@ -1074,31 +1101,28 @@ "Leita að uppfærslu" "Forritið %1$s (ferli %2$s) hefur brotið gegn eigin StrictMode-stefnu." "Forritið %1$s braut gegn eigin StrictMode-stefnu." - "Android er að uppfæra…" - "Android er að ræsast…" + "Uppfærir síma…" + "Uppfærir spjaldtölvu…" + "Uppfærir tæki…" + "Síminn kveikir á sér…" + "Spjaldtölvan kveikir á sér…" + "Tækið kveikir á sér…" "Fínstillir geymslu." - "Lýkur við Android uppfærslu…" - "Hugsanlega virka sum forrit ekki fyrr en uppfærslunni lýkur" + "Lýkur við kerfisuppfærslu…" "%1$s uppfærir…" "Fínstillir forrit %1$d af %2$d." "Undirbýr %1$s." "Ræsir forrit." "Lýkur ræsingu." "%1$s er í gangi" - - - - - - - - - - - - + "Ýttu til að fara aftur í leik" + "Velja leik" + "Til að auka afköstin getur aðeins einn af þessum leikjum verið opinn í einu." + "Fara til baka í %1$s" + "Opna %1$s" + "%1$s verður lokað án þess að vista" "%1$s er yfir minnishámarki" - "Minnisgögnum hefur verið safnað, ýttu til að deila" + "Minnisgögnum hefur verið safnað. Ýttu til að deila." "Deila minnisgögnum?" "Ferlið %1$s er komið yfir %2$s minnishámark sitt. Þú getur deilt minnisgögnum (heap dump) með þróunaraðilanum. Athugaðu að minnisgögnin kunna að innihalda allar þær persónuupplýsingar sem forritið hefur aðgang að um þig." "Veldu aðgerð fyrir texta" @@ -1133,12 +1157,12 @@ "Tengjast opnu Wi-Fi neti" "Tengjast við Wi‑Fi net símafyrirtækis" - "Tengist opnu Wi‑Fi neti" + "Tengist við Wi-Fi net" "Tengt við Wi‑Fi net" "Ekki hægt að tengjast Wi-Fi neti" "Ýttu til að sjá öll netkerfi" "Tengjast" - "Öll netkerfi" + "Öll netkerfi" "Kveikt verður sjálfkrafa á Wi‑Fi" "Þegar þú ert nálægt vistuðu hágæðaneti" "Ekki kveikja aftur" @@ -1205,6 +1229,7 @@ "Endurræsa" "Virkja farsímaþjónustu" "Sæktu forrit símafyrirtækisins til að virkja nýja SIM-kortið þitt" + "Sæktu forritið %1$s til að virkja nýja SIM-kortið" "Sækja forritið" "Nýtt SIM-kort sett í" "Ýttu til að setja það upp" @@ -1223,13 +1248,13 @@ "Kveikt er á PTP yfir USB" "Kveikt er á USB-tjóðrun" "Kveikt er á MIDI yfir USB" - "Kveikt á stillingu USB-aukabúnaðar" + "USB-aukabúnaður tengdur" "Ýttu til að sjá fleiri valkosti." "Hleður tengt tæki. Ýttu til að sjá fleiri valkosti." "Hliðrænn hljóðaukabúnaður greindist" "Tengda tækið er ekki samhæft við þennan síma. Ýttu til að fá frekari upplýsingar." "USB-villuleit tengd" - "Ýttu til að slökkva á USB-villuleit." + "Ýttu til að slökkva á USB-villuleit" "Veldu til að gera USB-villuleit óvirka." "Tekur við villutilkynningu…" "Deila villutilkynningu?" @@ -1248,34 +1273,50 @@ "%s birtist yfir öðrum forritum" "%s birtist yfir öðrum forritum" "Ef þú vilt ekki að %s noti þennan eiginleika skaltu ýta til að opna stillingarnar og slökkva á því." - "SLÖKKVA" - "Undirbýr %s" - "Leitar að villum" - "Nýtt %s fannst" + "Slökkva" + + + + + + + + "Til að flytja myndir og aðrar skrár" - "Skemmt %s" - "%s er skemmt. Ýttu til að laga." - "%s er skemmt. Veldu til að lagfæra." + + + + "Óstutt %s" "Þetta tæki styður ekki %s. Ýttu til að setja upp með studdu sniði." "Þetta tæki styður ekki %s. Veldu til að setja upp með studdu sniði." "%s fjarlægt án fyrirvara" - "Aftengdu %s áður en þú fjarlægir það til að koma í veg fyrir gagnatap" - "%s fjarlægt" - "%s fjarlægt; settu nýtt í" - "Enn að fjarlægja %s..." - "Ekki fjarlægja" + + + + + + + + + + "Setja upp" "Fjarlægja" "Kanna" "%s vantar" - "Settu þetta tæki aftur í" + + "Flytur %s" "Flytur gögn" - "Flutningi lokið" - "Gögn flutt á %s" - "Ekki var hægt að færa gögnin" - "Gögn eftir á upprunalega staðnum" + + + + + + + + "Fjarlægð" "Aftengd" "Athugar…" @@ -1334,14 +1375,14 @@ "Sívirkt VPN tengist…" "Sívirkt VPN tengt" "Aftengt frá sívirku VPN" - "Villa í sívirku VPN" + "Ekki er hægt að tengjast sívirkri VPN-tengingu" "Breyta stillingum netkerfis eða VPN" "Velja skrá" "Engin skrá valin" "Endurstilla" "Senda" - "Bílastilling virk" - "Ýttu til að fara úr bílastillingu." + "Akstursforrit er í gangi" + "Ýttu til að loka akstursforritinu." "Kveikt á tjóðrun eða aðgangsstað" "Ýttu til að setja upp." "Slökkt er á tjóðrun" @@ -1419,22 +1460,19 @@ "USB-drif frá %s" "USB-geymsla" "Breyta" - "Viðvörun um gagnanotkun" - "Ýttu fyrir uppl. og stillingar" - "Gagnahámarki 2G og 3G náð" - "Gagnahámarki 4G náð" + "Gagnaviðvörun" + "Þú hefur notað %s af gögnum" "Farsímagagnamarki náð" "Gagnahámarki Wi-Fi náð" - "Hlé gert á gagnasendingu við þessa notkun" - "Gagnahámarki 2G og 3G náð" - "Gagnahámarki 4G náð" - "Hámarki farsímagagna náð" - "Gagnahámarki Wi-Fi náð" - "%s yfir tilgreindum mörkum." + "Gagnanotkun sett í bið það sem eftir er af tímabilinu" + "Yfir hámarki farsímagagna" + "Yfir gagnamörkum fyrir Wi-Fi" + "Þú hefur farið %s yfir stillt mörk" "Bakgrunnsgögn takmörkuð" "Ýttu til að eyða takmörkun." - "Mikil gagnanotkun" - "Gagnanotkun þín síðustu daga er meiri en venjulega. Ýttu til að skoða upplýsingar um notkun og stillingar." + "Mikil notkun farsímagagna" + "Forritin þín hafa notað meira af gögnum en venjulega" + "%s hefur notað meira af gögnum en venjulega" "Öryggisvottorð" "Þetta vottorð er gilt." "Gefið út fyrir:" @@ -1670,7 +1708,7 @@ "Kerfisstjóri setti upp" "Kerfisstjóri uppfærði" "Kerfisstjóri eyddi" - "Til að auka endingu rafhlöðunnar dregur rafhlöðusparnaður úr afköstum tækisins og takmarkar titring og flest bakgrunnsgögn. Ekki er víst að tölvupóstur, skilaboð og önnur forrit sem reiða sig á samstillingu verði uppfærð fyrr en þú opnar þau.\n\nSjálfkrafa er slökkt á rafhlöðusparnaði þegar tækið er í hleðslu." + "Til að auka endingu rafhlöðunnar mun orkusparnaður draga úr afköstum tækisins og takmarka eða slökkva á titringi, staðsetningarþjónustu og bakgrunnsgögnum. Ekki er víst að tölvupóstur, skilaboð og önnur forrit sem reiða sig á samstillingu uppfærist nema þú opnir þau.\n\nSjálfkrafa er slökkt á orkusparnaði þegar tækið er í hleðslu." "Gagnasparnaður getur hjálpað til við að draga úr gagnanotkun með því að hindra forrit í að senda eða sækja gögn í bakgrunni. Forrit sem er í notkun getur náð í gögn, en gerir það kannski sjaldnar. Niðurstaðan gæti verið, svo dæmi sé tekið, að myndir séu ekki birtar fyrr en þú ýtir á þær." "Kveikja á gagnasparnaði?" "Kveikja" @@ -1682,7 +1720,7 @@ Í %1$d mín. (fram til %2$s) Í %1$d mín. (fram til %2$s) - + Í %1$d klukkustund (til %2$s) Í %1$d klukkustundir (til %2$s) @@ -1698,7 +1736,7 @@ Í %d mín. Í %d mín. - + Í %d klukkustund Í %d klukkustundir @@ -1721,14 +1759,14 @@ "%1$s tók hljóðið af" "Innra vandamál kom upp í tækinu og það kann að vera óstöðugt þangað til þú núllstillir það." "Innra vandamál kom upp í tækinu. Hafðu samband við framleiðanda til að fá nánari upplýsingar." - "USSD-beiðni er breytt í DIAL-beiðni." - "USSD-beiðni er breytt í SS-beiðni." - "USSD-beiðni er breytt í nýja USSD-beiðni." - "USSD-beiðni var breytt í Video DIAL-beiðni." - "SS-beiðni er breytt í DIAL-beiðni." - "SS-beiðni var breytt í Video DIAL-beiðni." - "SS-beiðni er breytt í USSD-beiðni." - "SS-beiðni er breytt í nýja SS-beiðni." + "SS-beiðni breytt í venjulegt símtal" + "USSD-beiðni breytt í SS-beiðni" + "Breytt í nýja USSD-beiðni" + "USSD-beiðni breytt í myndsímtal" + "SS-beiðni breytt í venjulegt símtal" + "SS-beiðni breytt í myndsímtal" + "SS-beiðni breytt í USSD-beiðni" + "Breytt í nýja SS-beiðni" "Vinnusnið" "Stækka" "Minnka" @@ -1826,6 +1864,14 @@ "SIM-korti er ekki úthlutað fyrir rödd" "SIM-kort er ekki heimilað fyrir rödd" "Sími er ekki heimilaður fyrir rödd" + + + + + + + + "Sprettigluggi" "+ %1$d" "Útgáfa forritsins er of gömul eða er ekki samhæf þessari flýtileið" @@ -1838,7 +1884,14 @@ "Skaðlegt forrit fannst" "%1$s vill sýna sneiðar úr %2$s" "Breyta" + "Titringur er virkur fyrir símtöl og tilkynningar" + "Slökkt verður á hljóði símtala og tilkynninga" "Breytingar á kerfi" + "Ónáðið ekki" + "„Ónáðið ekki“ felur tilkynningar til að hjálpa þér að einbeita þér" + "Þetta er ný hegðun. Ýttu til að breyta." "„Ónáðið ekki“ var breytt" - "Ýttu til að leita að truflunum í stillingum „Ónáðið ekki“" + "Ýttu til að skoða hvað lokað hefur verið á." + "Kerfi" + "Stillingar" diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 0da40a5023fade185e507a25c3dc8676c38cef6a..76d12d6c2b2d4d5a3a9e5cfeead9cd52e87d270f 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -82,6 +82,8 @@ "Nessun servizio di telefonia" "Nessun servizio vocale o di chiamate di emergenza" "Servizio disattivato temporaneamente dall\'operatore" + + "Impossibile raggiungere la rete mobile" "Prova a cambiare la rete preferita. Tocca per cambiare." "Chiamate di emergenza non disponibili" @@ -120,12 +122,13 @@ "Banner roaming attivato" "Banner roaming disattivato" "Ricerca servizio" - - + "Impossibile impostare le chiamate Wi‑Fi" "Per effettuare chiamate e inviare messaggi tramite Wi-Fi, chiedi prima al tuo operatore di impostare questo servizio. Dopodiché, attiva di nuovo la funzione Chiamate Wi-Fi nelle impostazioni. (Codice di errore: %1$s)" - + + "Si è verificato un problema con la registrazione delle chiamate Wi‑Fi con l\'operatore: %1$s" + "%s" "Chiamata Wi-Fi %s" @@ -481,6 +484,8 @@ "Consente all\'applicazione di comunicare con tag, schede e lettori NFC (Near Field Communication)." "disattivazione blocco schermo" "Consente all\'applicazione di disattivare il blocco tastiera ed eventuali protezioni tramite password associate. Ad esempio, il telefono disattiva il blocco tastiera quando riceve una telefonata in arrivo e lo riattiva al termine della chiamata." + "Utilizzo di hardware biometrico" + "Consente all\'app di utilizzare hardware biometrico per eseguire l\'autenticazione" "gestisci hardware per il riconoscimento delle impronte digitali" "Consente all\'app di richiamare metodi per aggiungere e rimuovere modelli di impronte digitali da utilizzare." "utilizzo di hardware per il riconoscimento delle impronte digitali" @@ -493,6 +498,8 @@ "Non riconosciuto" + + "Hardware per l\'impronta digitale non disponibile." "Impossibile memorizzare l\'impronta digitale. Rimuovi un\'impronta esistente." "Timeout impronta digitale. Riprova." @@ -1005,14 +1012,23 @@ "Metodo inserimento" "Azioni testo" "Invia una email" + "Invia un\'email all\'indirizzo selezionato" "Chiama" + "Chiama il numero di telefono selezionato" "Localizza" + "Localizza l\'indirizzo selezionato" "Apri" + "Apri l\'URL selezionato" "Invia messaggio" + "Invia un SMS al numero di telefono selezionato" "Aggiungi" + "Aggiungi ai contatti" "Visualizza" + "Visualizza la data selezionata nel calendario" "Pianifica" + "Pianifica l\'evento nella data selezionata" "Monitora" + "Monitora il volo selezionato" "Spazio di archiviazione in esaurimento" "Alcune funzioni di sistema potrebbero non funzionare" "Memoria insufficiente per il sistema. Assicurati di avere 250 MB di spazio libero e riavvia." @@ -1141,8 +1157,7 @@ "Stabilisci la connessione per aprire la rete Wi‑Fi" "Collegati alla rete Wi-Fi dell\'operatore" - - + "Connessione alla rete Wi-Fi" "Connessione alla rete Wi-Fi stabilita" "Impossibile connettersi alla rete Wi-Fi" "Tocca per vedere tutte le reti" @@ -1258,33 +1273,49 @@ "App %s mostrata sopra altre app" "Se non desideri che l\'app %s utilizzi questa funzione, tocca per aprire le impostazioni e disattivarla." "Disattiva" - "Preparazione della %s" - "Ricerca errori" - "Nuova %s rilevata" + + + + + + + + "Per trasferire foto e altri file" - "%s danneggiata" - "L\'elemento %s è danneggiato. Tocca per risolvere." - "Il supporto esterno %s è danneggiato. Seleziona per risolvere il problema." + + + + "%s non supportata" "Il dispositivo non supporta il seguente elemento: %s. Tocca per configurare un formato supportato." "Il dispositivo non supporta questo tipo di %s. Seleziona per eseguire la configurazione in un formato supportato." "Rimozione imprevista della %s" - "Per evitare di perdere dati, smonta la %s prima di rimuoverla" - "%s rimossa" - "%s rimossa; inseriscine un\'altra" - "Espulsione %s ancora in corso…" - "Non rimuovere" + + + + + + + + + + "Configura" "Espelli" "Apri" "%s mancante" - "Reinserisci il dispositivo" + + "Spostamento di %s in corso" "Spostamento dei dati in corso" - "Spostamento completato" - "Dati spostati sulla %s" - "Impossibile spostare i dati" - "Dati lasciati nella posizione originaria" + + + + + + + + "Rimosso" "Espulso" "Verifica…" @@ -1676,8 +1707,7 @@ "Installato dall\'amministratore" "Aggiornato dall\'amministratore" "Eliminato dall\'amministratore" - - + "Per prolungare la durata della batteria, la funzione Risparmio energetico riduce le prestazioni del dispositivo e limita o disattiva la vibrazione, i servizi di geolocalizzazione e i dati in background. Email, Messaggi e altre app basate sulla sincronizzazione potrebbero non essere aggiornate finché non le apri.\n\nLa funzione Risparmio energetico viene disattivata automaticamente quando il dispositivo è in carica." "Per contribuire a ridurre l\'utilizzo dei dati, la funzione Risparmio dati impedisce ad alcune app di inviare o ricevere dati in background. Un\'app in uso può accedere ai dati, ma potrebbe farlo con meno frequenza. Esempio: le immagini non vengono visualizzate finché non le tocchi." "Attivare Risparmio dati?" "Attiva" @@ -1728,22 +1758,14 @@ "Audio disattivato da %1$s" "Si è verificato un problema interno con il dispositivo, che potrebbe essere instabile fino al ripristino dei dati di fabbrica." "Si è verificato un problema interno con il dispositivo. Per informazioni dettagliate, contatta il produttore." - - - - - - - - - - - - - - - - + "Richiesta USSD modificata in chiamata normale" + "Richiesta USSD modificata in richiesta SS" + "Modificata in nuova richiesta USSD" + "Richiesta USSD modificata in videochiamata" + "Richiesta SS modificata in chiamata normale" + "Richiesta SS modificata in videochiamata" + "Richiesta SS modificata in richiesta USSD" + "Modificata in nuova richiesta SS" "Profilo di lavoro" "Espandi" "Comprimi" @@ -1841,6 +1863,14 @@ "SIM non predisposta per la voce" "SIM non consentita per la voce" "Telefono non consentito per la voce" + + + + + + + + "Finestra popup" "+ %1$d" "È stato eseguito il downgrade della versione dell\'app oppure la versione non è compatibile con questa scorciatoia" diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index 56cafa9086b8368ff50b8952238a0fcb1774025e..51df2532386d2885e79559d57530339d6b120b67 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -79,15 +79,17 @@ "זיהוי מתקשר עובר כברירת מחדל למצב לא מוגבל. השיחה הבאה: לא מוגבלת" "השירות לא הוקצה." "אינך יכול לשנות את הגדרת זיהוי המתקשר." - "חבילת הגלישה לא זמינה" - "אין גישה לשיחות חירום" + "אין שירות של חבילת גלישה" + "שיחות חירום לא זמינות" "אין אפשרות לבצע שיחות רגילות" - "אין אפשרות לבצע שיחות חירום ושיחות קוליות רגילות" - "הרשת הסלולרית במיקום הזה חסמה את השירות באופן זמני" - "לא ניתן להתחבר לרשת" - "כדי לשפר את הקליטה, כדאי לנסות לשנות את סוג הרשת בהגדרות > רשת ואינטרנט > רשתות סלולריות > סוג רשת מועדף." - "‏שיחות ה-Wi-Fi מופעלות" - "כדי לבצע שיחות חירום, יש להתחבר לרשת סלולרית." + "אין שירות קולי או שיחות חירום" + "הושבת באופן זמני על ידי הספק" + + + "לא ניתן להתחבר לרשת הסלולרית" + "יש לנסות לשנות את הרשת המועדפת. ניתן להקיש כדי לשנות." + "שיחות חירום לא זמינות" + "‏לא ניתן לבצע שיחות חירום דרך Wi-Fi" "התראות" "העברת שיחות" "מצב \'התקשרות חזרה בחירום\'" @@ -122,12 +124,12 @@ "מודעת באנר נודדת מופעלת" "מודעת באנר נודדת כבויה" "מחפש שירות" - "‏שיחות ב-Wi-Fi" + "‏לא ניתן היה להגדיר שיחות Wi-Fi" "‏כדי להתקשר ולשלוח הודעות ברשת Wi-Fi, תחילה יש לבקש מהספק להגדיר את השירות. לאחר מכן, יש להפעיל שוב שיחות Wi-Fi ב\'הגדרות\'. (קוד שגיאה: %1$s)" - "יש להירשם אצל הספק (קוד שגיאה: %1$s)" + "‏אירעה בעיה ברישום שיחות Wi-Fi אצל הספק שלך: %1$s" "%s" @@ -162,8 +164,8 @@ "בקשות רבות מדי מעובדות. נסה שוב מאוחר יותר." "שגיאת כניסה עבור %1$s" "סנכרון" - "סנכרון" - "יש מחיקות רבות מדי של %s." + "לא ניתן לסנכרן" + "נעשה ניסיון למחוק יותר מדי %s." "שטח האחסון של הטאבלט מלא. מחק קבצים כדי לפנות מקום." "שטח האחסון של השעון מלא. מחק כמה קבצים כדי לפנות שטח." "האחסון בטלוויזיה מלא. מחק חלק מהקבצים כדי לפנות שטח." @@ -178,14 +180,13 @@ "על ידי המנהל של פרופיל העבודה שלך" "על ידי %s" "פרופיל העבודה נמחק" - "פרופיל העבודה נמחק מפני שחסרה אפליקציית ניהול" "אפליקציית הניהול של פרופיל העבודה חסרה או פגומה. כתוצאה מכך, פרופיל העבודה שלך נמחק, כולל כל הנתונים הקשורים אליו. לקבלת עזרה, פנה למנהל המערכת." "פרופיל העבודה שלך אינו זמין עוד במכשיר הזה" "בוצעו ניסיונות רבים מדי להזנת סיסמה" "המכשיר מנוהל" "הארגון שלך מנהל מכשיר זה ועשוי לנטר את התנועה ברשת. הקש לקבלת פרטים." "תתבצע מחיקה של המכשיר" - "לא ניתן להשתמש באפליקציה של מנהל המערכת.\n\nאם יש לך שאלות, פנה למנהל המערכת של הארגון." + "לא ניתן להשתמש באפליקציה של מנהל המערכת.\n\nאם יש לך שאלות, יש ליצור קשר עם מנהל המערכת של הארגון." "ההדפסה הושבתה על ידי %s." "אני" "אפשרויות טאבלט" @@ -242,6 +243,9 @@ "מצב טיסה" "מצב טיסה מופעל" "מצב טיסה כבוי" + "חיסכון בסוללה" + "תכונת החיסכון בסוללה כבויה" + "תכונת החיסכון בסוללה פועלת" "הגדרות" "סיוע" "Voice Assist" @@ -275,31 +279,31 @@ "החלפה לפרופיל עבודה" "אנשי קשר" "גישה אל אנשי הקשר" - "‏האפליקציה <b>%1$s</b> תקבל הרשאת גישה לאנשי הקשר שלך" + "‏לתת לאפליקציה <b>%1$s</b> הרשאת גישה לאנשי הקשר שלך?" "מיקום" "גישה אל מיקום המכשיר הזה" - "‏האפליקציה <b>%1$s</b> תקבל הרשאת גישה למיקום המכשיר" + "‏לתת לאפליקציה <b>%1$s</b> הרשאת גישה למיקום המכשיר?" "יומן" "גישה אל היומן" - "‏האפליקציה <b>%1$s</b> תקבל הרשאת גישה ליומן" + "‏לתת לאפליקציה <b>%1$s</b> הרשאת גישה ליומן?" "SMS" "‏שליחה והצגה של הודעות SMS" - "‏האפליקציה <b>%1$s</b> תקבל הרשאה לשלוח הודעות SMS ולהציג אותן" + "‏לתת לאפליקציה <b>%1$s</b> הרשאה לשלוח הודעות SMS ולהציג אותן?" "אחסון" "גישה אל תמונות, מדיה וקבצים במכשיר שלך" - "‏האפליקציה <b>%1$s</b> תקבל הרשאת גישה לתמונות, למדיה ולקבצים במכשיר" + "‏לתת לאפליקציה <b>%1$s</b> הרשאת גישה לתמונות, למדיה ולקבצים במכשיר?" "מיקרופון" "הקלטת אודיו" - "‏האפליקציה <b>%1$s</b> תקבל הרשאה להקליט אודיו" + "‏לתת לאפליקציה <b>%1$s</b> הרשאה להקליט אודיו?" "מצלמה" "צילום תמונות והקלטת וידאו" - "‏האפליקציה <b>%1$s</b> תקבל הרשאה לצלם תמונות וסרטונים" + "‏לתת לאפליקציה <b>%1$s</b> הרשאה לצלם תמונות וסרטונים?" "טלפון" "התקשרות וניהול של שיחות טלפון" - "‏האפליקציה <b>%1$s</b> תקבל הרשאה להתקשרות ולניהול של שיחות טלפון" + "‏לתת לאפליקציה <b>%1$s</b> הרשאה להתקשרות ולניהול של שיחות טלפון?" "חיישני גוף" "גישה אל נתוני חיישנים של הסימנים החיוניים שלך" - "‏האפליקציה <b>%1$s</b> תקבל הרשאת גישה לנתוני חיישנים העוקבים אחר הסימנים החיוניים שלך" + "‏לתת לאפליקציה <b>%1$s</b> הרשאת גישה לנתוני חיישנים העוקבים אחר הסימנים החיוניים שלך?" "אחזור תוכן של חלון" "בדוק את התוכן של חלון שאיתו אתה מבצע אינטראקציה." "הפעלה של \'גילוי באמצעות מגע\'" @@ -311,7 +315,7 @@ "ביצוע תנועות" "יכול להקיש, להחליק, לעשות תנועת צביטה ולבצע תנועות אחרות." "תנועות" - "אפשרות לזהות תנועות בזמן נגיעה בחיישן טביעות האצבע של המכשיר" + "אפשרות לזהות תנועות בזמן נגיעה בחיישן טביעות האצבע של המכשיר." "השבת או שנה את שורת המצב" "מאפשר לאפליקציה להשבית את שורת המצב או להוסיף ולהסיר סמלי מערכת." "להיות שורת הסטטוס" @@ -362,6 +366,8 @@ "מאפשר לאפליקציה להפוך חלקים ממנו לקבועים בזיכרון. פעולה זו עשויה להגביל את הזיכרון הזמין לאפליקציות אחרים ולהאט את פעולת הטאבלט." "מאפשרת לאפליקציה ליצור חלקים ממנה השמורים בזיכרון באופן עקבי. הדבר עלול להגביל את הזיכרון הזמין לאפליקציות אחרות וכתוצאה מכך להאט את פעולת הטלוויזיה." "מאפשר לאפליקציה להפוך חלקים ממנו לקבועים בזיכרון. פעולה זו עשויה להגביל את הזיכרון הזמין לאפליקציות אחרים ולהאט את פעולת הטלפון." + "הרצת שירות קדמה" + "הרשאה זו מאפשרת לאפליקציה לעשות שימוש בשירותים בקדמה." "מדידת נפח האחסון של אפליקציות" "מאפשר לאפליקציה לאחזר את הקוד, הנתונים, וגודלי קובצי המטמון שלו" "שינוי הגדרות מערכת" @@ -484,6 +490,10 @@ "מאפשר לאפליקציה נהל תקשורת עם תגים, כרטיסים וקוראים מסוג \'תקשורת מטווח קצר\'." "ביטול נעילת המסך שלך" "מאפשר לאפליקציה להשבית את נעילת המקשים וכל אמצעי אבטחה משויך המבוסס על סיסמה. לדוגמה, הטלפון משבית את נעילת המקשים בעת קבלה של שיחת טלפון נכנסת, ולאחר מכן מפעיל מחדש את נעילת המקשים עם סיום השיחה." + + + + "ניהול חומרה של טביעות אצבעות" "מאפשר לאפליקציה להפעיל שיטות להוספה ומחיקה של תבניות טביעות אצבעות שבהן ייעשה שימוש." "חומרה של טביעות אצבעות" @@ -496,6 +506,8 @@ "לא זוהתה" + + "החומרה בשביל טביעת אצבע אינה זמינה." "לא ניתן לאחסן טביעת אצבע. הסר טביעת אצבע קיימת." "חלף הזמן הקצוב לטביעת אצבע. נסה שוב." @@ -808,6 +820,8 @@ "ביטול נעילה על ידי שרטוט קו." "ביטול נעילה באמצעות זיהוי פנים." "ביטול נעילה באמצעות קוד גישה." + "‏ביטול נעילה של קוד הגישה ל-SIM." + "‏ביטול נעילה של PUK ל-SIM." "ביטול נעילה באמצעות סיסמה." "אזור לשרטוט קו ביטול נעילה." "אזור הסטה." @@ -869,6 +883,12 @@ "הטקסט הועתק ללוח." "עוד" "תפריט+" + "Meta+" + "Ctrl+‎" + "Alt+" + "Shift+" + "Sym+" + "Function+" "רווח" "Enter" "מחיקה" @@ -1034,14 +1054,32 @@ "שיטת קלט" "פעולות טקסט" "אימייל" + + "שיחה" + + "איתור" + + "פתיחה" + + "הודעה" + + "הוספה" + + "תצוגה" + + "לוח זמנים" + + "מעקב" + + "שטח האחסון אוזל" "ייתכן שפונקציות מערכת מסוימות לא יפעלו" "‏אין מספיק שטח אחסון עבור המערכת. ודא שיש לך שטח פנוי בגודל 250MB התחל שוב." @@ -1114,31 +1152,28 @@ "האם יש עדכון חדש?" "‏האפליקציה %1$s (תהליך %2$s) הפר את מדיניות StrictMode באכיפה עצמית שלו." "‏התהליך %1$s הפר את מדיניות StrictMode באכיפה עצמית." - "‏Android מבצע שדרוג…" - "‏הפעלת Android מתחילה…" + "הטלפון מתעדכן…" + "הטאבלט מתעדכן…" + "הפעלת המכשיר מתחילה…" + "הפעלת הטלפון מתחילה…" + "הפעלת הטאבלט מתחילה…" + "הפעלת המכשיר מתחילה…" "מתבצעת אופטימיזציה של האחסון." - "‏מסיים עדכון Android…" - "ייתכן שאפליקציות מסוימות לא יפעלו כראוי עד סיום השדרוג" + "עדכון המערכת לקראת סיום…" "%1$s מבצעת שדרוג…" "מבצע אופטימיזציה של אפליקציה %1$d מתוך %2$d." "מכין את %1$s." "מפעיל אפליקציות." "מסיים אתחול." "%1$s פועל" - - - - - - - - - - - - + "יש להקיש כדי לחזור למשחק" + "בחירת משחק" + "לקבלת ביצועים טובים יותר, רק אחד מבין המשחקים האלה יכול להיות פתוח בכל פעם." + "חזרה אל %1$s" + "פתיחת %1$s" + "%1$s האפליקציה תיסגר ללא שמירה" "%1$s חורג מהגבלת הזיכרון" - "‏Dump של ערימה נאסף. הקש כדי לשתף" + "‏Dump של ערימה נאסף. יש להקיש כדי לשתף." "‏האם לשתף את נתוני ה-Dump של הערימה?" "‏התהליך %1$s חרג ממגבלת זיכרון התהליך שלו, בגודל %2$s. נתונים על Dump של ערימה זמינים לך לשיתוף עם המפתח של התהליך. זהירות: ה-Dump של הערימה יכול להכיל מידע אישי הזמין לאפליקציה." "בחירת פעולה לביצוע עם טקסט" @@ -1177,12 +1212,12 @@ "‏התחברות לרשת Wi‑Fi פתוחה" "‏התחברות לרשת Wi‑Fi של ספק" - "‏מתחבר לרשת Wi‑Fi פתוחה" + "‏התחברות לרשת Wi-Fi" "‏מחובר לרשת Wi-Fi" "‏לא ניתן היה להתחבר לרשת Wi-Fi" "יש להקיש כדי לראות את כל הרשתות" "התחבר" - "כל הרשתות" + "כל הרשתות" "‏ה-Wi-Fi יופעל אוטומטית" "כשתימצאו בקרבת רשת באיכות גבוהה ששמרתם" "אל תפעיל שוב" @@ -1248,6 +1283,7 @@ "הפעלה מחדש" "הפעלה של השירות הסלולרי" "‏הורדה של אפליקציית הספק כדי להפעיל את כרטיס ה-SIM החדש" + "‏ניתן להוריד את האפליקציה %1$s כדי להפעיל את כרטיס ה-SIM החדש" "הורדת אפליקציה" "‏ה-SIM החדש הוכנס" "הקש כדי להגדיר" @@ -1266,13 +1302,13 @@ "‏PTP באמצעות USB מופעל" "‏שיתוף אינטרנט בין מכשירים באמצעות USB מופעל" "‏MIDI באמצעות USB מופעל" - "‏מצב אביזר USB מופעל" + "‏אביזר USB מחובר" "הקש לקבלת אפשרויות נוספות." "טעינת המכשיר המחובר. יש להקיש לאפשרויות נוספות." "המכשיר זיהה התקן אודיו אנלוגי" "ההתקן שחיברת לא תואם לטלפון הזה. הקש למידע נוסף." "‏ניפוי באגים של USB מחובר" - "‏יש להקיש כדי להשבית ניפוי באגים של USB." + "‏יש להקיש כדי לכבות את ניפוי הבאגים ב-USB" "‏בחר להשבית ניפוי באגים ב-USB." "עיבוד דוח על באג..." "האם לשתף דוח על באג?" @@ -1291,34 +1327,50 @@ "תצוגה של %s מעל אפליקציות אחרות" "%s מוצגת מעל אפליקציות אחרות" "אם אינך רוצה ש-%s תשתמש בתכונה הזו, הקש כדי לפתוח את ההגדרות ולכבות אותה." - "כבה" - "הכנת %s" - "בודק אם יש שגיאות" - "זוהה %s חדש" + "כיבוי" + + + + + + + + "להעברת תמונות ומדיה" - "%s פגום" - "%s פגום. הקש כדי לתקן." - "%s פגום. בחר כדי לטפל בבעיה." + + + + "%s לא נתמך" "מכשיר זה אינו תומך ב-%s זה. הקש כדי להגדיר בפורמט נתמך." "%s לא נתמך במכשיר הזה. בחר כדי להגדיר בפורמט שנתמך." "%s הוסר באופן בלתי צפוי" - "בטל טעינה של %s לפני הסרתו כדי למנוע אובדן נתונים" - "%s הוסר" - "%s הוסר. הכנס מדיה חדשה" - "הוצאת %s נמשכת..." - "אל תסיר" + + + + + + + + + + "הגדר" "הוצא" "גלה" "%s חסר" - "הכנס שוב את ההתקן הזה" + + "מעביר את %s" "מעביר נתונים" - "ההעברה הושלמה" - "הנתונים הועברו אל %s" - "לא ניתן היה להעביר את הנתונים" - "הנתונים נותרו במיקום המקורי" + + + + + + + + "הוסר" "הוצא" "בודק…" @@ -1377,14 +1429,14 @@ "‏ה-VPN שמופעל תמיד, מתחבר..." "‏ה-VPN שפועל תמיד, מחובר" "‏אין חיבור ל-VPN שפועל כל הזמן" - "‏שגיאת VPN שמופעל תמיד" + "‏לא ניתן להתחבר ל-VPN שפועל כל הזמן" "‏רוצה לשנות את הגדרות הרשת או הגדרות ה-VPN?" "בחירת קובץ" "לא נבחר קובץ" "איפוס" "שלח" - "מצב מכונית מופעל" - "הקש כדי לצאת ממצב מכונית." + "אפליקציית הנהיגה פועלת" + "יש להקיש כדי לצאת מאפליקציית הנהיגה." "שיתוף אינטרנט פעיל" "הקש כדי להגדיר." "שיתוף האינטרנט בין ניידים מושבת" @@ -1464,22 +1516,19 @@ "‏כונן USB של %s" "‏אחסון USB" "עריכה" - "התראה על שימוש בנתונים" - "הקש כדי להציג נתוני שימוש והגדרות." - "‏הגעת למגבלת הנתונים של 2G-3G" - "‏הגעת למגבלת הנתונים של 4G" + "אזהרה לגבי שימוש בנתונים" + "השתמשת ב-%s נתונים" "הגעת למגבלה של חבילת הגלישה" "‏הגעת למגבלת נתוני Wi-Fi" - "הנתונים הושהו למשך המחזור" - "‏אירעה חריגה ממגבלת הנתונים של 2G-3G" - "‏אירעה חריגה ממגבלת הנתונים של 4G" - "אירעה חריגה ממגבלת הנתונים לנייד" - "‏אירעה חריגה ממגבלת הנתונים של Wi-Fi" - "%s מעל למגבלה שצוינה." + "הנתונים הושהו להמשך המחזור" + "חריגה מהמגבלה של חבילת הגלישה" + "‏חריגה ממגבלת נתוני ה-Wi-Fi" + "חרגת ב-%s מעבר למגבלה המוגדרת" "נתוני הרקע מוגבלים" "הקש כדי להסיר את ההגבלה." - "שימוש נרחב בחבילת הגלישה" - "נפח השימוש שלך בחבילת הגלישה במהלך הימים האחרונים גדול מהרגיל. יש להקיש כדי להציג נתוני שימוש והגדרות." + "שימוש מוגבר בחבילת הגלישה" + "האפליקציות שלך השתמשו בנתונים רבים יותר מהרגיל" + "האפליקציה %s השתמשה בנתונים רבים יותר מהרגיל" "אישור אבטחה" "אישור זה תקף." "הוקצה ל:" @@ -1719,7 +1768,7 @@ "הותקנה על ידי מנהל המערכת" "עודכנה על ידי מנהל המערכת" "נמחקה על ידי מנהל המערכת" - "כדי לעזור בשיפור חיי הסוללה, תכונת החיסכון בסוללה מצמצמת את פעולות המכשיר ומגבילה רטט, שירותי מיקום ואת רוב נתוני הרקע. אימייל, העברת הודעות ואפליקציות אחרות המסתמכות על סנכרון עשויות שלא להתעדכן, אלא אם תפתחו אותן.\n\nתכונת החיסכון בסוללה מושבתת אוטומטית כשהמכשיר בטעינה." + "כדי להאריך את חיי הסוללה, תכונת החיסכון בסוללה מצמצמת את ביצועי המכשיר ומגבילה רטט, שירותי מיקום ונתוני רקע, או מכבה אותם. הודעות אימייל, העברת הודעות ואפליקציות אחרות המסתמכות על סנכרון עשויות שלא להתעדכן, אלא אם תפתח/י אותן.\n\nתכונת החיסכון בסוללה מושבתת אוטומטית כשהמכשיר בטעינה." "‏כדי לסייע בהפחתת השימוש בנתונים, חוסך הנתונים (Data Saver) מונע מאפליקציות מסוימות שליחה או קבלה של נתונים ברקע. אפליקציה שבה אתה משתמש כרגע יכולה לגשת לנתונים, אבל בתדירות נמוכה יותר. משמעות הדבר היא, למשל, שתמונות יוצגו רק לאחר שתקיש עליהן." "‏האם להפעיל את חוסך הנתונים (Data Saver)?" "הפעל" @@ -1735,10 +1784,10 @@ ‏למשך %1$d דקות (עד %2$s) למשך דקה אחת (עד %2$s) - - ‏למשך %d שעות (עד %2$s) - ‏למשך %d שעות (עד %2$s) - ‏למשך %d שעות (עד %2$s) + + ‏למשך %1$d שעות (עד %2$s) + ‏למשך %1$d שעות (עד %2$s) + ‏למשך %1$d שעות (עד %2$s) למשך שעה אחת (עד %2$s) @@ -1759,7 +1808,7 @@ ‏למשך %d דקות למשך דקה אחת - + ‏למשך %d שעות ‏למשך %d שעות ‏למשך %d שעות @@ -1786,14 +1835,14 @@ "הושתק על ידי %1$s" "קיימת בעיה פנימית במכשיר שלך, וייתכן שהתפקוד שלו לא יהיה יציב עד שתבצע איפוס לנתוני היצרן." "קיימת בעיה פנימית במכשיר שלך. לקבלת פרטים, צור קשר עם היצרן." - "‏בקשת USSD שונתה לבקשת DIAL." - "‏בקשת USSD שונתה לבקשת SS." - "‏בקשת USSD שונתה לבקשת USSD חדשה." - "‏בקשת USSD שונתה לבקשת Video DIAL." - "‏בקשת SS שונתה לבקשת DIAL." - "‏בקשת SS שונתה לבקשת Video DIAL." - "‏בקשת SS שונתה לבקשת USSD." - "‏בקשת SS שונתה לבקשת SS חדשה." + "‏בקשת USSD שונתה לשיחה רגילה" + "‏בקשת USSD שונתה לבקשת SS" + "‏היה שינוי לבקשת USSD חדשה" + "‏בקשת USSD שונתה לשיחת וידאו" + "‏בקשת SS שונתה לשיחה רגילה" + "‏בקשת SS שונתה לשיחת וידאו" + "‏בקשת SS שונתה לבקשת USSD" + "‏היה שינוי לבקשת SS חדשה" "פרופיל עבודה" "הרחב" "כווץ" @@ -1895,6 +1944,14 @@ "‏ניהול התצורה של כרטיס ה-SIM לא מתאים לזיהוי קולי" "‏כרטיס ה-SIM לא מורשה לזיהוי קולי" "הטלפון לא מורשה לזיהוי קולי" + + + + + + + + "חלון קופץ" "+ %1$d" "גרסת האפליקציה שודרגה לאחור או שאינה תואמת לקיצור דרך זה" @@ -1907,7 +1964,14 @@ "אותרה אפליקציה מזיקה" "%1$s רוצה להציג חלקים מ-%2$s" "עריכה" + "שיחות והודעות ירטטו" + "שיחות והודעות יושתקו" "שינויי מערכת" + "נא לא להפריע" + "מצב \'נא לא להפריע\' מסתיר הודעות כדי לעזור לך להתרכז" + "זו התנהגות חדשה. יש להקיש כדי לשנות." "ההגדרה \'נא לא להפריע\' השתנתה" - "יש להקיש כדי לבדוק את הגדרות הביצועים להפרעות" + "יש להקיש כדי לבדוק מה חסום." + "מערכת" + "הגדרות" diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 16abaca2eeabf079117f6519e747a816a148ce84..485793b36e7b786a2621abf436fdaa608f5d8aa9 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -82,6 +82,8 @@ "音声通話サービス停止" "音声サービスと緊急通報のブロック" "携帯通信会社によって一時的に OFF にされています" + + "モバイル ネットワークにアクセスできません" "タップして、優先ネットワークを変更してください。" "緊急通報は利用できません" @@ -120,12 +122,13 @@ "ローミングバナーON" "ローミングバナーOFF" "サービスを検索中" - - + "Wi‑Fi 通話をセットアップできませんでした" "Wi-Fi 経由で音声通話の発信やメッセージの送信を行うには、携帯通信会社に Wi-Fi サービスを申し込んだ上で、設定画面で Wi-Fi 通話を再度 ON にしてください(エラーコード: %1$s)" - + + "携帯通信会社への Wi‑Fi 通話の登録中に問題が発生しました(%1$s)" + "%s" "Wi-Fi通話(%s)" @@ -481,6 +484,8 @@ "NFCタグ、カード、リーダーとの通信をアプリに許可します。" "画面ロックの無効化" "キーロックとキーロックに関連付けられたパスワードのセキュリティを無効にすることをアプリに許可します。たとえば、かかってきた電話を受ける際にキーロックを無効にし、通話が終了したらキーロックを再度有効にする場合などに使用します。" + "生体認証ハードウェアの使用" + "生体認証ハードウェアを認証に使用することをアプリに許可します" "指紋ハードウェアの管理" "使用する指紋テンプレートの追加や削除を行う方法の呼び出しをアプリに許可します。" "指紋ハードウェアの使用" @@ -493,6 +498,8 @@ "認識されませんでした" + + "指紋ハードウェアは使用できません。" "指紋を保存できません。既存の指紋を削除してください。" "指紋の読み取りがタイムアウトになりました。もう一度お試しください。" @@ -1005,14 +1012,23 @@ "入力方法" "テキスト操作" "メール" + "選択したメールアドレスにメールを送信します" "電話" + "選択した電話番号に電話をかけます" "探す" + "選択した住所を探します" "開く" + "選択した URL を開きます" "メッセージ" + "選択した電話番号に SMS を送信します" "追加" + "連絡先に追加します" "表示" + "カレンダーで選択した日時を表示します" "スケジュール" + "選択した日時に予定を設定します" "トラック" + "選択したフライトをチェックします" "空き容量わずか" "一部のシステム機能が動作しない可能性があります" "システムに十分な容量がありません。250MBの空き容量を確保して再起動してください。" @@ -1141,8 +1157,7 @@ "Wi-Fi オープン ネットワークに接続" "携帯通信会社の Wi‑Fi ネットワークに接続" - - + "Wi-Fi ネットワークに接続中" "Wi-Fi ネットワークに接続しました" "Wi‑Fi ネットワークに接続できませんでした" "すべてのネットワークを表示するにはタップします" @@ -1258,33 +1273,49 @@ "%sが他のアプリの上に表示されています" "%sでこの機能を使用しない場合は、タップして設定を開いて OFF にしてください。" "OFF にする" - "%sを準備中" - "エラーを確認中" - "新しい%sが検出されました" + + + + + + + + "写真などのメディア転送用" - "%sは破損しています" - "%sは破損しています。タップして修正してください。" - "%sが破損しています。修正するには選択してください。" + + + + "対応していない%sです" "この端末はこの %sに対応していません。タップして、対応している形式でセットアップしてください。" "この端末はこの %sに対応していません。サポートされるフォーマットで設定するには選択してください。" "%sが不適切に取り外されました" - "データの喪失を防ぐため%sを取り外す前にマウントを解除してください。" - "%sが取り外されました" - "%sが取り外されました。新しいものを挿入してください。" - "まだ%sを取り外し中です…" - "取り外さないでください" + + + + + + + + + + "セットアップ" "取り外し" "外部メディア" "%sが見つかりません" - "このデバイスを再挿入してください" + + "%sを移動しています" "データを移動しています" - "移動が完了しました" - "データを%sに移動しました" - "データを移動できませんでした" - "データは元の場所にあります" + + + + + + + + "取り外しました" "取り外しました" "確認しています…" @@ -1676,8 +1707,7 @@ "管理者によりインストールされています" "管理者により更新されています" "管理者により削除されています" - - + "バッテリーを長持ちさせるため、バッテリー セーバーは端末のパフォーマンスを抑え、バイブレーション、位置情報サービス、バックグラウンド データを制限したり、OFF にしたりします。同期を使用するメールやメッセージなどのアプリは起動しないと更新されない場合があります。\n\nバッテリー セーバーは端末の充電中は自動的に OFF になります。" "データセーバーは、一部のアプリによるバックグラウンドでのデータ送受信を停止することでデータ使用量を抑制します。使用中のアプリからデータにアクセスすることはできますが、その頻度は低くなる場合があります。この影響として、たとえば画像はタップしないと表示されないようになります。" "データセーバーを ON にしますか?" "ON にする" @@ -1728,22 +1758,14 @@ "%1$sによりミュートになっています" "端末で内部的な問題が発生しました。データが初期化されるまで不安定になる可能性があります。" "端末で内部的な問題が発生しました。詳しくはメーカーにお問い合わせください。" - - - - - - - - - - - - - - - - + "USSD リクエストは通常の通話に変更されました" + "USSD リクエストは SS リクエストに変更されました" + "新しい USSD リクエストに変更されました" + "USSD リクエストはビデオ通話に変更されました" + "SS リクエストは通常の通話に変更されました" + "SS リクエストはビデオ通話に変更されました" + "SS リクエストは USSD リクエストに変更されました" + "新しい SS リクエストに変更されました" "仕事用プロファイル" "展開" "折りたたむ" @@ -1841,6 +1863,14 @@ "音声に対応していない SIM です" "音声を使用できない SIM です" "音声を使用できないスマートフォンです" + + + + + + + + "ポップアップ ウィンドウ" "他 %1$d 件" "アプリのバージョンがダウングレードされているか、このショートカットに対応していません" diff --git a/core/res/res/values-ka/strings.xml b/core/res/res/values-ka/strings.xml index 7bee20113ab1c86643fdec09160aff9ab06dda13..0b5f1e19337679cf541f99cb7d00e779f6ce727e 100644 --- a/core/res/res/values-ka/strings.xml +++ b/core/res/res/values-ka/strings.xml @@ -82,6 +82,8 @@ "ხმოვანი ზარების სერვისი არ არის" "ხმოვანი სერვისები და გადაუდებელი ზარი მიუწვდომელია" "დროებით გამორთულია თქვენი ოპერატორის მიერ" + + "მობილურ ქსელთან დაკავშირება ვერ ხერხდება" "ცადეთ უპირატესი ქსელის შეცვლა. შეეხეთ შესაცვლელად." "გადაუდებელი ზარი მიუწვდომელია" @@ -120,12 +122,13 @@ "Roaming Banner ჩართულია" "როუმინგის ბანერი გამორთულია" "სერვისის ძიება" - - + "Wi‑Fi დარეკვის დაყენება ვერ მოხერხდა" "Wi-Fi-ს მეშვეობით ზარების განსახორციელებლად ან შეტყობინებების გასაგზავნად, პირველ რიგში, ამ სერვისის გააქტიურება თქვენს ოპერატორს უნდა თხოვოთ. შემდეგ კი ხელახლა ჩართეთ Wi-Fi დარეკვა პარამეტრებიდან. (შეცდომის კოდი: %1$s)" - + + "Wi‑Fi დარეკვის თქვენს ოპერატორთან რეგისტრირებისას შეცდომა წარმოიქმნა: %1$s" + "%s" "%s დარეკვა Wi-Fi-ს მეშვეობით" @@ -481,6 +484,8 @@ "აპს შეეძლება ახლო მოქმედების რადიოკავშირის (NFC) მეშვეობით ტეგების, ბარათებისა და წამკითხველების შემცველი მონაცემების მიმოცვლა." "თქვენი ეკრანის ბლოკის გათიშვა" "შეეძლება კლავიატურის დაბლოკვისა და პაროლით უზრუნველყოფილი ნებისმიერი უსაფრთხოების ფუნქციის დეაქტივაცია. მაგალითად, ტელეფონი შემომავალი ზარის დროს აუქმებს კლავიატურის დაბლოკვას და კვლავ ააქტიურებს მას, როგორც კი ზარი დასრულდება." + "ბიომეტრიული აპარატის გამოყენება" + "საშუალებას აძლევს აპს, ავტორიზაციისთვის გამოიყენოს ბიომეტრიული აპარატი" "თითის ანაბეჭდის აპარატის მართვა" "საშუალებას აძლევს აპლიკაციას დაამატოს ან ამოშალოს გამოსაყენებელი თითის ანაბეჭდის ნიმუშები," "თითის ანაბეჭდის აპარატის გამოყენება" @@ -493,6 +498,8 @@ "არ არის ამოცნობილი" + + "თითის ანაბეჭდის აპარატურა არ არის ხელმისაწვდომი." "თითის ანაბეჭდის შენახვა ვერ ხერხდება. გთხოვთ, ამოშალოთ არსებული თითის ანაბეჭდი." "თითის ანაბეჭდის ლოდინის დრო ამოიწურა. სცადეთ ხელახლა." @@ -1005,14 +1012,23 @@ "შეყვანის მეთოდი" "ქმედებები ტექსტზე" "ელფოსტა" + "არჩეულ მისამართზე ელფოსტის გაგზავნა" "ზარი" + "არჩეულ ტელეფონის ნომერზე დარეკვა" "მიკვლევა" + "არჩეული მისამართის მდებარეობის დადგენა" "გახსნა" + "არჩეული URL-ის გახსნა" "შეტყობინება" + "არჩეული ტელეფონის ნომრისთვის შეტყობინების გაგზავნა" "დამატება" + "დამატება" "ნახვა" + "არჩეული დროის კალენდარში ნახვა" "განრიგი" + "მოვლენის არჩეული დროისთვის დაგეგმვა" "ჩანაწერი" + "არჩეული ფრენისთვის თვალის მიდევნება" "თავისუფალი ადგილი იწურება" "სისტემის ზოგიერთმა ფუნქციამ შესაძლოა არ იმუშავოს" "სისტემისათვის საკმარისი საცავი არ არის. დარწმუნდით, რომ იქონიოთ სულ მცირე 250 მბაიტი თავისუფალი სივრცე და დაიწყეთ ხელახლა." @@ -1141,8 +1157,7 @@ "დაუკავშირდით ღია Wi‑Fi ქსელს" "დაუკავშირდით ოპერატორის Wi‑Fi-ქსელს" - - + "მიმდინარეობს Wi‑Fi ქსელთან დაკავშირება" "Wi‑Fi ქსელთან დაკავშირება წარმატებით მოხერხდა" "Wi‑Fi ქსელთან დაკავშირება ვერ მოხერხდა" "შეეხეთ ყველა ქსელის სანახავად" @@ -1258,33 +1273,49 @@ "%s ნაჩვენებია სხვა აპების ინტერფეისის გადაფარვით" "თუ არ გსურთ %s-ის მიერ ამ ფუნქციის გამოყენება, შეეხეთ პარამეტრების გასახსნელად და გამორთეთ." "გამორთვა" - "%s-ის მომზადება" - "შეცდომების შემოწმება" - "აღმოჩენილია ახალი %s" + + + + + + + + "ფოტოებისა და მედიის გადასატანად" - "დაზიანებული %s" - "%s დაზიანებულია. შეეხეთ გასასწორებლად." - "%s დაზიანებულია. შეეხეთ გასასწორებლად." + + + + "მხარდაუჭერელი %s" "ეს %s მხარდაუჭერელია არ მოწყობილობაზე. შეეხეთ მხარდაჭერილ ფორმატში დასაყენებლად." "ეს %s მხარდაუჭერელია ამ მოწყობილობაზე. შეეხეთ მხარდაჭერილ ფორმატში დასაყენებლად." "მოულოდნელად მოხდა %s-ის ამოღება" - "მონაცემთა დაკარგვის თავიდან ასაცილებლად, ფიზიკურად ამოღებამდე, სისტემურად მოხსენით %s" - "%s ამოღებულია" - "%s ამოღებულია; ჩასვით ახალი" - "%s-ის გამოღება არ დასრულებულა…" - "არ ამოიღოთ" + + + + + + + + + + "დაყენება" "გამოღება" "დათვალიერება" "%s აკლია" - "ხელახლა შეაერთეთ ეს მოწყობილობა" + + "მიმდინარეობს %s-ის გადატანა" "მიმდინარეობს მონაცემთა გადატანა" - "გადატანა დასრულდა" - "მონაცემები გადატანილი იქნა %s-ში" - "მონაცემების გადატანა ვერ მოხერხდა" - "მონაცემები დარჩა თავდაპირველ მდებარეობაში" + + + + + + + + "ამოღებულია" "ჩახსნილია სისტემიდან" "შემოწმება..." @@ -1676,8 +1707,7 @@ "დაინსტალირებულია თქვენი ადმინისტრატორის მიერ" "განახლებულია თქვენი ადმინისტრატორის მიერ" "წაიშალა თქვენი ადმინისტრატორის მიერ" - - + "ბატარეის მუშაობის გასახანგრძლივებლად, ბატარეის დამზოგი ამცირებს თქვენი მოწყობილობის ფუნქციონალობას და ზღუდავს ან თიშავს ვიბრაციას, მდებარეობის სერვისებს და ფონურ მონაცემებს. ელფოსტა, შეტყობინებები და სხვა სინქრონიზაციაზე დამოკიდებული აპები მათ გახსნამდე არ განახლდება.\n\nბატარეის დამზოგი ავტომატურად გამოირთვება, როცა თქვენს მოწყობილობას დამტენთან შეაერთებთ." "მობილური ინტერნეტის მოხმარების შემცირების მიზნით, მონაცემთა დამზოგველი ზოგიერთ აპს ფონურ რეჟიმში მონაცემთა გაგზავნასა და მიღებას შეუზღუდავს. თქვენ მიერ ამჟამად გამოყენებული აპი მაინც შეძლებს მობილურ ინტერნეტზე წვდომას, თუმცა ამას ნაკლები სიხშირით განახორციელებს. ეს ნიშნავს, რომ, მაგალითად, სურათები არ გამოჩნდება მანამ, სანამ მათ საგანგებოდ არ შეეხებით." "ჩაირთოს მონაცემთა დამზოგველი?" "ჩართვა" @@ -1728,22 +1758,14 @@ "დადუმებულია %1$s-ის მიერ" "ფიქსირდება თქვენი მ ოწყობილობის შიდა პრობლემა და შეიძლება არასტაბილური იყოს, სანამ ქარხნულ მონაცემების არ განაახლებთ." "ფიქსირდება თქვენი მოწყობილობის შიდა პრობლემა. დეტალებისათვის, მიმართეთ თქვენს მწარმოებელს." - - - - - - - - - - - - - - - - + "USSD მოთხოვნა შეიცვალა ჩვეულებრივი ზარის მოთხოვნით" + "USSD მოთხოვნა შეიცვალა SS მოთხოვნით" + "შეიცვალა ახალი USSD მოთხოვნით" + "USSD მოთხოვნა შეიცვალა ვიდეოზარის მოთხოვნით" + "SS მოთხოვნა შეიცვალა ჩვეულებრივი ზარის მოთხოვნით" + "SS მოთხოვნა შეიცვალა ვიდეოზარის მოთხოვნით" + "SS მოთხოვნა შეიცვალა USSD მოთხოვნით" + "შეიცვალა ახალი SS მოთხოვნით" "სამსახურის პროფილი" "გაშლა" "ჩაკეცვა" @@ -1841,6 +1863,14 @@ "SIM ბარათი ამ ხმისთვის უზრუნველყოფილი არაა" "SIM ბარათი ამ ხმისთვის დაუშვებელია" "ტელეფონი ამ ხმისთვის დაუშვებელია" + + + + + + + + "ამომხტარი ფანჯარა" "+ %1$d" "აპის ვერსია დაქვეითებულია ან არაა თავსებადი ამ მალსახმობთან" diff --git a/core/res/res/values-kk/strings.xml b/core/res/res/values-kk/strings.xml index 9a08420a59007680712acf8caf656adab83a2660..d250640da895d88dbce49c489369f495f2737e6f 100644 --- a/core/res/res/values-kk/strings.xml +++ b/core/res/res/values-kk/strings.xml @@ -82,6 +82,8 @@ "Дауыстық қоңыраулар қызметі жоқ" "Дауыс қызметі немесе жедел қызметке қоңырау шалу мүмкіндігі жоқ" "Оператор уақытша өшірген" + + "Мобильдік желіге қосылу мүмкін емес" "Таңдаулы желіні өзгертіп көріңіз. Өзгерту үшін түртіңіз." "Жедел қызметке қоңырау шалу мүмкін емес" @@ -120,12 +122,13 @@ "Роуминг баннері қосулы" "Роуминг баннері өшірулі" "Қызметті іздеу" - - + "Wi‑Fi қоңырауы реттелмеді" "Wi-Fi арқылы қоңырау шалу немесе хабарлар жіберу үшін, алдымен операторыңыздан құрылғыны реттеуді сұраңыз. Содан кейін \"Параметрлер\" бөлімінен Wi-Fi қоңырауларын қайта қосыңыз. (Қате коды: %1$s)" - + + "Оператордың Wi‑Fi қоңырауын тіркеу кезінде қате шықты: %1$s" + "%s" "%s Wi-Fi арқылы қоңырау шалу" @@ -282,7 +285,7 @@ "<b>%1$s</b> қолданбасына SMS хабарларын жіберуге және көруге рұқсат берілсін бе?" "Жад" "құрылғыдағы фотосуреттерге, мультимедиаға және файлдарға қол жеткізу" - "<b>%1$s</b> қолданбасына құрылғыдағы суреттерге, медиафайлдарға және файлдарға кіруге рұқсат берілсін бе?" + "<b>%1$s</b> қолданбасына құрылғыдағы суреттерге, медиафайлдарға және басқа файлдарға кіруге рұқсат берілсін бе?" "Микрофон" "аудио жазу" "<b>%1$s</b> қолданбасына аудиомазмұн жазуға рұқсат берілсін бе?" @@ -481,6 +484,8 @@ "Қолданбаға NFC белгілерімен, карталармен және оқу құралдарымен байланысуға рұқсат береді." "экран бекітпесін істен шығару" "Қолданбаларға кілтперне және басқа кілтсөзге қатысты қауіпсіздік шараларын өшіру мүмкіндігін береді. Мысалы, телефон кіріс қоңырауларын алғанда кілтпернені өшіреді және қоңырау аяқталғанда қайта қосады." + "биометрикалық жабдықты пайдалану" + "Аутентификациялау үшін қолданбаға биометрикалық жабдықты пайдалануға рұқсат береді" "саусақ ізі жабдығын басқару" "Қолданбаға пайдаланатын саусақ ізі үлгілерін қосу және жою әдістерін шақыруға мүмкіндік береді." "саусақ ізі жабдығын пайдалану" @@ -493,6 +498,8 @@ "Анықталмаған" + + "Саусақ ізі жабдығы қолжетімді емес." "Саусақ ізін сақтау мүмкін емес. Бар саусақ ізін жойыңыз." "Саусақ ізін күту уақыты бітті. Әрекетті қайталаңыз." @@ -1005,14 +1012,23 @@ "Енгізу әдісі" "Мәтін әрекеттері" "Электрондық пошта" + "Таңдалған электрондық пошта мекенжайына хабар жіберу" "Қоңырау шалу" + "Таңдалған телефон нөміріне қоңырау шалу" "Орынды анықтау" + "Таңдалған мекенжайдың орналасқан жерін анықтау" "Ашу" + "Таңдалған URL мекенжайын ашу" "Хабар" + "Таңдалған телефон нөміріне хабар жіберу" "Енгізу" + "Контактілер тізіміне енгізу" "Көру" + "Күнтізбеде таңдалған уақытты көру" "Кесте" + "Таңдалған уақытқа іс-шараны жоспарлау" "Бақылау" + "Таңдалған ұшу рейсін қадағалау" "Жадта орын азайып барады" "Жүйенің кейбір функциялары жұмыс істемеуі мүмкін" "Жүйе үшін жад жеткіліксіз. 250 МБ бос орын бар екенін тексеріп, қайта іске қосыңыз." @@ -1141,8 +1157,7 @@ "Ашық Wi‑Fi желісіне қосылу" "Оператордың Wi‑Fi желісіне қосылу" - - + "Wi‑Fi желісіне қосылуда" "Wi‑Fi желісіне қосылды" "Wi‑Fi желісіне қосылмады" "Барлық желілерді көру үшін түртіңіз" @@ -1259,33 +1274,49 @@ "%s басқа қолданбалардың үстінен көрсетіледі" "%s деген пайдаланушының бұл функцияны пайдалануына жол бермеу үшін параметрлерді түртіп ашыңыз да, оларды өшіріңіз." "Өшіру" - "%s дайындалуда" - "Қателер тексерілуде" - "Жаңа %s анықталды" + + + + + + + + "Фотосуреттер мен медиа файлдарын тасымалдау үшін" - "Бүлінген %s" - "%s бұзылды. Түзету үшін түртіңіз." - "%s бүлінген. Түзету үшін оны түртіңіз." + + + + "Қолданылмайтын %s" "Бұл құрылғы %s картасына қолдау көрсетеді. Қолдау көрсетілетін пішімде орнату үшін түртіңіз." "Бұл құрылғыда %s картасына қолдау көрсетілмейді. Қолдау көрсетілетін форматта реттеуді таңдаңыз." "%s кенеттен шығарылды" - "Деректер жоғалып қалмауы үшін %s құрылғысын ажыратып барып, шығару керек" - "%s жоқ" - "%s шығарылды; жаңасын салыңыз" - "%s әлі шығарылуда…" - "Шығармаңыз" + + + + + + + + + + "Реттеу" "Шығару" "Зерттеу" "%s жоқ" - "Бұл құрылғыны қайта салыңыз" + + "%s тасымалдануда" "Деректер тасымалдануда" - "Тасымалданып болды" - "Деректер %s ішіне тасымалданды" - "Деректерді тасымалдау мүмкін емес" - "Деректер бастапқы орнында қалды" + + + + + + + + "Алынды" "Ажыратылды" "Тексерілуде…" @@ -1677,8 +1708,7 @@ "Әкімші орнатқан" "Әкімші жаңартқан" "Әкімші жойған" - - + "Батарея жұмысының ұзақтығын арттыру үшін Battery Saver құрылғының жұмыс өнімділігін төмендетеді және діріл функциясын, орынды анықтау қызметтерін, фондық деректі өшіреді. Синхрондауға негізделген электрондық пошта, хабар алмасу және басқа қолданбалар ашылмайынша жаңартылмайды.\n\nҚұрылғы зарядталып жатқанда, Battery Saver автоматты түрде өшеді." "Деректердің пайдаланылуын азайту үшін Трафикті үнемдеу функциясы кейбір қолданбаларға деректерді фондық режимде жіберуге немесе қабылдауға жол бермейді. Қазір қолданылып жатқан қолданба деректерді пайдалануы мүмкін, бірақ жиі емес. Мысалы, кескіндер оларды түрткенге дейін көрсетілмейді." "Data Saver функциясын қосу керек пе?" "Қосу" @@ -1729,22 +1759,14 @@ "%1$s үнін өшірген" "There\'s an internal problem with your device, and it may be unstable until you factory data reset." "There\'s an internal problem with your device. Contact your manufacturer for details." - - - - - - - - - - - - - - - - + "USSD сұрауы кәдімгі қоңырауға өзгертілді" + "USSD сұрауы SS сұрауына өзгертілді" + "Жаңа USSD сұрауына өзгертілді" + "USSD сұрауы бейне қоңырауға өзгертілді" + "SS сұрауы кәдімгі қоңырауға өзгертілді" + "SS сұрауы бейне қоңырауға өзгертілді" + "SS сұрауы USSD сұрауына өзгертілді" + "Жаңа SS сұрауына өзгертілді" "Жұмыс профилі" "Жаю" "Жию" @@ -1842,6 +1864,14 @@ "SIM картасы дауысқа пайдалануға арналмаған" "SIM картасын дауысқа пайдалануға тыйым салынған" "Телефонды дауысқа пайдалануға тыйым салынған" + + + + + + + + "Қалқымалы терезе" "+ %1$d" "Қолданбаның нұсқасы ескі немесе бұл таңбашамен үйлеспейді" diff --git a/core/res/res/values-km/strings.xml b/core/res/res/values-km/strings.xml index 0754b2f3ca4cb2a3c44e91b3e7d4de3bbe5b004f..25c939408d37930f6493c753bef3abda134e07df 100644 --- a/core/res/res/values-km/strings.xml +++ b/core/res/res/values-km/strings.xml @@ -82,6 +82,7 @@ "គ្មាន​សេវាកម្ម​ជា​សំឡេង​ទេ" "គ្មាន​សេវាកម្ម​សំឡេង ឬការ​ហៅ​បន្ទាន់​ទេ" "បិទ​ដោយ​ក្រុមហ៊ុន​សេវា​ទូរសព្ទ​របស់អ្នក​ជាបណ្តោះ​អាសន្ន" + "បិទ​​ដោយ​ក្រុមហ៊ុន​សេវា​ទូរសព្ទ​របស់អ្នកជាបណ្តោះ​អាសន្ន ​សម្រាប់​ស៊ីមទី %d" "មិន​អាច​ភ្ជាប់​បណ្ដាញ​ទូរសព្ទ​ចល័តបានទេ" "សាកល្បង​ប្ដូរ​ទៅបណ្ដាញ​ដែល​ចង់ប្រើ។ សូមចុច​ដើម្បីផ្លាស់​ប្ដូរ។" "មិន​អាច​ប្រើ​ការ​ហៅ​បន្ទាន់​បានទេ" @@ -120,12 +121,13 @@ "បើក​បដា​រ៉ូមីង" "បិទ​បដា​រ៉ូមីង" "​ស្វែង​រក​សេវាកម្ម" - - + "មិន​អាច​រៀបចំ​ការ​ហៅ​តាម Wi‑Fi បាន​ទេ" "ដើម្បីហៅទូរសព្ទ និងផ្ញើសារតាម Wi-Fi អ្នកត្រូវស្នើឲ្យក្រុមហ៊ុនបម្រើសេវាទូរសព្ទរបស់អ្នកដំឡើងសេវាកម្មនេះជាមុនសិន។ បន្ទាប់មកបើកការហៅតាម Wi-Fi ម្តងទៀតនៅក្នុងការកំណត់។ (លេខកូដបញ្ហា៖ %1$s)" - + + "មាន​បញ្ហា​ក្នុង​ការ​ចុះ​ឈ្មោះ​ការហៅ​តាម Wi‑Fi ជាមួយ​ក្រុមហ៊ុន​សេវា​ទូរសព្ទ​របស់អ្នក៖ %1$s" + "%s" "ការហៅតាមរយៈ Wi-Fi %s" @@ -159,10 +161,8 @@ "កំពុង​ដំណើរការ​សំណើ​​​ច្រើន​ពេក។ ព្យាយាម​ម្ដង​ទៀត​ពេល​ក្រោយ។" "កំហុស​ក្នុង​ការ​ចូល​សម្រាប់ %1$s" "ធ្វើ​សម​កាល​កម្ម" - - - - + "មិន​អាច​ធ្វើ​សមកាលកម្ម​បាន​ទេ" + "បាន​ព្យាយាមលុប​ %s ច្រើន​ដងពេក។" "ឧបករណ៍​ផ្ទុក​នៃ​​កុំព្យូទ័រ​បន្ទះ​ពេញ។ លុប​ឯកសារ​មួយ​ចំនួន​។" "ឧបករណ៍​របស់​នាឡិកា​ពេញ។ លុប​ឯកសារ​មួយ​ចំនួន​។" "ឧបករណ៍ផ្ទុកទិន្នន័យទូរទស្សន៍ពេញហើយ។ លុបឯកសារមួយចំនួនដើម្បីឲ្យមានចន្លោះទំនេរ។" @@ -272,40 +272,31 @@ "ប្តូរ​ទៅ​កម្រង​ព័ត៌មាន​ការងារ" "ទំនាក់ទំនង" "ចូលប្រើទំនាក់ទំនងរបស់អ្នក" - - + "អនុញ្ញាតឱ្យ <b>%1$s</b> ចូលប្រើ​ទំនាក់ទំនង​របស់អ្នក?" "ទីតាំង" "ចូលដំណើរការទីតាំងរបស់ឧបករណ៍នេះ" - - + "អនុញ្ញាតឱ្យ <b>%1$s</b> ចូលប្រើ​ទីតាំងរបស់ឧបករណ៍នេះ?" "ប្រតិទិន" "ចូលប្រើប្រិតិទិនរបស់អ្នក" - - + "អនុញ្ញាតឱ្យ <b>%1$s</b> ចូលប្រើ​ប្រតិទិនរបស់អ្នក?" "សារ SMS" "ផ្ញើ និងមើលសារ SMS" - - + "អនុញ្ញាតឱ្យ <b>%1$s</b> ផ្ញើ និង​មើលសារ SMS ?" "ការ​ផ្ទុក" "ចូលដំណើការរូបភាព មេឌៀ និងឯកសារនៅលើឧបករណ៍របស់អ្នក" - - + "អនុញ្ញាតឱ្យ <b>%1$s</b> ចូលប្រើ​រូបថត មេឌៀ និងឯកសារនៅលើ​ឧបករណ៍របស់អ្នក?" "មីក្រូ​ហ្វូន" "ថតសំឡេង" - - + "អនុញ្ញាតឱ្យ <b>%1$s</b> ថតសំឡេង?" "កាមេរ៉ា" "ថតរូប និងថតវីដេអូ" - - + "អនុញ្ញាតឱ្យ <b>%1$s</b> ថតរូប និងថត​វីដេអូ?" "ទូរសព្ទ" "ហៅទូរស័ព្ទ និងគ្រប់គ្រងការហៅទូរស័ព្ទ" - - + "អនុញ្ញាតឱ្យ <b>%1$s</b> គ្រប់គ្រង និង​ធ្វើការហៅទូរសព្ទ?" "ឧបករណ៍ចាប់សញ្ញារាងកាយ" "ចូលដំណើរការទិន្នន័យឧបករណ៍ចាប់សញ្ញាអំពីស្ថានភាពសុខភាពរបស់អ្នក" - - + "អនុញ្ញាតឱ្យ <b>%1$s</b> ចូលប្រើ​ទិន្នន័យឧបករណ៍ចាប់សញ្ញាអំពីស្ថានភាពសុខភាពរបស់អ្នក?" "ទាញយក​មាតិកា​វិនដូ" "ពិនិត្យ​មាតិកាវិនដូ​ដែល​អ្នក​កំពុង​ទាក់ទង​ជា​មួយ។" "បើក​ការ​រក​មើល​​ដោយ​ប៉ះ" @@ -492,6 +483,8 @@ "ឲ្យ​កម្មវិធី​ទាក់ទង​ជា​មួយ​ស្លាក (NFC) កាត និង​កម្មវិធី​អាន។" "បិទ​ការ​ចាក់​សោ​អេក្រង់​របស់​អ្នក" "ឲ្យ​កម្មវិធី​បិទ​ការ​ចាក់សោ​សុវត្ថិភាព​ពាក្យ​សម្ងាត់​ដែល​បាន​ភ្ជាប់​ណា​មួយ។ ​ឧទាហរណ៍​ត្រឹមត្រូវ​​​នៃ​ការ​បិទ​ទូរស័ព្ទ​ពេល​ទទួលការ​ហៅ​ចូល បន្ទាប់​ម​បើក​សោ​ពេល​ការ​ហៅ​បាន​បញ្ចប់។" + "ប្រើ​ឧបករណ៍​ស្កេន​ស្នាមម្រាមដៃ" + "អនុញ្ញាត​ឱ្យ​កម្មវិធី​ប្រើ​ឧបករណ៍​ស្កេន​ស្នាមម្រាមដៃ​សម្រាប់​ការផ្ទៀងផ្ទាត់" "គ្រប់គ្រងផ្នែករឹងស្នាមម្រាមដៃ" "អនុញ្ញាតឲ្យកម្មវិធីប្រើវិធីសាស្ត្របន្ថែម និងលុបពុម្ពម្រាមដៃសម្រាប់ប្រើប្រាស់។" "ប្រើផ្នែករឹងស្នាមម្រាមដៃ" @@ -504,6 +497,7 @@ "មិនអាចសម្គាល់បានទេ" + "បាន​ផ្ទៀង​ផ្ទាត់​ស្នាម​ម្រាមដៃ" "ផ្នែករឹងស្នាមម្រាមដៃមិនមានទេ។" "មិនអាចផ្ទុកស្នាមម្រាមដៃទេ។ សូមយកស្នាមម្រាមដៃដែលមានស្រាប់ចេញ។" "ការផ្តិតម្រាមដៃបានអស់ពេល។ សូមព្យាយាមម្តងទៀត។" @@ -1016,14 +1010,23 @@ "វិធីសាស្ត្រ​បញ្ចូល" "សកម្មភាព​អត្ថបទ" "អ៊ីមែល" + "ផ្ញើ​អ៊ីមែល​ទៅ​អាសយដ្ឋាន​ដែល​បាន​ជ្រើសរើស" "ហៅទូរសព្ទ" + "ហៅ​ទូរសព្ទ​ទៅ​លេខ​ដែល​បាន​ជ្រើសរើស" "កំណត់ទីតាំង" + "កំណត់​ទីតាំង​អាសយដ្ឋាន​ដែល​បាន​ជ្រើសរើស" "បើក" + "បើក URL ដែល​បាន​ជ្រើសរើស" "សារ" + "ផ្ញើសារ​ទៅ​លេខ​ទូរសព្ទ​ដែល​បាន​ជ្រើសរើស" "បញ្ចូល" + "បញ្ចូល​ទៅ​ក្នុង​ទំនាក់ទំនង" "មើល" + "មើល​ពេលវេលា​ដែល​បាន​ជ្រើសរើស​នៅក្នុង​ប្រតិទិន" "កាលវិភាគ" + "កំណត់​កាលវិភាគ​ព្រឹត្តិការណ៍​សម្រាប់ពេល​វេលាដែល​បាន​ជ្រើសរើស" "តាម​ដាន" + "តាមដាន​ជើង​ហោះហើរ​ដែល​បាន​ជ្រើសរើស" "អស់​ទំហំ​ផ្ទុក" "មុខងារ​ប្រព័ន្ធ​មួយ​ចំនួន​អាច​មិន​ដំណើរការ​" "មិន​មាន​ទំហំ​ផ្ទុក​​គ្រប់​គ្រាន់​សម្រាប់​ប្រព័ន្ធ​។ សូម​ប្រាកដ​ថា​អ្នក​មាន​ទំហំ​ទំនេរ​ 250MB ហើយ​ចាប់ផ្ដើម​ឡើង​វិញ។" @@ -1119,8 +1122,7 @@ "បើក %1$s" "%1$s នឹង​បិទ​ដោយ​មិន​រក្សាទុក" "%1$s លើសពីកម្រិតកំណត់មេម៉ូរី" - - + "ព័ត៌មានកែបញ្ហាត្រូវបាន​ប្រមូល។ សូមចុចដើម្បីចែករំលែក។" "ចែករំលែក heap dump?" "ដំណើរការ %1$s បានលើសកម្រិតកំណត់មេម៉ូរីរបស់វាដែលមានទំហំ %2$s។ Heap dump មានផ្តល់ជូនដល់អ្នកដើម្បីចែករំលែកជាមួយអ្នកអភិវឌ្ឍន៍របស់វា។ ត្រូវប្រុងប្រយ័ត្ន៖ Heap dump នេះអាចផ្ទុកព័ត៌មានផ្ទាល់ខ្លួនរបស់អ្នកណាមួយ ដែលកម្មវិធីអាចចូលប្រើបាន។" "ជ្រើស​សកម្មភាព​សម្រាប់​អត្ថបទ" @@ -1155,8 +1157,7 @@ "ភ្ជាប់ទៅបណ្តាញ Wi‑Fi ចំហ" "ភ្ជាប់​បណ្តាញ Wi‑Fi របស់​ក្រុមហ៊ុន​សេវាទូរសព្ទ" - - + "កំពុង​ភ្ជាប់​ទៅ​បណ្តាញ Wi‑Fi" "បានភ្ជាប់ទៅបណ្តាញ Wi‑Fi" "មិនអាចភ្ជាប់ទៅបណ្តាញ Wi‑Fi បានទេ" "ចុចដើម្បីមើលបណ្តាញទាំងអស់" @@ -1272,33 +1273,34 @@ "%s កំពុង​បង្ហាញ​ពីលើ​កម្មវិធី​ផ្សេង​ទៀត" "ប្រសិនបើ​អ្នក​មិន​ចង់​ឲ្យ %s ប្រើ​មុខងារ​នេះ​ទេ សូមចុច​ដើម្បី​បើក​ការកំណត់ រួច​បិទ​វា។" "បិទ" - "កំពុងរៀបចំ %s" - "កំពុងពិនិត្យរកកំហុស" - "បានរកឃើញ %s ថ្មី" + "កំពុង​ពិនិត្យ %s…" + "កំពុង​ពិនិត្យ​​មើលខ្លឹមសារ​បច្ចុប្បន្ន" + "%s ថ្មី" + "ចុច​ដើម្បី​រៀបចំ" "សម្រាប់ផ្ទេររូបភាព និងមេឌៀ" - "%s ខូច" - "%s បានខូចហើយ សូមប៉ះដើម្បីជួសជុល។" + "មាន​បញ្ហា​ជាមួយ %s" + "ចុចដើម្បីកែបញ្ហា" "%s ខូចហើយ។ សូម​ជ្រើសរើស​ដើម្បី​ជួសជុល។" "%s មិនគាំទ្រ" "ឧបករណ៍នេះមិនគាំទ្រ %s នេះទេ។ ប៉ះដើម្បីកំណត់ទម្រង់ដែលគាំទ្រ។" "ឧបករណ៍នេះ​មិន​ស្គាល់ %s នេះ​ទេ។ សូម​ជ្រើសរើស​ដើម្បី​រៀបចំ​ក្នុង​ទម្រង់ដែលស្គាល់។" "បានដក %s ចេញដោយមិនបានរំពឹងទុក" - "ផ្តាច់ %s មុនពេលដកចេញដើម្បីជៀងវាងការបាត់បង់ទិន្នន័យ" - "បានដក %s ចេញ" - "បានដក %s ចេញ សូមដោតចូលថ្មីមួយទៀត" - "នៅកំពុងដក %s ចេញ…" - "កុំដកចេញ" + "ដក​មេឌៀ​មុន​ពេល​យក​វា​ចេញ ដើម្បី​ជៀសវាង​ការ​បាត់​បង់​ខ្លឹមសារ" + "បានយក %s ចេញ" + "មុខងារ​មួយចំនួន​អាច​នឹង​ដំណើរការ​មិន​ប្រក្រតី។ សូមបញ្ចូល​ទំហំ​ផ្ទុក​ថ្មី។" + "កំពុង​ដក %s ចេញ" + "កុំ​យក​ចេញ" "ដំឡើង" "ដកចេញ" "រុករក" "បាត់ %s" - "បញ្ចូលឧបករណ៍នេះឡើងវិញ" + "បញ្ចូល​ឧបករណ៍​ម្តងទៀត" "កំពុងផ្លាស់ទី %s" "កំពុងផ្លាស់ទីទិន្នន័យ…" - "ផ្លាស់ទីទាំងស្រុង" - "ទិន្នន័យបានផ្លាស់ទីទៅ %s" - "មិនអាចផ្លាស់ទីទិន្នន័យបានទេ" - "ទិន្នន័យនៅក្នុងទីតាំងដើមដដែល" + "បានផ្ទេរខ្លឹមសារ​រួចហើយ" + "ខ្លឹមសារ​បាន​ផ្លាស់​ទី​ទៅ %s" + "មិន​អាច​ផ្លាស់ទី​ខ្លឹមសារបានទេ" + "សាកល្បង​ផ្លាស់ទី​ខ្លឹមសារ​ម្តង​ទៀត" "បានយកចេញ" "បានដកចេញ" "កំពុងពិនិត្យមើល..." @@ -1357,17 +1359,14 @@ "បើក​ការ​តភ្ជាប់ VPN ជា​និច្ច..។" "ភ្ជាប់ VPN ជា​និច្ច" "បានផ្ដាច់ពី VPN បើកជានិច្ច" - - + "មិនអាចភ្ជាប់ជាមួយ VPN បើកជានិច្ចបាន​ទេ" "ប្ដូរការកំណត់បណ្ដាញ ឬការកំណត់ VPN" "ជ្រើស​​ឯកសារ" "គ្មាន​ឯកសារ​បាន​ជ្រើស" "កំណត់​ឡើងវិញ" "ដាក់​ស្នើ" - - - - + "កម្មវិធី​បើកបរ​កំពុង​ដំណើរការ" + "ចុច​ដើម្បី​ចាកចេញ​ពីកម្មវិធី​បើកបរ។" "ភ្ជាប់ ឬ​ហតស្ពត​សកម្ម" "ប៉ះដើម្បីកំណត់" "ការភ្ជាប់​ត្រូវបានបិទ" @@ -1693,8 +1692,7 @@ "​ដំឡើង​ដោយ​អ្នកគ្រប់គ្រង​របស់​អ្នក" "ធ្វើ​បច្ចុប្បន្នភាព​ដោយ​អ្នកគ្រប់គ្រង​របស់​អ្នក" "លុប​ដោយ​អ្នកគ្រប់គ្រង​របស់​អ្នក" - - + "ដើម្បី​ជួយ​ឱ្យ​កម្រិត​ថាមពល​ថ្ម​ប្រសើរឡើង កម្មវិធី​សន្សំថ្ម​កាត់បន្ថយ​ប្រតិបត្តិការ​ឧបករណ៍​របស់អ្នក និងកម្រិត ឬបិទ​ការញ័រ សេវាកម្មទីតាំង និងទិន្នន័យ​ផ្ទៃខាងក្រោយ។ អ៊ីមែល ការផ្ញើសារ និងកម្មវិធី​ផ្សេងទៀត​ដែលពឹងផ្អែក​លើការ​ធ្វើ​សមកាលកម្ម​អាចនឹងមិន​​ដំឡើង​ជំនាន់ទេ ប្រសិនបើ​អ្នក​មិនបើក​ពួកវា។\n\nកម្មវិធី​សន្សំ​ថ្ម​បិទ​ដោយ​ស្វ័យប្រវត្តិ នៅពេលដែល​ឧបករណ៍​របស់អ្នក​កំពុង​សាកថ្ម។" "ដើម្បីជួយកាត់បន្ថយការប្រើប្រាស់ទិន្នន័យ កម្មវិធីសន្សំសំចៃទិន្នន័យរារាំងកម្មវិធីមួយចំនួនមិនឲ្យបញ្ជូន ឬទទួលទិន្នន័យនៅផ្ទៃខាងក្រោយទេ។ កម្មវិធីដែលអ្នកកំពុងប្រើនាពេលបច្ចុប្បន្នអាចចូលប្រើប្រាស់​ទិន្នន័យបាន ប៉ុន្តែអាចនឹងមិនញឹកញាប់ដូចមុនទេ។ ឧទាហរណ៍ រូបភាពមិនបង្ហាញទេ លុះត្រាតែអ្នកប៉ះរូបភាពទាំងនោះ។" "បើកកម្មវិធីសន្សំសំចៃទិន្នន័យឬ?" "បើក" @@ -1745,22 +1743,14 @@ "បាន​បិទ​សំឡេង​ដោយ %1$s" "មានបញ្ហាខាងក្នុងឧបករណ៍របស់អ្នក ហើយវាអ្នកមិនមានស្ថេរភាព រហូតទាល់តែអ្នកកំណត់ដូចដើមវិញទាំងស្រុង។" "មានបញ្ហាខាងក្នុងឧបករណ៍របស់អ្នក ទំនាក់ទំនងក្រុមហ៊ុនផលិតឧបករណ៍របស់អ្នកសម្រាប់ព័ត៌មានបន្ថែម។" - - - - - - - - - - - - - - - - + "សំណើ USSD ត្រូវបាន​ប្ដូរ​ទៅ​ការហៅ​ធម្មតា" + "សំណើ USSD ត្រូវបាន​ប្ដូរ​ទៅ​សំណើ SS" + "បានប្ដូរ​ទៅ​សំណើ USSD ថ្មី" + "សំណើ USSD ត្រូវបាន​ប្ដូរ​ទៅ​ការហៅ​ជាវីដេអូ" + "សំណើ SS ត្រូវបាន​ប្ដូរ​ទៅ​ការហៅធម្មតា" + "សំណើ SS ត្រូវបាន​ប្ដូរ​ទៅ​ការហៅ​ជា​វីដេអូ" + "សំណើ SS ត្រូវបាន​ប្ដូរ​ទៅ​សំណើ USSD" + "បាន​ប្ដូរ​ទៅ​សំណើ SS ថ្មី" "ប្រវត្តិរូបការងារ" "ពង្រីក" "លាក់" @@ -1858,6 +1848,10 @@ "ស៊ីមកាតមិនមែនផ្តល់ជូនសម្រាប់ការហៅទូរសព្ទទេ" "ស៊ីមកាតមិនអនុញ្ញាតសម្រាប់ការហៅទូរសព្ទទេ" "ទូរសព្ទមិនអនុញ្ញាតសម្រាប់ការហៅទូរសព្ទទេ" + "មិន​អនុញ្ញាត​ស៊ីម​ទី %d ទេ" + "មិន​បាន​ផ្តល់​ស៊ីម​ទី %d ទេ" + "មិន​អនុញ្ញាត​ស៊ីម​ទី %d ទេ" + "មិន​អនុញ្ញាត​ស៊ីម​ទី %d ទេ" "វិនដូលេចឡើង" "+ %1$d" "កំណែកម្មវិធី​ត្រូវបាន​បន្ទាប​ជំនាន់​ ឬមិន​ត្រូវគ្នា​ជាមួយ​ផ្លូវកាត់​នេះ" @@ -1878,8 +1872,6 @@ "នេះ​គឺជា​សកម្មភាព​ថ្មី។ សូមចុច​ដើម្បីផ្លាស់​ប្ដូរ។" "មុខងារ​កុំ​រំខាន​ត្រូវ​បាន​ប្ដូរ" "សូមចុច​ដើម្បី​មើល​ថា​​បានទប់ស្កាត់អ្វីខ្លះ។" - - - - + "ប្រព័ន្ធ" + "ការកំណត់" diff --git a/core/res/res/values-kn/strings.xml b/core/res/res/values-kn/strings.xml index e5fde53a42f6b413e6f49b9a66646ade9edfb689..7dc5cd36fad021fc9a3f623006e38c3615724e7e 100644 --- a/core/res/res/values-kn/strings.xml +++ b/core/res/res/values-kn/strings.xml @@ -82,6 +82,7 @@ "ಧ್ವನಿ ಸೇವೆಯಿಲ್ಲ" "ಯಾವುದೇ ಧ್ವನಿ ಸೇವೆ ಅಥವಾ ತುರ್ತು ಕರೆಗಳಿಲ್ಲ" "ನಿಮ್ಮ ವಾಹಕದ ಮೂಲಕ ತಾತ್ಕಾಲಿಕವಾಗಿ ಆಫ್ ಮಾಡಲಾಗಿದೆ" + "ಸಿಮ್ %d ಗಾಗಿ ನಿಮ್ಮ ವಾಹಕದ ಮೂಲಕ ತಾತ್ಕಾಲಿಕವಾಗಿ ಆಫ್ ಮಾಡಲಾಗಿದೆ" "ಮೊಬೈಲ್‌ ನೆಟ್‌ವರ್ಕ್ ತಲುಪಲು ಸಾಧ್ಯವಿಲ್ಲ" "ಆದ್ಯತೆಗೊಳಿಸಿದ ನೆಟ್‌ವರ್ಕ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಲು ಪ್ರಯತ್ನಿಸಿ. ಬದಲಾಯಿಸಲು ಟ್ಯಾಪ್‌ ಮಾಡಿ." "ತುರ್ತು ಕರೆ ಮಾಡುವಿಕೆ ಲಭ್ಯವಿಲ್ಲ" @@ -120,12 +121,13 @@ "ರೋಮಿಂಗ್ ಬ್ಯಾನರ್ ಆನ್ ಆಗಿದೆ" "ರೋಮಿಂಗ್ ಬ್ಯಾನರ್ ಆಫ್ ಆಗಿದೆ" "ಸೇವೆ ಹುಡುಕಲಾಗುತ್ತಿದೆ" - - + "ವೈ-ಫೈ ಕರೆ ಮಾಡುವಿಕೆಯನ್ನು ಸೆಟಪ್‌ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ" "ವೈ-ಫೈ ಮೂಲಕ ಕರೆಗಳನ್ನು ಮಾಡಲು ಮತ್ತು ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಲು, ಈ ಸೇವೆಯನ್ನು ಹೊಂದಿಸಲು ಮೊದಲು ನಿಮ್ಮ ವಾಹಕವನ್ನು ಕೇಳಿ. ಆ ನಂತರ ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಂದ ವೈ-ಫೈ ಕರೆಮಾಡುವಿಕೆಯನ್ನು ಅನ್ನು ಆನ್ ಮಾಡಿ. (ದೋಷ ಕೋಡ್: %1$s)" - + + "ನಿಮ್ಮ ವಾಹಕದೊಂದಿಗೆ ವೈ-ಫೈ ಕರೆ ಮಾಡುವಿಕೆ ಸಮಸ್ಯೆ ನೋಂದಾಯಿಸುವಿಕೆ: %1$s" + "%s" "%s ವೈ-ಫೈ ಕರೆ ಮಾಡುವಿಕೆ" @@ -159,10 +161,8 @@ "ಹಲವಾರು ವಿನಂತಿಗಳನ್ನು ಪ್ರಕ್ರಿಯೆಗೊಳಿಸಲಾಗುತ್ತಿದೆ. ನಂತರ ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ." "%1$s ಗಾಗಿ ಸೈನ್ ಇನ್ ದೋಷವಿದೆ" "ಸಿಂಕ್ ಮಾಡು" - - - - + "ಸಿಂಕ್ ಮಾಡಲು ಸಾಧ್ಯವಿಲ್ಲ" + "ಅತೀ ಹೆಚ್ಚು %s ಅನ್ನು ಅಳಿಸಲು ಪ್ರಯತ್ನಿಸಲಾಗಿದೆ." "ಟ್ಯಾಬ್ಲೆಟ್ ಸಂಗ್ರಹಣೆ ಪೂರ್ಣಗೊಂಡಿದೆ. ಸ್ಥಳವನ್ನು ಖಾಲಿಯಾಗಿಸಲು ಕೆಲವು ಫೈಲ್‍‍ಗಳನ್ನು ಅಳಿಸಿ." "ವಾಚ್‌ ಸಂಗ್ರಹಣೆ ಪೂರ್ಣಗೊಂಡಿದೆ. ಸ್ಥಳವನ್ನು ಖಾಲಿಯಾಗಿಸಲು ಕೆಲವು ಫೈಲ್‍‍ಗಳನ್ನು ಅಳಿಸಿ." "ಟಿವಿ ಸಂಗ್ರಹಣೆ ತುಂಬಿದೆ. ಸ್ಥಳವನ್ನು ಮುಕ್ತಗೊಳಿಸಲು ಕೆಲವು ಫೈಲ್‌ಗಳನ್ನು ಅಳಿಸಿ." @@ -272,40 +272,31 @@ "ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್‌ಗೆ ಬದಲಿಸಿ" "ಸಂಪರ್ಕಗಳು" "ನಿಮ್ಮ ಸಂಪರ್ಕಗಳನ್ನು ಪ್ರವೇಶಿಸಲು" - - + "ನಿಮ್ಮ ಸಂಪರ್ಕಗಳನ್ನು ಪ್ರವೇಶಿಸಲು <b>%1$s</b> ಗೆ ಅನುಮತಿಸಬೇಕೇ?" "ಸ್ಥಳ" "ಈ ಸಾಧನದ ಸ್ಥಳವನ್ನು ಪ್ರವೇಶಿಸಿ" - - + "ಈ ಸಾಧನದ ಸ್ಥಳವನ್ನು ಪ್ರವೇಶಿಸಲು <b>%1$s</b> ಗೆ ಅನುಮತಿಸಬೇಕೇ?" "ಕ್ಯಾಲೆಂಡರ್" "ನಿಮ್ಮ ಕ್ಯಾಲೆಂಡರ್ ಪ್ರವೇಶಿಸಲು" - - + "ನಿಮ್ಮ ಕ್ಯಾಲೆಂಡರ್ ಪ್ರವೇಶಿಸಲು <b>%1$s</b> ಗೆ ಅನುಮತಿಸಬೇಕೇ?" "SMS" "SMS ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಲು ಮತ್ತು ನಿರ್ವಹಿಸಲು" - - + "ಎಸ್‌ಎಂಎಸ್‌ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಲು ಮತ್ತು ವೀಕ್ಷಿಸಲು <b>%1$s</b> ಗೆ ಅನುಮತಿಸಬೇಕೇ?" "ಸಂಗ್ರಹಣೆ" "ಸಾಧನದಲ್ಲಿ ಫೋಟೋಗಳು, ಮಾಧ್ಯಮ ಮತ್ತು ಫೈಲ್‌ಗಳನ್ನು ಪ್ರವೇಶಿಸಲು" - - + "ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಫೋಟೋಗಳು, ಮಾಧ್ಯಮ ಮತ್ತು ಫೈಲ್‌ಗಳನ್ನು ಪ್ರವೇಶಿಸಲು <b>%1$s</b> ಗೆ ಅನುಮತಿಸಬೇಕೇ?" "ಮೈಕ್ರೋಫೋನ್‌" "ಆಡಿಯೊ ರೆಕಾರ್ಡ್ ಮಾಡಿ" - - + "ಆಡಿಯೋ ರೆಕಾರ್ಡ್‌ ಮಾಡಲು <b>%1$s</b> ಗೆ ಅನುಮತಿಸಬೇಕೇ?" "ಕ್ಯಾಮರಾ" "ಚಿತ್ರಗಳನ್ನು ತೆಗೆಯಲು, ವೀಡಿಯೊ ರೆಕಾರ್ಡ್ ಮಾಡಲು" - - + "ಚಿತ್ರಗಳನ್ನು ಸೆರೆಹಿಡಿಯಲು ಮತ್ತು ವೀಡಿಯೊ ರೆಕಾರ್ಡ್‌ ಮಾಡಲು <b>%1$s</b> ಗೆ ಅನುಮತಿಸಬೇಕೇ?" "ಫೋನ್" "ಫೋನ್ ಕರೆ ಮಾಡಲು ಹಾಗೂ ನಿರ್ವಹಿಸಲು" - - + "ಫೋನ್ ಕರೆಗಳನ್ನು ಮಾಡಲು ಮತ್ತು ನಿರ್ವಹಿಸಲು <b>%1$s</b> ಗೆ ಅನುಮತಿಸಬೇಕೇ?" "ದೇಹ ಸೆನ್ಸರ್‌ಗಳು" "ನಿಮ್ಮ ಮುಖ್ಯ ಲಕ್ಷಣಗಳ ಕುರಿತು ಸೆನ್ಸಾರ್ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಿ" - - + "ನಿಮ್ಮ ಮುಖ್ಯ ಲಕ್ಷಣಗಳ ಕುರಿತು ಸೆನ್ಸರ್ ಡೇಟಾವನ್ನು <b>%1$s</b> ಗೆ ಅನುಮತಿಸಬೇಕೇ?" "ವಿಂಡೋ ವಿಷಯವನ್ನು ಹಿಂಪಡೆಯುತ್ತದೆ" "ನೀವು ಬಳಸುತ್ತಿರುವ ವಿಂಡೋದ ವಿಷಯ ಪರೀಕ್ಷಿಸುತ್ತದೆ." "ಸ್ಪರ್ಶ-ಎಕ್ಸ್‌ಪ್ಲೋರ್ ಆನ್ ಮಾಡುತ್ತದೆ" @@ -492,6 +483,10 @@ "ಸಮೀಪದ ಕ್ಷೇತ್ರ ಸಂವಹನ (NFC) ಟ್ಯಾಗ್‌ಗಳು, ಕಾರ್ಡ್‌ಗಳು, ಮತ್ತು ಓದುಗರನ್ನು ಅಪ್ಲಿಕೇಶನ್‌ ಅನುಮತಿಸುತ್ತದೆ." "ನಿಮ್ಮ ಸ್ಕ್ರೀನ್ ಲಾಕ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ" "ಕೀಲಾಕ್ ಮತ್ತು ಯಾವುದೇ ಸಂಬಂಧಿತ ಭದ್ರತಾ ಪಾಸ್‍‍ವರ್ಡ್ ಭದ್ರತೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಅಪ್ಲಿಕೇಶನ್‍‍ಗೆ ಅನುಮತಿ ನೀಡುತ್ತದೆ. ಉದಾಹರಣೆಗೆ, ಒಳಬರುವ ಕರೆಯನ್ನು ಸ್ವೀಕರಿಸುವಾಗ ಕೀಲಾಕ್ ಅನ್ನು ಫೋನ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ, ನಂತರ ಕರೆಯು ಅಂತ್ಯಗೊಂಡಾಗ ಕೀಲಾಕ್ ಅನ್ನು ಮರು ಸಕ್ರಿಯಗೊಳಿಸುತ್ತದೆ." + + + + "ಬೆರಳಚ್ಚು ಹಾರ್ಡ್‌ವೇರ್ ನಿರ್ವಹಿಸಿ" "ಬಳಕೆಗೆ ಬೆರಳಚ್ಚು ಟೆಂಪ್ಲೇಟ್‌ಗಳನ್ನು ಸೇರಿಸಲು ಮತ್ತು ಅಳಿಸಲು ವಿಧಾನಗಳನ್ನು ಮನವಿ ಮಾಡಲು ಅಪ್ಲಿಕೇಶನ್‌ಗೆ ಅನುಮತಿಸುತ್ತದೆ." "ಬೆರಳಚ್ಚು ಹಾರ್ಡ್‌ವೇರ್ ಬಳಸಿ" @@ -504,6 +499,7 @@ "ಗುರುತಿಸಲಾಗಿಲ್ಲ" + "ಫಿಂಗರ್‌ಪ್ರಿಂಟ್ ಅನ್ನು ಪ್ರಮಾಣೀಕರಣ ಮಾಡಲಾಗಿದೆ" "ಬೆರಳಚ್ಚು ಹಾರ್ಡ್‌ವೇರ್‌ ಲಭ್ಯವಿಲ್ಲ." "ಬೆರಳಚ್ಚು ಸಂಗ್ರಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ. ಅಸ್ತಿತ್ವದಲ್ಲಿರುವ ಬೆರಳಚ್ಚು ತೆಗೆದುಹಾಕಿ." "ಬೆರಳಚ್ಚು ಅವಧಿ ಮೀರಿದೆ. ಮತ್ತೆ ಪ್ರಯತ್ನಿಸಿ." @@ -1016,14 +1012,32 @@ "ಇನ್‌ಪುಟ್ ವಿಧಾನ" "ಪಠ್ಯದ ಕ್ರಮಗಳು" "ಇಮೇಲ್" + + "ಕರೆ" + + "ಗುರುತಿಸಿ" + + "ತೆರೆ" + + "ಸಂದೇಶ" + + "ಸೇರಿಸಿ" + + "ವೀಕ್ಷಿಸಿ" + + "ಅವಧಿ" + + "ಟ್ರ್ಯಾಕ್" + + "ಸಂಗ್ರಹಣೆ ಸ್ಥಳವು ತುಂಬಿದೆ" "ಕೆಲವು ಸಿಸ್ಟಂ ಕಾರ್ಯವಿಧಾನಗಳು ಕಾರ್ಯನಿರ್ವಹಿಸದೇ ಇರಬಹುದು" "ಸಿಸ್ಟಂನಲ್ಲಿ ಸಾಕಷ್ಟು ಸಂಗ್ರಹಣೆಯಿಲ್ಲ. ನೀವು 250MB ನಷ್ಟು ಖಾಲಿ ಸ್ಥಳವನ್ನು ಹೊಂದಿರುವಿರಾ ಎಂಬುದನ್ನು ಖಚಿತಪಡಿಸಿಕೊಳ್ಳಿ ಹಾಗೂ ಮರುಪ್ರಾರಂಭಿಸಿ." @@ -1117,8 +1131,7 @@ "%1$s ಅನ್ನು ತೆರೆಯಿರಿ" "%1$s ಅನ್ನು ಉಳಿಸದೆಯೇ ಮುಚ್ಚಲಾಗುತ್ತದೆ" "%1$s ಮೆಮೊರಿ ಮಿತಿಯನ್ನು ಮೀರಿದೆ" - - + "ಹೀಪ್ ಡಂಪ್ ಅನ್ನು ಸಂಗ್ರಹಿಸಲಾಗಿದೆ; ಹಂಚಲು ಟ್ಯಾಪ್ ಮಾಡಿ" "ಹೀಪ್ ಡಂಪ್ ಹಂಚಿಕೊಳ್ಳುವುದೇ?" "%1$s ಪ್ರಕ್ರಿಯೆಯು %2$s ರ ಪ್ರಕ್ರಿಯೆ ಮೆಮೊರಿ ಮಿತಿಯನ್ನು ಮೀರಿದೆ. ನೀವು ಅದರ ಡೆವಲಪರ್ ಜೊತೆ ಹಂಚಿಕೊಳ್ಳಲು ಹೀಪ್ ಡಂಪ್ ಲಭ್ಯವಿದೆ. ಎಚ್ಚರಿಕೆ: ಈ ಹೀಪ್ ಡಂಪ್ ಅಪ್ಲಿಕೇಶನ್ ಪ್ರವೇಶ ಹೊಂದಿರುವ ನಿಮ್ಮ ಯಾವುದೇ ವೈಯಕ್ತಿಕ ಮಾಹಿತಿಯನ್ನು ಹೊಂದಿರಬಹುದು." "ಪಠ್ಯಕ್ಕೆ ಕ್ರಿಯೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ" @@ -1153,8 +1166,7 @@ "ಮುಕ್ತ ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸಂಪರ್ಕಿಸಿ" "ವಾಹಕ ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸಂಪರ್ಕಿಸಿ" - - + "ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸಂಪರ್ಕಪಡಿಸಲಾಗುತ್ತಿದೆ" "ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ" "ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ" "ಎಲ್ಲಾ ನೆಟ್‌ವರ್ಕ್‌ಗಳನ್ನು ನೋಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ" @@ -1271,33 +1283,34 @@ "%s ಇತರವುಗಳ ಮೇಲೆ ಪ್ರದರ್ಶಿಸುತ್ತಿದೆ" "%s ಈ ವೈಶಿಷ್ಟ್ಯ ಬಳಸುವುದನ್ನು ನೀವು ಬಯಸದಿದ್ದರೆ, ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ತೆರೆದು, ಅದನ್ನು ಆಫ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ." "ಆಫ್ ಮಾಡಿ" - "%s ಅನ್ನು ಸಿದ್ಧಪಡಿಸಲಾಗುತ್ತಿದೆ" - "ದೋಷಗಳನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ" - "ಹೊಸ %s ಪತ್ತೆಯಾಗಿದೆ" + "%s ಅನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ…" + "ಪ್ರಸ್ತುತ ವಿಷಯವನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ" + "ಹೊಸ %s" + "ಹೊಂದಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ" "ಫೋಟೋಗಳು ಮತ್ತು ಮಾಧ್ಯಮವನ್ನು ವರ್ಗಾಯಿಸಲು" - "%s ದೋಷಪೂರಿತವಾಗಿದೆ" - "%s ದೋಷಪೂರಿತವಾಗಿದೆ. ಸರಿಪಡಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ." + "%s ನೊಂದಿಗೆ ಸಮಸ್ಯೆ" + "ಸರಿಪಡಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ" "%s ದೋಷಪೂರಿತವಾಗಿದೆ. ಸರಿಪಡಿಸಲು ಆಯ್ಕೆ ಮಾಡಿ." "ಬೆಂಬಲಿಸದಿರುವ %s" "ಈ ಸಾಧನವು %s ಅನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ. ಬೆಂಬಲಿತ ಫಾರ್ಮ್ಯಾಟ್‌‌ನಲ್ಲಿ ಹೊಂದಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ." "ಈ ಸಾಧನವು ಈ %s ಅನ್ನು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ. ಬೆಂಬಲಿತ ಫಾರ್ಮ್ಯಾಟ್‌‌ನಲ್ಲಿ ಹೊಂದಿಸಲು ಆಯ್ಕೆ ಮಾಡಿ." "%s ಅನಿರೀಕ್ಷಿತವಾಗಿ ತೆಗೆದುಹಾಕಲಾಗಿದೆ" - "ಡೇಟಾ ನಷ್ಟವನ್ನು ತಪ್ಪಿಸಲು ತೆಗೆದುಹಾಕುವುದಕ್ಕೂ ಮುನ್ನ %s ಅಳವಡಿಕೆಯನ್ನು ತೆಗೆದುಹಾಕಿ" - "%s ತೆಗೆದುಹಾಕಲಾಗಿದೆ" - "%s ತೆಗೆದುಹಾಕಲಾಗಿದೆ; ಹೊಸದನ್ನು ಸೇರಿಸಿ" - "%s ಇನ್ನೂ ಇಜೆಕ್ಟ್ ಮಾಡಲಾಗುತ್ತಿದೆ…" - "ತೆಗೆದುಹಾಕಬೇಡಿ" + "ವಿಷಯ ನಷ್ಟವನ್ನು ತಪ್ಪಿಸಲು ತೆಗೆದುಹಾಕುವುದಕ್ಕೂ ಮುನ್ನ ಮಾಧ್ಯಮವನ್ನು ಎಜೆಕ್ಟ್ ಮಾಡಿ" + "%s ಅವರನ್ನು ತೆಗೆದುಹಾಕಲಾಗಿದೆ" + "ಕೆಲವು ಕಾರ್ಯಚಟುವಟಿಕೆಗಳು ಸರಿಯಾಗಿ ಕೆಲಸ ಮಾಡದಿರಬಹುದು. ಹೊಸ ಸಂಗ್ರಹಣೆ ಸೇರಿಸಿ." + "%s ಎಜೆಕ್ಟ್ ಮಾಡಲಾಗುತ್ತಿದೆ" + "ತೆಗೆದುಹಾಕಬೇಡಿ" "ಹೊಂದಿಸು" "ಇಜೆಕ್ಟ್" "ಎಕ್ಸ್‌ಪ್ಲೋರ್‌‌" "%s ಕಾಣೆಯಾಗಿದೆ" - "ಈ ಸಾಧನವನ್ನು ಮರುಸೇರಿಸಿ" + "ಸಾಧನವನ್ನು ಪುನಃ ಸೇರಿಸಿ" "%s ಸರಿಸಲಾಗುತ್ತಿದೆ" "ಡೇಟಾ ಸರಿಸಲಾಗುತ್ತಿದೆ" - "ಸರಿಸುವಿಕೆ ಪೂರ್ಣಗೊಂಡಿದೆ" - "%s ಗೆ ಡೇಟಾ ಸರಿಸಲಾಗಿದೆ" - "ಡೇಟಾ ಸರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ" - "ಮೂಲ ಸ್ಥಳದಲ್ಲಿ ಡೇಟಾ ಉಳಿದಿದೆ" + "ವಿಷಯ ವರ್ಗಾವಣೆ ಪೂರ್ಣಗೊಂಡಿದೆ" + "ವಿಷಯವನ್ನು %s ಗೆ ಸರಿಸಲಾಗಿದೆ" + "ವಿಷಯವನ್ನು ಸರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ" + "ವಿಷಯವನ್ನು ಪುನಃ ಸರಿಸಲು ಪ್ರಯತ್ನಿಸಿ" "ತೆಗೆದುಹಾಕಲಾಗಿದೆ" "ಇಜೆಕ್ಟ್ ಮಾಡಲಾಗಿದೆ" "ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ..." @@ -1356,17 +1369,14 @@ "ಯಾವಾಗಲೂ-ಆನ್ VPN ಸಂಪರ್ಕಗೊಳ್ಳುತ್ತಿದೆ…" "ಯಾವಾಗಲೂ-ಆನ್ VPN ಸಂಪರ್ಕಗೊಂಡಿದೆ" "ಯಾವಾಗಲೂ ಆನ್ ಆಗಿರುವ VPN ನಿಂದ ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗಿದೆ" - - + "ಯಾವಾಗಲೂ ಆನ್ ಆಗಿರುವ VPN ಗೆ ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ" "ನೆಟ್‌ವರ್ಕ್‌ ಅಥವಾ VPN ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಬದಲಾಯಿಸಿ" "ಫೈಲ್ ಆಯ್ಕೆಮಾಡು" "ಯಾವುದೇ ಫೈಲ್ ಆಯ್ಕೆ ಮಾಡಿಲ್ಲ" "ಮರುಹೊಂದಿಸು" "ಸಲ್ಲಿಸು" - - - - + "ಡ್ರೈವಿಂಗ್‌ ಅಪ್ಲಿಕೇಶನ್ ಚಾಲನೆಯಲ್ಲಿದೆ" + "ಡ್ರೈವಿಂಗ್‌ ಅಪ್ಲಿಕೇಶನ್ ನಿರ್ಗಮಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ." "ಟೆಥರಿಂಗ್ ಅಥವಾ ಹಾಟ್‌ಸ್ಪಾಟ್ ಸಕ್ರಿಯವಾಗಿದೆ" "ಹೊಂದಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ." "ಟೆಥರಿಂಗ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ" @@ -1692,8 +1702,7 @@ "ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಸ್ಥಾಪಿಸಿದ್ದಾರೆ" "ನಿಮ್ಮ ನಿರ್ವಾಹಕರಿಂದ ಅಪ್‌ಡೇಟ್ ಮಾಡಲ್ಪಟ್ಟಿದೆ" "ನಿಮ್ಮ ನಿರ್ವಾಹಕರು ಅಳಿಸಿದ್ದಾರೆ" - - + "ಬ್ಯಾಟರಿ ಬಾಳಿಕೆಯನ್ನು ಹೆಚ್ಚಿಸಲು, ಬ್ಯಾಟರಿ ಉಳಿಕೆಯು ನಿಮ್ಮ ಸಾಧನದ ಕಾರ್ಯಕ್ಷಮತೆಯನ್ನು ಕಡಿಮೆ ಮಾಡುತ್ತದೆ ಮತ್ತು ಕಂಪನ, ಸ್ಥಳದ ಸೇವೆಗಳು ಹಾಗೂ ಹಿನ್ನೆಲೆ ಡೇಟಾವನ್ನು ಮಿತಿಗೊಳಿಸುತ್ತದೆ. ಸಿಂಕ್ ಮಾಡುವಿಕೆಯನ್ನು ಅವಲಂಬಿಸಿರುವಂತಹ ಇಮೇಲ್, ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ ಮತ್ತು ಇತರ ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ನೀವು ಅದನ್ನು ತೆರೆಯದ ಹೊರತು ಅಪ್‌ಡೇಟ್‌‌ ಆಗುವುದಿಲ್ಲ.\n\nಸಾಧನವು ಚಾರ್ಜ್ ಆಗುತ್ತಿರುವಾಗ ಬ್ಯಾಟರಿ ಉಳಿಕೆಯು ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಆಫ್ ಆಗುತ್ತದೆ." "ಡೇಟಾ ಬಳಕೆ ಕಡಿಮೆ ಮಾಡುವ ನಿಟ್ಟಿನಲ್ಲಿ, ಡೇಟಾ ಸೇವರ್ ಕೆಲವು ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಹಿನ್ನೆಲೆಯಲ್ಲಿ ಡೇಟಾ ಕಳುಹಿಸುವುದನ್ನು ಅಥವಾ ಸ್ವೀಕರಿಸುವುದನ್ನು ತಡೆಯುತ್ತದೆ. ನೀವು ಪ್ರಸ್ತುತ ಬಳಸುತ್ತಿರುವ ಅಪ್ಲಿಕೇಶನ್ ಡೇಟಾವನ್ನು ಪ್ರವೇಶಿಸಬಹುದು ಆದರೆ ಪದೇ ಪದೇ ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ. ಇದರರ್ಥ, ಉದಾಹರಣೆಗೆ, ನೀವು ಅವುಗಳನ್ನು ಟ್ಯಾಪ್ ಮಾಡುವವರೆಗೆ ಆ ಚಿತ್ರಗಳು ಕಾಣಿಸಿಕೊಳ್ಳುವುದಿಲ್ಲ." "ಡೇಟಾ ಉಳಿಸುವಿಕೆಯನ್ನು ಆನ್ ಮಾಡುವುದೇ?" "ಆನ್‌ ಮಾಡಿ" @@ -1744,22 +1753,14 @@ "%1$s ಅವರಿಂದ ಮ್ಯೂಟ್‌ ಮಾಡಲಾಗಿದೆ" "ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಆಂತರಿಕ ಸಮಸ್ಯೆಯಿದೆ ಹಾಗೂ ನೀವು ಫ್ಯಾಕ್ಟರಿ ಡೇಟಾವನ್ನು ಮರುಹೊಂದಿಸುವರೆಗೂ ಅದು ಅಸ್ಥಿರವಾಗಬಹುದು." "ನಿಮ್ಮ ಸಾಧನದಲ್ಲಿ ಆಂತರಿಕ ಸಮಸ್ಯೆಯಿದೆ. ವಿವರಗಳಿಗಾಗಿ ನಿಮ್ಮ ತಯಾರಕರನ್ನು ಸಂಪರ್ಕಿಸಿ." - - - - - - - - - - - - - - - - + "USSD ವಿನಂತಿಯನ್ನು ಸಾಮಾನ್ಯ ಕರೆಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ" + "USSD ವಿನಂತಿಯನ್ನು SS ವಿನಂತಿಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ" + "ಹೊಸ USSD ವಿನಂತಿಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ" + "USSD ವಿನಂತಿಯನ್ನು ವೀಡಿಯೊ ಕರೆಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ" + "SS ವಿನಂತಿಯನ್ನು ಸಾಮಾನ್ಯ ಕರೆಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ" + "SS ವಿನಂತಿಯನ್ನು ವೀಡಿಯೊ ಕರೆಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ" + "SS ವಿನಂತಿಯನ್ನು USSD ವಿನಂತಿಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ" + "ಹೊಸ SS ವಿನಂತಿಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ" "ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್" "ವಿಸ್ತೃತಗೊಳಿಸಿ" "ಕುಗ್ಗಿಸಿ" @@ -1857,6 +1858,10 @@ "ಧ್ವನಿಗಾಗಿ ಸಿಮ್ ಸಿದ್ಧವಾಗಿಲ್ಲ" "ಧ್ವನಿಗಾಗಿ ಸಿಮ್ ಅನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ" "ಧ್ವನಿಗಾಗಿ ಫೋನ್ ಅನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ" + "%d ಸಿಮ್ ಅನ್ನು ಅನುಮತಿಸಲಾಗಿಲ್ಲ" + "%d ಸಿಮ್ ಅನ್ನು ಒದಗಿಸಲಾಗಿಲ್ಲ" + "%d ಸಿಮ್ ಅನ್ನು ಅನುಮತಿಸಲಾಗಿಲ್ಲ" + "%d ಸಿಮ್ ಅನ್ನು ಅನುಮತಿಸಲಾಗಿಲ್ಲ" "ಪಾಪ್‌ಅಪ್ ವಿಂಡೋ" "+ %1$d" "ಅಪ್ಲಿಕೇಶನ್ ಆವೃತ್ತಿಯನ್ನು ಡೌನ್‌ಗ್ರೇಡ್‌ ಮಾಡಲಾಗಿದೆ ಅಥವಾ ಈ ಶಾರ್ಟ್‌ಕಟ್‌ಗೆ ಹೊಂದಾಣಿಕೆಯಾಗುವುದಿಲ್ಲ" @@ -1877,8 +1882,6 @@ "ಇದು ವೈಶಿಷ್ಟ್ಯದ ಹೊಸ ಬದಲಾವಣೆಯ ಸೆಟ್ಟಿಂಗ್‌ ಆಗಿದೆ. ಬದಲಾಯಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ." "ಅಡಚಣೆ ಮಾಡಬೇಡಿ ಬದಲಾಗಿದೆ" "ಏನನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ ಎಂಬುದನ್ನು ಪರೀಕ್ಷಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ." - - - - + "ಸಿಸ್ಟಂ" + "ಸೆಟ್ಟಿಂಗ್‌ಗಳು" diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index d378c673df05cc1303886cfee9a262e396955225..9fd88ab3faa8a04055bde738c849ee9e19f98e78 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -82,6 +82,8 @@ "음성 서비스를 이용할 수 없음" "음성 서비스 및 긴급 전화가 차단됨" "이동통신사에서 서비스를 일시적으로 사용 중지했습니다." + + "모바일 네트워크에 연결할 수 없습니다." "기본 네트워크를 변경해 보세요. 탭하여 변경할 수 있습니다." "긴급 전화를 사용할 수 없습니다." @@ -120,12 +122,13 @@ "로밍 배너 사용" "로밍 배너 사용 안함" "서비스 검색 중" - - + "Wi‑Fi 통화를 설정할 수 없음" "Wi-Fi를 사용하여 전화를 걸고 메시지를 보내려면 먼저 이동통신사에 문의하여 서비스를 설정해야 합니다. 그런 다음 설정에서 Wi-Fi 통화를 사용 설정하시기 바랍니다. (오류 코드: %1$s)" - + + "이동통신사를 통해 Wi‑Fi 통화를 등록하는 중에 문제가 발생했습니다. 오류 코드: %1$s" + "%s" "%s Wi-Fi 통화" @@ -481,6 +484,8 @@ "앱이 NFC(근거리 무선 통신) 태그, 카드 및 리더와 통신할 수 있도록 허용합니다." "화면 잠금 사용 중지" "앱이 키 잠금 및 관련 비밀번호 보안을 사용중지할 수 있도록 허용합니다. 예를 들어, 휴대전화가 수신전화를 받을 때 키 잠금을 사용중지했다가 통화가 끝나면 키 잠금을 다시 사용할 수 있습니다." + "생체 인식 하드웨어 사용" + "앱에서 생체 인식 하드웨어를 인증에 사용하도록 허용합니다." "지문 하드웨어 관리" "사용할 지문 템플릿의 추가 및 삭제 메소드를 앱에서 실행하도록 허용합니다." "지문 하드웨어 사용" @@ -493,6 +498,8 @@ "인식할 수 없습니다." + + "지문 인식 하드웨어를 사용할 수 없습니다." "지문을 저장할 수 없습니다. 기존 지문을 삭제하세요." "지문 인식 시간이 초과되었습니다. 다시 시도하세요." @@ -1005,14 +1012,23 @@ "입력 방법" "텍스트 작업" "이메일" + "선택한 주소로 이메일 보내기" "전화" + "선택한 전화번호로 전화 걸기" "위치 확인" + "선택한 주소 위치 확인" "열기" + "선택한 URL 열기" "메시지" + "선택한 전화번호로 메시지 전송" "추가" + "연락처에 추가" "보기" + "캘린더에서 선택한 시간 보기" "일정" + "선택한 시간의 일정 예약" "추적" + "선택한 항공편 추적" "저장 공간이 부족함" "일부 시스템 기능이 작동하지 않을 수 있습니다." "시스템의 저장 공간이 부족합니다. 250MB의 여유 공간이 확보한 후 다시 시작하세요." @@ -1141,8 +1157,7 @@ "공개 Wi‑Fi 네트워크에 연결" "이동통신사 Wi‑Fi 네트워크에 연결" - - + "Wi-Fi 네트워크에 연결 중" "Wi‑Fi 네트워크에 연결됨" "Wi‑Fi 네트워크에 연결할 수 없음" "모든 네트워크를 보려면 탭하세요." @@ -1258,33 +1273,49 @@ "%s이(가) 다른 앱 위에 표시됨" "%s에서 이 기능이 사용되는 것을 원하지 않는 경우 탭하여 설정을 열고 기능을 사용 중지하세요." "사용 중지" - "%s 준비 중" - "오류 확인 중" - "새로운 %s 감지됨" + + + + + + + + "사진 및 미디어를 전송하는 데 사용합니다." - "손상된 %s입니다." - "%s이(가) 손상되었습니다. 해결하려면 탭하세요." - "%s이(가) 손상되었습니다. 선택하여 문제를 해결하세요." + + + + "지원되지 않는 %s입니다." "이 기기는 %s을(를) 지원하지 않습니다. 지원하는 형식으로 설정하려면 탭하세요." "이 기기는 이 %s을(를) 지원하지 않습니다. 선택하여 지원되는 형식으로 설정하세요." "%s이(가) 예기치 않게 삭제됨" - "데이터 손실을 피하려면 %s을(를) 마운트 해제한 다음 삭제하세요." - "%s 삭제됨" - "%s이(가) 삭제되었습니다. 새로 삽입하세요." - "아직 %s 꺼내는 중…" - "삭제하지 마세요." + + + + + + + + + + "설정" "마운트 해제" "둘러보기" "%s 없음" - "기기 다시 삽입" + + "%s 이동 중" "데이터 이동 중" - "이동 완료" - "데이터를 %s(으)로 이동했습니다." - "데이터를 이동할 수 없음" - "원래 위치에 데이터 남아 있음" + + + + + + + + "제거됨" "꺼냄" "확인 중…" @@ -1676,8 +1707,7 @@ "관리자에 의해 설치되었습니다." "관리자에 의해 업데이트되었습니다." "관리자에 의해 삭제되었습니다." - - + "배터리 세이버는 배터리 수명 연장을 위해 기기 성능을 줄이며 진동, 위치 서비스 및 백그라운드 데이터를 제한하거나 사용 중지합니다. 이메일, 메시지 및 동기화가 필요한 기타 앱은 앱을 열 때까지 업데이트되지 않을 수 있습니다.\n\n기기가 충전 중일 때는 자동으로 배터리 세이버가 사용 중지됩니다." "데이터 사용량을 줄이기 위해 데이터 절약 모드는 일부 앱이 백그라운드에서 데이터를 전송하거나 수신하지 못하도록 합니다. 현재 사용 중인 앱에서 데이터에 액세스할 수 있지만 빈도가 줄어듭니다. 예를 들면, 이미지를 탭하기 전에는 이미지가 표시되지 않습니다." "데이터 절약 모드를 사용할까요?" "사용 설정" @@ -1728,22 +1758,14 @@ "%1$s에서 알림음 음소거" "사용 중인 기기 내부에 문제가 발생했습니다. 초기화할 때까지 불안정할 수 있습니다." "사용 중인 기기 내부에 문제가 발생했습니다. 자세한 내용은 제조업체에 문의하세요." - - - - - - - - - - - - - - - - + "USSD 요청이 일반 통화로 변경됨" + "USSD 요청이 SS 요청으로 변경됨" + "새 USSD 요청으로 변경됨" + "USSD 요청이 화상 통화로 변경됨" + "SS 요청이 일반 통화로 변경됨" + "SS 요청이 화상 통화로 변경됨" + "SS 요청이 USSD 요청으로 변경됨" + "새 SS 요청으로 변경됨" "직장 프로필" "펼치기" "접기" @@ -1841,6 +1863,14 @@ "SIM이 음성으로 프로비저닝되지 않음" "SIM에서 음성이 허용되지 않음" "휴대전화에서 음성이 허용되지 않음" + + + + + + + + "팝업 창" "%1$d개 더보기" "앱 버전이 다운그레이드되었거나 이 단축키와 호환되지 않습니다." diff --git a/core/res/res/values-ky/strings.xml b/core/res/res/values-ky/strings.xml index 7c8029e51abcc5db1b8f4694c97f6a8dc666340c..bf365eb4a1481772585c8590a8dc5c51739d6eb3 100644 --- a/core/res/res/values-ky/strings.xml +++ b/core/res/res/values-ky/strings.xml @@ -82,6 +82,8 @@ "Аудио чалуу кызматы бөгөттөлгөн" "Чалуу жана шашылыш чалуу кызматы бөгөттөлгөн" "Байланыш оператору убактылуу бөгөттөп койгон" + + "Мобилдик тармакка туташпай жатат" "Тандалган тармакты өзгөртүп көрүңүз. Өзгөртүү үчүн таптаңыз." "Шашылыш чалуу жеткиликсиз" @@ -120,12 +122,13 @@ "Роуминг баннери күйгүзүлгөн" "Роуминг баннери өчүрүлгөн" "Кызмат изделүүдө" - - + "Wi-Fi аркылуу чалуу функциясы жөндөлгөн жок" "Wi-Fi аркылуу чалууларды аткарып жана билдирүүлөрдү жөнөтүү үчүн адегенде байланыш операторуңуздан бул кызматты орнотушун сураныңыз. Андан соң, Жөндөөлөрдөн Wi-Fi чалууну кайра күйгүзүңүз. (Ката коду: %1$s)" - + + "Байланыш операторуңуз менен Wi-Fi аркылуу чалууну каттоодо ката кетти: %1$s" + "%s" "%s Wi-Fi Чалуу" @@ -159,10 +162,8 @@ "Өтө көп талаптар иштетилүүдө. Кайта аракеттениңиз." "%1$s менен кирүүдө ката кетти" "Шайкештирүү" - - - - + "Шайкештирилбей жатат" + "Өтө көп %s мазмунун өчүрүү аракети орун алды." "Планшеттин сактагычы толуп калды. Орун бошотуш үчүн кээ бир файлдарды өчүрүңүз." "Саат сактагычы толуп калды. Орун бошотуу үчүн айрым файлдарды жок кылыңыз." "Сыналгынын сактагычы толуп калды. Айрым файлдарды жок кылып орун бошотуңуз." @@ -272,40 +273,31 @@ "Жумуш профилине которулуу" "Байланыштар" "байланыштарыңызды көрүүгө" - - + "<b>%1$s</b> колдонмосуна байланыштарыңызды пайдаланууга уруксат берилсинби?" "Жайгашкан жер" "түзмөктүн жайгашкан жерин аныктоого" - - + "<b>%1$s</b> колдонмосуна бул түзмөктүн жайгашкан жерин пайдаланууга уруксат берилсинби?" "Жылнаама" "жылнаамаңызды пайдалануу" - - + "<b>%1$s</b> колдонмосуна жылнаамаңызды пайдаланууга уруксат берилсинби?" "SMS" "SMS билдирүүлөрдү жиберүү жана көрсөтүү" - - + "<b>%1$s</b> колдонмосуна SMS билдирүүлөрдү жөнөтүүгө жана окууга уруксат берилсинби?" "Сактагыч" "түзмөгүңүздөгү сүрөттөрдү жана башка мультимедиа файлдарын пайдаланууга" - - + "<b>%1$s</b> колдонмосуна түзмөгүңүздөгү сүрөттөрдү жана башка мультимедиа файлдарын пайдаланууга уруксат берилсинби?" "Микрофон" "аудио жаздыруу" - - + "<b>%1$s</b> колдонмосуна аудио файлдарды жаздырууга уруксат берилсинби?" "Камера" "сүрөт жана видео тартууга" - - + "<b>%1$s</b> колдонмосуна сүрөттөрдү тартып, видеолорду жаздырууга уруксат берилсинби?" "Телефон" "телефон чалуу жана аларды башкаруу" - - + "<b>%1$s</b> колдонмосуна телефон чалууга жана чалууларды башкарууга уруксат берилсинби?" "Дене сенсорлору" "организмдин абалына көз салган сенсордун дайындарына мүмкүнчүлүк алуу" - - + "<b>%1$s</b> колдонмосуна организмдин абалына көз салган сенсордун дайындарын пайдаланууга уруксат берилсинби?" "Терезедеги мазмунду алып турат" "Учурда ачылып турган терезедеги маалыматты талдайт." "\"Сыйпалап изилдөө\" мүмкүнчүлүгүн иштетет" @@ -492,6 +484,8 @@ "Колдонмого Жакынкы аралыкта байланышуу (NFC) белгилери, карталары жана окугучтары менен байланышуу мүмкүнчүлүгүн берет." "экранды бөгөттөөнү өчүрүү" "Колдонмого экрандын бөгөттөөчү жана ага байланыштуу сырсөз коргоосун өчүрүү уруксатын берет. Мисалы, чалуу келгенде экрандын бөгөтүн алып салат, чалуу бүткөндө кайрадан орнотот." + "биометрикалык аппаратты колдонуу" + "Колдонмого аныктыгын текшерүү үчүн биометрикалык аппаратты пайдалануу мүмкүндүгүн берет" "манжа изинин аппараттык камсыздоосун башкаруу" "Колдонмого пайдалануу үчүн манжа изинин үлгүлөрүн кошуу жана жок кылуу мүмкүндүгүн берет." "манжа изинин аппараттык камсыздоосун колдонуу" @@ -504,6 +498,8 @@ "Таанылган жок" + + "Манжа изинин аппараттык камсыздоосу жеткиликтүү эмес." "Манжа изин сактоо мүмкүн эмес. Учурдагы манжа изин алып салыңыз." "Манжа изин күтүү мөөнөтү бүттү. Кайра аракет кылыңыз." @@ -1016,14 +1012,23 @@ "Киргизүү ыкмасы" "Текст боюнча иштер" "Электрондук почта" + "Тандалган дарекке электрондук кат жөнөтүү" "Чалуу" + "Тандалган телефон номерине чалуу" "Жайгашкан жер" + "Тандалган даректи картада табуу" "Ачуу" + "Тандалган URL\'ди ачуу" "Билдирүү" + "Тандалган телефон номерине билдирүү жөнөтүү" "Кошуу" + "Байланыштарга кошуу" "Көрүү" + "Тандалган убакытты жылнаамада көрүү" "Графикке киргизүү" + "Иш-чараны тандалган убакытка графикке киргизүү" "Көз салуу" + "Тандалган аба каттамына көз салуу" "Сактагычта орун калбай баратат" "Системанын кээ бир функциялары иштебеши мүмкүн" "Тутумда сактагыч жетишсиз. 250МБ бош орун бар экенин текшерип туруп, өчүрүп күйгүзүңүз." @@ -1117,8 +1122,7 @@ "%1$s колдонмосун ачуу" "%1$s сакталбастан жабылат" "%1$s эстутум чегинен ашып кетти" - - + "Үймө дамп топтолду. Бөлүшүү үчүн таптап коюңуз." "Үймө дамп бөлүшүлсүнбү?" "%1$s процесси өзүнүн %2$s процесс чегинен ашып кетти. Үймө дамп сиз үчүн иштеп чыгуучу менен бөлүшүүгө даяр. Абайлаңыз: бул үймө дампта колдонмонун уруксаты бар жеке маалыматыңыз камтылышы мүмкүн." "Текст үчүн аракет тандаңыз" @@ -1153,8 +1157,7 @@ "Ачык Wi‑Fi тармагына туташуу" "Байланыш операторунун Wi‑Fi тармагына туташуу" - - + "Wi‑Fi тармагына туташууда" "Ачык Wi‑Fi тармагына туташты" "Wi-Fi тармагына туташпай калды" "Бардык тармактарды көрүү үчүн басыңыз" @@ -1272,33 +1275,49 @@ "%s: башка колдонмолордун үстүнөн" "Эгер %s колдонмосу бул функцияны пайдаланбасын десеңиз, жөндөөлөрдү ачып туруп, аны өчүрүп коюңуз." "Өчүрүү" - "%s даярдалууда" - "Каталар текшерилүүдө" - "Жаңы %s аныкталды" + + + + + + + + "Сүрөттөрдү жана медиа өткөрүү үчүн" - "%s бузулган" - "%s - бузук. Оңдоо үчүн таптап коюңуз." - "%s – бузук. Оңдоо үчүн тандаңыз." + + + + "%s колдоого алынбайт" "Бул түзмөктө %s колдоого алынбайт. Колдоого алынуучу форматта орнотуу үчүн таптап коюңуз." "Бул түзмөктө %s колдоого алынбайт. Колдоого алынуучу форматта орнотуу үчүн тандаңыз." "%s күтүүсүздөн алынып салынды" - "Дайындарды жоготуунун алдын алуу үчүн чыгаруудан мурун %s түзмөгүн бошотуңуз" - "%s алынды" - "%s алынды; жаңысын салыңыз" - "%s дагы эле чыгарылууда…" - "Чыгарба" + + + + + + + + + + "Орнотуу" "Чыгаруу" "Изилдөө" "%s табылбай жатат" - "Түзмөктү кайра сайыңыз" + + "%s сактагычына ооштурулууда" "Дайындар ооштурулууда…" - "Ооштуруу аяктады" - "Дайындар %s сактагычына ооштурулду" - "Дайындар ооштурулбай калды" - "Дайындар баштапкы ордунда калды" + + + + + + + + "Өчүрүлдү" "Чыгарылган" "Текшерилүүдө…" @@ -1357,17 +1376,14 @@ "Дайым иштеген VPN туташууда…" "Дайым иштеген VPN туташтырылды" "Ар дайым иштеген VPN\'ден ажыратуу" - - + "Ар дайым күйүк VPN\'ге туташпай калды" "Тармакты же VPN жөндөөлөрүн өзгөртүү" "Файл тандоо" "Эч файл тандалган жок" "Баштапкы абалга келтирүү" "Тапшыруу" - - - - + "Унаа айдоо колдонмосу иштеп жатат" + "Унаа айдоо колдонмосунан чыгуу үчүн таптаңыз." "Жалгаштыруу же хотспот жандырылган" "Жөндөө үчүн таптап коюңуз." "Жалгаштыруу функциясы өчүрүлгөн" @@ -1693,8 +1709,7 @@ "Администраторуңуз орнотуп койгон" "Администраторуңуз жаңыртып койгон" "Администраторуңуз жок кылып салган" - - + "Батареянын кубатынын мөөнөтүн узартуу үчүн Батареяны үнөмдөгүч режиминде түзмөгүңүздүн ишинин майнаптуулугу азайып, дирилдөө, жайгашкан жерди аныктоо кызматтары жана фондук дайындардын көпчүлүгү чектелип же өчүрүлөт. Электрондук почта, жазышуу жана башка шайкештирилүүчү колдонмолор ачылмайынча, жаңыртылбашы мүмкүн.\n\nБатареяны үнөмдөгүч режими түзмөгүңүз кубатталып жатканда автоматтык түрдө өчүп калат." "Трафикти үнөмдөө режиминде айрым колдонмолор дайындарды фондо өткөрө алышпайт. Учурда сиз пайдаланып жаткан колдонмо дайындарды жөнөтүп/ала алат, бирок адаттагыдан азыраак өткөргөндүктөн, анын айрым функциялары талаптагыдай иштебей коюшу мүмкүн. Мисалы, сүрөттөр басылмайынча жүктөлбөйт." "Дайындарды үнөмдөгүч күйсүнбү?" "Күйгүзүү" @@ -1745,22 +1760,14 @@ "%1$s тарабынан үнсүздөлдү" "Түзмөгүңүздө ички көйгөй бар жана ал баштапкы абалга кайтарылмайынча туруктуу иштебей коюшу мүмкүн." "Түзмөгүңүздө ички көйгөй бар. Анын чоо-жайын билүү үчүн өндүрүүчүңүзгө кайрылыңыз." - - - - - - - - - - - - - - - - + "USSD сурамы демейки чалууга өзгөртүлдү" + "USSD сурамы SS сурамына өзгөртүлдү" + "Жаңы USSD сурамына өзгөртүлдү" + "USSD сурамы видео чалууга өзгөртүлдү" + "SS сурамы демейки чалууга өзгөртүлдү" + "SS сурамы видео чалууга өзгөртүлдү" + "SS сурамы USSD сурамына өзгөртүлдү" + "Жаңы SS сурамына өзгөртүлдү" "Жумуш профили" "Жайып көрсөтүү" "Жыйыштыруу" @@ -1858,6 +1865,14 @@ "SIM-карта сүйлөшүү үчүн таанылган жок" "SIM-картаны сүйлөшүү үчүн колдонууга тыюу салынган" "Телефонду сүйлөшүү үчүн колдонууга тыюу салынган" + + + + + + + + "Калкып чыкма терезе" "+ %1$d" "Колдонмонун мурунку версиясын иштетип жатасыз же ал бул шилтемеге шайкеш эмес" @@ -1878,8 +1893,6 @@ "Бул жаңы тартип. Өзгөртүү үчүн таптаңыз." "\"Тынчымды алба\" режими өзгөрдү" "Бөгөттөлгөн нерселерди көрүү үчүн таптаңыз." - - - - + "Тутум" + "Жөндөөлөр" diff --git a/core/res/res/values-lo/strings.xml b/core/res/res/values-lo/strings.xml index 08ab0cc848244382e542dd433e07b61d45ee3436..164b2785d05107fadbde47a19745cf444c3fa7b7 100644 --- a/core/res/res/values-lo/strings.xml +++ b/core/res/res/values-lo/strings.xml @@ -82,6 +82,8 @@ "ບໍ່ມີບໍລິການໂທສຽງ" "ບໍ່ມີບໍລິການສຽງ ຫຼື ການໂທສຸກເສີນ" "ຖືກປິດໄວ້ຊົ່ວຄາວໂດຍຜູ້ໃຫ້ບໍລິການຂອງທ່ານ" + + "ບໍ່ສາມາດຕິດຕໍ່ເຄືອຂ່າຍມືຖືໄດ້" "ໃຫ້ລອງປ່ຽນເຄືອຂ່າຍທີ່ຕ້ອງການ. ແຕະເພື່ອປ່ຽນ." "ບໍ່ສາມາດໃຊ້ການໂທສຸກເສີນໄດ້" @@ -120,12 +122,13 @@ "ເປີດໂຣມມິງແບນເນີ" "ປິດໂຣມມິງແບນເນີ" "ຊອກຫາບໍລິການ" - - + "ບໍ່ສາມາດຕັ້ງຄ່າການໂທ Wi‑Fi ໄດ້" "ເພື່ອໂທ ແລະ ສົ່ງຂໍ້ຄວາມຜ່ານ Wi-Fi, ໃຫ້ແຈ້ງໃຫ້ຜູ້ໃຫ້ບໍລິການຂອງທ່ານຕັ້ງບໍລິການນີ້. ຈາກນັ້ນເປີດໃຊ້ການໂທ Wi-Fi ອີກຄັ້ງຈາກການຕັ້ງຄ່າ. (ລະຫັດຂໍ້ຜິດພາດ: %1$s)" - + + "ເກີດບັນຫາໃນການລົງທະບຽນການໂທ Wi‑Fi ກັບຜູ້ໃຫ້ບໍລິການຂອງທ່ານ: %1$s" + "%s" "ການ​ໂທ %s Wi-Fi" @@ -481,6 +484,10 @@ "ອະນຸຍາດໃຫ້ແອັບຯຕິດຕໍ່ສື່ສານກັບປ້າຍກຳກັບ, ບັດ ແລະໂຕອ່ານຂອງການສື່ສານໄລຍະສັ້ນ (NFC)." "ປິດການລັອກໜ້າຈໍ" "ອະນຸຍາດໃຫ້ແອັບຯປິດການເຮັດວຽກຂອງປຸ່ມລັອກ ແລະລະບົບຄວາມປອດໄພຂອງລະຫັດຜ່ານທີ່ເຊື່ອມໂຍງກັນ. ໂຕຢ່າງ: ໂທລະສັບຈະປິດການເຮັດວຽກຂອງປຸ່ມລັອກເມື່ອມີສາຍໂທເຂົ້າ ຈາກນັ້ນຈຶ່ງເປີດໃຊ້ໄດ້ອີກເມື່ອວາງສາຍແລ້ວ." + + + + "ຈັດ​ການ​ຮາດ​ແວ​ລາຍ​ນີ້ວ​ມື" "ອະ​ນຸ​ຍາດ​ໃຫ້​ແອັບ​ເຮັດ​ໃຫ້​ວິ​ທີ​ການ​ຕ່າງໆ​ເພີ່ມ ແລະ​ລຶບ​ແມ່​ແບບ​ລາຍ​ນີ້ວ​ມື​ສຳ​ລັບ​ການ​ໃຊ້." "ໃຊ້​ຮາດ​ແວ​ລາຍ​ນີ້ວ​ມື" @@ -493,6 +500,8 @@ "ບໍ່​ຈົດ​ຈຳ​ໄດ້" + + "ບໍ່​ມີ​ຮາດ​ແວລາຍ​ນີ້ວ​ມື​ໃຫ້​ຢູ່." "ບໍ່​ສາ​ມາດ​ເກັບ​ຮັກ​ສາ​ລາຍ​ນີ້ວ​ມື​ໄວ້​ໄດ້. ກະ​ລຸ​ນາ​ເອົາ​ລາຍ​ນີ້ວ​ມື​ທີ່​ມີ​ຢູ່​ອອກ​ໄປ." "ເວ​ລາ​ລາຍ​ນີ້ວ​ມື​ບໍ່​ເຂົ້າ​ເຖິງ​ໄດ້. ລອງ​ໃໝ່​ອີກ." @@ -1005,14 +1014,32 @@ "ຮູບແບບການປ້ອນຂໍ້ມູນ" "ການເຮັດວຽກຂອງຂໍ້ຄວາມ" "ອີເມວ" + + "ໂທ" + + "​ລະ​ບຸ​ບ່ອນ​ຢູ່" + + "ເປີດ" + + "ຂໍ້ຄວາມ" + + "ເພີ່ມ" + + "ເບິ່ງ" + + "ຕັ້ງເວລາ" + + "ແທຣັກ" + + "ພື້ນທີ່ຈັດເກັບຂໍ້ມູນກຳລັງຈະເຕັມ" "ການເຮັດວຽກບາງຢ່າງຂອງລະບົບບາງອາດຈະໃຊ້ບໍ່ໄດ້" "​ບໍ່​ມີ​ບ່ອນ​ເກັບ​ຂໍ້​ມູນ​ພຽງ​ພໍ​ສຳ​ລັບ​ລະ​ບົບ. ກວດ​ສອບ​ໃຫ້​ແນ່​ໃຈ​ວ່າ​ທ່ານ​ມີ​ພື້ນ​ທີ່​ຫວ່າງ​ຢ່າງ​ໜ້ອຍ 250MB ​ແລ້ວລອງ​ໃໝ່." @@ -1141,8 +1168,7 @@ "ເຊື່ອມຕໍ່ຫາເຄືອຂ່າຍ Wi‑Fi ແບບເປີດ" "ເຊື່ອມຕໍ່ຫາເຄືອຂ່າຍ Wi‑Fi ຜູ້ໃຫ້ບໍລິການ" - - + "ກຳລັງເຊື່ອມຕໍ່ຫາເຄືອຂ່າຍ Wi‑Fi" "ເຊື່ອມຕໍ່ຫາເຄືອຂ່າຍ Wi‑Fi ແລ້ວ" "ບໍ່ສາມາດເຊື່ອມຕໍ່ຫາເຄືອຂ່າຍ Wi‑Fi ໄດ້" "ແຕະເພື່ອເບິ່ງເຄືອຂ່າຍທັງໝົດ" @@ -1258,33 +1284,49 @@ "%s ກຳລັງສະແດງຜົນບັງແອັບອື່ນຢູ່" "ຫາກທ່ານບໍ່ຕ້ອງການ %s ໃຫ້ໃຊ້ຄຸນສົມບັດນີ້, ໃຫ້ແຕະເພື່ອເປີດການຕັ້ງຄ່າ ແລ້ວປິດມັນໄວ້." "ປິດ" - "ກຳ​ລັງ​ກຽມ %s" - "ກຳລັງກວດຫາຂໍ້ຜິດພາດ" - "ກວດ​ພົບ %s ໃໝ່​ແລ້ວ" + + + + + + + + "ສຳ​ລັບ​ການ​ໂອນ​ຮູບຖ່າຍ ແລະ​ມີ​ເດຍ" - "ເສຍຫາຍແລ້ວ %s" - "%s ເສຍຫາຍ. ແຕະເພື່ອສ້ອມແປງ." - "%s ເສຍຫາຍ. ແຕະເພື່ອສ້ອມແປງ." + + + + "ບໍ່​ຮອງ​ຮັບ %s" "ອຸປະກອນນີ້ບໍ່ຮອງຮັບ %s ນີ້. ແຕະເພື່ອຕັ້ງຄ່າໃນຮູບແບບທີ່ຮອງຮັບ." "ອຸປະກອນນີ້ບໍ່ຮອງຮັບ %s ນີ້. ແຕະເພື່ອຕັ້ງຄ່າໃນຮູບແບບທີ່ຮອງຮັບ." "%s ຖືກ​ຖອດ​ອອກ​ໄປ​ແບບ​ບໍ່​ຄາດ​ຄິດ" - "ຖອດ​ເຊື່ອມ​ຕໍ່ %s ກ່ອນ​ເອົາ​ອອກ​ໄປ ເພື່ອ​ຫຼີກ​ເວັ້ນ​ການ​ເສຍ​ຂໍ້​ມູນ" - "ເອົາ %s ອອກ​ໄປ​ແລ້ວ" - "%s ຖືກຖອດອອກແລ້ວ. ກະລຸນາໃສ່ອັນໃໝ່" - "ຍັງ​ກຳ​ລັງ​ເອົາ​ອອກ %s…" - "ຢ່າ​ເອົາ​ອອກ" + + + + + + + + + + "ຕິດ​ຕັ້ງ" "ເອົາອອກ" "ຄົ້ນຫາ" "%s ຂາດ​ໄປ" - "ໃສ່​ອຸ​ປະ​ກອນ​ນີ້​ເຂົ້າ​ໃໝ່" + + "ກຳ​ລັງ​ຍ້າຍ %s" "ກຳ​ລັງ​ຍ້າຍ​ຂໍ້​ມູນ" - "ການ​ຍ້າຍ​ສຳ​ເລັດ" - "ຍ້າຍ​ຂໍ້​ມູນ​ໃສ່ %s ແລ້ວ" - "ບໍ່​ສາ​ມາດ​ຍ້າຍ​ຂໍ້​ມູນ​ໄດ້" - "ຂໍ້​ມູນ​ເຫຼືອ​ໄວ້​ຢູ່​ໃນ​ທີ່​ຕັ້ງ​ເດີມ" + + + + + + + + "ເອົາອອກ" "ເອົາອອກແລ້ວ" "ກຳລັງກວດສອບ..." @@ -1676,8 +1718,7 @@ "ຖືກຕິດຕັ້ງໂດຍຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ" "ຖືກອັບໂຫລດໂດຍຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ" "ຖືກລຶບອອກໂດຍຜູ້ເບິ່ງແຍງລະບົບຂອງທ່ານ" - - + "ເພື່ອຂະຫຍາຍອາຍຸແບັດເຕີຣີ, ຕົວປະຢັດແບັດເຕີຣີຈະຫຼຸດປະສິດທິພາບອຸປະກອນຂອງທ່ານ ແລະ ຈຳກັດ ຫຼື ປິດການສັ່ນເຕືອນ, ບໍລິການສະຖານທີ່ ແລະ ຂໍ້ມູນພື້ນຫຼັງໄວ້. ອີເມວ, ຂໍ້ຄວາມ ແລະ ແອັບອື່ນໆທີ່ອີງອາໃສການຊິ້ງຂໍ້ມູນອາດຈະບໍ່ອັບເດດເວັ້ນເສຍແຕ່ທ່ານຈະເປີດພວກມັນ.\n\nຕົວປະຢັດບັດເຕີຣີຈະປິດອັດຕະໂນມັດເມື່ອສາກໄຟອຸປະກອນຂອງທ່ານ." "ເພື່ອຊ່ວຍຫຼຸດຜ່ອນການນຳໃຊ້ຂໍ້ມູນ, ຕົວປະຢັດຂໍ້ມູນຈະປ້ອງກັນບໍ່ໃຫ້ບາງແອັບສົ່ງ ຫຼື ຮັບຂໍ້ມູນໃນພື້ນຫຼັງ. ແອັບໃດໜຶ່ງທີ່ທ່ານກຳລັງໃຊ້ຢູ່ຈະສາມາດເຂົ້າເຖິງຂໍ້ມູນໄດ້ ແຕ່ອາດເຂົ້າເຖິງໄດ້ຖີ່ໜ້ອຍລົງ. ນີ້ອາດໝາຍຄວາມວ່າ ຮູບພາບຕ່າງໆອາດບໍ່ສະແດງຈົນກວ່າທ່ານຈະແຕະໃສ່ກ່ອນ." "ເປີດໃຊ້ຕົວປະຢັດຂໍ້ມູນບໍ?" "ເປີດໃຊ້" @@ -1728,22 +1769,14 @@ "ຖືກ​ປິດ​ສຽງ​ໂດຍ %1$s" "ມີ​ບັນ​ຫາ​ພາຍ​ໃນ​ກັບ​ອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ, ແລະ​ມັນ​ອາດ​ຈະ​ບໍ່​ສະ​ຖຽນ​ຈົນ​ກວ່າ​ທ່ານ​ຕັ້ງ​ເປັນ​ຂໍ້​ມູນ​ໂຮງ​ງານ​ຄືນ​ແລ້ວ." "ມີ​ບັນ​ຫາ​ພາຍ​ໃນ​ກັບ​ອຸ​ປະ​ກອນ​ຂອງ​ທ່ານ. ຕິດ​ຕໍ່ຜູ້​ຜະ​ລິດ​ຂອງ​ທ່ານ​ສຳ​ລັບ​ລາຍ​ລະ​ອຽດ​ຕ່າງໆ." - - - - - - - - - - - - - - - - + "ປ່ຽນການຮ້ອງຂໍ USSD ເປັນການໂທທຳມະດາແລ້ວ" + "ປ່ຽນຄຳຂໍ SS ເປັນຄຳຂໍ USSD ແລ້ວ" + "ປ່ຽນຄຳຂໍ USSD ໃໝ່ແລ້ວ" + "ປ່ຽນການຮ້ອງຂໍ USSD ເປັນການໂທວິດີໂອແລ້ວ" + "ປ່ຽນການຮ້ອງຂໍ SS ເປັນການໂທທຳມະດາແລ້ວ" + "ປ່ຽນການຮ້ອງຂໍ SS ເປັນການໂທວິດີໂອແລ້ວ" + "ປ່ຽນຄຳຂໍ SS ເປັນຄຳຂໍ USSD ແລ້ວ" + "ປ່ຽນຄຳຂໍ SS ໃໝ່ແລ້ວ" "​ໂປຣ​ໄຟລ໌​ບ່ອນ​ເຮັດ​ວຽກ" "ຂະຫຍາຍ" "ຫຍໍ້ເຂົ້າ" @@ -1841,6 +1874,14 @@ "ບໍ່ໄດ້ຈັດກຽມຊິມໄວ້ສຳລັບການໂທສຽງ" "ບໍ່ອະນຸຍາດໃຫ້ໃຊ້ຊິມສຳລັບການໂທສຽງ" "ບໍ່ອະນຸຍາດໃຫ້ໃຊ້ໂທລະສັບສຳລັບການໂທສຽງ" + + + + + + + + "ໜ້າຈໍປັອບອັບ" "+ %1$d" "ດາວເກຣດເວີຊັນແອັບແລ້ວ ຫຼື ບໍ່ສາມາດໃຊ້ຮ່ວມກັບທາງລັດນີ້ໄດ້" diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index d419a2dc1bc08c53ac4a4037f28ffc873f11f016..de0fe71a300977c45ab515629d4665a4aa0dd49b 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -79,15 +79,16 @@ "Skambintojo ID pagal numatytuosius nustatymus yra neapribotas. Kitas skambutis: neapribotas" "Paslauga neteikiama." "Negalima pakeisti skambinančiojo ID nustatymo." - "Duomenų paslauga neteikiama" - "Nėra skambučių pagalbos numeriu paslaugos" + "Duomenų paslaugos mobiliesiems nėra" + "Skambučių pagalbos numeriu paslaugos nėra" "Balso skambučių paslauga neteikiama" - "Balso skambučių / skambučių pagalbos numeriais paslauga neteikiama" - "Laikinai nesiūloma mobiliojo ryšio tinkle jūsų vietovėje" - "Nepavyko pasiekti tinklo" - "Kad pagerintumėte ryšį, pabandykite pakeisti tipą, pasirinktą skiltyje „Nustatymai“ > „Tinklas ir internetas“ > „Mobiliojo ryšio tinklai“ > „Pageidaujamas tinklo tipas“." - "„Wi-Fi“ skambinimas aktyvus" - "Kad būtų galima skambinti pagalbos numeriais, būtina naudoti mobiliojo ryšio tinklą." + "Balso skambučių arba skambučių pagalbos numeriu paslaugos nėra" + "Laikinai išjungė operatorius" + "SIM kortelėje %d laikinai išjungė operatorius" + "Nepavyko pasiekti mobiliojo ryšio tinklo" + "Pabandykite pakeisti pageidaujamą tinklą. Palieskite, kad pakeistumėte." + "Skambučių pagalbos numeriu paslauga nepasiekiama" + "Negalima skambinti pagalbos numeriu naudojant „Wi‑Fi“" "Įspėjimai" "Skambučio peradresavimas" "Atskambinimo pagalbos numeriu režimas" @@ -122,12 +123,12 @@ "Tarptinklinio ryšio reklamjuostė įjungta" "Tarptinklinio ryšio reklamjuostė išjungta" "Ieškoma paslaugos" - "„Wi-Fi“ skambinimas" + "„Wi‑Fi“ skambinimo nustatyti nepavyko" "Jei norite skambinti ir siųsti pranešimus naudodami „Wi-Fi“, pirmiausia paprašykite operatoriaus nustatyti šią paslaugą. Tada vėl įjunkite „Wi-Fi“ skambinimą skiltyje „Nustatymai“. (Klaidos kodas: %1$s)" - "Užregistruokite pas operatorių (klaidos kodas: %1$s)" + "Kilo problema registruojant „Wi‑Fi“ skambinimą pas operatorių: %1$s" "%s" @@ -162,8 +163,8 @@ "Apdorojama per daug užklausų. Vėliau bandykite dar kartą." "%1$s prisijungimo klaida" "Sinchronizuoti" - "Sinchronizuoti" - "Per daug %s trynimo." + "Sinchronizuoti nepavyko" + "Bandoma ištrinti per daug turinio (%s)." "Planšetinio kompiuterio atmintis pilna. Kad atlaisvintumėte vietos, ištrinkite kelis failus." "Laikrodžio saugykla pilna. Ištrinkite kelis failus, kad atlaisvintumėte vietos." "TV saugykla pilna. Ištrinkite kai kuriuos failus, kad atlaisvintumėte vietos." @@ -178,14 +179,13 @@ "Darbo profilio administratorius" "%s" "Darbo profilis ištrintas" - "Darbo profilis ištrintas dėl trūkstamos administratoriaus programos" "Trūksta darbo profilio administratoriaus programos arba ji sugadinta. Todėl darbo profilis ir susiję duomenys buvo ištrinti. Jei reikia pagalbos, susisiekite su administratoriumi." "Darbo profilis nebepasiekiamas šiame įrenginyje" "Per daug slaptažodžio bandymų" "Įrenginys yra tvarkomas" "Šį įrenginį tvarko organizacija ir gali stebėti tinklo srautą. Palieskite, kad gautumėte daugiau informacijos." "Įrenginys bus ištrintas" - "Administratoriaus programos negalima naudoti. Dabar įrenginys bus ištrintas.\n\nJei kyla klausimų, susisiekite su organizacijos administratoriumi." + "Administratoriaus programos negalima naudoti. Dabar įrenginio duomenys bus ištrinti.\n\nJei turite klausimų, susisiekite su organizacijos administratoriumi." "Neleidžiama spausdinti (%s)." "Aš" "Planšetinio kompiuterio parinktys" @@ -242,6 +242,9 @@ "Lėktuvo režimas" "ĮJUNGTAS lėktuvo režimas" "lėktuvo režimas IŠJUNGTAS" + "Akumuliatoriaus tausojimo priemonė" + "Akumuliatoriaus tausojimo priemonė IŠJUNGTA" + "Akumuliatoriaus tausojimo priemonė ĮJUNGTA" "Nustatymai" "Pagalba" "Voice Assist" @@ -275,31 +278,31 @@ "Perjungti į darbo profilį" "Kontaktai" "pasiekti kontaktus" - "Suteikti <b>%1$s</b> prieigą prie kontaktų" + "Suteikti <b>%1$s</b> galimybę pasiekti kontaktus?" "Vietovė" "pasiekti įrenginio vietovės informaciją" - "Suteikti prieigą <b>%1$s</b> prie įrenginio vietovės" + "Suteikti <b>%1$s</b> galimybę pasiekti įrenginio vietovę?" "Kalendorius" "pasiekti kalendorių" - "Suteikti <b>%1$s</b> prieigą prie kalendoriaus" + "Suteikti <b>%1$s</b> galimybę pasiekti kalendorių?" "SMS" "siųsti ir peržiūrėti SMS pranešimus" - "Leisti <b>%1$s</b> siųsti ir peržiūrėti SMS pranešimus" + "Leisti <b>%1$s</b> siųsti ir peržiūrėti SMS pranešimus?" "Saugykla" "pasiekti nuotraukas, mediją ir failus įrenginyje" - "Suteikti <b>%1$s</b> prieigą prie įrenginio nuotraukų, medijos ir failų" + "Suteikti <b>%1$s</b> galimybę pasiekti įrenginio nuotraukas, mediją ir failus?" "Mikrofonas" "įrašyti garso įrašą" - "Leisti <b>%1$s</b> įrašyti garsą" + "Leisti <b>%1$s</b> įrašyti garsą?" "Fotoaparatas" "fotografuoti ir filmuoti" - "Leisti <b>%1$s</b> fotografuoti nuotraukas ir įrašyti vaizdo įrašus" + "Leisti <b>%1$s</b> fotografuoti ir įrašyti vaizdo įrašus?" "Telefonas" "skambinti ir tvarkyti telefonų skambučius" - "Leisti <b>%1$s</b> atlikti ir tvarkyti skambučius" + "Leisti <b>%1$s</b> skambinti ir tvarkyti telefono skambučius?" "Kūno jutikliai" "pasiekti jutiklių duomenis apie gyvybinius ženklus" - "Suteikti <b>%1$s</b> prieigą prie jutiklių duomenų apie gyvybinius ženklus" + "Suteikti <b>%1$s</b> galimybę pasiekti jutiklių duomenis apie gyvybinius ženklus?" "Gauti lango turinį" "Tikrinti lango, su kuriuo sąveikaujate, turinį." "Įjungti „Naršyti paliečiant“" @@ -311,7 +314,7 @@ "Veiksmai gestais" "Galima paliesti, perbraukti, suimti ir atlikti kitus veiksmus gestais." "Kontrolinio kodo gestai" - "Gali užfiksuoti gestus, atliktus naudojant įrenginio kontrolinio kodo jutiklį." + "Gali užfiksuoti gestus, atliktus naudojant įrenginio kontrolinio kodo jutiklį." "išjungti ar keisti būsenos juostą" "Leidžiama programai neleisti būsenos juostos arba pridėti ir pašalinti sistemos piktogramas." "būti būsenos juosta" @@ -362,6 +365,8 @@ "Leidžiama programai savo dalis įrašyti į atmintį. Dėl to gali būti apribota kitomis programomis pasiekiama atmintis ir sulėtėti planšetinio kompiuterio veikimas." "Programai leidžiama nustatyti, kad tam tikros jos dalys nuolat išliktų atmintyje. Dėl to gali sumažėti kitoms programoms pasiekiamos atminties ir sulėtėti TV." "Leidžiama programai savo dalis įrašyti į atmintį. Dėl to gali būti apribota kitomis programomis pasiekiama atmintis ir sulėtėti telefono veikimas." + "vykdyti priekiniame plane veikiančią paslaugą" + "Programai leidžiama naudoti priekiniame plane veikiančias paslaugas." "matuoti programos atmintinės vietą" "Leidžiama programai nuskaityti kodą, duomenis ir talpykloje saugoti dydžius" "keisti sistemos nustatymus" @@ -484,6 +489,10 @@ "Leidžiama programai perduoti artimojo lauko ryšių technologijos (ALR) žymas, korteles ir skaitymo programas." "išjungti ekrano užraktą" "Leidžiama programai neleisti klavišo užrakto ir visos susijusios slaptažodžio apsaugos. Pvz., telefonas neleidžia klavišo užrakto priimant gaunamąjį skambutį ir pakartotinai jį įgalina, kai skambutis baigiamas." + + + + "tvarkyti kontrolinio kodo aparatinę įrangą" "Leidžiama programai aktyvinti metodus, norint pridėti ir ištrinti naudojamus kontrolinių kodų šablonus." "naudoti kontrolinio kodo aparatinę įrangą" @@ -496,6 +505,7 @@ "Neatpažintas" + "Kontrolinis kodas autentifikuotas" "Kontrolinio kodo aparatinė įranga nepasiekiama." "Negalima išsaugoti kontrolinio kodo. Pašalinkite esamą kontrolinį kodą." "Baigėsi kontrolinio kodo nustatymo skirtasis laikas. Bandykite dar kartą." @@ -808,6 +818,8 @@ "Atrakinimas pagal piešinį." "Atrakinimas pagal veidą." "Atrakinimas įvedus PIN kodą." + "SIM kortelės PIN kodo atrakinimas." + "SIM kortelės PUK kodo atrakinimas." "Atrakinimas įvedus slaptažodį." "Atrakinimo pagal piešinį sritis." "Slydimo sritis." @@ -869,6 +881,12 @@ "Tekstas nukopijuotas į iškarpinę." "Daugiau" "Meniu+" + "„Meta“ +" + "„Ctrl“ +" + "„Alt“ +" + "„Shift“ +" + "„Sym“ +" + "„Function“ +" "tarpas" "„Enter“ klavišas" "ištrinti" @@ -1034,14 +1052,32 @@ "Įvesties būdas" "Teksto veiksmai" "Siųsti el. laišką" + + "Skambinti" + + "Rasti" + + "Atidaryti" + + "Pranešimas" + + "Pridėti" + + "Peržiūrėti" + + "Tvarkaraštis" + + "Stebėti" + + "Mažėja laisvos saugyklos vietos" "Kai kurios sistemos funkcijos gali neveikti" "Sistemos saugykloje nepakanka vietos. Įsitikinkite, kad yra 250 MB laisvos vietos, ir paleiskite iš naujo." @@ -1114,31 +1150,28 @@ "Tikrinti, ar yra naujinių" "Programa „%1$s“ (procesas „%2$s“) pažeidė savo vykdomą „StrictMode“ politiką." "„%1$s“ procesas pažeidė savo vykdomą „StrictMode“ politiką." - "„Android“ naujovinama..." - "Paleidžiama „Android“…" + "Telefonas atnaujinamas…" + "Planšetinis kompiuteris atnaujinamas…" + "Įrenginys atnaujinamas…" + "Telefonas paleidžiamas…" + "Planšetinis kompiuteris paleidžiamas…" + "Įrenginys paleidžiamas…" "Optimizuojama saugykla." - "Baigiamas „Android“ atnauj. procesas…" - "Kai kurios programos gali tinkamai neveikti, kol naujovinimo procesas nebus baigtas" + "Baigiama atnaujinti sistemą…" "„%1$s“ naujovinama..." "Optimizuojama %1$d progr. iš %2$d." "Ruošiama „%1$s“." "Paleidžiamos programos." "Užbaigiamas paleidimas." "Vykdoma „%1$s“" - - - - - - - - - - - - + "Palieskite, kad grįžtumėte į žaidimą" + "Pasirinkite žaidimą" + "Kad programa geriau veiktų, vienu metu galima atidaryti tik vieną iš šių žaidimų." + "Grįžti į „%1$s“" + "Atidaryti „%1$s“" + "„%1$s“ bus uždaryta neišsaugojus duomenų" "„%1$s“ viršijo atminties limitą" - "Atminties išklotinės duomenys surinkti; palieskite, kad bendrintumėte" + "Atminties išklotinės duomenys surinkti. Palieskite, jei norite bendrinti." "Bendrinti atminties išklotinę?" "Procesas „%1$s“ viršijo atminties limitą %2$s. Atminties išklotinė pasiekiama, kad galėtumėte bendrinti su jos kūrėju. Būkite atsargūs: šioje atminties išklotinėje gali būti jūsų asmeninės informacijos, kurią gali pasiekti programa." "Pasirinkite teksto veiksmą" @@ -1177,12 +1210,12 @@ "Prisijunkite prie atviro „Wi‑Fi“ tinklo" "Prisijungimas prie operatoriaus „Wi‑Fi“ tinklo" - "Prisijungiama prie atviro „Wi‑Fi“ tinklo" + "Jungiamasi prie „Wi-Fi“ tinklo" "Prisijungta prie „Wi-Fi“ tinklo" "Nepavyko prisijungti prie „Wi‑Fi“ tinklo" "Palieskite, jei norite matyti visus tinklus" "Prisijungti" - "Visi tinklai" + "Visi tinklai" "„Wi‑Fi“ bus įjungtas automatiškai" "Kai būsite netoli išsaugoto aukštos kokybės tinklo" "Neįjunkite vėl" @@ -1248,6 +1281,7 @@ "Paleisti iš naujo" "Suaktyvinti mobiliojo ryšio paslaugą" "Atsisiųskite operatoriaus programą, kad suaktyvintumėte naują SIM" + "Atsisiųskite programą „%1$s“, kad suaktyvintumėte naują SIM kortelę" "Atsisiųsti programą" "Įdėta nauja SIM kortelė" "Jei norite tai nustatyti, palieskite" @@ -1266,13 +1300,13 @@ "PTP režimas naudojant USB įjungtas" "USB įrenginio kaip modemo naudojimas įjungtas" "MIDI režimas naudojant USB įjungtas" - "USB priedo režimas įjungtas" + "Prijungtas USB priedas" "Palieskite, kad būtų rodoma daugiau parinkčių." "Įkraunamas prijungtas įrenginys. Palieskite, jei reikia daugiau parinkčių." "Aptiktas analoginis garso priedas" "Prijungtas įrenginys nesuderinamas su šiuo telefonu. Palieskite, kad sužinotumėte daugiau." "USB derinimas prijungtas" - "Palieskite, kad išjungtumėte USB derinimą." + "Palieskite, kad išjungtumėte USB derinimą" "Pasirinkite, kas išjungtumėte USB derinimą." "Pateikiamas pranešimas apie riktą…" "Bendrinti pranešimą apie riktą?" @@ -1291,34 +1325,35 @@ "%s rodomi virš kitų programų" "%s rodomi virš kitų programų." "Jei nenorite, kad %s naudotų šią funkciją, palietę atidarykite nustatymus ir išjunkite ją." - "IŠJUNGTI" - "Ruošiama %s" - "Tikrinama, ar nėra klaidų" - "Aptikta nauja %s" + "Išjungti" + "Tikrinama išorinė laikmena (%s)…" + "Peržiūrimas dabartinis turinys" + "Nauja laikmena (%s)" + "Palieskite, kad nustatytumėte" "Norint perkelti nuotraukas ir mediją" - "Saugykla (%s) sugadinta" - "%s sugadinta. Palieskite, kad ištaisytumėte." + "Kilo problema dėl laikmenos (%s)" + "Palieskite ir ištaisykite tai" "%s sugadinta. Pasirinkite, kad pataisytumėte." "Nepalaikoma saugykla (%s)" "Šis įrenginys nepalaiko šios %s. Palieskite, kad nustatytumėte palaikomu formatu." "Šis įrenginys nepalaiko šios %s. Pasirinkite ir nustatykite palaikomu formatu." "%s netikėtai pašalinta" - "Išmontuokite %s prieš pašalindami, kad neprarastumėte duomenų." - "Pašalinta %s" - "%s pašalinta; įdėkite naują" - "Vis dar šalinama %s…" - "Nepašalinti" + "Prieš šalindami išimkite laikmeną, kad neprarastumėte turinio" + "Laikmena (%s) atjungta" + "Kai kurios funkcijos gali neveikti tinkamai. Įdėkite naują saugyklą." + "Pašalinama laikmena (%s)…" + "Neatjunkite" "Nustatyti" "Pašalinti" "Naršyti" "Trūksta %s" - "Iš naujo įdėkite šį įrenginį" + "Įdėkite įrenginį dar kartą" "Perkeliama programa „%s“" "Perkeliami duomenys" - "Perkėlimo veiksmas užbaigtas" - "Duomenys perkelti į %s" - "Nepavyko perkelti duomenų" - "Duomenys palikti pradinėje vietoje" + "Turinio perkėlimas baigtas" + "Turinys perkeltas į saugyklą (%s)" + "Turinio perkelti nepavyko" + "Bandykite perkelti turinį dar kartą" "Pašalinta" "Pašalinta" "Tikrinama…" @@ -1377,14 +1412,14 @@ "Prisijungiama prie visada įjungto VPN…" "Prisijungta prie visada įjungto VPN" "Atsijungta nuo visada įjungto VPN" - "Visada įjungto VPN klaida" + "Prisijungti prie visada įjungto VPN nepavyko" "Keiskite tinklo arba VPN nustatymus" "Pasirinkti failą" "Nepasirinktas joks failas" "Atstatyti" "Pateikti" - "Įgalintas automobilio režimas" - "Palieskite, kad išeitumėte iš automobilio režimo." + "Veikia vairavimo programa" + "Palieskite, kad išeitumėte iš vairavimo programos." "Susietas ar aktyvus" "Palieskite, kad nustatytumėte." "Įrenginio kaip modemo naudojimas išjungtas" @@ -1464,22 +1499,19 @@ "„%s“ atmintukas" "USB atmintis" "Redaguoti" - "Duomenų naudojimo įspėjimas" - "Pal. ir perž. naud. i. bei nust." - "Pasiektas 2G–3G duomenų apribojimas" - "Pasiektas 4G duomenų apribojimas" + "Duomenų įspėjimas" + "Sunaudojote duomenų: %s" "Pasiek. mob. ryšio duom. limitas" "Pasiektas „Wi-Fi“ duomenų apribojimas" - "Pristabdyti likusio ciklo duomenys" - "Viršyta 2G–3G duomenų riba" - "Viršyta 4G duomenų riba" - "Viršyta mobiliųjų duomenų riba" - "Viršytas „Wi-Fi“ duomenų aprib." - "%s viršyta nurodyta riba." + "Duomenų naudojimas pristabdytas iki jūsų ciklo pabaigos" + "Viršijote mob. r. duom. aprib." + "Viršijote „Wi-Fi“ duom. aprib." + "Viršijote nustatytą apribojimą (%s)" "Apriboti foniniai duomenys" "Palieskite ir pašal. apribojimą." - "Naudojama daug duomenų" - "Pastarąsias kelias dienas naudojate daugiau duomenų nei įprastai. Palietę peržiūrėkite naudojimą ir nustatymus." + "Didelis mob. ryšio duom. naud." + "Programos sunaudojo daugiau duomenų nei įprastai" + "Programa „%s“ sunaudojo daugiau duomenų nei įprastai" "Saugos sertifikatas" "Šis sertifikatas galioja." "Išduota:" @@ -1719,7 +1751,7 @@ "Įdiegė administratorius" "Atnaujino administratorius" "Ištrynė administratorius" - "Kad pailgintų akumuliatoriaus naudojimo laiką, Akumuliatoriaus tausojimo priemonė sumažina įrenginio veikimą ir apriboja vibravimą, vietovės paslaugas bei daugumą foninių duomenų. El. pašto, susirašinėjimo ir kitos programos, kurios veikia sinchronizavimo pagrindu, gali būti neatnaujintos, nebent jas atidarysite.\n\nAkumuliatoriaus tausojimo priemonė automatiškai išjungiama, kai įrenginys įkraunamas." + "Kad akumuliatorius veiktų ilgiau, akumuliatoriaus tausojimo priemonė sumažina įrenginio našumą ir apriboja arba išjungia vibravimą, vietovės paslaugas bei foninius duomenis. El. pašto, susirašinėjimo ir kitos programos, kurios veikia sinchronizavimo pagrindu, gali būti neatnaujintos, kol jų neatidarysite.\n\nAkumuliatoriaus tausojimo priemonė automatiškai išjungiama, kai įrenginys įkraunamas." "Kad padėtų sumažinti duomenų naudojimą, Duomenų taupymo priemonė neleidžia kai kurioms programoms siųsti ar gauti duomenų fone. Šiuo metu naudojama programa gali pasiekti duomenis, bet tai bus daroma rečiau. Tai gali reikšti, kad, pvz., vaizdai nebus pateikiami, jei jų nepaliesite." "Įj. Duomenų taupymo priemonę?" "Įjungti" @@ -1735,7 +1767,7 @@ %1$d min. (iki %2$s) %1$d min. (iki %2$s) - + %1$d valandą (iki %2$s) %1$d valandas (iki %2$s) %1$d valandos (iki %2$s) @@ -1759,7 +1791,7 @@ %d min. %d min. - + %d valandą %d valandas %d valandos @@ -1786,14 +1818,14 @@ "Nutildė %1$s" "Iškilo vidinė su jūsų įrenginiu susijusi problema, todėl įrenginys gali veikti nestabiliai, kol neatkursite gamyklinių duomenų." "Iškilo vidinė su jūsų įrenginiu susijusi problema. Jei reikia išsamios informacijos, susisiekite su gamintoju." - "USSD užklausa pakeista į DIAL užklausą." - "USSD užklausa pakeista į SS užklausą." - "USSD užklausa pakeista į naują USSD užklausą." - "USSD užklausa pakeista į „Video DIAL“ užklausą." - "SS užklausa pakeista į DIAL užklausą." - "SS užklausa pakeista į „Video DIAL“ užklausą." - "SS užklausa pakeista į USSD užklausą." - "SS užklausa pakeista į naują SS užklausą." + "USSD užklausa pakeista į įprastą skambutį" + "USSD užklausa pakeista į SS užklausą" + "Pakeista į naują USSD užklausą" + "USSD užklausa pakeista į vaizdo skambutį" + "SS užklausa pakeista į įprastą skambutį" + "SS užklausa pakeista į vaizdo skambutį" + "SS užklausa pakeista į USSD užklausą" + "Pakeista į naują SS užklausą" "Darbo profilis" "Išskleisti" "Sutraukti" @@ -1895,6 +1927,10 @@ "SIM kortelė neteikiama naudojant balso paslaugas" "SIM kortelė neleidžiama naudojant balso paslaugas" "Telefonas neleidžiamas naudojant balso paslaugas" + "SIM kortelė %d neleidžiama" + "SIM kortelė %d neteikiama" + "SIM kortelė %d neleidžiama" + "SIM kortelė %d neleidžiama" "Iššokantysis langas" "Dar %1$d" "Grąžinta ankstesnė programos versija arba versija nesuderinama su šiuo sparčiuoju klavišu" @@ -1907,7 +1943,14 @@ "Aptikta žalinga programa" "„%1$s“ nori rodyti „%2$s“ fragmentus" "Redaguoti" + "Skambučiai ir pranešimai vibruos" + "Skambučiai ir pranešimai bus nutildyti" "Sistemos pakeitimai" + "Netrukdymo režimas" + "Netrukdymo režimu slepiami pranešimai, kad galėtumėte susikaupti" + "Tai naujas veiksmas. Palieskite, kad pakeistumėte." "Netrukdymo režimas pakeistas" - "Palieskite, kad patikrintumėte pertraukčių elgsenos nustatymus" + "Palieskite, kad patikrintumėte, kas blokuojama." + "Sistema" + "Nustatymai" diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index 696fce60c6b2c208003d6a295f9790b47d8fb2fc..51d32e5ce4312aa45e6cf308af1ec1daf7c89af6 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -78,15 +78,16 @@ "Zvanītāja ID noklusējumi ir iestatīti uz Nav ierobežots. Nākamais zvans: nav ierobežots" "Pakalpojums netiek nodrošināts." "Zvanītāja ID iestatījumu nevar mainīt." - "Nav datu pakalpojuma" - "Nav ārkārtas izsaukumu" + "Nav pieejams neviens datu pakalpojums mobilajām ierīcēm" + "Nav pieejami ārkārtas izsaukumi" "Balss izsaukumu pakalpojums nedarbojas" - "Balss un ārkārtas izsaukumu pakalpojums nedarbojas" - "Pagaidām netiek piedāvāts mobilajā tīklā jūsu atrašanās vietā" - "Nevar sasniegt tīklu" - "Lai uzlabotu uztveršanu, mainiet atlasīto veidu sadaļā Iestatījumi > Tīkls un internets > Mobilie tīkli > Ieteicamais tīkla veids." - "Wi‑Fi zvani ir aktīvi" - "Lai veiktu ārkārtas zvanus, ir nepieciešams mobilais tīkls." + "Balss izsaukumu pakalpojums vai ārkārtas izsaukumi nedarbojas" + "Jūsu mobilo sakaru operators īslaicīgi izslēdza pakalpojumu." + "Jūsu mobilo sakaru operators īslaicīgi izslēdza pakalpojumu šai SIM kartei: %d." + "Nevar sasniegt mobilo tīklu" + "Mēģiniet nomainīt vēlamo tīklu. Pieskarieties, lai to mainītu." + "Nav pieejami ārkārtas izsaukumi" + "Izmantojot Wi-Fi, nevar veikt ārkārtas izsaukumus" "Brīdinājumi" "Zvanu pāradresācija" "Ārkārtas atzvana režīms" @@ -121,12 +122,12 @@ "Viesabonēšanas reklāmkarogs ir ieslēgts." "Viesabonēšanas reklāmkarogs ir izslēgts." "Pakalpojuma meklēšana" - "Wi-Fi zvani" + "Neizdevās iestatīt Wi-Fi zvanus" "Lai veiktu zvanus un sūtītu īsziņas Wi-Fi tīklā, vispirms lūdziet mobilo sakaru operatoram iestatīt šo pakalpojumu. Pēc tam iestatījumos vēlreiz ieslēdziet Wi-Fi zvanus. (Kļūdas kods: %1$s)" - "Reģistrējieties pie sava mobilo sakaru operatora (kļūdas kods: %1$s)" + "Reģistrējot Wi-Fi zvanus pie mobilo sakaru operatora, radās problēma: %1$s" "%s" @@ -161,8 +162,8 @@ "Tiek apstrādāts pārāk liels pieprasījumu skaits. Vēlāk mēģiniet vēlreiz." "Pierakstīšanās kļūda kontā %1$s" "Sinhronizācija" - "Sinhronizācija" - "Pārāk daudz %s dzēsto vienumu." + "Nevar sinhronizēt" + "Pārāk apjomīgs satura %s dzēšanas mēģinājums" "Planšetdatora atmiņa ir pilna. Dzēsiet dažus failus, lai atbrīvotu vietu." "Pulksteņa atmiņa ir pilna. Dzēsiet dažus failus, lai atbrīvotu vietu." "Televizora krātuve ir pilna. Izdzēsiet dažus failus, lai atbrīvotu vietu." @@ -176,14 +177,13 @@ "Jūsu darba profila administrators" "Domēns %s" "Darba profils izdzēsts" - "Darba profils tika dzēsts, jo trūkst administratora lietotnes." "Trūkst darba profila administratora lietotnes, vai šī lietotne ir bojāta. Šī iemesla dēļ jūsu darba profils un saistītie dati tika dzēsti. Lai saņemtu palīdzību, sazinieties ar administratoru." "Jūsu darba profils šai ierīcē vairs nav pieejams." "Veikts pārāk daudz paroles ievadīšanas mēģinājumu." "Ierīce tiek pārvaldīta" "Jūsu organizācija pārvalda šo ierīci un var uzraudzīt tīkla datplūsmu. Pieskarieties, lai saņemtu detalizētu informāciju." "Jūsu ierīces dati tiks dzēsti" - "Administratora lietotni nevar izmantot. Ierīcē saglabātie dati tiks dzēsti. \n\nJa jums ir kādi jautājumi, sazinieties ar savas organizācijas administratoru." + "Administratora lietotni nevar izmantot. Ierīcē saglabātie dati tiks dzēsti.\n\nJa jums ir kādi jautājumi, sazinieties ar savas organizācijas administratoru." "Drukāšanu atspējoja %s." "Man" "Planšetdatora opcijas" @@ -239,6 +239,9 @@ "Lidojuma režīms" "Lidojuma režīms ir IESLĒGTS." "Lidojuma režīms ir IZSLĒGTS." + "Akumulatora jaudas taupīšanas režīms" + "Akumulatora jaudas taupīšanas režīms ir IZSLĒGTS" + "Akumulatora jaudas taupīšanas režīms ir IESLĒGTS" "Iestatījumi" "Palīdzība" "Balss palīgs" @@ -272,31 +275,31 @@ "Pārslēgties uz darba profilu" "Kontaktpersonas" "piekļūt jūsu kontaktpersonu datiem" - "Atļaut lietotnei <b>%1$s</b> piekļūt jūsu kontaktpersonām" + "Vai atļaut lietotnei <b>%1$s</b> piekļūt jūsu kontaktpersonām?" "Atrašanās vieta" "piekļūt ierīces atrašanās vietas informācijai" - "Atļaut lietotnei <b>%1$s</b> piekļūt šīs ierīces atrašanās vietai" + "Vai atļaut lietotnei <b>%1$s</b> piekļūt šīs ierīces atrašanās vietai?" "Kalendārs" "piekļūt jūsu kalendāram" - "Atļaut lietotnei <b>%1$s</b> piekļūt jūsu kalendāram" + "Vai atļaut lietotnei <b>%1$s</b> piekļūt jūsu kalendāram?" "Īsziņas" "sūtīt un skatīt īsziņas" - "Atļaut lietotnei <b>%1$s</b> sūtīt un skatīt īsziņas" + "Vai atļaut lietotnei <b>%1$s</b> sūtīt un skatīt īsziņas?" "Krātuve" "piekļūt fotoattēliem, multividei un failiem jūsu ierīcē" - "Atļaut lietotnei <b>%1$s</b> piekļūt fotoattēliem, multivides saturam un failiem jūsu ierīcē" + "Vai atļaut lietotnei <b>%1$s</b> piekļūt fotoattēliem, multivides saturam un failiem jūsu ierīcē?" "Mikrofons" "ierakstīt audio" - "Atļaut lietotnei <b>%1$s</b> ierakstīt audio" + "Vai atļaut lietotnei <b>%1$s</b> ierakstīt audio?" "Kamera" "uzņemt attēlus un ierakstīt videoklipus" - "Atļaut lietotnei <b>%1$s</b> uzņemt fotoattēlus un videoklipus" + "Vai atļaut lietotnei <b>%1$s</b> uzņemt fotoattēlus un ierakstīt videoklipus?" "Tālrunis" "veikt un pārvaldīt tālruņa zvanus" - "Atļaut lietotnei <b>%1$s</b> veikt un pārvaldīt tālruņa zvanus" + "Vai atļaut lietotnei <b>%1$s</b> veikt un pārvaldīt tālruņa zvanus?" "Ķermeņa sensori" "piekļūt sensoru datiem par jūsu veselības rādījumiem" - "Atļaut lietotnei <b>%1$s</b> piekļūt sensoru uztvertajiem veselības datiem" + "Vai atļaut lietotnei <b>%1$s</b> piekļūt sensoru uztvertajiem veselības rādījumiem?" "Izgūt loga saturu." "Skatīt tā loga saturu, ar kuru mijiedarbojaties." "Aktivizēt funkciju “Pārlūkot pieskaroties”." @@ -308,7 +311,7 @@ "Žestu izpilde" "Atbalsta pieskaršanos, vilkšanu, savilkšanu un citus žestus." "Pirksta nospieduma žesti" - "Var uztvert žestus ierīces pirksta nospieduma sensorā." + "Var uztvert žestus ierīces pirksta nospieduma sensorā." "atspējot vai pārveidot statusa joslu" "Ļauj lietotnei atspējot statusa joslu vai pievienot un noņemt sistēmas ikonas." "Būt par statusa joslu" @@ -359,6 +362,8 @@ "Ļauj lietotnei nodrošināt atsevišķu tās daļu nepārtrauktu atrašanos atmiņā. Tas var ierobežot pieejamo atmiņas daudzumu citām lietotnēm, tādējādi palēninot planšetdatora darbību." "Ļauj lietotnei nodrošināt atsevišķu tās daļu nepārtrauktu atrašanos atmiņā. Tas var ierobežot pieejamo atmiņas daudzumu citām lietotnēm, tādējādi palēninot televizora darbību." "Ļauj lietotnei nodrošināt atsevišķu tās daļu nepārtrauktu atrašanos atmiņā. Tas var ierobežot pieejamo atmiņas daudzumu citām lietotnēm, tādējādi palēninot tālruņa darbību." + "Aktivizēt priekšplāna pakalpojumu" + "Ļauj lietotnei izmantot priekšplāna pakalpojumus." "noteikt vietas apjomu lietotnes atmiņā" "Ļauj lietotnei izgūt tās koda datus un kešatmiņas izmēru." "mainīt sistēmas iestatījumus" @@ -481,6 +486,8 @@ "Ļauj lietotnei sazināties ar tuva darbības lauka sakaru (Near Field Communication — NFC) atzīmēm, kartēm un lasītājiem." "atspējot ekrāna bloķēšanu" "Ļauj lietotnei atspējot taustiņslēgu un visu saistīto paroļu drošību. Piemēram, tālrunis atspējo taustiņslēgu, saņemot ienākošu zvanu, un pēc zvana pabeigšanas atkārtoti iespējo taustiņslēgu." + "izmantot biometrisko datu aparatūru" + "Atļauj lietotnei izmantot biometrisko datu aparatūru autentificēšanai" "pārvaldīt pirkstu nospiedumu aparatūru" "Atļauj lietotnei izsaukt metodes izmantojamo pirkstu nospiedumu veidņu pievienošanai un dzēšanai." "lietot pirkstu nospiedumu aparatūru" @@ -493,6 +500,7 @@ "Nav atpazīts" + "Pirksta nospiedums tika autentificēts." "Nospieduma aparatūra nav pieejama." "Pirkstu nospiedumu nevar saglabāt. Lūdzu, noņemiet esošu pirksta nospiedumu." "Pirkstu nospiedumu nolasīšanas aparatūras noildze. Mēģiniet vēlreiz." @@ -805,6 +813,8 @@ "Autorizācija ar kombināciju." "Autorizācija pēc sejas." "Autorizācija ar PIN kodu." + "SIM kartes atbloķēšanas PIN" + "SIM kartes atbloķēšanas PUK" "Autorizācija ar paroli." "Kombinācijas ievades apgabals." "Apgabals, kur vilkt ar pirkstu." @@ -866,6 +876,12 @@ "Teksts ir kopēts uz starpliktuvi." "Vairāk" "Izvēlne+" + "Meta taustiņš +" + "Vadīšanas taustiņš +" + "Alternēšanas taustiņš +" + "Pārslēgšanas taustiņš +" + "Simbolu taustiņš +" + "Funkcijas taustiņš +" "atstarpe" "ievade" "dzēst" @@ -1014,14 +1030,23 @@ "Ievades metode" "Teksta darbības" "E-pasts" + "Nosūtīt e-pasta ziņojumu uz atlasīto adresi" "Zvanīt" + "Zvanīt uz atlasīto tālruņa numuru" "Atrast" + "Atrast atlasīto adresi" "Atvērt" + "Atvērt atlasīto URL" "Īsziņa" + "Nosūtīt īsziņu uz atlasīto tālruņa numuru" "Pievienot" + "Pievienot kontaktpersonām" "Skatīt" + "Skatīt atlasīto laiku kalendārā" "Grafiks" + "Ieplānot pasākumu konkrētā laikā" "Izsekot" + "Izsekot atlasīto lidojumu" "Paliek maz brīvas vietas" "Dažas sistēmas funkcijas var nedarboties." "Sistēmai pietrūkst vietas. Atbrīvojiet vismaz 250 MB vietas un restartējiet ierīci." @@ -1094,31 +1119,28 @@ "Pārbaudīt, vai ir pieejams atjauninājums" "Lietotne %1$s (process %2$s) ir pārkāpusi savu pašieviesto StrictMode politiku." "Process %1$s ir pārkāpis savu pašieviesto StrictMode politiku." - "Notiek Android jaunināšana..." - "Notiek Android palaišana…" + "Notiek tālruņa atjaunināšana…" + "Notiek planšetdatora atjaunināšana…" + "Notiek ierīces atjaunināšana…" + "Notiek tālruņa palaišana…" + "Notiek planšetdatora palaišana…" + "Notiek ierīces palaišana…" "Notiek krātuves optimizēšana." - "Tiek pabeigta Android atjaunināšana…" - "Kamēr jaunināšana nebūs pabeigta, dažas lietotnes, iespējams, nedarbosies pareizi." + "Notiek sistēmas atjauninājuma pabeigšana" "Notiek lietotnes %1$s jaunināšana…" "Tiek optimizēta %1$d. lietotne no %2$d." "Notiek lietotnes %1$s sagatavošana." "Notiek lietotņu palaišana." "Tiek pabeigta sāknēšana." "%1$s darbojas" - - - - - - - - - - - - + "Pieskarieties, lai atgrieztos spēlē" + "Spēles izvēlēšanās" + "Lai uzlabotu veiktspēju, vienlaikus var atvērt tikai vienu no šīm spēlēm." + "Atgriezties lietotnē %1$s" + "Atvērt %1$s" + "Lietotne %1$s tiks aizvērta, neko nesaglabājot" "Process %1$s pārsniedza atmiņas ierobežojumu." - "Tika apkopots kaudzes izraksts. Pieskarieties, lai to kopīgotu." + "Apkopots kaudzes izraksts. Pieskarieties, lai kopīgotu." "Vai kopīgot kaudzes izrakstu?" "Process %1$s pārsniedza procesu atmiņas ierobežojumu (%2$s). Tika apkopots kaudzes izraksts, ko varat kopīgot ar procesa izstrādātāju. Ņemiet vērā: kaudzes izrakstā var būt ietverta jūsu personas informācija, kurai var piekļūt lietojumprogramma." "Izvēlieties darbību tekstam" @@ -1155,12 +1177,12 @@ "Savienojuma izveide ar atvērtu Wi-Fi tīklu" "Savienojuma izveide ar mobilo sakaru operatora Wi‑Fi tīklu" - "Notiek savienojuma izveide ar atvērtu Wi-Fi tīklu" + "Savienojuma izveide ar Wi-Fi tīklu" "Ir izveidots savienojums ar Wi-Fi tīklu" "Nevarēja izveidot savienojumu ar Wi‑Fi tīklu" "Pieskarieties, lai skatītu visus tīklus" "Izveidot savienojumu" - "Visi tīkli" + "Visi tīkli" "Wi‑Fi tiks automātiski ieslēgts" "Kad atrodaties saglabāta augstas kvalitātes tīkla tuvumā" "Neieslēgt atkārtoti" @@ -1226,6 +1248,7 @@ "Restartēt" "Aktivizējiet mobilo ierīci." "Lejupielādējiet mobilo sakaru operatora lietotni, lai aktivizētu jauno SIM karti." + "Lejupielādējiet lietotni %1$s, lai aktivizētu jauno SIM karti." "Lejupielādēt lietotni" "Ievietota jauna SIM karte" "Pieskarieties, lai to iestatītu." @@ -1244,13 +1267,13 @@ "Ieslēgts PTP režīms, izmantojot USB savienojumu" "Ieslēgta USB piesaiste" "Ieslēgts MIDI režīms, izmantojot USB savienojumu" - "Ieslēgts USB piederumu režīms" + "USB piederums ir pievienots" "Pieskarieties, lai skatītu citas iespējas." "Pievienotā ierīce tiek uzlādēta. Pieskarieties, lai skatītu citas opcijas." "Konstatēts analogs audio piederums" "Pievienotā ierīce nav saderīga ar šo tālruni. Pieskarieties, lai uzzinātu vairāk." "USB atkļūdošana ir pievienota." - "Pieskarieties, lai atspējotu USB atkļūdošanu." + "Pieskarieties, lai izslēgtu USB atkļūdošanu" "Atlasiet, lai atspējotu USB atkļūdošanu." "Notiek kļūdas pārskata izveide…" "Vai kopīgot kļūdas pārskatu?" @@ -1269,34 +1292,35 @@ "Lietotne %s tiek rādīta pāri citām lietotnēm" "Lietotne %s pāri citām lietotnēm" "Ja nevēlaties lietotnē %s izmantot šo funkciju, pieskarieties, lai atvērtu iestatījumus un to izslēgtu." - "IZSLĒGT" - "Notiek %s sagatavošana" - "Tiek meklētas kļūdas" - "Tika atrasta jauna %s." + "Izslēgt" + "Notiek ierīces %s pārbaude…" + "Notiek pašreizējā satura pārskatīšana." + "Jauna ierīce: %s" + "Pieskarieties, lai iestatītu." "Fotoattēlu un satura pārsūtīšanai." - "Bojāts datu nesējs (%s)" - "Datu nesējs %s ir bojāts. Pieskarieties, lai labotu." + "Problēma saistībā ar %s" + "Pieskarieties, lai novērstu problēmu." "%s ir bojāta. Atlasiet, lai labotu." "Neatbalstīts datu nesējs (%s)" "Šī ierīce neatbalsta datu nesēju %s. Pieskarieties, lai iestatītu to atbalstītā formātā." "Šajā ierīcē netiek atbalstīta šī %s. Atlasiet, lai iestatītu atbalstītu formātu." "%s tika negaidīti izņemta" - "Pirms izņemšanas atvienojiet %s, lai nezaudētu datus." - "%s tika izņemta" - "%s ir izņemta. Ievietojiet citu datu nesēju." - "%s joprojām tiek atvienota…" - "Neizņemiet to." + "Lai nezaudētu saturu, pirms izņemšanas izstumiet datu nesēju." + "Ierīce %s izņemta" + "Dažas funkcijas var darboties neatbilstoši. Ievietojiet jaunu atmiņas ierīci." + "Notiek ierīces %s atvienošana" + "Neizņemiet to." "Iestatīt" "Izstumt" "Izpētīt" "Nav ierīces %s" - "Vēlreiz ievietojiet ierīci." + "Vēlreiz pievienojiet ierīci." "Notiek lietotnes %s pārvietošana" "Notiek datu pārvietošana" - "Pārvietošana ir pabeigta" - "Dati ir pārvietoti uz ierīci %s" - "Nevarēja pārvietot datus" - "Dati tika atstāti sākotnējā atrašanās vietā" + "Satura pārsūtīšana pabeigta" + "Saturs tika pārvietots ierīcē %s" + "Saturu neizdevās pārvietot" + "Vēlreiz mēģiniet pārvietot saturu" "Noņemts" "Noņemts" "Notiek pārbaude..." @@ -1355,14 +1379,14 @@ "Notiek savienojuma izveide ar vienmēr ieslēgtu VPN…" "Izveidots savienojums ar vienmēr ieslēgtu VPN." "Pārtraukts savienojums ar vienmēr ieslēgtu VPN" - "Kļūda saistībā ar vienmēr ieslēgtu VPN" + "Nevarēja izveidot savienojumu ar vienmēr ieslēgtu VPN" "Mainiet tīkla vai VPN iestatījumus" "Izvēlēties failu" "Neviens fails nav izvēlēts" "Atiestatīt" "Iesniegt" - "Automobiļa režīms ir iespējots." - "Pieskarieties, lai izietu no automašīnas režīma." + "Autovadīšanas lietotne darbojas" + "Pieskarieties, lai izietu no autovadīšanas lietotnes" "Piesaiste vai tīklājs ir aktīvs." "Pieskarieties, lai iestatītu." "Piesaiste ir atspējota" @@ -1441,22 +1465,19 @@ "%s USB disks" "USB atmiņa" "Rediģēt" - "Brīdinājums par datu lietojumu" - "Piesk., lai sk. lietoj. un iest." - "Sasniegts 2G-3G datu ierobež." - "Sasniegts 4G datu ierobežojums" + "Datu brīdinājums" + "Izmantotie dati: %s" "Sasniegts mobilo datu ierobežoj." "Sasniegts Wi-Fi datu ierobež." - "Datu lietošana ciklā pārtraukta." - "2G-3G datu ierobež. pārsniegts" - "4G datu limits pārsniegts" - "Pārsniegts mobilo datu ierobežoj." - "Wi-Fi datu ierobež. pārsniegts" - "%s virs norādītā ierobežojuma." + "Datu lietošana atlikušajā ciklā ir pārtraukta." + "Pārsniegts datu ierobežojums" + "Pārsniegts Wi-Fi datu ierobežojums" + "Jūs esat pārsniedzis iestatīto ierobežojumu par %s." "Fona dati ir ierobežoti." "Pieskar., lai noņemtu ierobežoj." - "Liels datu lietojums" - "Datu lietojums dažās pēdējās dienās ir lielāks nekā parasti. Pieskarieties, lai skatītu lietojumu un iestatījumus." + "Augsts mobilo datu lietojums" + "Jūsu lietotnēs ir izmantots vairāk datu nekā parasti." + "Lietotnē %s ir izmantots vairāk datu nekā parasti." "Drošības sertifikāts" "Sertifikāts ir derīgs." "Izdots:" @@ -1694,7 +1715,7 @@ "Instalēja administrators" "Atjaunināja administrators" "Dzēsa administrators" - "Lai paildzinātu akumulatora darbību, akumulatora jaudas taupīšanas režīmā tiek samazināta ierīces veiktspēja un tiek ierobežota vibrācija, atrašanās vietu pakalpojumi un lielākā daļa fona datu. E-pasta, ziņojumapmaiņas un citas lietotnes, kurām ir nepieciešama sinhronizācija, var netikt atjauninātas, ja tās neatverat.\n\nTiklīdz tiek sākta ierīces uzlāde, akumulatora jaudas taupīšanas režīms tiek automātiski izslēgts." + "Lai paildzinātu akumulatora darbību, akumulatora jaudas taupīšanas režīmā tiek samazināta ierīces veiktspēja un ierobežota vai izslēgta vibrācija, atrašanās vietu pakalpojumi un fona dati. E-pasta, ziņojumapmaiņas un citas lietotnes, kurām ir nepieciešama sinhronizācija, var netikt atjauninātas, ja tās neatverat.\n\nTiklīdz tiek sākta ierīces uzlāde, akumulatora jaudas taupīšanas režīms tiek automātiski izslēgts." "Lai samazinātu datu lietojumu, datu lietojuma samazinātājs neļauj dažām lietotnēm fonā nosūtīt vai saņemt datus. Lietotne, kuru pašlaik izmantojat, var piekļūt datiem, bet, iespējams, piekļūs tiem retāk (piemēram, attēli tiks parādīti tikai tad, kad tiem pieskarsieties)." "Vai ieslēgt datu lietojuma samazinātāju?" "Ieslēgt" @@ -1708,10 +1729,10 @@ %1$d min (līdz %2$s) %1$d min (līdz %2$s) - - %1$d stundas (līdz %2$s) - %1$d stundu (līdz %2$s) - %1$d stundas (līdz %2$s) + + %1$d stundas (līdz plkst. %2$s) + %1$d stundu (līdz plkst. %2$s) + %1$d stundas (līdz plkst. %2$s) %1$d h (līdz %2$s) @@ -1728,7 +1749,7 @@ %d min %d min - + %d stundas %d stundu %d stundas @@ -1753,14 +1774,14 @@ "Skaņu izslēdza %1$s" "Jūsu ierīcē ir radusies iekšēja problēma, un ierīce var darboties nestabili. Lai to labotu, veiciet rūpnīcas datu atiestatīšanu." "Jūsu ierīcē ir radusies iekšēja problēma. Lai iegūtu plašāku informāciju, lūdzu, sazinieties ar ražotāju." - "USSD pieprasījums ir mainīts uz DIAL pieprasījumu." - "USSD pieprasījums ir mainīts uz SS pieprasījumu." - "USSD pieprasījums ir mainīts uz jaunu USSD pieprasījumu." - "USSD pieprasījums ir mainīts uz Video DIAL pieprasījumu." - "SS pieprasījums ir mainīts uz DIAL pieprasījumu." - "SS pieprasījums ir mainīts uz Video DIAL pieprasījumu." - "SS pieprasījums ir mainīts uz USSD pieprasījumu." - "SS pieprasījums ir mainīts uz jaunu SS pieprasījumu." + "USSD pieprasījums mainīts uz parastu zvanu" + "USSD pieprasījums mainīts uz SS pieprasījumu" + "Mainīts uz jaunu USSD pieprasījumu" + "USSD pieprasījums mainīts uz videozvanu" + "SS pieprasījums mainīts uz parastu zvanu" + "SS pieprasījums mainīts uz videozvanu" + "SS pieprasījums mainīts uz USSD pieprasījumu" + "Mainīts uz jaunu SS pieprasījumu" "Darba profils" "Izvērst" "Sakļaut" @@ -1860,6 +1881,10 @@ "SIM kartē netiek nodrošināti balss zvani" "SIM karti nav atļauts izmantot balss zvaniem" "Tālruni nav atļauts izmantot balss zvaniem" + "SIM karti %d nav atļauts izmantot" + "SIM karte %d netiek nodrošināta" + "SIM karti %d nav atļauts izmantot" + "SIM karti %d nav atļauts izmantot" "Uznirstošais logs" "Vēl %1$d" "Ir notikusi atkāpšanās uz vecāku lietotnes versiju, vai lietotne nav saderīga ar šo saīsni." @@ -1872,7 +1897,14 @@ "Konstatēta kaitīga lietotne" "Lietotne %1$s vēlas rādīt lietotnes %2$s sadaļas" "Rediģēt" + "Zvaniem un paziņojumiem tiks aktivizēta vibrācija." + "Zvanu un paziņojumu signāla skaņa būs izslēgta." "Sistēmas izmaiņas" + "Netraucēt" + "Režīmā “Netraucēt” paziņojumi tiek paslēpti, lai palīdzētu jums koncentrēties" + "Šāda darbība ir jauna. Pieskarieties, lai mainītu iestatījumus." "Režīms “Netraucēt” ir mainīts" - "Pieskarieties, lai pārbaudītu rīcības iestatījumu paziņojumus" + "Pieskarieties, lai uzzinātu, kas tiek bloķēts." + "Sistēma" + "Iestatījumi" diff --git a/core/res/res/values-mcc001-mnc01-or/strings.xml b/core/res/res/values-mcc001-mnc01-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..8404eba16b151ccfcf0a60960d357bc62b95d2ba --- /dev/null +++ b/core/res/res/values-mcc001-mnc01-or/strings.xml @@ -0,0 +1,24 @@ + + + + + "ଫୋନ୍‌ର ଅନୁମତି ନାହିଁ MM#6" + diff --git a/core/res/res/values-mcc302-mnc370-or/strings.xml b/core/res/res/values-mcc302-mnc370-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..a72721660566f81ded692e3a2356f0a72b6d5414 --- /dev/null +++ b/core/res/res/values-mcc302-mnc370-or/strings.xml @@ -0,0 +1,26 @@ + + + + + + "%s" + "%s ୱାଇ-ଫାଇ" + + diff --git a/core/res/res/values-mcc302-mnc720-or/strings.xml b/core/res/res/values-mcc302-mnc720-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..2b09b9d2a5e0a8fd3931c79c943d5f954efd0622 --- /dev/null +++ b/core/res/res/values-mcc302-mnc720-or/strings.xml @@ -0,0 +1,26 @@ + + + + + + "%s" + "%s ୱାଇ-ଫାଇ" + + diff --git a/core/res/res/values-mcc310-mnc030-or/strings.xml b/core/res/res/values-mcc310-mnc030-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..bfee279cc94cdec0a4e08cdb3de08c402eb2a72f --- /dev/null +++ b/core/res/res/values-mcc310-mnc030-or/strings.xml @@ -0,0 +1,26 @@ + + + + + "SIM କାର୍ଡ ପ୍ରସ୍ତୁତ କରାଯାଇନାହିଁ MM#2" + "SIM କାର୍ଡର ଅନୁମତି ନାହିଁ MM#3" + "ଫୋନ୍‌ର ଅନୁମତି ନାହିଁ MM#6" + diff --git a/core/res/res/values-mcc310-mnc150-or/strings.xml b/core/res/res/values-mcc310-mnc150-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..25d1511fabe161f396103eac651439fa91eefdd0 --- /dev/null +++ b/core/res/res/values-mcc310-mnc150-or/strings.xml @@ -0,0 +1,24 @@ + + + + + "ଫୋନ୍‌ର ଅନୁମତି ନାହିଁ MM#6" + diff --git a/core/res/res/values-mcc310-mnc170-or/strings.xml b/core/res/res/values-mcc310-mnc170-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3689d9420f7ffc0d8cfe5238616dea5a1f11eda0 --- /dev/null +++ b/core/res/res/values-mcc310-mnc170-or/strings.xml @@ -0,0 +1,26 @@ + + + + + "SIM କାର୍ଡ ପ୍ରସ୍ତୁତ କରାଯାଇନାହିଁ MM#2" + "SIM କାର୍ଡର ଅନୁମତି ନାହିଁ MM#3" + "ଫୋନ୍‌ର ଅନୁମତି ନାହିଁ MM#6" + diff --git a/core/res/res/values-mcc310-mnc280-or/strings.xml b/core/res/res/values-mcc310-mnc280-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..05eeac1e9d9ed171a762cb7730529c936dd3769d --- /dev/null +++ b/core/res/res/values-mcc310-mnc280-or/strings.xml @@ -0,0 +1,26 @@ + + + + + "SIM କାର୍ଡ ପ୍ରସ୍ତୁତ କରାଯାଇନାହିଁ MM#2" + "SIM କାର୍ଡର ଅନୁମତି ନାହିଁ MM#3" + "ଫୋନ୍‌ର ଅନୁମତି ନାହିଁ MM#6" + diff --git a/core/res/res/values-mcc310-mnc380-or/strings.xml b/core/res/res/values-mcc310-mnc380-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e63337499d85016b663c1e4c2a83e841566d5cf2 --- /dev/null +++ b/core/res/res/values-mcc310-mnc380-or/strings.xml @@ -0,0 +1,25 @@ + + + + + "SIM କାର୍ଡ ପ୍ରସ୍ତୁତ କରାଯାଇନାହିଁ MM#2" + "SIM କାର୍ଡର ଅନୁମତି ନାହିଁ MM#3" + diff --git a/core/res/res/values-mcc310-mnc410-or/strings.xml b/core/res/res/values-mcc310-mnc410-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..91988ed759e215ac3a40fe4fce780027f535fbd0 --- /dev/null +++ b/core/res/res/values-mcc310-mnc410-or/strings.xml @@ -0,0 +1,26 @@ + + + + + "SIM କାର୍ଡ ପ୍ରସ୍ତୁତ କରାଯାଇନାହିଁ MM#2" + "SIM କାର୍ଡର ଅନୁମତି ନାହିଁ MM#3" + "ଫୋନ୍‌ର ଅନୁମତି ନାହିଁ MM#6" + diff --git a/core/res/res/values-mcc310-mnc560-or/strings.xml b/core/res/res/values-mcc310-mnc560-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0db9d40c23ca984e0a6d3a41f836b0bf92d71445 --- /dev/null +++ b/core/res/res/values-mcc310-mnc560-or/strings.xml @@ -0,0 +1,26 @@ + + + + + "SIM କାର୍ଡ ପ୍ରସ୍ତୁତ କରାଯାଇନାହିଁ MM#2" + "SIM କାର୍ଡର ଅନୁମତି ନାହିଁ MM#3" + "ଫୋନ୍‌ର ଅନୁମତି ନାହିଁ MM#6" + diff --git a/core/res/res/values-mcc310-mnc950-or/strings.xml b/core/res/res/values-mcc310-mnc950-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..d5c4b94c009a36a392d80276e5c2c3bf68c47bf8 --- /dev/null +++ b/core/res/res/values-mcc310-mnc950-or/strings.xml @@ -0,0 +1,26 @@ + + + + + "SIM କାର୍ଡ ପ୍ରସ୍ତୁତ କରାଯାଇନାହିଁ MM#2" + "SIM କାର୍ଡର ଅନୁମତି ନାହିଁ MM#3" + "ଫୋନ୍‌ର ଅନୁମତି ନାହିଁ MM#6" + diff --git a/core/res/res/values-mcc311-mnc180-or/strings.xml b/core/res/res/values-mcc311-mnc180-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..05c9f9af5a0d48e090afa1d12f00ae28c1b4f5b9 --- /dev/null +++ b/core/res/res/values-mcc311-mnc180-or/strings.xml @@ -0,0 +1,26 @@ + + + + + "SIM କାର୍ଡ ପ୍ରସ୍ତୁତ କରାଯାଇନାହିଁ MM#2" + "SIM କାର୍ଡର ଅନୁମତି ନାହିଁ MM#3" + "ଫୋନ୍‌ର ଅନୁମତି ନାହିଁ MM#6" + diff --git a/core/res/res/values-mcc312-mnc670-or/strings.xml b/core/res/res/values-mcc312-mnc670-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4cd8fba7a19ac6f42c8939728fc32455e3546674 --- /dev/null +++ b/core/res/res/values-mcc312-mnc670-or/strings.xml @@ -0,0 +1,24 @@ + + + + + "ଫୋନ୍‌ର ଅନୁମତି ନାହିଁ MM#6" + diff --git a/core/res/res/values-mcc313-mnc100-or/strings.xml b/core/res/res/values-mcc313-mnc100-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..a64ee94d284cbb2267f4977971d1c3d402c44dbd --- /dev/null +++ b/core/res/res/values-mcc313-mnc100-or/strings.xml @@ -0,0 +1,24 @@ + + + + + "ଫୋନ୍‌ର ଅନୁମତି ନାହିଁ MM#6" + diff --git a/core/res/res/values-mk/strings.xml b/core/res/res/values-mk/strings.xml index d91c7d3f21193480b04c2294441b56dfff0d2a6c..c5e0a44c6121024fcc076de54430449a45782fc1 100644 --- a/core/res/res/values-mk/strings.xml +++ b/core/res/res/values-mk/strings.xml @@ -82,6 +82,7 @@ "Нема услуга за говорни повици" "Нема говорна услуга или итни повици" "Вашиот оператор ја исклучил привремено" + "Привремено исклучена од вашиот оператор за SIM %d" "Мобилната мрежа е недостапна" "Сменете ја претпочитаната мрежа. Допрете за промена." "Итните повици се недостапни" @@ -120,12 +121,13 @@ "Банерот со роаминг е вклучен" "Банерот со роаминг е исклучен" "Пребарување за услуга" - - + "Не може да се постави функцијата „Повици преку Wi-Fi“" "За да воспоставувате повици и да испраќате пораки преку Wi-Fi, прво побарајте од операторот да ја постави услугава. Потоа, вклучете ја повторно „Повикување преку Wi-Fi“ во „Поставки“. (Код за грешка: %1$s)" - + + "Проблем при регистрирањето на функцијата „Повици преку Wi‑Fi“ со операторот: %1$s" + "%s" "%s Повикување преку Wi-Fi" @@ -159,10 +161,8 @@ "Се обработуваат премногу барања. Обидете се повторно подоцна." "Грешка при пријавување за %1$s" "Синхронизирај" - - - - + "Не може да се синхронизира" + "Се обидовте да избришете премногу %s." "Меморијата на таблетот е полна. Избришете некои датотеки за да ослободите простор." "Складот за гледање е полн. Избришете некои датотеки за да ослободите простор." "Складот на телевизорот е полн. Избришете некои датотеки за да ослободите простор." @@ -272,40 +272,31 @@ "Префрли се на работен профил" "Контакти" "пристапува до контактите" - - + "Дали да се дозволи <b>%1$s</b> да пристапува до контактите?" "Локација" "пристапува до локацијата на овој уред" - - + "Дали да се дозволи <b>%1$s</b> да пристапува до локацијата на уредот?" "Календар" "пристапува до календарот" - - + "Дали да се дозволи <b>%1$s</b> да пристапува до календарот?" "SMS" "испраќа и прикажува SMS-пораки" - - + "Дали да се дозволи <b>%1$s</b> да испраќа и прегледува SMS-пораки?" "Капацитет" "пристапува до фотографии, аудио-видео и датотеки на уредот" - - + "Дали да се дозволи <b>%1$s</b> да пристапува до фотографиите, аудио-визуелните содржини и датотеките на уредот?" "Микрофон" "снима аудио" - - + "Дали да се дозволи <b>%1$s</b> да снима аудио?" "Камера" "фотографира и снима видео" - - + "Дали да се дозволи <b>%1$s</b> да фотографира и да снима видео?" "Телефон" "упатува и управува со телефонски повици" - - + "Дали да се дозволи <b>%1$s</b> да повикува и да управува со телефонските повици?" "Телесни сензори" "пристапува до податоците од сензорите за виталните знаци" - - + "Дали да се дозволи <b>%1$s</b> да пристапува до податоците на сензорот за витални знаци?" "Преземе содржина на прозорец" "Ја следи содржината на прозорецот со кој се комуницира." "Вклучи „Истражувај со допир“" @@ -492,6 +483,8 @@ "Дозволува апликацијата да комуницира со ознаки, картички и читачи за Комуникација при непосредна близина (NFC)." "оневозможи заклучување на екран" "Овозможува апликацијата да го оневозможи заклучувањето и каква било безбедност поврзана со лозинка. На пример, телефонот го оневозможува заклучувањето при прием на телефонски повик, а потоа повторно го овозможува заклучувањето кога повикот ќе заврши." + "користи биометриски хардвер" + "Дозволува апликацијата да користи биометриски хардвер за проверка" "управувај хардвер за отпечатоци" "Дозволува апликацијата да повика начини за додавање и бришење шаблони на отпечатоци за користење." "користи хардвер за отпечатоци" @@ -504,6 +497,7 @@ "Не е препознаено" + "Отпечатокот е проверен" "Хардвер за отпечаток од прст не е достапен." "Отпечатокот не може да се складира. Отстранете го постоечкиот отпечаток." "Се достигна времето на истекување на отпечатокот. Обидете се повторно." @@ -1016,14 +1010,23 @@ "Метод на внес" "Дејства со текст" "E-пошта" + "Испраќа е-порака на избраната адреса" "Повикај" + "Го повикува избраниот телефонски број" "Лоцирај" + "Ја лоцира избраната адреса" "Отвори" + "Ја отвора избраната URL" "Порака" + "Испраќа порака на избраниот телефонски број" "Додај" + "Додава во контакти" "Прикажи" + "Го гледа избраното време во календарот" "Распоред" + "Закажува настан за избраното време" "Песна" + "Следи избран лет" "Капацитетот е речиси полн" "Некои системски функции може да не работат" "Нема доволно меморија во системот. Проверете дали има слободен простор од 250 МБ и рестартирајте." @@ -1117,8 +1120,7 @@ "Отвори ја %1$s" "%1$s ќе се затвори без да се зачува" "%1$s го надмина ограничувањето на меморијата" - - + "Сликата од меморијата е собрана. Допрете за споделување." "Сподели слика од меморија?" "Процесот %1$s го надмина ограничувањето на меморијата на својот процес од %2$s. Достапна ви е слика од меморијата да ја споделите со неговиот програмер. Бидете внимателни: сликата од меморијата може да содржи кои било од вашите лични информации до кои апликацијата има пристап." "Избери дејство за текст" @@ -1153,8 +1155,7 @@ "Поврзете се на отворена Wi‑Fi-мрежа" "Поврзете се на Wi‑Fi-мрежа на оператор" - - + "Поврзување со Wi-Fi мрежа" "Се поврзавте на Wi‑Fi-мрежа" "Не можеше да се поврзе на Wi‑Fi-мрежа" "Допрете за да ги видите сите мрежи" @@ -1271,33 +1272,34 @@ "%s се прикажува врз апликации" "Ако не сакате %s да ја користи функцијава, допрете за да ги отворите поставките и исклучете ја." "Исклучи" - "Се подготвува %s" - "Се проверува за грешки" - "Откриена е нова %s" + "Проверка на %s…" + "Се прегледуваат тековните содржини" + "Нова %s" + "Допрете за поставување" "За пренесување фотографии и медиуми" - "Оштетена %s" - "%s е оштетена. Допрете за поправање." + "Проблем со %s" + "Допрете за да го поправите ова" "%s е оштетена. Изберете за поправање." "Неподдржана %s" "Уредот не ја поддржува оваа %s. Допрете за поставување во поддржан формат." "Уредов не ја поддржува оваа %s. Изберете за поставување во поддржан формат." "%s неочекувано е отстранета" - "Откачете ја %s пред да ја отстраните за да избегнете губење на податоците" - "Отстранета %s" - "%s е отстранета; вметнете нова" - "Сѐ уште се вади %s…" - "Не отстранувај" + "Откачете ја надворешната меморија пред да ја отстраните за да избегнете губење содржини" + "%s е отстранета" + "Некои функции можеби нема да работат правилно. Вметнете нова надворешна меморија." + "Се откачува %s" + "Не отстранувајте" "Постави" "Извади" "Истражувај" "%s недостасува" - "Повторно вметнете го овој уред" + "Вметнете го уредот повторно" "Се преместува %s" "Се преместуваат податоци" - "Преместувањето е завршено" - "Податоците се преместени во %s" - "Не може да се прем. податоците" - "Податоците се оставени на провобитната локација" + "Преносот на содржини заврши" + "Содржините се преместени во %s" + "Не може да се преместат содржини" + "Повторен обид за преместување содржини" "Отстрането" "Исфрлено" "Се проверува..." @@ -1356,17 +1358,14 @@ "Поврзување со секогаш вклучена VPN..." "Поврзани со секогаш вклучена VPN" "Исклучено од секогаш вклучената VPN" - - + "Не можеше да се поврзе на секогаш вклучената VPN" "Променете ја мрежата или поставките за VPN" "Избери датотека" "Не е избрана датотека" "Ресетирај" "Поднеси" - - - - + "Апликацијата за возење работи" + "Допрете за да излезете од апликацијата за возење." "Поврзувањето или точката на пристап се активни" "Допрете за поставување." "Врзувањето е оневозможено" @@ -1694,8 +1693,7 @@ "Инсталирано од администраторот" "Ажурирано од администраторот" "Избришано од администраторот" - - + "За да се продолжи трајноста на батеријата, штедачот на батерија ги намалува перформансите на вашиот уред и ги ограничува или исклучува вибрациите, услугите за локација и податоците од заднина. Е-поштата, пораките и другите апликации што се потпираат на синхронизирањето може да не се ажурираат освен ако не ги отворите.\n\nШтедачот на батерија се исклучува автоматски кога уредот се полни." "За да се намали користењето интернет, Штедачот на интернет спречува дел од апликациите да испраќаат или да примаат податоци во заднина. Апликацијата што ја користите во моментов можеби ќе пристапува до интернет, но тоа ќе го прави поретко. Ова значи, на пример, дека сликите нема да се прикажат додека не ги допрете." "Вклучете Штедач на интернет?" "Вклучи" @@ -1746,22 +1744,14 @@ "Звукот го исклучи %1$s" "Настана внатрешен проблем со уредот и може да биде нестабилен сè додека не ресетирате на фабричките податоци." "Настана внатрешен проблем со уредот. Контактирајте го производителот за детали." - - - - - - - - - - - - - - - - + "Барањето USSD е изменето во обичен повик" + "Барањето USSD е изменето во барање SS" + "Променето на ново барање USSD" + "Барањето USSD е изменето во видео повик" + "Барањето SS е изменето во обичен повик" + "Барањето SS е изменето во видео повик" + "Барањето SS е изменето во барање USSD" + "Променето на ново барање SS" "Работен профил" "Прошири" "Собери" @@ -1859,6 +1849,10 @@ "Не е обезбедена SIM-картичка за глас" "Не е дозволена SIM-картичка за глас" "Не е дозволен телефон за глас" + "SIM %d не е дозволена" + "SIM %d не е подготвена" + "SIM %d не е дозволена" + "SIM %d не е дозволена" "Појавен прозорец" "+ %1$d" "Верзијата на апликацијата е постара или не е компатибилна со кратенкава" @@ -1879,8 +1873,6 @@ "Ова е ново однесување. Допрете за промена." "Поставките за „Не вознемирувај“ се изменија" "Допрете за да проверите што е блокирано." - - - - + "Систем" + "Поставки" diff --git a/core/res/res/values-ml/strings.xml b/core/res/res/values-ml/strings.xml index ca175d8a67a8bb2dc6f3d7319f88376c69386919..662bbadb503698b2daaa7a2cb1dab82c0259664a 100644 --- a/core/res/res/values-ml/strings.xml +++ b/core/res/res/values-ml/strings.xml @@ -82,6 +82,7 @@ "വോയ്സ് സേവനമില്ല" "ശബ്‌ദ സേവനമോ എമർജൻസി കോളിംഗോ ഇല്ല" "നിങ്ങളുടെ കാരിയർ താൽക്കാലികമായി ഓഫാക്കി" + "നിങ്ങളുടെ കാരിയർ, സിം %d താൽക്കാലികമായി ഓഫാക്കി" "മൊബൈൽ നെറ്റ്‌വർക്കിലേക്ക് കണക്റ്റ് ചെയ്യാനാവുന്നില്ല" "തിര‌ഞ്ഞെടുത്ത നെറ്റ്‌വർക്ക് മാറ്റുന്നത് പരീക്ഷിക്കുക. മാറ്റാൻ ടാപ്പ് ചെയ്യുക." "എമർജൻസി കോളിംഗ് ലഭ്യമല്ല" @@ -120,12 +121,13 @@ "റോമിംഗ് ബാനർ ഓണാക്കുക" "റോമിംഗ് ബാനർ ഓഫാക്കുക" "സേവനത്തിനായി തിരയുന്നു" - - + "വൈഫൈ കോളിംഗ് സജ്ജീകരിക്കാനായില്ല" "വൈഫൈ വഴി കോളുകൾ ചെയ്യാനും സന്ദേശങ്ങൾ അയയ്‌ക്കാനും ആദ്യം നിങ്ങളുടെ കാരിയറോട് ഈ സേവനം സജ്ജമാക്കാൻ ആവശ്യപ്പെടുക. ക്രമീകരണത്തിൽ നിന്ന് വീണ്ടും വൈഫൈ കോളിംഗ് ഓണാക്കുക. (പിശക് കോഡ്: %1$s)" - + + "നിങ്ങളുടെ കാരിയർ ഉപയോഗിച്ച് വൈഫൈ കോളിംഗ് രജിസ്‌റ്റർ ചെയ്യുന്നതിൽ പ്രശ്‌നം: %1$s" + "%s" "%s വൈഫൈ കോളിംഗ്" @@ -159,10 +161,8 @@ "നിരവധി അഭ്യർത്ഥനകൾ പ്രോസസ്സ് ചെയ്യുന്നു. പിന്നീട് വീണ്ടും ശ്രമിക്കുക." "%1$s എന്നതിൽ സൈൻ ഇൻ ചെയ്യുന്നതിൽ പിശക്" "സമന്വയിപ്പിക്കുക" - - - - + "സമന്വയിപ്പിക്കാനാവില്ല" + "ഒരുപാട് %s ഇല്ലാതാക്കാൻ ശ്രമിച്ചു." "ടാബ്‌ലെറ്റ് സ്റ്റോറേജ് കഴിഞ്ഞു. ഇടം ശൂന്യമാക്കാൻ ചില ഫയലുകൾ ഇല്ലാതാക്കുക." "വാച്ചിലെ സ്റ്റോറേജ് നിറഞ്ഞു. ഇടം ശൂന്യമാക്കാൻ കുറച്ച് ഫയലുകൾ ഇല്ലാതാക്കുക." "ടിവി സ്റ്റോറേജ് നിറഞ്ഞു. ഇടം ശൂന്യമാക്കാൻ കുറച്ച് ഫയലുകൾ ഇല്ലാതാക്കുക." @@ -272,40 +272,31 @@ "ഔദ്യോഗിക പ്രൊഫൈലിലേക്ക് മാറുക" "കോൺടാക്റ്റുകൾ" "നിങ്ങളുടെ കോൺടാക്റ്റുകൾ ആക്‌സസ്സ് ചെയ്യുക" - - + "നിങ്ങളുടെ കോണ്‍ടാക്റ്റുകള്‍ ആക്‌സസ് ചെയ്യാൻ <b>%1$s</b> ആപ്പിനെ അനുവദിക്കണോ?" "ലൊക്കേഷൻ" "ഈ ഉപകരണത്തിന്റെ ലൊക്കേഷൻ ആക്സസ് ചെയ്യാൻ" - - + "ഈ ഉപകരണത്തിന്റെ ലൊക്കേഷൻ ആക്‌സസ് ചെയ്യാൻ <b>%1$s</b> ആപ്പിനെ അനുവദിക്കണോ?" "കലണ്ടർ" "നിങ്ങളുടെ കലണ്ടർ ആക്‌സസ്സ് ചെയ്യുക" - - + "നിങ്ങളുടെ കലണ്ടർ ആക്‌സസ് ചെയ്യാൻ <b>%1$s</b> ആപ്പിനെ അനുവദിക്കണോ?" "SMS" "SMS സന്ദേശങ്ങൾ അയയ്‌ക്കുകയും കാണുകയും ചെയ്യുക" - - + "SMS സന്ദേശങ്ങൾ അയയ്ക്കാനും കാണാനും <b>%1$s</b> ആപ്പിനെ അനുവദിക്കണോ?" "സ്റ്റോറേജ്" "നിങ്ങളുടെ ഉപകരണത്തിലെ ഫോട്ടോകളും മീഡിയയും ഫയലുകളും ആക്സസ് ചെയ്യുക" - - + "നിങ്ങളുടെ ഉപകരണത്തിലെ ഫോട്ടോകളും മീഡിയയും ഫയലുകളും ആക്‌സസ് ചെയ്യാൻ <b>%1$s</b> ആപ്പിനെ അനുവദിക്കണോ?" "മൈക്രോഫോണ്‍" "ഓഡിയോ റെക്കോർഡ് ചെയ്യുക" - - + "ഓഡിയോ റെക്കോർഡ് ചെയ്യാൻ <b>%1$s</b> ആപ്പിനെ അനുവദിക്കണോ?" "ക്യാമറ" "ചിത്രങ്ങളെടുത്ത് വീഡിയോ റെക്കോർഡുചെയ്യുക" - - + "ചിത്രം എടുക്കാനും വീഡിയോ റെക്കോർഡ് ചെയ്യാനും <b>%1$s</b> ആപ്പിനെ അനുവദിക്കണോ?" "ഫോണ്‍" "ഫോൺ വിളിക്കുകയും നിയന്ത്രിക്കുകയും ചെയ്യുക" - - + "ഫോൺ കോളുകൾ ചെയ്യാനും അവ നിയന്ത്രിക്കാനും <b>%1$s</b> ആപ്പിനെ അനുവദിക്കണോ?" "ബോഡി സെൻസറുകൾ" "നിങ്ങളുടെ ജീവാധാര ലക്ഷണങ്ങളെ കുറിച്ചുള്ള സെൻസർ വിവരങ്ങൾ ആക്സസ് ചെയ്യുക" - - + "നിങ്ങളുടെ ജീവധാരണ ലക്ഷണങ്ങളെ കുറിച്ചുള്ള സെൻസർ ഡാറ്റ ആക്‌സസ് ചെയ്യാൻ <b>%1$s</b> ആപ്പിനെ അനുവദിക്കണോ?" "വിൻഡോ ഉള്ളടക്കം വീണ്ടെടുക്കുക" "നിങ്ങൾ സംവദിക്കുന്ന ഒരു വിൻഡോയുടെ ഉള്ളടക്കം പരിശോധിക്കുക." "സ്‌പർശനം വഴി പര്യവേക്ഷണം ചെയ്യുക ഓൺ ചെയ്യുക" @@ -492,6 +483,10 @@ "നിയർ ഫീൽഡ് കമ്മ്യൂണിക്കേഷൻ (NFC) ടാഗുകളുമായും കാർഡുകളുമായും റീഡറുകളുമായുള്ള ആശയവിനിമയത്തിന് അപ്ലിക്കേഷനുകളെ അനുവദിക്കുന്നു." "നിങ്ങളുടെ സ്‌ക്രീൻ ലോക്ക് പ്രവർത്തനരഹിതമാക്കുക" "കീലോക്കും ഏതെങ്കിലും അനുബന്ധ പാസ്‌വേഡ് സുരക്ഷയും പ്രവർത്തനരഹിതമാക്കാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു. ഉദാഹരണത്തിന്, ഒരു ഇൻകമിംഗ് കോൾ സ്വീകരിക്കുമ്പോൾ ഫോൺ കീലോക്ക് പ്രവർത്തനരഹിതമാക്കുന്നു, കോൾ അവസാനിക്കുമ്പോൾ കീലോക്ക് വീണ്ടും പ്രവർത്തനക്ഷമമാകുന്നു." + + + + "ഫിംഗർപ്രിന്റ് ഹാർഡ്‌വെയർ നിയന്ത്രിക്കുക" "ഉപയോഗിക്കാനായി വിരലടയാള ടെംപ്ലേറ്റുകൾ ചേർക്കാനും ഇല്ലാതാക്കാനുമുള്ള രീതികൾ അഭ്യർത്ഥിക്കാൻ അപ്ലിക്കേഷനെ അനുവദിക്കുന്നു." "ഫിംഗർപ്രിന്റ് ഹാർഡ്‌വെയർ ഉപയോഗിക്കുക" @@ -504,6 +499,7 @@ "തിരിച്ചറിഞ്ഞില്ല" + "ഫിംഗർപ്രിന്റ് പരിശോധിച്ചുറപ്പിച്ചു" "ഫിംഗർപ്രിന്റ് ഹാർഡ്‌വെയർ ലഭ്യമല്ല." "വിരലടയാളം സംഭരിക്കാനാവില്ല. നിലവിലുള്ള വിരലടയാളം നീക്കംചെയ്യുക." "വിരലടയാളം നൽകേണ്ട സമയം കഴിഞ്ഞു. വീണ്ടും ശ്രമിക്കുക." @@ -1016,14 +1012,32 @@ "ടൈപ്പുചെയ്യൽ രീതി" "ടെക്‌സ്‌റ്റ് പ്രവർത്തനങ്ങൾ" "ഇമെയിൽ" + + "വിളിക്കുക" + + "കണ്ടെത്തുക" + + "തുറക്കുക" + + "സന്ദേശം" + + "ചേർക്കുക" + + "കാണുക" + + "ഷെഡ്യൂള്‍‌" + + "ട്രാക്ക്" + + "സംഭരണയിടം കഴിഞ്ഞു" "ചില സിസ്റ്റം പ്രവർത്തനങ്ങൾ പ്രവർത്തിക്കണമെന്നില്ല." "സിസ്‌റ്റത്തിനായി മതിയായ സംഭരണമില്ല. 250MB സൗജന്യ സംഭരണമുണ്ടെന്ന് ഉറപ്പുവരുത്തി പുനരാരംഭിക്കുക." @@ -1117,8 +1131,7 @@ "%1$s തുറക്കുക" "%1$s സംരക്ഷിക്കാതെ അവസാനിപ്പിക്കും" "%1$s മെമ്മറി പരിധി കവിഞ്ഞു" - - + "ഹീപ്പ് ഡംപ് ശേഖരിച്ചു. പങ്കിടാൻ ടാപ്പ് ചെയ്യുക" "ഹീപ്പ് ഡംപ് പങ്കിടണോ?" "%1$s പ്രോസസ്സ് അതിന്റെ മെമ്മറി പരിധിയായ %2$s കവിഞ്ഞു. അതിന്റെ ഡവലപ്പറുമായി പങ്കിടാൻ ഒരു ഹീപ്പ് ഡംപ് നിങ്ങൾക്ക് ലഭ്യമാണ്. ശ്രദ്ധിക്കുക: ഈ ഹീപ്പ് ഡംപിൽ അപ്ലിക്കേഷന് ആക്‌സസ്സുള്ള ഏതെങ്കിലും സ്വകാര്യ വിവരങ്ങൾ അടങ്ങിയിരിക്കാം." "വാചകസന്ദേശത്തിനായി ഒരു പ്രവർത്തനം തിരഞ്ഞെടുക്കുക" @@ -1153,8 +1166,7 @@ "ലഭ്യമായ വൈഫൈ നെറ്റ്‌വർക്കിലേക്ക് കണക്റ്റുചെയ്യുക" "കാരിയർ വൈഫൈ നെറ്റ്‍വര്‍ക്കിലേക്ക് കണക്റ്റ് ചെയ്യുക" - - + "വൈഫൈ നെറ്റ്‌വർക്കിലേക്ക് കണക്‌റ്റ് ചെയ്യുന്നു" "വൈഫൈ നെറ്റ്‌വർക്കിലേക്ക് കണക്റ്റു‌ചെയ്‌‌തു" "വൈ-ഫൈ നെറ്റ്‌വർക്കിലേക്ക് കണക്‌റ്റുചെയ്യാനായില്ല" "എല്ലാ നെറ്റ്‌വർക്കുകളും കാണാൻ ടാപ്പുചെയ്യുക" @@ -1271,33 +1283,34 @@ "%s മറ്റ് ആപ്പുകൾക്ക് മുകളിൽ പ്രദർശിപ്പിക്കുന്നു" "%s ഈ ഫീച്ചർ ഉപയോഗിക്കുന്നതിൽ നിങ്ങൾക്ക് താൽപ്പര്യമില്ലെങ്കിൽ, ടാപ്പുചെയ്‌ത് ക്രമീകരണം തുറന്ന് അത് ഓഫാക്കുക." "ഓഫാക്കുക" - "%s തയ്യാറാകുന്നു" - "പിശകുകളുണ്ടോയെന്നു പരിശോധിക്കുന്നു" - "പുതിയ %s എന്നതിനെ തിരിച്ചറിഞ്ഞു" + "%s പരിശോധിക്കുന്നു…" + "നിലവിലെ ഉള്ളടക്കം അവലോകനം ചെയ്യുന്നു" + "പുതിയ %s" + "സജ്ജമാക്കാൻ ടാപ്പ് ചെയ്യുക" "ഫോട്ടോകളും മീഡിയയും ട്രാൻസ്‌ഫർ ചെയ്യാൻ" - "കേടായ %s" - "%s കേടായിരിക്കുന്നു. പരിഹരിക്കാൻ ടാപ്പുചെയ്യുക." + "%s-ൽ പ്രശ്‌നം" + "പരിഹരിക്കാൻ ടാപ്പ് ചെയ്യുക" "%s കേടായി. പരിഹരിക്കാൻ തിരഞ്ഞെടുക്കുക." "പിന്തുണയില്ലാത്ത %s" "ഈ ഉപകരണം %s പിന്തുണയ്ക്കുന്നതല്ല. പിന്തുണയുള്ള ഫോർമാറ്റിൽ സജ്ജമാക്കുന്നതിന് ടാപ്പുചെയ്യുക." "%s ഈ ഉപകരണത്തിന് അനുയോജ്യമല്ല. അനുയോജ്യമായ ഒരു ഫോർമാറ്റിൽ സജ്ജമാക്കുന്നതിന് തിരഞ്ഞെടുക്കുക." "%s അപ്രതീക്ഷിതമായി നീക്കംചെയ്‌തു" - "വിവരങ്ങൾ നഷ്‌ടപ്പെടുന്നത് ഒഴിവാക്കാൻ നീക്കംചെയ്യുന്നതിനുമുമ്പ് %s അൺ‌മൗണ്ടുചെയ്യുക" - "%s നീക്കംചെയ്‌തു" - "%s നീക്കംചെയ്‌തു; പുതിയതൊന്ന് ചേർക്കുക" - "ഇപ്പോഴും %s ഒഴിവാക്കപ്പെടുന്നു…" - "നീക്കംചെയ്യരുത്" + "ഉള്ളടക്കം നഷ്‌ടമാകുന്നത് തടയാൻ, നീക്കം ചെയ്യുന്നതിന് മുൻപ് മീഡിയ ഒഴിവാക്കുക" + "%s നീക്കം ചെ‌യ്‌തു" + "ചില പ്രവർത്തനങ്ങൾ ശരിയായി നടക്കണമെന്നില്ല. പുതിയ സ്റ്റോറേജ് ചേർക്കുക." + "%s ഒഴിവാക്കുന്നു" + "നീക്കം ചെയ്യരുത്" "സജ്ജമാക്കുക" "നിരസിക്കുക" "അടുത്തറിയുക" "%s കാണുന്നില്ല" - "ഈ ഉപകരണം വീണ്ടും നൽകുക" + "ഉപകരണത്തിലേക്ക് വീണ്ടും ഇടുക" "%s നീക്കുന്നു" "വിവരം നീക്കുന്നു" - "നീക്കുന്ന പ്രവർത്തനം പൂർത്തിയായി" - "%s എന്നതിലേക്ക് വിവരം നീക്കി" - "വിവരം നീക്കാനായില്ല" - "യഥാർത്ഥ ലൊക്കേഷനിൽ വിവരം ശേഷിക്കുന്നു" + "ഉള്ളടക്ക കൈമാറ്റം പൂർത്തിയായി" + "ഉള്ളടക്കം %s-ലേക്ക് നീക്കി" + "ഉള്ളടക്കം നീക്കാനായില്ല" + "ഉള്ളടക്കം നീക്കുന്നതിന് വീണ്ടും ശ്രമിക്കുക" "നീക്കംചെയ്‌തു" "ഇജക്റ്റുചെയ്തു" "പരിശോധിക്കുന്നു…" @@ -1356,17 +1369,14 @@ "എല്ലായ്‌പ്പോഴും ഓണായിരിക്കുന്ന VPN കണക്റ്റുചെയ്യുന്നു…" "എല്ലായ്‌പ്പോഴും ഓണായിരിക്കുന്ന VPN കണക്റ്റുചെയ്‌തു" "എപ്പോഴും ഓണായിരിക്കുന്ന VPN-ൽ നിന്ന് വിച്ഛേദിച്ചു" - - + "എപ്പോഴും ഓണായിരിക്കുന്ന VPN-ലേക്ക് കണക്‌റ്റ് ചെയ്യാനായില്ല" "നെറ്റ്‍വര്‍ക്ക് അല്ലെങ്കിൽ VPN ക്രമീകരണം മാറ്റുക" "ഫയല്‍‌ തിരഞ്ഞെടുക്കുക" "ഫയലൊന്നും തിരഞ്ഞെടുത്തില്ല" "പുനഃസജ്ജമാക്കുക" "സമർപ്പിക്കുക" - - - - + "ഡ്രൈവിംഗ് ആപ്പ് റൺ ചെയ്യുകയാണ്" + "ഡ്രൈവിംഗ് ആപ്പിൽ നിന്ന് പുറത്തുകടക്കാൻ ടാപ്പ് ചെയ്യുക." "ടെതറിംഗ് അല്ലെങ്കിൽ ഹോട്ട്സ്‌പോട്ട് സജീവമാണ്" "സജ്ജമാക്കാൻ ടാപ്പുചെയ്യുക." "ടെതറിംഗ് പ്രവർത്തനരഹിതമാക്കിയിരിക്കുന്നു" @@ -1692,8 +1702,7 @@ "നിങ്ങളുടെ അഡ്‌മിൻ ഇൻസ്റ്റാൾ ചെയ്യുന്നത്" "നിങ്ങളുടെ അഡ്‌മിൻ അപ്‌ഡേറ്റ് ചെയ്യുന്നത്" "നിങ്ങളുടെ അഡ്‌മിൻ ഇല്ലാതാക്കുന്നത്" - - + "ബാറ്ററി ലൈഫ് വർദ്ധിപ്പിക്കാൻ, \'ബാറ്ററി സംരക്ഷിക്കൽ\' നിങ്ങളുടെ ഉപകരണത്തിന്റെ പ്രകടനം കുറയ്ക്കുകയും വൈബ്രേഷൻ, ലൊക്കേഷൻ സേവനങ്ങൾ, പശ്ചാത്തല ഡാറ്റ, എന്നിവ പരിമിതപ്പെടുത്തുകയോ ഒാഫാക്കുകയോ ചെയ്യുന്നു. ഇമെയിൽ, സന്ദേശമയയ്‌ക്കൽ, സമന്വയിപ്പിക്കലിനെ ആശ്രയിച്ചുള്ള മറ്റ് ആപ്പുകൾ എന്നിവ നിങ്ങൾ തുറക്കുന്നതുവരെ അപ്‌ഡേറ്റ് ചെയ്യാനിടയില്ല.\n\nനിങ്ങളുടെ ഉപകരണം ചാർജ് ചെയ്യുമ്പോൾ \'ബാറ്ററി സംരക്ഷിക്കൽ\' സ്വമേധയാ ഓഫാകും." "ഡാറ്റാ ഉപയോഗം കുറയ്ക്കാൻ സഹായിക്കുന്നതിന്, പശ്ചാത്തലത്തിൽ ഡാറ്റ അയയ്ക്കുകയോ സ്വീകരിക്കുകയോ ചെയ്യുന്നതിൽ നിന്ന് ചില ആപ്‌സിനെ ഡാറ്റ സേവർ തടയുന്നു. നിങ്ങൾ നിലവിൽ ഉപയോഗിക്കുന്ന ഒരു ആപ്പിന് ഡാറ്റ ആക്സസ്സ് ചെയ്യാൻ കഴിയും, എന്നാൽ കുറഞ്ഞ ആവൃത്തിയിലാണിത് നടക്കുക. ഇതിനർത്ഥം, നിങ്ങൾ ടാപ്പുചെയ്യുന്നത് വരെ ചിത്രങ്ങൾ കാണിക്കുകയില്ല എന്നാണ്." "ഡാറ്റ സേവർ ഓണാക്കണോ?" "ഓണാക്കുക" @@ -1744,22 +1753,14 @@ "%1$s, മ്യൂട്ടുചെയ്‌തു" "നിങ്ങളുടെ ഉപകരണത്തിൽ ഒരു ആന്തരിക പ്രശ്‌നമുണ്ട്, ഫാക്‌ടറി വിവര പുനഃസജ്ജീകരണം ചെയ്യുന്നതുവരെ ഇതു അസ്ഥിരമായിരിക്കാനിടയുണ്ട്." "നിങ്ങളുടെ ഉപകരണത്തിൽ ഒരു ആന്തരിക പ്രശ്‌നമുണ്ട്. വിശദാംശങ്ങൾക്കായി നിർമ്മാതാവിനെ ബന്ധപ്പെടുക." - - - - - - - - - - - - - - - - + "USSD അഭ്യർത്ഥന, സാധാരണ കോളിലേക്ക് മാറ്റി" + "USSD അഭ്യർത്ഥന, SS അഭ്യർത്ഥനയിലേക്ക് മാറ്റി" + "പുതിയ USSD അഭ്യർത്ഥനയിലേക്ക് മാറ്റി" + "USSD അഭ്യർത്ഥന, വീഡിയോ കോളിലേക്ക് മാറ്റി" + "SS അഭ്യർത്ഥന, സാധാരണ കോളിലേക്ക് മാറ്റി" + "SS അഭ്യർത്ഥന, വീഡിയോ കോളിലേക്ക് മാറ്റി" + "SS അഭ്യർത്ഥന, USSD അഭ്യർത്ഥനയിലേക്ക് മാറ്റി" + "പുതിയ SS അഭ്യർത്ഥനയിലേക്ക് മാറ്റി" "ഔദ്യോഗിക പ്രൊഫൈൽ" "വികസിപ്പിക്കുക" "ചുരുക്കുക" @@ -1857,6 +1858,10 @@ "സിം വോയ്‌സിന് പ്രൊവിഷൻ ചെയ്‌തിട്ടില്ല" "സിം വോയ്‌സിന് അനുവദനീയമല്ല" "ഫോൺ വോയ്‌സിന് അനുവദനീയമല്ല" + "%d സിം അനുവദനീയമല്ല" + "സിം %d പ്രൊവിഷൻ ചെയ്‌തിട്ടില്ല" + "%d സിം അനുവദനീയമല്ല" + "%d സിം അനുവദനീയമല്ല" "പോപ്പ് അപ്പ് വിൻഡോ" "+ %1$d" "ആപ്പ് പതിപ്പ് തരംതാഴ്ത്തി, അല്ലെങ്കിൽ ഈ കുറുക്കുവഴിക്ക് അനുയോജ്യമല്ല" @@ -1877,8 +1882,6 @@ "ഇത് പുതിയ പ്രവർത്തനരീതിയാണ്. മാറ്റാൻ ടാപ്പ് ചെയ്യുക." "\'ശല്യപ്പെടുത്തരുത്\' മാറ്റി" "എന്തിനെയാണ് ബ്ലോക്ക് ചെയ്‌തതെന്ന് പരിശോധിക്കാൻ ടാപ്പ് ചെയ്യുക." - - - - + "സിസ്റ്റം" + "ക്രമീകരണം" diff --git a/core/res/res/values-mn/strings.xml b/core/res/res/values-mn/strings.xml index 158595f912f95b0bb0b8070041bdc375c81901f3..c539d442bb858d92428b80c9d8eb2e480c1d2c45 100644 --- a/core/res/res/values-mn/strings.xml +++ b/core/res/res/values-mn/strings.xml @@ -82,6 +82,8 @@ "Дуу хоолойны үйлчилгээ алга" "Дуут үйлчилгээ эсвэл яаралтай дуудлага алга" "Үйлчилгээг таны оператор компани түр хугацаанд унтраасан" + + "Мобайл сүлжээнд холбогдох боломжгүй байна" "Сонгосон сүлжээг өөрчлөхөөр оролдоно уу. Өөрчлөхийн тулд товшино уу." "Яаралтай дуудлага хийх боломжгүй" @@ -120,12 +122,13 @@ "Рүүминг Баннер Асаалттай" "Баннергүй рүүминг" "Үйлчилгээг хайж байна…" - - + "Wi‑Fi дуудлагыг тохируулж чадсангүй" "Wi-Fi-аар дуудлага хийх, мессеж илгээх бол эхлээд оператор компаниасаа энэ үйлчилгээг тохируулж өгөхийг хүснэ үү. Дараа нь Тохиргооноос Wi-Fi дуудлага хийх үйлдлийг асаана уу. (Алдааны код: %1$s)" - + + "Таны оператор компанийн Wi‑Fi дуудлагыг бүртгэхэд асуудал гарлаа: %1$s" + "%s" "%s Wi-Fi Дуудлага" @@ -481,6 +484,8 @@ "Апп нь Ойролцоо Талбарын Холболт(NFC) таг, карт, болон уншигчтай холбогдох боломжтой." "дэлгэцний түгжээг идэвхгүй болгох" "Апп нь түгжээ болон бусад холбоотой нууц үгийн аюулгүй байдлыг идэвхгүй болгох боломжтой. Жишээ нь бол утас нь дуудлага ирэх үед түгжээг идэвхгүй болгох ба дуудлага дуусахад буцаан идэвхтэй болгодог." + "биометрийн техник хангамжийг ашиглах" + "Aппад биометрийн техник хангамжийг баталгаажуулалтад ашиглахыг зөвшөөрдөг" "хурууны хээний програм хангамжийг удирдах" "Хурууны хээний загварыг нэмэх эсвэл усгтах үйлдлийг хийх зөвшөөрлийг програмд олгодог." "хурууны хээний програм хангамжийг ашиглах" @@ -493,6 +498,8 @@ "Танигдахгүй байна" + + "Хурууны хээний тоног төхөөрөмж бэлэн бус байна." "Хурууны хээг хадгалах боломжгүй байна. Одоо байгаа хурууны хээг арилгана уу." "Хурууны хээ оруулах хугацаа өнгөрсөн байна. Дахин оруулна уу." @@ -1005,14 +1012,23 @@ "Оруулах арга" "Текст үйлдэл" "Имэйл" + "Сонгосон хаяг руу имэйл илгээх" "Залгах" + "Сонгосон утасны дугаар руу залгах" "Байрших" + "Сонгосон хаягийн байршлыг тогтоох" "Нээх" + "Сонгосон URL-г нээх" "Зурвас" + "Сонгосон утасны дугаар руу мессеж илгээх" "Нэмэх" + "Харилцагчид нэмэх" "Үзэх" + "Календариас сонгосон огноог харах" "Хуваарь" + "Aрга хэмжээг сонгосон цагт хуваарилах" "Бичлэг" + "Сонгосон нислэгийг хянах" "Сангийн хэмжээ дутагдаж байна" "Зарим систем функц ажиллахгүй байна" "Системд хангалттай сан байхгүй байна. 250MБ чөлөөтэй зай байгаа эсэхийг шалгаад дахин эхлүүлнэ үү." @@ -1141,8 +1157,7 @@ "Нээлттэй Wi‑Fi сүлжээнд холбогдох" "Оператор Wi‑Fi сүлжээнд холбогдох" - - + "Wi‑Fi сүлжээнд холбогдож байна" "Wi‑Fi сүлжээнд холбогдлоо" "Wi‑Fi сүлжээнд холбогдож чадсангүй" "Бүх сүлжээг харахын тулд товшино уу" @@ -1258,33 +1273,49 @@ "%s-г бусад апп дээр харуулж байна" "Та %s-д энэ онцлогийг ашиглахыг хүсэхгүй байгаа бол тохиргоог нээгээд, унтраана уу." "Унтраах" - "%s-ыг бэлдэж байна" - "Алдааг шалгаж байна" - "Шинэ %s илэрлээ" + + + + + + + + "Зураг, медиа шилжүүлэхэд зориулсан" - "%s гэмтсэн" - "%s эвдэрсэн байна. Засахын тулд товшино уу." - "%s эвдэрсэн байна. Засахын тулд сонгоно уу." + + + + "Дэмжээгүй %s" "Энэ төхөөрөмж нь %s-г дэмждэггүй. Дэмжигдсэн хэлбэршүүлэлтэд тохируулахын тулд товшино уу." "Энэ төхөөрөмж %s-г дэмждэггүй. Дэмжсэн хэлбэршүүлэлтэд тохируулахын тулд сонгоно уу." "%s-ыг гэнэт гаргасан байна" - "Өгөгдөл алдагдахаас сэргийлж %s-ыг гаргахаас өмнө салга" - "%s-ыг гаргасан" - "%s-ыг гаргасан; шинийг оруулах" - "%s-ыг гаргаж байна..." - "Гаргаж болохгүй" + + + + + + + + + + "Тохируулах" "Салгах" "Судлах" "%s байхгүй байна" - "Энэ төхөөрөмжийг дахин оруул" + + "%s-ыг зөөж байна" "Өгөгдөл зөөвөрлөж байна..." - "Бүрэн бүтнээр шилжүүлэх" - "Өгөгдөл %s-д зөөгдсөн" - "Өгөгдлийг зөөх боломжгүй байна" - "Анхны байршилд өгөгдөл үлдсэн байна" + + + + + + + + "Хассан" "Салгасан" "Шалгаж байна..." @@ -1676,8 +1707,7 @@ "Таны админ суулгасан" "Таны админ шинэчилсэн" "Таны админ устгасан" - - + "Батерейны амийг уртасгахын тулд Батерей хэмнэгч таны төхөөрөмжийн гүйцэтгэлийг багасгаж, чичиргээ, байршлын үйлчилгээ болон цаана өгөгдлийг хязгаарлах буюу эсвэл унтраадаг. Синкээр ажилладаг имэйл, зурвас болон бусад аппыг нээхээс нааш шинэчлэх боломжгүй. \n\nТаны төхөөрөмжийг цэнэглэж байх үед Батерей хэмнэгч автоматаар унтарна." "Дата ашиглалтыг багасгахын тулд дата хэмнэгч нь зарим апп-г өгөгдлийг дэвсгэрт илгээх болон авахаас сэргийлдэг. Таны одоогийн ашиглаж буй апп нь өгөгдөлд хандах боломжтой хэдий ч цөөн үйлдэл хийнэ. Жишээлбэл зураг харахын тулд та товших шаардлагатай болно." "Өгөгдөл хамгаалагчийг асаах уу?" "Асаах" @@ -1728,22 +1758,14 @@ "%1$s-с хаасан" "Таны төхөөрөмжид дотоод алдаа байна.Та төхөөрөмжөө үйлдвэрээс гарсан төлөвт шилжүүлэх хүртэл таны төхөөрөмж чинь тогтворгүй байж болох юм." "Таны төхөөрөмжид дотоод алдаа байна. Дэлгэрэнгүй мэдээлэл авахыг хүсвэл үйлдвэрлэгчтэйгээ холбоо барина уу." - - - - - - - - - - - - - - - - + "USSD хүсэлтийг энгийн дуудлага болгон өөрчилсөн" + "USSD хүсэлтийг SS хүсэлт болгон өөрчилсөн" + "Шинэ USSD хүсэлт болгон өөрчилсөн" + "USSD хүсэлтийг видео дуудлага болгон өөрчилсөн" + "SS хүсэлтийг энгийн дуудлага болгон өөрчилсөн" + "SS хүсэлтийг видео дуудлага болгон өөрчилсөн" + "SS хүсэлтийг USSD хүсэлт болгон өөрчилсөн" + "Шинэ SS хүсэлт болгон өөрчилсөн" "Ажлын профайл" "Дэлгэх" "Буулгах" @@ -1841,6 +1863,14 @@ "SIM-г дуу хоолойд идэвхжүүлдэггүй" "SIM-г дуу хоолойд зөвшөөрдөггүй" "Утсыг дуу хоолойд зөвшөөрдөггүй" + + + + + + + + "гэнэт гарч ирэх цонх" "+ %1$d" "Аппын хувилбарыг бууруулсан эсвэл энэ товчлолтой тохирохгүй байна" diff --git a/core/res/res/values-mr/strings.xml b/core/res/res/values-mr/strings.xml index 92b07780fe8af43f39225ca3ccb07dfc8d9dc63e..bc60761bb37544820509ebcf34d556d0bd60ddfc 100644 --- a/core/res/res/values-mr/strings.xml +++ b/core/res/res/values-mr/strings.xml @@ -82,6 +82,8 @@ "व्हॉइस सेवा नाही" "व्‍हॉइस सेवा किंवा आणीबाणी कॉलिंग नाही" "तुमच्‍या वाहकाने तात्‍पुरते बंद केले आहे" + + "मोबाइल नेटवर्क उपलब्ध नाही" "प्राधान्य दिलेले नेटवर्क बदलण्याचा प्रयत्न करा. बदलण्यासाठी टॅप करा." "आणीबाणी कॉलिंग अनुपलब्ध" @@ -120,12 +122,13 @@ "रोमिंग बॅनर चालू" "रोमिंग बॅनर बंद" "सेवा शोधत आहे" - - + "वाय-फाय कॉलिंग सेट करता आले नाही" "वाय-फायवरून कॉल करण्यासाठी आणि संदेश पाठवण्यासाठी आधी तुमच्या कॅरियरला ही सेवा सेट अप करण्यास सांगा. नंतर सेटिंग्जमधून वाय-फाय वापरून कॉल करणे पुन्हा चालू करा. (एरर कोड %1$s)" - + + "तुमच्या या वाहकासह वाय-फाय कॉलिंग नोंदणी करताना समस्या आली आहे:%1$s" + "%s" "%s वाय-फाय कॉलिंग" @@ -159,10 +162,8 @@ "बर्‍याच विनंत्यांवर प्रक्रिया होत आहे. नंतर पुन्हा प्रयत्न करा." "%1$s साठी साइन इन एरर" "संकालन करा" - - - - + "सिंक करू शकत नाही" + "खूप जास्त %s हटवण्याचा प्रयत्न केला." "टॅबलेट संचयन पूर्ण भरले आहे. स्थान मोकळे करण्यासाठी काही फाईल हटवा." "पाहण्याचे संचयन पूर्ण भरले आहे. स्थान मोकळे करण्यासाठी काही फायली हटवा." "टीव्ही संचयन भरले आहे. स्थान मोकळे करण्यासाठी काही फायली हटवा." @@ -272,40 +273,31 @@ "कार्य प्रोफाइलवर स्विच करा" "संपर्क" "आपल्या संपर्कांवर प्रवेश" - - + "<b>%1$s</b> ला तुमचे संपर्क अॅक्सेस करू द्यायचे?" "स्थान" "या डिव्हाइसच्या स्थानावर प्रवेश" - - + "<b>%1$s</b> ला या डिव्हाइसचे स्थान अॅक्सेस करू द्यायचे?" "कॅलेंडर" "आपल्या कॅलेंडरवर प्रवेश" - - + "<b>%1$s</b> ला तुमचे कॅलेंडर अॅक्सेस करू द्यायचे?" "SMS" "SMS संदेश पाठवणे आणि पाहणे हे" - - + "<b>%1$s</b> ला एसएमएस पाठवू आणि पाहू द्यायचे?" "संचयन" "तुमच्या डिव्हाइस वरील फोटो, मीडिया आणि फायलींमध्‍ये अॅक्सेस" - - + "<b>%1$s</b> ला तुमच्या डिव्हाइसवरील फोटो, मीडिया आणि फायली अॅक्सेस करू द्यायचे?" "मायक्रोफोन" "ऑडिओ रेकॉर्ड" - - + "<b>%1$s</b> ला ऑडिओ रेकॉर्ड करू द्यायचे?" "कॅमेरा" "चित्रे घेण्याची आणि व्हिडिओ रेकॉर्ड" - - + "<b>%1$s</b> ला फोटो घेऊ आणि व्हिडिओ रेकॉर्ड करू द्यायचे?" "फोन" "फोन कॉल आणि व्यवस्थापित" - - + "<b>%1$s</b> ला फोन कॉल करू आणि ते व्यवस्थापित करू द्यायचे?" "शरीर सेन्सर" "आपल्‍या महत्त्वाच्या मापनांविषयी सेंसर डेटा अॅक्सेस करा" - - + "<b>%1$s</b> ला तुमच्या महत्त्वाच्या लक्षणांविषयीचा सेन्सर डेटा अॅक्सेस करू द्यायचे?" "विंडो सामग्री पुनर्प्राप्त करा" "आपण परस्‍परसंवाद करीत असलेल्‍या विंडोची सामग्री तपासा." "स्पर्श करून अन्वेषण चालू करा" @@ -492,6 +484,10 @@ "फील्ड जवळील कम्युनिकेशन (NFC) टॅग, कार्डे आणि वाचक यांच्यासह संवाद करण्यासाठी अॅपला अनुमती देते." "आपले स्क्रीन लॉक अक्षम करा" "कीलॉक आणि कोणतीही संबद्ध पासवर्ड सुरक्षितता अक्षम करण्यासाठी अॅप ला अनुमती देते. उदाहरणार्थ, येणारा फोन कॉल प्राप्त करताना फोन कीलॉक अक्षम करतो, नंतर जेव्हा कॉल समाप्त होतो तेव्हा तो कीलॉक पुन्हा-सक्षम करतो." + + + + "फिंगरप्रिंट हार्डवेअर व्यवस्थापित करा" "वापर करण्याकरिता फिंगरप्रिंट टेम्पलेट जोडण्यासाठी आणि हटविण्यासाठी पद्धती रद्द करण्यास अॅपला अनुमती देते." "फिंगरप्रिंट हार्डवेअर वापरा" @@ -504,6 +500,8 @@ "ओळखले नाही" + + "फिंगरप्रिंट हार्डवेअर उपलब्‍ध नाही." "फिंगरप्रिंट स्टोअर केले जाऊ शकत नाही. कृपया विद्यमान फिंगरप्रिंट काढा." "फिंगरप्रिंट टाइमआउट झाले. पुन्हा प्रयत्न करा." @@ -1016,14 +1014,32 @@ "इनपुट पद्धत" "मजकूर क्रिया" "ईमेल" + + "कॉल करा" + + "शोधा" + + "उघडा" + + "संदेश" + + "जोडा" + + "पहा" + + "शेड्यूल" + + "ट्रॅक" + + "संचयन स्थान संपत आहे" "काही सिस्टम कार्ये कार्य करू शकत नाहीत" "सिस्टीमसाठी पुरेसे संचयन नाही. आपल्याकडे 250MB मोकळे स्थान असल्याचे सुनिश्चित करा आणि रीस्टार्ट करा." @@ -1117,8 +1133,7 @@ "%1$s उघडा" "%1$s सेव्ह न करता बंद होईल" "%1$s ने मेमेरी मर्यादा वाढविली" - - + "हीप डंप गोळा केले. शेअर करण्यासाठी टॅप करा." "हीप डंप सामायिक करायचे?" "%1$s प्रक्रियेने त्याची %2$s ची प्रक्रिया मेमरी मर्यादा ओलांडली आहे. त्याच्या विकासकासह सामायिक करण्यासाठी तुमच्यासाठी हीप डंप उपलब्ध आहे. सावधगिरी बाळगा: या हीप डंपमध्ये आपली कोणतीही वैयक्तिक माहिती असू शकते ज्यात अॅप्लिकेशन प्रवेश करू शकतो." "मजकुरासाठी क्रिया निवडा" @@ -1153,8 +1168,7 @@ "खुल्या वाय-फाय नेटवर्कशी कनेक्ट करा" "वाहक वाय-फाय नेटवर्कशी कनेक्ट करा" - - + "वाय-फाय नेटवर्कशी कनेक्ट करत आहे" "वाय-फाय नेटवर्कशी कनेक्ट केले" "वाय-फाय नेटवर्कशी कनेक्ट करू शकत नाही" "सर्व नेटवर्क पाहण्यासाठी टॅप करा" @@ -1271,33 +1285,49 @@ "%s अन्‍य अॅप्सवर प्रदर्शित करत आहे" "%s ने हे वैशिष्ट्य वापरू नये असे आपण इच्छित असल्यास, सेटिंग्ज उघडण्यासाठी टॅप करा आणि ते बंद करा." "बंद करा" - "%s तयार करत आहे" - "त्रुटींसाठी तपासत आहे" - "नवीन %s आढळले" + + + + + + + + "फोटो आणि मीडिया स्थानांतरित करण्‍यासाठी" - "%s दूषित झालेले" - "%s दूषित आहे. निराकरण करण्यासाठी टॅप करा." - "%s दूषित आहे. निश्चित करण्यासाठी निवडा." + + + + "%s असमर्थित" "हे डिव्हाइस %s ला सपोर्ट करत नाही. सपोर्ट असलेल्या फॉरमॅटमध्ये सेट करण्यासाठी टॅप करा." "हे डिव्हाइस %s ला सपोर्ट करत नाही. सपोर्ट असलेल्या फॉरमॅटमध्ये सेट करण्यासाठी निवडा." "%s अनपेक्षितरित्या काढले" - "डेटा गमावणे टाळण्‍यासाठी काढण्‍यापूर्वी %s अनमाउंट करा" - "%s काढले" - "%s काढले; एक नवीन घाला" - "अद्याप %s ला बाहेर काढत आहे…" - "काढू नका" + + + + + + + + + + "सेट करा" "बाहेर काढा" "एक्सप्लोर करा" "%s गहाळ आहे" - "हे डिव्हाइस पुन्हा घाला" + + "%s हलवित आहे" "डेटा हलवित आहे" - "हलविणे पूर्ण" - "%s वर डेटा हलविला" - "डेटा हलविणे शक्य झाले नाही" - "मूळ स्थानावर डेटा सोडला" + + + + + + + + "काढले" "बाहेर काढले" "तपासत आहे..." @@ -1356,17 +1386,14 @@ "VPN कनेक्ट करणे नेहमी-चालू…" "VPN कनेक्ट केलेले नेहमी-चालू" "कायम चालू असलेल्या VPN मधून डिस्कनेक्ट केले" - - + "कायम चालू असलेल्या VPN शी कनेक्ट करता आले नाही" "नेटवर्क किंवा VPN सेटिंग्ज बदला" "फाईल निवडा" "फाईल निवडली नाही" "रीसेट करा" "सबमिट करा" - - - - + "ड्रायव्हिंग अॅप चालू आहे" + "ड्रायव्हिंग अॅपमधून बाहेर पाडण्यासाठी टॅप करा." "टेदरिंग किंवा हॉटस्पॉट सक्रिय" "सेट करण्यासाठी टॅप करा." "टेदरिंग बंद आहे" @@ -1692,8 +1719,7 @@ "आपल्या प्रशासकाने इंस्टॉल केले" "आपल्या प्रशासकाने अपडेट केले" "आपल्या प्रशासकाने हटवले" - - + "बॅटरीचे आयुष्य वाढवण्यासाठी, बॅटरी बचतकर्ता तुमच्या डिव्हाइसचे कार्यप्रदर्शन कमी करतो आणि कंपन, स्थान सेवा आणि बराच पार्श्वभूमी डेटा मर्यादित करतो. संकालनावर अवलंबून असणारे ईमेल, संदेशन आणि इतर अॅप्स तुम्ही उघडल्याशिवाय अपडेट होऊ शकत नाहीत.\n\nतुमचे डिव्हाइस चार्ज होत असते तेव्हा बॅटरी बचतकर्ता स्वयंचलितपणे बंद होतो." "डेटा वापर कमी करण्यात मदत करण्यासाठी, डेटा सर्व्हर काही अॅप्सना पार्श्वभूमीमध्ये डेटा पाठविण्यास किंवा प्राप्त करण्यास प्रतिबंधित करतो. आपण सध्या वापरत असलेला अॅप डेटामध्ये प्रवेश करू शकतो परंतु तसे तो खूप कमी वेळा करू शकतो. याचा अर्थ, उदाहरणार्थ, आपण इमेज टॅप करेपर्यंत त्या प्रदर्शित करणार नाहीत असा असू शकतो." "डेटा बचतकर्ता चालू करायचा?" "चालू करा" @@ -1744,22 +1770,14 @@ "%1$s द्वारे नि:शब्द केले" "आपल्‍या डिव्‍हाइसमध्‍ये अंतर्गत समस्‍या आहे आणि आपला फॅक्‍टरी डेटा रीसेट होईपर्यंत ती अस्‍थिर असू शकते." "आपल्‍या डिव्‍हाइसमध्‍ये अंतर्गत समस्‍या आहे. तपशीलांसाठी आपल्‍या निर्मात्याशी संपर्क साधा." - - - - - - - - - - - - - - - - + "USSD विनंती नियमित कॉलवर बदलली" + "USSD विनंती SS विनंतीवर बदलली" + "नवीन USSD विनंतीवर बदलली" + "USSD विनंती व्हिडिओ कॉलवर बदलली" + "SS विनंती नियमित कॉलवर बदलली" + "SS विनंती व्हिडिओ कॉलवर बदलली" + "SS विनंती USSD विनंतीवर बदलली" + "नवीन SS विनंतीवर बदलली" "कार्य प्रोफाईल" "विस्तृत करा" "संकुचित करा" @@ -1857,6 +1875,14 @@ "सिममध्‍ये व्‍हॉइसची तरतूद नाही" "व्‍हॉइसची सिमला अनुमती नाही" "व्‍हॉइसची फोनला अनुमती नाही" + + + + + + + + "पॉपअप विंडो" "+ %1$d" "अ‍ॅपची आवृत्ती डाउनग्रेड केली, किंवा ती या शॉर्टकटशी कंपॅटिबल नाही" @@ -1877,8 +1903,6 @@ "हे नवीन वर्तन आहे. बदलण्यासाठी टॅप करा." "व्यत्यय आणू नका बदलले आहे" "काय ब्लॉक केले आहे हे तपासण्यासाठी टॅप करा." - - - - + "सिस्टम" + "सेटिंग्ज" diff --git a/core/res/res/values-ms/strings.xml b/core/res/res/values-ms/strings.xml index 5108c912b12a1d9a39a506f955c3e78775d936b0..3710b7792e6c847a32de2f7184689e7fecc3a8a9 100644 --- a/core/res/res/values-ms/strings.xml +++ b/core/res/res/values-ms/strings.xml @@ -77,15 +77,17 @@ "ID pemanggil secara lalainya ditetapkan kepada tidak dihadkan. Panggilan seterusnya: Tidak terhad" "Perkhidmatan yang tidak diuntukkan." "Anda tidak boleh mengubah tetapan ID pemanggil." - "Tiada perkhidmatan data" - "Tiada panggilan kecemasan" + "Tiada perkhidmatan data mudah alih" + "Panggilan kecemasan tidak tersedia" "Tiada perkhidmatan suara" - "Tiada perkhidmatan suara/kecemasan" - "Tidak ditawarkan oleh rangkaian mudah alih di lokasi anda untuk sementara waktu" - "Tidak dapat mencapai rangkaian" - "Untuk memperbaik penerimaan, cuba tukar jenis rangkaian yang dipilih di Tetapan > Rangkaian & Internet > Rangkaian mudah alih > Jenis rangkaian pilihan." - "Panggilan Wi-Fi aktif" - "Rangkaian mudah alih diperlukan untuk membuat panggilan kecemasan." + "Tiada perkhidmatan suara atau panggilan kecemasan" + "Dimatikan untuk sementara waktu oleh pembawa anda" + + + "Tidak dapat mencapai rangkaian mudah alih" + "Cuba tukar rangkaian pilihan. Ketik untuk menukar." + "Panggilan kecemasan tidak tersedia" + "Tidak boleh membuat panggilan kecemasan melalui Wi-Fi" "Makluman" "Pemajuan panggilan" "Mod paggil balik kecemasan" @@ -120,12 +122,12 @@ "Sepanduk Perayauan Dihidupkan" "Sepanduk Perayauan Dimatikan" "Mencari Perkhidmatan" - "Panggilan Wi-Fi" + "Tidak dapat menyediakan panggilan Wi-Fi" "Untuk membuat panggilan dan menghantar mesej melalui Wi-Fi, minta pembawa anda menyediakan perkhidmatan ini terlebih dahulu. Kemudian, hidupkan panggilan Wi-Fi sekali lagi daripada Tetapan. (Kod ralat: %1$s)" - "Daftar dengan pembawa anda (Kod ralat: %1$s)" + "Terdapat masalah semasa mendaftarkan panggilan Wi-Fi dengan pembawa anda: %1$s" "%s" @@ -160,8 +162,8 @@ "Terlalu banyak permintaan sedang diproses. Cuba sebentar lagi." "Ralat log masuk untuk %1$s" "Penyegerakan" - "Penyegerakan" - "Terlalu banyak pemadaman %s." + "Tidak dapat menyegerak" + "Cuba memadamkan terlalu banyak %s." "Storan tablet penuh. Padamkan beberapa fail untuk mengosongkan ruang." "Storan tontonan penuh. Padamkan beberapa fail untuk mengosongkan ruang." "Storan TV penuh. Padam beberapa fail untuk mengosongkan ruang." @@ -174,14 +176,13 @@ "Oleh pentadbir profil kerja anda" "Oleh %s" "Profil kerja dipadam" - "Profil kerja dipadamkan kerana ketiadaan apl pentadbir" "Apl pentadbir profil kerja tiada atau rosak. Akibatnya, profil kerja anda dan data yang berkaitan telah dipadamkan. Hubungi pentadbir anda untuk mendapatkan bantuan." "Profil kerja anda tidak lagi tersedia pada peranti ini" "Terlalu banyak percubaan kata laluan" "Peranti ini diurus" "Organisasi anda mengurus peranti ini dan mungkin memantau trafik rangkaian. Ketik untuk mendapatkan butiran." "Peranti anda akan dipadam" - "Apl pentadbir tidak dapat digunakan. Peranti anda akan dipadamkan sekarang.\n\nJika anda ingin mengemukakan soalan, hubungi pentadbir organisasi anda." + "Apl pentadbir tidak dapat digunakan. Peranti anda akan dipadamkan sekarang.\n\nJika anda ingin mengemukakan soalan, hubungi pentadbir organisasi anda." "Pencetakan dilumpuhkan oleh %s." "Saya" "Pilihan tablet" @@ -236,6 +237,9 @@ "Mod pesawat" "Mod Pesawat DIHIDUPKAN" "Mod Pesawat DIMATIKAN" + "Penjimat bateri" + "Penjimat bateri DIMATIKAN" + "Penjimat Bateri DIHIDUPKAN" "Tetapan" "Bantu" "Bantuan Suara" @@ -269,31 +273,31 @@ "Beralih ke profil kerja" "Kenalan" "mengakses kenalan anda" - "Benarkan <b>%1$s</b> mengakses kenalan anda" + "Benarkan <b>%1$s</b> mengakses kenalan anda?" "Lokasi" "mengakses lokasi peranti ini" - "Benarkan <b>%1$s</b> mengakses lokasi peranti ini" + "Benarkan <b>%1$s</b> mengakses lokasi peranti ini?" "Kalendar" "mengakses kalendar" - "Benarkan <b>%1$s</b> mengakses kalendar anda" + "Benarkan <b>%1$s</b> mengakses kalendar anda?" "SMS" "menghantar dan melihat mesej SMS" - "Benarkan <b>%1$s</b> menghantar dan melihat mesej SMS" + "Benarkan <b>%1$s</b> menghantar dan melihat mesej SMS?" "Storan" "mengakses foto, media dan fail pada peranti anda" - "Benarkan <b>%1$s</b> mengakses foto, media dan fail pada peranti anda" + "Benarkan <b>%1$s</b> mengakses foto, media dan fail pada peranti anda?" "Mikrofon" "rakam audio" - "Benarkan <b>%1$s</b> merakam audio" + "Benarkan <b>%1$s</b> merakam audio?" "Kamera" "ambil gambar dan rakam video" - "Benarkan <b>%1$s</b> mengambil gambar dan merakam video" + "Benarkan <b>%1$s</b> mengambil gambar dan merakam video?" "Telefon" "membuat dan mengurus panggilan telefon" - "Benarkan <b>%1$s</b> membuat dan mengurus panggilan telefon" + "Benarkan <b>%1$s</b> membuat dan mengurus panggilan telefon?" "Penderia Badan" "akses data penderia tentang tanda vital anda" - "Benarkan <b>%1$s</b> mengakses data penderia tentang tanda vital anda" + "Benarkan <b>%1$s</b> mengakses data penderia tentang tanda vital anda?" "Dapatkan kembali kandungan tetingkap" "Periksa kandungan tetingkap yang berinteraksi dengan anda." "Hidupkan Jelajah melalui Sentuhan" @@ -305,7 +309,7 @@ "Lakukan gerak isyarat" "Boleh ketik, leret, cubit dan laksanakan gerak isyarat lain." "Gerak isyarat cap jari" - "Boleh menangkap gerak isyarat yang dilakukan pada penderia cap jari peranti." + "Boleh menangkap gerak isyarat yang dilakukan pada penderia cap jari peranti." "lumpuhkan atau ubah suai bar status" "Membenarkan apl melumpuhkan bar status atau menambah dan mengalih keluar ikon sistem." "jadi bar status" @@ -356,6 +360,8 @@ "Membenarkan apl untuk membuat sebahagian dirinya berterusan dalam memori. Ini boleh mengehadkan memori yang tersedia kepada apl lain dan menjadikan tablet perlahan." "Membenarkan apl menjadikan sebahagian daripada apl kekal dalam memori. Ini boleh mengehadkan memori yang tersedia kepada apl lain dan menjadikan TV perlahan." "Membenarkan apl untuk membuat sebahagian dari dirinya berterusan dalam memori. Ini boleh mengehadkan memori yang tersedia kepada apl lain dan menjadikan telefon perlahan." + "jalankan perkhidmatan latar depan" + "Membenarkan apl menggunakan perkhidmatan latar depan." "ukur ruang storan apl" "Membenarkan apl mendapatkan semula kodnya, datanya dan saiz cachenya" "ubah suai tetapan sistem" @@ -478,6 +484,8 @@ "Membenarkan apl berkomunikasi dengan teg, kad dan pembaca Komunikasi Medan Dekat (NFC)." "lumpuhkan kunci skrin anda" "Membenarkan apl melumpuhkan kunci kekunci dan sebarang keselamatan kata laluan yang berkaitan. Sebagai contoh, telefon melumpuhkan kunci kekunci apabila menerima panggilan telefon masuk kemudian mendayakan semula kunci kekunci apabila panggilan selesai." + "gunakan perkakasan biometrik" + "Membenarkan apl menggunakan perkakasan biometrik untuk pengesahan" "urus perkakasan cap jari" "Membenarkan apl menggunakan kaedah untuk menambahkan dan memadamkan templat cap jari untuk digunakan." "gunakan perkakasan cap jari" @@ -490,6 +498,8 @@ "Tidak dicam" + + "Perkakasan cap jari tidak tersedia." "Cap jari tidak dapat disimpan. Sila alih keluar cap jari sedia ada." "Tamat masa cap jari dicapai. Cuba lagi." @@ -802,6 +812,8 @@ "Buka kunci corak." "Wajah Buka Kunci" "Buka kunci pin." + "Buka kunci Pin Sim." + "Buka kunci Puk Sim." "Buka kunci kata laluan." "Kawasan corak." "Kawasan luncur." @@ -863,6 +875,12 @@ "Teks disalin ke papan keratan" "Lagi" "Menu+" + "Meta+" + "Ctrl+" + "Alt+" + "Shift+" + "Sym+" + "Fungsi+" "ruang" "enter" "padam" @@ -994,14 +1012,23 @@ "Kaedah input" "Tindakan teks" "E-mel" + "Hantar e-mel ke alamat yang dipilih" "Panggil" + "Panggil nombor telefon yang dipilih" "Cari" + "Cari alamat yang dipilih" "Buka" + "Buka URL yang dipilih" "Mesej" + "Hantar mesej kepada nombor telefon yang dipilih" "Tambah" + "Tambah pada kenalan" "Lihat" + "Lihat masa yang dipilih dalam kalendar" "Jadual" + "Jadualkan acara untuk masa yang dipilih" "Pantau" + "Jejak penerbangan yang dipilih" "Ruang storan semakin berkurangan" "Beberapa fungsi sistem mungkin tidak berfungsi" "Tidak cukup storan untuk sistem. Pastikan anda mempunyai 250MB ruang kosong dan mulakan semula." @@ -1074,31 +1101,28 @@ "Semak kemas kini" "Apl %1$s (proses %2$s) telah melanggar dasar Mod Tegasnya sendiri." "Proses %1$s telah melanggar dasar Mod Tegasnya sendiri." - "Android sedang menaik taraf..." - "Android sedang dimulakan…" + "Telefon sedang mengemas kini…" + "Tablet sedang mengemas kini…" + "Peranti sedang mengemas kini…" + "Telefon sedang dimulakan…" + "Tablet sedang dimulakan…" + "Peranti sedang dimulakan…" "Mengoptimumkan storan." - "Menyelesaikan kemas kini Android…" - "Sesetengah apl mungkin tidak berfungsi dengan betul sehingga peningkatan selesai" + "Menyelesaikan kemas kini sistem…" "%1$s sedang ditingkatkan…" "Mengoptimumkan apl %1$d daripada %2$d." "Menyediakan %1$s." "Memulakan apl." "But akhir." "%1$s dijalankan" - - - - - - - - - - - - + "Ketik untuk kembali ke permainan" + "Pilih permainan" + "Untuk mendapatkan prestasi yang lebih baik, hanya satu daripada permainan ini boleh dibuka pada satu-satu masa." + "Kembali ke %1$s" + "Buka %1$s" + "%1$s akan ditutup tanpa menyimpan" "%1$s melebihi had memori" - "Longgokan timbunan telah dikumpulkan; ketik untuk berkongsi" + "Longgokan timbunan dikumpulkan. Ketik untuk berkongsi." "Kongsikan longgokan timbunan?" "Proses %1$s telah melebihi had memori proses sebanyak %2$s. Longgokan timbunan tersedia untuk anda kongsikan dengan pembangun aplikasi. Sila berhati-hati: longgokan timbunan ini boleh mengandungi sebarang maklumat peribadi anda yang boleh diakses oleh aplikasi itu." "Pilih tindakan untuk teks" @@ -1133,12 +1157,12 @@ "Sambung ke rangkaian Wi-Fi terbuka" "Sambung ke rangkaian Wi-Fi pembawa" - "Menyambung ke rangkaian Wi‑Fi terbuka" + "Menyambung ke rangkaian Wi-Fi" "Disambungkan ke rangkaian Wi-Fi" "Tidak dapat menyambung ke rangkaian Wi-Fi" "Ketik untuk melihat semua rangkaian" "Sambung" - "Semua Rangkaian" + "Semua rangkaian" "Wi‑Fi akan dihidupkan secara automatik" "Apabila anda berada berdekatan dengan rangkaian disimpan yang berkualiti tinggi" "Jangan hidupkan kembali" @@ -1204,6 +1228,7 @@ "Mulakan semula" "Aktifkan perkhidmatan mudah alih" "Muat turun apl pembawa untuk mengaktifkan SIM baharu" + "Muat turun apl %1$s untuk mengaktifkan SIM baharu anda" "Muat turun apl" "SIM baharu dimasukkan" "Ketik untuk menyediakannya" @@ -1222,13 +1247,13 @@ "PTP melalui USB dihidupkan" "Penambatan USB dihidupkan" "MIDI melalui USB dihidupkan" - "Mod aksesori USB dihidupkan" + "Aksesori USB disambungkan" "Ketik untuk mendapatkan lagi pilihan." "Mengecas peranti tersambung. Ketik untuk mendapatkan lagi pilihan." "Aksesori audio analog dikesan" "Peranti yang disambungkan tidak serasi dengan telefon ini. Ketik untuk mengetahui lebih lanjut." "Penyahpepijatan USB disambungkan" - "Ketik untuk melumpuhkan penyahpepijatan USB." + "Ketik untuk mematikan penyahpepijatan USB" "Pilih untuk melumpuhkan penyahpepijatan USB." "Mengambil laporan pepijat…" "Kongsi laporan pepijat?" @@ -1247,34 +1272,50 @@ "%s dipaparkan di atas apl lain" "%s dipaparkan di atas apl lain" "Jika anda tidak mahu %s menggunakan ciri ini, ketik untuk membuka tetapan dan matikannya." - "MATIKAN" - "Menyediakan %s" - "Menyemak untuk mengesan ralat" - "%s baharu dikesan" + "Matikan" + + + + + + + + "Untuk memindahkan foto dan media" - "%s rosak" - "%s rosak. Ketik untuk membetulkannya." - "%s rosak. Pilih untuk baiki." + + + + "%s tidak disokong" "Peranti ini tidak menyokong %s ini. Ketik untuk menyediakannya dalam format yang disokong." "Peranti ini tidak menyokong %s ini. Pilih untuk menyediakan media dalam format yang disokong." "%s ditanggalkan tanpa dijangka" - "Nyahlekap %s sebelum menanggalkannya untuk mengelakkan kehilangan data" - "%s dialih keluar" - "%s ditanggalkan; masukkan yang baharu" - "Masih menanggalkan %s..." - "Jangan tanggalkan" + + + + + + + + + + "Sediakan" "Tanggalkan" "Teroka" "%s tiada" - "Sisipkan semula peranti ini" + + "Mengalihkan %s" "Mengalihkan data" - "Pengalihan selesai" - "Data dipindahkan ke %s" - "Tidak dapat memindahkan data" - "Data dibiarkan di lokasi asal" + + + + + + + + "Dialih keluar" "Dikeluarkan" "Menyemak…" @@ -1333,14 +1374,14 @@ "VPN sentiasa hidup sedang disambungkan..." "VPN sentiasa hidup telah disambungkan" "Diputuskan sambungan daripada VPN sentiasa hidup" - "Ralat VPN sentiasa hidup" + "Tidak dapat menyambung ke VPN sentiasa hidup" "Tukar tetapan rangkaian atau VPN" "Pilih fail" "Tiada fail dipilih" "Tetapkan semula" "Serah" - "Mod kereta didayakan" - "Ketik untuk keluar daripada mod kereta." + "Apl memandu sedang berjalan" + "Ketik untuk keluar daripada apl memandu." "Penambatan atau titik panas aktif" "Ketik untuk membuat persediaan." "Penambatan dilumpuhkan" @@ -1418,22 +1459,19 @@ "Pemacu USB %s" "Storan USB" "Edit" - "Makluman penggunaan data" - "Ketik utk lihat p\'gunaan & ttpn." - "Mencapai had data 2G-3G" - "Mencapai had data 4G" + "Amaran data" + "Anda telah menggunakan %s data" "Had data mudah alih dicapai" "Mencapai had data Wi-Fi" - "Data dijeda untuk baki kitaran" - "Melebihi had data 2G-3G" - "Melebihi had data 4G" - "Melebihi had data mudah alih" - "Melebihi had data Wi-Fi" - "%s melebihi had yang ditentukan." + "Data dijeda untuk baki kitaran anda" + "Melebihi had data mudah alih" + "Melebihi had data Wi-Fi anda" + "Anda telah menggunakan %s lebih daripada had yang ditetapkan" "Data latar belakang terhad" "Ketik untuk alih keluar sekatan." - "Penggunaan data yang banyak" - "Penggunaan data anda sepanjang beberapa hari yang lalu adalah lebih banyak daripada biasa. Ketik untuk melihat penggunaan dan tetapan." + "Penggunaan data mudah alih yang tinggi" + "Apl anda telah menggunakan lebih banyak data berbanding biasa" + "%s telah menggunakan lebih banyak data berbanding biasa" "Sijil keselamatan" "Sijil ini sah." "Dikeluarkan kepada:" @@ -1669,7 +1707,7 @@ "Dipasang oleh pentadbir anda" "Dikemas kini oleh pentadbir anda" "Dipadamkan oleh pentadbir anda" - "Untuk mempertingkatkan hayat bateri, Penjimat Bateri mengurangkan prestasi peranti anda dan mengehadkan getaran, perkhidmatan lokasi dan kebanyakan data latar belakang. E-mel, pemesejan dan apl lain yang bergantung pada penyegerakan mungkin tidak dikemas kini, melainkan anda membuka apl itu.\n\nPenjimat Bateri dimatikan secara automatik apabila peranti anda sedang dicas." + "Untuk melanjutkan hayat bateri, Penjimat Bateri mengurangkan prestasi peranti anda dan mengehadkan atau mematikan getaran, perkhidmatan lokasi dan data latar belakang. E-mel, pemesejan dan apl lain yang bergantung pada penyegerakan mungkin tidak dikemas kini, melainkan anda membuka apl itu.\n\nPenjimat Bateri dimatikan secara automatik apabila peranti anda sedang dicas." "Untuk membantu mengurangkan penggunaan data, Penjimat Data menghalang sesetengah apl daripada menghantar atau menerima data di latar. Apl yang sedang digunakan boleh mengakses data tetapi mungkin tidak secara kerap. Perkara ini mungkin bermaksud bahawa imej tidak dipaparkan sehingga anda mengetik pada imej itu, contohnya." "Hidupkan Penjimat Data?" "Hidupkan" @@ -1681,9 +1719,9 @@ Selama %1$d min (hingga %2$s) Selama 1 min (hingga %2$s) - - Selama %1$d jam (sehingga %2$s) - Selama satu jam (sehingga %2$s) + + Selama %1$d jam (hingga %2$s) + Selama 1 jam (hingga %2$s) Selama %1$d jam (hingga %2$s) @@ -1697,9 +1735,9 @@ Selama %d min Selama 1 min - + Selama %d jam - Selama satu jam + Selama 1 jam Selama %d jam @@ -1720,14 +1758,14 @@ "Diredam oleh %1$s" "Terdapat masalah dalaman dengan peranti anda. Peranti mungkin tidak stabil sehingga anda membuat tetapan semula data kilang." "Terdapat masalah dalaman dengan peranti anda. Hubungi pengilang untuk mengetahui butirannya." - "Permintaan USSD diubah kepada permintaan DIAL." - "Permintaan USSD diubah kepada permintaan SS." - "Permintaan USSD diubah kepada permintaan USSD baharu." - "Permintaan USSD diubah suai kepada permintaan DAIL Video." - "Permintaan SS diubah kepada permintaan DIAL." - "Permintaan SS diubah suai kepada permintaan DAIL Video." - "Permintaan SS diubah kepada permintaan USSD." - "Permintaan SS diubah kepada permintaan SS baharu." + "Permintaan USSD ditukar kepada panggilan biasa" + "Permintaan USSD ditukar kepada permintaan SS" + "Bertukar kepada permintaan USSD baharu" + "Permintaan USSD ditukar kepada panggilan video" + "Permintaan SS ditukar kepada panggilan biasa" + "Permintaan SS ditukar kepada panggilan video" + "Permintaan SS ditukar kepada permintaan USSD" + "Bertukar kepada permintaan SS baharu" "Profil kerja" "Kembangkan" "Runtuhkan" @@ -1825,6 +1863,14 @@ "SIM tidak diperuntukkan untuk suara" "SIM tidak dibenarkan untuk suara" "Telefon tidak dibenarkan untuk suara" + + + + + + + + "Tetingkap Timbul" "+ %1$d" "Versi apl diturunkan taraf atau tidak serasi dengan pintasan ini" @@ -1837,7 +1883,14 @@ "Apl berbahaya dikesan" "%1$s mahu menunjukkan %2$s hirisan" "Edit" + "Panggilan dan pemberitahuan akan bergetar" + "Panggilan dan pemberitahuan akan diredamkan" "Perubahan sistem" + "Jangan Ganggu" + "Jangan Ganggu menyembunyikan pemberitahuan untuk membantu anda menumpukan perhatian" + "Ini merupakan gelagat baharu. Ketik untuk menukar." "Jangan Ganggu telah berubah" - "Ketik untuk menyemak tetapan gelagat anda bagi gangguan" + "Ketik untuk menyemak item yang disekat." + "Sistem" + "Tetapan" diff --git a/core/res/res/values-my/strings.xml b/core/res/res/values-my/strings.xml index a29ffbb0d0e84d797673e66dd528773a35536bdc..adb29f3d9df7b81df8a60a5c271fa2fae2747c39 100644 --- a/core/res/res/values-my/strings.xml +++ b/core/res/res/values-my/strings.xml @@ -82,6 +82,7 @@ "ဖုန်းဝန်ဆောင်မှု မရှိပါ" "ဖုန်းခေါ်ဆိုခြင်း ဝန်ဆောင်မှု သို့မဟုတ် အရေးပေါ်ခေါ်ဆိုခြင်း မရနိုင်ပါ" "သင်၏ ဝန်ဆောင်မှုပေးသူက ယာယီပိတ်ထားသည်" + "ဆင်းမ် %d အတွက် သင်၏ ဝန်ဆောင်မှုပေးသူက ယာယီပိတ်ထားပါသည်" "မိုဘိုင်းကွန်ရက် လိုင်းမရပါ" "ဦးစားပေးကွန်ရက်သို့ ပြောင်းကြည့်ပါ။ ပြောင်းရန် တို့ပါ။" "အရေးပေါ်ခေါ်ဆိုမှု မရနိုင်ပါ" @@ -120,12 +121,13 @@ "ရုန်းမင်းစာတမ်းဖွင့်ရန်" "ရုန်းမင်းစာတမ်းပိတ်ထားရန်" "ဆားဗစ်အားရှာဖွေနေသည်" - - + "Wi‑Fi ခေါ်ဆိုမှုကို စနစ်ထည့်သွင်း၍မရပါ" "Wi-Fi အသုံးပြု၍ ဖုန်းခေါ်ရန်နှင့် မက်ဆေ့ဂျ်ပို့ရန်အတွက် သင့်ဝန်ဆောင်မှုပေးသူကို ဤဝန်ဆောင်မှုအား သတ်မှတ်ပေးရန် ဦးစွာတောင်းဆိုပါ။ ထို့နောက် ဆက်တင်ထဲသို့ သွား၍ Wi-Fi ဖြင့် ဖုန်းခေါ်ခြင်းကို ဖွင့်ရပါမည်။ (အမှားကုဒ်- %1$s)" - + + "သင်၏ ဝန်ဆောင်မှုပေးသူဖြင့် Wi‑Fi ခေါ်ဆိုမှုကို မှတ်ပုံတင်ရာတွင် ပြဿနာရှိနေသည်− %1$s" + "%s" "%s Wi-Fi ခေါ်ဆိုမှု" @@ -294,7 +296,7 @@ "<b>%1$s</b> အား ဖုန်းခေါ်ဆိုမှုများ ပြုလုပ်ခွင့်နှင့် စီမံခွင့်ပေးလိုပါသလား။" "ခန္ဓာကိုယ် အာရုံခံကိရိယာများ" "သင်၏ အဓိကကျသော လက္ခဏာများအကြောင်း အာရုံခံကိရိယာဒေတာကို ရယူသုံးစွဲရန်" - "<b>%1$s</b> အား သင်၏ အသက်ရှင်မှုလက္ခဏာ အာရုံခံကိရိယာ ဒေတာများကို သုံးခွင့်ပေးလိုပါသလား။" + "<b>%1$s</b> အား သင်၏ အရေးကြီးသောလက္ခဏာ အာရုံခံကိရိယာ ဒေတာများကို သုံးခွင့်ပေးလိုပါသလား။" "ဝင်းဒိုးတွင် ပါရှိသည်များကို ပြန်လည်ရယူရန်" "သင်အသုံးပြုနေသော ဝင်းဒိုးတွင် ပါရှိသည်များကို ကြည့်ရှုစစ်ဆေးသည်။" "တို့ထိခြင်းဖြင့် ရှာဖွေမှုကို ဖွင့်ရန်" @@ -481,6 +483,8 @@ "အက်ပ်အား တာတို စက်ကွင်း ဆက်သွယ်ရေး (NFC) တဲဂ်များ၊ ကဒ်များ နှင့် ဖတ်ကြသူတို့နှင့် ဆက်သွယ်ပြောဆိုခွင့် ပြုသည်။" "ဖန်သားပြင် သော့ချခြင်းအား မလုပ်နိုင်အောင် ပိတ်ရန်" "အပလီကေးရှင်းအား သော့ချခြင်းနှင့် သက်ဆိုင်ရာ စကားဝှက်သတ်မှတ်ခြင်းများအား မသုံးနိုင်အောင် ပိတ်ခြင်းကို ခွင့်ပြုရန်။ ဥပမာ ဖုန်းလာလျှင် သော့ပိတ်ခြင်း ပယ်ဖျက်ခြင်း၊ ဖုန်းပြောပြီးလျှင် သော့ကို အလိုအလျောက် ပြန်ပိတ်ခြင်း" + "ဇီဝဗေဒဆိုင်ရာ သတင်းအချက်အလက်များသုံးသည့် ကွန်ပျူတာဆိုင်ရာ စက်ပစ္စည်းကို အသုံးပြုရန်" + "အထောက်အထားစိစစ်ခြင်းအတွက် ဇီဝဗေဒဆိုင်ရာ သတင်းအချက်အလက်များသုံးသည့် ကွန်ပျူတာဆိုင်ရာ စက်ပစ္စည်းကို အသုံးပြုရန် အက်ပ်ကို ခွင့်ပြုသည်" "လက်ဗွေရာပစ္စည်းကို စီမံမည်" "အသုံးပြုရန်အတွက် လက်ဗွေရာပုံစံများကို ပေါင်းထည့်ရန် သို့မဟုတ် ဖျက်ရန်နည်းလမ်းများကို အပ်ဖ်အား အသုံးပြုခွင့်ပြုသည်။" "လက်ဗွေရာပစ္စည်းကို အသုံးပြုမည်" @@ -493,6 +497,7 @@ "အသိအမှတ်မပြုပါ" + "လက်ဗွေကို အထောက်အထားစိစစ်ပြီးပါပြီ" "လက်ဗွေရာ ဟာ့ဒ်ဝဲ မရနိုင်ပါ။" "လက်ဗွေရာ သိုလှောင်၍မရပါ။ ကျေးဇူးပြု၍ ရှိပြီးလက်ဗွေရာအား ဖယ်ရှားပါ။" "လက်ဗွေရာအချိန်ကုန် သွားပါသည်။ ထပ်မံကြိုးစားပါ။" @@ -1005,14 +1010,23 @@ "ထည့်သွင်းရန်နည်းလမ်း" "စာတို လုပ်ဆောင်ချက်" "အီးမေးလ်" + "ရွေးထားသည့် လိပ်စာသို့ အီးမေးလ်ပို့ရန်" "ခေါ်ဆိုရန်" + "ရွေးထားသည့် ဖုန်းနံပါတ်ကို ခေါ်ရန်" "တည်နေရာ" + "ရွေးထားသည့် လိပ်စာကို ရှာဖွေရန်" "ဖွင့်ရန်" + "ရွေးထားသည့် URL ကို ဖွင့်ရန်" "SMS" + "ရွေးထားသည့် ဖုန်းနံပါတ်ကို မက်ဆေ့ဂျ်ပို့ရန်" "ထည့်ရန်" + "အဆက်အသွယ်များသို့ ထည့်ရန်" "ကြည့်ရန်" + "ရွေးထားသည့် အချိန်ကို ပြက္ခဒိန်တွင် ကြည့်ရန်" "အချိန်ဇယား" + "ရွေးထားသည့်အချိန်အတွက် အစီအစဉ်ပြုလုပ်ရန်" "ရှာရန်" + "ရွေးထားသည့် လေယာဉ်ခရီးစဉ်ကို ရှာဖွေရန်" "သိမ်းဆည်သော နေရာ နည်းနေပါသည်" "တချို့ စနစ်လုပ်ငန်းများ အလုပ် မလုပ်ခြင်း ဖြစ်နိုင်ပါသည်" "စနစ်အတွက် သိုလှောင်ခန်း မလုံလောက်ပါ။ သင့်ဆီမှာ နေရာလွတ် ၂၅၀ MB ရှိတာ စစ်ကြည့်ပြီး စတင်ပါ။" @@ -1141,8 +1155,7 @@ "အများသုံး Wi‑Fi ကွန်ရက်သို့ ချိတ်ဆက်ပါ" "ဝန်ဆောင်မှုပေးသူ Wi‑Fi ကွန်ရက်သို့ ချိတ်ဆက်ပါ" - - + "Wi‑Fi ကွန်ရက်သို့ ချိတ်ဆက်နေသည်" "Wi‑Fi ကွန်ရက်သို့ ချိတ်ဆက်ပြီးပါပြီ" "Wi‑Fi ကွန်ရက်သို့ ချိတ်ဆက်၍ မရပါ" "ကွန်ရက်အားလုံးကို ကြည့်ရန် တို့ပါ" @@ -1259,33 +1272,34 @@ "%s ကို အခြားအက်ပ်များပေါ်တွင် မြင်နေရပါသည်။" "%s ကို ဤဝန်ဆောင်မှုအား အသုံးမပြုစေလိုလျှင် ဆက်တင်ကို တို့၍ ဖွင့်ပြီး ၎င်းကို ပိတ်လိုက်ပါ။" "ပိတ်ရန်" - "%s ပြင်ဆင်နေသည်" - "အမှားအယွင်းများ စစ်ဆေးနေသည်" - "%s အသစ်တွေ့ရှိပါသည်" + "%s ကို စစ်နေသည်…" + "လက်ရှိ အကြောင်းအရာကို ပြန်လည်သုံးသပ်နေသည်" + "%s အသစ်" + "စနစ်ထည့်သွင်းရန် တို့ပါ" "ဓာတ်ပုံနှင့် မီဒီယာများ လွှဲပြောင်းရန်အတွက်" - "ပျက်စီးနေသော %s" - "%s ပျက်နေပါသည်။ ပြင်ရန် တို့ပါ။" + "%s တွင် ပြဿနာရှိနေသည်" + "ပြင်ဆင်ရန်အတွက် ထိလိုက်ပါ" "%s ပျက်နေပါသည်။ ပြင်ရန် ရွေးချယ်ပါ။" "ပံ့ပိုးထားခြင်း မရှိသော %s" "ဤစက်ပစ္စည်းတွင် %s ကိုအသုံးပြု၍မရပါ။ အသုံးပြု၍ရသော စနစ်ပုံစံသို့သတ်မှတ်ရန် တို့ပါ။" "ဤစက်ပစ္စည်းတွင် %s ကို ပံ့ပိုးမထားပါ။ ပံ့ပိုးသည့်ပုံစံတစ်ခုအဖြစ် စနစ်ထည့်သွင်းရန် ရွေးချယ်ပါ။" "%s မမျှော်လင့်ဘဲ ဖယ်ရှားခဲ့သည်" - "ဒေတာဆုံးရှုံးခြင်းမှ ကာကွယ်ရန် မဖယ်ရှားမှီ %s ကိုဖြုတ်ပါ။" - "%s ဖယ်ရှားလိုက်ပြီ" - "%s ဖယ်ရှားလိုက်ပါပြီ; အသစ်တစ်ခု ထည့်သွင်းပါ" - "%s ထုတ်နေဆဲ…" - "အဖယ်ရှားပါနှင့်" + "အကြောင်းအရာ မဆုံးရှုံးစေရန် မီဒီယာကို မဖယ်ရှားမီ ဦးစွာထုတ်လိုက်ပါ" + "%s ဖယ်ရှားလိုက်ပါပြီ" + "အချို့လုပ်ဆောင်ချက်များ ကောင်းစွာ အလုပ်မလုပ်နိုင်ပါ။ သိုလှောင်ခန်းအသစ် ထည့်သွင်းပါ။" + "%s ကို ထုတ်နေသည်" + "မဖယ်ရှားပါနှင့်" "စဖွင့်သတ်မှတ်" "ထုတ်မည်" "စူးစမ်းရန်" "%s ပျောက်နေသည်" - "ဤစက်ပစ္စည်းအား ပြန်ထည့်ရန်" + "စက်ပစ္စည်းကို ထပ်မံထည့်သွင်းပါ" "%s ရွှေ့နေစဉ်" "ဒေတာများ ရွှေ့နေစဉ်" - "ရွှေ့ပြီး၏" - "%s သို့ ဒေတာ ရွှေ့ခဲ့၏" - "ဒေတာမရွှေ့နိုင်ပါ" - "မူရင်းနေရာတွင် ဒေတာ ကျန်ခဲ့၏" + "အကြောင်းအရာ လွှဲပြောင်းပြီးပါပြီ" + "အကြောင်းအရာကို %s သို့ ရွှေ့ထားသည်" + "အကြောင်းအရာကို ရွှေ့၍မရပါ" + "အကြောင်းအရာကို ထပ်ဖယ်ကြည့်ပါ" "ဖယ်ရှာပြီး" "ဖယ်ထုတ်ပြီး၏" "စစ်ဆေးနေပါသည်…" @@ -1677,8 +1691,7 @@ "သင်၏ စီမံခန့်ခွဲသူက ထည့်သွင်းထားသည်" "သင်၏ စီမံခန့်ခွဲသူက အပ်ဒိတ်လုပ်ထားသည်" "သင်၏ စီမံခန့်ခွဲသူက ဖျက်လိုက်ပါပြီ" - - + "ဘက်ထရီသက်တမ်း တိုးရန် \'ဘက်ထရီအားထိန်း\' သည် သင့်စက်ပစ္စည်း၏ စွမ်းဆောင်ရည်ကို လျှော့ချပေးပြီး တုန်ခါမှု၊ တည်နေရာ ဝန်ဆောင်မှုများနှင့် နောက်ခံဒေတာများကို ကန့်သတ်ခြင်း သို့မဟုတ် ပိတ်ခြင်းများ ပြုလုပ်ပေးပါသည်။ စင့်ခ်လုပ်ခြင်းအပေါ် အားထားနေရသည့် အီးမေးလ်၊ မက်ဆေ့ဂျ်ပို့ခြင်းနှင့် အခြားအက်ပ်များကို သင်မဖွင့်လျှင် အပ်ဒိတ်ဖြစ်တော့မည် မဟုတ်ပါ။\n\nသင့်စက်ပစ္စည်းကို အားသွင်းနေသည့်အခါ \'ဘက်ထရီအားထိန်း\' ကို အလိုအလျောက် ပိတ်သွားပါမည်။" "ဒေတာအသုံးလျှော့ချနိုင်ရန် အက်ပ်များကို နောက်ခံတွင် ဒေတာပို့ခြင်းနှင့် လက်ခံခြင်းမရှိစေရန် ဒေတာချွေတာမှုစနစ်က တားဆီးထားပါသည်။ ယခုအက်ပ်ဖြင့် ဒေတာအသုံးပြုနိုင်သော်လည်း အကြိမ်လျှော့၍သုံးရပါမည်။ ဥပမာ၊ သင် မတို့မချင်း ပုံများပေါ်လာမည် မဟုတ်ပါ။" "ဒေတာအသုံးပြုမှု ချွေတာမှုစနစ်ကို ဖွင့်မလား။" "ဖွင့်ပါ" @@ -1729,22 +1742,14 @@ "%1$s အသံပိတ်သည်" "သင့်ကိရိယာအတွင်းပိုင်းတွင် ပြဿနာရှိနေပြီး၊ မူလစက်ရုံထုတ်အခြေအနေအဖြစ် ပြန်လည်ရယူနိုင်သည်အထိ အခြေအနေမတည်ငြိမ်နိုင်ပါ။" "သင့်ကိရိယာအတွင်းပိုင်းတွင် ပြဿနာရှိနေ၏။ အသေးစိတ်သိရန်အတွက် ပစ္စည်းထုတ်လုပ်သူအား ဆက်သွယ်ပါ။" - - - - - - - - - - - - - - - - + "USSD တောင်းဆိုမှုကို ပုံမှန်ခေါ်ဆိုမှုသို့ ပြောင်းထားသည်" + "USSD တောင်းဆိုမှုကို SS တောင်းဆိုမှုအဖြစ် ပြောင်းထားသည်" + "USSD တောင်းဆိုမှုအသစ်သို့ ပြောင်းထားသည်" + "USSD တောင်းဆိုမှုကို ဗီဒီယိုခေါ်ဆိုမှုသို့ ပြောင်းထားသည်" + "SS တောင်းဆိုမှုကို ပုံမှန်ခေါ်ဆိုမှုသို့ ပြောင်းထားသည်" + "SS တောင်းဆိုမှုကို ဗီဒီယိုခေါ်ဆိုမှုသို့ ပြောင်းထားသည်" + "SS တောင်းဆိုမှုကို USSD တောင်းဆိုမှုအဖြစ် ပြောင်းထားသည်" + "SS တောင်းဆိုမှုအသစ်သို့ ပြောင်းထားသည်" "အလုပ်ကိုယ်ရေးအချက်အလက်" "ချဲ့ရန်" "ခေါက်သိမ်းရန်" @@ -1842,6 +1847,10 @@ "စကားသံအတွက် ဆင်းမ်ကို ထောက်ပံ့မထားပါ" "စကားသံအတွက် ဆင်းမ်ကို ခွင့်မပြုပါ" "စကားသံအတွက် ဖုန်းကို ခွင့်မပြုပါ" + "ဆင်းမ် %d ကို ခွင့်မပြုပါ" + "ဆင်းမ် %d ကို ပေးမထားပါ" + "ဆင်းမ် %d ကို ခွင့်မပြုပါ" + "ဆင်းမ် %d ကို ခွင့်မပြုပါ" "ပေါ့ပ်အပ် ဝင်းဒိုး" "+ %1$d" "အက်ပ်ဗားရှင်းကို အဆင့်နှိမ့်ထားသည် သို့မဟုတ် ဤဖြတ်လမ်းလင့်ခ်နှင့် သဟဇာတမဖြစ်ပါ" diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 9e94f92f47e962859826da3a32ce7dcb3061bba9..d76cd8f34be1702a9c287b778656d97664a39990 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -82,6 +82,8 @@ "Ingen taletjeneste" "Ingen taletjeneste eller nødanrop" "Midlertidig deaktivert av operatøren din" + + "Får ikke kontakt med mobilnettverket" "Prøv å endre foretrukket nettverk. Trykk for å endre." "Nødanrop er utilgjengelig" @@ -120,12 +122,13 @@ "Roaming-banner på" "Roaming-banner av" "Leter etter tjeneste" - - + "Kunne ikke konfigurere Wi-Fi-anrop" "For å ringe og sende meldinger over Wi-Fi, må du først be operatøren om å konfigurere denne tjenesten. Deretter slår du på Wi-Fi-anrop igjen fra Innstillinger. (Feilkode: %1$s)" - + + "Problem med å registrere Wi-Fi-anrop med operatøren din: %1$s" + "%s" "%s Wi-Fi-anrop" @@ -159,10 +162,8 @@ "For mange forespørsler blir behandlet. Prøv igjen senere." "Påloggingsfeil for %1$s" "Synkronisering" - - - - + "Kan ikke synkronisere" + "Forsøkte å slette for mange %s." "Nettbrettlageret er fullt. Slett noen filer for å frigjøre lagringsplass." "Klokkens lagringsplass er full. Slett filer for å frigjøre plass." "TV-ens lagringsplass er full. Slett noen filer for å frigjøre mer plass." @@ -272,40 +273,31 @@ "Bytt til jobbprofil" "Kontakter" "se kontaktene dine" - - + "Vil du gi <b>%1$s</b> tilgang til kontaktene dine?" "Posisjon" "få tilgang til enhetens plassering" - - + "Vil du gi <b>%1$s</b> tilgang til denne enhetens posisjon?" "Kalender" "åpne kalenderen din" - - + "Vil du gi <b>%1$s</b> tilgang til kalenderen din?" "SMS" "sende og lese SMS-meldinger" - - + "Vil du la <b>%1$s</b> sende og se SMS-meldinger?" "Lagring" "åpne bilder, medieinnhold og filer på enheten din" - - + "Vil du gi <b>%1$s</b> tilgang til bilder, medier og filer på enheten din?" "Mikrofon" "ta opp lyd" - - + "Vil du la <b>%1$s</b> ta opp lyd?" "Kamera" "ta bilder og ta opp video" - - + "Vil du la <b>%1$s</b> ta bilder og spille inn video?" "Telefon" "ring og administrer anrop" - - + "Vil du la <b>%1$s</b> ringe og administrere telefonsamtaler?" "Kroppssensorer" "få tilgang til sensordata om de vitale tegnene dine" - - + "Vil du gi <b>%1$s</b> tilgang til sensordata om de vitale tegnene dine?" "hente innhold i vinduer" "Appen analyserer innholdet i vinduer du samhandler med." "slå på berøringsutforsking" @@ -492,6 +484,8 @@ "Lar appen kommunisere med etiketter, kort og lesere som benytter NFC-teknologi." "deaktivere skjermlåsen" "Lar appen deaktivere tastelåsen og eventuell tilknyttet passordsikkerhet. Et eksempel er at telefonen deaktiverer tastelåsen når du mottar et innkommende anrop, og deretter aktiverer tastelåsen igjen når samtalen er ferdig." + "bruke biometrisk maskinvare" + "Lar appen bruke biometrisk maskinvare til godkjenning" "administrere fingeravtrykkmaskinvare" "Lar appen fremkalle metoder for å legge til og slette fingeravtrykkmaler for bruk." "bruke fingeravtrykkmaskinvare" @@ -504,6 +498,8 @@ "Ikke gjenkjent" + + "Maskinvare for fingeravtrykk er ikke tilgjengelig." "Fingeravtrykket kan ikke lagres. Fjern et eksisterende fingeravtrykk." "Tidsavbrudd for fingeravtrykk er nådd. Prøv på nytt." @@ -1016,14 +1012,23 @@ "Inndatametode" "Teksthandlinger" "E-post" + "Send e-post til den valgte adressen" "Ring" + "Ring det valgte telefonnummeret" "Finn" + "Finn den valgte adressen" "Åpne" + "Åpne den valgte nettadressen" "Melding" + "Send melding til det valgte telefonnummeret" "Legg til" + "Legg til i kontakter" "Se" + "Se det valgte klokkeslettet i kalenderen" "Oversikt" + "Planlegg aktivitet for valgt klokkeslett" "Spor" + "Spor den valgte flyvningen" "Lite ledig lagringsplass" "Enkelte systemfunksjoner fungerer muligens ikke slik de skal" "Det er ikke nok lagringsplass for systemet. Kontrollér at du har 250 MB ledig plass, og start på nytt." @@ -1117,8 +1122,7 @@ "Åpne %1$s" "%1$s lukkes uten å lagre" "%1$s er over minnegrensen" - - + "Minnedumpen er samlet inn. Trykk for å dele." "Vil du dele minnedumpen («heap dump»)?" "%1$s-prosessen er %2$s over grensen for prosessminne. En minnedump («heap dump») er tilgjengelig for deling med utvikleren. Vær forsiktig – denne minnedumpen kan inneholde noen av de personlige opplysningene dine som appen har tilgang til." "Velg handling for tekst" @@ -1153,8 +1157,7 @@ "Koble til et åpent Wi‑Fi-nettverk" "Koble til operatørens Wi-Fi-nettverk" - - + "Kobler til Wi-Fi-nettverket" "Koblet til Wi-Fi-nettverk" "Kunne ikke koble til Wi-Fi-nettverket" "Trykk for å se alle nettverkene" @@ -1270,33 +1273,49 @@ "%s vises over andre apper" "Hvis du ikke vil at %s skal bruke denne funksjonen, kan du trykke for å åpne innstillingene og slå den av." "Slå av" - "Forbereder %s" - "Sjekker for feil" - "%s ble oppdaget" + + + + + + + + "For overføring av bilder og medier" - "Skadet %s" - "%s er skadet. Trykk for å løse problemet." - "%s er skadet. Velg for å fikse." + + + + "%s som ikke støttes" "Denne enheten støtter ikke %s. Trykk for å konfigurere i et støttet format." "Denne enheten støtter ikke dette %s. Velg for å konfigurere i et støttet format." "%s ble uventet fjernet" - "Løs ut %s før du fjerner den for å unngå tap av data" - "%s ble fjernet." - "%s ble fjernet – sett inn et nytt et" - "Løser ut %s fremdeles …" - "Ikke fjern" + + + + + + + + + + "Konfigurer" "Løs ut" "Utforsk" "%s mangler" - "Sett inn enheten på nytt" + + "Flytter %s" "Flytter dataene" - "Flyttingen er fullført" - "Dataene er flyttet til %s" - "Kunne ikke flytte dataene" - "Dataene er fremdeles på det opprinnelige stedet" + + + + + + + + "Fjernet" "Løst ut" "Kontrollerer …" @@ -1355,17 +1374,14 @@ "Alltid-på VPN kobler til ..." "Alltid-på VPN er tilkoblet" "Koble fra alltid på-VPN" - - + "Kunne ikke koble til alltid på-VPN" "Endre nettverks- eller VPN-innstillingene" "Velg fil" "Ingen fil er valgt" "Tilbakestill" "Send inn" - - - - + "Kjøreappen kjører" + "Trykk for å lukke kjøreappen." "Internettdeling eller trådløs sone er aktiv" "Trykk for å konfigurere." "Internettdeling er slått av" @@ -1691,8 +1707,7 @@ "Installert av administratoren din" "Oppdatert av administratoren din" "Slettet av administratoren din" - - + "Med Batterisparing reduseres enhetens ytelse, og vibrering, posisjonstjenester og bakgrunnsdata begrenses eller slås av. Apper for e-post, meldinger og andre funksjoner som er avhengige av synkronisering, oppdateres kanskje ikke med mindre du åpner dem.\n\nBatterisparing slås av automatisk når enheten lades." "Datasparing hindrer at apper kan sende og motta data i bakgrunnen. Apper du bruker i øyeblikket, bruker ikke data i like stor grad – for eksempel vises ikke bilder før du trykker på dem." "Vil du slå på Datasparing?" "Slå på" @@ -1743,22 +1758,14 @@ "%1$s har kuttet lyden" "Det har oppstått et internt problem på enheten din, og den kan være ustabil til du tilbakestiller den til fabrikkdata." "Det har oppstått et internt problem på enheten din. Ta kontakt med produsenten for mer informasjon." - - - - - - - - - - - - - - - - + "USSD-forespørsel endret til vanlig anrop" + "USSD-forespørsel endret til SS-forespørsel" + "Endret til ny USSD-forespørsel" + "USSD-forespørsel endret til videoanrop" + "SS-forespørsel endret til vanlig anrop" + "SS-forespørsel endret til videoanrop" + "SS-forespørsel endret til USSD-forespørsel" + "Endret til ny SS-forespørsel" "Arbeidsprofil" "Vis" "Skjul" @@ -1856,6 +1863,14 @@ "SIM-kortet er ikke klargjort for tale" "SIM-kortet har ikke tillatelse til tale" "Telefonen har ikke tillatelse til tale" + + + + + + + + "Forgrunnsvindu" "+ %1$d" "Appversjonen er nedgradert eller ikke kompatibel med denne snarveien" @@ -1876,8 +1891,6 @@ "Dette er ny atferd. Trykk for å endre." "Ikke forstyrr er endret" "Trykk for å sjekke hva som er blokkert." - - - - + "System" + "Innstillinger" diff --git a/core/res/res/values-ne/strings.xml b/core/res/res/values-ne/strings.xml index 976d49376f3d443b669e8fe3fee7865dccceb572..1ab74ef1e0fe2305b6581f0b584a1f527d12378e 100644 --- a/core/res/res/values-ne/strings.xml +++ b/core/res/res/values-ne/strings.xml @@ -82,6 +82,7 @@ "कुनै पनि भ्वाइस सेवा उपलब्ध छैन" "कुनै पनि भ्वाइस वा आपातकालीन कल सेवा उपलब्ध छैन" "तपाईंको सेवा प्रदायकले अस्थायी रूपमा निष्क्रिय पार्नुभएको" + "SIM %d का लागि तपाईंको सेवा प्रदायकले अस्थायी रूपमा निष्क्रिय पार्नुभएको" "मोबाइल नेटवर्कमाथि पहुँच राख्न सकिएन" "रुचाइएको नेटवर्क परिवर्तन गरी हेर्नुहोस्‌। परिवर्तन गर्न ट्याप गर्नुहोस्‌।" "आपतकालीन कल सेवा अनुपलब्ध छ" @@ -120,12 +121,13 @@ "रोमिङ ध्वजा चालु छ" "रोमिङ ब्यानर बन्द छ" "सेवाको खोजी गर्दै…" - - + "Wi-Fi कलिङ सेटअप गर्न सकिएन" "Wi-Fi मार्फत कलहरू गर्न र सन्देशहरू पठाउन सबभन्दा पहिला आफ्नो सेवा प्रदायकलाई यो सेवा सेट गर्न भन्नुहोस्। त्यसपछि सेटिङहरूबाट Wi-Fi कलिङलाई सक्रिय पार्नुहोस्। (त्रुटिसम्बन्धी कोड: %1$s)" - + + "तपाईंको सेवा प्रदायकमार्फत Wi-Fi कलिङ सुविधा दर्ता गर्ने क्रममा देखिएको समस्या: %1$s" + "%s" "%s Wi-Fi कलिङ" @@ -159,10 +161,8 @@ "धेरै नै अनुरोधहरू प्रक्रियामा छन्। पछि फेरि प्रयास गर्नुहोस्।" "%1$sको लागि साइन इन त्रुटि" "सिङक गर्नुहोस्" - - - - + "सिंक गर्न सकिँदैन" + "अति धेरै %s मेटाउने प्रयास गरियो।" "ट्याब्लेट भण्डारण खाली छैन! ठाउँ खाली गर्नको लागि केही फाइलहरू मेटाउनुहोस्।" "भण्डारण भरिएको छ हेर्नुहोस्। ठाउँ खाली गर्न केही फाइलहरू मेटाउनुहोस्।" "TV भण्डारण पूर्ण छ। ठाउँ खाली गर्नको लागि केही फाइलहरू मेट्नुहोस्।" @@ -272,40 +272,31 @@ "कार्य प्रोफाइलमा बदल्नुहोस्" "सम्पर्कहरू" "तपाईँको सम्पर्कमाथि पहुँच गर्नुहोस्" - - + "<b>%1$s</b> लाई तपाईंका सम्पर्क ठेगानाहरूमाथि पहुँच राख्न दिने हो?" "स्थान" "यस यन्त्रको स्थानमाथि पहुँच" - - + "<b>%1$s</b> लाई यो यन्त्रको स्थानमाथि पहुँच राख्न दिने हो?" "पात्रो" "तपाईंको पात्रोमाथि पहुँच गर्नुहोस्" - - + "<b>%1$s</b> लाई आफ्नो पात्रोमाथि पहुँच राख्न दिने हो?" "SMS" "SMS सन्देशहरू पठाउनुहोस् र हेर्नुहोस्" - - + "<b>%1$s</b> SMS सन्देशहरू पठाउन र हेर्न दिने हो?" "भण्डारण" "तपाईंको यन्त्रमा तस्बिर, मिडिया, र फाइलहरूमाथि पहुँच गर्नुहोस्" - - + "<b>%1$s</b> लाई आफ्नो यन्त्रमा रहेका तस्बिर, मिडिया र फाइलहरूमाथि पहुँच राख्न दिने हो?" "माइक्रोफोन" "अडियो रेकर्ड गर्नुहोस्" - - + "<b>%1$s</b> लाई अडियो रेकर्ड गर्न दिने हो?" "क्यामेरा" "तस्बिर खिच्नुका साथै भिडियो रेकर्ड गर्नुहोस्" - - + "<b>%1$s</b> लाई तस्बिरहरू खिच्न र भिडियो रेकर्ड गर्न दिने हो?" "फोन" "फोन कलहरू गर्नुहोस् र व्यवस्थापन गर्नुहोस्" - - + "<b>%1$s</b> लाई फोन कलहरू गर्न र तिनीहरूको व्यवस्थापन गर्न दिने हो?" "शारीरिक सेन्सर" "तपाईंको महत्त्वपूर्ण संकेत बारे सेन्सर डेटा पहुँच गर्नुहोस्" - - + "<b>%1$s</b> लाई आफ्ना महत्त्वपूर्ण लक्षणहरूसम्बन्धी सेन्सर डेटामाथि पहुँच राख्न दिने हो?" "विन्डो सामग्रीको पुनःबहाली गर्नुहोस्।" "तपाईँको अन्तरक्रिया भइरहेको विन्डोको सामग्रीको निरीक्षण गर्नुहोस्।" "छोएर गरिने खोजलाई सुचारु गर्नुहोस्" @@ -492,6 +483,10 @@ "अनुप्रयोगलाई नयाँ क्षेत्र संचार (NFC) ट्यागहरू, कार्डहरू र पाठकहरूसँग अन्तर्क्रिया गर्न अनुमति दिन्छ।" "स्क्रिन लक असक्षम पार्नुहोस्" "कुनै सम्बन्धित पासवर्ड सुरक्षा र किलकलाई असक्षम पार्न अनुप्रयोगलाई अनुमति दिन्छ। उदाहरणको लागि, अन्तर्गमन फोन कल प्राप्त गर्दा फोनले किलकलाई असक्षम पार्छ, त्यसपछि कल सकिएको बेला किलक पुनःसक्षम पार्छ।" + + + + "औठाछाप हार्डवेयर व्यवस्थापन गर्नुहोस्" "अनुप्रयोगलाई प्रयोगको लागि औठाछाप टेम्प्लेट थप्न र मेटाउने तरिका आह्वान गर्न अनुमति दिन्छ।" "औठाछाप हार्डवेयर प्रयोग गर्नुहोस्" @@ -504,6 +499,7 @@ "चिनिएको छैन" + "फिंगरप्रिन्ट प्रमाणीकरण गरियो" "औँठाछाप हार्डवेयर उपलब्ध छैन।" "औँठाछाप भण्डारण गर्न सकिँदैन। कृपया अवस्थित औठाछाप हटाउनुहोस्।" "औँठाछापको समय सकिएको छ। फेरि प्रयास गर्नुहोस्।" @@ -1016,14 +1012,32 @@ "निवेश विधि" "पाठ कार्यहरू" "इमेल" + + "कल" + + "पत्ता लगाउनुहोस्" + + "खोल्नुहोस्" + + "सन्देश" + + "थप्नुहोस्" + + "हेर्नुहोस्" + + "समयतालिका" + + "ट्र्याक गर्नुहोस्" + + "भण्डारण ठाउँ सकिँदै छ" "सायद केही प्रणाली कार्यक्रमहरूले काम गर्दैनन्" "प्रणालीको लागि पर्याप्त भण्डारण छैन। तपाईँसँग २५० मेगा बाइट ठाउँ खाली भएको निश्चित गर्नुहोस् र फेरि सुरु गर्नुहोस्।" @@ -1123,8 +1137,7 @@ "%1$s खोल्नुहोस्" "%1$s सुरक्षित नगरिकनै बन्द हुने छ" "%1$s ले मेमोरी सीमा नाघ्यो" - - + "हिप डम्प सङ्‍कलन गरियो, ट्याप गरेर आदान प्रदान गर्नुहोस्।" "हिप डम्प साझेदारी गर्नुहुन्छ?" "प्रक्रिया %1$sले यसको प्रक्रिया मेमोरी सीमा %2$s नाघेको छ। तपाईँको लागि विकासकर्तासँग साझेदारी गर्न एउटा हिप डम्प उपलब्ध छ। होसियार हुनुहोस्: यो हिप डम्पमा अनुप्रयोगको पहुँच भएको तपाईँको कुनै पनि व्यक्तिगत जानकारी हुन सक्छ।" "पाठको लागि एउटा प्रकार्य छान्नुहोस्" @@ -1159,8 +1172,7 @@ "खुला Wi‑Fi नेटवर्कमा जडान गर्नुहोस्" "सेवा प्रदायकको Wi‑Fi नेटवर्कमा जडान गर्नुहोस्" - - + "Wi‑Fi नेटवर्कमा जडान गर्दै" "Wi‑Fi नेटवर्कमा जडान गरियो" "Wi‑Fi नेटवर्कमा जडान गर्न सकिएन" "सबै नेटवर्कहरू हेर्न ट्याप गर्नुहोस्" @@ -1276,33 +1288,34 @@ "%s अन्य अनुप्रयोगहरूमा देखिँदैछ" "तपाईं %s ले यो विशेषता प्रयोग नगरेको चाहनुहुन्न भने सेटिङहरू खोली यसलाई निष्क्रिय पार्न ट्याप गर्नुहोस्।" "निष्क्रिय पार्नुहोस्" - "तयारी गर्दै %s" - "त्रुटिहरूको लागि जाँच गर्दै" - "नयाँ %s भेटियो" + "जाँच गर्दै %s…" + "हालको सामग्री समीक्षा गर्दै" + "नयाँ %s पत्ता लाग्यो" + "सेटअप गर्न ट्याप गर्नुहोस्" "तस्बिरहरू र मिडिया स्थानान्तरणका लागि" - "बिग्रेको %s" - "%s त्रुटिपूर्ण छ। समाधान गर्न ट्याप गर्नुहोस्।" + "%s मा समस्या देखियो" + "समस्या समाधान गर्न ट्याप गर्नुहोस्" "%s बिग्रेको छ। समाधान गर्न चयन गर्नुहोस्।" "असमर्थित %s" "यस यन्त्रले यस %s लाई समर्थन गर्दैन। एक समर्थित ढाँचामा सेटअप गर्न ट्याप गर्नुहोस्।" "यो यन्त्रले यस %s लाई समर्थन गर्दैन। एक समर्थित ढाँचामा सेटअप गर्न चयन गर्नुहोस्।" "%s अप्रत्याशित रूपमा निकालियो" - "डेटा हराउनबाट जोगाउन निकाल्नु अघि %s अनमाउन्ट गर्नुहोस्" - "निकालियो %s" - "%s निकालियो; नयाँ हाल्नुहोस्" - "अझै निकाल्दै %s..." - "नहटाउनुहोस्" + "सामग्री गुम्न नदिनका लागि मिडिया हटाउनुअघि त्यसलाई इजेक्ट गर्नुहोस्" + "%s हटाइयो" + "केही कार्यहरूले राम्ररी काम नगर्न सक्छन्। नयाँ भण्डारण यन्त्र घुसाउनुहोस्।" + "%s इजेक्ट गर्दै" + "नहटाउनुहोस्" "सेटअप गर्नुहोस्" "निकाल्नुहोस्" "अन्वेषण गर्नुहोस्" "%s हराइरहेको" - "यो यन्त्र पुनःसम्मिलित गर्नुहोस्" + "यन्त्र फेरि घुसाउनुहोस्" "%s सार्दै" "डेटा सार्दै..." - "सार्ने कार्य सकियो" - "डेटा %s मा सारियो" - "डेटा सार्न सकिएन" - "डेटा मूल स्थानबाट छाडियो" + "सामग्री स्थानान्तरण गरियो" + "सामग्री %s मा सारियो" + "सामग्री सार्न सकिएन" + "सामग्री फेरि सारेर हेर्नुहोस्" "हटाइयो" "निकालिएको" "जाँच गर्दै..." @@ -1361,17 +1374,14 @@ "VPN जडान सधै जोड्दै…" "सधैँ खुल्ला हुने VPN जोडिएको" "सधैँ-सक्रिय रहने VPN सेवाबाट विच्छेद गरियो" - - + "सधैँ सक्रिय रहने VPN सेवामा जडान गर्न सकिएन" "नेटवर्क वा VPN सम्बन्धी सेटिङहरू परिवर्तन गर्नुहोस्" "फाइल छान्नुहोस्" "कुनै फाइल छानिएको छैन" "रिसेट गर्नुहोस्" "पेस गर्नुहोस्" - - - - + "ड्राइभिङ अनुप्रयोग चलिरहेको छ" + "ड्राइभिङ अनुप्रयोगबाट बाहिर निस्कन ट्याप गर्नुहोस्।" "टेथर गर्ने वा हटस्पट सक्रिय" "सेटअप गर्न ट्याप गर्नुहोस्।" "टेदरिङलाई असक्षम पारिएको छ" @@ -1697,8 +1707,7 @@ "तपाईंका प्रशासकले स्थापना गर्नुभएको" "तपाईंका प्रशासकले अद्यावधिक गर्नुभएको" "तपाईंका प्रशासकले मेट्नुभएको" - - + "ब्याट्री सेभरले ब्याट्रीको आयु लम्ब्याउनका लागि तपाईंको यन्त्रको कार्यसम्पादन घटाउनुका साथै कम्पन, स्थानसम्बन्धी सेवा र पृष्ठभूमिको डेटालाई सीमित वा निष्क्रिय पार्छ। इमेल, सन्देश प्रवाह तथा सिंक प्रक्रियामा निर्भर अन्य अनुप्रयोगहरू तपाईंले खोल्नुभएको अवस्थामाबाहेक स्वतः अद्यावधिक नहुन सक्छन्।\n\nतपाईंको यन्त्र चार्ज हुन थालेपछि ब्याट्री सेभर स्वतः निष्क्रिय हुन्छ।" "डेटाको प्रयोगलाई कम गर्नमा मद्दतका लागि डेटा सर्भरले केही अनुप्रयोगहरूलाई पृष्ठभूमिमा डेटा पठाउन वा प्राप्त गर्नबाट रोक्दछ। तपाईँले हाल प्रयोग गरिरहनुभएको अनु्प्रयोगले डेटामाथि पहुँच राख्न सक्छ, तर त्यसले यो काम थोरै पटक गर्न सक्छ। उदाहरणका लागि यसको मतलब यो हुन सक्छ: तपाईँले छविहरूलाई ट्याप नगरेसम्म ती प्रदर्शन हुँदैनन्।" "डेटा सेभरलाई सक्रिय गर्ने हो?" "सक्रिय गर्नुहोस्" @@ -1749,22 +1758,14 @@ "%1$s द्वारा मौन गरिएको" "तपाईंको यन्त्रसँग आन्तरिक समस्या छ, र तपाईंले फ्याक्ट्री डाटा रिसेट नगर्दासम्म यो अस्थिर रहन्छ।" "तपाईंको यन्त्रसँग आन्तरिक समस्या छ। विवरणहरूको लागि आफ्नो निर्मातासँग सम्पर्क गर्नुहोस्।" - - - - - - - - - - - - - - - - + "USSD अनुरोधलाई नियमित कलमा परिवर्तन गरियो" + "USSD अनुरोधलाई SS अनुरोधमा परिवर्तन गरियो" + "नयाँ USSD अनुरोधमा परिवर्तन गरियो" + "USSD अनुरोधलाई भिडियो कलमा परिवर्तन गरियो" + "SS अनुरोधलाई नियमित कलमा परिवर्तन गरियो" + "SS अनुरोधलाई भिडियो कलमा परिवर्तन गरियो" + "SS अनुरोधलाई USSD अनुरोधमा परिवर्तन गरियो" + "नयाँ SS अनुरोधमा परिवर्तन गरियो" "कार्य प्रोफाइल" "विस्तृत गर्नुहोस्" "संक्षिप्त गर्नुहोस्" @@ -1862,6 +1863,10 @@ "SIM मार्फत भ्वाइस कल गर्ने प्रावधान छैन" "SIM मार्फत भ्वाइस कल गर्न मिल्दैन" "फोनमार्फत भ्वाइस कल गर्न मिल्दैन" + "SIM %d लाई अनुमति छैन" + "SIM %d को पूर्वप्रबन्ध गरिएको छैन" + "SIM %d लाई अनुमति छैन" + "SIM %d लाई अनुमति छैन" "पपअप विन्डो" "+ %1$d" "या त अनुप्रयोगको संस्करण स्तरह्रास गरियो वा यो यस सर्टकटसँग मिल्दो छैन" @@ -1882,8 +1887,6 @@ "यो नयाँ व्यवहार हो। परिवर्तन गर्न ट्याप गर्नुहोस्।" "बाधा नपुर्‍याउनुहोस् मोड परिवर्तन भएको छ" "रोक लगाइएका कुराहरू जाँच गर्न ट्याप गर्नुहोस्‌।" - - - - + "प्रणाली" + "सेटिङहरू" diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index 11d0ee9d7872a19f18a570e2a2bea48950890440..1c4f243061ff1fca0a2deee6bb711e95880e1d42 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -82,6 +82,8 @@ "Geen service voor spraakoproepen" "Geen spraakservice of noodoproepen" "Tijdelijk uitgeschakeld door je provider" + + "Kan mobiel netwerk niet bereiken" "Probeer een ander voorkeursnetwerk. Tik om te wijzigen." "Noodoproepen niet beschikbaar" @@ -120,12 +122,13 @@ "Roamingbanner aan" "Roamingbanner uit" "Service zoeken" - - + "Bellen via wifi kan niet worden ingesteld" "Als je wilt bellen en berichten wilt verzenden via wifi, moet je eerst je provider vragen deze service in te stellen. Schakel bellen via wifi vervolgens opnieuw in via Instellingen. (Foutcode: %1$s)" - + + "Probleem bij registratie van Bellen via wifi bij je provider: %1$s" + "%s" "Bellen via wifi van %s" @@ -159,10 +162,8 @@ "Er worden te veel aanvragen verwerkt. Probeer het later opnieuw." "Fout bij aanmelding voor \'%1$s\'" "Synchroniseren" - - - - + "Kan niet synchroniseren" + "Geprobeerd om te veel instanties van %s te verwijderen." "Tabletgeheugen is vol. Verwijder enkele bestanden om ruimte vrij te maken." "Horlogegeheugen is vol. Verwijder enkele bestanden om ruimte vrij te maken." "Tv-opslag is vol. Verwijder een aantal bestanden om ruimte vrij te maken." @@ -272,40 +273,31 @@ "Schakelen naar werkprofiel" "Contacten" "toegang krijgen tot je contacten" - - + "<b>%1$s</b> toegang geven tot je contacten?" "Locatie" "de locatie van dit apparaat openen" - - + "<b>%1$s</b> toegang geven tot de locatie van dit apparaat?" "Agenda" "toegang krijgen tot je agenda" - - + "<b>%1$s</b> toegang geven tot je agenda?" "Sms" "sms\'jes verzenden en bekijken" - - + "<b>%1$s</b> toestaan om sms\'jes te verzenden en te bekijken?" "Opslagruimte" "toegang krijgen tot foto\'s, media en bestanden op je apparaat" - - + "<b>%1$s</b> toegang geven tot foto\'s, media en bestanden op je apparaat?" "Microfoon" "audio opnemen" - - + "<b>%1$s</b> toestaan om audio op te nemen?" "Camera" "foto\'s maken en video opnemen" - - + "<b>%1$s</b> toestaan om foto\'s te maken en video op te nemen?" "Telefoon" "telefoneren en oproepen beheren" - - + "<b>%1$s</b> toestaan om telefoongesprekken te starten en te beheren?" "Lichaamssensoren" "toegang krijgen tot sensorgegevens over je vitale functies" - - + "<b>%1$s</b> toegang geven tot sensorgegevens over je vitale functies?" "Content van vensters ophalen" "De content inspecteren van een venster waarmee je interactie hebt." "\'Verkennen via aanraking\' inschakelen" @@ -492,6 +484,8 @@ "Hiermee kan de app communiceren met NFC-tags (Near Field Communication), kaarten en lezers." "je schermvergrendeling uitschakelen" "Hiermee kan de app de toetsenblokkering en bijbehorende wachtwoordbeveiliging uitschakelen. Zo kan de telefoon de toetsenblokkering uitschakelen wanneer er een oproep binnenkomt en de toetsenblokkering weer inschakelen als de oproep is beëindigd." + "biometrische hardware gebruiken" + "Hiermee kan de app biometrische hardware gebruiken voor verificatie" "Vingerafdrukhardware beheren" "Hiermee kan de app methoden aanroepen om vingerafdruksjablonen toe te voegen en te verwijderen voor gebruik." "Vingerafdrukhardware gebruiken" @@ -504,6 +498,8 @@ "Niet herkend" + + "Hardware voor vingerafdruk niet beschikbaar." "Vingerafdruk kan niet worden opgeslagen. Verwijder een bestaande vingerafdruk." "Time-out bereikt voor vingerafdruk. Probeer het opnieuw." @@ -1016,14 +1012,23 @@ "Invoermethode" "Tekstacties" "E-mail" + "E-mail sturen aan geselecteerd e-mailadres" "Bellen" + "Geselecteerd telefoonnummer bellen" "Zoeken" + "Geselecteerd adres tonen op kaart" "Openen" + "Geselecteerde URL openen" "Bericht" + "Sms sturen aan geselecteerd telefoonnummer" "Toevoegen" + "Toevoegen aan contacten" "Weergeven" + "Geselecteerde tijd weergeven op de kalender" "Plannen" + "Evenement plannen voor geselecteerde tijd" "Volgen" + "Geselecteerde vlucht tonen" "Opslagruimte is bijna vol" "Bepaalde systeemfuncties werken mogelijk niet" "Onvoldoende opslagruimte voor het systeem. Zorg ervoor dat je 250 MB vrije ruimte hebt en start opnieuw." @@ -1117,8 +1122,7 @@ "%1$s openen" "%1$s wordt gesloten zonder op te slaan" "%1$s heeft geheugenlimiet overschreden" - - + "Heap dump verzameld. Tik om te delen." "Heap dump delen?" "Het proces %1$s heeft de procesgeheugenlimiet overschreden met %2$s. Een heap dump is voor u beschikbaar om te delen met de betreffende ontwikkelaar. Let op: Deze heap dump kan persoonlijke gegevens bevatten waartoe de app toegang heeft." "Een actie voor tekst selecteren" @@ -1153,8 +1157,7 @@ "Verbinding maken met een open wifi-netwerk" "Verbinden met wifi-netwerk van provider" - - + "Verbinden met wifi-netwerk" "Verbonden met een wifi-netwerk" "Kan geen verbinding maken met het wifi-netwerk" "Tik om alle netwerken te bekijken" @@ -1270,33 +1273,49 @@ "%s wordt weergegeven over apps" "Als je niet wilt dat %s deze functie gebruikt, tik je om de instellingen te openen en schakel je de functie uit." "Uitschakelen" - "%s voorbereiden" - "Controleren op fouten" - "Nieuwe %s gedetecteerd" + + + + + + + + "Voor overzetten van foto\'s en media" - "%s beschadigd" - "%s is beschadigd. Tik om te verhelpen." - "%s is beschadigd. Selecteer om te herstellen." + + + + "%s niet ondersteund" "Dit apparaat biedt geen ondersteuning voor deze %s. Tik om te configureren in een ondersteunde indeling." "Dit apparaat biedt geen ondersteuning voor deze %s. Selecteer om in te stellen in een ondersteunde indeling." "%s is onverwacht verwijderd" - "Ontkoppel %s voordat u deze verwijdert om gegevensverlies te voorkomen" - "%s verwijderd" - "%s verwijderd. Plaats een nieuwe." - "Bezig met uitwerpen van %s…" - "Niet verwijderen" + + + + + + + + + + "Configureren" "Uitwerpen" "Verkennen" "%s ontbreekt" - "Plaats dit apparaat opnieuw" + + "%s verplaatsen" "Gegevens verplaatsen" - "Verplaatsen voltooid" - "Gegevens verplaatst naar %s" - "Kan gegevens niet verplaatsen" - "Gegevens staan nog op originele locatie" + + + + + + + + "Verwijderd" "Uitgeworpen" "Controleren…" @@ -1355,17 +1374,14 @@ "Always-on VPN-verbinding maken…" "Always-on VPN-verbinding" "Verbinding met Always-on VPN verbroken" - - + "Kan geen verbinding maken met Always-on VPN" "Netwerk- of VPN-instellingen wijzigen" "Bestand kiezen" "Geen bestand geselecteerd" "Resetten" "Verzenden" - - - - + "Auto-app wordt uitgevoerd" + "Tik om de auto-app te sluiten." "Tethering of hotspot actief" "Tik om in te stellen." "Tethering is uitgeschakeld" @@ -1691,8 +1707,7 @@ "Geïnstalleerd door je beheerder" "Geüpdatet door je beheerder" "Verwijderd door je beheerder" - - + "Batterijbesparing verlengt de batterijduur door de prestaties van je apparaat te verlagen en de trilfunctie, locatieservices en achtergrondgegevens te beperken of uit te schakelen. E-mail, berichten en andere apps die afhankelijk zijn van synchronisatie, worden niet geüpdatet (tenzij je ze opent).\n\nBatterijbesparing wordt automatisch uitgeschakeld wanneer je apparaat wordt opgeladen." "Databesparing beperkt het datagebruik door te voorkomen dat sommige apps gegevens verzenden of ontvangen op de achtergrond. De apps die je open hebt, kunnen nog steeds data verbruiken, maar doen dit minder vaak. Afbeeldingen worden dan bijvoorbeeld niet weergegeven totdat je erop tikt." "Databesparing inschakelen?" "Inschakelen" @@ -1743,22 +1758,14 @@ "Gedempt door %1$s" "Er is een intern probleem met je apparaat. Het apparaat kan instabiel zijn totdat u het apparaat terugzet naar de fabrieksinstellingen." "Er is een intern probleem met je apparaat. Neem contact op met de fabrikant voor meer informatie." - - - - - - - - - - - - - - - - + "USSD-verzoek gewijzigd in normale oproep" + "USSD-verzoek gewijzigd in SS-verzoek" + "Gewijzigd in nieuw USSD-verzoek" + "USSD-verzoek gewijzigd in videogesprek" + "SS-verzoek gewijzigd in normale oproep" + "SS-verzoek gewijzigd in videogesprek" + "SS-verzoek gewijzigd in USSD-verzoek" + "Gewijzigd in nieuw SS-verzoek" "Werkprofiel" "Uitvouwen" "Samenvouwen" @@ -1856,6 +1863,14 @@ "Sim niet geregistreerd voor spraak" "Simkaart niet toegestaan voor spraak" "Telefoon niet toegestaan voor spraak" + + + + + + + + "Pop-upvenster" "+ %1$d" "App-versie gedowngraded of niet geschikt voor deze snelkoppeling" @@ -1876,8 +1891,6 @@ "Dit is nieuw gedrag. Tik om te wijzigen." "\'Niet storen\' is gewijzigd" "Tik om te controleren wat er is geblokkeerd." - - - - + "Systeem" + "Instellingen" diff --git a/core/res/res/values-or/strings.xml b/core/res/res/values-or/strings.xml index ccfc523471b03b90edeea080915e7916b2ca4844..3460628567ce25704d14455c5916f876022b73d9 100644 --- a/core/res/res/values-or/strings.xml +++ b/core/res/res/values-or/strings.xml @@ -77,39 +77,25 @@ "କଲର୍ ଆଇଡି ଡିଫଲ୍ଟ ଭାବରେ ପ୍ରତିବନ୍ଧିତ ନୁହେଁ। ପରବର୍ତ୍ତୀ କଲ୍: ପ୍ରତିବନ୍ଧିତ ନୁହେଁ" "ସେବାର ସୁବିଧା ନାହିଁ।" "ଆପଣ କଲର୍‍ ID ସେଟିଙ୍ଗ ବଦଳାଇପାରିବେ ନାହିଁ।" - - - - - - - - - - - "ନେଟ୍‌ୱର୍କ ପର୍ଯ୍ୟନ୍ତ ପହଞ୍ଚିପାରୁ ନାହିଁ" - - - - - - - - - - - - - - - - - - - - - - + "କୌଣସି ମୋବାଇଲ୍ ଡାଟା ସେବା ନାହିଁ" + "ଜରୁରୀକାଳୀନ କଲ୍ ଉପଲବ୍ଧ ନାହିଁ" + "କୌଣସି ଭଏସ୍‍ ସେବା ନାହିଁ" + "କୌଣସି ଭଏସ୍ ସେବା କିମ୍ବା ଜରୁରୀକାଳୀନ କଲିଙ୍ଗ ନାହିଁ" + "ଆପଣଙ୍କ କେରିଅର୍‌ଙ୍କ ଦ୍ୱାରା ଅସ୍ଥାୟୀ ରୂପେ ବନ୍ଦ କରାଯାଇଛି" + + + "ମୋବାଇଲ୍‌ ନେଟ୍‌ୱର୍କ ମିଳୁନାହିଁ" + "ନିଜ ପସନ୍ଦର ନେଟ୍‌ୱର୍କକୁ ଯିବାପାଇଁ ଚେଷ୍ଟା କରନ୍ତୁ। ବଦଳାଇବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ।" + "ଜରୁରୀକାଳୀନ କଲ୍ ଉପଲବ୍ଧ ନାହିଁ" + "ୱାଇ-ଫାଇ ସାହାଯ୍ୟରେ ଜରୁରୀକାଳୀନ କଲ୍ କରାଯାଇପାରିବ ନାହିଁ" + "ଅଲର୍ଟ" + "କଲ୍‌ ଫରୱାର୍ଡିଙ୍ଗ" + "ଜରୁରୀକାଳୀନ କଲବ୍ୟାକ୍‍ ମୋଡ୍‍" + "ମୋବାଇଲ୍‍ ଡାଟା ଷ୍ଟାଟସ୍‌" + "SMS ମେସେଜ୍‌" + "ଭଏସମେଲ୍‍ ମେସେଜ୍‍" + "ୱାଇ-ଫାଇ କଲିଙ୍ଗ" + "ସିମ୍‌ ଷ୍ଟାଟସ୍" "ପୀଆର୍‌ ଅନୁରୋଧ କରିଥିବା TTY ମୋଡ୍‍ FULL ଅଟେ" "ପୀଅର୍‌ ଅନୁରୋଧ କରିଥିବା TTY ମୋଡ୍‍ HCO ଅଟେ" "ପୀଅର୍‌ ଅନୁରୋଧ କରିଥିବା TTY ମୋଡ୍‍ VCO ଅଟେ" @@ -136,15 +122,20 @@ "ରୋମିଙ୍ଗ ବ୍ୟାନର୍ ଅନ୍ ଅଛି" "ରୋମିଙ୍ଗ ବ୍ୟାନର୍ ଅଫ୍ ଅଛି" "ସେବା ଖୋଜାଯାଉଛି" - "ୱାଇ-ଫାଇ କଲିଙ୍ଗ" - - - - + "ୱାଇ-ଫାଇ କଲିଙ୍ଗ ସେଟ୍ ଅପ୍ ହେବନାହିଁ" + + "ୱାଇ-ଫାଇରେ କଲ୍‍ କରିବାକୁ ଏବଂ ମେସେଜ୍‍ ପଠାଇବା ପାଇଁ, ଏହି ସେବା ସେଟଅପ୍‍ କରିବାକୁ ପ୍ରଥମେ ଆପଣଙ୍କ କେରିଅର୍‌କୁ କୁହନ୍ତୁ। ତା’ପରେ ସେଟିଙ୍ଗରେ ୱାଇ-ଫାଇ କଲିଙ୍ଗ ଅନ୍‍ କରନ୍ତୁ। (ତ୍ରୁଟି କୋଡ୍‍ %1$s)" + + + "ଆପଣଙ୍କ କେରିଅର୍ ସହିତ ୱାଇ-ଫାଇ କଲ୍ କରିବା ପାଇଁ ପଞ୍ଜୀକରଣ କରିବାରେ ସମସ୍ୟା: %1$s" + + + "%s" + "%s ୱାଇ-ଫାଇ କଲିଙ୍ଗ" + "ଅଫ୍" "ପସନ୍ଦ କରାଯାଇଥିବା ୱାଇ-ଫାଇ" - - + "ପସନ୍ଦର ମୋବାଇଲ୍‌" "କେବଳ ୱାଇ-ଫାଇ" "{0}: ଫରୱାର୍ଡ କରାଯାଇନାହିଁ" "{0}: {1}" @@ -171,35 +162,30 @@ "ଅନେକ ଅନୁରୋଧ ଉପରେ କାମ ଚାଲୁଛି। ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।" "%1$sରେ ସାଇନ୍‍-ଇନ୍‍ ତ୍ରୁଟି" "ସିଙ୍କ୍" - "ସିଙ୍କ୍" - "ଅତ୍ୟଧିକ %s ଡିଲିଟ୍‍ କରିଦିଏ।" + "ସିଙ୍କ ହୋଇପାରିବନାହିଁ" + "ବହୁତ %sକୁ ଡିଲିଟ୍ କରିବା ପାଇଁ ଚେଷ୍ଟା କରାଯାଇଛି" "ଟାବଲେଟ୍‍ ଷ୍ଟୋରେଜ୍‍ ପୂର୍ଣ୍ଣ ହୋଇଯାଇଛି। ସ୍ଥାନ ଖାଲି କରିବା ପାଇଁ କିଛି ଫାଇଲ୍‍ ଡିଲିଟ୍‍ କରନ୍ତୁ।" "ୱାଚ୍‍ ଷ୍ଟୋରେଜ୍‍ ପୂର୍ଣ୍ଣ ହୋଇଯାଇଛି। ସ୍ଥାନ ଖାଲି କରିବାକୁ କିଛି ଫାଇଲ୍‍ ଡିଲିଟ୍‍ କରନ୍ତୁ।" "ଟିଭିର ଷ୍ଟୋରେଜ୍‍ ପୂର୍ଣ୍ଣ ହୋଇଯାଇଛି। ସ୍ପେସ୍‍ ଖାଲି କରିବାକୁ କିଛି ଫାଇଲ୍‍ ଡିଲିଟ୍ କରନ୍ତୁ।" "ଫୋନ୍‍ ଷ୍ଟୋରେଜ୍‍ ପୂର୍ଣ୍ଣ ହୋଇଯାଇଛି। ସ୍ଥାନ ଖାଲି କରିବା ପାଇଁ କିଛି ଫାଇଲ୍‍ ଡିଲିଟ୍‍ କରନ୍ତୁ।" - + + ସର୍ଟିଫିକେଟ୍‍ ଅଥରିଟିଗୁଡ଼ିକ ଇନଷ୍ଟଲ୍‍ ହେଲା + ସର୍ଟିଫିକେଟ୍‍ ଅଥରିଟୀ ଇନଷ୍ଟଲ୍‍ ହେଲା + "ଅଜଣା ତୃତୀୟ ପକ୍ଷ ଅନୁଯାୟୀ" - - + "ଆପଣଙ୍କ ୱର୍କ ପ୍ରୋଫାଇଲ୍‍ ଆଡମିନଙ୍କ ଦ୍ୱାରା" "%s ଅନୁଯାୟୀ" "ୱାର୍କ ପ୍ରୋଫାଇଲ୍‍ ଡିଲିଟ୍ ହେଲା" - - - - - - - - - - + "ଆଡମିନ୍‍ ଆପ୍‍ ନାହିଁ କିମ୍ବା ଭୁଲ ଅଛି। ଫଳସ୍ୱରୂପ, ଆପଣଙ୍କ ୱାର୍କ ପ୍ରୋଫାଇଲ୍‍ ଏବଂ ସମ୍ବନ୍ଧୀୟ ଡାଟା ଡିଲିଟ୍ କରାଯାଇଛି। ସହାୟତା ପାଇଁ ଆପଣଙ୍କ ଆଡମିନଙ୍କୁ ଯୋଗାଯୋଗ କରନ୍ତୁ।" + "ଏହି ଡିଭାଇସରେ ଆପଣଙ୍କ ୱର୍କ ପ୍ରୋଫାଇଲ୍‍ ଆଉ ଉପଲବ୍ଧ ନାହିଁ" + "ବହୁତ ଥର ଭୁଲ ପାସ୍‌ୱର୍ଡ ଲେଖିଛନ୍ତି" + "ଡିଭାଇସକୁ ପରିଚାଳନା କରାଯାଉଛି" + "ଆପଣଙ୍କ ସଂସ୍ଥା ଏହି ଡିଭାଇସକୁ ପରିଚାଳନା କରନ୍ତି ଏବଂ ନେଟୱର୍କ ଟ୍ରାଫିକ୍‍ ନୀରିକ୍ଷଣ କରନ୍ତି। ବିବରଣୀ ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ।" "ଆପଣଙ୍କ ଡିଭାଇସ୍‍ ବର୍ତ୍ତମାନ ଲିଭାଯିବ" - - - - + "ଆଡମିନ୍‍ ଆପ୍‍‍ ବ୍ୟବହାର କରାଯାଇପାରିବ ନାହିଁ। ଆପଣଙ୍କ ଡିଭାଇସ୍‍‌ର ସମସ୍ତ ଡାଟାକୁ ବର୍ତ୍ତମାନ ଲିଭାଇଦିଆଯିବ। \n\nଯଦି ଆପଣଙ୍କର କୌଣସି ପ୍ରଶ୍ନ ରହିଥାଏ, ଆପଣଙ୍କ ସଂସ୍ଥାର ଆଡମିନ୍‌ଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।" + "%s ଦ୍ଵାରା ପ୍ରିଣ୍ଟିଙ୍ଗ ଅକ୍ଷମ କରାଯାଇଛି" "ମୁଁ" "ଟାବଲେଟ୍‌ର ବିକଳ୍ପ" "ଟିଭି ବିକଳ୍ପଗୁଡ଼ିକ" @@ -235,10 +221,8 @@ "ପାୱାର୍ ଅଫ୍" "ଜରୁରୀକାଳୀନ" "ବଗ୍‌ ରିପୋର୍ଟ" - - - - + "ସେସନ୍‍ ଶେଷ କରନ୍ତୁ" + "ସ୍କ୍ରୀନଶଟ୍‌" "ବଗ୍ ରିପୋର୍ଟ ନିଅନ୍ତୁ" "ଇ-ମେଲ୍ ମେସେଜ୍‍ ଭାବରେ ପଠାଇବାକୁ, ଆପଣଙ୍କ ବର୍ତ୍ତମାନର ଡିଭାଇସ୍‌ ବିଷୟରେ ଏହା ସୂଚନା ସଂଗ୍ରହ କରିବ। ବଗ୍ ରିପୋର୍ଟ ଆରମ୍ଭ ହେବାପରଠାରୁ ଏହାକୁ ପଠାଇବା ପାଇଁ କିଛି ସମୟ ଲାଗିବ, ଦୟାକରି ଧୈର୍ଯ୍ୟ ରଖନ୍ତୁ।" "ଇଣ୍ଟରାକ୍ଟିଭ୍‍ ରିପୋର୍ଟ" @@ -255,104 +239,67 @@ "ଏରୋପ୍ଲେନ୍‍ ମୋଡ୍" "ଏରୋପ୍ଲେନ୍‍ ମୋଡ୍ ଅନ୍ ଅଛି" "ଏରୋପ୍ଲେନ୍‍ ମୋଡ୍ ଅଫ୍ ଅଛି" - - - - - - + "ବ୍ୟାଟେରୀ ସେଭର୍" + "ବ୍ୟାଟେରୀ ସେଭର୍‌ ଅଫ୍ ଅଛି" + "ବ୍ୟାଟେରୀ ସେଭର୍‌ ଅନ୍‌ ଅଛି" "ସେଟିଙ୍ଗ" "ସହାୟକ" "ଭଏସ୍‌ ସହାୟକ" - - + "ଲକ୍ କରନ୍ତୁ" "999+" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "ନୂଆ ବିଜ୍ଞପ୍ତି" + "ଭର୍ଚୁଆଲ୍‌ କୀ\'ବୋର୍ଡ" + "ଫିଜିକଲ୍ କୀ’ବୋର୍ଡ" + "ସୁରକ୍ଷା" + "କାର୍ ମୋଡ୍" + "ଆକାଉଣ୍ଟର ସ୍ଥିତି" + "ଡେଭଲପରଙ୍କ ମେସେଜ୍‍" + "ଅପଡେଟ୍‍" + "ନେଟୱର୍କ ସ୍ଥିତି" + "ନେଟୱର୍କ ଅଲର୍ଟ" + "ନେଟ୍‌ୱର୍କ ଉପଲବ୍ଧ ଅଛି" + "VPN ସ୍ଥିତି" + "ଡିଭାଇସ୍‌ ଆଡମିନିଷ୍ଟ୍ରେସନ୍‍" + "ଆଲର୍ଟ" + "ରିଟେଲ୍‌ ଡେମୋ" + "USB ସଂଯୋଗ" + "ଆପ୍‍ ଚାଲୁଛି" + "ଆପ୍‍ଗୁଡ଼ିକ ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ କରିଥା\'ନ୍ତି" + "%1$s ବ୍ୟାଟେରୀ ବ୍ୟବହାର କରୁଛି" + "%1$dଟି ଆପ୍‍ ବ୍ୟାଟେରୀ ବ୍ୟବହାର କରୁଛନ୍ତି" + "ବ୍ୟାଟେରୀ ଏବଂ ଡାଟା ବ୍ୟବହାର ଉପରେ ବିବରଣୀ ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ" + "%1$s, %2$s" "ସୁରକ୍ଷିତ ମୋଡ୍" "Android ସିଷ୍ଟମ୍‌" - - - - + "ବ୍ୟକ୍ତିଗତ ପ୍ରୋଫାଇଲ୍‌କୁ ଫେରିଆସନ୍ତୁ" + "କାର୍ଯ୍ୟ ପ୍ରୋଫାଇଲ୍‌କୁ ଯାଆନ୍ତୁ" "ଯୋଗାଯୋଗ" "ଆପଣଙ୍କ ଯୋଗାଯୋଗ ଆକ୍ସେସ୍ କରେ" - - + "<b>%1$s</b>କୁ ଆପଣଙ୍କ ଯୋଗାଯୋଗଗୁଡ଼ିକୁ ଆକ୍ସେସ୍‍ କରିବା ପାଇଁ ଅନୁମତି ଦେବେ କି?" "ଲୋକେଶନ୍‌" "ଏହି ଡିଭାଇସ୍‌ର ଲୋକେଶନ୍‍ ଆକ୍ସେସ୍‍ କରେ" - - + "<b>%1$s</b>କୁ ଏହି ଡିଭାଇସ୍‌ର ଲୋକେଶନ୍‍ ଆକ୍ସେସ୍‍ କରିବା ପାଇଁ ଅନୁମତି ଦେବେ କି?" "କ୍ୟାଲେଣ୍ଡର୍" "ଆପଣଙ୍କ କ୍ୟାଲେଣ୍ଡର୍‍ ଆକ୍ସେସ୍‍ କରେ" - - + "<b>%1$s</b>କୁ ଆପଣଙ୍କ କ୍ୟାଲେଣ୍ଡର୍‌କୁ ଆକ୍ସେସ୍‍ କରିବା ପାଇଁ ଅନୁମତି ଦେବେ କି?" "SMS" "SMS ମେସେଜ୍‍ ପଠାନ୍ତୁ ଓ ଦେଖନ୍ତୁ" - - + "<b>%1$s</b>କୁ SMS ମେସେଜ୍‍ ପଠାଇବା ଓ ଦେଖିବା ପାଇଁ ଅନୁମତି ଦେବେ କି?" "ଷ୍ଟୋରେଜ୍‌" "ଆପଣଙ୍କ ଡିଭାଇସ୍‌ରେ ଥିବା ଫଟୋ, ମିଡିଆ ଓ ଫାଇଲ୍‍ ଆକ୍ସେସ୍‍ କରେ" - - + "<b>%1$s</b>କୁ ଆପଣଙ୍କ ଡିଭାଇସରେ ଥିବା ଫଟୋ, ମିଡିଆ ଓ ଫାଇଲ୍‍ ଆକ୍ସେସ୍‍ କରିବାକୁ ଅନୁମତି ଦେବେ କି?" "ମାଇକ୍ରୋଫୋନ୍" "ଅଡିଓ ରେକର୍ଡ କରେ" - - + "<b>%1$s</b>କୁ ଅଡିଓ ରେକର୍ଡ କରିବା ପାଇଁ ଅନୁମତି ଦେବେ କି?" "କ୍ୟାମେରା" "ଫଟୋ ନିଏ ଓ ଭିଡିଓ ରେକର୍ଡ କରେ" - - + "<b>%1$s</b>କୁ ଫଟୋ ଉଠାଇବାକୁ ଏବଂ ଭିଡିଓ ରେକର୍ଡ କରିବାକୁ ଅନୁମତି ଦେବେ କି?" "ଫୋନ୍‍" "ଫୋନ୍‍ କଲ୍‍ କରେ ଏବଂ ପରିଚାଳନା କରେ" - - + "<b>%1$s</b>କୁ ଫୋନ୍‍ କଲ୍‍ କରିବାକୁ ତଥା ପରିଚାଳନା କରିବାକୁ ଅନୁମତି ଦେବେ କି?" "ବଡୀ ସେନ୍ସର୍" "ଆପଣଙ୍କ ଗୁରୁତପୂର୍ଣ୍ଣ ସଂକେତଗୁଡ଼ିକ ବିଷୟରେ ସେନ୍ସର୍‍ ଡାଟା ଆକ୍ସେସ୍‍ କରେ" - - + "<b>%1$s</b>କୁ ଆପଣଙ୍କ ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ ଲକ୍ଷଣଗୁଡ଼ିକ ବିଷୟରେ ସେନ୍ସର୍‍ ଡାଟା ଆକ୍ସେସ୍‍ କରିବା ପାଇଁ ଅନୁମତି ଦେବେ କି?" "ୱିଣ୍ଡୋ କଣ୍ଟେଣ୍ଟ ହାସଲ କରନ୍ତୁ" "ଆପଣ କାମ କରୁଥିବା ୱିଣ୍ଡୋର କଣ୍ଟେଣ୍ଟକୁ ଯାଞ୍ଚ କରନ୍ତୁ।" "ସ୍ପର୍ଶ ଦ୍ୱାରା ଏକ୍ସପ୍ଲୋର୍‍ ଅନ୍‍ କରନ୍ତୁ" @@ -363,10 +310,8 @@ "ଡିସପ୍ଲେର ଜୁମ୍‍ ସ୍ତର ଓ ପୋଜିସନିଙ୍ଗ ନିୟନ୍ତ୍ରଣ କରନ୍ତୁ।" "ଜେଶ୍ଚର୍‍ କରନ୍ତୁ" "ଟାପ୍‍, ସ୍ୱାଇପ୍‍, ପିଞ୍ଚ ଓ ଅନ୍ୟାନ୍ୟ ଜେଶ୍ଚର୍‍ ସମ୍ପାଦନ କରିପାରିବ।" - - - - + "ଆଙ୍ଗୁଠି ଚିହ୍ନ ଜେଶ୍ଚର" + "ଡିଭାଇସ୍‌ର ଆଙ୍ଗୁଠି ଚିହ୍ନ ସେନସର୍ ଉପରେ ଜେଶ୍ଚର୍‍ କ୍ୟାପଚର୍‍ କାର୍ଯ୍ୟ କରାଯାଇପାରିବ।" "ଷ୍ଟାଟସ୍‌ ବାର୍‌କୁ ଅକ୍ଷମ କିମ୍ୱା ସଂଶୋଧନ କରନ୍ତୁ" "ଆପ୍‍କୁ, ସ୍ଥିତି ବାର୍‍ ଅକ୍ଷମ କରିବାକୁ କିମ୍ବା ସିଷ୍ଟମ୍‍ ଆଇକନ୍‍ ଯୋଡ଼ିବା କିମ୍ବା ବାହାର କରିବାକୁ ଦେଇଥାଏ।" "ଷ୍ଟାଟସ୍‍ ବାର୍‍ ରହିବାକୁ ଦିଅନ୍ତୁ" @@ -379,10 +324,8 @@ "ୟୁଜର୍‌ଙ୍କ ବିନା ବାଧାରେ ହୋମ୍‍ସ୍କ୍ରୀନ୍‍‍ର ଶର୍ଟକଟ୍‍ ବାହାର କରିବା ପାଇଁ ଗୋଟିଏ ଆପ୍ଲିକେଶନ୍‍କୁ ଅନୁମତି ଦେଇଥାଏ।" "ଆଉଟ୍‍ଗୋଇଙ୍ଗ କଲ୍‍‍କୁ ଅନ୍ୟ ରୁଟ୍‍ ଦିଅନ୍ତୁ" "ଭିନ୍ନ ନମ୍ବରକୁ କଲ୍‍ ରିଡାଇରେକ୍ଟ କରିବା କିମ୍ବା ଏକାଠି କଲ୍‍ ଖାରଜ କରିବା ବିକଳ୍ପ ସହ ଆଉଟ୍‍ଗୋଇଙ୍ଗ କଲ୍‍ କରିବାବେଳେ ଡାୟଲ୍‍ କରାଯାଉଥିବା ନମ୍ବର ଦେଖିବା ପାଇଁ ଆପ୍‍କୁ ଅନୁମତି ଦେଇଥାଏ।" - - - - + "ଫୋନ୍‌ କଲଗୁଡ଼ିକର ଉତ୍ତର ଦିଅନ୍ତୁ" + "ଇନକମିଙ୍ଗ ଫୋନ୍‍ କଲର ଉତ୍ତର ଦେବାକୁ ଆପ୍‌କୁ ଅନୁମତି ଦିଅନ୍ତୁ।" "ଟେକ୍ସଟ୍‍ ମେସେଜ୍‌ (SMS) ପ୍ରାପ୍ତ କରନ୍ତୁ" "SMS ମେସେଜ୍‌ ପ୍ରାପ୍ତ କରିବାକୁ ତଥା ପ୍ରକ୍ରିୟା କରାଇବାକୁ ଆପ୍‍ଟିକୁ ଅନୁମତି ଦିଏ। ଏହାର ଅର୍ଥ ହେଉଛି, ଆପଣଙ୍କ ଡିଭାଇସ୍‍କୁ ପଠାଯାଇଥିବା ମେସେଜ୍‍ ଆପଣଙ୍କୁ ନଦେଖାଇ ଆପ୍‍ଟି ମନିଟର୍‍ କିମ୍ବା ଡିଲିଟ୍‍ କରିପାରେ।" "ଟେକ୍ସଟ୍‍ ମେସେଜ୍‍ (MMS) ପ୍ରାପ୍ତ କରନ୍ତୁ" @@ -394,10 +337,8 @@ "SMS ମେସେଜ୍‍ ପଠାନ୍ତୁ ଓ ଦେଖନ୍ତୁ" "ଆପ୍‌କୁ SMS ମେସେଜ୍ ପଠେଇବାକୁ ଅନୁମତି ଦେଇଥାଏ। ଏହାଦ୍ୱାରା ଅପ୍ରତ୍ୟାଶିତ ଶୁଳ୍କ ଲାଗୁ ହୋଇପାରେ। ହାନୀକାରକ ଆପ୍‌ ଆପଣଙ୍କ ବିନା ସ୍ୱୀକୃତିରେ ମେସେଜ୍‍ ପଠାଇ, ଆପଣଙ୍କ ପଇସା ଖର୍ଚ୍ଚ କରାଇପାରେ।" "ଆପଣଙ୍କ ଟେକ୍ସଟ୍‍ ମେସେଜ୍‍ (SMS କିମ୍ବା MMS) ପଢ଼ନ୍ତୁ" - - - - + "ଆପଣଙ୍କ ଟାବଲେଟ୍‌ରେ ଷ୍ଟୋର୍‍ କରାଯାଇଥିବା ସମସ୍ତ SMS (ଟେକ୍ସଟ୍‍) ମେସେଜ୍‍ ଏହି ଆପ୍‍ ପଢ଼ିପାରେ।" + "ଆପଣଙ୍କ ଟିଭିରେ ଷ୍ଟୋର୍‍ କରାଯାଇଥିବା ସମସ୍ତ SMS (ଟେକ୍ସଟ୍‍) ମେସେଜ୍‍ ଏହି ଆପ୍‍ ପଢ଼ିପାରେ।" "ଆପଣଙ୍କ ଫୋନ୍‌ରେ ଷ୍ଟୋର୍‍ କରାଯାଇଥିବା ସମସ୍ତ SMS (ଟେକ୍ସଟ୍‍) ମେସେଜ୍‍ ଏହି ଆପ୍‍ ପଢ଼ିପାରେ।" "ଟେକ୍ସଟ୍‍ ମେସେଜ୍‍ (WAP) ପ୍ରାପ୍ତ କରନ୍ତୁ" "ଆପ୍‌କୁ WAP ମେସେଜିଙ୍ଗକୁ ପ୍ରାପ୍ତ ଓ ବିକାଶ କରିବାକୁ ଦେଇଥାଏ। ଏହି ଅନୁମତିରେ ଆପଣ ସେମାନଙ୍କୁ ଦେଖାଯାଇଥିବା ମେସେଜ୍ ଉପରେ ନଜର ରଖିବା ଏବଂ ଡିଲିଟ୍‍ କରିବାର କ୍ଷମତା ସାମିଲ୍ ଅଛି।" @@ -411,26 +352,18 @@ "କାର୍‍ ମୋଡ୍‍ ବଦଳାଇବାକୁ ଆପ୍‍କୁ ଅନୁମତି ଦେଇଥାଏ।" "ଅନ୍ୟ ଆପ୍‍ ବନ୍ଦ କରନ୍ତୁ" "ଆପ୍‌କୁ ଅନ୍ୟ ଆପ୍‌ର ବ୍ୟାକ୍‌ଗ୍ରାଉଣ୍ଟ ପ୍ରକ୍ରିୟାକୁ ସମାପ୍ତ କରିବାକୁ ଦେଇଥାଏ। ଏହି କାରଣରୁ ଅନ୍ୟ ଆପ୍‌ଗୁଡ଼ିକ ଚାଲିବା ବନ୍ଦ ହୋଇଯାଇପାରେ।" - - - - - - - - - - - - + "ଏହି ଆପ୍‍ ଅନ୍ୟ ଆପ୍‌ର ଉପରେ ଦେଖାଯାଇପାରେ" + "ଏହି ଆପ୍‍ ଅନ୍ୟ ଆପ୍‌ର ଶୀର୍ଷରେ କିମ୍ବା ସ୍କ୍ରୀନର ଅନ୍ୟ ଅଂଶରେ ଦେଖାଯାଇପାରେ। ଏହା ସାମାନ୍ୟ ଆପ୍‍ ବ୍ୟବହାରରେ ବାଧା ପହଞ୍ଚାଇପାରେ ଏବଂ ଅନ୍ୟ ଆପ୍‌କୁ ଅଲଗା ରୂପେ ଦେଖାଇପାରେ।" + "ବ୍ୟାକଗ୍ରାଉଣ୍ଡରେ ଚଲାନ୍ତୁ" + "ଏହି ଆପ୍‌ ବ୍ୟାକ୍‌ଗ୍ରାଉଣ୍ଡରେ ଚାଲିପାରିବ। ଏହା ଦ୍ୱାରା ବ୍ୟାଟେରୀ ଦ୍ରୁତ ଭାବେ ଖର୍ଚ୍ଚ ହୋଇପାରେ।" + "ବ୍ୟାକଗ୍ରାଉଣ୍ଡରେ ଡାଟା ବ୍ୟବହାର କରନ୍ତୁ" + "ଏହି ଆପ୍‌ ବ୍ୟାକ୍‌ଗ୍ରାଉଣ୍ଡରେ ଡାଟା ବ୍ୟବହାର କରିପାରିବ। ଏହା ଦ୍ୱାରା ଅଧିକ ବ୍ୟାଟେରୀ ହୋଇପାରେ।" "ଆପ୍‍କୁ, ସର୍ବଦା ଚାଲୁଥିବା କରନ୍ତୁ" "ଆପ୍‍ଟି ନିଜକୁ ମେମୋରୀରେ ଭାଗ କରିବାକୁ ଦେଇଥାଏ। ଏହାଦ୍ୱାରା ଅନ୍ୟ ଆପ୍‍ଗୁଡ଼ିକ ପାଇଁ ମେମୋରୀ ଉପଲବ୍ଧକୁ କମ୍‌ କରିବା ସହ ଟାବ୍‍ଲେଟ୍‍ଟିକୁ ମନ୍ଥର କରିବ।" "ମେମୋରୀରେ ଆପ୍‍ଟି ନିଜକୁ ଭାଗ କରିବାକୁ ଦେଇଥାଏ। ଏହା ଟିଭିକୁ ଧୀର କରି ଅନ୍ୟ ଆପ୍‍ ପାଇଁ ଉପଲବ୍ଧ ମେମୋରୀକୁ ସୀମିତ କରିପାରେ।" "ଆପ୍‍ଟି ନିଜକୁ ମେମୋରୀରେ ଭାଗ କରିବାକୁ ଦେଇଥାଏ। ଏହାଦ୍ୱାରା ଅନ୍ୟ ଆପ୍‍ଗୁଡ଼ିକ ପାଇଁ ମେମୋରୀ ଉପଲବ୍ଧକୁ କମ୍‌ କରିବା ସହ ଫୋନ୍‍ଟିକୁ ମନ୍ଥର କରିବ।" - - - - + "ଫୋର୍‌ଗ୍ରାଉଣ୍ଡ ସେବାକୁ ଚଲାନ୍ତୁ" + "ଫୋର୍‌ଗ୍ରାଉଣ୍ଡ ସେବାଗୁଡ଼ିକୁ ବ୍ୟବହାର କରିବା ପାଇଁ ଆପ୍‌କୁ ଅନୁମତି ଦିଅନ୍ତୁ।" "ଆପ୍‍ ଷ୍ଟୋରେଜ୍‍ ସ୍ଥାନର ମାପ କରନ୍ତୁ" "ଆପ୍‍ର କୋଡ୍‍, ଡାଟା ଓ କ୍ୟାଶ୍‌ ଆକାର ହାସଲ କରିବା ପାଇଁ ଏହାକୁ ଅନୁମତି ଦେଇଥାଏ।" "ସିଷ୍ଟମ୍‍ ସେଟିଙ୍ଗ ବଦଳାନ୍ତୁ" @@ -459,30 +392,26 @@ "ଇନ୍‍କମିଙ୍ଗ ତଥା ଆଉଟ୍‍ଗୋଇଙ୍ଗ କଲ୍‌ ଡାଟା ସହ ଆପଣଙ୍କ ଫୋନ୍‍ର କଲ୍‍ ଲଗ୍‍ ବଦଳାଇବା ପାଇଁ ଆପ୍‍କୁ ଅନୁମତି ଦିଏ। ହାନୀକାରକ ଆପ୍‍ ଆପଣଙ୍କ କଲ୍‍ ଲଗ୍‍ ଲିଭାଇବାକୁ କିମ୍ବା ବଦଳାଇବାକୁ ଏହା ବ୍ୟବହାର କରିପାରନ୍ତି।" "ବଡୀ ସେନ୍ସର୍‍ ଆକ୍ସେସ୍‍ କରେ (ଯେପରିକି ହୃଦ୍‍ ହାର ମନିଟର୍‍)" "ଆପ୍‌କୁ ସେନ୍ସର୍ ଡେଟା ପର୍ଯ୍ୟନ୍ତ ପହଞ୍ଚିବାକୁ ଦେଇଥାଏ, ଯାହା ଆପଣଙ୍କ ଶାରୀରିକ ସ୍ଥିତିର ନିରୀକ୍ଷଣ କରିଥାଏ, ଯେପରିକି ଆପଣଙ୍କ ହୃଦୟ ସ୍ତର।" - - - - - - - - + "କ୍ୟାଲେଣ୍ଡର୍‍ ଇଭେଣ୍ଟ ଏବଂ ବିବରଣୀ ପଢ଼େ" + "ଆପଣଙ୍କ ଟାବଲେଟ୍‌ରେ ଷ୍ଟୋର୍‍ କରାଯାଇଥିବା ସମସ୍ତ କ୍ୟାଲେଣ୍ଡର ଇଭେଣ୍ଟ ଏହି ଆପ୍‍ ପଢ଼ିପାରେ ଏବଂ ଆପଣଙ୍କ କ୍ୟାଲେଣ୍ଡର ଡାଟା ଶେୟାର୍‍ କରିପାରେ କିମ୍ବା ସେଭ୍‍ କରିପାରେ।" + "ଆପଣଙ୍କ ଟିଭିରେ ଷ୍ଟୋର୍‍ କରାଯାଇଥିବା ସମସ୍ତ କ୍ୟାଲେଣ୍ଡର ଇଭେଣ୍ଟ ଏହି ଆପ୍‍ ପଢ଼ିପାରେ ଏବଂ ଆପଣଙ୍କ କ୍ୟାଲେଣ୍ଡର ଡାଟା ଶେୟାର୍‍ କରିପାରେ କିମ୍ବା ସେଭ୍‍ କରିପାରେ।" + "ଆପଣଙ୍କ ଫୋନ୍‌ରେ ଷ୍ଟୋର୍‍ କରାଯାଇଥିବା ସମସ୍ତ କ୍ୟାଲେଣ୍ଡର ଇଭେଣ୍ଟ ଏହି ଆପ୍‍ ପଢ଼ିପାରେ ଏବଂ ଆପଣଙ୍କ କ୍ୟାଲେଣ୍ଡର ଡାଟା ଶେୟାର୍‍ କରିପାରେ କିମ୍ବା ସେଭ୍‍ କରିପାରେ।" "କ୍ୟାଲେଣ୍ଡର ଇଭେଣ୍ଟରେ ଯୋଡ଼ନ୍ତୁ କିମ୍ବା ସଂଶୋଧନ କରନ୍ତୁ ଏବଂ ମାଲିକଙ୍କ ଅଜାଣତରେ ଅତିଥିମାନଙ୍କୁ ଇମେଲ୍ ପଠାନ୍ତୁ।" - - - - + "ଏହି ଆପ୍‍ ଆପଣଙ୍କ ଟାବଲେଟ୍‌ରେ କ୍ୟାଲେଣ୍ଡର ଇଭେଣ୍ଟ ଯୋଡ଼ିପାରେ, ବାହାର କରିପାରେ କିମ୍ବା ବଦଳାଇପାରେ। ଏହି ଆପ୍‍ ଏପରି ମେସେଜ୍‍ ପଠାଇପାରେ, ଯାହା କ୍ୟାଲେଣ୍ଡର ମାଲିକଙ୍କଠାରୁ ଆସିଥିବା ପରି ଜଣାପଡ଼େ କିମ୍ବା ମାଲିକଙ୍କୁ ନଜଣାଇ ଇଭେଣ୍ଟରେ ପରିବର୍ତ୍ତନ କରିପାରେ।" + "ଏହି ଆପ୍‍ ଆପଣଙ୍କ ଟିଭିରେ କ୍ୟାଲେଣ୍ଡର ଇଭେଣ୍ଟ ଯୋଡ଼ିପାରେ, ବାହାର କରିପାରେ କିମ୍ବା ବଦଳାଇପାରେ। ଏହି ଆପ୍‍ ଏପରି ମେସେଜ୍‍ ପଠାଇପାରେ, ଯାହା କ୍ୟାଲେଣ୍ଡର ମାଲିକଙ୍କଠାରୁ ଆସିଥିବା ପରି ଜଣାପଡ଼େ କିମ୍ବା ମାଲିକଙ୍କୁ ନଜଣାଇ ଇଭେଣ୍ଟରେ ପରିବର୍ତ୍ତନ କରିପାରେ।" "ଏହି ଆପ୍‍, ଆପଣଙ୍କ ଫୋନ୍‌ରେ କ୍ୟାଲେଣ୍ଡର୍‌ ଇଭେଣ୍ଟଗୁଡ଼ିକୁ ଯୋଡ଼ିପାରେ, ବାହାର କରିପାରେ କିମ୍ବା ବଦଳାଇପାରେ। କ୍ୟାଲେଣ୍ଡର୍‌ ମାଲିକଙ୍କ ପାଖରୁ ଆସିଥିବା ପରି ଜଣା‍ପଡ଼ିବା ମେସେଜ୍‍କୁ ଏହି ଆପ୍‍ ପଠାଇପାରେ କିମ୍ବା ମାଲିକଙ୍କୁ ନଜଣାଇ ଇଭେଣ୍ଟ ବଦଳାଇପାରେ।" "ଅତିରିକ୍ତ ଲୋକେଶନ୍ ପ୍ରଦାନକାରୀ କମାଣ୍ଡକୁ ଆକ୍ସେସ୍‍ କରନ୍ତୁ" "ଅତିରିକ୍ତ ଲୋକେଶନ୍‍ ପ୍ରଦାନକାରୀ କମାଣ୍ଡ ଆକ୍ସେସ୍‌ କରିବା ପାଇଁ ଆପ୍‍କୁ ଅନୁମତି ଦିଏ। GPS କିମ୍ବା ଅନ୍ୟ ଲୋକେଶନ୍‍ ସୋର୍ସଗୁଡିକରେ ଆପ୍‍ଟି ପ୍ରଭାବ ପକାଇପାରେ।" "ନିର୍ଦ୍ଦିଷ୍ଟ ଲୋକେଶନ୍‍ ଆକ୍ସେସ୍ କରେ (GPS ଏବଂ ନେଟ୍‌ୱର୍କ-ଆଧାରିତ)" "ଏହି ଆପ୍‍, GPS କିମ୍ୱା ନେଟ୍‌ୱର୍କ ସୋର୍ସ ଉପରେ ଆଧାର କରି ଆପଣଙ୍କ ଲୋକେଶନ୍‍ ପ୍ରାପ୍ତ କରିପାରେ, ଯେପରିକି ସେଲ୍‍ ଟାୱାର୍‍ ଓ ୱାଇ-ଫାଇ ନେଟ୍‌ୱର୍କ। ଏହି ଲୋକେଶନ୍‌ ସେବା, ଆପଣଙ୍କ ଫୋନ୍‌ରେ ଅନ୍‍ ରହିଥିବା ଓ ଉପଲବ୍ଧ ଥିବା ଦରକାର, ଯେଉଁଥିରୁ ଆପ୍‌ ସେଗୁଡ଼ିକର ବ୍ୟବହାର କରିପାରିବ। ଏହାଦ୍ୱାରା ବ୍ୟାଟେରୀ ଖର୍ଚ୍ଚ ବଢ଼ିପାରେ।" "ପାଖାପାଖି ଲୋକେଶନ୍‍ ଆକ୍ସେସ୍‍ କରେ (ନେଟ୍‌ୱର୍କ-ଆଧାରିତ)" + "ଏହି ଆପ୍‍, ନେଟ୍‌ୱର୍କ ସୋର୍ସ ଉପରେ ଆଧାର କରି ଆପଣଙ୍କ ଲୋକେଶନ୍‍ ପ୍ରାପ୍ତ କରିପାରେ, ଯେପରିକି ସେଲ୍‍ ଟାୱାର୍‍ ଓ ୱାଇ-ଫାଇ ନେଟ୍‌ୱର୍କ। ଏହି ଲୋକେଶନ୍‌ ସେବା, ଆପଣଙ୍କ ଟାବଲେଟ୍‌ରେ ଅନ୍‍ ରହିଥିବା ଓ ଉପଲବ୍ଧ ଥିବା ଦରକାର, ଯେଉଁଥିରୁ ଆପ୍‌ ସେଗୁଡ଼ିକର ବ୍ୟବହାର କରିପାରିବ।" + "ଏହି ଆପ୍‍, ନେଟ୍‌ୱର୍କ ସୋର୍ସ ଉପରେ ଆଧାର କରି ଆପଣଙ୍କ ଲୋକେଶନ୍‍ ପ୍ରାପ୍ତ କରିପାରେ, ଯେପରିକି ସେଲ୍‍ ଟାୱାର୍‍ ଓ ୱାଇ-ଫାଇ ନେଟ୍‌ୱର୍କ। ଏହି ଲୋକେଶନ୍‌ ସେବା, ଆପଣଙ୍କ ଟିଭିରେ ଅନ୍‍ ରହିଥିବା ଓ ଉପଲବ୍ଧ ଥିବା ଦରକାର, ଯେଉଁଥିରୁ ଆପ୍‌ ସେଗୁଡ଼ିକର ବ୍ୟବହାର କରିପାରିବ।" + "ସେଲ୍‍ ଟାୱାର ଓ ୱାଇ-ଫାଇ ନେଟ୍‌ୱର୍କ ପରି ସୋର୍ସକୁ ଆଧାର କରି ଏହି ଆପ୍‍ ଆପଣଙ୍କ ଲୋକେଶନ୍‍ ପ୍ରାପ୍ତ କରିପାରିବ। ଏହି ଲୋକେଶନ୍‍ ସେବାଗୁଡ଼ିକର ବ୍ୟବହାର କରିବାକୁ ସେଗୁଡ଼ିକ ଅନ୍‍ କରାଯିବା ଏବଂ ଆପଣଙ୍କ ଫୋନ୍‌ରେ ଉପଲବ୍ଧ ଥିବା ଜରୁରୀ" "ଆପଣଙ୍କ ଅଡିଓ ସେଟିଙ୍ଗକୁ ପରିବର୍ତ୍ତନ କରନ୍ତୁ" "ଆପ୍‌କୁ ଗ୍ଲୋବାଲ୍ ଅଡିଓ ସେଟିଙ୍ଗ, ଯେପରିକି ଭଲ୍ୟୁମ୍‌କୁ ସଂଶୋଧିତ କରିବାକୁ ଏବଂ ଆଉଟପୁଟ୍ ପାଇଁ ସ୍ପିକର୍‌ ବ୍ୟବହାର କରିବାକୁ ଅନୁମତି ଦେଇଥାଏ।" "ଅଡିଓ ରେକର୍ଡ କରନ୍ତୁ" - - + "ଏହି ଆପ୍‍ ଯେକୌଣସି ସମୟରେ ମାଇକ୍ରୋଫୋନ୍‍ ବ୍ୟବହାର କରି ଅଡିଓ ରେକର୍ଡ କରିପାରିବ।" "SIMକୁ କମାଣ୍ଡ ପଠାନ୍ତୁ" "SIMକୁ କମାଣ୍ଡ ପଠାଇବା ପାଇଁ ଆପ୍‍କୁ ଅନୁମତି ଦେଇଥାଏ। ଏହା ବହୁତ ବିପଦପୂର୍ଣ୍ଣ।" "ଫଟୋ ଓ ଭିଡିଓଗୁଡ଼ିକୁ ନିଅନ୍ତୁ" @@ -495,18 +424,12 @@ "ଆପଣଙ୍କ ହସ୍ତକ୍ଷେପ ବିନା କଲ୍‍ କରିପାରିବା ପାଇଁ ଆପ୍‌କୁ IMS ସେବା ବ୍ୟବହାର କରିବାକୁ ଦିଏ।" "ଫୋନ୍‍ ସ୍ଥିତି ଓ ପରିଚୟ ପଢ଼ନ୍ତୁ" "ଆପ୍‌କୁ ଡିଭାଇସ୍‌ର ଫୋନ୍‌ ବୈଶିଷ୍ଟ୍ୟ ଆକ୍ସେସ୍‍ କରିବାକୁ ଅନୁମତି ଦେଇଥାଏ। ଏହି ଅନୁମତି ଆପ୍‌କୁ ଫୋନ୍‌ ନମ୍ବର୍ ଓ ଡିଭାଇସ୍‌ IDଗୁଡ଼ିକୁ ନିର୍ଦ୍ଧାରଣ କରିବାକୁ ଅନୁମତି ଦେଇଥାଏ, କଲ୍ ସକ୍ରିୟ ଥିଲେ ବି ଏବଂ କଲ୍ ଦ୍ୱାରା ସଂଯୋଗ ଥିବା ରିମୋଟ୍‌ ନମ୍ବର୍‌କୁ ମଧ୍ୟ।" - - - - - - - - - - - - + "ସିଷ୍ଟମ୍‍ ଜରିଆରେ କଲ୍‌ର ମାର୍ଗ ବଦଳାଇପାରେ" + "କଲ୍‍ କରିବାର ଅନୁଭୂତି ବଢ଼ାଇବାକୁ ସିଷ୍ଟମ୍‍ ଜରିଆରେ ଆପର କଲ୍‍ଗୁଡ଼ିକୁ ରୁଟ୍‍ କରିବାକୁ ଏହାକୁ ଅନୁମତି ଦେଇଥାଏ।" + "ଅନ୍ୟ ଏକ ଆପ୍‌ରୁ କଲ୍‌କୁ ଜାରି ରଖନ୍ତୁ" + "ଅନ୍ୟ ଆପ୍‌ରେ ଆରମ୍ଭ ହୋଇଥିବା ଗୋଟିଏ କଲ୍‌କୁ ଜାରି ରଖିବା ପାଇଁ ଆପ୍‌କୁ ଅନୁମତି ଦିଅନ୍ତୁ।" + "ଫୋନ୍‍ ନମ୍ବର ପଢ଼େ" + "ଏହି ଡିଭାଇସର ଫୋନ୍‍ ନମ୍ବର ଆକ୍ସେସ୍‍ କରିବାକୁ ଆପକୁ ଅନୁମତି ଦିଏ।" "ଟାବଲେଟ୍‌କୁ ସ୍ଲୀପିଙ୍ଗ ମୋଡ୍‌କୁ ଯିବାକୁ ରୋକନ୍ତୁ" "ଟିଭିକୁ ସ୍ଲୀପିଙ୍ଗ ମୋଡ୍‌ରୁ ଯିବାକୁ ରୋକନ୍ତୁ।" "ଫୋନକୁ ସ୍ଲୀପିଙ୍ଗ ମୋଡ୍‌କୁ ଯିବାକୁ ରୋକନ୍ତୁ" @@ -563,6 +486,10 @@ "ନିଅର୍‍ ଫିଲ୍ଡ କମ୍ୟୁନିକେସନ୍‍ନ (NFC) ଟାଗ୍‍, କାର୍ଡ ଓ ରିଡରଗୁଡ଼ିକ ସହ ଯୋଗାଯୋଗ କରିବା ପାଇଁ ଆପ୍‍କୁ ଅନୁମତି ଦେଇଥାଏ।" "ଆପଣଙ୍କ ସ୍କ୍ରୀନ୍‍ ଲକ୍‍ ଅକ୍ଷମ କରନ୍ତୁ" "ଆପ୍‌କୁ କୀ\'ଲକ୍ କିମ୍ବା ସେଥିରେ ଥିବା କୌଣସି ପାସ୍‌ୱର୍ଡ ସୁରକ୍ଷାକୁ ଅକ୍ଷମ କରିବା ପାଇଁ ଅନୁମତି ଦିଏ, ଉଦାହରଣସ୍ୱରୂପ, ଇନ୍‌କମିଙ୍ଗ ଫୋନ୍‌ କଲ୍ ପ୍ରାପ୍ତ କରିବା ସମୟରେ ଫୋନ୍‌ଟି କୀ\'ଲକ୍‌କୁ ଅକ୍ଷମ କରିଦିଏ, ତା’ପରେ କଲ୍ ସମାପ୍ତ ହେବାପରେ ପୁଣି କୀ\'ଲକ୍‌କୁ ସକ୍ଷମ କରିଥାଏ।" + + + + "ଆଙ୍ଗୁଠି ଚିହ୍ନ ହାର୍ଡୱେର୍‍ ପରିଚାଳନା କରନ୍ତୁ" "ବ୍ୟବହାର କରିବା ପାଇଁ ଆଙ୍ଗୁଠି ଚିହ୍ନ ଯୋଡ଼ିବାକୁ ଓ ଡିଲିଟ୍‍ କରିବାକୁ ଆପକୁ ବିଧି ଆରମ୍ଭ କରିବାକୁ ଦେଇଥାଏ।" "ଆଙ୍ଗୁଠି ଚିହ୍ନ ହାର୍ଡୱେର୍‍ ବ୍ୟବହାର କରନ୍ତୁ" @@ -575,20 +502,18 @@ "ଚିହ୍ନଟ ହେଲା ନାହିଁ" + + "ଆଙ୍ଗୁଠି ଚିହ୍ନ ହାର୍ଡୱେର୍‍ ଉପଲବ୍ଧ ନାହିଁ।" "ଆଙ୍ଗୁଠି ଚିହ୍ନ ଷ୍ଟୋର୍‍ କରାଯାଇପାରିବ ନାହିଁ। ଦୟାକରି ପୂର୍ବରୁ ଥିବା ଆଙ୍ଗୁଠି ଚିହ୍ନକୁ ବାହାର କରିଦିଅନ୍ତୁ।" "ଆଙ୍ଗୁଠି ଚିହ୍ନର ସମୟ ଶେଷ ହେଲା । ପୁଣିଥରେ ଚେଷ୍ଟା କରନ୍ତୁ।" "ଆଙ୍ଗୁଠି ଚିହ୍ନ କାର୍ଯ୍ୟ କ୍ୟାନ୍ସଲ୍‍ କରାଗଲା।" - - + "ୟୁଜର୍‌ଙ୍କ ଦ୍ଵାରା ଆଙ୍ଗୁଠି ଚିହ୍ନ ନେବା କାମକୁ କ୍ୟାନ୍ସଲ୍ କରିଦିଆଯାଇଛି।" "ବହୁତ ପ୍ରୟାସ କରାଗଲା। ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।" - - + "ବହୁତ ଥର ଭୁଲ ପ୍ରୟାସ କରିଛନ୍ତି। ଆଙ୍ଗୁଠି ଚିହ୍ନ ସେନ୍ସର୍‍ ଅକ୍ଷମ କରାଗଲା।" "ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।" - - - - + "କୌଣସି ଆଙ୍ଗୁଠି ଚିହ୍ନ ପଞ୍ଜୀକୃତ ହୋଇନାହିଁ।" + "ଏହି ଡିଭାଇସ୍‌ରେ ଆଙ୍ଗୁଠି ଚିହ୍ନ ସେନସର୍‌ ନାହିଁ" "ଆଙ୍ଗୁଠି %d" @@ -655,8 +580,7 @@ "\"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" କନଫିଗରେଶନ୍‍ ପଢ଼ିବା ତଥା ଲେଖିବା ପାଇଁ ଆପକୁ ଅନୁମତି ଦେଇଥାଏ।" "ପାସ୍‌ୱର୍ଡ ନିୟମାବଳୀ ସେଟ୍ କରନ୍ତୁ" "ଲକ୍‍ ସ୍କ୍ରୀନ୍‍ ପାସ୍‌ୱର୍ଡ ଓ PINରେ ଅନୁମୋଦିତ ଦୀର୍ଘତା ଓ ବର୍ଣ୍ଣ ନିୟନ୍ତ୍ରଣ କରନ୍ତୁ।" - - + "ସ୍କ୍ରୀନ୍-ଅନଲକ୍ କରିବା ଉଦ୍ୟମ ନୀରିକ୍ଷଣ କରନ୍ତୁ" "ସ୍କ୍ରୀନ୍‍ ଅନଲକ୍‍ କରିବାବେଳେ ଟାଇପ୍‍ କରିଥିବା ଭୁଲ ପାସୱର୍ଡର ସଂଖ୍ୟାକୁ ନୀରିକ୍ଷଣ କରେ ଏବଂ ଟାବଲେଟ୍‍କୁ ଲକ୍‍ କରିଦିଏ କିମ୍ବା ଯଦି ଅନେକ ଭୁଲ ପାସୱର୍ଡ ଟାଇପ୍‍ କରାଯାଇଥାଏ, ତେବେ ଟାବଲେଟ୍‍ର ସମସ୍ତ ଡାଟା ଲିଭାଇଦିଏ।" "ସ୍କ୍ରିନକୁ ଅନଲକ୍‌ କରିବା ସମୟରେ ଟାଇପ୍ କରିଥିବା ଭୁଲ ପାସ୍‌ୱର୍ଡ ସଂଖ୍ୟା ଉପରେ ନୀରିକ୍ଷଣ ରଖନ୍ତୁ ଏବଂ ଟିଭି ଲକ୍ କରନ୍ତୁ ଓ ଯଦି ଅନେକ ଭୁଲ ପାସ୍‌ୱର୍ଡ ଟାଇପ୍ କରାଯାଇଛି, ତେବେ ସମସ୍ତ ଟିଭି ଡାଟାକୁ ହଟାଇଦିଅନ୍ତୁ।" "ସ୍କ୍ରୀନ୍‍ ଅନଲକ୍‍ କରିବାବେଳେ ଟାଇପ୍‍ କରିଥିବା ଭୁଲ ପାସୱର୍ଡର ସଂଖ୍ୟାକୁ ନୀରିକ୍ଷଣ କରେ ଏବଂ ଫୋନ୍‍କୁ ଲକ୍‍ କରିଦିଏ କିମ୍ବା ଯଦି ଅନେକ ଭୁଲ ପାସୱର୍ଡ ଟାଇପ୍‍ କରାଯାଇଥାଏ, ତେବେ ଫୋନ୍‍ର ସମସ୍ତ ଡାଟା ଲିଭାଇଦିଏ।" @@ -892,10 +816,8 @@ "ପାଟର୍ନ ଅନଲକ୍‍।" "ଫେସ୍‍ ଅନଲକ୍‍।" "PIN ଅନଲକ୍‍।" - - - - + "PIN ଦ୍ଵାରା SIMକୁ ଅନଲକ୍ କରନ୍ତୁ।" + "PUK ଦ୍ଵାରା SIMକୁ ଅନଲକ୍ କରନ୍ତୁ।" "ପାସ୍‍ୱର୍ଡ ଅନଲକ୍‍।" "ପାଟର୍ନ କ୍ଷେତ୍ର।" "ସ୍ଲାଇଡ୍‍ କ୍ଷେତ୍ର।" @@ -920,8 +842,7 @@ "ଧ୍ୟାନଦିଅନ୍ତୁ: ଜୁମ୍‌ ଇନ୍‍ ଓ ଆଉଟ୍‍ କରିବା ପାଇଁ ଡବଲ୍‍-ଟାପ୍‌ କରନ୍ତୁ" "ସ୍ୱତଃପୂରଣ" "ଅଟୋଫିଲ୍ ସେଟ୍ କରନ୍ତୁ" - - + "ଅଟୋଫିଲ୍‌" " " "$1$2$3" ", " @@ -958,6 +879,12 @@ "ଟେକ୍ସଟ୍‍ କ୍ଲିପବୋର୍ଡକୁ କପୀ ହୋଇଯାଇଛି" "ଅଧିକ" "ମେନୁ" + "Meta+" + "Ctrl+" + "Alt+" + "Shift+" + "Sym+" + "Function+" "ସ୍ପେସ୍‍" "ଏଣ୍ଟର୍" "ଡିଲିଟ୍‍" @@ -1073,8 +1000,7 @@ "ସବୁ ଚୟନ କରନ୍ତୁ" "କଟ୍‌" "କପୀ" - - + "କ୍ଲିପ୍‌ବୋର୍ଡକୁ କପୀ କରିହେଲା ନାହିଁ" "ପେଷ୍ଟ କରନ୍ତୁ" "ସାଦା ଟେକ୍ସଟ୍‍ ଭାବରେ ପେଷ୍ଟ କରନ୍ତୁ" "ବଦଳାନ୍ତୁ…" @@ -1083,30 +1009,38 @@ "ଟେକ୍ସଟ୍‍ ଚୟନ କରନ୍ତୁ" "ପୂର୍ବ ପରି କରନ୍ତୁ" "ପୁଣି କରନ୍ତୁ" - - + "ଅଟୋଫିଲ୍‌" "ଟେକ୍ସଟ୍‍ ଚୟନ" "ଶବ୍ଦକୋଷରେ ଯୋଡ଼ନ୍ତୁ" "ଡିଲିଟ୍‍ କରନ୍ତୁ" "ଇନପୁଟ୍ ପଦ୍ଧତି" "ଟେକ୍ସଟ୍‌ କାର୍ଯ୍ୟ" - + "ଇମେଲ୍" + - + "କଲ୍ କରନ୍ତୁ" + - + "ଠାବ କରନ୍ତୁ" + - + "ଖୋଲନ୍ତୁ" + - + "ମେସେଜ୍‌" + - + "ଯୋଡ଼ନ୍ତୁ" + - + "ଦେଖନ୍ତୁ" + - + "ନିର୍ଦ୍ଧାରିତ କରନ୍ତୁ" + - + "ଟ୍ରାକ୍‌ କରନ୍ତୁ" + "ଷ୍ଟୋରେଜ୍‌ ସ୍ପେସ୍‌ ଶେଷ ହେବାରେ ଲାଗିଛି" "କିଛି ସିଷ୍ଟମ ଫଙ୍କଶନ୍‍ କାମ କରିନପାରେ" @@ -1123,36 +1057,25 @@ "ଅଫ୍" "ବ୍ୟବହାର କରି କାର୍ଯ୍ୟ ସମ୍ପୂର୍ଣ୍ଣ କରନ୍ତୁ" "%1$s ବ୍ୟବହାର କରି କାର୍ଯ୍ୟ ସମ୍ପୂର୍ଣ୍ଣ କରନ୍ତୁ" - - + "କାର୍ଯ୍ୟ ସମ୍ପୂର୍ଣ୍ଣ କରନ୍ତୁ" "ସହିତ ଖୋଲନ୍ତୁ" "%1$s ସହିତ ଖୋଲନ୍ତୁ" - - + "ଖୋଲନ୍ତୁ" "ସହିତ ଏଡିଟ୍‌ କରନ୍ତୁ" "%1$sରେ ସଂଶୋଧନ କରନ୍ତୁ" - - + "ଏଡିଟ୍‌ କରନ୍ତୁ" "ଏହାଙ୍କ ସହ ଶେୟାର୍‌ କରନ୍ତୁ" "%1$s ସହିତ ଶେୟାର୍‌ କରନ୍ତୁ" - - - - - - - - + "ଶେୟାର୍‌ କରନ୍ତୁ" + "ଏହା ଜରିଆରେ ପଠାନ୍ତୁ" + "%1$s ଜରିଆରେ ପଠାନ୍ତୁ" + "ପଠାନ୍ତୁ" "ହୋମ୍‍ ଆପ୍‌ ଚୟନ କରନ୍ତୁ" "ହୋମ୍‍ ରୂପରେ %1$s ବ୍ୟବହାର କରନ୍ତୁ" - - - - - - - - + "ଇମେଜ୍‍ କ୍ୟାପଚର୍ କରନ୍ତୁ" + "ଏହା ସହ ଇମେଜ୍‍ କ୍ୟାପଚର୍ କରନ୍ତୁ" + "%1$s ସହ ଇମେଜ୍‍ କ୍ୟାପଚର୍ କରନ୍ତୁ" + "ଇମେଜ୍‍ କ୍ୟାପଚର୍ କରନ୍ତୁ" "ଏହି କାର୍ଯ୍ୟ ପାଇଁ ଡିଫଲ୍ଟ ଭାବେ ବ୍ୟବହାର କରନ୍ତୁ।" "ଏକ ଭିନ୍ନ ଆପ୍‌ର ବ୍ୟବହାର କରନ୍ତୁ" "\"ସିଷ୍ଟମ୍‍ ସେଟିଙ୍ଗ > ଆପ୍‍ > ଡାଉନଲୋଡ୍‍ କରାଯାଇଛି\"ରେ ଡିଫଲ୍ଟ ଖାଲି କରନ୍ତୁ।" @@ -1161,28 +1084,19 @@ "କୌଣସି ଆପ୍‍ ଏହି କାର୍ଯ୍ୟ କରିପାରିବ ନାହିଁ।" "%1$s ବନ୍ଦ ହୋଇଯାଇଛି" "%1$s ବନ୍ଦ ହୋଇଯାଇଛି" - - - - + "%1$s ବାରମ୍ବାର ବନ୍ଦ ହେଉଛି" + "%1$s ବାରମ୍ବାର ବନ୍ଦ ହେଉଛି" "ଆପ୍‌କୁ ପୁଣି ଖୋଲନ୍ତୁ" "ମତାମତ ପଠାନ୍ତୁ" "ବନ୍ଦ କରନ୍ତୁ" - - - - - - + "ଡିଭାଇସ୍‍ ରିଷ୍ଟାର୍ଟ ନହେବା ପର୍ଯ୍ୟନ୍ତ ମ୍ୟୁଟ୍‍ ରଖନ୍ତୁ" + "ଅପେକ୍ଷା କରନ୍ତୁ" + "ଆପ୍‍ ବନ୍ଦ କରନ୍ତୁ" - - - - - - - - + "%2$s କାମ କରୁନାହିଁ" + "%1$s କାମ କରୁନାହିଁ" + "%1$s କାମ କରୁନାହିଁ" + "%1$s ପ୍ରୋସେସ୍‍ କାମ କରୁନାହିଁ" "ଠିକ୍‍ ଅଛି" "ରିପୋର୍ଟ" "ଅପେକ୍ଷା କରନ୍ତୁ" @@ -1195,49 +1109,33 @@ "\"ସିଷ୍ଟମ୍‍ ସେଟିଙ୍ଗ > ଆପ୍‍ > ଡାଉନଲୋଡ୍‍ କରାଯାଇଛି\"ରେ ଏହାକୁ ପୁନଃ-ସକ୍ଷମ କରନ୍ତୁ।" "%1$s ବର୍ତ୍ତମାନର ଡିସ୍‌ପ୍ଲେ ଆକାର ସେଟିଙ୍ଗ ସପୋର୍ଟ କରେନାହିଁ ଏବଂ ଅପ୍ରତ୍ୟାଶିତ କାର୍ଯ୍ୟ କରିପାରେ।" "ସର୍ବଦା ଦେଖାନ୍ତୁ" - - - - - - + "%1$s ଏକ କମ୍ପାଟିବଲ୍‍ ନଥିବା Android OSରେ ତିଆରି ହୋଇଛି ଏବଂ ଆକସ୍ମିକ ଗତିବିଧି ଦେଖାଦେଇପାରେ। ଆପ୍‍ର ଏକ ଅପଡେଟ୍‍ ଭର୍ସନ୍‍ ଉପଲବ୍ଧ ରହିପାରେ।" + "ସର୍ବଦା ଦେଖାନ୍ତୁ" + "କୌଣସି ଅପଡେଟ୍‌ ଅଛି କି ନାହିଁ ଦେଖନ୍ତୁ" "ଆପ୍‍ %1$s (ପ୍ରକ୍ରିୟା %2$s) ଏହାର ସ୍ୱ-ଲାଗୁ କରାଯାଇଥିବା ଷ୍ଟ୍ରିକ୍ଟ-ମୋଡ୍‍ ପଲିସୀ ଉଲ୍ଲଂଘନ କରିଛି।" "ଏହି {0/PROCESS%1$s ନିଜ ଦ୍ୱାରା ଲାଗୁ କରାଯାଇଥିବା ଷ୍ଟ୍ରିକ୍ଟମୋଡ୍‌ ପଲିସୀକୁ ଉଲ୍ଲଂଘନ କରିଛି।" - - - - - - - - - - - - + "ଫୋନ୍ ଅପଡେଟ୍ ହେଉଛି…" + "ଟାବଲେଟ୍ ଅପଡେଟ୍ ହେଉଛି…" + "ଡିଭାଇସ୍ ଅପଡେଟ୍ ହେଉଛି…" + "ଫୋନ୍ ଆରମ୍ଭ ହେଉଛି…" + "ଟାବଲେଟ୍ ଆରମ୍ଭ ହେଉଛି…" + "ଡିଭାଇସ୍ ଆରମ୍ଭ ହେଉଛି…" "ଷ୍ଟୋରେଜ୍‍ ବଢ଼ାଯାଉଛି" - - + "ସିଷ୍ଟମ୍ ଅପଡେଟ୍ ସମାପ୍ତ ହେଉଛି…" "%1$sକୁ ଅପଗ୍ରେଡ୍‍ କରାଯାଉଛି…" "%2$dରୁ %1$d ଆପ୍‍ ଅନୁକୂଳନ କରୁଛି।" "%1$s ପ୍ରସ୍ତୁତ କରାଯାଉଛି।" "ଆପ୍‍ ଆରମ୍ଭ କରାଯାଉଛି।" "ବୁଟ୍‍ ସମାପ୍ତ କରୁଛି।" "%1$s ଚାଲୁଛି" - - - - - - - - - - - - + "ଗେମ୍‌କୁ ଫେରିଆସିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ" + "ଗେମ୍ ଚୟନ କରନ୍ତୁ" + "ଆପ୍ଲିକେଶନ୍‌ ଭଲ ଭାବେ କାମ କରିବା ପାଇଁ ଗୋଟିଏ ସମୟରେ ଏହି ଗେମ୍‌ଗୁଡ଼ିକ ମଧ୍ୟରୁ କେବଳ ଗୋଟିଏକୁ ହିଁ ଚଲାଇପାରିବେ।" + "%1$sକୁ ଫେରିଆସନ୍ତୁ" + "%1$sକୁ ଖୋଲନ୍ତୁ" + "%1$s ସେଭ୍ ନହୋଇ ବନ୍ଦ ହୋଇଯିବ" "%1$s ଧାର୍ଯ୍ୟ ମେମୋରୀରୁ ବାହାରକୁ ଗଲା" - "ହିପ୍‍ ଡମ୍ପ ସଂଗ୍ରହ କରାଯାଇଛି; ଶେୟାର୍‍ କରିବା ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ" + "’ହୀପ୍ ଡମ୍ପ’ ସଂଗ୍ରହ କରାଯାଇସାରିଛି। ଶେୟାର୍ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ।" "ହିପ୍‌ ଡମ୍ପ ଶେୟାର୍‍ କରିବେ?" "%1$s ପ୍ରୋସେସ୍‍ ଏହାର ଧାର୍ଯ୍ୟ %2$s ମେମୋରୀ ସୀମାରୁ ବାହରକୁ ଗଲା। ଏହାର ଡେଭଲପରଙ୍କ ସହ ଶେୟାର୍‍ କରିବାକୁ ଏକ ହିପ୍‍ ଡମ୍ପ ଉପଲବ୍ଧ ଅଛି। ସାବଧାନ ରୁହନ୍ତୁ: ଆପ୍ଲିକେଶନର ଆକ୍ସେସ୍‍ ରହିଥିବା ଆପଣଙ୍କର ଯେକୌଣସି ବ୍ୟକ୍ତିଗତ ସୂଚନା ଏହି ହିପ୍‍ ଡମ୍ପରେ ରହିପାରେ।" "ଟେକ୍ସଟ୍‍ ପାଇଁ ଏକ କାର୍ଯ୍ୟ ବାଛନ୍ତୁ" @@ -1270,44 +1168,35 @@ ମୁକ୍ତ ୱାଇ-ଫାଇ ନେଟ୍‌ୱର୍କଗୁଡ଼ିକ ଉପଲବ୍ଧ ମୁକ୍ତ ୱାଇ-ଫାଇ ନେଟ୍‌ୱର୍କ ଉପଲବ୍ଧ - - - - - - - - - - - - - - - - - - - - - - - - - - + "ୱାଇ‑ଫାଇ ନେଟୱର୍କ ଖୋଲିବାକୁ କନେକ୍ଟ କରନ୍ତୁ" + "କେରିଅର୍ ୱାଇ-ଫାଇ ନେଟ୍‌ୱର୍କ ସହିତ କନେକ୍ଟ କରନ୍ତୁ" + "ୱାଇ-ଫାଇ ନେଟ୍‌ୱର୍କ ସହିତ କନେକ୍ଟ ହେଉଛି" + "ୱାଇ-ଫାଇ ନେଟ୍‌ୱର୍କରେ କନେକ୍ଟ ହୋଇଛି" + "ୱାଇ-ଫାଇ ନେଟ୍‌ୱର୍କରେ କନେକ୍ଟ କରିହେଲା ନାହିଁ" + "ସମସ୍ତ ନେଟ୍‌ୱର୍କ ଦେଖିବାକୁ ଟାପ୍‍ କରନ୍ତୁ" + "କନେକ୍ଟ କରନ୍ତୁ" + "ସମସ୍ତ ନେଟ୍‌ୱର୍କ" + "ୱାଇ-ଫାଇ ସ୍ୱଚାଳିତ ଭାବେ ଅନ୍ ହେବ" + "ଆପଣ ଏକ ଉଚ୍ଚ-କ୍ୱାଲିଟୀ ବିଶିଷ୍ଟ ସେଭ୍‌ କରାଯାଇଥିବା ନେଟ୍‌ୱର୍କ ପାଖରେ ଥିବା ସମୟରେ" + "ପୁଣି ଅନ୍‍ କରନ୍ତୁ ନାହିଁ" + "ୱାଇ-ଫାଇ ସ୍ୱଚାଳିତ ଭାବେ ଅନ୍‍ ହେଲା" + "ସେଭ୍ ହୋଇଥିବା ନେଟ୍‌ୱର୍କ ନିକଟରେ ଆପଣ ଅଛନ୍ତି: %1$s" "ୱାଇ-ଫାଇ ନେଟୱର୍କରେ ସାଇନ୍‍-ଇନ୍‍ କରନ୍ତୁ" "ନେଟ୍‌ୱର୍କରେ ସାଇନ୍‍ ଇନ୍‍ କରନ୍ତୁ" - - + "ୱାଇ-ଫାଇର କୌଣସି ଇଣ୍ଟରନେଟ୍‍ ଆକ୍ସେସ୍‍ ନାହିଁ" "ବିକଳ୍ପ ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ" "%1$sକୁ ବଦଳାଗଲା" - - + "%2$sର ଇଣ୍ଟରନେଟ୍‍ ଆକ୍ସେସ୍ ନଥିବାବେଳେ ଡିଭାଇସ୍‍ %1$s ବ୍ୟବହାର କରିଥାଏ। ଶୁଳ୍କ ଲାଗୁ ହୋଇପାରେ।" "%1$s ରୁ %2$sକୁ ବଦଳାଗଲା" - + + "ମୋବାଇଲ୍‌ ଡାଟା" + "ୱାଇ-ଫାଇ" + "ବ୍ଲୁ-ଟୁଥ୍‌" + "ଇଥରନେଟ୍‌" + "VPN" + "ଏକ ଅଜଣା ନେଟ୍‌ୱର୍କ ପ୍ରକାର" "ୱାଇ-ଫାଇ ସହ ସଂଯୋଗ ହୋଇପାରିଲା ନାହିଁ" " ଏହାର ଦୁର୍ବଳ ଇଣ୍ଟରନେଟ୍‍ ସଂଯୋଗ ରହିଛି।" @@ -1350,18 +1239,12 @@ "SIM କାର୍ଡ ଯୋଡ଼ାଯାଇଛି" "ମୋବାଇଲ୍‍ ନେଟ୍‍ୱର୍କ ଆକ୍ସେସ୍‌ କରିବା ପାଇଁ ଆପଣଙ୍କ ଡିଭାଇସ୍‍କୁ ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ" "ରିଷ୍ଟାର୍ଟ କରନ୍ତୁ" - - - - - - - - - - - - + "ମୋବାଇଲ୍ ସେବା ସକ୍ରିୟ କରନ୍ତୁ" + "ଆପଣଙ୍କର ନୂତନ SIMକୁ ସକ୍ରିୟ କରିବା ପାଇଁ କ୍ୟାରିଅର୍‌ ଆପ୍‌କୁ ଡାଉନଲୋଡ୍ କରନ୍ତୁ" + "ଆପଣଙ୍କର ନୂତନ SIMକୁ ସକ୍ରିୟ କରିବା ପାଇଁ %1$s ଆପ୍‌କୁ ଡାଉନଲୋଡ୍ କରନ୍ତୁ" + "ଆପ୍‌ ଡାଉନଲୋଡ୍‌ କରନ୍ତୁ" + "ନୂଆ SIM କାର୍ଡ ଭର୍ତ୍ତି କରାଗଲା" + "ଏହା ସେଟଅପ୍‌ କରିବା ପାଇଁ ଟାପ୍‌ କରନ୍ତୁ" "ସମୟ ସେଟ୍ କରନ୍ତୁ" "ତାରିଖ ସେଟ୍‍ କରନ୍ତୁ" "ସେଟ୍‍ କରନ୍ତୁ" @@ -1371,90 +1254,81 @@ "କୌଣସି ଅନୁମତିର ଆବଶ୍ୟକତା ନାହିଁ" "ଶୁଳ୍କ ଲାଗୁ ହୋଇପାରେ" "ଠିକ୍‍ ଅଛି" - - - - - - - - - - - - - - + "USB ମାଧ୍ୟମରେ ଏହି ଡିଭାଇସ୍‌କୁ ଚାର୍ଜ କରନ୍ତୁ" + "USB ମାଧ୍ୟମରେ ଯୋଡ଼ାଯାଇଥିବା ଡିଭାଇସ୍ ଚାର୍ଜ ହେଉଛି" + "USB ଫାଇଲ୍ ଟ୍ରାନ୍ସଫର୍ ଚାଲୁ କରାଗଲା" + "USB ମାଧ୍ୟମରେ PTPକୁ ଚାଲୁ କରାଗଲା" + "USB ଟିଥରିଙ୍ଗ ଚାଲୁ କରାଗଲା" + "USB ମାଧ୍ୟମରେ MIDIକୁ ଚାଲୁ କରାଗଲା" + "USB ଆକ୍ସେସୋରୀ ଯୋଡ଼ାଗଲା" "ଅଧିକ ବିକଳ୍ପ ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ।" - - - - - - + "ଯୋଡ଼ାଯାଇଥିବା ଡିଭାଇସ୍ ଚାର୍ଜ ହେଉଛି। ଅଧିକ ବିକଳ୍ପ ପାଇଁ ଟାପ୍ କରନ୍ତୁ।" + "ଆନାଲଗ୍‍ ଅଡିଓ ଆକ୍ସେସରୀ ଚିହ୍ନଟ ହେଲା" + "ଏହି ଫୋନ୍‌ରେ କନେକ୍ଟ ଥିବା ଡିଭାଇସ୍‍ କମ୍ପାଟିବଲ୍‍ ନୁହେଁ। ଅଧିକ ଜାଣିବା ପାଇଁ ଟାପ୍‌ କରନ୍ତୁ।" "USB ଡିବଗିଙ୍ଗ ସଂଯୁକ୍ତ ହୋଇଛି" - "USB ଡିବଗିଙ୍ଗକୁ ଅକ୍ଷମ କରିବା ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ।" + "USBର ଡିବଗିଙ୍ଗ ସୁବିଧାକୁ ବନ୍ଦ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ" "USB ଡିବଗିଙ୍ଗକୁ ଅକ୍ଷମ କରିବା ପାଇଁ ଚୟନ କରନ୍ତୁ।" - - - - - - - - - - - - + "ବଗ୍ ରିପୋର୍ଟ ନିଆଯାଉଛି…" + "ବଗ୍‍ ରିପୋର୍ଟ ଶେୟାର୍‌ କରିବେ?" + "ବଗ୍‍ ରିପୋର୍ଟ ଶେୟାର୍‌ କରାଯାଉଛି…" + "ଏହି ଡିଭାଇସ୍‌ର ସମସ୍ୟା ସମାଧାନ କରିବା ପାଇଁ ଆପଣଙ୍କର ଆଡମିନ୍‌ ଏକ ବଗ୍‍ ରିପୋର୍ଟ ମାଗିଛନ୍ତି। ଆପ୍‍ ଓ ଡାଟା ଶେୟର୍‌ କରାଯାଇପାରେ।" + "ଶେୟାର୍‌ କରନ୍ତୁ" + "ପ୍ରତ୍ୟାଖ୍ୟାନ କରନ୍ତୁ" "କୀ’ବୋର୍ଡ ପରିବର୍ତ୍ତନ କରନ୍ତୁ" "ଫିଜିକାଲ୍‌ କୀ’ବୋର୍ଡ ସକ୍ରିୟ ଥିବାବେଳେ ଏହାକୁ ସ୍କ୍ରୀନ୍‌ ଉପରେ ରଖନ୍ତୁ" "ଭର୍ଚୁଆଲ୍ କୀ’ବୋର୍ଡ ଦେଖାନ୍ତୁ" - - - - + "ଫିଜିକଲ୍ କୀ\'ବୋର୍ଡ କନଫିଗର୍‍ କରନ୍ତୁ" + "ଭାଷା ଓ ଲେଆଉଟ୍‍ ଚୟନ କରିବା ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ" " ABCDEFGHIJKLMNOPQRSTUVWXYZ" " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" - + "ଅନ୍ୟ ଆପ୍‌ଗୁଡ଼ିକ ଉପରେ ଦେଖାନ୍ତୁ" + "%s ଅନ୍ୟ ଆ‍ପ୍‍ ଉପରେ ଦେଖାଯାଉଛି" + "%s ଅନ୍ୟ ଆପ୍‍ ଉପରେ ଦେଖାଯାଉଛି" + "ଏହି ବୈଶିଷ୍ଟ୍ୟ %s ବ୍ୟବହାର ନକରିବାକୁ ଯଦି ଆପଣ ଚାହାଁନ୍ତି, ସେଟିଙ୍ଗ ଖୋଲିବାକୁ ଟାପ୍‍ କରନ୍ତୁ ଏବଂ ଏହା ଅଫ୍‍ କରିଦିଅନ୍ତୁ।" + "ବନ୍ଦ କରନ୍ତୁ" + - + - + - + - - - "%s ପ୍ରସ୍ତୁତ କରାଯାଉଛି" - "ତ୍ରୁଟି ପାଇଁ ଯାଞ୍ଚ କରାଯାଉଛି" - "ନୂଆ %s ଚିହ୍ନଟ ହେଲା" "ଫଟୋ ଓ ମିଡିଆ ସ୍ଥାନାନ୍ତର କରାଯିବା ପାଇଁ" - "%s କରପ୍ଟ ହୋଇଯାଇଛି" - "%s କରପ୍ଟ ହୋଇଯାଇଛି। ଠିକ୍‍ କରିବା ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ।" - + + + "%s ସପୋର୍ଟ କରୁନାହିଁ" "ଏହି ଡିଭାଇସ୍ ଏହି %sକୁ ସପୋର୍ଟ କରେନାହିଁ। ଗୋଟିଏ ସପୋର୍ଟ କରୁଥିବା ଫର୍ମାଟ୍‌ରେ ସେଟ୍‍ ଅପ୍‍ କରିବା ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ।" - - + "ଏହି ଡିଭାଇସ୍ ଏହି %sକୁ ସପୋର୍ଟ କରେ ନାହିଁ। ଗୋଟିଏ ସପୋର୍ଟ କରୁଥିବା ଫର୍ମାଟରେ ସେଟ୍‍ ଅପ୍‍ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ।" "%sକୁ ହଠାତ୍‌ କାଢ଼ିଦିଆଗଲା" - "ଡାଟା ନଷ୍ଟ ନହେବା ପାଇଁ ବାହାର କରିବା ପୂର୍ବରୁ %sକୁ ଅନ୍‌ମାଉଣ୍ଟ କରନ୍ତୁ" - "%s କାଢ଼ିଦିଆଗଲା" - "%s ବାହାର କରାଗଲା; ନୂଆ ଗୋଟିଏ ଭର୍ତ୍ତି କରନ୍ତୁ" - "%s ଏପର୍ଯ୍ୟନ୍ତ ବାହାର କରାଯାଉଛି…" - "କାଢ଼ନ୍ତୁ ନାହିଁ" + + + + + + + + + + "ସେଟ୍ ଅପ୍ କରନ୍ତୁ" "ବାହାର କରନ୍ତୁ" "ଖୋଜନ୍ତୁ" "%s ନାହିଁ" - "ଏହି ଡିଭାଇସ୍‍ ପୁଣି ଭର୍ତ୍ତି କରନ୍ତୁ" + + "%s ନିଆଯାଉଛି" "ଡାଟା ନିଆଯାଉଛି" - "ନେବା ସମ୍ପୂର୍ଣ୍ଣ ହେଲା" - "ଡାଟା %sକୁ ନିଆଗଲା" - "ଡାଟା ନିଆଯାଇପାରିଲା ନାହିଁ" - "ଡାଟାକୁ ମୂଳ ଲୋକେଶନରେ ଛାଡ଼ିଦିଆଗଲା" + + + + + + + + "ବାହାର କରିଦିଆଗଲା" "ବାହାର କରାଗଲା" "ଯାଞ୍ଚ କରାଯାଉଛି…" @@ -1473,10 +1347,8 @@ "ଅନୁପ୍ରୟୋଗର ଇନଷ୍ଟଲ୍‍ ଅବଧିକୁ ପଢିବାକୁ ଅନୁମତି ଦେଇଥାଏ। ଏହି ସକ୍ରିୟ ପ୍ୟାକେଜ୍‌କୁ ଇନଷ୍ଟଲ୍‍ ବିଷୟରେ ବିବରଣୀ ଦେଖିବାକୁ ଅନୁମତି ଦେଇଥାଏ।" "ପ୍ୟାକେଜ୍‍ ଇନଷ୍ଟଲ୍‍ କରିବା ପାଇଁ ଅନୁରୋଧ କରନ୍ତୁ" "ପ୍ୟାକେଜଗୁଡ଼ିକର ଇନଷ୍ଟଲେଶନ୍‍ ଅନୁରୋଧ କରିବା ପାଇଁ ଆପ୍ଲିକେଶନକୁ ଅନୁମତି ଦିଏ।" - - - - + "ପ୍ୟାକେଜ୍‍ ଡିଲିଟ୍‍ କରିବାକୁ ଅନୁରୋଧ କରେ" + "ପ୍ୟାକେଜ୍‌ଗୁଡ଼ିକ ଡିଲିଟ୍‍ କରିବା ପାଇଁ ଅନୁରୋଧ କରିବାକୁ ଏକ ଆପ୍ଲିକେଶନକୁ ଅନୁମତି ଦେଇଥାଏ।" "ବ୍ୟାଟେରୀ ଅନୁକୂଳନ ଏଡ଼ାଇବା ପାଇଁ ପଚାରନ୍ତୁ" "ଆପ୍‍ ପାଇଁ ବ୍ୟାଟେରୀ ଅନୁକୂଳନ ଏଡ଼ାଇବାର ଅନୁମତି ମାଗିବା ନିମନ୍ତେ ଆପ୍‍କୁ ଅନୁମତି ଦେଇଥାଏ।" "ଜୁମ୍ ନିୟନ୍ତ୍ରଣ ପାଇଁ ଦୁଇଥର ଟାପ୍‌ କରନ୍ତୁ" @@ -1505,34 +1377,28 @@ "ୱାଲପେପର୍" "ୱାଲପେପର୍‍ ପରିବର୍ତ୍ତନ କରନ୍ତୁ।" "ବିଜ୍ଞପ୍ତି ଶ୍ରୋତା" - - + "VR ଲିସନର୍" "ସର୍ତ୍ତ ପ୍ରଦାତା" - - + "ବିଜ୍ଞପ୍ତି ରେଙ୍କର୍ ସର୍ଭିସ୍‌" "VPN ସକ୍ରିୟ ହେଲା" "%s ଦ୍ୱାରା VPN ସକ୍ରିୟ କରାଯାଇଛି" "ନେଟ୍‌ୱର୍କକୁ ପରିଚାଳନା କରିବା ପାଇଁ ଟାପ୍‌ କରନ୍ତୁ।" "%sରେ ସଂଯୋଗ କରାଯାଇଛି। ନେଟୱର୍କକୁ ପରିଚାଳନା କରିବାକୁ ଟାପ୍‌ କରନ୍ତୁ।" "ସର୍ବଦା-ଅନ୍‍ VPNରେ ସଂଯୋଗ କରୁଛି…" "ସର୍ବଦା-ଅନ୍‍ VPN ସଂଯୁକ୍ତ" - - - "ସର୍ବଦା-ଅନ୍‍ VPN ତ୍ରୁଟି" - - + "ସର୍ବଦା-ଅନ୍‌ ଥିବା VPNରୁ ବିଚ୍ଛିନ୍ନ କରନ୍ତୁ" + "ସର୍ବଦା ଅନ୍‍ ଥିବା VPN ସହ କନେକ୍ଟ କରିପାରିବ ନାହିଁ" + "ନେଟ୍‌ୱର୍କ କିମ୍ବା VPN ସେଟିଙ୍ଗ ବଦଳାନ୍ତୁ" "ଫାଇଲ୍ ଚୟନ କରନ୍ତୁ" "କୌଣସି ଫାଇଲ୍ ଚୟନ କରାଯାଇନାହିଁ" "ରିସେଟ୍‍ କରନ୍ତୁ" "ଦାଖଲ କରନ୍ତୁ" - "କାର୍ ମୋଡ୍ ସକ୍ଷମ କରାଯାଇଛି" - "କାର୍‍ ମୋଡ୍‌ରୁ ବାହାରିଯିବା ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ" + "ଡ୍ରାଇଭିଙ୍ଗ ଆପ୍ ଚାଲୁଛି" + "ଡ୍ରାଇଭିଙ୍ଗ ଆପ୍‌ରୁ ବାହାରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ।" "ଟିଥରିଙ୍ଗ କିମ୍ୱା ହଟସ୍ପଟ୍‌ ସକ୍ରିୟ ଅଛି" "ସେଟଅପ୍‍ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ।" - - - - + "ଟିଥରିଙ୍ଗ ଅକ୍ଷମ କରାଯାଇଛି" + "ବିବରଣୀ ପାଇଁ ନିଜ ଆଡମିନ୍‌ଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ" "ଫେରନ୍ତୁ" "ପରବର୍ତ୍ତୀ" "ଛାଡ଼ିଦିଅନ୍ତୁ" @@ -1599,37 +1465,26 @@ "ଅଧିକ ବିକଳ୍ପ" "%1$s, %2$s" "%1$s, %2$s, %3$s" - - + "ଶେୟାର୍‍ କରାଯାଇଥିବା ଇଣ୍ଟର୍ନଲ୍‍ ଷ୍ଟୋରେଜ୍‌" "SD କାର୍ଡ" "%s SD କାର୍ଡ" "USB ଡ୍ରାଇଭ୍‍" "%s USB ଡ୍ରାଇଭ୍‍" "USB ଷ୍ଟୋରେଜ୍‌" "ଏଡିଟ୍‌ କରନ୍ତୁ" - - - - - - + "ଡାଟା ଚେତାବନୀ" + "ଆପଣ %s ଡାଟା ବ୍ୟବହାର କରିସାରିଛନ୍ତି" + "ମୋବାଇଲ୍ ଡାଟା ଧାର୍ଯ୍ୟ ସୀମାରେ ପହଞ୍ଚିଲା" "ୱାଇ-ଫାଇ ଡାଟା ସୀମାରେ ପହଞ୍ଚିଗଲା" - - - - - - - - + "ଆପଣଙ୍କର ଅବଶିଷ୍ଟ ଚକ୍ର ପାଇଁ ଡାଟାକୁ ପଜ୍ କରିଦିଆଯାଇଛି" + "ମୋବାଇଲ୍ ଡାଟା ସୀମାଠାରୁ ଅଧିକ" + "ଆପଣଙ୍କ ୱାଇ-ଫାଇ ଡାଟା ସୀମାଠାରୁ ଅଧିକ" + "ଆପଣଙ୍କର ଧାର୍ଯ୍ୟ ସୀମାଠାରୁ %sକୁ ଅତିକ୍ରମ କରିଛନ୍ତି" "ବ୍ୟାକଗ୍ରାଉଣ୍ଡ ଡାଟା ପ୍ରତିବନ୍ଧିତ" "ପ୍ରତିବନ୍ଧକ ବାହାର କରିବା ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ।" - - - - - - + "ମୋବାଇଲ୍ ଡାଟାର ଅଧିକ ବ୍ୟବହାର" + "ଆପଣଙ୍କର ଆପ୍‌ଗୁଡ଼ିକ ଦ୍ୱାରା ଦରକାରଠାରୁ ଅଧିକ ଡାଟା ବ୍ୟବହାର ହୋଇଛି" + "%s ଦରକାରଠାରୁ ଅଧିକ ଡାଟା ବ୍ୟବହାର କରିଛି" "ସୁରକ୍ଷା ସର୍ଟିଫିକେଟ୍‍" "ସର୍ଟିଫିକେଟ୍‍ ବୈଧ ନୁହେଁ।" "ଏହାଙ୍କୁ ଜାରି କରାଯାଇଛି:" @@ -1657,11 +1512,9 @@ "TV" "ଫୋନ୍" "ଡକ୍‌ ସ୍ପିକର୍‌" - - + "HDMI" "ହେଡଫୋନ୍‍" - - + "USB" "ସିଷ୍ଟମ୍‌" "ବ୍ଲୁ-ଟୁଥ୍‌ ଅଡିଓ" "ୱେୟାର୍‍ଲେସ୍‍ ଡିସ୍‍ପ୍ଲେ" @@ -1685,7 +1538,10 @@ "ଭୁଲ ପାଟର୍ନ" "ଭୁଲ ପାସ୍‌ୱର୍ଡ" "ଭୁଲ PIN" - + + %d ସେକେଣ୍ଡ ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ। + 1 ସେକେଣ୍ଡ ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ। + "ନିଜ ପାଟର୍ନ ଆଙ୍କନ୍ତୁ" "SIM PIN ଲେଖନ୍ତୁ" "PIN ଲେଖନ୍ତୁ" @@ -1722,35 +1578,23 @@ " — " "ବାହାର କରନ୍ତୁ" "ମାତ୍ରା ବଢ଼ାଇ ସୁପାରିସ ସ୍ତର ବଢ଼ାଉଛନ୍ତି? \n\n ଲମ୍ବା ସମୟ ପର୍ଯ୍ୟନ୍ତ ଉଚ୍ଚ ଶବ୍ଦରେ ଶୁଣିଲେ ଆପଣଙ୍କ ଶ୍ରବଣ ଶକ୍ତି ଖରାପ ହୋଇପାରେ।" - - - - - - - - - - - - - - - - - - - - - - + "ଆକ୍ସେସବିଲିଟି ଶର୍ଟକଟ୍‍ ବ୍ୟବହାର କରିବେ?" + "ସର୍ଟକଟ୍‌ ଅନ୍‌ ଥିବା ବେଳେ, ଉଭୟ ଭଲ୍ୟୁମ୍‍ ବଟନ୍‍ 3 ସେକେଣ୍ଡ ପାଇଁ ଦବାଇବା ଦ୍ୱାରା ଆକ୍ସେସବିଲିଟି ବୈଶିଷ୍ଟ ଆରମ୍ଭ ହେବ।\n\n ସମ୍ପ୍ରତି ଆକ୍ସେସବିଲିଟି ବୈଶିଷ୍ଟ୍ୟ:\n %1$s\n\n ସେଟିଙ୍ଗ ଓ ଆକ୍ସେସବିଲିଟିରେ ଆପଣ ବୈଶିଷ୍ଟ୍ୟ ବଦଳାଇ ପାରିବେ।" + "ଶର୍ଟକଟ୍‍ ବନ୍ଦ କରନ୍ତୁ" + "ଶର୍ଟକଟ୍‍ ବ୍ୟବହାର କରନ୍ତୁ" + "ରଙ୍ଗ ବଦଳାଇବାର ସୁବିଧା" + "ରଙ୍ଗ ସଂଶୋଧନ" + "ଆକ୍ସେସିବିଲିଟୀ ଶର୍ଟକଟ୍‍ %1$s ଅନ୍‍ କରାଯାଇଛି" + "ଆକ୍ସେସିବିଲିଟୀ ଶର୍ଟକଟ୍‍ %1$s ଅଫ୍‍ କରାଯାଇଛି" + "ଆପଣ ଆକ୍ସେସବିଲିଟି ବଟନ୍‍ ଟାପ୍‍ କରିବା ବେଳେ ଏକ ବୈଶିଷ୍ଟ୍ୟ ବ୍ୟବହାର କରିବାକୁ ବାଛନ୍ତୁ:" + "ବୈଶିଷ୍ଟ୍ୟ ବଦଳାଇବାକୁ, ଆକ୍ସେସବିଲିଟି ବଟନ୍‍ ସ୍ପର୍ଶ କରନ୍ତୁ ଓ ଧରିରଖନ୍ତୁ।" + "ମ୍ୟାଗ୍ନିଫିକେସନ୍‍" "ବର୍ତ୍ତମାନର ୟୁଜର୍‌ ହେଉଛନ୍ତି %1$s।" "%1$s ରେ ସୁଇଚ୍ କରନ୍ତୁ…" "%1$sଙ୍କୁ ଲଗଆଉଟ୍‍ କରାଯାଉଛି…" "ମାଲିକ" "ତ୍ରୁଟି" - - + "ଏହି ପରିବର୍ତ୍ତନ ପାଇଁ ଆପଣଙ୍କ ଆଡମିନ୍‌ ଅନୁମତି ଦେଇନାହାଁନ୍ତି" "ଏହି କାର୍ଯ୍ୟକୁ ନିୟନ୍ତ୍ରଣ କରିବା ପାଇଁ କୌଣସି ଆପ୍ଲିକେଶନ୍‍ ମିଳିଲା ନାହିଁ" "ବାହାର କରନ୍ତୁ" "ISO A0" @@ -1842,8 +1686,7 @@ "ପ୍ରିଣ୍ଟ ସେବାକୁ ସକ୍ଷମ କରାଯାଇନାହିଁ" "%s ସେବା ଇନଷ୍ଟଲ୍‍ କରାଯାଇସାରିଛି" "ସକ୍ଷମ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ" - - + "ଆଡମିନ୍‌ PIN ଲେଖନ୍ତୁ" "PIN ଲେଖନ୍ତୁ" "ଭୁଲ" "ବର୍ତ୍ତମାନର PIN" @@ -1874,16 +1717,11 @@ "ଅନପିନ୍‌ କରିବା ପୂର୍ବରୁ PIN ପଚାରନ୍ତୁ" "ଅନପିନ୍‌ କରିବା ପୂର୍ବରୁ ଲକ୍‌ ଖୋଲିବା ପାଟର୍ନ ପଚାରନ୍ତୁ" "ଅନପିନ୍‌ କରିବା ପୂର୍ବରୁ ପାସ୍‌ୱର୍ଡ ପଚାରନ୍ତୁ" - - - - - - - - - - + "ଆପଣଙ୍କ ଆଡମିନ୍‌‌ ଇନଷ୍ଟଲ୍‍ କରିଛନ୍ତି" + "ଆପଣଙ୍କ ଆଡମିନ୍‌‌ ଅପଡେଟ୍‍ କରିଛନ୍ତି" + "ଆପଣଙ୍କ ଆଡମିନ୍‌‌ ଡିଲିଟ୍‍ କରିଛନ୍ତି" + "ବ୍ୟାଟେରୀ ଜୀବନକୁ ବଢ଼ାଇବା ପାଇଁ, ବ୍ୟାଟେରୀ ସେଭର୍ ଆପଣଙ୍କ ଡିଭାଇସ୍‌ରେ କେବଳ ଜରୁରୀ ଆପ୍‌ଗୁଡ଼ିକୁ କାର୍ଯ୍ୟକ୍ଷମ ରଖିଥାଏ। ଏହି ସୁବିଧା ଚାଲୁ ହେବା ଦ୍ଵାରା ଭାଇବ୍ରେଶନ୍, ଅବସ୍ଥିତି ସେବା ଓ ବ୍ୟାକଗ୍ରାଉଣ୍ଡ ଡାଟାର ବ୍ୟବହାର କମ୍ କିମ୍ବା ବନ୍ଦ ହୋଇଯାଏ। ଇମେଲ୍, ମେସେଜିଙ୍ଗ ଓ ଅନ୍ୟ ଆପ୍‌ଗୁଡ଼ିକ, ଯାହା ସିଙ୍କ ଉପରେ ନିର୍ଭର କରିଥା’ନ୍ତି, ସେଗୁଡ଼ିକୁ ନଖୋଲିବା ପର୍ଯ୍ୟନ୍ତ ଅପଡେଟ୍ ହେବେନାହିଁ। \n\n ଆପଣଙ୍କ ଡିଭାଇସ୍ ଚାର୍ଜ ହେଉଥିବାବେଳେ ବ୍ୟାଟେରୀ ସେଭର୍ ସ୍ଵଚାଳିତ ଭାବେ ବନ୍ଦ ହୋଇଯାଇଥାଏ।" + "ଡାଟା ବ୍ୟବହାର କମ୍‍ କରିବାରେ ସାହାଯ୍ୟ କରିବାକୁ, ଡାଟା ସେଭର୍‍ ବ୍ୟାକ୍‌ଗ୍ରାଉଣ୍ଡରେ ଡାଟା ପଠାଇବା କିମ୍ବା ପ୍ରାପ୍ତ କରିବାକୁ କିଛି ଆପ୍‍କୁ ବ୍ଲକ୍‌ କରେ। ଆପଣ ବର୍ତ୍ତମାନ ବ୍ୟବହାର କରୁଥିବା ଆପ୍‍, ଡାଟା ଆକ୍ସେସ୍‍ କରିପାରେ, କିନ୍ତୁ ଏହା କମ୍‍ ସମୟରେ କରିପାରେ। ଏହାର ଅର୍ଥ ହୋଇପାରେ, ଯେପରି, ଆପଣ ଟାପ୍‍ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ଯେଉଁ ଇମେଜ୍‍ ଦେଖାଯାଏ ନାହିଁ।" "ଡାଟା ସେଭର୍‌ ଅନ୍ କରିବେ?" "ଅନ୍ କରନ୍ତୁ" @@ -1894,9 +1732,9 @@ %1$d ମିନିଟ୍ ପାଇଁ (%2$s ପର୍ଯ୍ୟନ୍ତ) 1 ମିନିଟ୍ ପାଇଁ (%2$s ପର୍ଯ୍ୟନ୍ତ) - + %1$d ଘଣ୍ଟା ପାଇଁ (%2$s ପର୍ଯ୍ୟନ୍ତ) - ଏକ ଘଣ୍ଟା ପାଇଁ (%2$s ପର୍ଯ୍ୟନ୍ତ) + , 1 ଘଣ୍ଟା ପାଇଁ (%2$s ପର୍ଯ୍ୟନ୍ତ) %1$d ଘଣ୍ଟା ପାଇଁ (%2$s ପର୍ଯ୍ୟନ୍ତ) @@ -1910,9 +1748,9 @@ %d ମିନିଟ୍ ପାଇଁ 1 ମିନିଟ୍ ପାଇଁ - + %d ଘଣ୍ଟା ପାଇଁ - ଏକ ଘଣ୍ଟା ପାଇଁ + , 1 ଘଣ୍ଟା ପାଇଁ %d ଘଣ୍ଟା ପାଇଁ @@ -1920,8 +1758,7 @@ "%1$s ପର୍ଯ୍ୟନ୍ତ" "%1$s (ପରବର୍ତ୍ତୀ ଆଲାର୍ମ) ପର୍ଯ୍ୟନ୍ତ" - - + "ବନ୍ଦ ନକରିବା ପର୍ଯ୍ୟନ୍ତ" "ଆପଣ \"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ଅଫ୍‍ ନକରିବା ପର୍ଯ୍ୟନ୍ତ" "%1$s / %2$s" "ଛୋଟ କରନ୍ତୁ" @@ -1930,26 +1767,21 @@ "ସପ୍ତାହରାତି" "ସପ୍ତାହାନ୍ତ" "ଇଭେଣ୍ଟ" - - + "ଶୋଇବା" "%1$s ଦ୍ୱାରା ନିଶବ୍ଦ କରନ୍ତୁ" "ଆପଣଙ୍କ ଡିଭାଇସ୍‍ରେ ଏକ ସମସ୍ୟା ରହିଛି ଏବଂ ଆପଣ ଫ୍ୟାକ୍ଟୋରୀ ଡାଟା ରିସେଟ୍‍ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ଏହା ଅସ୍ଥିର ରହିପାରେ।" "ଆପଣଙ୍କ ଡିଭାଇସ୍‍ରେ ଏକ ସମସ୍ୟା ରହିଛି। ବିବରଣୀ ପାଇଁ ଆପଣଙ୍କ ଉତ୍ପାଦକଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।" - "USSD ଅନୁରୋଧ DIAL ଅନୁରୋଧକୁ ସଂଶୋଧନ କରାଗଲା।" - "USSD ଅନୁରୋଧ SS ଅନୁରୋଧକୁ ସଂଶୋଧନ କରାଗଲା।" - "USSD ଅନୁରୋଧ ନୂଆ USSD ଅନୁରୋଧକୁ ସଂଶୋଧନ କରାଗଲା।" - - - "SS ଅନୁରୋଧ DIAL ଅନୁରୋଧକୁ ସଂଶୋଧନ କରାଗଲା।" - - - "SS ଅନୁରୋଧ USSD ଅନୁରୋଧକୁ ସଂଶୋଧନ କରାଗଲା।" - "SS ଅନୁରୋଧ ନୂତନ SS ଅନୁରୋଧକୁ ସଂଶୋଧନ କରାଗଲା।" + "USSD ଅନୁରୋଧ, ସ୍ଵାଭାବିକ କଲ୍‌ରେ ପରିବର୍ତ୍ତନ ହେଲା" + "USSD ଅନୁରୋଧ, SS ଅନୁରୋଧକୁ ପରିବର୍ତ୍ତନ ହେଲା" + "ନୂତନ USSD ଅନୁରୋଧରେ ପରିବର୍ତ୍ତନ ହେଲା" + "USSD ଅନୁରୋଧ, ଭିଡିଓ କଲ୍‌ରେ ପରିବର୍ତ୍ତନ ହେଲା" + "SSଙ୍କ ଅନୁରୋଧକୁ ସ୍ଵାଭାବିକ କଲ୍‌ରେ ପରିବର୍ତ୍ତନ କରାଗଲା" + "SSଙ୍କ ଅନୁରୋଧକୁ ଭିଡିଓ କଲ୍‌ରେ ପରିବର୍ତ୍ତନ କରାଗଲା" + "SS ଅନୁରୋଧ, USSD ଅନୁରୋଧକୁ ପରିବର୍ତ୍ତନ ହେଲା" + "ନୂତନ SS ଅନୁରୋଧରେ ପରିବର୍ତ୍ତନ ହେଲା" "ୱର୍କ ପ୍ରୋଫାଇଲ୍‌" - - - - + "ବଢ଼ାନ୍ତୁ" + "ଛୋଟ କରନ୍ତୁ" "ଟୋଗଲ୍‍ ସମ୍ପ୍ରସାରଣ" "Android USB ପେରିଫେରିଆଲ୍‍ ପୋର୍ଟ" "Android" @@ -1963,171 +1795,115 @@ %1$d ଚୟନିତ %1$d ଚୟନିତ - - - - + "ଅବର୍ଗୀକୃତ" + "ଏହି ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକର ପ୍ରମୁଖତା ଆପଣ ସେଟ୍‍ କରନ୍ତି।" "ସମ୍ପୃକ୍ତ ଲୋକଙ୍କ କାରଣରୁ ଏହା ଗୁରୁତ୍ୱପୂର୍ଣ୍ଣ ଅଟେ।" - - - - - - + "%2$s ସହ ଏକ ନୂଆ ୟୁଜର୍‌ ତିଆରି କରିବା ପାଇଁ %1$sକୁ ଅନୁମତି ଦେବେ?" + "%2$s ସହ ଏକ ନୂଆ ୟୁଜର୍‌ ତିଆରି କରିବାକୁ %1$sକୁ ଅନୁମତି ଦେବେ (ଏହି ଆକାଉଣ୍ଟରେ ଜଣେ ୟୁଜର୍‌ ପୂର୍ବରୁ ରହିଛନ୍ତି)?" + "ଏକ ଭାଷା ଯୋଡ଼ନ୍ତୁ" "ପସନ୍ଦର ଅଞ୍ଚଳ" "ଭାଷାର ନାମ ଟାଇପ୍‍ କରନ୍ତୁ" "ପରାମର୍ଶିତ" "ସମସ୍ତ ଭାଷା" "ସମସ୍ତ ଅଞ୍ଚଳ" "ସର୍ଚ୍ଚ କରନ୍ତୁ" - - - - + "ୱର୍କ ପ୍ରୋଫାଇଲ୍‌କୁ ଚାଲୁ କରିବେ?" + "ଆପଣଙ୍କର କାର୍ଯ୍ୟକାରୀ ଆପ୍‌, ବିଜ୍ଞପ୍ତି, ଡାଟା ଓ ଅନ୍ୟ ୱର୍କ ପ୍ରୋଫାଇଲ୍‌ଗୁଡ଼ିକ ଚାଲୁ ହୋଇଯିବ" "ଅନ୍ କରନ୍ତୁ" - - - - + "ଏହି ଆପ୍‌କୁ Androidର ପୁରୁଣା ଭର୍ସନ୍ ପାଇଁ ନିର୍ମାଣ କରାଯାଇଥିଲା ଏବଂ ଠିକ୍ ଭାବେ କାମ କରିନପାରେ। ଏହାପାଇଁ ଅପଡେଟ୍‌ ଅଛି କି ନାହିଁ ଯାଞ୍ଚ କରନ୍ତୁ କିମ୍ବା ଡେଭେଲପର୍‌ଙ୍କ ସହିତ ସମ୍ପର୍କ କରନ୍ତୁ।" + "ଅପଡେଟ୍‌ ପାଇଁ ଯାଞ୍ଚ କରନ୍ତୁ" "ଆପଣଙ୍କ ପାଖରେ ନୂଆ ମେସେଜ୍‍ ରହିଛି" "ଦେଖିବା ପାଇଁ SMS ଆପ୍‍ ଖୋଲନ୍ତୁ" - - - - - - - - - - - - - - + "କିଛି ବିଶେଷତା କାମ କରିନପାରେ" + "ଅନଲକ୍‍ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ" + "ୟୁଜର୍‌ଙ୍କ ଡାଟା ଲକ୍‍ ହେଲା" + "ୱର୍କ ପ୍ରୋଫାଇଲ୍‍ ଲକ୍‍ ଅଛି" + "ୱର୍କ ପ୍ରୋଫାଇଲ୍‍ ଅନଲକ୍‍ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ" + "%1$s ସହ କନେକ୍ଟ କରାଗଲା" + "ଫାଇଲ୍‍ ଦେଖିବା ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ" "ପିନ୍‍" - - + "ଅନପିନ୍ କରନ୍ତୁ" "ଆପ୍‍ ସୂଚନା" - - + "−%1$s" "ଡେମୋ ଆରମ୍ଭ କରାଯାଉଛି…" "ଡିଭାଇସ୍‍କୁ ରିସେଟ୍‍ କରାଯାଉଛି…" "ଅକ୍ଷମ ହୋଇଛି %1$s" "କନ୍‌ଫରେନ୍ସ କଲ୍‍" "ଟୁଲଟିପ୍‍" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "ଗେମ୍‌" + "ମ୍ୟୁଜିକ୍‌ ଓ ଅଡିଓ" + "ମୁଭି ଓ ଭିଡିଓ" + "ଫଟୋ ଓ ଇମେଜ୍‍" + "ସୋସିଅଲ୍‍ ଓ କମ୍ୟୁନିକେଶନ୍‍" + "ଖବର ଓ ମ୍ୟାଗାଜିନ୍‍" + "ମାନଚିତ୍ର ଓ ନେଭିଗେଶନ୍‍" + "ଉତ୍ପାଦକତା" + "ଡିଭାଇସ୍‌ ଷ୍ଟୋରେଜ୍‌" + "USB ଡିବଗିଙ୍ଗ" + "ଘଣ୍ଟା" + "ମିନିଟ୍" + "ସମୟ ସେଟ୍‌ କରନ୍ତୁ" + "ଏକ ମାନ୍ୟ ସମୟ ଲେଖନ୍ତୁ" + "ସମୟରେ ଟାଇପ୍‍ କରନ୍ତୁ" + "ସମୟ ଇନପୁଟ୍‍ ପାଇଁ ଟେକ୍ସଟ୍‍ ଇନପୁଟ୍‌କୁ ବଦଳାନ୍ତୁ।" + "ସମୟ ଇନପୁଟ୍‍ ପାଇଁ ଘଣ୍ଟା ମୋଡ୍‌କୁ ବଦଳାନ୍ତୁ।" + "ଅଟୋଫିଲ୍‍ ବିକଳ୍ପ" + "ଅଟୋଫିଲ୍‍ ପାଇଁ ସେଭ୍‍ କରନ୍ତୁ" + "କଣ୍ଟେଣ୍ଟ ଅଟୋଫିଲ୍‍ କରାଯାଇ ପାରିବ ନାହିଁ" + "କୌଣସି ଅଟୋଫିଲ୍‍ ପରାମର୍ଶ ନାହିଁ" + + %1$sଟି ଅଟୋଫିଲ୍‍ ପରାମର୍ଶ + ଗୋଟିଏ ଅଟୋଫିଲ୍‍ ପରାମର୍ଶ + + "<b>%1$s</b>ରେ ସେଭ୍‍ କରିବେ?" + "%1$s <b>%2$s</b>ରେ ସେଭ୍‍ କରିବେ?" + "%1$s ଏବଂ %2$s <b>%3$s</b>ରେ ସେଭ୍‍ କରିବେ?" + "%1$s, %2$s, ଏବଂ %3$s <b>%4$s</b>ରେ ସେଭ୍‍ କରିବେ?" + "ସେଭ୍‌ କରନ୍ତୁ" + "ନାଁ, ପଚାରିଥିବାରୁ ଧନ୍ୟବାଦ" + "ପାସୱର୍ଡ୍" + "ଠିକଣା" + "କ୍ରେଡିଟ୍ କାର୍ଡ" + "ୟୁଜରଙ୍କ ନାମ" + "ଇମେଲ୍ ଠିକଣା" + "ଶାନ୍ତ ରୁହନ୍ତୁ ଓ ନିକଟର କୌଣସି ଏକ ଆଶ୍ରୟସ୍ଥଳ ଖୋଜନ୍ତୁ" + "ଉପକୂଳବର୍ତ୍ତୀ କ୍ଷେତ୍ର ଏବଂ ନଦୀର ପାର୍ଶ୍ୱ ଅଞ୍ଚଳରୁ ଏକ ଉଚ୍ଚ ଭୂମି ପରି ନିରାପଦ ସ୍ଥାନକୁ ତୁରନ୍ତ ବାହାରିଯାଆନ୍ତୁ।" + "ଶାନ୍ତ ରୁହନ୍ତୁ ଓ ନିକଟର କୌଣସି ଏକ ଆଶ୍ରୟସ୍ଥଳ ଖୋଜନ୍ତୁ" + "ଜରୁରୀକାଳୀନ ମେସେଜ୍‍ ପରୀକ୍ଷା" + "ଉତ୍ତର" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "SIM କାର୍ଡକୁ ଭଏସ୍‍ ପାଇଁ ଅନୁମତି ଦିଆଯାଇନାହିଁ" + "SIM କାର୍ଡକୁ ଭଏସ୍‍ ପାଇଁ ପ୍ରସ୍ତୁତ କରାଯାଇନାହିଁ" + "SIM କାର୍ଡକୁ ଭଏସ୍‍ ପାଇଁ ଅନୁମତି ଦିଆଯାଇନାହିଁ" + "ଫୋନକୁ ଭଏସ୍‍ ପାଇଁ ଅନୁମତି ଦିଆଯାଇନାହିଁ" + + + + + + + + + "ପପ-ଅପ୍ ୱିଣ୍ଡୋ" + "+ %1$d" + "ଆପ୍‌ ଭର୍ସନ୍ ପୁରୁଣା ହୋଇଯାଇଛି କିମ୍ବା ଏହି ଶର୍ଟକଟ୍ ସହିତ କାମ କରୁନାହିଁ।" + "ଶର୍ଟକଟ୍‍ ରିଷ୍ଟୋର୍‍ କରିହେଲା ନାହିଁ, କାରଣ ଏହି ଆପ୍‍ ବ୍ୟାକଅପ୍‍ ଏବଂ ରିଷ୍ଟୋର୍‍ ସପୋର୍ଟ କରେନାହିଁ" + "ଶର୍ଟକଟ୍‍ ରିଷ୍ଟୋର୍‍ କରିହେଲା ନାହିଁ, କାରଣ ଏହି ଆପ୍‍ର ସ୍ୱାକ୍ଷର ମେଳ ହେଉନାହିଁ" + "ଶର୍ଟକଟ୍‍ ରିଷ୍ଟୋର୍‍ କରିହେଲା ନାହିଁ" + "ଶର୍ଟକଟ୍‍ ଅକ୍ଷମ କରାଯାଇଛି" + "ଅନଇନଷ୍ଟଲ୍‌ କରନ୍ତୁ" + "କୌଣସିମତେ ଖୋଲନ୍ତୁ" + "ହାନିକାରକ ଆପ୍‌ ଚିହ୍ନଟ ହୋଇଛି" + "%1$s, %2$s ସ୍ଲାଇସ୍‌କୁ ଦେଖାଇବା ପାଇଁ ଚାହେଁ" + "ଏଡିଟ୍ କରନ୍ତୁ" + "କଲ୍ ଓ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ଭାଇବ୍ରେଟ୍ ହେବ" + "କଲ୍ ଓ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ନିଃଶବ୍ଦ କରିଦିଆଯିବ" + "ସିଷ୍ଟମ୍‌ରେ ପରିବର୍ତ୍ତନ" + "ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ" + "ଆପଣଙ୍କ ଧ୍ୟାନକୁ ଲଗାଇ ରଖିବା ପାଇଁ, ’ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ’ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଲୁଚାଇଦେଉଛି" + "ଏହା ନୂତନ କାର୍ଯ୍ୟକଳାପ ଅଟେ। ବଦଳାଇବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ।" + "’ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ’ ବଦଳିଯାଇଛି" + "କ’ଣ ଅବରୋଧ ହୋଇଛି ଯାଞ୍ଚ କରିବା ପାଇଁ ଟାପ୍ କରନ୍ତୁ।" + "ସିଷ୍ଟମ୍‌" + "ସେଟିଙ୍ଗ" diff --git a/core/res/res/values-pa/strings.xml b/core/res/res/values-pa/strings.xml index 2864a85d945aa97c73acf7c92134dc6aa40369c8..eb6b9d004b9752c4cf70d5fa89030d693fbc21cc 100644 --- a/core/res/res/values-pa/strings.xml +++ b/core/res/res/values-pa/strings.xml @@ -82,6 +82,8 @@ "ਕੋਈ ਆਵਾਜ਼ੀ ਸੇਵਾ ਨਹੀਂ" "ਕੋਈ ਅਵਾਜ਼ੀ ਸੇਵਾ ਜਾਂ ਸੰਕਟਕਾਲੀਨ ਕਾਲਿੰਗ ਨਹੀਂ" "ਤੁਹਾਡੇ ਕੈਰੀਅਰ ਵੱਲੋਂ ਅਸਥਾਈ ਤੌਰ \'ਤੇ ਬੰਦ ਹੈ" + + "ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ" "ਤਰਜੀਹੀ ਨੈੱਟਵਰਕ ਨੂੰ ਬਦਲ ਕੇ ਦੇਖੋ। ਬਦਲਣ ਲਈ ਟੈਪ ਕਰੋ।" "ਸੰਕਟਕਾਲੀਨ ਕਾਲਿੰਗ ਉਪਲਬਧ ਨਹੀਂ" @@ -120,12 +122,13 @@ "ਰੋਮਿੰਗ ਬੈਨਰ ਚਾਲੂ" "ਰੋਮਿੰਗ ਬੈਨਰ ਬੰਦ" "ਸੇਵਾ ਦੀ ਖੋਜ ਕਰ ਰਿਹਾ ਹੈ" - - + "ਵਾਈ-ਫਾਈ ਕਾਲਿੰਗ ਨੂੰ ਸੈੱਟਅੱਪ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ" "ਵਾਈ-ਫਾਈ ਤੋਂ ਕਾਲਾਂ ਕਰਨ ਅਤੇ ਸੁਨੇਹੇ ਭੇਜਣ ਦੇ ਲਈ, ਸਭ ਤੋਂ ਪਹਿਲਾਂ ਆਪਣੇ ਕੈਰੀਅਰ ਨੂੰ ਇਸ ਸੇਵਾ ਦੀ ਸਥਾਪਨਾ ਕਰਨ ਲਈ ਕਹੋ। ਫਿਰ ਸੈਟਿੰਗਾਂ ਵਿੱਚੋਂ ਵਾਈ-ਫਾਈ ਕਾਲਿੰਗ ਨੂੰ ਦੁਬਾਰਾ ਚਾਲੂ ਕਰੋ। (ਗੜਬੜੀ ਕੋਡ: %1$s)" - + + "ਤੁਹਾਡੇ ਕੈਰੀਅਰ ਨਾਲ ਵਾਈ-ਫਾਈ ਕਾਲਿੰਗ ਨੂੰ ਰਜਿਸਟਰ ਕਰਨ ਵਿੱਚ ਸਮੱਸਿਆ ਆਈ: %1$s" + "%s" "%s ਵਾਈ-ਫਾਈ ਕਾਲਿੰਗ" @@ -159,10 +162,8 @@ "ਬਹੁਤ ਜ਼ਿਆਦਾ ਬੇਨਤੀਆਂ ਦੀ ਪ੍ਰਕਿਰਿਆ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ। ਬਾਅਦ ਵਿੱਚ ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।" "%1$s ਲਈ ਸਾਈਨਇਨ ਅਸ਼ੁੱਧੀ" "ਸਿੰਕ ਕਰੋ" - - - - + "ਸਮਕਾਲੀਕਿਰਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ" + "ਬਹੁਤ ਸਾਰੀਆਂ %s ਨੂੰ ਮਿਟਾਉਣ ਦੀ ਕੋਸ਼ਿਸ਼ ਕੀਤੀ ਗਈ।" "ਟੈਬਲੈੱਟ ਸਟੋਰੇਜ ਪੂਰੀ ਭਰੀ ਹੈ। ਜਗ੍ਹਾ ਖਾਲੀ ਕਰਨ ਲਈ ਕੁਝ ਫ਼ਾਈਲਾਂ ਮਿਟਾਓ।" "ਘੜੀ ਸਟੋਰੇਜ ਪੂਰੀ ਭਰੀ ਹੈ। ਜਗ੍ਹਾ ਖਾਲੀ ਕਰਨ ਲਈ ਕੁਝ ਫ਼ਾਈਲਾਂ ਮਿਟਾਓ।" "ਟੀਵੀ ਸਟੋਰੇਜ ਪੂਰੀ ਭਰੀ ਹੈ। ਜਗ੍ਹਾ ਖਾਲੀ ਕਰਨ ਲਈ ਕੁਝ ਫ਼ਾਈਲਾਂ ਮਿਟਾਓ।" @@ -272,40 +273,31 @@ "ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਵਰਤੋ" "ਸੰਪਰਕ" "ਆਪਣੇ ਸੰਪਰਕਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ" - - + "ਕੀ <b>%1$s</b> ਨੂੰ ਤੁਹਾਡੇ ਸੰਪਰਕਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੇਣੀ ਹੈ?" "ਟਿਕਾਣਾ" "ਇਸ ਡੀਵਾਈਸ ਦੇ ਨਿਰਧਾਰਤ ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚੋ" - - + "ਕੀ <b>%1$s</b> ਨੂੰ ਇਸ ਡੀਵਾਈਸ ਦੇ ਟਿਕਾਣੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੇਣੀ ਹੈ?" "ਕੈਲੰਡਰ" "ਤੁਹਾਡੇ ਕੈਲੰਡਰ ਤੱਕ ਪਹੁੰਚ ਕਰਨ" - - + "ਕੀ <b>%1$s</b> ਨੂੰ ਤੁਹਾਡੇ ਕੈਲੰਡਰ ਤੱਕ ਪਹੁੰਚ ਕਰਨੀ ਦੇਣੀ ਹੈ?" "SMS" "SMS ਸੁਨੇਹੇ ਭੇਜੋ ਅਤੇ ਦੇਖੋ" - - + "ਕੀ <b>%1$s</b> ਨੂੰ SMS ਸੁਨੇਹੇ ਭੇਜਣ ਅਤੇ ਦੇਖਣ ਦੇਣੇ ਹਨ?" "ਸਟੋਰੇਜ" "ਆਪਣੇ ਡੀਵਾਈਸ \'ਤੇ ਫ਼ੋਟੋਆਂ, ਮੀਡੀਆ ਅਤੇ ਫ਼ਾਈਲਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨਾ" - - + "ਕੀ <b>%1$s</b> ਨੂੰ ਆਪਣੇ ਡੀਵਾਈਸ \'ਤੇ ਫ਼ੋਟੋਆਂ, ਮੀਡੀਆ ਅਤੇ ਫ਼ਾਈਲਾਂ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੇਣੀ ਹੈ?" "ਮਾਈਕ੍ਰੋਫੋਨ" " ਆਡੀਓ ਰਿਕਾਰਡ ਕਰਨ" - - + "ਕੀ <b>%1$s</b> ਨੂੰ ਆਡੀਓ ਰਿਕਾਰਡ ਕਰਨ ਦੇਣੀ ਹੈ?" "ਕੈਮਰਾ" "ਤਸਵੀਰਾਂ ਲੈਣ ਅਤੇ ਵੀਡੀਓ ਰਿਕਾਰਡ ਕਰਨ" - - + "ਕੀ <b>%1$s</b> ਨੂੰ ਤਸਵੀਰਾਂ ਖਿੱਚਣ ਅਤੇ ਵੀਡੀਓ ਰਿਕਾਰਡ ਕਰਨ ਦੇਣਾ ਹੈ?" "ਫ਼ੋਨ ਕਰੋ" "ਫ਼ੋਨ ਕਾਲਾਂ ਕਰਨ ਅਤੇ ਉਹਨਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ" - - + "ਕੀ <b>%1$s</b> ਨੂੰ ਫ਼ੋਨ ਕਾਲਾਂ ਕਰਨ ਅਤੇ ਉਹਨਾਂ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਦੇਣਾ ਹੈ?" "ਸਰੀਰ ਸੰਵੇਦਕ" "ਆਪਣੇ ਸਰੀਰ ਦੇ ਅਹਿਮ ਚਿੰਨ੍ਹਾਂ ਬਾਰੇ ਸੰਵੇਦਕ ਡਾਟਾ ਤੱਕ ਪਹੁੰਚ ਕਰਨ" - - + "ਕੀ <b>%1$s</b> ਨੂੰ ਤੁਹਾਡੇ ਸਰੀਰ ਦੇ ਅਹਿਮ ਲੱਛਣਾਂ ਸੰਬੰਧੀ ਸੈਂਸਰ ਡਾਟੇ ਤੱਕ ਪਹੁੰਚ ਕਰਨ ਦੇਣੀ ਹੈ?" "ਵਿੰਡੋ ਸਮੱਗਰੀ ਮੁੜ ਪ੍ਰਾਪਤ ਕਰਨਾ" "ਇੱਕ ਵਿੰਡੋ ਦੀ ਸਮੱਗਰੀ ਦੀ ਜਾਂਚ ਕਰੋ, ਜਿਸ ਨਾਲ ਤੁਸੀਂ ਅੰਤਰਕਿਰਿਆ ਕਰ ਰਹੇ ਹੋ" "ਐਕਸਪਲੋਰ ਬਾਈ ਟੱਚ ਚਾਲੂ ਕਰਨਾ" @@ -492,6 +484,10 @@ "ਐਪ ਨੂੰ ਨਜ਼ਦੀਕੀ ਖੇਤਰ ਸੰਚਾਰ (NFC) ਟੈਗਾਂ, ਕਾਰਡਾਂ ਅਤੇ ਰੀਡਰਾਂ ਨਾਲ ਸੰਚਾਰ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।" "ਆਪਣਾ ਸਕ੍ਰੀਨ ਲਾਕ ਅਸਮਰੱਥ ਬਣਾਓ" "ਐਪ ਨੂੰ ਕੀਲਾਕ ਅਤੇ ਕਿਸੇ ਵੀ ਸੰਬੰਧਿਤ ਪਾਸਵਰਡ ਸੁਰੱਖਿਆ ਨੂੰ ਬੰਦ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਫ਼ੋਨ ਇੱਕ ਇਨਕਮਿੰਗ ਫ਼ੋਨ ਕਾਲ ਪ੍ਰਾਪਤ ਕਰਨ ਵੇਲੇ ਬੰਦ ਕਰਦਾ ਹੈ, ਫਿਰ ਜਦੋਂ ਕਾਲ ਖਤਮ ਹੁੰਦੀ ਹੈ ਤਾਂ ਕੀਲਾਕ ਨੂੰ ਮੁੜ-ਚਾਲੂ ਕਰਦਾ ਹੈ।" + + + + "ਫਿੰਗਰਪ੍ਰਿੰਟ ਹਾਰਡਵੇਅਰ ਵਿਵਸਥਿਤ ਕਰੋ" "ਐਪ ਨੂੰ ਵਰਤੋਂ ਲਈ ਫਿੰਗਰਪ੍ਰਿੰਟ ਸ਼ਾਮਲ ਕਰਨ ਅਤੇ ਮਿਟਾਉਣ ਦੀਆਂ ਵਿਧੀਆਂ ਦੀ ਬੇਨਤੀ ਕਰਨ ਦੀ ਆਗਿਆ ਦਿੰਦਾ ਹੈ।" "ਫਿੰਗਰਪ੍ਰਿੰਟ ਹਾਰਡਵੇਅਰ ਵਰਤੋ" @@ -504,6 +500,8 @@ "ਪਛਾਣ ਨਹੀਂ ਹੋਈ" + + "ਫਿੰਗਰਪ੍ਰਿੰਟ ਹਾਰਡਵੇਅਰ ਉਪਲਬਧ ਨਹੀਂ।" "ਫਿੰਗਰਪ੍ਰਿੰਟ ਸਟੋਰ ਨਹੀਂ ਕੀਤਾ ਸਕਦਾ। ਕਿਰਪਾ ਕਰਕੇ ਇੱਕ ਮੌਜੂਦਾ ਫਿੰਗਰਪ੍ਰਿੰਟ ਹਟਾਓ।" "ਫਿੰਗਰਪ੍ਰਿੰਟ ਦਾ ਸਮਾਂ ਸਮਾਪਤ ਹੋ ਗਿਆ ਹੈ। ਦੁਬਾਰਾ ਕੋਸ਼ਿਸ਼ ਕਰੋ।" @@ -1016,14 +1014,32 @@ "ਇਨਪੁੱਟ ਵਿਧੀ" "ਟੈਕਸਟ ਕਿਰਿਆਵਾਂ" "ਈਮੇਲ ਕਰੋ" + + "ਕਾਲ ਕਰੋ" + + "ਟਿਕਾਣਾ ਦੇਖੋ" + + "ਖੋਲ੍ਹੋ" + + "ਸੁਨੇਹਾ ਭੇਜੋ" + + "ਸ਼ਾਮਲ ਕਰੋ" + + "ਦੇਖੋ" + + "ਸਮਾਂ-ਸੂਚੀ" + + "ਟਰੈਕ ਕਰੋ" + + "ਸਟੋਰੇਜ ਦੀ ਜਗ੍ਹਾ ਖਤਮ ਹੋ ਰਹੀ ਹੈ" "ਕੁਝ ਸਿਸਟਮ ਫੰਕਸ਼ਨ ਕੰਮ ਨਹੀਂ ਵੀ ਕਰ ਸਕਦੇ" "ਸਿਸਟਮ ਲਈ ਲੋੜੀਂਦੀ ਸਟੋਰੇਜ ਨਹੀਂ ਹੈ। ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਤੁਹਾਡੇ ਕੋਲ 250MB ਖਾਲੀ ਜਗ੍ਹਾ ਹੈ ਅਤੇ ਮੁੜ-ਚਾਲੂ ਕਰੋ।" @@ -1117,8 +1133,7 @@ "%1$s ਖੋਲ੍ਹੋ" "%1$s ਰੱਖਿਅਤ ਕੀਤੇ ਬਿਨਾਂ ਬੰਦ ਹੋ ਜਾਵੇਗੀ" "%1$s ਦੀ ਮੈਮਰੀ ਸੀਮਾ ਵਧ ਗਈ ਹੈ" - - + "ਹੀਪ ਡੰਪ ਨੂੰ ਇਕੱਤਰ ਕੀਤਾ ਗਿਆ। ਸਾਂਝਾ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।" "ਕੀ ਹੀਪ ਡੰਪ ਸ਼ੇਅਰ ਕਰਨਾ ਹੈ?" "ਪ੍ਰਕਿਰਿਆ %1$s ਦੀ ਆਪਣੀ ਪ੍ਰਕਿਰਿਆ ਮੈਮਰੀ ਸੀਮਾ %2$s ਵਧ ਗਈ ਹੈ। ਇਸਦੇ ਵਿਕਾਸਕਾਰ ਨਾਲ ਸਾਂਝਾ ਕਰਨ ਲਈ ਤੁਹਾਡੇ ਲਈ ਇੱਕ ਹੀਪ ਡੰਪ ਉਪਲਬਧ ਹੈ। ਸਾਵਧਾਨ ਰਹੋ: ਇਸ ਹੀਪ ਡੰਪ ਵਿੱਚ ਤੁਹਾਡੀ ਕੋਈ ਵੀ ਨਿੱਜੀ ਜਾਣਕਾਰੀ ਹੋ ਸਕਦੀ ਹੈ, ਜਿਸ \'ਤੇ ਐਪਲੀਕੇਸ਼ਨ ਦੀ ਪਹੁੰਚ ਹੈ।" "ਲਿਖਤ ਲਈ ਕੋਈ ਕਾਰਵਾਈ ਚੁਣੋ" @@ -1153,8 +1168,7 @@ "ਖੁੱਲ੍ਹੇ ਵਾਈ‑ਫਾਈ ਨੈੱਟਵਰਕ ਨਾਲ ਕਨੈਕਟ ਹੋਵੋ" "ਕੈਰੀਅਰ ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਨਾਲ ਕਨੈਕਟ ਕਰੋ" - - + "ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ" "ਵਾਈ‑ਫਾਈ ਨੈੱਟਵਰਕ ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ" "ਵਾਈ‑ਫਾਈ ਨੈੱਟਵਰਕ ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ" "ਸਾਰੇ ਨੈੱਟਵਰਕਾਂ ਨੂੰ ਦੇਖਣ ਲਈ ਟੈਪ ਕਰੋ" @@ -1271,33 +1285,49 @@ "%s ਐਪ ਹੋਰਾਂ ਐਪਾਂ ਦੇ ਉੱਤੇ ਹੈ।" "ਜੇਕਰ ਤੁਸੀਂ ਨਹੀਂ ਚਾਹੁੰਦੇ ਕਿ %s ਐਪ ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਦੀ ਵਰਤੋਂ ਕਰੇ, ਤਾਂ ਸੈਟਿੰਗਾਂ ਖੋਲ੍ਹਣ ਲਈ ਟੈਪ ਕਰੋ ਅਤੇ ਇਸਨੂੰ ਬੰਦ ਕਰੋ।" "ਬੰਦ ਕਰੋ" - "%s ਤਿਆਰ ਹੋ ਰਿਹਾ ਹੈ" - "ਤਰੁੱਟੀਆਂ ਦੀ ਜਾਂਚ ਕਰ ਰਿਹਾ ਹੈ" - "ਨਵੇਂ %s ਦਾ ਪਤਾ ਲਗਾਇਆ ਗਿਆ" + + + + + + + + "ਫ਼ੋਟੋਆਂ ਅਤੇ ਮੀਡੀਆ ਨੂੰ ਟ੍ਰਾਂਸਫ਼ਰ ਕਰਨ ਲਈ" - "ਕਰਪਟਿਡ %s" - "%s ਗ਼ਲਤ ਹੈ। ਠੀਕ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।" - "%s ਖਰਾਬ ਹੈ। ਠੀਕ ਕਰਨ ਲਈ ਚੁਣੋ।" + + + + "ਅਸਮਰਥਿਤ %s" "ਇਹ ਡੀਵਾਈਸ ਇਸ %s ਨੂੰ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦਾ ਹੈ। ਕਿਸੇ ਸਮਰਥਿਤ ਫਾਰਮੈਟ ਵਿੱਚ ਸਥਾਪਤ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।" "ਇਹ ਡੀਵਾਈਸ ਇਸ %s ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦਾ ਹੈ। ਕਿਸੇ ਸਮਰਥਿਤ ਫਾਰਮੈਟ ਵਿੱਚ ਸਥਾਪਤ ਕਰਨ ਲਈ ਚੁਣੋ।" "%s ਨੂੰ ਅਚਨਚੇਤ ਹਟਾਇਆ ਗਿਆ" - " ਡਾਟਾ ਦੇ ਨੁਕਸਾਨ ਤੋਂ ਬੱਚਣ ਲਈ ਹਟਾਉਣ ਤੋਂ ਪਹਿਲਾਂ %s ਅਨਮਾਊਂਟ ਕਰੋ" - "ਹਟਾਇਆ %s" - "%s ਨੂੰ ਹਟਾਇਆ ਗਿਆ, ਕੋਈ ਨਵਾਂ ਸੰਮਿਲਿਤ ਕਰੋ" - "ਅਜੇ ਵੀ %s ਨੂੰ ਕੱਢ ਰਿਹਾ ਹੈ..." - "ਨਾ ਹਟਾਓ" + + + + + + + + + + "ਸਥਾਪਤ ਕਰੋ" "ਬਾਹਰ ਕੱਢੋ" "ਐਕਸਪਲੋਰ ਕਰੋ" "%s ਲਾਪਤਾ" - "ਇਸ ਡੀਵਾਈਸ ਨੂੰ ਮੁੜ ਸੰਮਿਲਿਤ ਕਰੋ" + + "%s ਮੂਵ ਕਰ ਰਿਹਾ ਹੈ" " ਡਾਟਾ ਮੂਵ ਕਰ ਰਿਹਾ ਹੈ" - "ਮੂਵ ਸੰਪੂਰਣ" - " ਡਾਟਾ ਨੂੰ %s ਵਿੱਚ ਮੂਵ ਕੀਤਾ ਗਿਆ" - " ਡਾਟਾ ਨੂੰ ਮੂਵ ਨਹੀਂ ਕਰ ਸਕਿਆ" - " ਡਾਟਾ ਮੂਲ ਸਥਾਨ \'ਤੇ ਛੱਡਿਆ ਗਿਆ" + + + + + + + + "ਹਟਾਏ ਗਏ" "ਹਟਾਇਆ ਗਿਆ" "ਜਾਂਚ ਕਰ ਰਿਹਾ ਹੈ..." @@ -1356,17 +1386,14 @@ "ਹਮੇਸ਼ਾਂ-ਚਾਲੂ VPN ਕਨੈਕਟ ਕਰ ਰਿਹਾ ਹੈ..." "ਹਮੇਸ਼ਾਂ-ਚਾਲੂ VPN ਕਨੈਕਟ ਕੀਤਾ" "ਹਮੇਸ਼ਾਂ-ਚਾਲੂ VPN ਤੋਂ ਡਿਸਕਨੈਕਟ ਕੀਤਾ ਗਿਆ" - - + "ਹਮੇਸ਼ਾਂ-ਚਾਲੂ VPN ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ" "Change network or VPN settings" "ਫਾਈਲ ਚੁਣੋ" "ਕੋਈ ਫਾਈਲ ਨਹੀਂ ਚੁਣੀ ਗਈ" "ਰੀਸੈੱਟ ਕਰੋ" "ਪ੍ਰਸਤੁਤ ਕਰੋ" - - - - + "ਗੱਡੀ ਚਲਾਉਣ ਸੰਬੰਧੀ ਐਪ ਚੱਲ ਰਹੀ ਹੈ" + "ਗੱਡੀ ਚਲਾਉਣ ਸੰਬੰਧੀ ਐਪ ਤੋਂ ਬਾਹਰ ਜਾਣ ਲਈ ਟੈਪ ਕਰੋ।" "ਟੈਦਰਿੰਗ ਜਾਂ ਹੌਟਸਪੌਟ ਕਿਰਿਆਸ਼ੀਲ" "ਸਥਾਪਤ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।" "ਟੈਦਰਿੰਗ ਨੂੰ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ" @@ -1692,8 +1719,7 @@ "ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਸਥਾਪਤ ਕੀਤਾ ਗਿਆ" "ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ" "ਤੁਹਾਡੇ ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਮਿਟਾਇਆ ਗਿਆ" - - + "ਬੈਟਰੀ ਲਾਈਫ਼ ਨੂੰ ਵਧਾਉਣ ਲਈ, ਬੈਟਰੀ ਸੇਵਰ ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਦਾ ਪ੍ਰਦਰਸ਼ਨ ਘਟਾਉਂਦਾ ਹੈ ਅਤੇ ਥਰਥਰਾਹਟ, ਟਿਕਾਣਾ ਸੇਵਾਵਾਂ ਅਤੇ ਬੈਕਗ੍ਰਾਊਂਡ ਡਾਟੇ ਨੂੰ ਸੀਮਤ ਜਾਂ ਬੰਦ ਕਰਦਾ ਹੈ। ਈਮੇਲ, ਸੁਨੇਹਾ ਭੇਜਣੇ ਵਾਲੀਆਂ ਐਪਾਂ ਅਤੇ ਹੋਰ ਐਪਾਂ, ਜੋ ਸਮਕਾਲੀਕਰਨ \'ਤੇ ਨਿਰਭਰ ਹਨ, ਉਹ ਉਦੋਂ ਤੱਕ ਅੱਪਡੇਟ ਨਹੀਂ ਕੀਤੀਆਂ ਜਾ ਸਕਦੀਆਂ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਉਹਨਾਂ ਨੂੰ ਖੋਲ੍ਹਦੇ ਨਹੀਂ।\n\nਬੈਟਰੀ ਸੇਵਰ ਸਵੈਚਲਿਤ ਤੌਰ \'ਤੇ ਬੰਦ ਹੁੰਦਾ ਹੈ ਜਦੋਂ ਤੁਹਾਡਾ ਡੀਵਾਈਸ ਚਾਰਜ ਹੋ ਰਿਹਾ ਹੁੰਦਾ ਹੈ।" "ਡਾਟਾ ਵਰਤੋਂ ਘਟਾਉਣ ਵਿੱਚ ਮਦਦ ਲਈ, ਡਾਟਾ ਸੇਵਰ ਕੁਝ ਐਪਾਂ ਨੂੰ ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਡਾਟਾ ਭੇਜਣ ਜਾਂ ਪ੍ਰਾਪਤ ਕਰਨ ਤੋਂ ਰੋਕਦਾ ਹੈ। ਤੁਹਾਡੇ ਵੱਲੋਂ ਵਰਤਮਾਨ ਤੌਰ \'ਤੇ ਵਰਤੀ ਜਾ ਰਹੀ ਐਪ ਡਾਟਾ \'ਤੇ ਪਹੁੰਚ ਕਰ ਸਕਦੀ ਹੈ, ਪਰ ਉਹ ਇੰਝ ਕਦੇ-ਕਦਾਈਂ ਕਰ ਸਕਦੀ ਹੈ। ਉਦਾਹਰਨ ਲਈ, ਇਸ ਦਾ ਮਤਲਬ ਇਹ ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਚਿੱਤਰ ਤਦ ਤੱਕ ਨਹੀਂ ਪ੍ਰਦਰਸ਼ਿਤ ਕੀਤੇ ਜਾਂਦੇ, ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਉਹਨਾਂ \'ਤੇ ਟੈਪ ਨਹੀਂ ਕਰਦੇ।" "ਕੀ ਡਾਟਾ ਸੇਵਰ ਚਾਲੂ ਕਰਨਾ ਹੈ?" "ਚਾਲੂ ਕਰੋ" @@ -1744,22 +1770,14 @@ "%1$s ਵੱਲੋਂ ਮਿਊਟ ਕੀਤਾ ਗਿਆ" "ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਨਾਲ ਇੱਕ ਅੰਦਰੂਨੀ ਸਮੱਸਿਆ ਹੈ ਅਤੇ ਇਹ ਅਸਥਿਰ ਹੋ ਸਕਦੀ ਹੈ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਫੈਕਟਰੀ ਡਾਟਾ ਰੀਸੈੱਟ ਨਹੀਂ ਕਰਦੇ।" "ਤੁਹਾਡੇ ਡੀਵਾਈਸ ਨਾਲ ਇੱਕ ਅੰਦਰੂਨੀ ਸਮੱਸਿਆ ਸੀ। ਵੇਰਵਿਆਂ ਲਈ ਆਪਣੇ ਨਿਰਮਾਤਾ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।" - - - - - - - - - - - - - - - - + "USSD ਬੇਨਤੀ ਨੂੰ ਨਿਯਮਿਤ ਕਾਲ ਵਿੱਚ ਬਦਲਿਆ ਗਿਆ" + "USSD ਬੇਨਤੀ ਨੂੰ SS ਬੇਨਤੀ ਵਿੱਚ ਬਦਲਿਆ ਗਿਆ" + "ਨਵੀਂ USSD ਬੇਨਤੀ ਵਿੱਚ ਬਦਲਿਆ ਗਿਆ" + "USSD ਬੇਨਤੀ ਨੂੰ ਵੀਡੀਓ ਕਾਲ ਵਿੱਚ ਬਦਲਿਆ ਗਿਆ" + "SS ਬੇਨਤੀ ਨੂੰ ਨਿਯਮਿਤ ਕਾਲ ਵਿੱਚ ਬਦਲਿਆ ਗਿਆ" + "SS ਬੇਨਤੀ ਨੂੰ ਵੀਡੀਓ ਕਾਲ ਵਿੱਚ ਬਦਲਿਆ ਗਿਆ" + "SS ਬੇਨਤੀ ਨੂੰ USSD ਬੇਨਤੀ ਵਿੱਚ ਬਦਲਿਆ ਗਿਆ" + "ਨਵੀਂ SS ਬੇਨਤੀ ਵਿੱਚ ਬਦਲਿਆ ਗਿਆ" "ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ" "ਵਿਸਤਾਰ ਕਰੋ" "ਸੁੰਗੇੜੋ" @@ -1857,6 +1875,14 @@ "ਸਿਮ ਰਾਹੀਂ ਅਵਾਜ਼ੀ ਕਾਲ ਕਰਨ ਦੀ ਵਿਵਸਥਾ ਨਹੀਂ ਹੈ" "ਸਿਮ ਰਾਹੀਂ ਅਵਾਜ਼ੀ ਕਾਲ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ" "ਫ਼ੋਨ ਰਾਹੀਂ ਅਵਾਜ਼ੀ ਕਾਲ ਨਹੀਂ ਕੀਤੀ ਜਾ ਸਕਦੀ" + + + + + + + + "ਪੌਪਅੱਪ ਵਿੰਡੋ" "+ %1$d" "ਐਪ ਦਾ ਵਰਜਨ ਡਾਊਨਗ੍ਰੇਡ ਕੀਤਾ ਗਿਆ, ਜਾਂ ਇਸ ਸ਼ਾਰਟਕੱਟ ਦੇ ਅਨੁਕੂਲ ਨਹੀਂ ਹੈ" @@ -1877,8 +1903,6 @@ "ਇਹ ਨਵਾਂ ਵਤੀਰਾ ਹੈ। ਬਦਲਣ ਲਈ ਟੈਪ ਕਰੋ।" "\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਵਿਕਲਪ ਬਦਲ ਗਿਆ ਹੈ" "ਟੈਪ ਕਰਕੇ ਦੋਖੋ ਕਿ ਕਿਹੜੀਆਂ ਚੀਜ਼ਾਂ ਬਲਾਕ ਕੀਤੀਆਂ ਗਈਆਂ ਹਨ।" - - - - + "ਸਿਸਟਮ" + "ਸੈਟਿੰਗਾਂ" diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index d5515fe2a42169df879d86939b24f43b65eb5278..92d7729209bff6cbd547c74550d317a6dd2344a8 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -84,6 +84,8 @@ "Brak usługi połączeń głosowych" "Brak usługi połączeń głosowych i alarmowych" "Tymczasowo wyłączone przez operatora" + + "Brak zasięgu sieci komórkowej" "Spróbuj zmienić preferowaną sieć. Kliknij, by zmienić." "Połączenia alarmowe są niedostępne" @@ -122,12 +124,13 @@ "Baner roamingu włączony" "Baner roamingu wyłączony" "Wyszukiwanie usługi" - - + "Nie udało się skonfigurować połączeń Wi-Fi" "Aby dzwonić i wysyłać wiadomości przez Wi-Fi, poproś swojego operatora o skonfigurowanie tej usługi. Potem ponownie włącz połączenia przez Wi-Fi w Ustawieniach. (Kod błędu: %1$s)" - + + "Podczas rejestrowania połączeń przez Wi-Fi u operatora wystąpił problem: %1$s" + "%s" "Połączenia przez Wi-Fi (%s)" @@ -161,10 +164,8 @@ "Zbyt wiele żądań jest przetwarzanych. Spróbuj ponownie później." "Błąd logowania na konto %1$s" "Synchronizacja" - - - - + "Nie udało się zsynchronizować" + "Próbowano usunąć zbyt wiele elementów z aplikacji %s." "Pamięć tabletu jest pełna. Usuń niektóre pliki, aby zwolnić miejsce." "Pamięć w zegarku jest pełna. Usuń niektóre pliki, by zwolnić miejsce." "Pamięć telewizora jest pełna. Usuń jakieś pliki, by zwolnić miejsce." @@ -278,40 +279,31 @@ "Przełącz na profil służbowy" "Kontakty" "dostęp do kontaktów" - - + "Zezwolić aplikacji <b>%1$s</b> na dostęp do kontaktów?" "Lokalizacja" "dostęp do informacji o lokalizacji tego urządzenia" - - + "Zezwolić aplikacji <b>%1$s</b> na dostęp do lokalizacji urządzenia?" "Kalendarz" "dostęp do kalendarza" - - + "Zezwolić aplikacji <b>%1$s</b> na dostęp do kalendarza?" "SMS" "wysyłanie i wyświetlanie SMS‑ów" - - + "Zezwolić aplikacji <b>%1$s</b> na wysyłanie i wyświetlanie SMS-ów?" "Pamięć wewnętrzna" "dostęp do zdjęć, multimediów i plików na Twoim urządzeniu" - - + "Zezwolić aplikacji <b>%1$s</b> na dostęp do zdjęć, multimediów i plików na urządzeniu?" "Mikrofon" "nagrywanie dźwięku" - - + "Zezwolić aplikacji <b>%1$s</b> na nagrywanie dźwięku?" "Aparat" "robienie zdjęć i nagrywanie filmów" - - + "Zezwolić aplikacji <b>%1$s</b> na robienie zdjęć i nagrywanie filmów?" "Telefon" "nawiązywanie połączeń telefonicznych i zarządzanie nimi" - - + "Zezwolić aplikacji <b>%1$s</b> na wykonywanie połączeń telefonicznych i zarządzanie nimi?" "Czujniki na ciele" "dostęp do danych czujnika podstawowych funkcji życiowych" - - + "Zezwolić aplikacji <b>%1$s</b> na dostęp do danych z czujnika podstawowych funkcji życiowych?" "Pobieranie zawartości okna" "Sprawdzanie zawartości okna, z którego korzystasz." "Włączenie czytania dotykiem" @@ -498,6 +490,8 @@ "Pozwala aplikacji na komunikowanie się z tagami, kartami i czytnikami NFC (Near Field Communication)." "wyłączanie blokady ekranu" "Pozwala aplikacji na wyłączenie blokady klawiatury i wszystkich związanych z tym haseł zabezpieczających. Na przykład telefon wyłącza blokadę klawiatury, gdy odbiera połączenie przychodzące, a następnie włącza ją ponownie po zakończeniu połączenia." + "używanie sprzętu biometrycznego" + "Zezwala aplikacji na używanie sprzętu biometrycznego na potrzeby autoryzacji" "zarządzanie czytnikiem linii papilarnych" "Zezwala aplikacji aktywować metody dodawania i usuwania szablonów odcisków palców." "używanie czytnika linii papilarnych" @@ -510,6 +504,8 @@ "Nie rozpoznano odcisku palca." + + "Czytnik linii papilarnych nie jest dostępny." "Nie można zapisać odcisku palca. Usuń istniejący odcisk palca." "Osiągnięto limit czasu odczytu linii papilarnych. Spróbuj ponownie." @@ -1056,14 +1052,23 @@ "Sposób wprowadzania tekstu" "Działania na tekście" "E-mail" + "Wyślij e-maila na wybrany adres" "Zadzwoń" + "Zadzwoń pod wybrany numer telefonu" "Zlokalizuj" + "Pokaż wybrany adres na mapie" "Otwórz" + "Otwórz wybrany adres URL" "Wyślij SMS-a" + "Wyślij SMS-a pod wybrany numer telefonu" "Dodaj" + "Dodaj do kontaktów" "Wyświetl" + "Wyświetl wybraną datę w kalendarzu" "Zaplanuj" + "Zaplanuj wydarzenie na wybraną godzinę" "Utwór" + "Śledź wybrany lot" "Kończy się miejsce" "Niektóre funkcje systemu mogą nie działać" "Za mało pamięci w systemie. Upewnij się, że masz 250 MB wolnego miejsca i uruchom urządzenie ponownie." @@ -1157,8 +1162,7 @@ "Otwórz aplikację %1$s" "Aplikacja %1$s zostanie zamknięta bez zapisywania" "Proces %1$s przekroczył limit pamięci" - - + "Pobrano zrzut sterty – kliknij, by go udostępnić" "Udostępnić zrzut stosu?" "Proces %1$s przekroczył swój limit pamięci, który wynosi %2$s. Możesz udostępnić zrzut stosu programiście procesu. Uwaga: ten zrzut może zawierać wszelkie dane osobowe, do których aplikacja ma dostęp." "Wybierz czynność, jaka ma zostać wykonana na tekście" @@ -1197,8 +1201,7 @@ "Połącz się z otwartą siecią Wi-Fi" "Połącz się z siecią Wi‑Fi operatora" - - + "Łączę z siecią Wi-Fi" "Połączono z siecią Wi-Fi" "Nie udało się połączyć z siecią Wi‑Fi" "Kliknij, by zobaczyć wszystkie sieci" @@ -1314,33 +1317,49 @@ "Aplikacja %s jest nad innymi" "Jeśli nie chcesz, by aplikacja %s korzystała z tej funkcji, otwórz ustawienia i wyłącz ją." "Wyłącz" - "Przygotowuję: %s" - "Sprawdzanie w poszukiwaniu błędów" - "Wykryto nowy nośnik: %s" + + + + + + + + "Do przenoszenia zdjęć i multimediów" - "Nośnik %s uszkodzony" - "%s: uszkodzenie. Kliknij, by naprawić." - "Nośnik %s jest uszkodzony. Wybierz, by rozwiązać problem." + + + + "Nośnik %s nieobsługiwany" "To urządzenie nie obsługuje %s. Kliknij, by użyć obsługiwanego formatu." "To urządzenie nie obsługuje nośnika %s. Wybierz, by skonfigurować obsługiwany format." "%s: nieoczekiwane wyjęcie" - "Odłącz nośnik %s przed jego wyjęciem, by uniknąć utraty danych" - "Wyjęto: %s" - "Wyjęto nośnik %s. Włóż nowy" - "Nadal wysuwam: %s…" - "Nie wyjmuj" + + + + + + + + + + "Skonfiguruj" "Odłącz" "Przeglądaj" "Brak: %s" - "Ponownie włóż urządzenie" + + "Przenoszę %s" "Przenoszę dane" - "Przenoszenie zakończone" - "Dane przeniesione na: %s" - "Nie udało się przenieść danych" - "Dane pozostały w oryginalnej lokalizacji" + + + + + + + + "Usunięto" "Odłączone" "Sprawdzam…" @@ -1399,17 +1418,14 @@ "Łączę ze stałą siecią VPN…" "Połączono ze stałą siecią VPN" "Rozłączono ze stałą siecią VPN" - - + "Nie udało się połączyć ze stałą siecią VPN" "Zmień ustawienia sieciowe lub ustawienia sieci VPN" "Wybierz plik" "Nie wybrano pliku" "Resetuj" "Prześlij" - - - - + "Tryb samochodowy jest włączony" + "Kliknij, by zakończyć tryb samochodowy." "Aktywny tethering lub punkt dostępu" "Kliknij, by skonfigurować." "Tethering został wyłączony" @@ -1917,6 +1933,14 @@ "Karta SIM nie jest obsługiwana w przypadku usług głosowych" "Karta SIM jest niedozwolona w przypadku usług głosowych" "Telefon jest niedozwolony w przypadku usług głosowych" + + + + + + + + "Wyskakujące okienko" "+ %1$d" "Zmieniono wersję aplikacji na starszą lub aplikacja nie jest zgodna z tym skrótem" @@ -1937,8 +1961,6 @@ "To nowe działanie. Kliknij, by zmienić." "Zmiany w trybie Nie przeszkadzać" "Kliknij, by sprawdzić, co jest zablokowane." - - - - + "System" + "Ustawienia" diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index 338084680c1adc761ce76b947a2d30da378e6f81..441ac9c8f486b3b7977ce5a4061498a8b10bc597 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -82,6 +82,7 @@ "Sem serviço de voz" "Nenhum serviço de voz nem chamada de emergência" "Temporariamente desativado pela sua operadora" + "Temporariamente desativado pela sua operadora para o SIM %d" "Não foi possível acessar a rede móvel" "Tente alterar a rede preferencial. Toque para alterar." "Chamadas de emergência indisponíveis" @@ -120,12 +121,13 @@ "Banner de roaming ativado" "Banner de roaming desativado" "Pesquisando serviço" - - + "Não foi possível configurar a chamada no Wi‑Fi" "Para fazer chamadas e enviar mensagens por Wi-Fi, primeiro peça à sua operadora para configurar esse serviço. Depois, ative novamente a chamada no Wi-Fi nas configurações. Código de erro: %1$s" - + + "Ocorreu um problema ao registrar a chamada no Wi‑Fi junto à sua operadora: %1$s" + "%s" "%s chamada Wi-Fi" @@ -159,10 +161,8 @@ "Há muitas solicitações sendo processadas. Tente novamente mais tarde." "Erro de login para %1$s" "Sincronizar" - - - - + "Não foi possível sincronizar" + "Tentativa de excluir muito conteúdo de %s." "O armazenamento do tablet está cheio. Exclua alguns arquivos para liberar espaço." "Armazenamento do relógio cheio. Exclua alguns arquivos para liberar espaço." "O armazenamento da TV está cheio. Exclua alguns arquivos para liberar espaço." @@ -272,40 +272,31 @@ "Alternar para o perfil de trabalho" "Contatos" "acesse seus contatos" - - + "Permitir que <b>%1$s</b> acesse seus contatos?" "Local" "acesse o local do dispositivo" - - + "Permitir que <b>%1$s</b> acesse a localização deste dispositivo?" "Agenda" "acesse sua agenda" - - + "Permitir que <b>%1$s</b> acesse sua agenda?" "SMS" "envie e veja mensagens SMS" - - + "Permitir que <b>%1$s</b> envie e veja mensagens SMS?" "Armazenamento" "acesse fotos, mídia e arquivos do dispositivo" - - + "Permitir que <b>%1$s</b> acesse fotos, mídia e arquivos no seu dispositivo?" "Microfone" "grave áudio" - - + "Permitir que <b>%1$s</b> grave áudio?" "Câmera" "tire fotos e grave vídeos" - - + "Permitir que <b>%1$s</b> tire fotos e grave vídeos?" "Telefone" "faça e gerencie chamadas telefônicas" - - + "Permitir que <b>%1$s</b> faça e gerencie chamadas telefônicas?" "Sensores corporais" "acesse dados do sensor sobre seus sinais vitais" - - + "Permitir que <b>%1$s</b> acesse os dados do sensor sobre seus sinais vitais?" "Recuperar cont. da janela" "Inspecionar o conteúdo da janela com a qual você está interagindo." "Ativar Explorar por toque" @@ -492,6 +483,8 @@ "Permite que o app se comunique com leitores, cartões e etiqueta NFC (comunicação a curta distância)." "desativar o bloqueio de tela" "Permite que o app desative o bloqueio de teclas e qualquer segurança por senha associada. Por exemplo, o telefone desativa o bloqueio de telas ao receber uma chamada e o reativa quando a chamada é finalizada." + "Usar hardware de biometria" + "Permite que o app use hardware de biometria para autenticação" "gerenciar hardware de impressão digital" "Permite que o app execute métodos para adicionar e excluir modelos de impressão digital para uso." "usar hardware de impressão digital" @@ -504,6 +497,7 @@ "Não reconhecido" + "Impressão digital autenticada" "Hardware de impressão digital não disponível." "Não foi possível armazenar a impressão digital. Remova uma impressão digital já existente." "Tempo máximo para captura da impressão digital atingido. Tente novamente." @@ -1016,14 +1010,23 @@ "Método de entrada" "Ações de texto" "E-mail" + "Enviar e-mail para endereço selecionado" "Ligar" + "Ligar para o número de telefone selecionado" "Localizar" + "Localizar endereço selecionado" "Abrir" + "Abrir URL selecionado" "Mensagem" + "Enviar mensagem para número de telefone selecionado" "Adicionar" + "Adicionar aos contatos" "Ver" + "Ver horário selecionado na agenda" "Programar" + "Programar evento para a hora selecionada" "Rastrear" + "Rastrear voo selecionado" "Pouco espaço de armazenamento" "Algumas funções do sistema podem não funcionar" "Não há armazenamento suficiente para o sistema. Certifique-se de ter 250 MB de espaço livre e reinicie." @@ -1117,8 +1120,7 @@ "Abrir %1$s" "O app %1$s será fechado sem salvar" "%1$s excedeu o limite de memória" - - + "O despejo de heap foi coletado. Toque para compartilhar." "Compartilhar despejo de heap?" "O processo %1$s excedeu seu limite de memória de %2$s. Um despejo de heap está disponível para compartilhamento com o desenvolvedor. Tenha cuidado: esse despejo de heap pode conter informações pessoais às quais o aplicativo tem acesso." "Escolha uma ação para o texto" @@ -1153,8 +1155,7 @@ "Conectar-se a uma rede Wi‑Fi aberta" "Conectar à rede Wi‑Fi da operadora" - - + "Conectando-se à rede Wi-Fi" "Conectado a uma rede Wi‑Fi" "Não foi possível conectar-se à rede Wi‑Fi" "Toque para ver todas as redes" @@ -1270,33 +1271,34 @@ "%s exibido sobre outros apps." "Se você não deseja que o %s use este recurso, toque para abrir as configurações e desativá-lo." "Desativar" - "Preparando %s" - "Procurando erros" - "Novo %s detectado" + "Verificando %s…" + "Analisando conteúdo atual" + "Novo %s" + "Toque para configurar" "Para transferir fotos e mídia" - "%s corrompido" - "%s está corrompido. Toque para corrigir." + "Ocorreu um problema com o %s" + "Toque para corrigir" "O %s está corrompido. Selecione para corrigir." "%s não compatível" "Este dispositivo não é compatível com esse %s. Toque para configurar em um formato compatível." "Este dispositivo não é compatível com este %s. Selecione para configurar um formato compatível." "%s foi removido inesperadamente" - "Desconecte %s antes da remoção para evitar a perda de dados" - "Mídia %s removida." - "Mídia %s removida. Insira uma nova" - "Ainda ejetando %s..." - "Não remova" + "Ejete a mídia antes da remoção para evitar a perda de conteúdo" + "%s removido" + "É possível que algumas funcionalidades não funcionem corretamente. Insira o novo armazenamento." + "Ejetando %s…" + "Não remova" "Configurar" "Ejetar" "Explorar" "%s ausente" - "Reinserir este dispositivo" + "Insira o dispositivo novamente" "Movendo %s" "Movendo dados" - "Transferência concluída" - "Dados movidos para %s" - "Não foi possível mover os dados" - "Dados deixados no local original" + "Transf. de conteúdo concluída" + "Conteúdo movido para %s" + "Falha ao mover o conteúdo" + "Tente mover o conteúdo novamente" "Removida" "Ejetada" "Verificando..." @@ -1355,17 +1357,14 @@ "VPN sempre ativa conectando..." "VPN sempre ativa conectada" "Desconectado da VPN sempre ativa" - - + "Não foi possível se conectar à VPN sempre ativa" "Alterar configurações de VPN ou rede" "Escolher arquivo" "Nenhum arquivo escolhido" "Redefinir" "Enviar" - - - - + "O app de direção está em execução" + "Toque para sair do app de direção." "Vínculo ou ponto de acesso ativo" "Toque para configurar." "Tethering desativado" @@ -1691,8 +1690,7 @@ "Instalado pelo seu administrador" "Atualizado pelo seu administrador" "Excluído pelo seu administrador" - - + "Para aumentar a duração da bateria, a Economia de bateria reduz o desempenho do seu dispositivo e limita ou desativa a vibração, os serviços de localização e os dados em segundo plano. E-mails, mensagens e outros apps que dependem da sincronização só podem ser atualizados se estão abertos.\n\nA Economia de bateria é desativada automaticamente quando o dispositivo está sendo carregado." "Para ajudar a reduzir o uso de dados, a Economia de dados impede que alguns apps enviem ou recebam dados em segundo plano. Um app que você esteja usando no momento pode acessar dados, mas com menos frequência. Isso pode significar que as imagens não serão exibidas até que você toque nelas." "Ativar Economia de dados?" "Ativar" @@ -1743,22 +1741,14 @@ "Som desativado por %1$s" "Há um problema interno com seu dispositivo. Ele pode ficar instável até que você faça a redefinição para configuração original." "Há um problema interno com seu dispositivo. Entre em contato com o fabricante para saber mais detalhes." - - - - - - - - - - - - - - - - + "Solicitação USSD alterada para chamada normal" + "Solicitação USSD alterada para solicitação SS" + "Alterada para nova solicitação USSD" + "Solicitação USSD alterada para videochamada" + "Solicitação SS alterada para chamada normal" + "Solicitação SS alterada para videochamada" + "Solicitação SS alterada para solicitação USSD" + "Alterada para uma nova solicitação SS" "Perfil de trabalho" "Expandir" "Recolher" @@ -1856,6 +1846,10 @@ "SIM não aprovisionado para voz" "SIM não autorizado para voz" "Smartphone não autorizado para voz" + "SIM %d não permitido" + "SIM %d não aprovisionado" + "SIM %d não permitido" + "SIM %d não permitido" "Janela pop-up" "Mais %1$d" "A versão do app passou por downgrade ou não é compatível com esse atalho" @@ -1876,8 +1870,6 @@ "Este é um novo comportamento. Toque para alterar." "O modo \"Não perturbe\" foi alterado" "Toque para verificar o que está bloqueado." - - - - + "Sistema" + "Configurações" diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 324b36fbee944e9f3d22262042dfd12b7f826349..eccb4de89ea998290c52cd22324682101246206c 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -82,6 +82,7 @@ "Sem serviço de voz" "Sem serviço de voz ou chamadas de emergência" "Serviço temporariamente desativado pelo operador." + "Serviço temporariamente desativado pelo operador no SIM %d." "Não é possível estabelecer ligação à rede móvel." "Experimente alterar a rede preferida. Toque para alterar." "Chamadas de emergência indisponíveis" @@ -120,12 +121,13 @@ "Faixa de Roaming activada" "Faixa de Roaming desativada" "A procurar Serviço" - - + "Não foi possível configurar a funcionalidade Chamadas Wi-Fi." "Para fazer chamadas e enviar mensagens por Wi-Fi, comece por pedir ao seu operador para configurar este serviço. De seguida, nas Definições, ative novamente as Chamadas Wi-Fi. (Código de erro: %1$s)" - + + "Ocorreu um problema ao registar a funcionalidade Chamadas Wi-Fi junto do seu operador: %1$s" + "%s" "Chamadas por Wi-Fi da %s" @@ -481,6 +483,8 @@ "Permite que a aplicação comunique com etiquetas, cartões e leitores Near Field Communication (NFC)." "desativar o bloqueio do ecrã" "Permite que a aplicação desative o bloqueio de teclas e qualquer segurança por palavra-passe associada. Por exemplo, o telemóvel desativa o bloqueio de teclas quando recebe uma chamada e reativa o bloqueio de teclas ao terminar a chamada." + "Utilizar hardware biométrico" + "Permite que a aplicação utilize hardware biométrico para autenticação." "gerir o hardware de impressão digital" "Permite que a aplicação invoque métodos para adicionar e eliminar modelos de impressão digital para utilização." "utilizar o hardware de impressão digital" @@ -493,6 +497,7 @@ "Não reconhecido" + "A impressão digital foi autenticada." "Hardware de impressão digital não disponível." "Não é possível armazenar a impressão digital. Remova uma impressão digital existente." "Foi atingido o limite de tempo da impressão digital. Tente novamente." @@ -1005,14 +1010,23 @@ "Método de entrada" "Acções de texto" "Email" + "Enviar um email para o endereço selecionado" "Telefonar" + "Telefonar para o número de telefone selecionado" "Localizar" + "Localizar o endereço selecionado" "Abrir" + "Abrir o URL selecionado" "Mensagem" + "Enviar uma mensagem para o número de telefone selecionado" "Adicionar" + "Adicionar aos contactos" "Ver" + "Ver a hora selecionada no calendário" "Agendar" + "Agendar um evento para a hora selecionada" "Monitorizar" + "Monitorizar o voo selecionado" "Está quase sem espaço de armazenamento" "Algumas funções do sistema poderão não funcionar" "Não existe armazenamento suficiente para o sistema. Certifique-se de que tem 250 MB de espaço livre e reinicie." @@ -1141,8 +1155,7 @@ "Ligar à rede Wi-Fi aberta" "Estabelecer ligação à rede Wi‑Fi do operador" - - + "A ligar à rede Wi-Fi…" "Ligado à rede Wi-Fi" "Não foi possível ligar à rede Wi-Fi" "Toque para ver todas as redes" @@ -1258,33 +1271,34 @@ "O %s sobrepõe-se a outras aplic." "Se não pretende que a aplicação %s utilize esta funcionalidade, toque para abrir as definições e desative-a." "Desligar" - "A preparar o %s" - "A verificar a presença de erros" - "Novo %s detetado" + "A verificar o %s…" + "A rever o conteúdo atual…" + "Novo %s." + "Toque para configurar." "Transf. fotos, conteúdos multimédia." - "%s danificado" - "O %s está corrompido. Toque para o corrigir." + "Ocorreu um problema com o %s" + "Toque para corrigir." "O(a) %s está danificado(a). Selecione para corrigir." "%s não suportado" "Este dispositivo não é compatível com este %s. Toque para o configurar num formato compatível." "Este dispositivo não é compatível com este(a) %s. Selecione para configurar num formato compatível." "%s foi removido inesperadamente" - "Desmontar o %s antes da remoção para evitar a perda de dados" - "%s removido" - "%s removido; insira um novo" - "Ainda a ejetar %s…" - "Não remover" + "Ejete o armazenamento multimédia antes de o remover para evitar a perda de conteúdos." + "%s removido" + "Algumas funcionalidades podem não funcionar corretamente. Insira um novo armazenamento." + "A ejetar %s…" + "Não remova." "Configurar" "Ejetar" "Explorar" "%s em falta" - "Reinserir este dispositivo" + "Volte a inserir o dispositivo." "A mover %s" "A mover dados" - "Transferência concluída" - "Os dados foram movidos para %s" - "Não foi possível mover os dados" - "Os dados permaneceram na localização original" + "Transf. de conteúdo concluída" + "Conteúdo movido para o %s" + "Não é possível mover o conteúdo" + "Experimente mover novamente o conteúdo" "Removido" "Ejetado" "A verificar…" @@ -1676,8 +1690,7 @@ "Instalado pelo seu gestor" "Atualizado pelo seu gestor" "Eliminado pelo seu gestor" - - + "Para prolongar a autonomia da bateria, a Poupança de bateria reduz o desempenho do dispositivo e limita ou desativa a vibração, os serviços de localização e os dados de segundo plano. O email, as mensagens e outras aplicações que dependem da sincronização podem não ser atualizados, exceto se os abrir.\n\nA Poupança de bateria desliga-se automaticamente quando o dispositivo está a carregar." "Para ajudar a reduzir a utilização de dados, a Poupança de dados impede que algumas aplicações enviem ou recebam dados em segundo plano. Uma determinada aplicação que esteja a utilizar atualmente pode aceder aos dados, mas é possível que o faça com menos frequência. Isto pode significar, por exemplo, que as imagens não são apresentadas até que toque nas mesmas." "Ativar a Poupança de dados?" "Ativar" @@ -1728,22 +1741,14 @@ "Som desativado por %1$s" "Existe um problema interno no seu dispositivo e pode ficar instável até efetuar uma reposição de dados de fábrica." "Existe um problema interno no seu dispositivo. Contacte o fabricante para obter mais informações." - - - - - - - - - - - - - - - - + "O pedido USSD foi alterado para uma chamada normal." + "O pedido USSD foi alterado para um pedido SS." + "Foi alterado para um novo pedido USSD." + "O pedido USSD foi alterado para uma videochamada." + "O pedido SS foi alterado para uma chamada normal." + "O pedido SS foi alterado para uma videochamada." + "O pedido SS foi alterado para um novo pedido USSD." + "Foi alterado para um novo pedido SS." "Perfil de trabalho" "Expandir" "Reduzir" @@ -1841,6 +1846,10 @@ "SIM não aprovisionado para voz" "SIM não permitido para voz" "Telemóvel não permitido para voz" + "SIM %d não autorizado" + "SIM %d não aprovisionado" + "SIM %d não autorizado" + "SIM %d não autorizado" "Janela pop-up" "+ %1$d" "A aplicação foi alterada para a versão anterior ou não é compatível com este atalho." diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 338084680c1adc761ce76b947a2d30da378e6f81..441ac9c8f486b3b7977ce5a4061498a8b10bc597 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -82,6 +82,7 @@ "Sem serviço de voz" "Nenhum serviço de voz nem chamada de emergência" "Temporariamente desativado pela sua operadora" + "Temporariamente desativado pela sua operadora para o SIM %d" "Não foi possível acessar a rede móvel" "Tente alterar a rede preferencial. Toque para alterar." "Chamadas de emergência indisponíveis" @@ -120,12 +121,13 @@ "Banner de roaming ativado" "Banner de roaming desativado" "Pesquisando serviço" - - + "Não foi possível configurar a chamada no Wi‑Fi" "Para fazer chamadas e enviar mensagens por Wi-Fi, primeiro peça à sua operadora para configurar esse serviço. Depois, ative novamente a chamada no Wi-Fi nas configurações. Código de erro: %1$s" - + + "Ocorreu um problema ao registrar a chamada no Wi‑Fi junto à sua operadora: %1$s" + "%s" "%s chamada Wi-Fi" @@ -159,10 +161,8 @@ "Há muitas solicitações sendo processadas. Tente novamente mais tarde." "Erro de login para %1$s" "Sincronizar" - - - - + "Não foi possível sincronizar" + "Tentativa de excluir muito conteúdo de %s." "O armazenamento do tablet está cheio. Exclua alguns arquivos para liberar espaço." "Armazenamento do relógio cheio. Exclua alguns arquivos para liberar espaço." "O armazenamento da TV está cheio. Exclua alguns arquivos para liberar espaço." @@ -272,40 +272,31 @@ "Alternar para o perfil de trabalho" "Contatos" "acesse seus contatos" - - + "Permitir que <b>%1$s</b> acesse seus contatos?" "Local" "acesse o local do dispositivo" - - + "Permitir que <b>%1$s</b> acesse a localização deste dispositivo?" "Agenda" "acesse sua agenda" - - + "Permitir que <b>%1$s</b> acesse sua agenda?" "SMS" "envie e veja mensagens SMS" - - + "Permitir que <b>%1$s</b> envie e veja mensagens SMS?" "Armazenamento" "acesse fotos, mídia e arquivos do dispositivo" - - + "Permitir que <b>%1$s</b> acesse fotos, mídia e arquivos no seu dispositivo?" "Microfone" "grave áudio" - - + "Permitir que <b>%1$s</b> grave áudio?" "Câmera" "tire fotos e grave vídeos" - - + "Permitir que <b>%1$s</b> tire fotos e grave vídeos?" "Telefone" "faça e gerencie chamadas telefônicas" - - + "Permitir que <b>%1$s</b> faça e gerencie chamadas telefônicas?" "Sensores corporais" "acesse dados do sensor sobre seus sinais vitais" - - + "Permitir que <b>%1$s</b> acesse os dados do sensor sobre seus sinais vitais?" "Recuperar cont. da janela" "Inspecionar o conteúdo da janela com a qual você está interagindo." "Ativar Explorar por toque" @@ -492,6 +483,8 @@ "Permite que o app se comunique com leitores, cartões e etiqueta NFC (comunicação a curta distância)." "desativar o bloqueio de tela" "Permite que o app desative o bloqueio de teclas e qualquer segurança por senha associada. Por exemplo, o telefone desativa o bloqueio de telas ao receber uma chamada e o reativa quando a chamada é finalizada." + "Usar hardware de biometria" + "Permite que o app use hardware de biometria para autenticação" "gerenciar hardware de impressão digital" "Permite que o app execute métodos para adicionar e excluir modelos de impressão digital para uso." "usar hardware de impressão digital" @@ -504,6 +497,7 @@ "Não reconhecido" + "Impressão digital autenticada" "Hardware de impressão digital não disponível." "Não foi possível armazenar a impressão digital. Remova uma impressão digital já existente." "Tempo máximo para captura da impressão digital atingido. Tente novamente." @@ -1016,14 +1010,23 @@ "Método de entrada" "Ações de texto" "E-mail" + "Enviar e-mail para endereço selecionado" "Ligar" + "Ligar para o número de telefone selecionado" "Localizar" + "Localizar endereço selecionado" "Abrir" + "Abrir URL selecionado" "Mensagem" + "Enviar mensagem para número de telefone selecionado" "Adicionar" + "Adicionar aos contatos" "Ver" + "Ver horário selecionado na agenda" "Programar" + "Programar evento para a hora selecionada" "Rastrear" + "Rastrear voo selecionado" "Pouco espaço de armazenamento" "Algumas funções do sistema podem não funcionar" "Não há armazenamento suficiente para o sistema. Certifique-se de ter 250 MB de espaço livre e reinicie." @@ -1117,8 +1120,7 @@ "Abrir %1$s" "O app %1$s será fechado sem salvar" "%1$s excedeu o limite de memória" - - + "O despejo de heap foi coletado. Toque para compartilhar." "Compartilhar despejo de heap?" "O processo %1$s excedeu seu limite de memória de %2$s. Um despejo de heap está disponível para compartilhamento com o desenvolvedor. Tenha cuidado: esse despejo de heap pode conter informações pessoais às quais o aplicativo tem acesso." "Escolha uma ação para o texto" @@ -1153,8 +1155,7 @@ "Conectar-se a uma rede Wi‑Fi aberta" "Conectar à rede Wi‑Fi da operadora" - - + "Conectando-se à rede Wi-Fi" "Conectado a uma rede Wi‑Fi" "Não foi possível conectar-se à rede Wi‑Fi" "Toque para ver todas as redes" @@ -1270,33 +1271,34 @@ "%s exibido sobre outros apps." "Se você não deseja que o %s use este recurso, toque para abrir as configurações e desativá-lo." "Desativar" - "Preparando %s" - "Procurando erros" - "Novo %s detectado" + "Verificando %s…" + "Analisando conteúdo atual" + "Novo %s" + "Toque para configurar" "Para transferir fotos e mídia" - "%s corrompido" - "%s está corrompido. Toque para corrigir." + "Ocorreu um problema com o %s" + "Toque para corrigir" "O %s está corrompido. Selecione para corrigir." "%s não compatível" "Este dispositivo não é compatível com esse %s. Toque para configurar em um formato compatível." "Este dispositivo não é compatível com este %s. Selecione para configurar um formato compatível." "%s foi removido inesperadamente" - "Desconecte %s antes da remoção para evitar a perda de dados" - "Mídia %s removida." - "Mídia %s removida. Insira uma nova" - "Ainda ejetando %s..." - "Não remova" + "Ejete a mídia antes da remoção para evitar a perda de conteúdo" + "%s removido" + "É possível que algumas funcionalidades não funcionem corretamente. Insira o novo armazenamento." + "Ejetando %s…" + "Não remova" "Configurar" "Ejetar" "Explorar" "%s ausente" - "Reinserir este dispositivo" + "Insira o dispositivo novamente" "Movendo %s" "Movendo dados" - "Transferência concluída" - "Dados movidos para %s" - "Não foi possível mover os dados" - "Dados deixados no local original" + "Transf. de conteúdo concluída" + "Conteúdo movido para %s" + "Falha ao mover o conteúdo" + "Tente mover o conteúdo novamente" "Removida" "Ejetada" "Verificando..." @@ -1355,17 +1357,14 @@ "VPN sempre ativa conectando..." "VPN sempre ativa conectada" "Desconectado da VPN sempre ativa" - - + "Não foi possível se conectar à VPN sempre ativa" "Alterar configurações de VPN ou rede" "Escolher arquivo" "Nenhum arquivo escolhido" "Redefinir" "Enviar" - - - - + "O app de direção está em execução" + "Toque para sair do app de direção." "Vínculo ou ponto de acesso ativo" "Toque para configurar." "Tethering desativado" @@ -1691,8 +1690,7 @@ "Instalado pelo seu administrador" "Atualizado pelo seu administrador" "Excluído pelo seu administrador" - - + "Para aumentar a duração da bateria, a Economia de bateria reduz o desempenho do seu dispositivo e limita ou desativa a vibração, os serviços de localização e os dados em segundo plano. E-mails, mensagens e outros apps que dependem da sincronização só podem ser atualizados se estão abertos.\n\nA Economia de bateria é desativada automaticamente quando o dispositivo está sendo carregado." "Para ajudar a reduzir o uso de dados, a Economia de dados impede que alguns apps enviem ou recebam dados em segundo plano. Um app que você esteja usando no momento pode acessar dados, mas com menos frequência. Isso pode significar que as imagens não serão exibidas até que você toque nelas." "Ativar Economia de dados?" "Ativar" @@ -1743,22 +1741,14 @@ "Som desativado por %1$s" "Há um problema interno com seu dispositivo. Ele pode ficar instável até que você faça a redefinição para configuração original." "Há um problema interno com seu dispositivo. Entre em contato com o fabricante para saber mais detalhes." - - - - - - - - - - - - - - - - + "Solicitação USSD alterada para chamada normal" + "Solicitação USSD alterada para solicitação SS" + "Alterada para nova solicitação USSD" + "Solicitação USSD alterada para videochamada" + "Solicitação SS alterada para chamada normal" + "Solicitação SS alterada para videochamada" + "Solicitação SS alterada para solicitação USSD" + "Alterada para uma nova solicitação SS" "Perfil de trabalho" "Expandir" "Recolher" @@ -1856,6 +1846,10 @@ "SIM não aprovisionado para voz" "SIM não autorizado para voz" "Smartphone não autorizado para voz" + "SIM %d não permitido" + "SIM %d não aprovisionado" + "SIM %d não permitido" + "SIM %d não permitido" "Janela pop-up" "Mais %1$d" "A versão do app passou por downgrade ou não é compatível com esse atalho" @@ -1876,8 +1870,6 @@ "Este é um novo comportamento. Toque para alterar." "O modo \"Não perturbe\" foi alterado" "Toque para verificar o que está bloqueado." - - - - + "Sistema" + "Configurações" diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index 33bcb11fecb1756ae0223b36a8574f3e1bcb2dc6..b173057c61a37d3379ba229dae43307dc5eae858 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -83,6 +83,7 @@ "Fără servicii vocale" "Fără servicii de voce sau apeluri de urgență" "Dezactivat temporar de operator" + "Dezactivat temporar de operator pentru numărul de card SIM %d" "Nu se poate stabili conexiunea la rețeaua mobilă" "Încercați să schimbați rețeaua preferată. Atingeți pentru a schimba." "Apelurile de urgență nu sunt disponibile" @@ -121,12 +122,13 @@ "Banner roaming activat" "Banner roaming dezactivat" "Se caută serviciul" - - + "Nu s-a putut configura apelarea prin Wi-Fi" "Pentru a efectua apeluri și a trimite mesaje prin Wi-Fi, mai întâi solicitați configurarea acestui serviciu la operator. Apoi, activați din nou apelarea prin Wi-Fi din Setări. (Cod de eroare: %1$s)" - + + "A apărut o problemă la înregistrarea apelării prin Wi‑Fi la operatorul dvs.: %1$s" + "%s" "Apelare prin Wi-Fi %s" @@ -484,6 +486,8 @@ "Permite aplicației să comunice cu etichetele, cardurile și cititoarele NFC (Near Field Communication)." "dezactivează blocarea ecranului" "Permite aplicației să dezactiveze blocarea tastelor și orice modalitate asociată de securizare prin parolă. De exemplu, telefonul dezactivează blocarea tastelor când se primește un apel telefonic și reactivează blocarea tastelor la terminarea apelului." + "utilizați hardware biometric" + "Permite aplicației să folosească hardware biometric pentru autentificare" "gestionează hardware-ul pentru amprentă" "Permite aplicației să invoce metode pentru a adăuga și pentru a șterge șabloane de amprentă pentru utilizare." "folosește hardware-ul pentru amprentă" @@ -496,6 +500,7 @@ "Nu este recunoscută" + "Amprentă autentificată" "Hardware-ul pentru amprentă nu este disponibil." "Amprenta nu poate fi stocată. Eliminați o amprentă existentă." "Timpul pentru amprentare a expirat. Încercați din nou." @@ -1025,14 +1030,23 @@ "Metodă de intrare" "Acțiuni pentru text" "E-mail" + "Trimiteți e-mail la adresa selectată" "Apelați" + "Apelați numărul de telefon selectat" "Localizați" + "Localizați adresa selectată" "Deschideți" + "Deschideți adresa URL selectată" "Mesaj" + "Trimiteți un mesaj la numărul de telefon selectat" "Adăugați" + "Adăugați la persoanele din Agendă" "Afișați" + "Afișați ora selectată în calendar" "Program" + "Programați evenimentul pentru momentul selectat" "Urmăriți" + "Urmăriți zborul selectat" "Spațiul de stocare aproape ocupat" "Este posibil ca unele funcții de sistem să nu funcționeze" "Spațiu de stocare insuficient pentru sistem. Asigurați-vă că aveți 250 MB de spațiu liber și reporniți." @@ -1163,8 +1177,7 @@ "Conectați-vă la o rețea Wi‑Fi deschisă" "Conectați-vă la rețeaua Wi-Fi a operatorului" - - + "Se conectează la rețeaua Wi-Fi" "S-a realizat conexiunea la rețeaua Wi-Fi" "Nu s-a putut stabili conexiunea la rețeaua Wi-Fi" "Atingeți pentru a vedea toate rețelele" @@ -1280,33 +1293,34 @@ "%s se afișează peste aplicații" "Dacă nu doriți ca %s să utilizeze această funcție, atingeți pentru a deschide setările și dezactivați-o." "Dezactivați" - "Se pregătește %s" - "Se verifică dacă există erori" - "A fost detectat un nou %s" + "Se verifică %s…" + "Se examinează conținutul curent" + "%s nou" + "Atingeți pentru a configura" "Pentru a transfera fotografii și fișiere media" - "%s este deteriorat" - "%s este deteriorat. Atingeți pentru a remedia." + "Problemă cu %s" + "Atingeți pentru a remedia" "%s este corupt. Selectați pentru a remedia." "%s necompatibil" "Dispozitivul nu este compatibil cu acest %s. Atingeți pentru configurare într-un format compatibil." "Dispozitivul nu este compatibil cu acest %s. Selectați pentru configurare într-un format compatibil." "%s scos pe neașteptate" - "Demontați %s înainte de a-l scoate pentru a nu pierde datele" - "%s scos" - "%s scos; introduceți unul nou" - "Se scoate %s…" - "Nu scoateți" + "Îndepărtați dispozitivele media înainte de a le elimina pentru a evita pierderea conținutului" + "S-a eliminat %s" + "Este posibil ca unele funcții să nu funcționeze corespunzător. Introduceți un spațiu de stocare nou." + "Se scoate %s" + "Nu scoateți" "Configurați" "Scoateți" "Explorați" "%s lipsește" - "Reintroduceți dispozitivul" + "Reintroduceți dispozitivul" "Se mută %s" "Se mută datele" - "Mutare finalizată" - "Date mutate pe %s" - "Nu s-au putut muta datele" - "Au rămas date în locația inițială" + "Transfer de conținut încheiat" + "Conținut mutat pe %s" + "Nu s-a putut muta conținutul" + "Încercați să mutați din nou conținutul" "Eliminat" "Scos" "Se verifică..." @@ -1701,8 +1715,7 @@ "Instalat de administratorul dvs." "Actualizat de administratorul dvs." "Șters de administratorul dvs." - - + "Pentru a prelungi autonomia bateriei, Economisirea bateriei reduce performanțele dispozitivului și limitează sau dezactivează vibrațiile, serviciile de localizare și datele de fundal. Este posibil ca e-mailurile, mesageria și alte aplicații care depind de sincronizare să nu se actualizeze dacă nu le deschideți.\n\nEconomisirea bateriei se dezactivează automat când dispozitivul se încarcă." "Pentru a contribui la reducerea utilizării de date, Economizorul de date împiedică unele aplicații să trimită sau să primească date în fundal. O aplicație pe care o folosiți poate accesa datele, însă mai rar. Aceasta poate însemna, de exemplu, că imaginile se afișează numai după ce le atingeți." "Activați Economizorul de date?" "Activați" @@ -1761,22 +1774,14 @@ "Dezactivate de %1$s" "A apărut o problemă internă pe dispozitiv, iar acesta poate fi instabil până la revenirea la setările din fabrică." "A apărut o problemă internă pe dispozitiv. Pentru detalii, contactați producătorul." - - - - - - - - - - - - - - - - + "Solicitarea USSD a fost schimbată cu un apel obișnuit" + "Solicitarea USSD a fost schimbată cu o solicitare SS" + "Schimbat cu o solicitare USSD nouă" + "Solicitarea USSD a fost schimbată cu un apel video" + "Solicitarea SS a fost schimbată cu un apel obișnuit" + "Solicitarea SS a fost schimbată cu un apel video" + "Solicitarea SS a fost schimbată cu o solicitare USSD" + "Schimbat cu o solicitare SS nouă" "Profil de serviciu" "Extindeți" "Restrângeți" @@ -1876,6 +1881,10 @@ "Cardul SIM nu este activat pentru voce" "Cardul SIM nu este permis pentru voce" "Telefonul nu este permis pentru voce" + "Cardul SIM %d nu este permis" + "Cardul SIM %d nu este prevăzut" + "Cardul SIM %d nu este permis" + "Cardul SIM %d nu este permis" "Fereastră pop-up" "+ %1$d" "Aplicația a trecut la o versiune inferioară sau nu este compatibilă cu această comandă rapidă" diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index bea3f8b873926ae781aeb4f8bf5ed64994e196e1..db71ecd30f6f9e788b7494264623337004a1d024 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -79,15 +79,16 @@ "Идентификация абонента по умолчанию не запрещена. След. вызов: разрешена" "Услуга не предоставляется." "Невозможно изменить параметр идентификатора вызывающего абонента." - "Мобильный Интернет недоступен" - "Экстренные вызовы заблокированы" + "Мобильный Интернет недоступен" + "Экстренные вызовы недоступны" "Голосовые вызовы недоступны" - "Голосовые и экстренные вызовы недоступны" - "Местная мобильная сеть временно не поддерживает эту функцию." - "Сеть недоступна" - "Чтобы улучшить сигнал, попробуйте выбрать другой тип сети в настройках (раздел \"Мобильные сети\")." - "Включена функция \"Звонки по Wi‑Fi\"" - "Для экстренных вызовов требуется мобильная сеть." + "Голосовые и экстренные вызовы недоступны" + "Временно отключено вашим оператором связи." + "Временно отключено оператором связи для SIM-карты %d." + "Мобильная сеть недоступна" + "Нажмите, чтобы выбрать другую сеть." + "Экстренные вызовы недоступны" + "Экстренные вызовы по Wi‑Fi недоступны." "Оповещения" "Переадресация вызовов" "Режим экстренных обратных вызовов" @@ -122,12 +123,12 @@ "Баннер роуминга включен" "Баннер роуминга выключен" "Поиск службы" - "Звонки по Wi-Fi" + "Не удалось подключить функцию \"Звонки по Wi-Fi\"" "Чтобы совершать звонки и отправлять сообщения по Wi-Fi, необходимо подключить эту услугу через оператора связи. После этого вы сможете выбрать этот параметр в настройках. Код ошибки: %1$s." - "Укажите оператора и зарегистрируйтесь (код ошибки: %1$s)" + "Ошибка подключения функции \"Звонки по Wi-Fi\" через вашего оператора: %1$s" "%s" @@ -162,8 +163,8 @@ "Обрабатывается слишком много запросов. Повторите попытку позднее." "Ошибка входа в аккаунт %1$s" "Синхр." - "Синхр." - "Слишком много удалений %s." + "Ошибка синхронизации" + "Вы попытались удалить слишком много элементов (%s)." "Память планшетного ПК заполнена. Удалите какие-нибудь файлы, чтобы освободить место." "Память устройства заполнена. Удалите файлы, чтобы освободить место." "Нет места в памяти телевизора. Удалите ненужные файлы." @@ -178,14 +179,13 @@ "Администратор рабочего профиля" "администратором домена %s" "Рабочий профиль удален" - "Рабочий профиль удален, поскольку отсутствует приложение для администрирования" "Приложение для администрирования рабочего профиля отсутствует или повреждено. Из-за этого рабочий профиль и связанные с ним данные были удалены. Если у вас возникли вопросы, обратитесь к администратору." "Ваш рабочий профиль больше не доступен на этом устройстве" "Слишком много попыток ввести пароль." "Это управляемое устройство" "Ваша организация управляет этим устройством и может отслеживать сетевой трафик. Подробнее…" "Все данные с устройства будут удалены" - "Невозможно использовать приложение для администрирования. С устройства будут удалены все данные.\n\nЕсли у вас возникли вопросы, обратитесь к администратору." + "Невозможно использовать приложение для администрирования. С устройства будут удалены все данные.\n\nЕсли у вас возникли вопросы, обратитесь к администратору." "Функция печати отключена приложением \"%s\"" "Я" "Настройки планшетного ПК" @@ -242,6 +242,9 @@ "Режим полета" "Выключить" "Включить" + "Режим энергосбережения" + "Выключить" + "Включить" "Настройки" "Помощник" "Аудиоподсказки" @@ -275,31 +278,31 @@ "Переключиться на рабочий профиль" "Контакты" "доступ к контактам" - "Разрешите приложению <b>%1$s</b> доступ к контактам" + "Разрешить приложению <b>\"%1$s\"</b> доступ к контактам?" "Местоположение" "доступ к данным о местоположении устройства" - "Разрешите приложению <b>%1$s</b> доступ к данным о местоположении устройства" + "Разрешить приложению <b>\"%1$s\"</b> доступ к данным о местоположении устройства?" "Календарь" "доступ к календарю" - "Разрешите приложению <b>%1$s</b> доступ к календарю" + "Разрешить приложению <b>\"%1$s\"</b> доступ к календарю?" "SMS" "отправлять и просматривать SMS-сообщения" - "Разрешите приложению <b>%1$s</b> отправлять и просматривать SMS" + "Разрешить приложению <b>\"%1$s\"</b> отправлять и просматривать SMS?" "Память" "доступ к фото, мультимедиа и файлам на вашем устройстве" - "Разрешить приложению <b>%1$s</b> доступ к фото, мультимедиа и файлам на устройстве" + "Разрешить приложению <b>\"%1$s\"</b> доступ к фото, мультимедиа и файлам на устройстве?" "Микрофон" "записывать аудио" - "Разрешите приложению <b>%1$s</b> записывать аудио" + "Разрешить приложению <b>\"%1$s\"</b> записывать аудио?" "Камера" "снимать фото и видео" - "Разрешите приложению <b>%1$s</b> снимать фото и видео" + "Разрешить приложению <b>\"%1$s\"</b> снимать фото и видео?" "Телефон" - "осуществление телефонных звонков и управление ими" - "Разрешите приложению <b>%1$s</b> выполнять звонки и управлять ими" + "осуществлять вызовы и управлять ими" + "Разрешить приложению <b>\"%1$s\"</b> совершать звонки и управлять ими?" "Нательные датчики" "доступ к данным датчиков о состоянии организма" - "Разрешите приложению <b>%1$s</b> доступ к данным датчиков о состоянии организма" + "Разрешить приложению <b>\"%1$s\"</b> доступ к данным датчиков о состоянии организма?" "Получать содержимое окна" "Анализировать содержимое активного окна." "Включать Изучение касанием" @@ -310,8 +313,8 @@ "Управлять позиционированием и размером изображения на экране." "Жесты" "Может выполнять жесты нажатия, пролистывания, масштабирования и т. д." - "Жесты для отпечатков пальцев" - "Сохраняет жесты, выполненные на сканере отпечатков пальцев." + "Регистрировать жесты на сканере отпечатков пальцев" + "Использовать сканер отпечатков пальцев для дополнительных жестов." "Отключение/изменение строки состояния" "Приложение сможет отключать строку состояния, а также добавлять и удалять системные значки." "Замена строки состояния" @@ -362,6 +365,8 @@ "Приложение сможет постоянно хранить свои компоненты в памяти. Это может уменьшить объем памяти, доступный другим приложениям, и замедлить работу устройства." "Сохранение элементов приложения в памяти. Это может ограничить объем памяти, доступный другим приложениям, и замедлить работу телевизора." "Приложение сможет постоянно хранить свои компоненты в памяти. Это может уменьшить объем памяти, доступный другим приложениям, и замедлить работу устройства." + "запускать активные сервисы" + "Разрешить приложению использовать активные сервисы." "Вычисление объема памяти приложений" "Приложение сможет получать сведения о размере кода, данных и кеша." "Изменение настроек системы" @@ -484,6 +489,8 @@ "Приложение сможет обмениваться данными с NFC-метками, картами и устройствами считывания, используя NFC." "Отключение функции блокировки экрана" "Приложение сможет отключать блокировку экрана и другие функции защиты. Например, блокировка экрана будет отключаться при получении входящего вызова и включаться после завершения разговора." + "Использование биометрического оборудования" + "Приложение сможет использовать биометрическое оборудование для аутентификации" "управление сканером отпечатков" "Приложение сможет добавлять и удалять шаблоны отпечатков пальцев." "Использование сканера отпечатков" @@ -496,6 +503,7 @@ "Не распознано" + "Отпечаток пальца проверен" "Сканер недоступен" "Чтобы сохранить новый отпечаток, удалите существующий." "Превышено время ожидания. Повторите попытку." @@ -808,6 +816,8 @@ "Графический ключ" "Фейсконтроль" "PIN-код" + "Разблокировка PIN-кода SIM-карты." + "Разблокировка PUK-кода SIM-карты." "Пароль" "Область ввода графического ключа" "Область слайдера" @@ -869,6 +879,12 @@ "Текст скопирован в буфер обмена." "Ещё" "Меню+" + "Meta +" + "Ctrl +" + "Alt +" + "Shift +" + "Sym +" + "Fn +" "пробел" "ввод" "удалить" @@ -1034,14 +1050,23 @@ "Способ ввода" "Операции с текстом" "Письмо" + "Отправить письмо выбранному адресату" "Позвонить" + "Позвонить по выбранному номеру" "Найти на карте" + "Показать на карте выбранный адрес" "Открыть" + "Открыть выбранный URL" "Написать SMS" + "Отправить SMS на выбранный номер" "Добавить" + "Добавить в контакты" "Открыть" + "Посмотреть выбранный день в календаре" "Расписание" + "Запланировать событие на выбранный день" "Отследить" + "Отслеживать выбранный рейс" "Недостаточно памяти" "Некоторые функции могут не работать" "Недостаточно свободного места для системы. Освободите не менее 250 МБ дискового пространства и перезапустите устройство." @@ -1114,31 +1139,28 @@ "Проверить обновления" "Приложение \"%1$s\" (процесс: %2$s) нарушило собственную политику StrictMode." "Процесс %1$s нарушил собственную политику StrictMode." - "Обновление Android..." - "Запуск Android…" + "Обновление телефона…" + "Обновление планшета…" + "Обновление устройства…" + "Запуск телефона…" + "Запуск планшета…" + "Запуск устройства…" "Оптимизация хранилища…" - "Завершается обновление Android" - "Во время обновления возможны неполадки в работе приложений." + "Завершение обновления системы…" "Обновление приложения \"%1$s\"…" "Оптимизация приложения %1$d из %2$d." "Подготовка приложения \"%1$s\"..." "Запуск приложений." "Окончание загрузки..." "Приложение %1$s запущено" - - - - - - - - - - - - + "Нажмите, чтобы вернуться в игру." + "Выберите игру" + "Чтобы не снижалась производительность, не открывайте больше одной игры." + "Вернуться к приложению \"%1$s\"" + "Открыть приложение \"%1$s\"" + "Приложение \"%1$s\" будет закрыто без сохранения." "Объем памяти процесса \"%1$s\" превышен" - "Создан дамп кучи. Нажмите, чтобы отправить его." + "Создан дамп кучи. Нажмите, чтобы отправить его." "Отправить дамп кучи?" "Процесс \"%1$s\" превысил объем памяти (%2$s). При необходимости отправьте созданный дамп кучи разработчику. Обратите внимание, что файл может содержать личные данные, доступные приложению." "Выберите действие для текста" @@ -1177,12 +1199,12 @@ "Подключитесь к открытой сети Wi‑Fi" "Подключитесь к сети Wi‑Fi оператора" - "Подключение к открытой сети Wi‑Fi…" + "Идет подключение к сети Wi-Fi…" "Подключено к сети Wi-Fi" "Не удалось подключиться к сети Wi‑Fi" "Нажмите, чтобы увидеть список сетей" "Подключиться" - "Все сети" + "Все сети" "Wi-Fi включится автоматически" "Когда вы будете в зоне действия сохраненной сети с хорошим сигналом." "Не включать снова" @@ -1248,6 +1270,7 @@ "Перезапустить" "Включить мобильную связь" "Скачайте приложение оператора, чтобы активировать новую SIM-карту" + "Чтобы активировать новую SIM-карту, скачайте приложение %1$s." "Скачать приложение" "Установлена новая SIM-карта" "Нажмите, чтобы настроить." @@ -1266,13 +1289,13 @@ "Режим PTP включен" "Режим USB-модема включен" "Режим MIDI включен" - "USB-устройство подключено" + "USB-устройство подключено" "Нажмите, чтобы показать дополнительные параметры." "Подключенное устройство заряжается. Нажмите, чтобы увидеть другие настройки." "Обнаружено аналоговое аудиоустройство" "Подсоединенное устройство несовместимо с этим телефоном. Нажмите, чтобы узнать подробности." "Отладка по USB разрешена" - "Нажмите, чтобы отключить отладку по USB." + "Нажмите, чтобы отключить отладку по USB." "Нажмите, чтобы отключить отладку по USB." "Подготовка отчета об ошибке" "Разрешить доступ к информации об ошибке?" @@ -1291,34 +1314,35 @@ "%s: поверх других приложений" "%s: поверх других приложений" "Чтобы отключить эту функцию для приложения %s, перейдите в настройки." - "ОТКЛЮЧИТЬ" - "Подготовка карты \"%s\"…" - "Поиск ошибок" - "Обнаружена новая карта \"%s\"" + "Отключить" + "Проверка накопителя (%s)…" + "Выполняем проверку контента." + "Новый накопитель: %s." + "Нажмите, чтобы настроить." "Для переноса фотографий и других файлов" - "%s не работает" - "%s: носитель поврежден. Нажмите, чтобы устранить неполадки." + "Проблема с накопителем (%s)" + "Нажмите здесь, чтобы исправить." "Внешний носитель (%s) поврежден. Выберите, чтобы исправить." "%s не поддерживается" "Устройство не поддерживает этот носитель (%s). Нажмите, чтобы настроить." "Внешний носитель (%s) не поддерживается на этом устройстве. Выберите, чтобы изменить формат." "Карта \"%s\" извлечена неправильно" - "Перед тем как извлечь карту \"%s\", отключите ее, чтобы избежать потери данных." - "Карта \"%s\" извлечена" - "Карта \"%s\" извлечена. Вставьте другую." - "Извлечение карты \"%s\"…" - "Не извлекать" + "Перед тем как извлечь накопитель, отключите его, чтобы избежать потери данных." + "Накопитель (%s) извлечен" + "Некоторые функции могут быть недоступны. Вставьте новый накопитель." + "%s: извлечение…" + "Не извлекайте накопитель." "Настроить" "Извлечь" "Обзор" "%s не найден" - "Заново подключите устройство" + "Подключите накопитель снова." "Перенос приложения %s" "Перенос данных" - "Перенос завершен" - "Перенос данных сюда: %s" - "Не удалось перенести данные" - "Данные остались там же, где были" + "Контент перенесен" + "Контент перенесен сюда: %s" + "Не удалось перенести контент" + "Попробуйте ещё раз" "Удалено" "Извлечено" "Проверка…" @@ -1377,14 +1401,14 @@ "Подключение…" "Подключено" "Отключено от постоянной VPN" - "Ошибка" + "Нет подключения к постоянной VPN" "Изменить настройки сети или VPN" "Выбрать файл" "Не выбран файл" "Сбросить" "Отправить" - "Режим \"В автомобиле\"" - "Нажмите, чтобы выйти из автомобильного режима." + "Приложение для вождения включено" + "Нажмите, чтобы выйти из приложения для вождения." "Включен режим модема" "Нажмите, чтобы настроить." "Включить режим модема нельзя" @@ -1464,22 +1488,19 @@ "USB-накопитель %s" "USB-накопитель" "Изменить" - "Лимит на передачу данных" - "Нажмите, чтобы проверить трафик и настройки." - "Достигнут лимит трафика 2G/3G" - "Достигнут лимит трафика 4G" + "Предупреждение" + "Вы использовали %s трафика." "Достигнут лимит моб. трафика" "Достигнут лимит трафика Wi-Fi" - "Передача данных приостановлена" - "Превышен лимита трафика 2G и 3G" - "Превышен лимит на трафик 4G" - "Превышен лимит на моб. трафик" - "Превышен лимит трафика Wi-Fi" - "Лимит превышен на %s." + "Передача данных приостановлена до конца цикла." + "Превышен лимит моб. трафика" + "Превышен лимит трафика Wi-Fi" + "Вы превысили лимит на %s." "Фон. режим ограничен" "Нажмите, чтобы отменить ограничение." - "Израсходовано много трафика" - "За последние несколько дней было использовано больше трафика, чем обычно. Нажмите, чтобы проверить его расход и настройки." + "Высокое потребление трафика" + "В ваших приложениях было передано больше трафика, чем обычно." + "В приложении \"%s\" было передано больше трафика, чем обычно." "Сертификат безопасности" "Этот сертификат действителен." "Кому выдан:" @@ -1719,7 +1740,7 @@ "Установлено администратором" "Обновлено администратором" "Удалено администратором" - "Чтобы продлить время работы устройства от батареи, в режиме энергосбережения снижается производительность, а также ограничивается использование вибросигнала, геолокации и фоновой передачи данных. Данные, требующие синхронизации, могут обновляться только после того, как вы откроете приложение.\n\nРежим энергосбережения автоматически отключается во время зарядки устройства." + "Чтобы продлить время работы устройства от батареи, в режиме энергосбережения снижается производительность, а также ограничивается использование вибросигнала, геолокации и фоновой передачи данных (эти функции могут быть выключены). Данные, требующие синхронизации, могут обновляться только после того, как вы откроете приложение.\n\nРежим энергосбережения автоматически отключается во время зарядки устройства." "В режиме экономии трафика фоновая передача для некоторых приложений отключена. Приложение, которым вы пользуетесь, может получать и отправлять данные, но реже, чем обычно. Например, изображения могут не загружаться, пока вы не нажмете на них." "Включить экономию трафика?" "Включить" @@ -1735,11 +1756,11 @@ На %1$d минут (до %2$s) На %1$d минуты (до %2$s) - - %1$d час (до %2$s) - %1$d часа (до %2$s) - %1$d часов (до %2$s) - %1$d часов (до %2$s) + + На %1$d час (до %2$s) + На %1$d часа (до %2$s) + На %1$d часов (до %2$s) + На %1$d часа (до %2$s) На %1$d час (до %2$s) @@ -1759,11 +1780,11 @@ На %d минут На %d минуты - - %d час - %d часа - %d часов - %d часов + + На %d час + На %d часа + На %d часов + На %d часа На %d час @@ -1786,14 +1807,14 @@ "Звук отключен приложением \"%1$s\"" "Произошла внутренняя ошибка, и устройство может работать нестабильно, пока вы не выполните сброс настроек." "Произошла внутренняя ошибка. Обратитесь к производителю устройства за подробными сведениями." - "USSD-запрос преобразован в DIAL-запрос" - "USSD-запрос преобразован в SS-запрос." - "USSD-запрос преобразован в новый USSD-запрос." - "USSD-запрос преобразован в запрос Video DIAL." - "SS-запрос преобразован в DIAL-запрос." - "SS-запрос преобразован в запрос Video DIAL." - "SS-запрос преобразован в USSD-запрос." - "SS-запрос преобразован в новый SS-запрос." + "USSD-запрос преобразован в обычный вызов" + "USSD-запрос преобразован в SS-запрос" + "Преобразовано в USSD-запрос" + "USSD-запрос преобразован в видеовызов" + "SS-запрос преобразован в обычный вызов" + "SS-запрос преобразован в видеовызов" + "SS-запрос преобразован в USSD-запрос" + "Преобразовано в SS-запрос" "Рабочий профиль" "Развернуть" "Скрыть" @@ -1895,6 +1916,10 @@ "SIM-карта не активирована для голосовых вызовов" "Для SIM-карты недоступны голосовые вызовы" "Для телефона недоступны голосовые вызовы" + "Использование SIM-карты %d запрещено" + "SIM-карта %d не активирована." + "Использование SIM-карты %d запрещено" + "Использование SIM-карты %d запрещено" "Всплывающее окно" "+ %1$d" "Версия приложения устарела или несовместима с ярлыком" @@ -1907,7 +1932,14 @@ "Обнаружено вредоносное приложение" "Приложение \"%1$s\" запрашивает разрешение на показ фрагментов приложения \"%2$s\"." "Изменить" + "Для звонков и уведомлений включен вибросигнал." + "Для звонков и уведомлений отключен звук." "Системные изменения" + "Не беспокоить" + "Уведомления в режиме \"Не беспокоить\" отключены" + "Этот параметр применяется впервые. Нажмите, чтобы перейти к настройкам." "Настройки режима \"Не беспокоить\" изменены" - "Нажмите, чтобы проверить их." + "Нажмите, чтобы проверить настройки." + "Система" + "Настройки" diff --git a/core/res/res/values-si/strings.xml b/core/res/res/values-si/strings.xml index 2a6c5047054f79264e616e608ae1c1137fa5eb8b..b5acece48ff278b2d3230ada5adfdf0545e7886f 100644 --- a/core/res/res/values-si/strings.xml +++ b/core/res/res/values-si/strings.xml @@ -82,6 +82,8 @@ "හඬ සේවාව නැත" "හඬ සේවා හෝ හදිසි ඇමතුම් නොමැත" "ඔබේ වාහකය විසින් තාවකාලිකව ක්‍රියාවිරහිත කරන ලදී" + + "ජංගම ජාලය වෙත ළඟා විය නොහැකිය" "කැමති ජාලය වෙනස් කිරීමට උත්සාහ කරන්න. වෙනස් කිරීමට තට්ටු කරන්න." "හදිසි ඇමතුම් ලබා ගත නොහැකිය" @@ -120,12 +122,13 @@ "රෝමිං බැනරය සක්‍රීයයි" "රෝමිං බැනරය අක්‍රියයි" "සේවාව සඳහා සොයමින්" - - + "Wi-Fi ඇමතුම් සැකසිය නොහැකි විය" "Wi-Fi හරහා ඇමතුම් සිදු කිරීමට සහ පණිවිඩ යැවීමට, පළමුව මෙම සේවාව පිහිටුවන ලෙස ඔබේ වාහකයෙන් ඉල්ලන්න. අනතුරුව සැකසීම් වෙතින් Wi-Fi ඇමතුම නැවත ක්‍රියාත්මක කරන්න. (දෝෂ කේතය %1$s)" - + + "ඔබගේ වාහකය සමඟ Wi-Fi ඇමතුම් ලියාපදිංචි කිරීම නිකුත් කරන්න: %1$s" + "%s" "%s Wi-Fi අමතමින්" @@ -481,6 +484,8 @@ "ආසන්න ක්ෂේත්‍ර සන්නිවේදන (NFC) ටැග්, පත්, සහ කියවන්නන් සමඟ සන්නිවේදනය කිරීමට යෙදුමට අවසර දෙන්න." "ඔබගේ තිරයේ අගුල අබල කරන්න" "යතුරු අගුල සහ ඕනෑම සම්බන්ධිත මුරපද ආරක්ෂාවක් අබල කිරීමට යෙදුමට අවසර දෙන්න. මෙහි උදාහරණයක් වන්නේ පැමිණෙන ඇමතුමක් ලැබෙද්දී, දුරකථනය අක්‍රිය වන අතර ඇමතුම අවසාන වන විට යතුරු අගුල නැවත සක්‍රිය වෙයි." + "ජීවමිතික දෘඪාංග භාවිත කරන්න" + "සත්‍යාපනය සඳහා ජීවමිතික දෘඪාංග භාවිත කිරීමට යෙදුමට ඉඩ දෙයි" "ඇඟිලි සලකුණු දෘඩාංග කළමනාකරණය කිරීම." "ඇඟිලි සලකුණු සැකිලි එකතු කිරීමට සහ ඉවත් කිරීමට අදාළ විධික්‍රම භාවිතය සඳහා මෙම යෙදුමට අවසර දෙයි." "ඇඟිලි සලකුණු දෘඩාංග භාවිතා කරන්න." @@ -493,6 +498,8 @@ "අඳුනාගත නොහැක" + + "ඇඟිලි සලකුණු දෘඪාංගය ලද නොහැකිය." "ඇඟිලි සලකුණ ගබඩා කළ නොහැක. දැනට පවතින ඇඟිලි සලකුණක් ඉවත් කරන්න." "ඇඟිලි සලකුණු කාල නිමාව ළඟා විය. නැවත උත්සාහ කරන්න." @@ -1007,14 +1014,23 @@ "ආදාන ක්‍රමය" "පෙළ ක්‍රියාවන්" "ඊ-තැපෑල" + "තෝරා ගත් ලිපිනයට ඊ-තැපැල් කරන්න" "අමතන්න" + "තෝරා ගත් දුරකථන අංකය අමතන්න" "ස්ථානගත කරන්න" + "තෝරා ගත් ලිපින පෙදෙසිය" "විවෘත කරන්න" + "තෝරා ගත් URL විවෘත කරන්න" "පණිවිඩය" + "තෝරා ගත් දුරකථන අංකයට පණිවිඩයක් යවන්න" "එක් කරන්න" + "සම්බන්ධතාවලට එක් කරන්න" "බලන්න" + "තෝරා ගත් වේලාව දින දර්ශනයෙහි බලන්න" "කාල සටහන" + "තෝරා ගත් වේලාව සඳහා සිදුවීම කාලසටහන්ගත කරන්න" "ශ්‍රව්‍ය ඛණ්ඩය" + "තෝරා ගත් ගුවන් ගමන හඹා යන්න" "ආචයනය ඉඩ ප්‍රමාණය අඩු වී ඇත" "සමහර පද්ධති කාර්යයන් ක්‍රියා නොකරනු ඇත" "පද්ධතිය සඳහා ප්‍රමාණවත් ඉඩ නොමැත. ඔබට 250MB නිදහස් ඉඩක් තිබෙන ඔබට තිබෙන බව සහතික කරගෙන නැවත උත්සාහ කරන්න." @@ -1143,8 +1159,7 @@ "විවෘත Wi-Fi ජාලය වෙත සම්බන්ධ වෙන්න" "වාහක Wi-Fi ජාලයට සම්බන්ධ වන්න" - - + "Wi-Fi ජාලයට සම්බන්ධ වෙමින්" "Wi-Fi ජාලයක් වෙත සම්බන්ධ විය" "Wi-Fi ජාලයක් වෙත සම්බන්ධ විය නොහැකි විය" "සියලු ජාල බැලීමට තට්ටු කරන්න" @@ -1260,33 +1275,49 @@ "අනෙක් යෙදුම්වලට උඩින් %s දිස් වේ" "ඔබට %s මෙම විශේෂාංගය භාවිත කිරීමට අවශ්‍ය නැති නම්, සැකසීම් විවෘත කිරීමට තට්ටු කර එය ක්‍රියාවිරහිත කරන්න." "ක්‍රියාවිරහිත කරන්න" - "%s සූදානම් කරමින්" - "වැරදි සඳහා පරීක්ෂා කරමින්" - "නව %s අනාවරණය කරන ලදි" + + + + + + + + "ඡායාරූප සහ මාධ්‍ය හුවමාරු කිරීම සඳහා" - "දූෂිත %s" - "%s දූෂිතය. විසඳීමට තට්ටු කරන්න." - "%s දූෂිතයි. විසඳීමට තට්ටු කරන්න." + + + + "සහාය නොදක්වන %s" "මෙම උපාංගය මෙම %s සඳහා සහාය නොදක්වයි. සහාය දක්වන ආකෘතියකින් පිහිටුවීමට තට්ටු කරන්න." "මෙම උපාංගය මෙම %s සඳහා සහාය නොදක්වයි. සහාය දක්වන ආකෘතියකින් පිහිටුවීමට තෝරන්න." "%s අනපේක්ෂිතව ඉවත් කරන ලදි" - "දත්ත නැතිවීම වැළක්වීමට %s ආචයනය ඉවත්කිරීමට පෙර ගලවන්න." - "%s ඉවත් කරන ලදි" - "%s ඉවත් කරන ලදි; අලුත් එකක් ඇතුළත් කරන්න" - "%s තවමත් ගලවමින්…" - "ඉවත් නොකරන්න" + + + + + + + + + + "පිහිටුවන්න" "ගැලවීම" "ගවේෂණය කරන්න" "%s අස්ථානගතයි" - "මෙම උපාංගය යළි ඇතුළු කරන්න" + + "%s ගෙන යමින්" "දත්ත ගෙන යමින්" - "ගෙන යාම සම්පූර්ණ කරන්න" - "දත්ත %s වෙත ගෙන යන ලදී" - "දත්ත ගෙන යාමට නොහැකි විය" - "මුල් ස්ථානයෙහි ඉතිරි දත්ත" + + + + + + + + "ඉවත් කරන ලදී" "ඉවත් කරන ලදී" "පරික්ෂා කරමින්..." @@ -1678,8 +1709,7 @@ "ඔබගේ පරිපාලක මඟින් ස්ථාපනය කර ඇත" "ඔබගේ පරිපාලක මඟින් යාවත්කාලීන කර ඇත" "ඔබගේ පරිපාලක මඟින් මකා දමා ඇත" - - + "බැටරි ආයු කාලය දිගු කිරීමට, බැටරි සුරැකුම ඔබේ උපාංගයේ ක්‍රියාකාරීත්වය අඩු කරන අතර කම්පනය, ස්ථාන සේවා, සහ පසුබිම් දත්ත සීමා කරයි. ඔබ ඒවා විවෘත නොකරන්නේ නම් මිස ඊ-තැපැල්, පණිවිඩකරණය, සහ සමමුහුර්ත කිරීම මත රඳා පවතින වෙනත් යෙදුම් යාවත්කාලීන නොවිය හැකිය.\n\nඔබේ උපාංගය ආරෝපණය වන විට බැටරි සුරැකුම ස්වයංක්‍රියව ක්‍රියාවිරහිත වේ." "දත්ත භාවිතය අඩු කිරීමට උදවු වීමට, දත්ත සුරැකුම සමහර යෙදුම් පසුබිමින් දත්ත යැවීම සහ ලබා ගැනීම වළක්වයි. ඔබ දැනට භාවිත කරන යෙදුමකට දත්ත වෙත පිවිසීමට හැකිය, නමුත් එසේ කරන්නේ කලාතුරකින් විය හැකිය. මෙයින් අදහස් වන්නේ, උදාහරණයක් ලෙස, එම රූප ඔබ ඒවාට තට්ටු කරන තෙක් සංදර්ශනය නොවන බවය." "දත්ත සුරැකුම ක්‍රියාත්මක කරන්නද?" "ක්‍රියාත්මක කරන්න" @@ -1730,22 +1760,14 @@ "%1$s විසින් නිශ්ශබ්ද කරන ලදි" "ඔබේ උපාංගය සමගින් ගැටලුවක් ඇති අතර, ඔබේ කර්මාන්තශාලා දත්ත යළි සකසන තෙක් එය අස්ථායි විය හැකිය." "ඔබේ උපාංගය සමගින් අභ්‍යන්තර ගැටලුවක් ඇත. විස්තර සඳහා ඔබේ නිෂ්පාදක අමතන්න." - - - - - - - - - - - - - - - - + "USSD ඉල්ලීම සාමාන්‍ය ඇමතුමට වෙනස් කරන ලදී" + "USSD ඉල්ලීම SS ඉල්ලීමට වෙනස් කරන ලදී" + "නව USSD ඉල්ලීමට වෙනස් කරන ලදී" + "USSD ඉල්ලීම වීඩියෝ ඇමතුමට වෙනස් කරන ලදී" + "SS ඉල්ලීම සාමාන්‍ය ඇමතුමට වෙනස් කරන ලදී" + "SS ඉල්ලීම වීඩියෝ ඇමතුමට වෙනස් කරන ලදී" + "SS ඉල්ලීම USSD ඉල්ලීමට වෙනස් කරන ලදී" + "නව SS ඉල්ලීමට වෙනස් කරන ලදී" "කාර්යාල පැතිකඩ" "දිග හරින්න" "හකුළන්න" @@ -1843,6 +1865,14 @@ "SIM හඬ සඳහා ප්‍රතිපාදන නොදේ" "SIM හඬ සඳහා ඉඩ නොදේ" "දුරකථනය හඬ සඳහා ඉඩ නොදේ" + + + + + + + + "උත්පතන කවුළුව" "+ %1$d" "යෙදුම් අනුවාදය අවශ්‍රේණි කර ඇත, නැතහොත් මෙම කෙටි මග සමඟ අනුකූල නොවේ" diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index 8317c758650964ec6d104399884d49e88ebcec03..ee92b5b3cacbfbc86edae4963437f1e26b5db115 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -79,15 +79,16 @@ "V predvolenom nastavení nie je identifikácia volajúceho obmedzená. Ďalší hovor: Bez obmedzenia" "Služba nie je poskytovaná." "Nemôžete meniť nastavenia identifikácie volajúceho." - "Žiadna dátová služba" - "Žiadne tiesňové hovory" + "Žiadna mobilná dátová služba" + "Tiesňové volania nie sú k dispozícii" "Žiadne hlasové hovory" - "Hlasové ani tiesňové volania nie sú k dispozícii" - "Momentálne nie sú v ponuke mobilnej siete na vašom mieste" - "Nepodarilo sa pripojiť k sieti" - "Ak chcete vylepšiť príjem, skúste zmeniť vybraný typ v časti Nastavenia > Sieť a internet > Mobilné siete > Preferovaný typ siete." - "Volanie cez Wi‑Fi je aktívne" - "Tiesňové volania vyžadujú mobilnú sieť." + "Žiadna hlasová služba ani tiesňové volania" + "Dočasne vypnuté operátorom" + "Dočasne vypnuté operátorom pre SIM kartu %d" + "Nepodarilo sa pripojiť k mobilnej sieti" + "Skúste zmeniť predvolenú sieť. Zmeníte ju klepnutím." + "Tiesňové volania nie sú k dispozícii" + "Nedajú sa uskutočniť tiesňové volania cez Wi-Fi" "Upozornenia" "Presmerovanie hovorov" "Režim tiesňového spätného volania" @@ -122,12 +123,12 @@ "Banner roamingu je zapnutý" "Banner roamingu je vypnutý" "Vyhľadávanie služby" - "Volanie cez Wi‑Fi" + "Volanie cez Wi-Fi sa nepodarilo nastaviť" "Ak chcete volať a odosielať správy prostredníctvom siete Wi‑Fi, kontaktujte najskôr svojho operátora v súvislosti s nastavením tejto služby. Potom opäť zapnite v Nastaveniach volanie cez Wi‑Fi. (Kód chyby: %1$s)" - "Zaregistrujte sa u operátora (Kód chyby: %1$s)" + "Pri registrácii volania cez Wi‑Fi u operátora nastala chyba %1$s" "%s" @@ -162,8 +163,8 @@ "Je spracovávaných príliš veľa žiadostí. Opakujte akciu neskôr." "Chyba prihlásenia do účtu %1$s" "Synchronizovať" - "Synchronizovať" - "Príliš veľa odstránených položiek služby %s." + "Nie je možné synchronizovať" + "Pokúsili ste sa odstrániť príliš mnoho položiek typu %s." "Ukladací priestor tabletu je plný. Odstráňte niektoré súbory a uvoľnite miesto." "Ukladací priestor hodiniek je plný. Uvoľnite miesto odstránením niektorých súborov." "Úložisko televízora je plné. Uvoľnite miesto odstránením niektorých súborov." @@ -178,14 +179,13 @@ "Správcom vášho pracovného profilu" "Doménou %s" "Pracovný profil bol odstránený" - "Pracovný profil bol odstránený z dôvodu chýbajúcej aplikácie na správu" "Aplikácia na správu pracovného profilu buď chýba, alebo je poškodená. Z toho dôvodu bol odstránený pracovný profil aj k nemu priradené dáta. Ak potrebujete pomoc, kontaktujte svojho správcu." "Váš pracovný profil už v tomto zariadení nie je k dispozícii" "Príliš veľa pokusov o zadanie hesla" "Zariadenie je spravované" "Vaša organizácia spravuje toto zariadenie a môže sledovať sieťovú premávku. Klepnutím zobrazíte podrobnosti." "Vaše zariadenie bude vymazané" - "Daná aplikácia na správu sa nedá použiť. Vaše zariadenie bude vymazané.\n\nV prípade otázok kontaktujte správcu organizácie." + "Daná aplikácia na správu sa nedá použiť. Vaše zariadenie bude vymazané.\n\nV prípade otázok kontaktujte správcu organizácie." "Tlač zakázala aplikácia %s." "Ja" "Možnosti tabletu" @@ -242,6 +242,9 @@ "Režim v lietadle" "Režim v lietadle je ZAPNUTÝ" "Režim v lietadle je VYPNUTÝ" + "Šetrič batérie" + "Šetrič batérie je VYPNUTÝ" + "Šetrič batérie je ZAPNUTÝ" "Nastavenia" "Pomôcť" "Hlasový asistent" @@ -275,31 +278,31 @@ "Prepnúť na pracovný profil" "Kontakty" "prístup ku kontaktom" - "Povoľte aplikácii <b>%1$s</b> prístup k vašim kontaktom" + "Povoliť aplikácii <b>%1$s</b> prístup ku kontaktom?" "Poloha" "prístup k polohe tohto zariadenia" - "Povoľte aplikácii <b>%1$s</b> prístup k polohe tohto zariadenia" + "Povoliť aplikácii <b>%1$s</b> prístup k polohe tohto zariadenia?" "Kalendár" "prístup ku kalendáru" - "Povoľte aplikácii <b>%1$s</b> prístup k vášmu kalendáru" + "Povoliť aplikácii <b>%1$s</b> prístup ku kalendáru?" "SMS" "posielanie a zobrazovanie SMS" - "Povoľte aplikácii <b>%1$s</b> odosielať a zobrazovať správy SMS" + "Povoliť aplikácii <b>%1$s</b> odosielať a zobrazovať správy SMS?" "Úložisko" "prístup k fotkám, médiám a súborom v zariadení" - "Povoľte aplikácii <b>%1$s</b> prístup k fotkám, médiám a súborom vo vašom zariadení" + "Povoliť aplikácii <b>%1$s</b> používať fotky, médiá a súbory v zariadení?" "Mikrofón" "nahrávanie zvuku" - "Povoľte aplikácii <b>%1$s</b> zaznamenávať zvuk" + "Povoliť aplikácii <b>%1$s</b> zaznamenávať zvuk?" "Fotoaparát" "fotenie a natáčanie videí" - "Povoľte aplikácii <b>%1$s</b> snímať fotky a zaznamenávať video" + "Povoliť aplikácii <b>%1$s</b> snímať fotky a zaznamenávať video?" "Telefón" "telefonovanie a správu hovorov" - "Povoľte aplikácii <b>%1$s</b> uskutočňovať a spravovať telefonické hovory" + "Povoliť aplikácii <b>%1$s</b> uskutočňovať a spravovať telefonické hovory?" "Telesné senzory" "prístup k dátam senzorov vašich životných funkcií" - "Povoľte aplikácii <b>%1$s</b> pristupovať k údajom senzorov o vašich životných funkciách" + "Povoliť aplikácii <b>%1$s</b> používať údaje senzorov o vašich životných funkciách?" "Načítať obsah okna" "Môžete preskúmať obsah okna, s ktorým pracujete." "Zapnúť funkciu Preskúmanie dotykom" @@ -311,7 +314,7 @@ "Gestá" "Je možné použiť klepnutie, prejdenie, stiahnutie prstami a ďalšie gestá." "Gestá odtlačkov prstov" - "Dokáže zaznamenať gestá vykonané na senzore odtlačkov prstov." + "Dokáže zaznamenať gestá na senzore odtlačkov prstov zariadenia." "zakázanie alebo zmeny stavového riadka" "Umožňuje aplikácii vypnúť stavový riadok alebo pridať a odstrániť systémové ikony." "vydávanie sa za stavový riadok" @@ -362,6 +365,8 @@ "Umožňuje aplikácii uložiť niektoré svoje časti natrvalo do pamäte. Môže to obmedziť pamäť dostupnú pre ostatné aplikácie a spomaliť tak tablet." "Umožňuje aplikácii natrvalo uložiť svoje časti v pamäti. Môže to obmedziť pamäť dostupnú pre ďalšie aplikácie, čím sa spomaľuje televízor." "Umožňuje aplikácii uložiť niektoré svoje časti natrvalo do pamäte. Môže to obmedziť pamäť dostupnú pre ostatné aplikácie a spomaliť tak telefón." + "spustiť službu v popredí" + "Umožňuje aplikácii používať služby v popredí" "zistiť veľkosť ukladacieho priestoru aplikácie" "Umožňuje aplikácii načítať svoj kód, údaje a veľkosti vyrovnávacej pamäte" "upraviť nastavenia systému" @@ -484,6 +489,8 @@ "Umožňuje aplikácii komunikovať so značkami, kartami a čítačkami s podporou technológie NFC." "deaktivácia zámky obrazovky" "Umožňuje aplikácii zakázať uzamknutie klávesnice a akékoľvek súvisiace zabezpečenie heslom. Príkladom je zakázanie uzamknutia klávesnice pri prichádzajúcom telefonickom hovore a jeho opätovné povolenie po skončení hovoru." + "používať biometrický hardvér" + "Umožňuje aplikácii používať na overenie totožnosti biometrický hardvér" "spravovať hardvér na snímanie odtlačkov prstov" "Umožňuje aplikácii zavolať metódy, ktoré pridávajú a odstraňujú vzory odtlačkov prstov." "použiť hardvér na snímanie odtlačkov prstov" @@ -496,6 +503,7 @@ "Nebol rozpoznaný" + "Odtlačok bol overený" "Hardvér na snímanie odtlačku prsta nie je k dispozícii" "Odtlačok prsta nie je možné uložiť. Odstráňte existujúci odtlačok." "Časový limit rozpoznania odtlačku vypršal. Skúste to znova." @@ -808,6 +816,8 @@ "Odomknutie vzorom." "Odomknutie tvárou." "Odomknutie kódom PIN." + "Odomknutie pomocou kódu PIN SIM karty." + "Odomknutie pomocou kódu PUK SIM karty." "Odomknutie heslom." "Oblasť na zadanie bezpečnostného vzoru." "Oblasť na prejdenie prstom." @@ -869,6 +879,12 @@ "Text bol skopírovaný do schránky." "Viac" "Menu+" + "Meta+" + "Ctrl+" + "Alt+" + "Shift+" + "Sym+" + "Function+" "medzera" "potvrdiť" "odstrániť" @@ -1034,14 +1050,23 @@ "Metóda vstupu" "Operácie s textom" "E-mail" + "Napísať na vybratú e-mailovú adresu" "Volať" + "Zavolať na vybraté telefónne číslo" "Nájsť" + "Vyhľadať vybratú adresu" "Otvoriť" + "Otvoriť vybratú webovú adresu" "Správa" + "Napísať SMS na vybraté telefónne číslo" "Pridať" + "Pridať medzi kontakty" "Zobraziť" + "Zobraziť vybratý čas v kalendári" "Naplánovať" + "Naplánovať udalosť na vybratý čas" "Sledovať" + "Sledovať vybratý let" "Nedostatok ukladacieho priestoru" "Niektoré systémové funkcie nemusia fungovať" "V úložisku nie je dostatok voľného miesta pre systém. Zaistite, aby ste mali 250 MB voľného miesta a zariadenie reštartujte." @@ -1114,31 +1139,28 @@ "Skontrolovať dostupnosť aktualizácie" "Aplikácia %1$s (proces %2$s) porušila svoje vlastné vynútené pravidlá StrictMode." "Proces %1$s porušil svoje vlastné vynútené pravidlá StrictMode." - "Prebieha inovácia systému Android..." - "Systém Android sa spúšťa…" + "Telefón sa aktualizuje…" + "Tablet sa aktualizuje…" + "Zariadenie sa aktualizuje…" + "Telefón sa spúšťa…" + "Tablet sa spúšťa…" + "Zariadenie sa spúšťa…" "Optimalizuje sa úložisko" - "Dokončuje sa aktualizácia Androidu…" - "Niektoré aplikácie môžu správne fungovať až po dokončení inovácie" + "Dokončuje sa aktualizácia systému…" "Aplikácia %1$s sa inovuje…" "Prebieha optimalizácia aplikácie %1$d z %2$d." "Pripravuje sa aplikácia %1$s." "Prebieha spúšťanie aplikácií." "Prebieha dokončovanie spúšťania." "Spustená aplikácia: %1$s" - - - - - - - - - - - - + "Klepnutím prejdete späť do hry" + "Vyberte hru" + "Na zaistenie lepšej výkonnosti môže byť naraz otvorená iba jedna z týchto hier." + "Prejsť späť do aplikácie %1$s" + "Otvoriť %1$s" + "%1$s sa zavrie bez uloženia" "Proces %1$s prekročil limit pamäte" - "Boli zhromaždené zálohy údajov; zdieľajte ich klepnutím" + "Boli zhromaždené zálohy dát. Zdieľajte ich klepnutím." "Chcete zdieľať zálohy údajov?" "Proces %1$s prekročil limit %2$s pre pamäť procesu. Máte k dispozícii zálohy údajov, ktoré môžete zdieľať s vývojárom. Postupujte opatrne: tieto zálohy údajov nesmú obsahovať žiadne osobné informácie, ku ktorým má táto aplikácia prístup." "Zvoľte akciu pre text" @@ -1177,12 +1199,12 @@ "Pripojenie k otvorenej sieti Wi‑Fi" "Pripojenie k sieti Wi‑Fi operátora" - "Pripája sa k otvorenej sieti Wi‑Fi" + "Pripája sa k sieti Wi-Fi" "Pripojenie k sieti Wi‑Fi" "K sieti Wi‑Fi sa nepodarilo pripojiť" "Klepnutím zobrazíte všetky siete" "Pripojiť" - "Všetky siete" + "Všetky siete" "Wi‑Fi sa zapne automaticky" "Keď budete v blízkosti kvalitnej uloženej siete" "Znova nezapínať" @@ -1248,6 +1270,7 @@ "Reštartovať" "Aktivovať mobilnú službu" "Ak chcete aktivovať novú SIM kartu, stiahnite si aplikáciu operátora" + "Ak chcete aktivovať novú SIM kartu, stiahnite si aplikáciu %1$s" "Stiahnuť aplikáciu" "Bola vložená nová SIM karta" "Nastavte ju klepnutím" @@ -1266,13 +1289,13 @@ "Bol zapnutý režim PTP cez USB" "Bol zapnutý tethering cez USB" "Bol zapnutý režim MIDI cez USB" - "Bol zapnutý režim príslušenstva USB" + "Bolo pripojené príslušenstvo USB" "Klepnutím zobrazíte ďalšie možnosti." "Pripojené zariadenie sa nabíja. Ďalšie možností získate klepnutím." "Bolo zistené analógové zvukové príslušenstvo" "Pripojené zariadenie nie je kompatibilné s týmto telefónom. Ďalšie informácie zobrazíte klepnutím." "Ladenie cez USB pripojené" - "Klepnutím zakážete ladenie cez USB." + "Klepnutím vypnite ladenie cez USB" "Vyberte, ak chcete zakázať ladenie cez USB." "Preberá sa hlásenie chyby…" "Chcete zdieľať hlásenie chyby?" @@ -1291,34 +1314,35 @@ "%s sa zobrazuje cez iné aplikácie" "%s sa zobrazuje cez iné aplikácie" "Ak nechcete, aby aplikácia %s používala túto funkciu, klepnutím otvorte nastavenia a vypnite ju." - "VYPNÚŤ" - "Pripravuje sa úložisko %s" - "Prebieha kontrola chýb" - "Bolo zistené nové úložisko %s" + "Vypnúť" + "Kontroluje sa %s…" + "Kontrola aktuálneho obsahu" + "Nové médium %s" + "Klepnutím médium nastavte" "Na prenos fotiek a médií" - "Poškodené úložisko %s" - "Úložisko %s je poškodené. Opravte ho klepnutím." + "Problém s médiom %s" + "Problém odstránite klepnutím" "Médium %s je poškodené. Vyberte ho a vyriešte problém." "Nepodporované úložisko %s" "Toto zariadenie nepodporuje úložisko %s. Klepnutím ho nastavíte v podporovanom formáte." "Toto zariadenie nepodporuje médium %s. Vyberte ho a nastavte v podporovanom formáte." "Úl. %s bolo neočakávane odobraté" - "Ak chcete zabrániť strate údajov, úložisko %s pred odobratím odpojte" - "Úložisko %s bolo odobraté" - "Úložisko %s bolo odobraté. Vložte nové." - "Úložisko %s sa stále odpája…" - "Neodoberajte" + "Pred odobratím médium najskôr odpojte, aby ste zabránili strate obsahu" + "Médium %s bolo odobraté" + "Niektoré funkcie nemusia byť k dispozícii. Vložte nové úložisko." + "Odpája sa médium %s" + "Neodoberajte" "Nastaviť" "Odpojiť" "Preskúmať" "Chýba: %s" - "Opäť vložte toto zariadenie" + "Zariadenie vložte znova" "Presúva sa aplikácia %s" "Presúvajú sa údaje" - "Presun bol dokončený" - "Údaje boli presunuté do úložiska %s" - "Presun údajov zlyhal" - "Údaje boli ponechané v pôvodnom umiestnení" + "Prenos obsahu je hotový" + "Obsah bol presunutý do úložiska %s" + "Obsah sa nepodarilo presunúť" + "Skúste obsah presunúť znova" "Odstránené" "Odpojené" "Prebieha kontrola..." @@ -1377,14 +1401,14 @@ "Pripájanie k vždy zapnutej sieti VPN…" "Pripojenie k vždy zapnutej sieti VPN" "Odpojené od vždy zapnutej siete VPN" - "Chyba vždy zapnutej siete VPN" + "Nepodarilo sa pripojiť k sieti VPN, ktorá je vždy zapnutá" "Zmeniť sieť alebo nastavenia VPN" "Zvoliť súbor" "Nie je vybratý žiadny súbor" "Obnoviť" "Odoslať" - "Aktivovaný režim V aute" - "Klepnutím ukončíte režim V aute." + "Aplikácia na šoférovanie je spustená" + "Klepnutím ukončíte aplikáciu na šoférovanie" "Tethering alebo prístupový bod je aktívny" "Klepnutím prejdete na nastavenie." "Tethering je deaktivovaný" @@ -1464,22 +1488,19 @@ "Disk USB %s" "Ukladací priestor USB" "Upraviť" - "Upozornenie na spotrebu dát" - "Klepnutím zobrazíte využitie a nastavenia." - "Bol dosiahnutý limit 2G–3G" - "Bol dosiahnutý limit 4G" + "Dátové upozornenie" + "Využili ste %s dát" "Dosiahnutý limit mobilných dát" "Bol dosiahnutý limit dát Wi‑Fi" - "Údaje pre zbytok cyklu pozastavené" - "2G, 3G dátový limit prekročený" - "Dátový limit 4G bol prekročený" - "Prekroč. limit pre mobil. dáta" - "Dát. limit Wi‑Fi bol prekročený" - "%s nad stanovenou hranicou." + "Dáta boli pozastavené do konca cyklu" + "Prekročený limit mobilných dát" + "Prekročený limit dát cez Wi-Fi" + "Prekročili ste stanovený limit o %s" "Dátové prenosy obmedzené" "Klepnutím odstránite obmedzenie." - "Vysoká spotreba dát" - "Vaša spotreba dát za niekoľko posledných dní je vyššia ako zvyčajne. Klepnutím zobrazíte spotrebu a nastavenia." + "Vysoké využitie mobilných dát" + "Vaše aplikácie využili viac dát než zvyčajne" + "Aplikácia %s využila viac dát než zvyčajne" "Certifikát zabezpečenia" "Certifikát je platný." "Vydané pre:" @@ -1719,7 +1740,7 @@ "Nainštaloval správca" "Aktualizoval správca" "Odstránil správca" - "Šetrič batérie zníži výkonnosť zariadenia a obmedzí vibrácie, služby určovania polohy a dátové prenosy na pozadí, aby predĺžil výdrž batérie. Pošta, odosielanie a prijímanie správ a ďalšie aplikácie, ktoré sú založené na synchronizácii, sa možno nebudú aktualizovať, dokým ich neotvoríte.\n\nPri nabíjaní zariadenia sa šetrič batérie automaticky vypne." + "Šetrič batérie zníži výkonnosť zariadenia a obmedzí alebo vypne vibrácie, služby určovania polohy a dátové prenosy na pozadí, aby predĺžil výdrž batérie. Pošta, SMS a MMS i ďalšie aplikácie, ktoré sú založené na synchronizácii, sa možno nebudú aktualizovať, dokým ich neotvoríte.\n\nPri nabíjaní zariadenia sa šetrič batérie automaticky vypne." "Šetrič dát bráni niektorým aplikáciám odosielať alebo prijímať dáta na pozadí s cieľom znížiť spotrebu dát. Aplikácia, ktorú momentálne používate, môže prenášať dáta, ale môže to robiť menej často. Znamená to napríklad, že sa nezobrazia obrázky, kým na ne neklepnete." "Chcete zapnúť šetrič dát?" "Zapnúť" @@ -1735,11 +1756,11 @@ Na %1$d min (do %2$s) Na 1 min (do %2$s) - - %1$d hodiny (do %2$s) - %1$d hodiny (do %2$s) - %1$d hodín (do %2$s) - 1 hodinu (do %2$s) + + Na %1$d hodiny (do %2$s) + Na %1$d hodiny (do %2$s) + Na %1$d hodín (do %2$s) + Na 1 hodinu (do %2$s) Na %1$d h (do %2$s) @@ -1759,11 +1780,11 @@ Na %d min Na 1 min - - %d hodiny - %d hodiny - %d hodín - 1 hodinu + + Na %d hodiny + Na %d hodiny + Na %d hodín + Na 1 hodinu Na %d h @@ -1786,14 +1807,14 @@ "Stlmené aplikáciou %1$s" "Vo vašom zariadení došlo k internému problému. Môže byť nestabilné, kým neobnovíte jeho výrobné nastavenia." "Vo vašom zariadení došlo k internému problému. Ak chcete získať podrobné informácie, obráťte sa na jeho výrobcu." - "Žiadosť USSD bola upravená na žiadosť DIAL." - "Žiadosť USSD bola upravená na žiadosť SS." - "Žiadosť USSD bola upravená na novú žiadosť USSD." - "Žiadosť USSD bola upravená na žiadosť Video DIAL." - "Žiadosť SS bola upravená na žiadosť DIAL." - "Žiadosť SS bola upravená na žiadosť Video DIAL." - "Žiadosť SS bola upravená na žiadosť USSD." - "Žiadosť SS bola upravená na novú žiadosť SS." + "Žiadosť USSD bola zmenená na bežný hovor" + "Žiadosť USSD bola zmenená na žiadosť SS" + "Zmenené na novú žiadosť USSD" + "Žiadosť USSD bola zmenená na videohovor" + "Žiadosť SS bola zmenená na bežný hovor" + "Žiadosť SS bola zmenená na videohovor" + "Žiadosť SS bola zmenená na žiadosť USSD" + "Zmenené na novú žiadosť SS" "Pracovný profil" "Rozbaliť" "Zbaliť" @@ -1895,6 +1916,10 @@ "SIM karta nie je k dispozícii pre hlas" "SIM karta nie je povolená pre hlas" "Telefón nie je povolený pre hlas" + "SIM karta %d nie je povolená" + "SIM karta %d nie je k dispozícii" + "SIM karta %d nie je povolená" + "SIM karta %d nie je povolená" "Automaticky otvárané okno" "+ %1$d" "Aplikácia prešla na staršiu verziu alebo nie je kompatibilná s touto skratkou" @@ -1907,7 +1932,14 @@ "Bola zistená škodlivá aplikácia" "%1$s chce zobrazovať rezy z aplikácie %2$s" "Upraviť" + "Hovory a upozornenia budú vibrovať" + "Hovory a upozornenia budú stlmené" "Zmeny systému" + "Nerušiť" + "Režim Nerušiť skrýva upozornenia, aby vám pomáhal sústrediť sa" + "Toto je nové správanie. Zmeníte ho klepnutím." "Nastavenie Nerušiť sa zmenilo" - "Klepnutím skontrolujete vyrušenia v nastaveniach správania" + "Klepnutím skontrolujete, čo je blokované." + "Systém" + "Nastavenia" diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index 7642544cb5fa312681cac957632bfb425a02f1fc..4b1fbccaff11af59a5f5deb3144d8d6c66c49247 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -79,15 +79,16 @@ "ID klicatelja je ponastavljen na neomejeno. Naslednji klic: ni omejeno" "Storitev ni nastavljena in omogočena." "Ne morete spremeniti nastavitve ID-ja klicatelja." - "Ni storitve za prenos podatkov" - "Brez možnosti klicanja v sili" + "Ni mobilne podatkovne storitve" + "Klicanje v sili ni na voljo" "Ni storitve za glasovne klice" - "Ni storitve za glasovne klice / klice v sili" - "Ta storitev trenutno ni na voljo v mobilnem omrežju na vaši lokaciji" - "Povezave z omrežjem ni mogoče vzpostaviti" - "Če želite izboljšati sprejem, poskusite zamenjati vrsto omrežja v »Nastavitve« > »Omrežje in internet« > »Mobilna omrežja« > »Prednostna vrsta omrežja«." - "Klicanje prek Wi-Fi-ja je aktivno" - "Za klice v sili potrebujete mobilno omrežje." + "Ni storitve glasovnega klicanja ali klicanja v sili" + "Operater je začasno izklopil storitev" + "Operater je začasno izklopil storitev za kartico SIM %d" + "Mobilnega omrežja ni mogoče doseči" + "Poskusite spremeniti prednostno omrežje. Dotaknite se, če ga želite spremeniti." + "Klicanje v sili ni na voljo" + "Klicev v sili ni mogoče opravljati prek omrežja Wi-Fi" "Opozorila" "Preusmerjanje klicev" "Način za povratni klic v sili" @@ -122,12 +123,12 @@ "Pasica gostovanja je vklopljena" "Pasica za gostovanje je izklopljena" "Iskanje storitve" - "Klicanje prek Wi-Fi-ja" + "Klicanja prek Wi-Fi-ja ni bilo mogoče nastaviti" "Če želite klicati ali pošiljati sporočila prek omrežja Wi-Fi, se najprej obrnite na operaterja, da nastavi to storitev. Nato v nastavitvah znova vklopite klicanje prek omrežja Wi-Fi. (Koda napake: %1$s)" - "Registracija pri operaterju (koda napake: %1$s)" + "Težava pri registriranju klicanja prek Wi-Fi-ja pri operaterju: %1$s" "%s" @@ -162,8 +163,8 @@ "V obdelavi je preveč zahtev. Poskusite znova pozneje." "Napaka pri prijavi v račun %1$s" "Sinhronizacija" - "Sinhronizacija" - "Preveč izbrisov vsebine %s." + "Ni mogoče sinhronizirati" + "Poskusili ste izbrisati preveč vsebine vrste %s." "Pomnilnik tabličnega računalnika je poln. Izbrišite nekaj datotek, da sprostite prostor." "Shramba ure je polna. Izbrišite nekaj datotek, da sprostite prostor." "Shramba televizorja je polna. Izbrišite nekaj datotek, da sprostite prostor." @@ -178,14 +179,13 @@ "Nadzira skrbnik delovnega profila" "Nadzira: %s" "Delovni profil izbrisan" - "Delovni profil izbrisan zaradi manjkajoče skrbniške aplikacije" "Skrbniška aplikacija delovnega profila manjka ali pa je poškodovana, zaradi česar je bil delovni profil s povezanimi podatki izbrisan. Za pomoč se obrnite na skrbnika." "Vaš delovni profil ni več na voljo v tej napravi" "Preveč poskusov vnosa gesla" "Naprava je upravljana" "Vaša organizacija upravlja to napravo in lahko nadzira omrežni promet. Dotaknite se za podrobnosti." "Podatki v napravi bodo izbrisani" - "Skrbniške aplikacije ni mogoče uporabljati. Podatki v napravi bodo izbrisani.\n\nČe imate vprašanja, se obrnite na skrbnika organizacije." + "Skrbniške aplikacije ni mogoče uporabljati. Podatki v napravi bodo izbrisani.\n\nČe imate vprašanja, se obrnite na skrbnika organizacije." "Tiskanje je onemogočil pravilnik %s." "Jaz" "Možnosti tabličnega računalnika" @@ -242,6 +242,9 @@ "Način za letalo" "Način za letalo je VKLOPLJEN" "Način za letalo je IZKLOPLJEN" + "Varčevanje z energijo akumulatorja" + "Varčevanje z energijo akumulatorja je izklopljeno" + "Varčevanje z energijo akumulatorja je vklopljeno" "Nastavitve" "Pomoč" "Glas. pomočnik" @@ -275,31 +278,31 @@ "Preklopi na delovni profil" "Stiki" "dostop do stikov" - "Aplikaciji <b>%1$s</b> omogočite dostop do stikov" + "Želite aplikaciji <b>%1$s</b> omogočiti dostop do stikov?" "Lokacija" "dostop do lokacije te naprave" - "Aplikaciji <b>%1$s</b> omogočite dostop do lokacije te naprave" + "Želite aplikaciji <b>%1$s</b> omogočiti dostop do lokacije te naprave?" "Koledar" "dostop do koledarja" - "Aplikaciji <b>%1$s</b> omogočite dostop do koledarja" + "Želite aplikaciji <b>%1$s</b> omogočiti dostop do koledarja?" "SMS" "pošiljanje in ogled sporočil SMS" - "Aplikaciji <b>%1$s</b> omogočite pošiljanje in ogled sporočil SMS" + "Želite aplikaciji <b>%1$s</b> omogočiti pošiljanje in ogled sporočil SMS?" "Shramba" "dostop do fotografij, predstavnosti in datotek v napravi" - "Aplikaciji <b>%1$s</b> omogočite dostop do fotografij, predstavnosti in datotek v vaši napravi" + "Želite aplikaciji <b>%1$s</b> omogočiti dostop do fotografij, predstavnosti in datotek v svoji napravi?" "Mikrofon" "snemanje zvoka" - "Aplikaciji <b>%1$s</b> omogočite snemanje zvoka" + "Želite aplikaciji <b>%1$s</b> omogočiti snemanje zvoka?" "Fotoaparat" "fotografiranje in snemanje videoposnetkov" - "Aplikaciji <b>%1$s</b> omogočite snemanje slik in videoposnetkov" + "Želite aplikaciji <b>%1$s</b> omogočiti fotografiranje in snemanje videoposnetkov?" "Telefon" "opravljanje in upravljanje telefonskih klicev" - "Aplikaciji <b>%1$s</b> omogočite opravljanje in upravljanje telefonskih klicev" + "Želite aplikaciji <b>%1$s</b> omogočiti opravljanje in upravljanje telefonskih klicev?" "Tipala telesnih funkcij" "dostop do podatkov tipala o vaših vitalnih znakih" - "Aplikaciji <b>%1$s</b> omogočite dostop do podatkov tipala o vitalnih znakih" + "Želite aplikaciji <b>%1$s</b> omogočiti dostop do podatkov tipala o vitalnih znakih?" "Pridobiti vsebino okna" "Preverjanje vsebine okna, ki ga uporabljate." "Vklopiti raziskovanje z dotikom" @@ -311,7 +314,7 @@ "Izvajanje potez" "Mogoče je izvajanje dotikov, vlečenja, primikanja in razmikanja prstov ter drugih potez." "Poteze po tipalu prstnih odtisov" - "Prepoznava poteze, narejene po tipalu prstnih odtisov naprave." + "Prepoznava poteze, narejene po tipalu prstnih odtisov naprave." "onemogočanje ali spreminjanje vrstice stanja" "Aplikacijam omogoča onemogočenje vrstice stanja ali dodajanje in odstranjevanje ikon sistema." "postane vrstica stanja" @@ -362,6 +365,8 @@ "Aplikaciji omogoča, da nekatere svoje dele naredi trajne v pomnilniku. S tem je lahko pomnilnik omejen za druge aplikacije, zaradi česar je delovanje tabličnega računalnika upočasnjeno." "Aplikaciji dovoljuje, da nekatere svoje dele naredi trajno prisotne v pomnilniku. S tem je lahko pomnilnik omejen za druge aplikacije, zaradi česar je delovanje televizorja upočasnjeno." "Aplikaciji omogoča, da nekatere svoje dele naredi trajne v pomnilniku. S tem je lahko pomnilnik omejen za druge aplikacije, zaradi česar je delovanje telefona upočasnjeno." + "Izvajanje storitve v ospredju" + "Aplikaciji dovoljuje uporabo storitev v ospredju." "izračunavanje prostora za shranjevanje aplikacije" "Aplikaciji omogoča, da pridobi njeno kodo, podatke in velikosti predpomnilnika." "spreminjanje sistemskih nastavitev" @@ -484,6 +489,8 @@ "Podpira komunikacijo med računalnikom in oznakami, karticami in bralniki komunikacije s tehnologijo bližnjega polja." "onemogočanje zaklepanja zaslona" "Aplikaciji dovoljuje, da onemogoči zaklep tipkovnice in morebitno povezano varnostno geslo. Telefon na primer onemogoči zaklep tipkovnice pri dohodnem klicu ter vnovič omogoči zaklep, ko je klic končan." + "uporaba strojne opreme za biometrične podatke" + "Aplikaciji omogoča uporabo strojne opreme za biometrične podatke za preverjanje pristnosti" "upravljanje strojne opreme za prstne odtise" "Aplikaciji omogoča sprožanje načinov za dodajanje in brisanje predlog s prstnimi odtisi za uporabo." "uporaba strojne opreme za prstne odtise" @@ -496,6 +503,7 @@ "Ni prepoznano" + "Pristnost prstnega odtisa je preverjena" "Strojna oprema za prstne odtise ni na voljo." "Prstnega odtisa ni mogoče shraniti. Odstranite obstoječi prstni odtis." "Dosežena časovna omejitev za prstni odtis. Poskusite znova." @@ -808,6 +816,8 @@ "Odklepanje z vzorcem." "Odklepanje z obrazom." "Odklepanje s kodo PIN." + "Odklepanje kartice SIM s kodo PIN" + "Odklepanje kartice SIM s kodo PUK" "Odklepanje z geslom." "Območje vzorca." "Območje podrsanja." @@ -869,6 +879,12 @@ "Besedilo, kopirano v odložišče." "Več" "Meni+" + "Meta +" + "Ctrl +" + "Alt +" + "Shift +" + "Sym +" + "Fn +" "presledek" "vnesi" "izbriši" @@ -1034,14 +1050,23 @@ "Način vnosa" "Besedilna dejanja" "E-pošta" + "Pošlji na izbrani naslov" "Pokliči" + "Pokliči izbrano telefonsko številko" "Poišči na zemljevidu" + "Pokaži izbrani naslov na zemljevidu" "Odpri" + "Odpri izbrani URL" "Sporočilo" + "Pošlji sporočilo na izbrano telefonsko številko" "Dodaj" + "Dodaj med stike" "Ogled" + "Ogled izbranega časa v koledarju" "Dodaj na razpored" + "Razporedi dogodek na izbrano uro" "Sledenje" + "Sledi izbranemu letu" "Prostor za shranjevanje bo pošel" "Nekatere sistemske funkcije morda ne delujejo" "V shrambi ni dovolj prostora za sistem. Sprostite 250 MB prostora in znova zaženite napravo." @@ -1114,31 +1139,28 @@ "Preveri, ali je na voljo posodobitev" "Aplikacija %1$s (proces %2$s) krši svoj samouveljavljiv pravilnik o strogem načinu." "Proces %1$s krši svoj samoizvedljivi pravilnik o strogem načinu." - "Poteka nadgradnja Androida ..." - "Android se zaganja …" + "Telefon se posodablja …" + "Tablični računalnik se posodablja …" + "Naprava se posodablja …" + "Telefon se zaganja …" + "Tablični računalnik se zaganja …" + "Naprava se zaganja …" "Optimiziranje shrambe." - "Dokončanje posodobitve Androida …" - "Nekatere aplikacije morda ne bodo delovale pravilno, dokler ne bo dokončana nadgradnja." + "Zaključevanje posodobitve sistema …" "%1$s se nadgrajuje …" "Optimiranje aplikacije %1$d od %2$d." "Pripravljanje aplikacije %1$s." "Zagon aplikacij." "Dokončevanje zagona." "%1$s se izvaja" - - - - - - - - - - - - + "Dotaknite se za vrnitev v igro" + "Izberite igro" + "Za večjo učinkovitost delovanja je lahko hkrati odprta samo ena od teh iger." + "Nazaj v aplikacijo %1$s" + "Odpri %1$s" + "Aplikacija %1$s se bo zaprla brez shranjevanja" "Proces %1$s je presegel omejitev pomnilnika" - "Izvoz kopice je zbran; dotaknite se za deljenje z drugimi" + "Izvoz kopice je zbran. Dotaknite se za deljenje z drugimi." "Deljenje izvoza kopice z drugimi?" "Proces %1$s je presegel %2$s omejitve pomnilnika za proces. Izvoz kopice je na voljo, da ga delite z razvijalcem. Previdno: izvoz kopice lahko vsebuje vaše osebne podatke, do katerih ima aplikacija dostop." "Izberite dejanje za besedilo" @@ -1177,12 +1199,12 @@ "Vzpostavite povezavo z odprtim omrežjem Wi‑Fi" "Vzpostavitev povezave z omrežjem Wi‑Fi operaterja" - "Vzpostavljanje povezave z odprtim omrežjem Wi‑Fi" + "Vzpostavljanje povezave z omrežjem Wi-Fi" "Povezava z omrežjem Wi-Fi je vzpostavljena" "Povezave z omrežjem Wi-Fi ni bilo mogoče vzpostaviti" "Dotaknite se, če si želite ogledati vsa omrežja" "Vzpostavi povezavo" - "Vsa omrežja" + "Vsa omrežja" "Povezava Wi‑Fi se bo samodejno vklopila" "Ko ste v bližini zanesljivega shranjenega omrežja" "Ne vklopi znova" @@ -1248,6 +1270,7 @@ "Vnovičen zagon" "Aktivirajte mobilno storitev" "Prenesite aplikacijo operaterja, da boste lahko aktivirali novo kartico SIM" + "Prenesite aplikacijo %1$s, da boste lahko aktivirali novo kartico SIM" "Prenos aplikacije" "Nova kartica SIM je vstavljena" "Dotaknite se za nastavitev" @@ -1266,13 +1289,13 @@ "Vklopljen je način PTP prek USB-ja" "Vklopljen je internet prek USB-ja" "Vklopljen je način MIDI prek USB-ja" - "Vklopljen je način dodatka USB" + "Dodatek USB je priključen" "Dotaknite se za več možnosti." "Polnjenje akumulatorja v povezani napravi. Dotaknite se za več možnosti." "Zaznana je analogna dodatna zvočna oprema" "Priključena naprava ni združljiva s tem telefonom. Dotaknite se za več informacij." "Iskanje napak prek USB je povezano" - "Dotaknite se za izklop odpravljanja napak prek USB." + "Dotaknite se, če želite izklopiti odpravljanje napak prek USB-ja" "Izberite, če želite onemogočiti iskanje in odpravljanje napak prek vrat USB." "Zajemanje poročila o napakah …" "Želite poslati poročilo o napakah?" @@ -1291,34 +1314,35 @@ "%s prekriva druge aplikacije" "%s prekriva druge aplikacije" "Če ne želite, da aplikacija %s uporablja to funkcijo, se dotaknite, da odprete nastavitve, in funkcijo izklopite." - "IZKLOP" - "Pripravljanje shrambe %s" - "Iskanje napak" - "Zaznana je bila nova shramba %s" + "Izklopi" + "Preverjanje nosilca %s …" + "Pregledovanje trenutne vsebine" + "Nova naprava za shranjevanje: %s" + "Dotaknite se, če želite nastaviti" "Za prenos fotografij in predstavnosti" - "Naprava za sh. %s je poškodovana" - "Nosilec %s je poškodovan. Dotaknite se, če želite odpraviti napako." + "Težava z nosilcem %s" + "Dotaknite se, da to popravite" "Nosilec %s je pokvarjen. Izberite, če ga želite popraviti." "Nepodprta naprava za shran. %s" "Ta naprava ne podpira tega nosilca %s. Dotaknite se, če želite nastaviti v podprti obliki." "Naprava ne podpira nosilca %s. Izberite, če ga želite nastaviti v podprti obliki." "Shramba %s nepričak. odstranjena" - "Izpnite shrambo %s, preden jo odstranite, da se izognete izgubi podatkov." - "Shramba %s je bila odstranjena" - "Shramba %s je bila odstranjena; vstavite novo" - "Izvrženje shrambe %s še poteka …" - "Ne odstranite je" + "Medij izvrzite, preden ga odstranite, da se izognete izgubi vsebine" + "Nosilec %s je odstranjen" + "Nekatere funkcije morda ne bodo pravilno delovale. Vstavite novo napravo za shranjevanje." + "Izvrženje nosilca %s …" + "Ne odstranite" "Nastavi" "Izvrzite" "Raziščite" "Ni shrambe %s" - "Znova vstavite to napravo" + "Znova vstavite napravo" "Premikanje aplikacije %s" "Premikanje podatkov" - "Premik je dokončan" - "Podatki so premaknjeni v shrambo %s" - "Premik podatkov ni uspel" - "Podatki so ostali na izvirni lokaciji" + "Prenos vsebine je končan" + "Vsebina je bila premaknjena v napravo za shranjevanje %s" + "Vsebine ni bilo mogoče premakniti" + "Poskusite znova premakniti vsebino" "Odstranjeno" "Izvrženo" "Preverjanje ..." @@ -1377,14 +1401,14 @@ "Povezovanje v stalno vklopljeno navidezno zasebno omrežje ..." "Vzpostavljena povezava v stalno vklopljeno navidezno zasebno omrežje" "Prekinjena povezava s stalno vklopljenim VPN-jem" - "Napaka stalno vklopljenega navideznega zasebnega omrežja" + "Povezave s stalno vklopljenim VPN-jem ni bilo mogoče vzpostaviti" "Spremenite omrežne nastavitve ali nastavitve omrežja VPN" "Izberi datoteko" "Nobena datoteka ni izbrana" "Ponastavi" "Pošlji" - "Način delovanja za avtomobil je omogočen" - "Dotaknite se, če želite zapreti avtomobilski način." + "Aplikacija za vožnjo se izvaja" + "Dotaknite se, če želite zapreti aplikacijo za vožnjo." "Aktivna povezava z internetom ali dostopna točka sta aktivni" "Dotaknite se, če želite nastaviti." "Povezava z internetom prek mobilnega telefona je onemogočena" @@ -1464,22 +1488,19 @@ "Pogon USB %s" "Pomnilnik USB" "Uredi" - "Opozorilo o preneseni količini podatkov" - "Dot. se za ogled upor. in nast." - "Dosežena pod. omejitev za 2G/3G" - "Dosežena pod. omejitev za 4G" + "Opozorilo o prenosu podatkov" + "Porabili ste %s podatkov" "Omej. pren. mob. pod. dosežena" "Dosežena pod. omejitev za Wi-Fi" - "Prenos pod. ust. do konca cikla" - "Omejit. za podat. 2G-3G presež." - "Omejitev za podat. 4G presež." - "Omej. za pod. v mob. n. presež." - "Presež. omej. za podatke Wi-Fi" - "Velikost %s presega omejitev" + "Prenos podatkov je zaustavljen do konca obračunskega obdobja" + "Prek omejitve mobilnih podatkov" + "Prek omejitve podatkov Wi-Fi" + "Nastavljeno omejitev ste presegli za %s" "Podatki v ozadju so omejeni" "Dotaknite se za odstr. omejitve." - "Velika prenesena količina podatkov" - "Prenesena količina podatkov v zadnjih nekaj dneh je večja kot običajno. Dotaknite se za ogled uporabe in nastavitev." + "Visoka poraba mobilnih podatkov" + "Vaše aplikacije so porabile več podatkov kot običajno" + "Aplikacija %s je porabila več podatkov kot običajno" "Varnostno potrdilo" "To potrdilo je veljavno." "Izdano za:" @@ -1719,7 +1740,7 @@ "Namestil skrbnik" "Posodobil skrbnik" "Izbrisal skrbnik" - "Varčevanje z energijo akumulatorja podaljša čas njegovega delovanja tako, da zmanjša zmogljivost delovanja naprave in omeji vibriranje, lokacijske storitve ter prenos večine podatkov v ozadju. Aplikacije za e-pošto, sporočanje in drugo, ki uporabljajo sinhroniziranje, se morda ne posodabljajo, razen če jih odprete.\n\nVarčevanje z energijo akumulatorja se samodejno izklopi med polnjenjem akumulatorja naprave." + "Varčevanje z energijo akumulatorja podaljša čas njegovega delovanja tako, da zmanjša zmogljivost delovanja naprave in omeji ali izklopi vibriranje, lokacijske storitve ter prenos podatkov v ozadju. Aplikacije za e-pošto, sporočanje in drugo, ki uporabljajo sinhroniziranje, se morda ne posodabljajo, razen če jih odprete.\n\nVarčevanje z energijo akumulatorja se samodejno izklopi med polnjenjem akumulatorja naprave." "Zaradi zmanjševanja prenesene količine podatkov varčevanje s podatki nekaterim aplikacijam preprečuje, da bi v ozadju pošiljale ali prejemale podatke. Aplikacija, ki jo trenutno uporabljate, lahko prenaša podatke, vendar to morda počne manj pogosto. To na primer pomeni, da se slike ne prikažejo, dokler se jih ne dotaknete." "Vklop varčevanja s podatki?" "Vklop" @@ -1735,11 +1756,11 @@ %1$d min (do %2$s) %1$d min (do %2$s) - - %1$d uro (do %2$s) - %1$d uri (do %2$s) - %1$d ure (do %2$s) - %1$d ur (do %2$s) + + Za %1$d uro (do %2$s) + Za %1$d uri (do %2$s) + Za %1$d ure (do %2$s) + Za %1$d ur (do %2$s) %1$d h (do %2$s) @@ -1759,11 +1780,11 @@ %d min %d min - - %d uro - %d uri - %d ure - %d ur + + Za %d uro + Za %d uri + Za %d ure + Za %d ur %d h @@ -1786,14 +1807,14 @@ "Izklop zvoka: %1$s" "Vaša naprava ima notranjo napako in bo morda nestabilna, dokler je ne ponastavite na tovarniške nastavitve." "Vaša naprava ima notranjo napako. Če želite več informacij, se obrnite na proizvajalca." - "Zahteva USSD je spremenjena v zahtevo DIAL." - "Zahteva USSD je spremenjena v zahtevo SS." - "Zahteva USSD je spremenjena v novo zahtevo USSD." - "Zahteva USSD je spremenjena v zahtevo Video DIAL." - "Zahteva SS je spremenjena v zahtevo DIAL." - "Zahteva SS je spremenjena v zahtevo Video DIAL." - "Zahteva SS je spremenjena v zahtevo USSD." - "Zahteva SS je spremenjena v novo zahtevo SS." + "Zahteva USSD je spremenjena v navaden klic" + "Zahteva USSD je spremenjena v zahtevo SS" + "Spremenjeno v novo zahtevo USSD" + "Zahteva USSD je spremenjena v videoklic" + "Zahteva SS je spremenjena v navaden klic" + "Zahteva SS je spremenjena v videoklic" + "Zahteva SS je spremenjena v zahtevo USSD" + "Spremenjeno v novo zahtevo SS" "Delovni profil" "Razširi" "Strni" @@ -1895,6 +1916,10 @@ "Kartica SIM ne omogoča opravljanja glasovnih klicev" "Kartica SIM ne dovoljuje glasovnih klicev" "Telefon ne dovoljuje glasovnih klicev" + "Kartica SIM %d ni dovoljena" + "Kartica SIM %d ni omogočena za uporabo" + "Kartica SIM %d ni dovoljena" + "Kartica SIM %d ni dovoljena" "Pojavno okno" "in še %1$d" "Zdaj imate prejšnjo različico aplikacije ali različico, ki ni združljiva s to bližnjico" @@ -1907,7 +1932,14 @@ "Zaznana je bila škodljiva aplikacija" "Aplikacija %1$s želi prikazati izreze aplikacije %2$s" "Urejanje" + "Vibriranje bo vklopljeno za klice in obvestila" + "Zvonjenje bo izklopljeno za klice in obvestila" "Sistemske spremembe" + "Ne moti" + "Način »ne moti« skriva obvestila, da se lažje osredotočite" + "To je novo vedenje. Dotaknite se, če ga želite spremeniti." "Način »ne moti« je spremenjen" - "Dotaknite se, da preverite nastavitve vedenja pri prekinitvah" + "Dotaknite se, da preverite, kaj je blokirano." + "Sistem" + "Nastavitve" diff --git a/core/res/res/values-sq/strings.xml b/core/res/res/values-sq/strings.xml index a981222853713f54827d8e7e61226cb9544075e5..c0dddf82414c50df6f2a1fa2dca8a4e003c13108 100644 --- a/core/res/res/values-sq/strings.xml +++ b/core/res/res/values-sq/strings.xml @@ -77,15 +77,16 @@ "ID-ja e telefonuesit kalon me paracaktim në listën e të telefonuesve të pakufizuar. Telefonata e radhës: e pakufizuar!" "Shërbimi nuk është përgatitur." "Nuk mund ta ndryshosh cilësimin e ID-së së telefonuesit." - "Nuk ka shërbim për të dhënat" - "Asnjë telefonatë urgjence" + "Nuk ka shërbim të të dhënave celulare" + "Telefonatat e urgjencës nuk ofrohen" "Nuk ka shërbim zanor" - "Nuk ka shërbim zanor/urgjence" - "Përkohësisht nuk ofrohet nga rrjeti celular në vendndodhjen tënde" - "Rrjeti i paarritshëm" - "Për të përmirësuar marrjen e sinjalit, provo të ndryshosh llojin e zgjedhur te Cilësimet > Rrjeti dhe interneti > Rrjetet celulare > Lloji i preferuar i rrjetit." - "Telefonata me Wi‑Fi është aktive" - "Telefonatat e urgjencës kërkojnë një rrjet celular." + "Nuk ka shërbim zanore ose telefonata urgjence" + "Çaktivizuar përkohësisht nga operatori yt celular" + "Çaktivizuar përkohësisht nga operatori yt celular për kartën SIM %d" + "Rrjeti celular është i paarritshëm" + "Provo të ndryshosh rrjetin e preferuar. Trokit për ta ndryshuar." + "Telefonatat e urgjencës nuk ofrohen" + "Nuk mund të kryhen telefonata urgjence me Wi‑Fi" "Sinjalizimet" "Transferimi i telefonatave" "Modaliteti i \"Kthimit të telefonatës së urgjencës\"" @@ -120,12 +121,12 @@ "Lajmëruesi i roaming-ut është i aktivizuar" "Lajmëruesi i roaming-ut është i çaktivizuar" "Po kërkon për shërbim" - "Telefonatë me Wi-Fi" + "Telefonata me Wi-Fi nuk mund të konfigurohej" "Për të bërë telefonata dhe për të dërguar mesazhe nëpërmjet Wi-Fi, në fillim kërkoji operatorit celular të konfigurojë këtë shërbim. Më pas aktivizo përsëri telefonatat me Wi-Fi nga \"Cilësimet\". (Kodi i gabimit: %1$s)" - "Regjistrohu me operatorin tënd celular (kodi i gabimit: %1$s)" + "Problem gjatë regjistrimit të telefonatave me Wi‑Fi me operatorin tënd celular: %1$s" "%s" @@ -160,8 +161,8 @@ "Po përpunohen shumë kërkesa. Provo sërish më vonë." "Gabim identifikimi për %1$s" "Sinkronizo" - "Sinkronizo" - "Shumë fshirje %s." + "Nuk mund të sinkronizohet" + "U përpoqe të fshish shumë %s." "Hapësira ruajtëse e tabletit është plot. Fshi disa skedarë për të liruar hapësirë." "Hapësira ruajtëse e orës është plot. Fshi disa skedarë për të liruar hapësirë." "Hapësira ruajtëse e televizorit është plot. Fshi disa skedarë për të liruar hapësirë." @@ -174,14 +175,13 @@ "Nga administratori i profilit tënd të punës" "Nga %s" "Profili i punës u fshi" - "Profili i punës u fshi për shkak të mungesës së aplikacionit të administratorit" "Aplikacioni i administratorit të profilit të punës mungon ose është dëmtuar. Si rezultat i kësaj, profili yt i punës dhe të dhënat përkatëse janë fshirë. Kontakto me administratorin për ndihmë." "Profili yt i punës nuk është më i disponueshëm në këtë pajisje" "Shumë përpjekje për fjalëkalimin" "Pajisja është e menaxhuar" "Organizata jote e menaxhon këtë pajisje dhe mund të monitorojë trafikun e rrjetit. Trokit për detaje." "Pajisja do të spastrohet" - "Aplikacioni i administratorit nuk mund të përdoret. Pajisja jote tani do të fshihet.\n\nNëse ke pyetje, kontakto me administratorin e organizatës." + "Aplikacioni i administratorit nuk mund të përdoret. Pajisja jote tani do të fshihet.\n\nNëse ke pyetje, kontakto me administratorin e organizatës." "Printimi është çaktivizuar nga %s." "Unë" "Opsionet e tabletit" @@ -236,6 +236,9 @@ "modaliteti i aeroplanit" "Modaliteti i aeroplanit është i AKTIVIZUAR" "Modaliteti i aeroplanit është i ÇAKTIVIZUAR" + "Kursyesi i baterisë" + "\"Kursyesi i baterisë\" është JOAKTIV." + "\"Kursyesi i baterisë\" është AKTIV" "Cilësimet" "Ndihma" "Ndihma zanore" @@ -269,31 +272,31 @@ "Kalo te profili i punës" "Kontaktet" "qasu te kontaktet e tua" - "Lejo që <b>%1$s</b> të ketë qasje te kontaktet e tua" + "Të lejohet që <b>%1$s</b> të ketë qasje te kontaktet e tua?" "Vendndodhja" "qaset te vendndodhja e kësaj pajisjeje" - "Lejo që <b>%1$s</b> të ketë qasje te vendndodhja e kësaj pajisjeje" + "Të lejohet që <b>%1$s</b> të ketë qasje te vendndodhja e kësaj pajisjeje?" "Kalendari" "qasje te kalendari yt" - "Lejo që <b>%1$s</b> të ketë qasje te kalendari yt" + "Të lejohet që <b>%1$s</b> të ketë qasje te kalendari yt?" "SMS" "dërgo dhe shiko mesazhet SMS" - "Lejo që <b>%1$s</b> të dërgojë dhe të shikojë mesazhe SMS" + "Të lejohet që <b>%1$s</b> të dërgojë dhe të shikojë mesazhet SMS?" "Hapësira e ruajtjes" "qasjen te fotografitë, përmbajtjet audio-vizuale dhe skedarët në pajisje" - "Lejo që <b>%1$s</b> të ketë qasje te fotografitë, media dhe skedarët në pajisjen tënde" + "Të lejohet që <b>%1$s</b> të ketë qasje te fotografitë, media dhe skedarët në pajisjen tënde?" "Mikrofoni" "regjistro audio" - "Lejo që <b>%1$s</b> të regjistrojë audio" + "Të lejohet që <b>%1$s</b> të regjistrojë audio?" "Kamera" "bëj fotografi dhe regjistro video" - "Lejo që <b>%1$s</b> që shkrepë fotografi dhe të regjistrojë video" + "Të lejohet që <b>%1$s</b> të nxjerrë fotografi dhe të regjistrojë video?" "Telefoni" "kryej dhe menaxho telefonata" - "Lejo që <b>%1$s</b> të kryejë dhe të menaxhojë telefonata" + "Të lejohet që <b>%1$s</b> të kryejë dhe të menaxhojë telefonata?" "Sensorët e trupit" "qasu tek të dhënat e sensorëve rreth shenjave të tua jetësore" - "Lejo që <b>%1$s</b> të ketë qasje te të dhënat e sensorëve rreth shenjave të tua jetësore" + "Të lejohet që <b>%1$s</b> të ketë qasje te të dhënat e sensorëve rreth shenjave të tua jetësore?" "Nxjerrë përmbajtjen e dritares" "Inspekton përmbajtjen e dritares me të cilën po ndërvepron." "Aktivizojë funksionin \"Eksploro me prekje\"" @@ -305,7 +308,7 @@ "Kryen gjeste" "Mund të trokasë, rrëshqasë, bashkojë gishtat dhe kryejë gjeste të tjera." "Gjestet e gjurmës së gishtit" - "Mund të kapë gjestet e kryera në sensorin e gjurmës së gishtit të pajisjeve." + "Mund të regjistrojë gjestet e kryera në sensorin e gjurmës së gishtit të pajisjes." "çaktivizo ose modifiko shiritin e statusit" "Lejon aplikacionin të çaktivizojë shiritin e statusit dhe të heqë ikonat e sistemit." "të bëhet shiriti i statusit" @@ -356,6 +359,8 @@ "Lejon aplikacionin të zaptojë një pjesë të qëndrueshme në kujtesë. Kjo mund të kufizojë kujtesën e disponueshme për aplikacionet e tjera duke e ngadalësuar tabletin." "Lejon aplikacionin të zaptojë një pjesë të qëndrueshme në kujtesë. Kjo mund të kufizojë kujtesën e disponueshme për aplikacionet e tjera duke e ngadalësuar televizorin." "Lejon aplikacionin të zaptojë një pjesë të qëndrueshme në kujtesë. Kjo mund të kufizojë kujtesën e disponueshme për aplikacionet e tjera duke e ngadalësuar telefonin." + "ekzekuto shërbimin në plan të parë" + "Lejon aplikacionin të përdorë shërbimet në plan të parë." "mat hapësirën ruajtëse të aplikacionit" "Lejon aplikacionin të gjejë kodin e tij, të dhënat dhe madhësitë e memorieve të përkohshme." "modifiko cilësimet e sistemit" @@ -478,6 +483,8 @@ "Lejon aplikacionin të komunikojë me etiketimet e \"Komunikimit të fushës së afërt (NFC)\", kartat dhe lexuesit." "çaktivizo kyçjen e ekranit" "Lejon aplikacionin të çaktivizojë kyçjen e tasteve dhe çdo mbrojtje të lidhur me fjalëkalimin. Për shembull, telefoni çaktivizon kyçjen e tasteve kur merr një telefonatë hyrëse, pastaj riaktivizon kyçjen e tasteve kur mbaron telefonata." + "përdor harduerin biometrik" + "E lejon aplikacionin që të përdorë harduerin biometrik për vërtetimin" "të menaxhojë harduerin e gjurmës së gishtit" "E lejon aplikacionin që të aktivizojë metoda për të shtuar dhe për të fshirë shabllonet e gjurmës së gishtit për përdorim." "përdor harduerin e gjurmës së gishtit" @@ -490,6 +497,7 @@ "Nuk njihet" + "Gjurma e gishtit u vërtetua" "Hardueri i gjurmës së gishtit nuk mundësohet." "Gjurma e gishtit nuk mund të ruhet. Hiq një gjurmë gishti ekzistuese." "Koha e veprimit për gjurmën e gishtit skadoi. Provo përsëri." @@ -802,6 +810,8 @@ "Shkyçje me motiv." "Shkyçje me fytyrë." "Shkyçje me PIN." + "Shkyçja e kartës SIM me kodin PIN" + "Shkyçja e kartës SIM me kodin PUK" "Shkyçja e fjalëkalimit." "Zona e motivit." "Zonën e rrëshqitjes." @@ -863,6 +873,12 @@ "Teksti u kopjua në kujtesën e fragmenteve." "Më shumë" "Menyja+" + "Meta+" + "Ctrl+" + "Alt+" + "Shift+" + "Sym+" + "Funksioni+" "hapësirë" "enter" "fshi" @@ -994,14 +1010,23 @@ "Metoda e hyrjes" "Veprimet e tekstit" "Dërgo mail" + "Dërgo email tek adresa e zgjedhur" "Telefono" + "Telefono në numrin e zgjedhur të telefonit" "Gjej vendndodhjen" + "Gjej adresën e zgjedhur" "Hap" + "Hap URL-në e zgjedhur" "Mesazh" + "Dërgo mesazh te numri i zgjedhur i telefonit" "Shto" + "Shto te kontaktet" "Shiko" + "Shiko kohën e zgjedhur në kalendar" "Orari" + "Planifiko ngjarjen për kohën e zgjedhur" "Pjesë muzikore" + "Monitoro fluturimin e zgjedhur" "Hapësira ruajtëse po mbaron" "Disa funksione të sistemit mund të mos punojnë" "Nuk ka hapësirë të mjaftueshme ruajtjeje për sistemin. Sigurohu që të kesh 250 MB hapësirë të lirë dhe pastaj të rifillosh." @@ -1074,31 +1099,28 @@ "Kliko për përditësim" "Aplikacioni %1$s (procesi %2$s) ka shkelur politikën e tij të vetë-imponuar \"Modaliteti i ashpër\" (StrictMode)." "Procesi %1$s ka shkelur politikën e tij të vetë-imponuar \"Modaliteti i rreptë\" (StrictMode)" - "\"Androidi\" po përditësohet…" - "\"Androidi\" po fillon…" + "Telefoni po përditësohet…" + "Tableti po përditësohet…" + "Pajisja po përditësohet…" + "Telefoni po niset…" + "Tableti po niset…" + "Pajisja po niset…" "Po përshtat ruajtjen." - "Përditësimi i Android po përfundon…" - "Disa aplikacione mund të mos funksionojnë si duhet deri sa të përfundojë përmirësimi" + "Po përfundon përditësimi i sistemit…" "%1$s po përmirësohet…" "Po përshtat aplikacionin %1$d nga gjithsej %2$d." "Po përgatit %1$s." "Aplikacionet e fillimit." "Po përfundon nisjen." "%1$s është në punë" - - - - - - - - - - - - + "Trokit për t\'u kthyer te loja" + "Zgjidh një lojë" + "Për një cilësi më të mirë funksionimi, vetëm një nga këto lojëra mund të hapet në të njëjtën kohë." + "Kthehu prapa te %1$s" + "Hap %1$s" + "%1$s do të mbyllet pa u ruajtur" "%1$s e ka kaluar kufirin e memories" - "Stiva e skedarëve fiktivë është mbledhur; trokit për t\'i ndarë" + "Stiva e skedarëve fiktivë është mbledhur. Trokit për t\'i ndarë." "Të ndahet stiva e skedarëve fiktivë?" "Procesi %1$s ka kaluar kufirin e tij të memories së procesit me %2$s. Mundësohet stivimi e skedarëve fiktivë në mënyrë që t\'i ndani me zhvilluesit e tyre. Bëni kujdes pasi stiva e skedarëve fiktivë mund të përmbajë ndonjë informacion tëndin personal ku aplikacioni ka qasje." "Zgjidh një veprim për tekstin" @@ -1133,12 +1155,12 @@ "Lidhu me rrjetin e hapur Wi‑Fi" "Lidhu me rrjetin Wi‑Fi të operatorit" - "Po lidhet me rrjetin e hapur Wi‑Fi" + "Po lidhet me rrjetin Wi‑Fi" "Lidhur me rrjetin e hapur Wi‑Fi" "Nuk mund të lidhet me rrjetin Wi‑Fi" "Trokit për të parë të gjitha rrjetet" "Lidhu" - "Të gjitha rrjetet" + "Të gjitha rrjetet" "Wi‑Fi do të aktivizohet automatikisht" "Kur ndodhesh pranë një rrjeti të ruajtur me cilësi të lartë" "Mos e aktivizo përsëri" @@ -1205,6 +1227,7 @@ "Rifillo" "Aktivizo shërbimin celular" "Shkarko aplikacionin e operatorit celular për të aktivizuar kartën e re SIM" + "Shkarko aplikacionin %1$s për të aktivizuar kartën tënde të re SIM" "Shkarko aplikacionin" "Është futur kartë e re SIM" "Trokit për ta konfiguruar" @@ -1223,13 +1246,13 @@ "PTP nëpërmjet USB-së u aktivizua" "Ndarja e internetit nëpërmjet USB-së u aktivizua" "MIDI nëpërmjet USB-së u aktivizua" - "Modaliteti i aksesorit me USB u aktivizua" + "Aksesori i USB-së u lidh" "Trokit për më shumë opsione." "Pajisja e lidhur po ngarkohet. Trokit për opsione të tjera." "U zbulua aksesor i audios analoge" "Pajisja e bashkuar nuk është e pajtueshme me këtë telefon. Trokit për të mësuar më shumë." "Korrigjuesi i USB-së i lidhur" - "Trokit për të çaktivizuar korrigjimin e gabimeve të USB-së." + "Trokit për të çaktivizuar korrigjimin e USB-së" "Përzgjidhe për të çaktivizuar korrigjimin e gabimeve të USB-së" "Po merret raporti i defekteve në kod…" "Të ndahet raporti i defektit në kod?" @@ -1248,34 +1271,35 @@ "%s afishohet mbi aplikacionet e tjera" "%s shfaqet mbi apl. e tjera" "Nëse nuk dëshiron që %s ta përdorë këtë funksion, trokit për të hapur cilësimet dhe për ta çaktivizuar." - "ÇAKTIVIZO" - "Po përgatit %s" - "Po kontrollon për gabime" - "U zbulua karta e re %s" + "Çaktivizo" + "%s po kontrollohet…" + "Përmbajtja aktuale po rishikohet" + "%s e re" + "Trokit për ta konfiguruar" "Për transferimin e fotografive dhe skedarëve të tjerë" - "%s e dëmtuar" - "%s është dëmtuar. Trokit për ta rregulluar." + "Problem me %s" + "Trokit për ta rregulluar" "%s është dëmtuar. Zgjidh për ta rregulluar." "%s nuk mbështetet" "Kjo pajisje nuk e mbështet këtë %s. Trokit për ta konfiguruar në një format të mbështetur." "Kjo pajisje nuk e mbështet këtë %s. Përzgjidhe për ta konfiguruar në një format të mbështetur." "%s u hoq papritur" - "Shkëput %s para se ta heqësh për të shmangur humbjen e të dhënave" - "Është hequr %s" - "%s është hequr; fut një të re" - "Ende duke nxjerrë %s..." - "Mos e hiq" + "Nxirr median para se ta heqësh për të shmangur humbjen e përmbajtjes" + "%s u hoq" + "Disa funksionalitete mund të mos funksionojnë si duhet. Fut një hapësirë ruajtëse të re." + "%s po nxirret" + "Mos e hiq" "Konfiguro" "Nxirr" "Eksploro" "%s mungon" - "Fute përsëri këtë pajisje" + "Fut përsëri pajisjen" "Po zhvendos %s" "Po zhvendos të dhënat" - "Zhvendosja përfundoi" - "Të dhënat u zhvendosën te %s" - "Të dhënat nuk mund të zhvendoseshin" - "U lanë të dhëna në vendndodhjen origjinale" + "Transferimi i përmbajtjes u krye" + "Përmbajtja u zhvendos te %s" + "Përmbajtja s\'mund të zhvendosej" + "Provo ta zhvendosësh përsëri përmbajtjen" "E hequr" "E nxjerrë" "Po kontrollon..." @@ -1334,14 +1358,14 @@ "Po lidh VPN-në për aktivizim të përhershëm…" "VPN e lidhur në mënyrë të përhershme" "Shkëputur nga VPN-ja gjithmonë e aktivizuar" - "Gabimi VPN-je për aktivizimin e përhershëm" + "Nuk mund të lidhej me VPN-në gjithmonë të aktivizuar" "Ndrysho rrjetin ose cilësimet e VPN-së" "Zgjidh skedarin" "Nuk u zgjodh asnjë skedar" "Rivendos" "Dërgo" - "Modaliteti \"në makinë\" është i aktivizuar" - "Trokit për të dalë nga modaliteti \"në makinë\"." + "Aplikacioni i drejtimit të makinës është në ekzekutim" + "Trokit për të dalë nga aplikacioni i drejtimit të makinës." "Lidhja e çiftimit ose ajo e qasjes në zona publike interneti është aktive" "Trokit për ta konfiguruar." "Lidhja e çiftimit është çaktivizuar" @@ -1419,22 +1443,19 @@ "USB-ja nga %s" "Hapësira ruajtëse e USB-së" "Redakto" - "Sinjalizimi i të dhënave" - "Trokit për të parë përdorimin dhe cilësimet." - "Kufiri i të dhënave 2G-3G u arrit" - "Kufiri i të dhënave 4G u arrit" + "Paralajmërim për të dhënat" + "Ke përdorur %s nga të dhënat" "U arrit kufiri i të dhënave" "U arrit kufiri i të dhënave Wi-Fi" - "Të dhënat u ndaluan për pjesën e mbetur të ciklit" - "Kufiri i të dhënave 2G-3G u tejkalua" - "Kufiri i të dhënave 4G u tejkalua" - "Kufiri i të dhënave celulare u tejkalua" - "Kufiri i të dhënave Wi-Fi u tejkalua" - "%s mbi kufirin e përcaktuar." + "Të dhënat u ndërprenë për pjesën e mbetur të ciklit" + "Mbi kufirin e të dhënave celulare" + "Mbi kufirin e të dhënave të Wi-Fi" + "Ke kaluar %s mbi kufirin tënd të caktuar" "Të dhënat e sfondit janë të kufizuara" "Trokit për të hequr kufizimin." - "Përdorim i madh të dhënash" - "Përdorimi i të dhënave të tua gjatë ditëve të fundit është më i madh se normalisht. Trokit për të parë përdorimin dhe cilësimet." + "Përdorim i lartë i të dhënave celulare" + "Aplikacionet e tua kanë përdorur më shumë të dhëna se zakonisht" + "%s ka përdorur më shumë të dhëna se zakonisht" "Certifikatë sigurie" "Certifikata është e vlefshme." "Lëshuar për:" @@ -1670,7 +1691,7 @@ "Instaluar nga administratori" "Përditësuar nga administratori" "Fshirë nga administratori" - "Për të përmirësuar jetëgjatësinë e baterisë, \"Kursyesi i baterisë\" ul rendimentin e pajisjes sate si dhe kufizon dridhjet, shërbimet e vendndodhjes dhe shumicën e të dhënave në sfond. Email-i, mesazhet dhe aplikacionet e tjera që mbështeten te sinkronizimi mund të mos përditësohen nëse nuk i hap.\n\n\"Kursyesi i baterisë\" çaktivizohet automatikisht kur pajisja është në ngarkim." + "Për të zgjatur jetëgjatësinë e baterisë, \"Kursyesi i baterisë\" ul cilësinë e funksionimit të pajisjes sate si dhe kufizon ose çaktivizon dridhjet, shërbimet e vendndodhjes dhe të dhënat në sfond. Email-i, mesazhet dhe aplikacionet e tjera që mbështeten te sinkronizimi mund të mos përditësohen nëse nuk i hap.\n\n\"Kursyesi i baterisë\" çaktivizohet automatikisht kur pajisja është në ngarkim." "Për të ndihmuar në reduktimin e përdorimit të të dhënave, \"Kursyesi i të dhënave\" pengon që disa aplikacione të dërgojnë apo të marrin të dhëna në sfond. Një aplikacion që po përdor aktualisht mund të ketë qasje te të dhënat, por këtë mund ta bëjë më rrallë. Kjo mund të nënkuptojë, për shembull, se imazhet nuk shfaqen kur troket mbi to." "Të aktivizohet \"Kursyesi i të dhënave\"?" "Aktivizo" @@ -1682,9 +1703,9 @@ Për %1$d minutë (deri në %2$s) Për 1 minutë (deri në %2$s) - + Për %1$d orë (deri në %2$s) - Për një orë (deri në %2$s) + Për 1 orë (deri në %2$s) Për %1$d orë (deri në %2$s) @@ -1698,9 +1719,9 @@ Për %d minuta Për 1 minutë - + Për %d orë - Për një orë + Për 1 orë Për %d orë @@ -1721,14 +1742,14 @@ "Lënë në heshtje nga %1$s" "Ka një problem të brendshëm me pajisjen tënde. Ajo mund të jetë e paqëndrueshme derisa të rivendosësh të dhënat në gjendje fabrike." "Ka një problem të brendshëm me pajisjen tënde. Kontakto prodhuesin tënd për detaje." - "Kërkesa USSD është modifikuar në kërkesën DIAL." - "Kërkesa USSD është modifikuar në kërkesën SS." - "Kërkesa USSD është modifikuar në kërkesën e re USSD." - "Kërkesa USSD është modifikuar në kërkesën Video DIAL." - "Kërkesa SS është e modifikuar në kërkesën DIAL." - "Kërkesa SS është e modifikuar në kërkesën Video DIAL." - "Kërkesa SS është modifikuar në kërkesën USSD." - "Kërkesa SS është e modifikuar në kërkesën e re SS." + "Kërkesa USSD u ndryshua në telefonatë të rregullt" + "Kërkesa USSD u ndryshua në kërkesë SS" + "U ndryshua në kërkesë të re USSD" + "Kërkesa USSD u ndryshua në telefonatë me video" + "Kërkesa SS u ndryshua në telefonatë të rregullt" + "Kërkesa SS u ndryshua në telefonatë me video" + "Kërkesa SS u ndryshua në kërkesë USSD" + "U ndryshua në kërkesë të re SS" "Profili i punës" "Zgjero" "Palos" @@ -1826,6 +1847,10 @@ "Karta SIM nuk është e përgatitur për zërin" "Karta SIM nuk lejohet për zërin" "Telefoni nuk lejohet për zërin" + "Karta SIM %d nuk lejohet" + "Karta SIM %d nuk është përgatitur" + "Karta SIM %d nuk lejohet" + "Karta SIM %d nuk lejohet" "Dritare kërcyese" "+ %1$d" "Versioni i aplikacionit u ul ose nuk është në përputhje me këtë shkurtore" @@ -1838,7 +1863,14 @@ "U gjet aplikacion i dëmshëm" "%1$s dëshiron të shfaqë pjesë të %2$s" "Modifiko" + "Do të lëshojë dridhje për telefonatat dhe njoftimet" + "Do të hiqet zëri për telefonatat dhe njoftimet" "Ndryshimet e sistemit" + "Mos shqetëso" + "Modaliteti \"Mos shqetëso\" po fsheh njoftimet për të të ndihmuar të përqendrohesh" + "Kjo është sjellje e re. Trokit për ta ndryshuar." "\"Mos shqetëso\" ka ndryshuar" - "Trokit për të kontrolluar cilësimet e sjelljes për ndërprerjet" + "Trokit për të shënuar atë që është bllokuar" + "Sistemi" + "Cilësimet" diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index aa5226bd700b4cc1ee3161c0ab29de6840555544..e696471ad537b82eed3655b2dba4b400de874d81 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -78,15 +78,16 @@ "ИД позиваоца подразумевано није ограничен. Следећи позив: Није ограничен." "Услуга није добављена." "Не можете да промените подешавање ИД-а корисника." - "Нема услуге преноса података" - "Хитни позиви нису могући" + "Нема услуге преноса података преко мобилног оператера" + "Хитни позиви нису доступни" "Нема гласовне услуге" - "Нема гласовне услуге/услуге за хитне позиве" - "Привремено је онемогућено на мобилној мрежи на вашој локацији" - "Повезивање са мрежом није успело" - "Да бисте побољшали пријем, пробајте да промените изабрани тип у одељку Подешавања > Мрежа и интернет > Мобилне мреже > Жељени тип мреже." - "Wi‑Fi позивање је активно" - "Хитни позиви захтевају мобилну мрежу." + "Нема гласовне услуге ни хитних позива" + "Привремено искључио мобилни оператер" + "Привремено је искључио мобилни оператер за SIM %d" + "Повезивање са мобилном мрежом није успело" + "Пробајте да промените жељену мрежу. Додирните да бисте променили." + "Хитни позиви нису доступни" + "Не можете да упућујете хитне позиве преко Wi‑Fi-ја" "Обавештења" "Преусмеравање позива" "Режим за хитан повратни позив" @@ -121,12 +122,12 @@ "Банер роминга је укључен" "Банер роминга је искључен" "Претраживање услуге" - "Позивање преко Wi-Fi-ја" + "Подешавање позивања преко Wi-Fi-ја није успело" "Да бисте упућивали позиве и слали поруке преко Wi-Fi-ја, прво затражите од мобилног оператера да вам омогући ову услугу. Затим у Подешавањима поново укључите Позивање преко Wi-Fi-ја. (кôд грешке: %1$s)" - "Региструјте се код мобилног оператера (кôд грешке: %1$s)" + "Проблем у вези са регистровањем позивања преко Wi‑Fi-ја код мобилног оператера: %1$s" "%s" @@ -161,8 +162,8 @@ "Превише захтева се обрађује. Пробајте поново касније." "Грешка при пријављивању за %1$s" "Синхронизација" - "Синхронизација" - "Превише %s избрисаних ставки." + "Синхронизација није успела" + "Превише покушаја брисања садржаја %s." "Меморија таблета је пуна! Избришите неке датотеке да бисте ослободили простор." "Меморија сата је пуна. Избришите неке датотеке да бисте ослободили простор." "Меморијски простор на ТВ-у је попуњен. Избришите неке датотеке да бисте ослободили простор." @@ -176,14 +177,13 @@ "Од стране администратора профила за Work" "Од стране %s" "Пословни профил је избрисан" - "Профил за Work је избрисан јер недостаје апликација за администраторе" "Апликација за администраторе на профилу за Work недостаје или је оштећена. Због тога су профил за Work и повезани подаци избрисани. Обратите се администратору за помоћ." "Профил за Work више није доступан на овом уређају" "Превише покушаја уноса лозинке" "Уређајем се управља" "Организација управља овим уређајем и може да надгледа мрежни саобраћај. Додирните за детаље." "Уређај ће бити обрисан" - "Не можете да користите ову апликацију за администраторе. Уређај ће сада бити обрисан.\n\nАко имате питања, контактирајте администратора организације." + "Не можете да користите ову апликацију за администраторе. Уређај ће сада бити обрисан.\n\nАко имате питања, контактирајте администратора организације." "Штампање је онемогућила апликација %s." "Ја" "Опције за таблет" @@ -239,6 +239,9 @@ "Режим рада у авиону" "Режим рада у авиону је УКЉУЧЕН" "Режим рада у авиону је ИСКЉУЧЕН" + "Уштеда батерије" + "Уштеда батерије је ИСКЉУЧЕНА" + "Уштеда батерије је УКЉУЧЕНА" "Подешавања" "Помоћ" "Гласовна помоћ" @@ -272,31 +275,31 @@ "Пређи на пословни профил" "Контакти" "приступи контактима" - "Дозволите да <b>%1$s</b> приступа контактима" + "Желите ли да омогућите да <b>%1$s</b> приступа контактима?" "Локација" "приступи локацији овог уређаја" - "Дозволите да <b>%1$s</b> приступа локацији уређаја" + "Желите ли да омогућите да <b>%1$s</b> приступа локацији овог уређаја?" "Календар" "приступи календару" - "Дозволите да <b>%1$s</b> приступа календару" + "Желите ли да омогућите да <b>%1$s</b> приступа календару?" "SMS" "шаље и прегледа SMS поруке" - "Дозволите да <b>%1$s</b> шаље и прегледа SMS-ове" + "Желите ли да омогућите да <b>%1$s</b> шаље и прегледа SMS-ове?" "Складиште" "приступа сликама, медијима и датотекама на уређају" - "Дозволите <b>%1$s</b> да приступа сликама, медијским датотекама и датотекама на уређају" + "Желите ли да омогућите да <b>%1$s</b>приступа сликама, медијским датотекама и датотекама на уређају?" "Микрофон" "снима звук" - "Дозволите да <b>%1$s</b> снима звук" + "Желите ли да омогућите да <b>%1$s</b> снима звук?" "Камера" "снима слике и видео" - "Дозволите да <b>%1$s</b> снима слике и видео снимке" + "Желите ли да омогућите да <b>%1$s</b> снима слике и видео снимке?" "Телефон" "упућује телефонске позиве и управља њима" - "Дозволите да <b>%1$s</b> упућује позиве и управља њима" + "Желите ли да омогућите да <b>%1$s</b> упућује позиве и управља њима?" "Сензори за тело" "приступа подацима сензора о виталним функцијама" - "Дозволите да <b>%1$s</b> приступа подацима сензора о виталним функцијама" + "Желите ли да омогућите да <b>%1$s</b>приступа подацима сензора о виталним функцијама?" "да преузима садржај прозора" "Проверава садржај прозора са којим остварујете интеракцију." "да укључи Истраживања додиром" @@ -308,7 +311,7 @@ "Обављање покрета" "Може да додирује, листа, скупља приказ и обавља друге покрете." "Покрети за отисак прста" - "Може да региструје покрете на сензору за отисак прста на уређају." + "Може да региструје покрете на сензору за отисак прста на уређају." "онемогућавање или измена статусне траке" "Дозвољава апликацији да онемогући статусну траку или да додаје и уклања системске иконе." "функционисање као статусна трака" @@ -359,6 +362,8 @@ "Дозвољава апликацији да учини сопствене компоненте трајним у меморији. Ово може да ограничи меморију доступну другим апликацијама и успори таблет." "Дозвољава апликацији да неке своје делове трајно задржи у меморији. То може да ограничи меморију доступну другим апликацијама и успори ТВ." "Дозвољава апликацији да учини сопствене компоненте трајним у меморији. Ово може да ограничи меморију доступну другим апликацијама и успори телефон." + "покрени услугу у првом плану" + "Дозвољава апликацији да користи услуге у првом плану." "мерење меморијског простора у апликацији" "Дозвољава апликацији да преузме величине кôда, података и кеша." "измена подешавања система" @@ -481,6 +486,8 @@ "Дозвољава апликацији да комуницира са ознакама, картицама и читачима комуникације кратког домета (NFC)." "онемогућавање закључавања екрана" "Дозвољава апликацији да онемогући закључавање тастатуре и све повезане безбедносне мере са лозинкама. На пример, телефон онемогућава закључавање тастатуре при пријему долазног телефонског позива, а затим га поново омогућава по завршетку позива." + "користи биометријски хардвер" + "Дозвољава апликацији да користи биометријски хардвер за потврду аутентичности" "управљај хардвером за отиске прстију" "Дозвољава апликацији да активира методе за додавање и брисање шаблона отисака прстију који ће се користити." "користи хардвер за отиске прстију" @@ -493,6 +500,7 @@ "Није препознат" + "Отисак прста је потврђен" "Хардвер за отиске прстију није доступан." "Није могуће сачувати отисак прста. Уклоните неки од постојећих отисака прстију." "Временско ограничење за отисак прста је истекло. Пробајте поново." @@ -805,6 +813,8 @@ "Откључавање шаблоном." "Откључавање лицем." "Откључавање PIN-ом." + "Откључава SIM картицу PIN-ом." + "Откључава SIM картицу PUK-ом." "Откључавање лозинком." "Област шаблона." "Област превлачења." @@ -866,6 +876,12 @@ "Текст је копиран у привремену меморију." "Још" "Мени+" + "Meta+" + "Ctrl+" + "Alt+" + "Shift+" + "Sym+" + "Function+" "размак" "enter" "избриши" @@ -1014,14 +1030,23 @@ "Метод уноса" "Радње у вези са текстом" "Пошаљи имејл" + "Пошаљите имејл на изабрану адресу" "Позови" + "Позовите изабрани број телефона" "Пронађи" + "Пронађите изабрану адресу" "Отвори" + "Отворите изабрани URL" "Пошаљи SMS" + "Пошаљите SMS на изабрани број телефона" "Додај" + "Додајте у контакте" "Прикажи" + "Погледајте изабрано време у календару" "Закажи" + "Закажите догађај у изабрано време" "Прати" + "Пратите изабрани лет" "Меморијски простор је на измаку" "Неке системске функције можда не функционишу" "Нема довољно меморијског простора за систем. Уверите се да имате 250 MB слободног простора и поново покрените." @@ -1094,31 +1119,28 @@ "Потражи ажурирање" "Апликација %1$s (процес %2$s) је прекршила самонаметнуте StrictMode смернице." "Процес %1$s је прекршио самонаметнуте StrictMode смернице." - "Android се надограђује…" - "Android се покреће…" + "Телефон се ажурира…" + "Таблет се ажурира…" + "Уређај се ажурира…" + "Телефон се покреће…" + "Таблет се покреће…" + "Уређај се покреће…" "Меморија се оптимизује." - "Довршавамо ажурирање Android-а…" - "Неке апликације можда неће исправно функционисати док се надоградња не доврши" + "Ажурирање система се довршава…" "%1$s се надограђује…" "Оптимизовање апликације %1$d од %2$d." "Припрема се %1$s." "Покретање апликација." "Завршавање покретања." "Апликација %1$s је покренута" - - - - - - - - - - - - + "Додирните да бисте се вратили у игру" + "Одаберите игру" + "Да би учинак био бољи, можете да отворите само једну од ових игара одједном." + "Назад на %1$s" + "Отвори %1$s" + "%1$s ће се затворити без чувања" "%1$s премашује ограничење меморије" - "Снимак динамичког дела меморије је направљен; додирните за дељење" + "Снимак динамичког дела меморије је направљен. Додирните за дељење." "Желите ли да делите снимак динамичког дела меморије?" "Процес %1$s је премашио ограничење меморије за процес од %2$s. Снимак динамичког дела меморије је доступан и можете да га делите са програмером. Будите опрезни: овај снимак динамичког дела меморије може да садржи неке личне податке којима апликација може да приступа." "Изаберите радњу за текст" @@ -1155,12 +1177,12 @@ "Повежите се са отвореном Wi‑Fi мрежом" "Повежите се на Wi-Fi мрежу мобилног оператера" - "Повезујете се са отвореном Wi‑Fi мрежом" + "Повезује се са Wi-Fi мрежом..." "Повезали сте се са Wi‑Fi мрежом" "Повезивање са Wi‑Fi мрежом није успело" "Додирните да бисте видели све мреже" "Повежи" - "Све мреже" + "Све мреже" "Wi‑Fi ће се аутоматски укључити" "Када сте у близини сачуване мреже високог квалитета" "Не укључуј поново" @@ -1226,6 +1248,7 @@ "Поново покрени" "Активирајте мобилну услугу" "Преузмите апликацију мобилног оператера да бисте активирали нови SIM" + "Преузмите апликацију %1$s да бисте активирали нову SIM картицу" "Преузмите апликацију" "Нова SIM картица је уметнута" "Додирните за подешавање" @@ -1244,13 +1267,13 @@ "Режим PTP преко USB-а је укључен" "USB привезивање је укључено" "Режим MIDI преко USB-а је укључен" - "Режим USB додатка је укључен" + "USB додатак је повезан" "Додирните за још опција." "Повезани уређај се пуни. Додирните за још опција." "Откривена је аналогна додатна опрема за аудио садржај" "Прикључени уређај није компатибилан са овим телефоном. Додирните да бисте сазнали више." "Отклањање грешака са USB-а је омогућено" - "Додирните да бисте онемогућили отклањање грешака са USB-а." + "Додирните да бисте искључили отклањање грешака са USB-а" "Изаберите да бисте онемогућили отклањања грешака са USB-а." "Извештај о грешци се генерише…" "Желите ли да поделите извештај о грешци?" @@ -1269,34 +1292,35 @@ "Апликација %s се приказује преко других апликација" "%s се приказује преко других аплик." "Ако не желите ову функцију за %s, додирните да бисте отворили подешавања и искључили је." - "ИСКЉУЧИ" - "%s се припрема" - "Проверава се да ли постоје грешке" - "Нови уређај %s је откривен" + "Искључи" + "Проверава се %s…" + "Прегледа се актуелни садржај" + "Нови/а %s" + "Додирните да бисте подесили" "За пренос слика и медија" - "Уређај %s је оштећен" - "Уређај %s је оштећен. Додирните да бисте га поправили." + "Проблем са: %s" + "Додирните да бисте исправили" "Медиј %s је оштећен. Изаберите да га поправите." "Уређај %s није подржан" "Овај уређај не подржава овај уређај %s. Додирните да бисте подесили подржани формат." "Овај уређај не подржава овај медиј (%s). Изаберите да га подесите у подржаном формату." "Уређај %s је неочекивано уклоњен" - "Искључите уређај %s пре уклањања да не бисте изгубили податке" - "Уређај %s је уклоњен" - "Уређај %s је уклоњен; уметните нови" - "%s се још увек избацује…" - "Не уклањајте" + "Избаците медијум пре него што га уклоните да не бисте изгубили садржај" + "%s је уклоњен/а" + "Неке функције можда неће исправно радити. Уметните нов меморијски уређај." + "Избацује се %s" + "Не уклањајте" "Активирај" "Избаци" "Истражи" "%s недостаје" - "Уметните уређај поново" + "Поново уметните уређај" "Преноси се %s" "Подаци се преносе" - "Пренос је завршен" - "Подаци су пренесени на уређај %s" - "Пренос података није успео" - "Подаци су остали на оригиналној локацији" + "Пренос садржаја је готов" + "Садржај је премешен на: %s" + "Премештање садржаја није успело" + "Пробајте да поново преместите садржај" "Уклоњен је" "Избачен је" "Проверава се..." @@ -1355,14 +1379,14 @@ "Повезивање стално укљученог VPN-а..." "Стално укључени VPN је повезан" "Веза са увек укљученим VPN-ом је прекинута" - "Грешка стално укљученог VPN-а" + "Повезивање на стално укључени VPN није успело" "Промените подешавања VPN-а" "Одабери датотеку" "Није изабрана ниједна датотека" "Ресетуј" "Пошаљи" - "Режим рада у аутомобилу је омогућен" - "Додирните да бисте изашли из режима рада у аутомобилу." + "Апликација за вожњу је покренута" + "Додирните да бисте изашли из апликације за вожњу." "Активно повезивање са интернетом преко мобилног уређаја или хотспот" "Додирните да бисте подесили." "Привезивање је онемогућено" @@ -1441,22 +1465,19 @@ "%s USB диск" "USB меморија" "Измени" - "Обавештење о потрошњи података" - "Додирните за потрошњу и подешавања." - "Нема више 2G-3G података" - "Нема више 4G података" + "Упозорење на потрошњу података" + "Потрошили сте %s података" "Достигли сте ограничење података" "Нема више Wi-Fi података" - "Потрошили сте податке за овај месец" - "Прекорачен пренос 2G-3G података" - "Прекорачење преноса 4G података" - "Прекорачено огранич. прен. под." - "Прекорачење преноса Wi-Fi подат." - "%s преко наведеног ограничења." + "Подаци су паузирани током остатка циклуса" + "Потрошили сте мобилне податке" + "Потрошили сте Wi-Fi податке" + "Прекорачили сте %s од подешеног ограничења" "Позадински подаци су ограничени" "Додирните за уклањање ограничења." - "Велика потрошња података" - "Потрошња података током последњих пар дана је већа него обично. Додирните да бисте прегледали потрошњу и подешавања." + "Велика потрошња моб. података" + "Апликације су потрошиле више података него обично" + "Апликација %s је потрошила више података него обично" "Безбедносни сертификат" "Овај сертификат је важећи." "Издато за:" @@ -1694,7 +1715,7 @@ "Инсталирао је администратор" "Ажурирао је администратор" "Избрисао је администратор" - "Да би продужила трајање батерије, Уштеда батерије смањује перформансе уређаја и ограничава вибрацију, услуге локације и већину позадинских података. Имејл, размена порука и друге апликације које се ослањају на синхронизацију се неће ажурирати ако их не отворите.\n\nУштеда батерије се аутоматски искључује када се уређај пуни." + "Да би продужила трајање батерије, Уштеда батерије смањује перформансе уређаја и ограничава или искључује вибрацију, услуге локације и позадинске податке. Имејл, размена порука и друге апликације које се ослањају на синхронизацију се можда неће ажурирати ако их не отворите.\n\nУштеда батерије се аутоматски искључује када се уређај пуни." "Да би се смањила потрошња података, Уштеда података спречава неке апликације да шаљу или примају податке у позадини. Апликација коју тренутно користите може да приступа подацима, али ће то чинити ређе. На пример, слике се неће приказивати док их не додирнете." "Укључити Уштеду података?" "Укључи" @@ -1708,7 +1729,7 @@ За %1$d мин (до %2$s) За %1$d мин (до %2$s) - + %1$d сат (до %2$s) %1$d сата (до %2$s) %1$d сати (до %2$s) @@ -1728,7 +1749,7 @@ За %d мин За %d мин - + %d сат %d сата %d сати @@ -1753,14 +1774,14 @@ "Звук је искључио/ла %1$s" "Дошло је до интерног проблема у вези са уређајем и можда ће бити нестабилан док не обавите ресетовање на фабричка подешавања." "Дошло је до интерног проблема у вези са уређајем. Потражите детаље од произвођача." - "USSD захтев је промењен у DIAL захтев." - "USSD захтев је промењен у SS захтев." - "USSD захтев је промењен у нови USSD захтев." - "USSD захтев је промењен у Video DIAL захтев." - "SS захтев је промењен у DIAL захтев." - "SS захтев је промењен у Video DIAL захтев." - "SS захтев је промењен у USSD захтев." - "SS захтев је промењен у нови SS захтев." + "USSD захтев је промењен у обичан позив" + "USSD захтев је промењен у SS захтев" + "Промењено је у нови USSD захтев" + "USSD захтев је промењен у видео позив" + "SS захтев је промењен у обичан позив" + "SS захтев је промењен у видео позив" + "SS захтев је промењен у USSD захтев" + "Промењено је у нови SS захтев" "Профил за Work" "Прошири" "Скупи" @@ -1860,6 +1881,10 @@ "SIM картица није подешена за гласовне услуге" "SIM картица није прилагођена за гласовне услуге" "Телефон није прилагођен за гласовне услуге" + "SIM %d није дозвољен" + "SIM %d није подешен" + "SIM %d није дозвољен" + "SIM %d није дозвољен" "Искачући прозор" "и још %1$d" "Апликација је враћена на старију верзију или није компатибилна са овом пречицом" @@ -1872,7 +1897,14 @@ "Откривена је штетна апликација" "Апликација %1$s жели да приказује исечке из апликације %2$s" "Измени" + "Вибрација за позиве и обавештења је укључена" + "Мелодија звона за позиве и обавештење је искључена" "Системске промене" + "Не узнемиравај" + "Режим Не узнемиравај крије обавештења да би вам помогао да се фокусирате" + "Ово је ново понашање. Додирните да бисте променили." "Режим Не узнемиравај је промењен" - "Додирните да бисте проверили да ли подешавања понашања обухватају прекиде" + "Додирните да бисте проверили шта је блокирано." + "Систем" + "Подешавања" diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index e713c30641afbf721540532f4abb79b1f390aaba..8b9714b797dd2dda9c8c0ac31ba19d9d7a2a931f 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -77,15 +77,17 @@ "Nummerpresentatörens standardinställning är inte blockerad. Nästa samtal: Inte blockerad" "Tjänsten är inte etablerad." "Det går inte att ändra inställningen för nummerpresentatör." - "Datatjänst har blockerats" - "Det går inte att ringa nödsamtal" + "Ingen mobildatatjänst" + "Det går inte att ringa nödsamtal" "Tjänsten för röstsamtal har blockerats" - "Tjänster för röst- och nödsamtal har blockerats" - "Detta erbjuds för tillfället inte på mobilnätverket där du befinner dig" - "Det går inte att nå nätverket" - "Testa om du får bättre mottagning genom att ändra till en annan typ under Inställningar > Nätverk och internet > Mobila nätverk > Önskad nätverkstyp." - "Wi-Fi-samtal är aktiverat" - "Mobilnätverk krävs för att ringa nödsamtal." + "Inga rösttjänster eller nödsamtal" + "Tillfälligt avstängt av operatören" + + + "Det går inte att nå mobilnätverket" + "Testa att byta föredraget nätverk. Tryck om du vill ändra." + "Det går inte att ringa nödsamtal" + "Det går inte att ringa nödsamtal via Wi‑Fi" "Aviseringar" "Vidarekoppla samtal" "Läget Återuppringning vid nödsamtal" @@ -120,12 +122,12 @@ "Roamingbanner på" "Roamingbanner av" "Söker efter tjänst" - "Wi-Fi-samtal" + "Det gick inte att konfigurera Wi-Fi-samtal" "Om du vill ringa samtal och skicka meddelanden via Wi-Fi ber du först operatören att konfigurera tjänsten. Därefter kan du aktivera Wi-Fi-samtal på nytt från Inställningar. (Felkod: %1$s)" - "Registrera dig hos operatören (felkod: %1$s)" + "Följande fel uppstod när Wi-Fi-samtal skulle registreras hos operatören: %1$s" "%s" @@ -160,8 +162,8 @@ "För många begäranden bearbetas. Försök igen senare." "Inloggningsfel för %1$s" "Synkronisera" - "Synkronisera" - "För många %s-borttagningar." + "Synkroniseringen misslyckades" + "För många %s att ta bort." "Pekdatorns lagringsutrymme är fullt. Ta bort några filer för att frigöra utrymme." "Klockans lagringsutrymme är fullt. Ta bort några filer för att frigöra utrymme." "Lagringsutrymmet på TV:n är fullt. Ta bort några filer för att frigöra utrymme." @@ -174,14 +176,13 @@ "Av administratören för jobbprofilen" "Av %s" "Jobbprofilen har raderats" - "Jobbprofilen har raderats eftersom det saknas en administratörsapp" "Administratörsappen för jobbprofilen saknas eller är skadad. Det innebär att jobbprofilen och all relaterad data har raderats. Kontakta administratören om du vill ha hjälp." "Jobbprofilen är inte längre tillgänglig på enheten" "För många försök med lösenord" "Enheten hanteras" "Organisationen hanterar den här enheten och kan övervaka nätverkstrafiken. Tryck om du vill veta mer." "Enheten kommer att rensas" - "Det går inte att använda administratörsappen. Enheten rensas.\n\nKontakta organisationens administratör om du har några frågor." + "Det går inte att använda administratörsappen. Enheten rensas.\n\nKontakta organisationens administratör om du har några frågor." "Utskrift har inaktiverats av %s." "Jag" "Alternativ för surfplattan" @@ -236,6 +237,9 @@ "Flygplansläge" "Flygplansläge är AKTIVERAT" "Flygplansläge är INAKTIVERAT" + "Batterisparläge" + "Batterisparläget har inaktiverats" + "Batterisparläget har aktiverats" "Inställningar" "Hjälp" "Voice Assist" @@ -269,31 +273,31 @@ "Byt till jobbprofilen" "Kontakter" "få tillgång till dina kontakter" - "Ge <b>%1$s</b> åtkomstbehörighet till dina kontakter" + "Vill du ge <b>%1$s</b> åtkomstbehörighet till dina kontakter?" "Plats" "komma åt enhetens platsuppgifter" - "Ge <b>%1$s</b> åtkomstbehörighet till enhetens plats" + "Vill du ge <b>%1$s</b> åtkomstbehörighet till enhetens plats?" "Kalender" "få tillgång till din kalender" - "Ge <b>%1$s</b> åtkomstbehörighet till din kalender" + "Vill du ge <b>%1$s</b> åtkomstbehörighet till din kalender?" "Sms" "skicka och visa sms" - "Ge <b>%1$s</b> behörighet att skicka och visa sms" + "Vill du ge <b>%1$s</b> behörighet att skicka och visa sms?" "Lagring" "få åtkomst till foton, media och filer på din enhet" - "Ge <b>%1$s</b> åtkomstbehörighet till foton, mediafiler och andra filer på enheten" + "Vill du ge <b>%1$s</b> åtkomstbehörighet till foton, mediafiler och andra filer på enheten?" "Mikrofon" "spela in ljud" - "Ge <b>%1$s</b> behörighet att spela in ljud" + "Vill du ge <b>%1$s</b> behörighet att spela in ljud?" "Kamera" "ta bilder och spela in video" - "Ge <b>%1$s</b> behörghet att ta bilder och spela in video" + "Vill du ge <b>%1$s</b> behörighet att ta bilder och spela in video?" "Telefon" "ringa och hantera telefonsamtal" - "Ge <b>%1$s</b> behörighet att ringa och hantera telefonsamtal" + "Vill du ge <b>%1$s</b> behörighet att ringa och hantera telefonsamtal?" "Kroppssensorer" "få åtkomst till sensordata om dina vitalparametrar" - "Ge <b>%1$s</b> åtkomstbehörighet till sensordata om vitalparametrar" + "Vill du ge <b>%1$s</b> åtkomstbehörighet till sensordata om vitalparametrar?" "Hämta fönsterinnehåll" "Granska innehållet i ett fönster som du interagerar med." "Aktivera Explore by touch" @@ -305,7 +309,7 @@ "Göra rörelser" "Kan trycka, svepa, nypa och göra andra rörelser." "Fingeravtrycksrörelser" - "Kan registrera rörelser som utförs med hjälp av enhetens fingeravtryckssensor." + "Kan registrera rörelser som utförs med hjälp av enhetens fingeravtryckssensor." "inaktivera eller ändra statusfält" "Tillåter att appen inaktiverar statusfältet eller lägger till och tar bort systemikoner." "visas i statusfältet" @@ -356,6 +360,8 @@ "Tillåter att delar av appen läggs beständigt i minnet. Detta kan innebära att det tillgängliga minnet för andra appar begränsas, vilket gör surfplattan långsam." "Tillåter att en app gör vissa delar beständiga i minnet. Det kan begränsa mängden minne som är tillgänglig för andra appar och gör TV:n långsammare." "Tillåter att delar av appen läggs beständigt i minnet. Detta kan innebära att det tillgängliga minnet för andra appar begränsas, vilket gör mobilen långsam." + "kör tjänst i förgrunden" + "Tillåter att appen använder tjänster i förgrunden." "mäta appens lagringsplats" "Tillåter att appen hämtar kod, data och cachestorlekar" "ändra systeminställningar" @@ -478,6 +484,8 @@ "Tillåter att appen kommunicerar med etiketter, kort och läsare för närfältskommunikation (NFC)." "inaktivera skärmlåset" "Tillåter att appen inaktiverar tangentlåset och tillhörande lösenordsskydd. Ett exempel kan vara att tangentlåset inaktiveras vid inkommande samtal och aktiveras igen när samtalet är avslutat." + "använd biometrisk maskinvara" + "Tillåter att appen använder biometrisk maskinvara vid autentisering" "hantera maskinvara för fingeravtryck" "Tillåter att appen anropar metoder för att lägga till och radera fingeravtrycksmallar." "använda maskinvara för fingeravtryck" @@ -490,6 +498,8 @@ "Identifierades inte" + + "Det finns ingen maskinvara för fingeravtryck." "Fingeravtrycket kan inte lagras. Ta bort ett befintligt fingeravtryck." "Tidsgränsen för fingeravtrycket har uppnåtts. Försök igen." @@ -802,6 +812,8 @@ "Lås upp med grafiskt lösenord." "Lås upp med Ansiktslås." "Lås upp med PIN-kod." + "Lås upp med SIM-kortets pinkod." + "Lås upp med SIM-kortets PUK-kod." "Lås upp med lösenord." "Fält för grafiskt lösenord." "Fält med dragreglage." @@ -863,6 +875,12 @@ "Text har kopierats till urklipp." "Mer" "Menu+" + "Meta + " + "Ctrl + " + "Alt + " + "Skift + " + "Symbol + " + "Funktion + " "utrymme" "retur" "ta bort" @@ -994,14 +1012,23 @@ "Indatametod" "Textåtgärder" "Skicka e-post" + "Skicka e-post till vald adress" "Ring" + "Ring valt telefonnummer" "Hitta" + "Hitta valda adresser" "Öppna" + "Öppna vald webbadress" "Sms:a" + "Skicka meddelande till valt telefonnummer" "Lägg till" + "Lägg till i Kontakter" "Visa" + "Visa vald tid i kalendern" "Schema" + "Schemalägg händelse på den valda tiden" "Spår" + "Spåra valt flyg" "Lagringsutrymmet börjar ta slut" "Det kan hända att vissa systemfunktioner inte fungerar" "Det finns inte tillräckligt med utrymme för systemet. Kontrollera att du har ett lagringsutrymme på minst 250 MB och starta om." @@ -1074,31 +1101,28 @@ "Sök efter uppdateringar" "Appen %1$s (processen %2$s) har brutit mot sin egen StrictMode-policy." "Processen %1$s har brutit mot sin egen StrictMode-policy." - "Android uppgraderas ..." - "Android startar …" + "Mobilen uppdateras …" + "Surfplattan uppdateras …" + "Enheten uppdateras …" + "Mobilen startar …" + "Surfplattan startar …" + "Enheten startar …" "Lagringsutrymmet optimeras." - "Android-uppdateringen slutförs …" - "En del appar kanske inte fungerar som de ska innan uppgraderingen har slutförts" + "Systemuppdatering avslutas …" "%1$s uppgraderas …" "Optimerar app %1$d av %2$d." "%1$s förbereds." "Appar startas." "Uppgraderingen är klar." "%1$s körs" - - - - - - - - - - - - + "Återgå till spelet genom att trycka här" + "Välj spel" + "Av prestandaskäl kan bara ett av de här spelen vara öppet åt gången." + "Återgå till %1$s" + "Öppna %1$s" + "%1$s stängs utan att spara" "Minnesgränsen har överskridits för %1$s" - "En minnesdump har skapats – tryck här om du vill dela den" + "En minnesdump har skapats. Tryck här om du vill dela den." "Vill du dela minnesdumpen?" "Minnesgränsen på %2$s har överskridits för processen %1$s. En dump av minnesheapen har skapats så att du kan dela den med utvecklaren. Var försiktig: minnesdumpen kan innehålla personliga uppgifter som appen har åtkomst till." "Välj en åtgärd för text" @@ -1133,12 +1157,12 @@ "Anslut till ett öppet Wi-Fi-nätverk" "Anslut till operatörens Wi-Fi-nätverk" - "Ansluter till ett öppet Wi-Fi-nätverk" + "Ansluter till Wi-Fi-nätverk" "Ansluten till Wi-Fi-nätverket" "Det gick inte att ansluta till Wi‑Fi-nätverket" "Tryck för att visa alla nätverk" "Anslut" - "Alla nätverk" + "Alla nätverk" "Wi-Fi aktiveras automatiskt" "När du är i närheten av ett sparat nätverk av hög kvalitet" "Återaktivera inte" @@ -1204,6 +1228,7 @@ "Starta om" "Aktivera mobiltjänst" "Ladda ned operatörens app och aktivera det nya SIM-kortet" + "Ladda ned appen %1$s för att aktivera det nya SIM-kortet" "Ladda ned appen" "Nytt SIM-kort har satts in" "Tryck om du vill konfigurera" @@ -1222,13 +1247,13 @@ "PTP via USB har aktiverats" "Internetdelning via USB har aktiverats" "MIDI via USB har aktiverats" - "Läget för USB-tillbehör har aktiverats" + "USB-tillbehör anslutet" "Tryck för fler alternativ." "Den anslutna enheten laddas. Tryck om du vill ha fler alternativ." "Ett tillbehör med analog ljudutgång hittades" "Den anslutna enheten är inte kompatibel med mobilen. Tryck här om du vill veta mer." "USB-felsökning ansluten" - "Tryck för att inaktivera USB-felsökning." + "Tryck om du vill inaktivera USB-felsökning" "Välj för att inaktivera USB-felsökning." "Felrapporten överförs …" "Vill du dela felrapporten?" @@ -1247,34 +1272,50 @@ "%s visas över andra appar" "%s visas över andra appar" "Om du inte vill att den här funktionen används för %s öppnar du inställningarna genom att trycka. Sedan inaktiverar du funktionen." - "INAKTIVERA" - "Förbereder ditt %s" - "Söker efter fel" - "Nytt %s har hittats" + "Inaktivera" + + + + + + + + "För överföring av foton och media" - "%s har skadats" - "%s har skadats. Åtgärda genom att trycka." - "%s har skadats. Välj för att åtgärda." + + + + "%s stöds inte" "Enheten har inte stöd för %s. Tryck här om du vill konfigurera i ett format som stöds." "Enheten stöder inte detta %s. Välj för att konfigurera i ett format som stöds." "%s togs bort oväntat" - "Avmontera %s före borttagningen för att undvika dataförlust" - "Ditt %s har tagits bort" - "%s togs bort. Mata in ett nytt" - "Ditt %s matas fortfarande ut …" - "Ta inte bort" + + + + + + + + + + "Konfigurera" "Mata ut" "Utforska" "%s saknas" - "Sätt i enheten igen" + + "Flyttar %s" "Flyttar data" - "Flytten är klar" - "Data har flyttats till %s" - "Det gick inte att flytta data" - "Data kvar på ursprunglig plats" + + + + + + + + "Borttaget" "Utmatat" "Kontrollerar …" @@ -1333,14 +1374,14 @@ "Ansluter till Always-on VPN ..." "Ansluten till Always-on VPN" "Frånkopplad från Always-on VPN" - "Fel på Always-on VPN" + "Det gick inte att ansluta till Always-on VPN" "Ändra inställningarna för nätverk eller VPN" "Välj fil" "Ingen fil har valts" "Återställ" "Skicka" - "Billäge aktiverat" - "Tryck om du vill avsluta billäge." + "Bilkörningsappen körs" + "Tryck här om du vill avsluta bilkörningsappen." "Internetdelning eller surfzon aktiverad" "Tryck om du vill konfigurera." "Internetdelning har inaktiverats" @@ -1418,22 +1459,19 @@ "USB-enhet (%s)" "USB-lagring" "Redigera" - "Varning – dataanvändning" - "Visa användning och inställning." - "Datagränsen för 2G-3G har uppnåtts" - "Datagränsen för 4G har uppnåtts" + "Datavarning" + "Du har använt %s data" "Gränsen för mobildata har nåtts" "Datagränsen för Wi-Fi har uppnåtts" - "Data är pausade under resten av cykeln" - "Gränsen för data via 2G-3G har överskridits" - "Gränsen för data via 4G har överskridits" - "Gränsen för mobildata har överskridits" - "Gränsen för data via Wi-Fi har överskridits" - "%s över angiven gräns." + "Data är pausade under resten av cykeln" + "Över gränsen för mobildata" + "Över gränsen för Wi-Fi-data" + "Du överskridit den inställda gränsen med %s" "Bakgrundsdata är begränsade" "Ta bort begränsning." - "Hög dataanvändning" - "Dataanvändningen har varit högre än vanligt under de senaste dagarna. Om du trycker här visas användningen och inställningarna." + "Hög användning av mobildata" + "Dina appar har använt mer data än vanligt" + "%s har använt mer data än vanligt" "Säkerhetscertifikat" "Certifikatet är giltigt." "Utfärdad till:" @@ -1669,7 +1707,7 @@ "Administratören installerade paketet" "Administratören uppdaterade paketet" "Administratören raderade paketet" - "I batterisparläget reduceras enhetens prestanda så att batteriet ska räcka längre. Vibration, platstjänster och den mesta användningen av bakgrundsdata begränsas. Det kan hända att appar för e-post, sms och annat som kräver synkronisering inte uppdateras förrän du öppnar dem.\n\nBatterisparläget inaktiveras automatiskt när enheten laddas." + "I batterisparläget reduceras enhetens prestanda så att batteriet ska räcka längre. Vibration, platstjänster och bakgrundsdata begränsas eller inaktiveras. Det kan hända att appar för e-post, sms och annat som kräver synkronisering inte uppdateras förrän du öppnar dem.\n\nBatterisparläget inaktiveras automatiskt när enheten laddas." "Med databesparing kan du minska dataanvändningen genom att hindra en del appar från att skicka eller ta emot data i bakgrunden. Appar som du använder kan komma åt data, men det sker kanske inte lika ofta. Detta innebär t.ex. att bilder inte visas förrän du trycker på dem." "Aktivera Databesparing?" "Aktivera" @@ -1681,7 +1719,7 @@ I %1$d min (t.o.m. %2$s) I 1 min (t.o.m. %2$s) - + I %1$d timmar (till kl. %2$s) I en timme (till kl. %2$s) @@ -1697,7 +1735,7 @@ I %d min I 1 min - + I %d timmar I en timme @@ -1720,14 +1758,14 @@ "%1$s har stängt av ljudet" "Ett internt problem har uppstått i enheten, och det kan hända att problemet kvarstår tills du återställer standardinställningarna." "Ett internt problem har uppstått i enheten. Kontakta tillverkaren om du vill veta mer." - "USSD-begäran har ändrats till en DIAL-begäran." - "USSD-begäran har ändrats till en SS-begäran." - "USSD-begäran har ändrats till en ny USSD-begäran." - "USSD-begäran har ändrats till en Video DIAL-begäran." - "SS-begäran har ändrats till en DIAL-begäran." - "SS-begäran har ändrats till en Video DIAL-begäran." - "SS-begäran har ändrats till en USSD-begäran." - "SS-begäran har ändrats till en ny SS-begäran." + "USSD-begäran har ändrats till standardsamtal" + "USSD-begäran har ändrats till en SS-begäran" + "Har ändrats till ny USSD-begäran" + "USSD-begäran har ändrats till videosamtal" + "SS-begäran har ändrats till standardsamtal" + "SS-begäran har ändrats till videosamtal" + "SS-begäran har ändrats till en USSD-begäran" + "Har ändrats till ny SS-begäran" "Jobbprofil" "Utöka" "Komprimera" @@ -1825,6 +1863,14 @@ "SIM-kort tillhandahålls inte för röst" "SIM-kort tillåts inte för röst" "Telefon tillåts inte för röst" + + + + + + + + "popup-fönster" "%1$d till" "Versionen av appen är nedgraderad eller så är den inte kompatibel med genvägen" @@ -1837,7 +1883,14 @@ "En skadlig app har upptäckts" "%1$s vill kunna visa bitar av %2$s" "Redigera" + "Vibrerar vid samtal och aviseringar" + "Ljudet stängs av för samtal och aviseringar" "Systemändringar" + "Stör ej" + "I läget Stör ej döljs aviseringar så att du kan fokusera på det viktigaste" + "Detta är en ny inställning. Tryck om du vill ändra." "Stör ej har ändrats" - "Tryck om du vill kontrollera avbrott i inställningarna" + "Tryck om du vill se vad som blockeras." + "System" + "Inställningar" diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 3eeed7f759a616cc17ccbb44fa3d4c61526a1573..3485056e0cbbaa5df3fac37baf0b12aa4f67b496 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -77,15 +77,16 @@ "Chaguo-msingi za ID ya mpigaji simu za kutozuia. Simu ifuatayo: Haijazuiliwa" "Huduma haitathminiwi." "Hauwezi kubadilisha mpangilio wa kitambulisho cha anayepiga." - "Hakuna huduma ya data" - "Huwezi kupiga simu za dharura" + "Hakuna huduma ya data kwa vifaa vya mkononi" + "Huduma ya kupiga simu za dharura haipatikani" "Hakuna huduma za simu za sauti" - "Hakuna huduma ya simu za dharura au za sauti" - "Kwa sasa, huduma hii haipatikani katika mtandao wa simu mahali ulipo" - "Haiwezi kufikia mtandao" - "Ili kupata mtandao thabiti, jaribu kubadilisha aina uliyochagua katika Mipangilio > Mtandao na intaneti > Mtandao wa simu > Aina ya mtandao unaopendelea." - "Umewasha kipengele cha kupiga simu kupitia Wi‑Fi" - "Huduma ya kupiga simu za dharura inahitaji mtandao wa simu." + "Hakuna huduma ya simu za sauti au ya simu za dharura" + "Imezimwa kwa muda na mtoa huduma wako" + "Mtoa huduma wako ameizima kwa muda mfupi katika SIM %d" + "Imeshindwa kufikia mtandao wa simu" + "Jaribu kutumia mtandao unaopendelea. Gusa ili ubadilishe." + "Huduma ya kupiga simu za dharura haipatikani" + "Huwezi kupiga simu ya dharura kupitia Wi‑Fi" "Arifa" "Kupeleka simu kwenye nambari nyingine" "Hali ya kupiga simu za dharura" @@ -120,12 +121,12 @@ "Washa Bango la Uzururaji" "Zima Bango la Uzururaji" "Inatafuta Huduma" - "Upigaji Simu kwa Wi-Fi" + "Imeshindwa kuweka mipangilio ya kupiga simu kupitia Wi‑Fi" "Ili upige simu na kutuma ujumbe kupitia Wi-Fi, mwambie mtoa huduma wako aweke mipangilio ya huduma hii kwanza. Kisha uwashe tena kipengele cha kupiga simu kupitia Wi-Fi kwenye Mipangilio. (Msimbo wa hitilafu: %1$s)" - "Jisajili na mtoa huduma wako (Msimbo wa hitilafu: %1$s)" + "Tatizo limetokea wakati wa kusajili huduma ya kupiga simu kupitia Wi‑Fi ya mtoa huduma wako: %1$s" @@ -158,8 +159,8 @@ "Maombi mengi sana yanashughulikiwa. Jaribu tena baadaye." "Hitilafu ya kuingia ya %1$s" "Sawazisha" - "Sawazisha" - "Ufutaji mwingi sana %s." + "Imeshindwa kusawazisha" + "Umejaribu kufuta %s nyingi mno." "Hifadhi ya kompyuta kibao imejaa. Futa baadhi ya faili ili kupata nafasi." "Hifadhi ya saa imejaa. Futa baadhi ya faili ili uweze kupata nafasi." "Hifadhi ya runinga ni kamili. Futa baadhi ya faili ili upate nafasi." @@ -172,14 +173,13 @@ "Na msimamizi wa wasifu wako wa kazini" "Na %s" "Wasifu wa kazini umefutwa" - "Wasifu wa kazini umefutwa kutokana na kupotea kwa programu ya msimamizi" "Programu ya msimamizi wa wasifu wa kazini imepotea au ina hitilafu. Kwa sababu hiyo, wasifu wako wa kazini na data husika imefutwa. Wasiliana na msimamizi wako kwa usaidizi." "Wasifu wako wa kazini haupatikani tena kwenye kifaa hiki" "Umejaribu kuweka nenosiri mara nyingi mno" "Kifaa kinadhibitiwa" "Shirika lako linadhibiti kifaa hiki na huenda likafuatilia shughuli kwenye mtandao. Gusa ili upate maelezo zaidi." "Data iliyomo kwenye kifaa chako itafutwa" - "Huwezi kutumia programu ya msimamizi. Sasa data iliyo kwenye kifaa chako itafutwa.\n\nIkiwa una maswali yoyote, wasiliana na msimamizi wa shirika lako." + "Huwezi kutumia programu ya msimamizi. Sasa data iliyo kwenye kifaa chako itafutwa.\n\nIkiwa una maswali yoyote, wasiliana na msimamizi wa shirika lako." "Kipengele cha kuchapisha kimezimwa na %s." "Mimi" "Chaguo za kompyuta ndogo" @@ -234,6 +234,9 @@ "Hali ya ndegeni" "Hali ya ndegeni IMEWASHWA" "Hali ya ndegeni IMEZIMWA" + "Kiokoa betri" + "Kiokoa betri KIMEZIMWA" + "Kiokoa betri KIMEWASHWA" "Mipangilio" "Mapendekezo" "Usaidizi wa Sauti" @@ -267,31 +270,31 @@ "Tumia wasifu wa kazini" "Anwani" "ifikie anwani zako" - "Ruhusu <b>%1$s</b> ifikie anwani zako" + "Ungependa kuiruhusu <b>%1$s</b> ifikie anwani zako?" "Mahali" "itambue mahali kifaa hiki kilipo" - "Ruhusu <b>%1$s</b> itambue mahali kifaa kilipo" + "Ungependa kuiruhusu <b>%1$s</b> itambue mahali kifaa kilipo?" "Kalenda" "ifikie kalenda yako" - "Ruhusu <b>%1$s</b> ifikie kalenda yako" + "Ungependa kuiruhusu <b>%1$s</b> ifikie kalenda yako?" "SMS" "itume na iangalie SMS" - "Ruhusu <b>%1$s</b> itume na kuangalia ujumbe wa SMS" + "Ungependa kuiruhusu <b>%1$s</b> itume na ione ujumbe wa SMS?" "Hifadhi" "ifikie picha, maudhui na faili kwenye kifaa chako" - "Ruhusu <b>%1$s</b> ifikie picha, maudhui na faili kwenye kifaa chako" + "Ungependa kuiruhusu <b>%1$s</b> ifikie picha, maudhui na faili kwenye kifaa chako?" "Kipokea sauti" "irekodi sauti" - "Ruhusu <b>%1$s</b> irekodi sauti" + "Ungependa kuiruhusu <b>%1$s</b> irekodi sauti?" "Kamera" "ipige picha na kurekodi video" - "Ruhusu <b>%1$s</b> ipige picha na kurekodi video" + "Ungependa kuiruhusu <b>%1$s</b> ipige picha na kurekodi video?" "Simu" "piga na udhibiti simu" - "Ruhusu <b>%1$s</b> ipige na kudhibiti simu" + "Ungependa kuiruhusu <b>%1$s</b> ipige na kudhibiti simu?" "Vihisi vya Mwili" "fikia data ya kitambuzi kuhusu alama zako muhimu" - "Ruhusu <b>%1$s</b> ifikie data ya vitambuzi kuhusu viashiria muhimu vya mwili wako" + "Ungependa kuiruhusu <b>%1$s</b> ifikie data ya vitambuzi kuhusu viashiria muhimu vya mwili wako?" "Kurejesha maudhui ya dirisha" "Kuchunguza maudhui ya dirisha unalotumia." "Kuwasha \'Chunguza kwa Kugusa\'" @@ -303,7 +306,7 @@ "Tekeleza ishara" "Unaweza kugonga, kutelezesha kidole, kubana na kutekeleza ishara zingine." "Ishara za alama ya kidole" - "Inaweza kurekodi ishara zinazotekelezwa kwenye kitambua alama ya kidole." + "Inaweza kurekodi ishara zinazotekelezwa kwenye kitambua alama ya kidole." "zima au rekebisha mwambaa hali" "Inaruhusu programu kulemaza upau wa hali au kuongeza na kutoa aikoni za mfumo." "kuwa sehemu ya arifa" @@ -354,6 +357,8 @@ "Inaruhusu programu kuendeleza vijisehemu vyake kwenye kumbukumbu. Hii inaweza kupunguza kumbukumbu inayopatikana katika programu nyingine ikipunguza kasi ya kompyuta ndogo." "Huruhusu programu kufanya vijisehemu vyake vidumu kwenye kumbukumbu. Hii inaweza kupunguza kumbukumbu inayopatikana katika programu nyingine ikipunguza kasi ya runinga." "Inaruhusu programu kuendelesha vijisehemu vyake kwenye kumbukumbu. Hii inaweza kupunguza kumbukumbu inayopatikana katika programu nyingine ikipunguza kasi ya simu." + "tumia huduma zinazoonekana kwenye skrini" + "Huruhusu programu kutumia huduma zinazoonekana kwenye skrini." "Pima nafasi ya hifadhi ya programu" "Huruhusu Programu kupata tena msimbo, data na ukubwa wa akiba yake" "rekebisha mipangilio ya mfumo" @@ -476,6 +481,8 @@ "Inaruhusu programu kuwasiliana na lebo, kadi na wasomaji wa Near Field Communication (NFC)." "zima kufuli la skrini yako" "Inaruhusu programu kulemaza ufunguo wa vitufe na usalama mwingine ambata wa nenosiri. Kwa mfano, simu inalemaza ufunguo wa viitufe inapopokea simu inayoingia, kisha inawezesha upya ufunguo wa vitufe wakati simu inapokamilika." + "tumia maunzi ya kibaolojia" + "Huruhusu programu itumie maunzi ya kibaolojia katika uthibitishaji" "dhibiti maunzi ya kitambulisho" "Huruhusu programu kuomba njia za kuongeza na kufuta violezo vya kitambulisho kwa matumizi." "tumia maunzi ya kitambulisho" @@ -488,6 +495,7 @@ "Haitambuliwi" + "Imethibitisha alama ya kidole" "Maunzi ya kitambulisho hayapatikani." "Kitambulisho hakiwezi kuhifadhiwa. Tafadhali ondoa kitambulisho kilichopo." "Muda wa kitambulisho umekwisha. Jaribu tena." @@ -800,6 +808,8 @@ "Kufungua kwa ruwaza." "Kufungua kwa uso." "Kufungua kwa PIN." + "Kufungua Pin ya Sim." + "Kufungua Puk ya Sim." "Kufungua kwa nenosiri." "Eneo la ruwaza." "Eneo la slaidi." @@ -861,6 +871,12 @@ "Maandishi yamenakiliwa kwenye ubao wa kunakili." "Zaidi" "Menyu+" + "Meta+" + "Ctrl+" + "Alt+" + "Shift+" + "Sym+" + "Function+" "mwanya" "ingiza" "futa" @@ -992,14 +1008,23 @@ "Mbinu ya uingizaji" "Vitendo vya maandishi" "Barua pepe" + "Tuma barua pepe kwa anwani uliyochagua" "Simu" + "Piga simu kwa nambari uliyochagua" "Tafuta" + "Fungua ramani za anwani uliyochagua" "Fungua" + "Fungua URL uliyochagua" "Ujumbe" + "Tuma SMS kwa nambari ya simu uliyochagua" "Ongeza" + "Ongeza kwenye anwani" "Angalia" + "Angalia wakati uliyochagua katika kalenda" "Ratiba" + "Ratibu tukio la wakati uliochagua" "Toleo" + "Fuatilia ndege uliyochagua" "Nafasi ya kuhifadhi inakaribia kujaa" "Baadhi ya vipengee vya mfumo huenda visifanye kazi" "Hifadhi haitoshi kwa ajili ya mfumo. Hakikisha una MB 250 za nafasi ya hifadhi isiyotumika na uanzishe upya." @@ -1072,31 +1097,28 @@ "Angalia masasisho" "Programu %1$s (utaratibu %2$s) imeenda kinyume na sera yake ya StrictMode." "Shughuli ya %1$s imeenda kinyume na kulazimisha sera yake ya StrictMode." - "Toleo jipya la Android linawekwa..." - "Inaanzisha Android..." + "Simu inasasishwa…" + "Kompyuta kibao inasasishwa…" + "Kifaa kinasasishwa…" + "Simu inawaka…" + "Kompyuta kibao inawaka…" + "Kifaa kiwaka…" "Inaboresha hifadhi." - "Inakamilisha kusasisha Android..." - "Huenda baadhi ya programu zisifanye kazi vizuri hadi itakapomaliza kusasisha" + "Inakamilisha sasisho la mfumo…" "%1$s inapata toleo jipya…" "Inaboresha programu %1$d kutoka %2$d." "Inaandaa %1$s." "Programu zinaanza" "Inamaliza kuwasha." "%1$s inaendelea" - - - - - - - - - - - - + "Gusa ili urudi kwenye mchezo" + "Chagua mchezo" + "Kwa utendaji bora, unaweza kufungua mojawapo ya michezo hii pekee kwa wakati mmoja." + "Rudi kwenye %1$s" + "Fungua %1$s" + "%1$s itajifunga bila kuhifadhi mabadiliko" "%1$s imezidi kiwango cha hifadhi kinachotakikana" - "Imezidi kikomo cha hifadhi; gusa ili uishiriki" + "Imezidi kikomo cha hifadhi. Gusa ili ushiriki." "Ungependa kushiriki picha ya binafsi?" "Mchakato wa %1$s umezidi kiwango kinachotakikana cha hifadhi cha %2$s. Unaweza kupata picha ya hifadhi ili uishiriki na msadini programu wa picha. Tahadhari: picha hii ya hifadhi inaweza kuwa na maelezo yako ya binafsi ambayo yanaweza kufikiwa na programu." "Chagua kitendo kwa ajili ya maandishi" @@ -1131,12 +1153,12 @@ "Unganisha kwenye mtandao wa Wi‑Fi unaotumiwa na mtu yeyote" "Unganisha kwenye mtandao wa mtoa huduma ya Wi‑Fi" - "Inaunganisha kwenye mtandao wa Wi‑Fi unaotumiwa na mtu yeyote" + "Inaunganisha kwenye mtandao wa Wi‑Fi" "Imeunganisha kwenye mtandao wa Wi-Fi" "Imeshindwa kuunganisha kwenye mtandao wa Wi‑Fi" "Gusa ili uone mitandao yote" "Unganisha" - "Mitandao Yote" + "Mitandao yote" "Wi‑Fi itawashwa kiotomatiki" "Unapokuwa karibu na mtandao uliohifadhiwa wenye ubora wa juu" "Usiwashe tena" @@ -1202,6 +1224,7 @@ "Anza upya" "Washa huduma ya simu za mkononi" "Pakua programu ya mtoa huduma ili uwashe SIM yako mpya" + "Pakua programu ya %1$s ili utumie SIM yako mpya" "Pakua programu" "SIM mpya imewekwa" "Gusa ili uiweke" @@ -1220,13 +1243,13 @@ "Umewasha hali ya PTP kupitia USB" "Umewasha hali ya kusambaza mtandao ukitumia USB" "Umewasha hali ya MIDI kupitia USB" - "Umewasha hali ya vifaa vya USB" + "Imeunganisha kifuasi cha USB" "Gusa ili upate chaguo zaidi." "Inachaji kifaa kilichounganishwa. Gusa ili upate chaguo zaidi." "Imetambua kifaa cha sauti ya analogi" "Kifaa ulichoambatisha hakitumiki kwenye simu hii. Gusa ili upate maelezo zaidi." "Utatuaji wa USB umeunganishwa" - "Gusa ili uzime utatuaji wa USB." + "Gusa ili uzime utatuzi wa USB" "Chagua ili kulemaza utatuaji USB." "Inatayarisha ripoti ya hitilafu…" "Ungependa kushiriki ripoti ya hitilafu?" @@ -1245,34 +1268,35 @@ "%s inachomoza juu ya programu zingine" "%s inachomoza juu ya programu zingine." "Ikiwa hutaki %s kutumia kipengele hiki, gusa ili ufungue mipangilio na ukizime." - "ZIMA" - "Inaandaa %s" - "Inakagua hitilafu" - "%s mpya imegunduliwa" + "Zima" + "Inakagua %s…" + "Inakagua maudhui ya sasa" + "%s mpya" + "Gusa ili uweke mipangilio" "Kwa ajili ya kuhamisha picha na maudhui" - "%s iliyoharibika" - "%s ina hitilafu. Gusa ili uirekebishe." + "Tatizo limetokea kwenye %s" + "Gusa ili urekebishe" "%s imeharibika. Ichague ili uirekebishe." "%s isiyotumika" "Kifaa hiki hakitumii %s. Gusa ili uweke mipangilio ya muundo unaoweza kutumika." "Kifaa hiki hakitumii %s hii. Ichague ili uweke muundo unaotumika." "%s imeondolewa bila kutarajiwa" - "Ondoa %s kabla ya kuchomoa ili kuepuka kupoteza data" - "%s imeondolewa" - "%s imeondolewa, weka nyingine mpya" - "Bado inaondoa %s..." - "Usiondoe" + "Ondoa kifaa cha maudhui kabla ya kukichomoa ili usipoteze maudhui" + "Imeondoa %s" + "Huenda baadhi ya vipengele visifanye kazi vizuri. Weka hifadhi mpya." + "Inaondoa %s" + "Usichomoe" "Weka mipangilio" "Ondoa" "Chunguza" "%s haipo" - "Weka kifaa hiki tena" + "Weka kifaa tena" "Inahamisha %s" "Inahamisha data" - "Imekamilisha kuhamisha" - "Data ilihamishiwa kwenye %s" - "Haikuweza kuhamisha data" - "Data iliachwa katika eneo la awali" + "Imemaliza kuhamisha maudhui" + "Imehamishia maudhui kwenye %s" + "Imeshindwa kuhamisha maudhui" + "Jaribu kuhamisha maudhui tena" "Imeondolewa" "Imeondolewa" "Inakagua..." @@ -1331,14 +1355,14 @@ "Kila mara VPN iliyowashwa inaunganishwa…" "Kila mara VPN iliyowashwa imeunganishwa" "Imeondolewa kwenye VPN iliyowashwa kila wakati" - "Kila mara kuna hitilafu ya VPN iliyowashwa" + "Imeshindwa kuunganisha kwenye VPN iliyowashwa kila wakati" "Badilisha mipangilio ya VPN au mtandao" "Chagua faili" "Hakuna faili iliyochaguliwa" "Weka upya" "Wasilisha" - "Mtindo wa gari umewezeshwa" - "Gusa ili ufunge hali ya garini." + "Umewasha programu ya kuendesha gari" + "Gusa ili ufunge programu ya kuendesha gari." "Kushiriki au kusambaza intaneti kumewashwa" "Gusa ili uweke mipangilio." "Umezima kipengele cha kusambaza mtandao" @@ -1416,22 +1440,19 @@ "Hifadhi ya USB iliyotengenezwa na %s" "Hifadhi ya USB" "Badilisha" - "Tahadhari ya matumizi ya data" - "Gusa ili uangalie matumizi na mipangilio." - "Kikomo data ya 2G-3G kimefikiwa" - "Kikomo cha data ya 4G kimefikiwa" + "Onyo kuhusu data" + "Umetumia %s ya data" "Umefikisha kipimo cha juu cha data" "Kikomo data ya Wi-Fi kimefikiwa" - "Matumizi ya data yamesitishwa kwa kipindi kilichosalia" - "Kikomo cha data ya 2G-3G kimezidishwa" - "Kikomo cha data cha 4G kimezidishwa" - "Umepitisha kiwango cha data ulichoweka" - "Taarifa za Wi-fi zimevuka kiwanga" - "%s juu ya kikomo kilichobainishwa." + "Imesitisha data kwa kipindi kilichosalia" + "Umepitisha upeo wa data ya mtandao wa simu" + "Umepitisha upeo wa data ya Wi-Fi" + "Umepitisha kikomo chako kwa %s" "Data ya mandhari nyuma imezuiwa" "Gusa ili uondoe kizuizi." - "Matumizi ya data nyingi" - "Umetumia data nyingi mno katika siku chache zilizopita. Gusa ili uangalie matumizi na mipangilio." + "Matumizi ya juu ya data ya simu" + "Programu zako zimetumia data nyingi zaidi ya kawaida" + "%s imetumia data nyingi zaidi ya kawaida" "Cheti cha usalama" "Cheti hiki ni halali." "Kimetolewa kwa:" @@ -1667,7 +1688,7 @@ "Imesakinishwa na msimamizi wako" "Imesasishwa na msimamizi wako" "Imefutwa na msimamizi wako" - "Ili kuboresha muda wa matumizi ya betri, Kiokoa Betri hupunguza utendaji wa kifaa chako na kupunguza mtetemo, huduma za utambuzi wa mahali na data nyingi ya chini chini. Huenda haitasasisha programu za barua pepe, ujumbe na programu zinginezo zinazotegemea usawazishaji, usipozifungua.\n\nKiokoa Betri hujizima kiotomatiki wakati kifaa chako kinachaji." + "Ili kuboresha muda wa matumizi ya betri, Kiokoa Betri hupunguza utendaji wa kifaa chako na kupunguza au kuzima mitetemo, huduma za utambuzi wa mahali na data inayotumika chinichini. Huenda haitasasisha programu za barua pepe, ujumbe na programu zinginezo zinazotegemea usawazishaji, usipozifungua.\n\nKiokoa Betri hujizima kiotomatiki wakati kifaa chako kinachaji." "Ili kusaidia kupunguza matumizi ya data, Kiokoa Data huzuia baadhi ya programu kupokea na kutuma data chini chini. Programu ambayo unatumia sasa inaweza kufikia data, lakini si kila wakati. Kwa mfano, haitaonyesha picha hadi utakapozifungua." "Ungependa Kuwasha Kiokoa Data?" "Washa" @@ -1679,9 +1700,9 @@ Kwa dakika %1$d (mpaka %2$s) Kwa dakika 1 (mpaka %2$s) - + Kwa saa %1$d (hadi %2$s) - Kwa saa moja (hadi %2$s) + Kwa saa 1 (hadi %2$s) Kwa saa %1$d (mpaka %2$s) @@ -1695,9 +1716,9 @@ Kwa dakika %d Kwa dakika 1 - + Kwa saa %d - Kwa saa moja + Kwa saa 1 Kwa saa %d @@ -1718,14 +1739,14 @@ "Sauti imezimwa na %1$s" "Kuna hitilafu ya ndani ya kifaa chako, na huenda kisiwe thabiti mpaka urejeshe mipangilio ya kiwandani." "Kuna hitilafu ya ndani ya kifaa chako. Wasiliana na mtengenezaji wa kifaa chako kwa maelezo." - "Ombi la USSD limerekebishwa na kuwa ombi la DIAL." - "Ombi la USSD limerekebishwa na kuwa ombi la SS." - "Ombi la USSD limerekebishwa na kuwa ombi jipya la USSD." - "Ombi la USSD limebadilishwa kuwa ombi la DIAL la Video." - "Ombi la SS limerekebishwa na kuwa ombi la DIAL." - "Ombi la SS limebadilishwa kuwa ombi la DIAL la Video." - "Ombi la SS limerekebishwa na kuwa ombi la USSD." - "Ombi la SS limerekebishwa na kuwa ombi jipya la SS." + "Imebadilisha ombi la USSD kuwa simu ya kawaida" + "Imebadilisha ombi la USSD kuwa ombi la SS" + "Imebadilisha kuwa ombi jipya la USSD" + "Imebadilisha ombi la USSD kuwa simu ya video" + "Imebadilisha ombi la SS kuwa simu ya kawaida" + "Imebadilisha ombi la SS kuwa simu ya video" + "Imebadilisha ombi la SS kuwa ombi la USSD" + "Imebadilisha kuwa ombi jipya la SS" "Wasifu wa kazini" "Panua" "Kunja" @@ -1823,6 +1844,10 @@ "SIM haina mipangilio ya huduma ya sauti" "SIM hairuhusiwi katika huduma ya sauti" "Simu hairuhusiwi katika huduma ya sauti" + "Haikubali SIM %d" + "Haijaweka mipangilio ya SIM %d" + "Haikubali SIM %d" + "Haikubali SIM %d" "Dirisha Ibukizi" "+ %1$d" "Toleo la programu limeshushwa kiwango au halioani na njia hii ya mkato" @@ -1835,7 +1860,14 @@ "Imetambua programu hatari" "%1$s inataka kuonyesha vipengee %2$s" "Badilisha" + "Itatetema arifa ikitumwa au simu ikipigwa" + "Haitatoa mlio arifa ikitumwa au simu ikipigwa" "Mabadiliko kwenye mfumo" + "Usisumbue" + "Kipengele cha Usinisumbue kinaficha arifa ili kukusaidia kuwa makini zaidi" + "Hii ni mipangilio mipya. Gusa ili uibadilishe." "Kipengele cha Usinisumbue kimebadilishwa" - "Gusa ili uangilie mipangilio ya hali ya ukatizaji" + "Gusa ili uangalie kipengee ambacho kimezuiwa." + "Mfumo" + "Mipangilio" diff --git a/core/res/res/values-ta/strings.xml b/core/res/res/values-ta/strings.xml index d8d474d12200b2227601eb4aaca18f24e2331289..d1bcc94fd59399e6fa032e724a9c0bf889b87d00 100644 --- a/core/res/res/values-ta/strings.xml +++ b/core/res/res/values-ta/strings.xml @@ -82,6 +82,8 @@ "குரல் சேவை இல்லை" "குரல் சேவையைப் பயன்படுத்த முடியாது அல்லது அவசர அழைப்பைச் செய்ய முடியாது" "உங்கள் மொபைல் நிறுவனம் தற்காலிகமாக ஆஃப் செய்துள்ளது" + + "மொபைல் நெட்வொர்க் கிடைக்கவில்லை" "விருப்ப நெட்வொர்க்கை மாற்றவும். மாற்ற, தட்டவும்." "அவசர அழைப்பைச் செய்ய முடியாது" @@ -159,10 +161,8 @@ "மிக அதிகமான கோரிக்கைகள் செயல்படுத்தப்படுகின்றன. பிறகு முயற்சிக்கவும்." "%1$s க்கான உள்நுழைவு பிழை" "ஒத்திசை" - - - - + "ஒத்திசைக்க முடியவில்லை" + "அதிகளவிலான %s உள்ளடக்க வகைகளை நீக்க முயன்றுள்ளீர்கள்." "டேப்லெட் சேமிப்பிடம் நிரம்பியது. இடத்தைக் காலியாக்க சில கோப்புகளை அழிக்கவும்." "வாட்ச் சேமிப்பிடம் நிரம்பியது. இடத்தைக் காலியாக்க சில கோப்புகளை நீக்கவும்." "டிவி சேமிப்பகம் நிரம்பியது. இடத்தை உருவாக்க, சில கோப்புகளை நீக்கவும்." @@ -272,40 +272,31 @@ "பணிச் சுயவிவரத்திற்கு மாற்றவும்" "தொடர்புகள்" "தொடர்புகளை அணுக வேண்டும்" - - + "தொடர்புகளை அணுகுவதற்கு <b>%1$s</b> பயன்பாட்டை அனுமதிக்கவா?" "இருப்பிடம்" "இந்தச் சாதனத்தின் இருப்பிடத்தை அறிந்து கொள்ளலாம்" - - + "இந்தச் சாதனத்தின் இருப்பிடத்தை அணுகுவதற்கு <b>%1$s</b> பயன்பாட்டை அனுமதிக்கவா?" "கேலெண்டர்" "கேலெண்டரை அணுகலாம்" - - + "கேலெண்டரை அணுகுவதற்கு <b>%1$s</b> பயன்பாட்டை அனுமதிக்கவா?" "SMS" "SMS அனுப்பலாம், வந்த SMSகளைப் பார்க்கலாம்" - - + "மெசேஜ்களை அனுப்பவும், அவற்றைப் பார்க்கவும் <b>%1$s</b> பயன்பாட்டை அனுமதிக்கவா?" "சேமிப்பிடம்" "உங்கள் சாதனத்தில் உள்ள படங்கள், மீடியா மற்றும் கோப்புகளை அணுக வேண்டும்" - - + "உங்கள் சாதனத்திலுள்ள படங்கள், மீடியா, ஃபைல்கள் ஆகியவற்றை அணுகுவதற்கு <b>%1$s</b> பயன்பாட்டை அனுமதிக்கவா?" "மைக்ரோஃபோன்" "ஒலிப் பதிவு செய்யலாம்" - - + "ஆடியோவைப் பதிவு செய்ய <b>%1$s</b> பயன்பாட்டை அனுமதிக்கவா?" "கேமரா" "படங்கள் மற்றும் வீடியோக்கள் எடுக்கலாம்" - - + "படங்கள் எடுக்கவும், வீடியோ பதிவு செய்யவும் <b>%1$s</b> பயன்பாட்டை அனுமதிக்கவா?" "ஃபோன்" "யாரையும் தொலைபேசியில் அழைக்கலாம்" - - + "மொபைல் அழைப்புகள் செய்யவும், அவற்றை நிர்வகிக்கவும், <b>%1$s</b> பயன்பாட்டை அனுமதிக்கவா?" "உடல் சென்சார்கள்" "உங்கள் உடல் இயக்கம் பற்றி உணர்விகள் கூறும் தகவலைப் பார்க்கலாம்" - - + "உங்கள் உடலியக்கக் குறிகள் பற்றிய சென்சார் தரவை அணுகுவதற்கு <b>%1$s</b> பயன்பாட்டை அனுமதிக்கவா?" "சாளர உள்ளடக்கத்தைப் பெறும்" "நீங்கள் பணியாற்றி கொண்டிருக்கும் சாளரத்தின் உள்ளடக்கத்தைப் பார்க்கலாம்." "தொடுவதன் மூலம் அறிவதை இயக்கும்" @@ -492,6 +483,10 @@ "குறுகிய இடைவெளி தகவல்பரிமாற்றம் (NFC), குறிகள், கார்டுகள் மற்றும் ரீடர்கள் ஆகியவற்றுடன் தொடர்புகொள்ள, பயன்பாட்டை அனுமதிக்கிறது." "உங்கள் திரைப் பூட்டை முடக்குதல்" "விசைப்பூட்டையும், தொடர்புடைய கடவுச்சொல் பாதுகாப்பையும் முடக்கப் பயன்பாட்டை அனுமதிக்கிறது. எடுத்துக்காட்டாக, உள்வரும் மொபைல் அழைப்பைப் பெறும்போது மொபைல் விசைப்பூட்டை முடக்குகிறது, பிறகு அழைப்பு முடிந்தவுடன் விசைப்பூட்டை மீண்டும் இயக்குகிறது." + + + + "கைரேகை வன்பொருளை நிர்வகி" "பயன்படுத்துவதற்காக, கைரேகை டெம்ப்ளேட்களைச் சேர்க்க மற்றும் நீக்குவதற்கான செயல்முறைகளை இயக்குவதற்குப் பயன்பாட்டை அனுமதிக்கும்." "கைரேகை வன்பொருளைப் பயன்படுத்து" @@ -504,6 +499,8 @@ "அறியப்படவில்லை" + + "கைரேகை வன்பொருள் இல்லை." "கைரேகையைச் சேமிக்க முடியவில்லை. ஏற்கனவே உள்ள கைரேகையை அகற்றவும்." "கைரேகைக்கான நேரம் முடிந்தது. மீண்டும் முயலவும்." @@ -1016,14 +1013,32 @@ "உள்ளீட்டு முறை" "உரை நடவடிக்கைகள்" "மின்னஞ்சல்" + + "அழை" + + "கண்டுபிடி" + + "திற" + + "செய்தி" + + "சேர்" + + "காண்பி" + + "திட்டமிடுதல்" + + "கண்கானி" + + "சேமிப்பிடம் குறைகிறது" "சில அமைப்பு செயல்பாடுகள் வேலை செய்யாமல் போகலாம்" "முறைமையில் போதுமான சேமிப்பகம் இல்லை. 250மெ.பை. அளவு காலி இடவசதி இருப்பதை உறுதிசெய்து மீண்டும் தொடங்கவும்." @@ -1117,8 +1132,7 @@ "%1$s பயன்பாட்டைத் திற" "சேமிக்கப்படாமலேயே %1$s மூடப்படும்" "நினைவக வரம்பை %1$s மீறியது" - - + "ஹீப் டம்ப் சேகரிக்கப்பட்டது. பகிர, தட்டவும்." "ஹீப் டம்பைப் பகிரவா?" "%2$s அளவான தனது செயலாக்க நினைவக வரம்பை %1$s செயலாக்கம் மீறியது. உங்களுக்கான ஹீப் டம்பினை அதன் டெவெலப்பருடன் பகிரலாம். கவனம்: பயன்பாடு அணுகும் விதத்தில், உங்களைப் பற்றிய எந்தத் தனிப்பட்ட தகவலும் இந்த ஹீப் டம்பில் இருக்கலாம் என்பதை நினைவில்கொள்ளவும்." "உரைக்கான செயலைத் தேர்வுசெய்யவும்" @@ -1271,33 +1285,49 @@ "%s பிற ஆப்ஸின் மீது தோன்றுகிறது" "%s இந்த அம்சத்தைப் பயன்படுத்த வேண்டாம் என நினைத்தால், அமைப்புகளைத் திறந்து அதை முடக்க, தட்டவும்." "ஆஃப் செய்" - "%s தயாராகிறது" - "பிழைகள் உள்ளதா எனப் பார்க்கிறது" - "புதிய %s கண்டறியப்பட்டது" + + + + + + + + "படங்களையும் மீடியாவையும் மாற்றலாம்" - "%s சிதைந்துள்ளது" - "%s சிதைந்துள்ளது. சரிசெய்ய, தட்டவும்." - "%s சிதைந்துள்ளது. சரிசெய்ய, தேர்ந்தெடுக்கவும்." + + + + "ஆதரிக்கப்படாத %s" "சாதனம் இந்த %sஐ ஆதரிக்கவில்லை. ஆதரிக்கப்படும் வடிவமைப்பில் அமைக்க, தட்டவும்." "சாதனம் இந்த %sஐ ஆதரிக்கவில்லை. ஆதரிக்கப்படும் வடிவமைப்பில் அமைக்க, தேர்ந்தெடுக்கவும்." "%s அகற்றப்பட்டது" - "தரவு இழப்பைத் தவிர்க்க, %sஐ அகற்றுவதற்கு முன் இணைப்பு நீக்கவும்" - "%s அகற்றப்பட்டது" - "%s அகற்றப்பட்டது. புதியதைச் செருகவும்" - "இன்னும் %sஐ வெளியேற்றுகிறது…" - "அகற்ற வேண்டாம்" + + + + + + + + + + "அமை" "வெளியேற்று" "உலாவுக" "%s இல்லை" - "சாதனத்தை மீண்டும் செருகவும்" + + "%sஐ நகர்த்துகிறது" "தரவு நகர்த்தப்படுகிறது" - "நகர்த்தப்பட்டது" - "%sக்குத் தரவு நகர்த்தப்பட்டது" - "தரவை நகர்த்த முடியவில்லை" - "அசல் இடத்திலிருந்து தரவு நகர்த்தப்படவில்லை" + + + + + + + + "அகற்றப்பட்டது" "வெளியேற்றப்பட்டது" "சரிபார்க்கிறது..." @@ -1356,17 +1386,14 @@ "எப்போதும் இயங்கும் VPN உடன் இணைக்கிறது…" "எப்போதும் இயங்கும் VPN இணைக்கப்பட்டது" "எப்போதும் இயக்கத்தில் இருக்கும்படி அமைத்த VPN இலிருந்து துண்டிக்கப்பட்டது" - - + "எப்போதும் ஆனில் இருக்கும்படி அமைத்த VPN உடன் இணைக்க முடியவில்லை" "நெட்வொர்க் அல்லது VPN அமைப்புகளை மாற்றவும்" "கோப்பைத் தேர்வுசெய்" "எந்தக் கோப்பும் தேர்வுசெய்யப்படவில்லை" "மீட்டமை" "சமர்ப்பி" - - - - + "\'வாகனம் ஓட்டும் பயன்முறை’ ஆனில் உள்ளது" + "வாகனம் ஓட்டும் பயன்முறையிலிருந்து வெளியேற, தட்டவும்." "டெதெரிங்/ஹாட்ஸ்பாட் இயங்குகிறது" "அமைக்க, தட்டவும்." "இணைப்பு முறை முடக்கப்பட்டுள்ளது" @@ -1692,8 +1719,7 @@ "உங்கள் நிர்வாகி நிறுவியுள்ளார்" "உங்கள் நிர்வாகி புதுப்பித்துள்ளார்" "உங்கள் நிர்வாகி நீக்கியுள்ளார்" - - + "சாதனத்தின் பேட்டரி ஆயுளை அதிகரிப்பதற்காக, பேட்டரி சேமிப்பான் உங்கள் சாதனத்தின் செயல்திறனைக் குறைத்து, அதிர்வு, இருப்பிடச் சேவைகள் மற்றும் பின்புலத் தரவு போன்றவற்றைக் கட்டுப்படுத்துகிறது அல்லது ஆஃப் செய்கிறது. ஒத்திசைவைச் சார்ந்திருக்கும் மின்னஞ்சல், செய்தியிடல் மற்றும் பிற ஆப்ஸைத் திறக்காதவரை, அவை ஒத்திசைக்கப்படாமல் இருக்கும்.\n\nசாதனம் சார்ஜ் ஆகும் போது பேட்டரி சேமிப்பான் தானாகவே ஆஃப் ஆகிவிடும்." "டேட்டா பயன்பாட்டைக் குறைப்பதற்கு உதவ, பின்புலத்தில் டேட்டாவை அனுப்புவது அல்லது பெறுவதிலிருந்து சில பயன்பாடுகளை டேட்டா சேமிப்பான் தடுக்கும். தற்போது பயன்படுத்தும் பயன்பாடானது எப்போதாவது டேட்டாவை அணுகலாம். எடுத்துக்காட்டாக, படங்களை நீங்கள் தட்டும் வரை அவை காட்டப்படாது." "டேட்டா சேமிப்பானை இயக்கவா?" "இயக்கு" @@ -1744,22 +1770,14 @@ "%1$s ஒலியடக்கினார்" "சாதனத்தில் அகச் சிக்கல் இருக்கிறது, அதனை ஆரம்பநிலைக்கு மீட்டமைக்கும் வரை நிலையற்று இயங்கலாம்." "சாதனத்தில் அகச் சிக்கல் இருக்கிறது. விவரங்களுக்கு சாதன தயாரிப்பாளரைத் தொடர்புகொள்ளவும்." - - - - - - - - - - - - - - - - + "USSD கோரிக்கை, வழக்கமான அழைப்பிற்கு மாற்றப்பட்டது" + "USSD கோரிக்கை, SS கோரிக்கைக்கு மாற்றப்பட்டது" + "புதிய USSD கோரிக்கைக்கு மாற்றப்பட்டது" + "USSD கோரிக்கை, வீடியோ அழைப்பிற்கு மாற்றப்பட்டது" + "SS கோரிக்கை, வழக்கமான அழைப்பிற்கு மாற்றப்பட்டது" + "SS கோரிக்கை, வீடியோ அழைப்பிற்கு மாற்றப்பட்டது" + "SS கோரிக்கை, USSD கோரிக்கைக்கு மாற்றப்பட்டது" + "புதிய SS கோரிக்கைக்கு மாற்றப்பட்டது" "பணி சுயவிவரம்" "விரிவாக்கும்" "சுருக்கும்" @@ -1857,6 +1875,14 @@ "குரல் அழைப்பை மேற்கொள்ளும் வசதி இந்த சிம்மிற்கு இல்லை" "குரல் அழைப்பை மேற்கொள்ள இந்த சிம்மிற்கு அனுமதி இல்லை" "குரல் அழைப்பை மேற்கொள்ள இந்த ஃபோனுக்கு அனுமதி இல்லை" + + + + + + + + "பாப்அப் சாளரம்" "+ %1$d" "பயன்பாடு முந்தையப் பதிப்பிற்கு மாற்றப்பட்டது, அல்லது இந்தக் குறுக்குவழி வேலை செய்யவில்லை" @@ -1877,8 +1903,6 @@ "இது புதிய செயல்பாடாகும். மாற்ற, தட்டவும்." "தொந்தரவு செய்ய வேண்டாம் அமைப்புகள் மாற்றப்பட்டன" "எவற்றையெல்லாம் தடுக்கிறது என்பதைப் பார்க்க, தட்டவும்." - - - - + "சிஸ்டம்" + "அமைப்புகள்" diff --git a/core/res/res/values-te/strings.xml b/core/res/res/values-te/strings.xml index 720f096714d1a5cc04b2708d6ecf0fa56d71fe3c..5d23333bb3c5ab8034bbede8894361408061468a 100644 --- a/core/res/res/values-te/strings.xml +++ b/core/res/res/values-te/strings.xml @@ -82,6 +82,7 @@ "వాయిస్ సేవ లేదు" "వాయిస్ సేవ లేదా అత్యవసర కాలింగ్ లేదు" "మీ క్యారియర్ తాత్కాలికంగా ఆఫ్ చేయబడింది" + "SIM %d కోసం మీ క్యారియర్ తాత్కాలికంగా ఆఫ్ చేసారు" "మొబైల్ నెట్‌వర్క్ అందుబాటులో లేదు" "ప్రాధాన్య నెట్‌వర్క్‌ను మార్చుకోవడానికి ప్రయత్నించండి. మార్చడానికి నొక్కండి." "అత్యవసర కాలింగ్ అందుబాటులో లేదు" @@ -120,12 +121,13 @@ "రోమింగ్ బ్యానర్ ఆన్‌లో ఉంది" "రోమింగ్ బ్యానర్ ఆఫ్‌లో ఉంది" "సేవ కోసం శోధిస్తోంది" - - + "Wi‑Fi కాలింగ్‌ని సెటప్ చేయడం సాధ్యపడలేదు" "Wi-Fiతో కాల్‌లను చేయడానికి మరియు సందేశాలను పంపించడానికి, మొదట ఈ సేవను సెటప్ చేయాల్సిందిగా మీ క్యారియర్‌‌కి చెప్పండి. ఆ తర్వాత సెట్టింగ్‌ల నుండి Wi-Fi కాలింగ్‌ని మళ్లీ ఆన్ చేయండి. (లోపం కోడ్: %1$s)" - + + "మీ క్యారియర్‌తో Wi‑Fi కాలింగ్‌ని నమోదు చేయడంలో సమస్య: %1$s" + "%s" "%s Wi-Fi కాలింగ్" @@ -159,10 +161,8 @@ "చాలా ఎక్కువ అభ్యర్థనలు ప్రాసెస్ చేయబడుతున్నాయి. తర్వాత మళ్లీ ప్రయత్నించండి." "%1$sకు సైన్‌ఇన్ ఎర్రర్" "సమకాలీకరణ" - - - - + "సమకాలీకరించడం సాధ్యపడదు" + "చాలా ఎక్కువ %s తొలగించడానికి ప్రయత్నించారు." "టాబ్లెట్ నిల్వ నిండింది. స్థలాన్ని ఖాళీ చేయడానికి కొన్ని ఫైల్‌లను తొలగించండి." "వాచ్ నిల్వ నిండింది. స్థలాన్ని ఖాళీ చేయడానికి కొన్ని ఫైల్‌లను తొలగించండి." "టీవీ నిల్వ నిండింది. ఖాళీ స్థలం కోసం కొన్ని ఫైల్‌లను తొలగించండి." @@ -272,40 +272,31 @@ "కార్యాలయ ప్రొఫైల్‌కి మార్చు" "పరిచయాలు" "మీ పరిచయాలను యాక్సెస్ చేయడానికి" - - + "మీ పరిచయాలను యాక్సెస్ చేయడానికి <b>%1$s</b>ని అనుమతించాలా?" "స్థానం" "ఈ పరికర స్థానాన్ని యాక్సెస్ చేయడానికి" - - + "ఈ పరికర స్థానాన్ని యాక్సెస్ చేయడానికి <b>%1$s</b>ని అనుమతించాలా?" "క్యాలెండర్" "మీ క్యాలెండర్‌ను యాక్సెస్ చేయడానికి" - - + "మీ క్యాలెండర్‌ని యాక్సెస్ చేయడానికి <b>%1$s</b>ని అనుమతించాలా?" "SMS" "SMS సందేశాలను పంపడం మరియు వీక్షించడం" - - + "SMS సందేశాలు పంపడానికి మరియు వీక్షించడానికి <b>%1$s</b>ని అనుమతించాలా?" "నిల్వ" "మీ పరికరంలోని ఫోటోలు, మీడియా మరియు ఫైల్‌లను యాక్సెస్ చేయడానికి" - - + "మీ పరికరంలోని ఫోటోలు, మీడియా మరియు ఫైల్‌లను యాక్సెస్ చేయడానికి <b>%1$s</b>ని అనుమతించాలా?" "మైక్రోఫోన్" "ఆడియోను రికార్డ్ చేయడానికి" - - + "ఆడియోని రికార్డ్ చేయడానికి <b>%1$s</b>ని అనుమతించాలా?" "కెమెరా" "చిత్రాలను తీయడానికి మరియు వీడియోను రికార్డ్ చేయడానికి" - - + "చిత్రాలు తీయడానికి మరియు వీడియో రికార్డ్ చేయడానికి <b>%1$s</b>ని అనుమతించాలా?" "ఫోన్" "ఫోన్ కాల్‌లు చేయడం మరియు నిర్వహించడం" - - + "ఫోన్ కాల్‌లు చేయడానికి మరియు నిర్వహించడానికి <b>%1$s</b>ని అనుమతించాలా?" "శరీర సెన్సార్‌లు" "మీ అత్యంత కీలకమైన గుర్తుల గురించి సెన్సార్ డేటాని యాక్సెస్ చేస్తుంది" - - + "మీ అత్యంత కీలకమైన గుర్తుల గురించి సెన్సార్ డేటాని యాక్సెస్ చేయడానికి <b>%1$s</b>ని అనుమతించాలా?" "విండో కంటెంట్‍ను తిరిగి పొందుతుంది" "మీరు పరస్పర చర్య చేస్తున్న విండో కంటెంట్‌‍ను పరిశీలిస్తుంది." "తాకడం ద్వారా విశ్లేషణను ప్రారంభిస్తుంది" @@ -492,6 +483,10 @@ "సమీప ఫీల్డ్ కమ్యూనికేషన్ (NFC) ట్యాగ్‌లు, కార్డులు మరియు రీడర్‌లతో కమ్యూనికేట్ చేయడానికి యాప్‌ను అనుమతిస్తుంది." "మీ స్క్రీన్ లాక్‌ను నిలిపివేయడం" "కీలాక్ మరియు ఏదైనా అనుబంధించబడిన పాస్‌వర్డ్ భద్రతను నిలిపివేయడానికి యాప్‌ను అనుమతిస్తుంది. ఉదాహరణకు, ఇన్‌కమింగ్ ఫోన్ కాల్ వస్తున్నప్పుడు ఫోన్ కీలాక్‌ను నిలిపివేస్తుంది, ఆపై కాల్ ముగిసిన తర్వాత కీలాక్‌ను మళ్లీ ప్రారంభిస్తుంది." + + + + "వేలిముద్ర హార్డ్‌వేర్‌ని నిర్వహించడానికి అనుమతి" "వినియోగం కోసం వేలిముద్ర టెంప్లేట్‌లను జోడించే మరియు తొలగించే పద్ధతులను అమలు చేయడానికి యాప్‌ను అనుమతిస్తుంది." "వేలిముద్ర హార్డ్‌వేర్‌ని ఉపయోగించడానికి అనుమతి" @@ -504,6 +499,7 @@ "గుర్తించలేదు" + "వేలిముద్ర ప్రమాణీకరించబడింది" "వేలిముద్ర హార్డ్‌వేర్ అందుబాటులో లేదు." "వేలిముద్రను నిల్వ చేయడం సాధ్యపడదు. దయచేసి ఇప్పటికే ఉన్న వేలిముద్రను తీసివేయండి." "వేలిముద్ర గడువు సమయం చేరుకుంది. మళ్లీ ప్రయత్నించండి." @@ -1016,14 +1012,32 @@ "ఇన్‌పుట్ పద్ధతి" "వచనానికి సంబంధించిన చర్యలు" "ఇమెయిల్" + + "కాల్ చేయండి" + + "గుర్తించండి" + + "తెరవండి" + + "సందేశం" + + "జోడించండి" + + "చూడండి" + + "షెడ్యూల్" + + "ట్రాక్ చేయండి" + + "నిల్వ ఖాళీ అయిపోతోంది" "కొన్ని సిస్టమ్ కార్యాచరణలు పని చేయకపోవచ్చు" "సిస్టమ్ కోసం తగినంత నిల్వ లేదు. మీకు 250MB ఖాళీ స్థలం ఉందని నిర్ధారించుకుని, పునఃప్రారంభించండి." @@ -1117,8 +1131,7 @@ "%1$sని తెరువు" "%1$s సేవ్ చేయకుండానే మూసివేయబడుతుంది" "%1$s మెమరీ పరిమితిని మించిపోయింది" - - + "కుప్పలు తెప్పలుగా సేకరించబడింది. షేర్ చేయడానికి నొక్కండి" "హీప్ డంప్‌ను భాగస్వామ్యం చేయాలా?" "%1$s ప్రాసెస్ దాని %2$s ప్రాసెస్ మెమరీ పరిమితిని మించిపోయింది. మీకు దాని డెవలపర్‌తో షేర్ చేయడానికి హీప్ డంప్ అందుబాటులో ఉంది. జాగ్రత్తగా ఉండండి: ఈ హీప్ డంప్‌లో యాప్‌ యాక్సెస్ కలిగి ఉన్న మీ వ్యక్తిగత సమాచారం ఏదైనా ఉండవచ్చు." "వచనం కోసం చర్యను ఎంచుకోండి" @@ -1153,8 +1166,7 @@ "బహిరంగ Wi‑Fi నెట్‌వర్క్‌కు కనెక్ట్ చేయండి" "క్యారియర్ Wi‑Fi నెట్‌వర్క్‌కి కనెక్ట్ చేయండి" - - + "Wi‑Fi నెట్‌వర్క్‌కి కనెక్ట్ చేస్తోంది" "Wi‑Fi నెట్‌వర్క్‌కు కనెక్ట్ చేయబడింది" "Wi‑Fi నెట్‌వర్క్‌కు కనెక్ట్ చేయడం సాధ్యపడలేదు" "అన్ని నెట్‌వర్క్‌లు చూడటానికి నొక్కండి" @@ -1271,33 +1283,34 @@ "%s ఇతర అనువర్తనాలలో చూపబడుతోంది" "%s ఈ లక్షణాన్ని ఉపయోగించకూడదు అని మీరు అనుకుంటే, సెట్టింగ్‌లను తెరవడానికి నొక్కి, దీన్ని ఆఫ్ చేయండి." "ఆఫ్ చేయి" - "%sని సిద్ధం చేస్తోంది" - "లోపాల కోసం తనిఖీ చేస్తోంది" - "కొత్త %s గుర్తించబడింది" + "%sని తనిఖీ చేస్తోంది…" + "ప్రస్తుత కంటెంట్ సమీక్షించబడుతోంది" + "కొత్త %s" + "సెటప్ చేయడానికి నొక్కండి" "ఫోటోలు మరియు మీడియాను బదిలీ చేయడానికి" - "%s పాడైంది" - "%s పాడైంది. సరిచేయడానికి నొక్కండి." + "%sతో సమస్య ఉంది" + "పరిష్కరించడానికి నొక్కండి" "%s పాడైంది. సరిచేయడానికి ఎంచుకోండి." "%sకి మద్దతు లేదు" "ఈ పరికరం ఈ %sకి మద్దతు ఇవ్వదు. మద్దతు కలిగిన ఆకృతిలో సెటప్ చేయడానికి నొక్కండి." "ఈ పరికరం ఈ %sకి మద్దతు ఇవ్వదు. మద్దతు కలిగిన ఆకృతిలో సెటప్ చేయడానికి ఎంచుకోండి." "%s ఊహించని విధంగా తీసివేయబడింది" - "డేటా కోల్పోకుండా ఉండటానికి %sని తీసివేయడానికి ముందు అన్‌మౌంట్ చేయండి" - "%s తీసివేయబడింది" - "%s తీసివేయబడింది; కొత్తదాన్ని చొప్పించండి" - "ఇంకా %sని తొలగిస్తూనే ఉంది…" - "తీసివేయవద్దు" + "కంటెంట్‌ని కోల్పోవడాన్ని నివారించాలంటే తీసివేయబోయే ముందు మీడియాని తొలగించండి" + "%s తీసివేయబడింది" + "కొంత నిర్వాహక ప్రక్రియ సరిగ్గా పని చేస్తున్నట్లు లేదు. కొత్త నిల్వని చొప్పించండి." + "%sని తొలగిస్తోంది" + "తీసివేయవద్దు" "సెటప్ చేయండి" "తొలగించు" "విశ్లేషించు" "%s కనుగొనబడటం లేదు" - "ఈ పరికరం తిరిగి చొప్పించండి" + "పరికరాన్ని మళ్లీ చొప్పించండి" "%sని తరలిస్తోంది" "డేటాను తరలిస్తోంది" - "తరలింపు పూర్తయింది" - "డేటా %sకి తరలించబడింది" - "డేటాను తరలించలేకపోయింది" - "డేటా అసలు స్థానంలో అలాగే ఉంది" + "కంటెంట్ బదిలీ పూర్తయింది" + "కంటెంట్ %sకి తరలించబడింది" + "కంటెంట్‌ని తరలించడం సాధ్యం కాలేదు" + "కంటెంట్‌ని తరలించడానికి మళ్లీ ప్రయత్నించండి" "తీసివేయబడింది" "తొలగించబడింది" "తనిఖీ చేస్తోంది..." @@ -1356,17 +1369,14 @@ "ఎల్లప్పుడూ-ఆన్‌లో ఉండే VPN కనెక్ట్ చేయబడుతోంది…" "ఎల్లప్పుడూ-ఆన్‌లో ఉండే VPN కనెక్ట్ చేయబడింది" "ఎల్లప్పుడూ ఆన్‌లో ఉండే VPN నుండి డిస్‌కనెక్ట్ చేయబడింది" - - + "ఎల్లప్పుడూ ఆన్‌లో ఉండే VPNకి కనెక్ట్ చేయడం సాధ్యపడలేదు" "నెట్‌వర్క్ లేదా VPN సెట్టింగ్‌లను మార్చండి" "ఫైల్‌ను ఎంచుకోండి" "ఫైల్ ఎంచుకోబడలేదు" "రీసెట్ చేయి" "సమర్పించు" - - - - + "డ్రైవింగ్ యాప్ అమలవుతోంది" + "డ్రైవింగ్ యాప్ నుండి నిష్క్రమించడం కోసం నొక్కండి." "టీథర్ చేయబడినది లేదా హాట్‌స్పాట్ సక్రియంగా ఉండేది" "సెటప్ చేయడానికి నొక్కండి." "టెథెరింగ్ నిలిపివేయబడింది" @@ -1692,8 +1702,7 @@ "మీ నిర్వాహకులు ఇన్‌స్టాల్ చేసారు" "మీ నిర్వాహకులు నవీకరించారు" "మీ నిర్వాహకులు తొలగించారు" - - + "బ్యాటరీ జీవితకాలాన్ని పొడిగించడం కోసం, బ్యాటరీ సేవర్ మీ పరికరం యొక్క పనితీరుని తగ్గిస్తుంది మరియు వైబ్రేషన్‌ని, స్థాన సేవలను మరియు నేపథ్య డేటాని పరిమితం చేస్తుంది లేదా ఆఫ్ చేస్తుంది. సమకాలీకరణపై ఆధాపరపడిన ఇమెయిల్, సందేశం మరియు ఇతర యాప్‌లు మీరు వాటిని తెరిచే వరకు అప్‌డేట్ కాకపోవచ్చు.\n\nపరికరాన్ని ఛార్జింగ్‌లో ఉంచినప్పుడు బ్యాటరీ సేవర్ ఆటోమేటిక్‌గా ఆఫ్ అవుతుంది." "డేటా వినియోగాన్ని తగ్గించడంలో సహాయకరంగా ఉండటానికి, డేటా సేవర్ కొన్ని యాప్‌లను నేపథ్యంలో డేటాను పంపకుండా లేదా స్వీకరించకుండా నిరోధిస్తుంది. మీరు ప్రస్తుతం ఉపయోగిస్తున్న యాప్‌ డేటాను యాక్సెస్ చేయగలదు కానీ అలా అరుదుగా చేయవచ్చు. అంటే, ఉదాహరణకు, మీరు ఆ చిత్రాలను నొక్కే వరకు అవి ప్రదర్శించబడవు." "డేటా సేవర్‌ను ఆన్ చేయాలా?" "ఆన్ చేయి" @@ -1744,22 +1753,14 @@ "%1$s ద్వారా మ్యూట్ చేయబడింది" "మీ పరికరంతో అంతర్గత సమస్య ఏర్పడింది మరియు మీరు ఫ్యాక్టరీ డేటా రీసెట్ చేసే వరకు అస్థిరంగా ఉంటుంది." "మీ పరికరంతో అంతర్గత సమస్య ఏర్పడింది. వివరాల కోసం మీ తయారీదారుని సంప్రదించండి." - - - - - - - - - - - - - - - - + "USSD అభ్యర్థన సాధారణ కాల్‌కు మార్చబడింది" + "USSD అభ్యర్థన SS అభ్యర్థనకు మార్చబడింది" + "కొత్త USSD అభ్యర్థనకు మార్చబడింది" + "USSD అభ్యర్థన వీడియో కాల్‌కు మార్చబడింది" + "SS అభ్యర్థన సాధారణ కాల్‌కి మార్చబడింది" + "SS అభ్యర్థన వీడియో కాల్‌కి మార్చబడింది" + "SS అభ్యర్థన USSD అభ్యర్థనకు మార్చబడింది" + "కొత్త SS అభ్యర్థనకు మార్చబడింది" "కార్యాలయ ప్రొఫైల్‌" "విస్తరింపజేయి" "కుదించు" @@ -1857,6 +1858,10 @@ "వాయిస్ కోసం SIM సదుపాయం లేదు" "వాయిస్ కోసం SIM అనుమతించబడదు" "వాయిస్ కోసం ఫోన్ అనుమతించబడదు" + "SIM %d అనుమతించబడలేదు" + "SIM %d యాక్టివ్ చేయలేదు" + "SIM %d అనుమతించబడలేదు" + "SIM %d అనుమతించబడలేదు" "పాప్అప్ విండో" "+ %1$d" "యాప్ వెర్షన్ డౌన్‌గ్రేడ్ చేయబడింది లేదా ఈ సత్వరమార్గంతో అనుకూలంగా లేదు" @@ -1877,8 +1882,6 @@ "ఇది కొత్త ప్రవర్తన. మార్చడానికి నొక్కండి." "అంతరాయం కలిగించవద్దు మార్చబడింది" "బ్లాక్ చేయబడిన దాన్ని తనిఖీ చేయడానికి నొక్కండి." - - - - + "సిస్టమ్" + "సెట్టింగ్‌లు" diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index 4614fddb078b9d40bc42a7b30c3bf5960f461333..5fcff06f3636f71c6baa18acf42070c8b244af80 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -82,6 +82,7 @@ "ไม่มีบริการเสียง" "ไม่มีบริการโทรสนทนาหรือการโทรหมายเลขฉุกเฉิน" "ปิดชั่วคราวโดยผู้ให้บริการ" + "ปิดชั่วคราวโดยผู้ให้บริการของซิม %d" "เชื่อมต่อเครือข่ายมือถือไม่ได้" "ลองเปลี่ยนเครือข่ายที่ต้องการ แตะเพื่อเปลี่ยน" "โทรหาหมายเลขฉุกเฉินไม่ได้" @@ -120,12 +121,13 @@ "เปิดโรมมิ่งแบนเนอร์" "ปิดโรมมิ่งแบนเนอร์" "กำลังค้นหาบริการ" - - + "ตั้งค่าการโทรผ่าน Wi‑Fi ไม่ได้" "หากต้องการโทรออกและส่งข้อความผ่าน Wi-Fi โปรดสอบถามผู้ให้บริการของคุณก่อนเพื่อตั้งค่าบริการนี้ แล้วเปิดการโทรผ่าน Wi-Fi อีกครั้งจากการตั้งค่า (รหัสข้อผิดพลาด: %1$s)" - + + "เกิดปัญหาในการลงทะเบียนการโทรผ่าน Wi‑Fi กับผู้ให้บริการของคุณ: %1$s" + "%s" "กำลังเรียก Wi-Fi ของ %s" @@ -481,6 +483,8 @@ "อนุญาตให้แอปพลิเคชันสื่อสารกับแท็ก Near Field Communication (NFC) การ์ด และโปรแกรมอ่าน" "ปิดใช้งานการล็อกหน้าจอของคุณ" "อนุญาตให้แอปพลิเคชันปิดใช้งานการล็อกปุ่มกดและการรักษาความปลอดภัยด้วยรหัสผ่านใดๆ ที่เกี่ยวข้อง ตัวอย่างเช่น โทรศัพท์ปิดใช้งานการล็อกปุ่มกดเมื่อรับสายเรียกเข้า จากนั้นจึงเปิดใช้งานการล็อกปุ่มกดใหม่หลังจากวางสาย" + "ใช้ฮาร์ดแวร์ชีวมิติ" + "อนุญาตให้แอปใช้ฮาร์ดแวร์ชีวมิติเพื่อตรวจสอบสิทธิ์" "จัดการฮาร์ดแวร์ลายนิ้วมือ" "อนุญาตให้แอปเรียกใช้วิธีการเพื่อเพิ่มและลบเทมเพลตลายนิ้วมือสำหรับการใช้งาน" "ใช้ฮาร์ดแวร์ลายนิ้วมือ" @@ -493,6 +497,7 @@ "ไม่รู้จัก" + "ตรวจสอบสิทธิ์ลายนิ้วมือแล้ว" "ฮาร์ดแวร์ลายนิ้วมือไม่พร้อมใช้งาน" "ไม่สามารถเก็บลายนิ้วมือได้ โปรดนำลายนิ้วมือที่มีอยู่ออก" "หมดเวลาใช้ลายนิ้วมือแล้ว โปรดลองอีกครั้ง" @@ -1005,14 +1010,23 @@ "วิธีป้อนข้อมูล" "การทำงานของข้อความ" "อีเมล" + "ส่งอีเมลไปยังที่อยู่ที่เลือก" "โทร" + "โทรหาหมายเลขโทรศัพท์ที่เลือก" "ค้นหา" + "หาที่อยู่ที่เลือก" "เปิด" + "เปิด URL ที่เลือก" "ข้อความ" + "ส่งข้อความไปยังหมายเลขโทรศัพท์ที่เลือก" "เพิ่ม" + "เพิ่มในรายชื่อติดต่อ" "ดู" + "ดูเวลาที่เลือกในปฏิทิน" "กำหนดการ" + "ตั้งเวลากิจกรรมสำหรับเวลาที่เลือก" "แทร็ก" + "ติดตามเที่ยวบินที่เลือก" "พื้นที่จัดเก็บเหลือน้อย" "บางฟังก์ชันระบบอาจไม่ทำงาน" "พื้นที่เก็บข้อมูลไม่เพียงพอสำหรับระบบ โปรดตรวจสอบว่าคุณมีพื้นที่ว่าง 250 MB แล้วรีสตาร์ท" @@ -1141,8 +1155,7 @@ "เชื่อมต่อเครือข่าย Wi‑Fi แบบเปิด" "เชื่อมต่อเครือข่าย Wi‑Fi ของผู้ให้บริการ" - - + "กำลังเชื่อมต่อกับเครือข่าย Wi-Fi" "เชื่อมต่อเครือข่าย Wi-Fi แล้ว" "ไม่สามารถเชื่อมต่อเครือข่าย Wi‑Fi" "แตะเพื่อดูเครือข่ายทั้งหมด" @@ -1258,33 +1271,34 @@ "%s กำลังแสดงทับแอปอื่นๆ" "หากคุณไม่ต้องการให้ %s ใช้ฟีเจอร์นี้ ให้แตะเพื่อเปิดการตั้งค่าแล้วปิดฟีเจอร์" "ปิด" - "กำลังเตรียม %s" - "กำลังตรวจหาข้อผิดพลาด" - "ตรวจพบ %s ใหม่" + "กำลังตรวจสอบ %s…" + "กำลังตรวจสอบเนื้อหาปัจจุบัน" + "%s ใหม่" + "แตะเพื่อตั้งค่า" "สำหรับการโอนรูปภาพและสื่อ" - "%s เสียหาย" - "%s เสียหาย แตะเพื่อแก้ไข" + "ปัญหาที่พบจาก %s" + "แตะเพื่อแก้ไข" "%s เสียหาย เลือกเพื่อแก้ไข" "ไม่สนับสนุน %s" "อุปกรณ์นี้ไม่สนับสนุน %s นี้ แตะเพื่อตั้งค่าในรูปแบบที่สนับสนุน" "อุปกรณ์นี้ไม่รองรับ %s นี้ เลือกเพื่อตั้งค่าในรูปแบบที่รองรับ" "%s ถูกนำออกไปโดยไม่คาดคิด" - "ยกเลิกการต่อเชื่อม %s ก่อนนำออกเพื่อหลีกเลี่ยงข้อมูลสูญหาย" - "นำ %s ออกแล้ว" - "%s ถูกนำออก โปรดใส่ใหม่" - "ยังคงนำ %s ออก…" - "ห้ามนำออก" + "ดีดสื่อออกก่อนการนำออกเพื่อหลีกเลี่ยงเนื้อหาสูญหาย" + "นำ %s ออกแล้ว" + "ฟังก์ชันการทำงานบางอย่างอาจทำงานไม่ถูกต้อง โปรดใส่พื้นที่เก็บข้อมูลใหม่" + "กำลังดีด %s ออก" + "ห้ามนำออก" "ตั้งค่า" "นำอุปกรณ์ออก" "สำรวจ" "ไม่มี %s" - "เสียบอุปกรณ์นี้อีกครั้ง" + "ใส่อุปกรณ์อีกครั้ง" "กำลังย้าย %s" "กำลังย้ายข้อมูล" - "ย้ายเสร็จสมบูรณ์แล้ว" - "ย้ายข้อมูลไปยัง %s แล้ว" - "ไม่สามารถย้ายข้อมูล" - "ข้อมูลที่เหลืออยู่ในตำแหน่งเดิม" + "โอนเนื้อหาเรียบร้อยแล้ว" + "ย้ายเนื้อหาไปที่ %s แล้ว" + "ย้ายเนื้อหาไม่ได้" + "ลองย้ายเนื้อหาอีกครั้ง" "นำออกแล้ว" "นำออกแล้ว" "กำลังตรวจสอบ…" @@ -1676,8 +1690,7 @@ "ติดตั้งโดยผู้ดูแลระบบ" "อัปเดตโดยผู้ดูแลระบบ" "ลบโดยผู้ดูแลระบบ" - - + "เพื่อช่วยยืดอายุการใช้งานแบตเตอรี่ โหมดประหยัดแบตเตอรี่จะลดการทำงานของอุปกรณ์และจำกัดหรือปิดการสั่น บริการตำแหน่ง และข้อมูลแบ็กกราวด์ นอกจากนี้ อีเมล การรับส่งข้อความ และแอปอื่นๆ ที่ใช้การซิงค์ก็จะไม่อัปเดตหากคุณไม่เปิดขึ้นมา\n\nโหมดประหยัดแบตเตอรี่จะปิดโดยอัตโนมัติขณะชาร์จอุปกรณ์" "เพื่อช่วยลดปริมาณการใช้อินเทอร์เน็ต โปรแกรมประหยัดอินเทอร์เน็ตจะช่วยป้องกันไม่ให้บางแอปส่งหรือรับข้อมูลเครือข่ายมือถือในการทำงานเบื้องหลัง แอปที่คุณกำลังใช้งานสามารถเข้าถึงข้อมูลเครือข่ายมือถือได้ แต่อาจไม่บ่อยเท่าเดิม ตัวอย่างเช่น ภาพต่างๆ จะไม่แสดงจนกว่าคุณจะแตะที่ภาพเหล่านั้น" "เปิดการประหยัดอินเทอร์เน็ตไหม" "เปิด" @@ -1728,22 +1741,14 @@ "ปิดเสียงโดย %1$s" "อุปกรณ์ของคุณเกิดปัญหาภายในเครื่อง อุปกรณ์อาจทำงานไม่เสถียรจนกว่าคุณจะรีเซ็ตข้อมูลเป็นค่าเริ่มต้น" "อุปกรณ์ของคุณเกิดปัญหาภายในเครื่อง โปรดติดต่อผู้ผลิตเพื่อขอรายละเอียดเพิ่มเติม" - - - - - - - - - - - - - - - - + "คำขอ USSD เปลี่ยนเป็นการโทรปกติแล้ว" + "คำขอ USSD เปลี่ยนเป็นคำขอ SS แล้ว" + "เปลี่ยนเป็นคำขอ USSD ใหม่แล้ว" + "คำขอ USSD เปลี่ยนเป็นวิดีโอคอลแล้ว" + "คำขอ SS เปลี่ยนเป็นการโทรปกติแล้ว" + "คำขอ SS เปลี่ยนเป็นวิดีโอคอลแล้ว" + "คำขอ SS เปลี่ยนเป็นคำขอ USSD แล้ว" + "เปลี่ยนเป็นคำขอ SS ใหม่แล้ว" "โปรไฟล์งาน" "ขยาย" "ยุบ" @@ -1841,6 +1846,10 @@ "ไม่มีการจัดสรรซิมสำหรับเสียง" "ไม่อนุญาตให้ใช้ซิมสำหรับเสียง" "ไม่อนุญาตให้ใช้โทรศัพท์สำหรับเสียง" + "ไม่อนุญาตให้ใช้ซิม %d" + "ไม่มีการจัดสรรซิม %d" + "ไม่อนุญาตให้ใช้ซิม %d" + "ไม่อนุญาตให้ใช้ซิม %d" "หน้าต่างป๊อปอัป" "+ %1$d" "มีการดาวน์เกรดเวอร์ชันของแอปหรือใช้กับทางลัดนี้ไม่ได้" diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index 9bb64e09813c2c64125781501a000a91e0634e2d..b1abc842a4f579aded4017b63df43b2c8c969362 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -77,15 +77,16 @@ "Naka-default na hindi pinaghihigpitan ang Caller ID. Susunod na tawag: Hindi pinaghihigpitan" "Hindi naprobisyon ang serbisyo." "Hindi mo mababago ang setting ng caller ID." - "Walang serbisyo sa data" - "Walang emergency na tawag" + "Walang serbisyo ng data sa mobile" + "Hindi available ang pang-emergency na pagtawag" "Walang serbisyo para sa boses" - "Walang serbisyo para sa voice/emergency" - "Pansamantalang hindi inaalok ng mobile network sa iyong lokasyon" - "Hindi maabot ang network" - "Upang mapahusay ang reception, subukang baguhin ang uring napili sa Mga Setting > Network at internet > Mga mobile network > Gustong uri ng network." - "Aktibo ang pagtawag sa pamamagitan ng Wi‑Fi" - "Nangangailangan ng mobile network ang mga emergency na tawag." + "Walang serbisyo para sa boses o emergency na tawag" + "Pansamantalang na-off ng iyong carrier" + "Pansamantalang na-off ng iyong carrier para sa SIM %d" + "Hindi makakonekta sa mobile network" + "Subukang baguhin ang gustong network. I-tap para baguhin." + "Hindi available ang pang-emergency na pagtawag" + "Hindi makapagsagawa ng mga emergency na tawag sa pamamagitan ng Wi‑Fi" "Mga Alerto" "Pagpasa ng tawag" "Emergency callback mode" @@ -120,12 +121,12 @@ "Naka-on ang Banner ng Roaming" "Naka-off ang Banner ng Roaming" "Naghahanap ng Serbisyo" - "Pagtawag sa pamamagitan ng Wi-Fi" + "Hindi ma-set up ang pagtawag gamit ang Wi‑Fi" "Upang makatawag at makapagpadala ng mga mensahe sa Wi-Fi, hilingin muna sa iyong carrier na i-set up ang serbisyong ito. Pagkatapos ay i-on muli ang pagtawag gamit ang Wi-Fi mula sa Mga Setting. (Error code: %1$s)" - "Iparehistro sa iyong carrier (Code ng error: %1$s)" + "Nagkaroon ng isyu sa pagrehistro ng pagtawag gamit ang Wi‑Fi sa iyong carrier: %1$s" "%s" @@ -160,8 +161,8 @@ "Pinoproseso ang masyadong maraming kahilingan. Subukang muli sa ibang pagkakataon." "Error sa pag-signin para sa %1$s" "I-sync" - "I-sync" - "Masyadong maraming pagtanggal ng %s." + "Hindi ma-sync" + "Sinubukang mag-delete ng masyado maraming %s." "Puno na ang storage ng tablet. Magtanggal ng ilang file upang magbakante ng espasyo." "Puno na ang storage ng relo. Magtanggal ng ilang file upang magbakante ng espasyo." "Puno na ang storage ng TV. Mag-delete ng ilang file upang magbakante ng espasyo." @@ -174,14 +175,13 @@ "Ng admin ng iyong profile sa trabaho" "Ng %s" "Na-delete na ang profile sa trabaho" - "Na-delete ang profile sa trabaho dahil wala itong admin app" "Nawawala o nasira ang admin app ng profile sa trabaho. Dahil dito, na-delete ang profile mo sa trabaho at nauugnay na data. Makipag-ugnayan sa iyong admin para sa tulong." "Hindi na available sa device na ito ang iyong profile sa trabaho" "Masyadong maraming pagsubok sa password" "Pinamamahalaan ang device" "Pinamamahalaan ng iyong organisasyon ang device na ito, at maaari nitong subaybayan ang trapiko sa network. I-tap para sa mga detalye." "Buburahin ang iyong device" - "Hindi magagamit ang admin app. Mabubura na ang iyong device.\n\nKung mayroon kang mga tanong, makipag-ugnayan sa admin ng iyong organisasyon." + "Hindi magamit ang admin app. Mabubura na ang iyong device.\n\nKung mayroon kang mga tanong, makipag-ugnayan sa admin ng iyong organisasyon." "Na-disable ng %s ang pag-print." "Ako" "Mga pagpipilian sa tablet" @@ -236,6 +236,9 @@ "Airplane mode" "Naka-ON ang airplane mode" "Naka-OFF ang airplane mode" + "Pangtipid sa baterya" + "NAKA-OFF ang Pangtipid sa baterya" + "NAKA-ON ang Pangtipid sa baterya" "Mga Setting" "Tulong" "Voice Assist" @@ -269,31 +272,31 @@ "Lumipat sa profile sa trabaho" "Mga Contact" "i-access ang iyong mga contact" - "Payagan ang <b>%1$s</b> na i-access ang iyong mga contact" + "Payagan ang <b>%1$s</b> na i-access ang iyong mga contact?" "Lokasyon" "i-access ang lokasyon ng device na ito" - "Payagan ang <b>%1$s</b> na i-access ang lokasyon ng device na ito" + "Payagan ang <b>%1$s</b> na i-access ang lokasyon ng device na ito?" "Kalendaryo" "i-access ang iyong kalendaryo" - "Payagan ang <b>%1$s</b> na i-access ang iyong kalendaryo" + "Payagan ang <b>%1$s</b> na i-access ang iyong kalendaryo?" "SMS" "magpadala at tumingin ng mga mensaheng SMS" - "Payagan ang <b>%1$s</b> na magpadala at tumingin ng mga mensaheng SMS" + "Payagan ang <b>%1$s</b> na magpadala at tumingin ng mga mensaheng SMS?" "Storage" "i-access ang mga larawan, media at file sa iyong device" - "Payagan ang <b>%1$s</b> na i-access ang mga larawan, media, at file sa iyong device" + "Payagan ang <b>%1$s</b> na i-access ang mga larawan, media, at file sa iyong device?" "Mikropono" "mag-record ng audio" - "Payagan ang <b>%1$s</b> na mag-record ng audio" + "Payagan ang <b>%1$s</b> na mag-record ng audio?" "Camera" "kumuha ng mga larawan at mag-record ng video" - "Payagan ang <b>%1$s</b> na kumuha ng mga larawan at mag-record ng video" + "Payagan ang <b>%1$s</b> na kumuha ng mga larawan at mag-record ng video?" "Telepono" "tumawag at mamahala ng mga tawag sa telepono" - "Payagan ang <b>%1$s</b> na tumawag at mamahala ng mga tawag" + "Payagan ang <b>%1$s</b> na tumawag at mamahala ng mga tawag sa telepono?" "Mga Sensor ng Katawan" "i-access ang data ng sensor tungkol sa iyong vital signs" - "Payagan ang <b>%1$s</b> na i-access ang data ng sensor tungkol sa iyong mga vital sign" + "Payagan ang <b>%1$s</b> na i-access ang data ng sensor tungkol sa iyong mga vital sign?" "Kunin ang content ng window" "Siyasatin ang nilalaman ng isang window kung saan ka nakikipag-ugnayan." "I-on ang Explore by Touch" @@ -305,7 +308,7 @@ "Magsagawa ng mga galaw" "May kakayahang mag-tap, mag-swipe, mag-pinch at magsagawa ng iba pang mga galaw." "Mga galaw gamit ang fingerprint" - "Makukunan ang mga galaw na ginawa sa sensor para sa fingerprint ng mga device." + "Makukunan ang mga galaw na ginawa sa sensor para sa fingerprint ng device." "i-disable o baguhin ang status bar" "Pinapayagan ang app na i-disable ang status bar o magdagdag at mag-alis ng mga icon ng system." "maging status bar" @@ -356,6 +359,8 @@ "Pinapayagan ang app na panatilihin ang ilang bahagi nito sa memory. Maaari nitong limitahan ang memory na available sa iba pang apps na nagpapabagal sa tablet." "Nagbibigay-daan sa app na iimbak sa memory ang mga bahagi nito. Maaari nitong malimitahan ang memory na available sa iba pang mga app na nagpapabagal sa TV." "Pinapayagan ang app na panatilihin ang ilang bahagi nito sa memory. Maaari nitong limitahan ang memory na available sa iba pang apps na nagpapabagal sa telepono." + "paganahin ang foreground na serbisyo" + "Payagan ang app na gamitin ang mga foreground na serbisyo." "sukatin ang espasyo ng storage ng app" "Pinapayagan ang app na bawiin ang code, data, at mga laki ng cache nito" "baguhin ang mga setting ng system" @@ -478,6 +483,8 @@ "Pinapayagan ang app na makipag-ugnay sa Near Field Communication (NFC) na mga tag, card, at reader." "i-disable ang iyong screen lock" "Pinapayagan ang app na i-disable ang keylock at anumang nauugnay na seguridad sa password. Halimbawa, hindi pinapagana ng telepono ang keylock kapag nakakatanggap ng papasok na tawag sa telepono, pagkatapos ay muling pinapagana ang keylock kapag tapos na ang tawag." + "gumamit ng biometric hardware" + "Pinapayagan ang app na gumamit ng biometric hardware para sa pag-authenticate" "pamahalaan ang hardware ng fingerprint" "Pinapayagan ang app na mag-invoke ng mga paraan upang magdagdag at mag-delete ng mga template ng fingerprint na magagamit." "gamitin ang hardware ng fingerprint" @@ -490,6 +497,7 @@ "Hindi nakilala" + "Na-authenticate ang fingerprint" "Hindi available ang hardware na ginagamitan ng fingerprint." "Hindi maiimbak ang fingerprint. Mangyaring mag-alis ng umiiral nang fingerprint." "Nag-time out ang fingerprint. Subukang muli." @@ -802,6 +810,8 @@ "Pag-unlock ng pattern." "Face unlock." "Pag-unlock ng pin." + "Pag-unlock ng Pin ng Sim." + "Pag-unlock ng Puk ng Sim." "Pag-unlock ng password." "Bahagi ng pattern." "Bahagi ng slide." @@ -863,6 +873,12 @@ "Nakopya ang teksto sa clipboard." "Higit pa" "Menu+" + "Meta+" + "Ctrl+" + "Alt+" + "Shift+" + "Sym+" + "Function+" "espasyo" "ipasok" "i-delete" @@ -994,14 +1010,23 @@ "Pamamaraan ng pag-input" "Pagkilos ng teksto" "Mag-email" + "Mag-email sa mga piniling address" "Tawagan" + "Tawagan ang piniling numero ng telepono" "Hanapin" + "Hanapin ang piniling address" "Buksan" + "Buksan ang piniling URL" "Padalhan ng Mensahe" + "Padalhan ng mensahe ang piniling numero ng telepono" "Magdagdag" + "Idagdag sa mga contact" "Tingnan" + "Tingnan ang piniling oras sa kalendaryo" "Mag-iskedyul" + "Mag-iskedyul ng kaganapan para sa piniling oras" "Subaybayan" + "I-track ang piniling flight" "Nauubusan na ang puwang ng storage" "Maaaring hindi gumana nang tama ang ilang paggana ng system" "Walang sapat na storage para sa system. Tiyaking mayroon kang 250MB na libreng espasyo at i-restart." @@ -1074,31 +1099,28 @@ "Tingnan kung may update" "Ang app na %1$s (prosesong %2$s) ay lumabag sa sarili nitong ipinapatupad na patakarang StrictMode." "Ang prosesong %1$s ay lumabag sa sarili nitong ipinapatupad na patakarang StrictMode." - "Nag-a-upgrade ang Android…" - "Nagsisimula ang Android…" + "Nag-a-update ang telepono…" + "Nag-a-update ang tablet…" + "Nag-a-update ang device…" + "Nagsisimula ang telepono…" + "Nagsisimula ang tablet…" + "Nagsisimula ang device…" "Ino-optimize ang storage." - "Tinatapos ang pag-update sa Android…" - "Maaaring hindi gumana nang maayos ang ilang app hangga\'t hindi pa natatapos ang pag-upgrade" + "Tinatapos ang pag-update ng system…" "Nag-a-upgrade ang %1$s…" "Ino-optimize ang app %1$d ng %2$d." "Ihinahanda ang %1$s." "Sinisimulan ang apps." "Pagtatapos ng pag-boot." "Tumatakbo ang %1$s" - - - - - - - - - - - - + "Mag-tap upang bumalik sa laro" + "Pumili ng laro" + "Para sa mas mahusay na performance, isa lang sa mga larong ito ang maaaring buksan sa bawat pagkakataon." + "Bumalik sa %1$s" + "Buksan ang %1$s" + "Magsasara ang %1$s nang hindi nagse-save" "Lumampas ang %1$s sa limitasyon ng memory" - "Nakolekta na ang heap dump; i-tap upang ibahagi" + "Nakolekta ang heap dump. I-tap para ibahagi." "Ibahagi ang heap dump?" "Lumampas ang proseso na %1$s sa limitasyon ng memory ng proseso nito na %2$s. Available ang isang heap dump upang iyong ibahagi sa developer nito. Maging maingat: maaaring naglalaman ang heap dump na ito ng anuman sa iyong personal na impormasyon na naa-access ng application." "Pumili ng pagkilos para sa teksto" @@ -1133,12 +1155,12 @@ "Kumonekta sa bukas na Wi‑Fi network" "Kumonekta sa Wi‑Fi network ng carrier" - "Kumokonekta sa bukas na Wi‑Fi network" + "Kumokonekta sa Wi‑Fi network" "Nakakonekta sa Wi‑Fi network" "Hindi makakonekta sa Wi‑Fi network" "I-tap upang makita ang lahat ng network" "Kumonekta" - "Lahat ng Network" + "Lahat ng network" "Awtomatikong mag-o-on ang Wi‑Fi" "Kapag malapit ka sa naka-save na network na mataas ang kalidad" "Huwag i-on muli" @@ -1204,6 +1226,7 @@ "I-restart" "I-activate ang serbisyo sa mobile" "I-download ang carrier app upang ma-activate ang iyong bagong SIM" + "I-download ang %1$s app upang ma-activate ang iyong bagong SIM" "I-download ang app" "Nakalagay na ang bagong SIM" "I-tap upang i-set up ito" @@ -1222,13 +1245,13 @@ "Na-on ang PTP sa pamamagitan ng USB" "Na-on ang pag-tether ng USB" "Na-on ang MIDI sa pamamagitan ng USB" - "Na-on ang USB accessory mode" + "Nakakonekta ang USB accessory" "I-tap para sa higit pang mga opsyon." "China-charge ang nakakonektang device. Mag-tap para sa higit pang opsyon." "May na-detect na analog na audio accessory" "Hindi tugma sa teleponong ito ang naka-attach na device. I-tap upang matuto pa." "Konektado ang debugging ng USB" - "I-tap upang i-disable ang pag-debug ng USB." + "I-tap para i-off ang pag-debug ng USB" "Piliin upang i-disable ang debugging ng USB." "Kinukuha ang ulat ng bug…" "Gusto mo bang ibahagi ang ulat ng bug?" @@ -1247,34 +1270,35 @@ "Ipinapakita sa itaas ng iba pang app ang %s." "Nasa ibabaw ng ibang app ang %s" "Kung ayaw mong gamitin ng %s ang feature na ito, i-tap upang buksan ang mga setting at i-off ito." - "I-OFF" - "Inihahanda ang %s" - "Sinusuri para sa mga error" - "Na-detect ang bagong %s" + "I-off" + "Sinusuri ang %s…" + "Sinusuri ang kasalukuyang content" + "Bagong %s" + "Mag-tap para i-set up" "Para sa paglilipat ng mga larawan at media" - "Sirang %s" - "Sira ang %s. I-tap upang ayusin." + "Isyu sa %s" + "Mag-tap para ayusin" "Sira ang %s. Piliin upang ayusin." "Hindi sinusuportahang %s" "Hindi sinusuportahan ng device na ito ang %s na ito. I-tap upang i-set up sa isang sinusuportahang format." "Hindi sinusuportahan ng device na ito ang %s na ito. Piliin upang i-set up sa isang sinusuportahang format." "Hindi inaasahang naalis ang %s" - "I-unmount ang %s bago alisin upang maiwasan ang pagkawala ng data" - "Inalis ang %s" - "Inalis ang %s; maglagay ng bago" - "Ine-eject pa rin ang %s…" - "Huwag alisin" + "I-eject ang media bago tanggalin para maiwasan ang pagkawala ng content" + "Inalis ang %s" + "Maaaring hindi gumana nang maayos ang ilang functionality. Magkabit ng bagong storage." + "Ine-eject ang %s" + "Huwag alisin" "I-set up" "I-eject" "I-explore" "Nawawala ang %s" - "Ilagay muli ang device na ito" + "Ikabit muli ang device" "Inililipat ang %s" "Naglilipat ng data" - "Nakumpleto na ang paglilipat" - "Inilipat ang data sa %s" - "Hindi mailipat ang data" - "Iniwan ang data sa orihinal na lokasyon" + "Tapos na ang paglipat ng content" + "Inilipat ang content sa %s" + "Hindi malipat ang content" + "Subukang ilipat muli ang content" "Inalis" "Na-eject" "Sinusuri…" @@ -1333,14 +1357,14 @@ "Kumukonekta ang Always-on VPN…" "Nakakonekta ang Always-on VPN" "Nadiskonekta sa VPN na palaging naka-on" - "Error sa Always-on VPN" + "Hindi makakonekta sa VPN na palaging naka-on" "Baguhin ang mga setting ng network o VPN" "Pumili ng file" "Walang napiling file" "I-reset" "Isumite" - "Pinagana ang car mode" - "I-tap upang lumabas sa car mode." + "Tumatakbo ang driving app" + "Mag-tap para lumabas sa app sa pagmamaneho." "Pagsasama o aktibong hotspot" "I-tap upang i-set up." "Naka-disable ang pag-tether" @@ -1418,22 +1442,19 @@ "%s USB drive" "USB storage" "I-edit" - "Alerto sa paggamit ng data" - "I-tap tingnan paggamit/setting." - "Naabot na ang limitasyon sa 2G-3G data" - "Naabot na ang limitasyon sa 4G data" + "Babala sa paggamit ng data" + "Nakagamit ka ng %s na data" "Naabot ang limit ng mobile data" "Naabot na ang limitasyon sa data ng Wi-Fi" - "Naka-pause ang data para sa nalalabing bahagi ng pag-ikot" - "lumampas sa 2G-3G na limitasyon ng data" - "Lumampas sa 4G na limitasyon ng data" - "Lumampas sa limitasyon ng data sa mobile" - "Lumampas sa limitasyon ng data ng Wi-Fi" - "Lampas ng %s sa tinukoy na limitasyon." + "Naka-pause ang data para sa natitirang bahagi ng iyong cycle" + "Lumampas sa mobile data limit mo" + "Lumampas sa Wi-Fi data limit mo" + "Lumampas ka nang %s sa iyong itinakdang limitasyon" "Pinaghihigpitan ang data ng background" "I-tap upang alisin paghihigpit." - "Malaking paggamit ng data" - "Mas malaki kaysa sa karaniwan ang paggamit mo ng data sa nakalipas na ilang araw. I-tap upang matingnan ang paggamit at mga setting." + "Malakas na paggamit ng data" + "Gumamit ang iyong mga app ng higit pang data kaysa sa karaniwan" + "Gumamit ang %s ng higit pang data kaysa sa karaniwan" "Certificate ng seguridad" "May-bisa ang certificate na ito." "Ibinigay kay:" @@ -1669,7 +1690,7 @@ "Na-install ng iyong admin" "Na-update ng iyong admin" "Na-delete ng iyong admin" - "Upang matulungang mapatagal ang baterya, binabawasan ng Pangtipid sa Baterya ang performance ng iyong device at nililimitahan nito ang pag-vibrate, mga serbisyo ng lokasyon, at halos lahat ng background na data. Hindi maaaring ma-update ang email, messaging, at iba pang app na umaasa sa pag-sync hangga\'t hindi mo binubuksan ang mga ito.\n\nAwtomatikong nag-o-off ang Pangtipid sa Baterya kapag naka-charge ang iyong device." + "Para mapatagal ang baterya, binabawasan ng Pangtipid sa Baterya ang performance ng iyong device at nililimitahan at ino-off nito ang pag-vibrate, mga serbisyo ng lokasyon, at data ng background. Maaaring hindi ma-update ang email, pagmemensahe, at iba pang app na umaasa sa pag-sync hangga\'t hindi mo binubuksan ang mga ito.\n\nAwtomatikong mag-o-off ang Pangtipid sa Baterya kapag naka-charge ang iyong device." "Upang makatulong na mabawasan ang paggamit ng data, pinipigilan ng Data Saver ang ilang app na magpadala o makatanggap ng data sa background. Maaaring mag-access ng data ang isang app na ginagamit mo sa kasalukuyan, ngunit mas bihira na nito magagawa iyon. Halimbawa, maaaring hindi lumabas ang mga larawan hangga\'t hindi mo nata-tap ang mga ito." "I-on ang Data Saver?" "I-on" @@ -1681,7 +1702,7 @@ Sa loob ng %1$d min (hanggang %2$s) Sa loob ng %1$d na min (hanggang %2$s) - + Sa loob ng %1$d oras (hanggang %2$s) Sa loob ng %1$d na oras (hanggang %2$s) @@ -1697,7 +1718,7 @@ Sa loob ng %d min Sa loob ng %d na min - + Sa loob ng %d oras Sa loob ng %d na oras @@ -1720,14 +1741,14 @@ "Na-mute ng %1$s" "May internal na problema sa iyong device, at maaaring hindi ito maging stable hanggang sa i-reset mo ang factory data." "May internal na problema sa iyong device. Makipag-ugnayan sa iyong manufacturer upang malaman ang mga detalye." - "Ginawang DIAL request ang USSD request." - "Ginawang SS request ang USSD request." - "Ginawang bagong USSD request ang USSD request." - "Ginawang kahilingan sa Video DIAL ang kahilingan sa USSD." - "Ginawang DIAL request ang SS request." - "Ginawang kahilingan sa Video DIAL ang kahilingan sa SS." - "Ginawang USSD request ang SS request." - "Ginawang bagong SS request ang SS request." + "Ginawang regular na tawag ang USSD na kahilingan" + "Ginawang SS na kahilingan ang USSD na kahilingan" + "Ginawang bagong USSD na kahilingan" + "Ginawang video call ang USSD na kahilingan" + "Ginawang regular na tawag ang SS na kahilingan" + "Ginawang video call ang SS na kahilingan" + "Ginawang USSD na kahilingan ang SS na kahilingan" + "Ginawang bagong SS na kahilingan" "Profile sa trabaho" "Palawakin" "I-collapse" @@ -1825,6 +1846,10 @@ "Hindi naka-provision ang SIM para sa boses" "Hindi pinapayagan ang SIM para sa boses" "Hindi pinapayagan ang telepono para sa boses" + "Hindi pinapayagan ang SIM %d" + "Hindi naka-provision ang SIM %d" + "Hindi pinapayagan ang SIM %d" + "Hindi pinapayagan ang SIM %d" "Window ng Popup" "+ %1$d" "Na-downgrade ang bersyon ng app, o hindi ito compatible sa shortcut na ito" @@ -1837,7 +1862,14 @@ "May na-detect na mapaminsalang app" "Gustong ipakita ng %1$s ang mga slice ng %2$s" "I-edit" + "Magva-vibrate ang mga tawag at notification" + "Mamu-mute ang mga tawag at notification" "Mga pagbabago sa system" + "Huwag Istorbohin" + "Itinatago ng Huwag Istorbohin ang mga notification para tulungan kang tumuon" + "Ito ang bagong gawi. I-tap para baguhin." "Binago ang Huwag Istorbohin" - "I-tap upang tingnan ang iyong mga setting ng gawi para sa mga pagkaantala" + "I-tap para tingnan kung ano ang naka-block." + "System" + "Mga Setting" diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index e63e319b45d45fe9ee25799c8ce6a3c226976626..989e6d1f565e9533a6759d8832e2f7cc710273fb 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -77,15 +77,16 @@ "Arayan kimliği varsayılanları kısıtlanmamıştır. Sonraki çağrı: Kısıtlanmamış" "Hizmet sağlanamadı." "Arayanın kimliği ayarını değiştiremezsiniz." - "Veri hizmeti yok" - "Acil durum çağrısı yok" + "Mobil veri hizmeti yok" + "Acil durum çağrısı kullanılamaz" "Sesli çağrı hizmeti yok" - "Ses/acil durum hizmeti yok" - "Bulunduğunuz yerdeki mobil ağ tarafından geçici olarak sunulmuyor" - "Ağa erişilemiyor" - "Sinyal gücünü iyileştirmek için Ayarlar > Ağ ve İnternet > Mobil ağlar > Tercih edilen ağ türü bölümünde seçili türü değiştirmeyi deneyin." - "Kablosuz çağrı etkin" - "Acil durum çağrıları için mobil ağ gereklidir." + "Ses hizmeti veya acil durum çağrısı kullanılamaz" + "Operatörünüz tarafından geçici olarak kapatıldı" + "%d numaralı SIM kart için operatörünüz tarafından geçici olarak kapatıldı" + "Mobil ağa erişilemiyor" + "Tercih edilen ağı değiştirmeyi deneyin. Değiştirmek için dokunun." + "Acil durum çağrısı kullanılamaz" + "Kablosuz ağ üzerinden acil durum çağrıları yapılamaz" "Uyarılar" "Çağrı yönlendirme" "Acil geri arama modu" @@ -120,12 +121,12 @@ "Dolaşım Başlığı Açık" "Dolaşım Başlığı Kapalı" "Hizmet Aranıyor" - "Kablosuz Çağrı" + "Kablosuz çağrı kurulamadı" "Kablosuz ağ üzerinden telefon etmek ve mesaj göndermek için öncelikle operatörünüzden bu hizmeti ayarlamasını isteyin. Sonra, Ayarlar\'dan Kablosuz çağrı özelliğini tekrar açın. (Hata kodu: %1$s)" - "Operatörünüze kaydettirin (Hata kodu: %1$s)" + "Kablosuz çağrının operatörünüze kaydı sırasında hata oluştu: %1$s" "%s" @@ -160,8 +161,8 @@ "Çok fazla sayıda istek işleniyor. Daha sonra yeniden deneyin." "%1$s hesabı için oturum açma hatası" "Senk." - "Senk." - "Çok fazla %s silme var." + "Senkronize edilemiyor" + "Çok fazla sayıda %s içeriği silinmeye çalışıldı." "Tabletin depolama alanı dolu! Yer açmak için bazı dosyaları silin." "Saat depolama alanınız dolu. Lütfen yer boşaltmak için bazı dosyaları silin." "TV depolama alanı dolu. Boş alan açmak için bazı dosyaları silin." @@ -174,14 +175,13 @@ "İş profili yöneticiniz tarafından" "%s tarafından" "İş profili silindi" - "Eksik yönetici uygulaması nedeniyle iş profili silindi" "İş profili yönetici uygulaması eksik ya da bozuk. Bunun sonucunda iş profiliniz ve ilgili veriler silindi. Yardım almak için yöneticiniz ile iletişim kurun." "İş profiliniz arık bu cihazda kullanılamıyor" "Çok fazla şifre denemesi yapıldı" "Cihaz yönetiliyor" "Kuruluşunuz bu cihazı yönetmekte olup ağ trafiğini izleyebilir. Ayrıntılar için dokunun." "Cihazınız silinecek" - "Yönetim uygulaması kullanılamıyor. Cihazınız şimdi silinecek.\n\nSorularınız varsa kuruluşunuzun yöneticisine başvurun." + "Yönetim uygulaması kullanılamıyor. Cihazınız şimdi silinecek.\n\nSorularınız varsa kuruluşunuzun yöneticisine başvurun." "Yazdırma işlemi %s tarafından devre dışı bırakıldı." "Ben" "Tablet seçenekleri" @@ -236,6 +236,9 @@ "Uçak modu" "Uçak modu AÇIK" "Uçak modu KAPALI" + "Pil tasarrufu" + "Pil tasarrufu KAPALI" + "Pil tasarrufu AÇIK" "Ayarlar" "Asist" "Sesli Yardım" @@ -269,31 +272,31 @@ "İş profiline geç" "Kişiler" "kişilerinize erişme" - "<b>%1$s</b> uygulamasının kişilerinize erişmesine izin verin" + "<b>%1$s</b> uygulamasının kişilerinize erişmesine izin verilsin mi?" "Konum" "bu cihazın konumuna erişme" - "<b>%1$s</b> uygulamasının bu cihazın konumuna erişmesine izin verin" + "<b>%1$s</b> uygulamasının bu cihazın konumuna erişmesine izin verilsin mi?" "Takvim" "takviminize erişme" - "<b>%1$s</b> uygulamasının takviminize erişmesine izin verin" + "<b>%1$s</b> uygulamasının takviminize erişmesine izin verilsin mi?" "SMS" "SMS mesajları gönderme ve görüntüleme" - "<b>%1$s</b> uygulamasının SMS mesajları göndermesine ve gelen mesajları görüntülemesine izin verin" + "<b>%1$s</b> uygulamasının SMS mesajları göndermesine ve görüntülemesine izin verilsin mi?" "Depolama" "cihazınızdaki fotoğraflara, medyaya ve dosyalara erişme" - "<b>%1$s</b> uygulamasının cihazınızdaki fotoğraf, medya ve dosyalara erişmesine izin verin" + "<b>%1$s</b> uygulamasının cihazınızdaki fotoğraf, medya ve dosyalara erişmesine izin verilsin mi?" "Mikrofon" "ses kaydetme" - "<b>%1$s</b> uygulamasının ses kaydetmesine izin verin" + "<b>%1$s</b> uygulamasının ses kaydetmesine izin verilsin mi?" "Kamera" "fotoğraf çekme ve video kaydetme" - "<b>%1$s</b> uygulamasının resim çekmesine ve video kaydı yapmasına izin verin" + "<b>%1$s</b> uygulamasının resim çekmesine ve video kaydı yapmasına izin verilsin mi?" "Telefon" "telefon çağrıları yapma ve yönetme" - "<b>%1$s</b> uygulamasına telefon çağrıları yapma ve yönetme izni verin" + "<b>%1$s</b> uygulamasının telefon etmesine ve çağrıları yönetmesine izin verilsin mi?" "Vücut Sensörleri" "hayati belirtilerinizle ilgili sensör verilerine erişme" - "<b>%1$s</b> uygulamasının hayati belirtilerinizle ilgili sensör verilerine erişmesine izin verin" + "<b>%1$s</b> uygulamasının hayati belirtilerinizle ilgili sensör verilerine erişmesine izin verilsin mi?" "Pencere içeriğini alma" "Etkileşim kurduğunuz pencerenin içeriğini inceler." "Dokunarak Keşfet\'i açma" @@ -305,7 +308,7 @@ "Haraketleri yapma" "Dokunabilir, hızlıca kaydırabilir, sıkıştırabilir ve diğer hareketleri yapabilirsiniz." "Parmak izi hareketleri" - "Cihazların parmak izi sensörlerinde gerçekleştirilen hareketleri yakalayabilir." + "Cihazın parmak izi sensörlerinde gerçekleştirilen hareketleri yakalayabilir." "durum çubuğunu devre dışı bırak veya değiştir" "Uygulamaya, durum çubuğunu devre dışı bırakma ve sistem simgelerini ekleyip kaldırma izni verir." "durum çubuğunda olma" @@ -356,6 +359,8 @@ "Uygulamaya kendisinin bir bölümünü bellekte kalıcı yapma izni verir. Bu izin, diğer uygulamaların kullanabileceği belleği sınırlandırarak tabletin yavaş çalışmasına neden olabilir." "Uygulamaya, kendi parçalarını bellekte kalıcı hale getirme izni verir. Bu, TV\'yi yavaşlatan diğer uygulamaların kullanabileceği bellek alanını sınırlayabilir." "Uygulamaya kendisinin bir bölümünü bellekte kalıcı yapma izni verir. Bu izin, diğer uygulamaların kullanabileceği belleği sınırlandırarak telefonun yavaş çalışmasına neden olabilir." + "ön plan hizmetini çalıştırma" + "Uygulamanın ön plan hizmetlerinden faydalanmasına izin verir." "uygulama depolama alanını ölç" "Uygulamaya kodunu, verilerini ve önbellek boyutlarını alma izni verir" "sistem ayarlarını değiştirme" @@ -478,6 +483,8 @@ "Uygulamaya, Near Field Communication (NFC) etiketleri, kartlar ve okuyucular ile iletişim kurma izni verir." "ekran kilidimi devre dışı bırak" "Uygulamaya, tuş kilidini ve ilişkili tüm şifreli güvenlik önlemlerini devre dışı bırakma izni verir. Örneğin, telefon, çağrı alındığında tuş kilidinin devre dışı bırakır ve sonra, görüşme bittiğinde kilidi yeniden etkinleştirir." + "biyometrik donanım kullan" + "Uygulamanın kimlik doğrulama için biyometrik donanım kullanmasına izin verir" "parmak izi donanımını yönetme" "Uygulamanın, kullanılacak parmak izi şablonlarını ekleme ve silme yöntemlerini başlatmasına izin verir." "parmak izi donanımını kullanma" @@ -490,6 +497,7 @@ "Tanınmadı" + "Parmak izi kimlik doğrulaması yapıldı" "Parmak izi donanımı kullanılamıyor." "Parmak izi depolanamıyor. Lütfen mevcut parmak izlerinden birini kaldırın." "Parmak izi için zaman aşımı oluştu. Tekrar deneyin." @@ -802,6 +810,8 @@ "Desenle kilit açma." "Yüzle kilit açma." "Pin koduyla kilit açma." + "SIM PIN kilidini açın." + "SIM PUK kilidini açın." "Şifreyle kilit açma." "Desen alanı." "Kaydırma alanı." @@ -863,6 +873,12 @@ "Metin panoya kopyalandı." "Diğer" "Menü+" + "Meta+" + "Ctrl+" + "Alt+" + "Üst Karakter+" + "Sym+" + "İşlev+" "boşluk" "gir" "sil" @@ -994,14 +1010,23 @@ "Giriş yöntemi" "Metin eylemleri" "E-posta" + "Seçilen adrese e-posta gönder" "Telefon et" + "Seçilen telefon numarasını ara" "Yerini bul" + "Seçilen adresin konumunu bul" "Aç" + "Seçilen URL\'yi aç" "Mesaj" + "Seçilen telefon numarasına mesaj gönder" "Ekle" + "Kişilere ekle" "Göster" + "Seçilen zamanı takvimde göster" "Program yap" + "Seçilen zaman için etkinlik programla" "İzle" + "Seçilen uçuşu takip et" "Depolama alanı bitiyor" "Bazı sistem işlevleri çalışmayabilir" "Sistem için yeterli depolama alanı yok. 250 MB boş alanınızın bulunduğundan emin olun ve yeniden başlatın." @@ -1074,31 +1099,28 @@ "Güncellemeleri denetle" "%1$s uygulaması (%2$s işlemi) kendiliğinden uyguladığı StrictMode politikasını ihlal etti." "%1$s işlemi kendiliğinden uyguladığı StrictMode politikasını ihlal etti." - "Android yeni sürüme geçiriliyor..." - "Android başlatılıyor…" + "Telefon güncelleniyor…" + "Tablet güncelleniyor…" + "Cihaz güncelleniyor…" + "Telefon başlatılıyor…" + "Tablet başlatılıyor…" + "Cihaz başlatılıyor…" "Depolama optimize ediliyor." - "Android güncellemesi tamamlanıyor…" - "Yeni sürüme geçiş işlemi tamamlanana kadar bazı uygulamalar düzgün çalışmayabilir" + "Sistem güncellemesi tamamlanıyor…" "%1$s yeni sürüme geçiriliyor…" "%1$d/%2$d uygulama optimize ediliyor." "%1$s hazırlanıyor." "Uygulamalar başlatılıyor" "Açılış tamamlanıyor." "%1$s çalışıyor" - - - - - - - - - - - - + "Oyuna geri dönmek için dokunun" + "Oyun seçin" + "Daha iyi performans için aynı anda bu oyunlardan yalnızca biri açık olabilir." + "%1$s uygulamasına geri dön" + "%1$s uygulamasını aç" + "%1$s kaydetmeden kapanacak" "%1$s bellek sınırını aştı" - "Yığın dökümü toplandı. Paylaşmak için dokunun" + "Yığın dökümü toplandı. Paylaşmak için dokunun." "Yığın dökümü paylaşılsın mı?" "%1$s, %2$s olan işlem bellek sınırını aştı. İşlemin geliştiricisiyle paylaşabileceğiniz bir bellek yığını dökümü hazır. Dikkat: Bu bellek yığını dökümü, uygulamanın erişebildiği tüm kişisel bilgilerinizi içerebilir." "Kısa mesaj için bir işlem seçin" @@ -1133,12 +1155,12 @@ "Açık kablosuz ağa bağlanın" "Operatöre ait kablosuz ağa bağlanın" - "Açık kablosuz ağa bağlandı" + "Kablosuz ağa bağlanıyor" "Kablosuz ağa bağlanıldı" "Kablosuz ağa bağlanamadı" "Tüm ağları görmek için dokunun" "Bağlan" - "Tüm Ağlar" + "Tüm ağlar" "Kablosuz özelliği otomatik olarak açılacak" "Daha önce kaydedilmiş yüksek kaliteli bir ağın yakınında olduğunuzda" "Tekrar açılmasın" @@ -1204,6 +1226,7 @@ "Yeniden başlat" "Mobil hizmeti etkinleştirin" "Yeni SIM\'inizi etkinleştirmek için operatörün uygulamasını indirin" + "Yeni SIM\'inizi etkinleştirmek için %1$s uygulamasını indirin" "Uygulama indir" "Yeni SIM kart takıldı" "Kurmak için dokunun" @@ -1222,13 +1245,13 @@ "USB üzerinden PTP açık" "USB tethering açık" "USB üzerinden MIDI açık" - "USB aksesuarı modu açık" + "USB aksesuarı bağlandı" "Diğer seçenekler için dokunun." "Bağlı cihaz şarj ediliyor. Diğer seçenekler için dokunun." "Analog ses aksesuarı algılandı" "Takılan cihaz bu telefonla uyumlu değil. Daha fazla bilgi edinmek için dokunun." "USB hata ayıklaması bağlandı" - "USB hata ayıklama özelliğini devre dışı bırakmak için dokunun." + "USB hata ayıklama işlevini kapatmak için dokunun" "USB hata ayıklamasını devre dışı bırakmak için seçin." "Hata raporu alınıyor…" "Hata raporu paylaşılsın mı?" @@ -1247,34 +1270,35 @@ "%s, diğer uygulamaların üzerinde görüntüleniyor" "%s, diğer uygulamaların üzerinde gösteriliyor" "%s uygulamasının bu özelliği kullanmasını istemiyorsanız dokunarak ayarları açın ve özelliği kapatın." - "KAPAT" - "%s hazırlanıyor" - "Hatalar denetleniyor" - "Yeni %s algılandı" + "Kapat" + "%s kontrol ediliyor…" + "Geçerli içerik inceleniyor" + "Yeni %s" + "Ayarlamak için dokunun" "Fotoğraf ve medya aktarmak için" - "Bozuk %s" - "%s bozuk. Düzeltmek için dokunun." + "%s medyasında sorun oluştu" + "Düzeltmek için dokunun" "%s bozuk. Düzeltmek için seçin." "Desteklenmeyen %s" "Bu cihaz, bu %s ortamını desteklemiyor. Desteklenen bir biçimde kurmak için dokunun." "Bu cihaz, bu %s medyasını desteklemiyor. Desteklenen bir biçimde ayarlamak için seçin." "%s beklenmedik şekilde çıkarıldı" - "Veri kaybı olmaması için %s birimini çıkarmadan önce bağlantısını kesin" - "%s çıkarıldı" - "%s çıkarıldı; yeni bir tane takın" - "%s çıkarma işlemi devam ediyor…" - "Çıkarmayın" + "İçerik kaybı olmaması için medyayı çıkarmadan önce kaldırın" + "%s kaldırıldı" + "Bazı işlevler düzgün çalışmayabilir. Yeni depolama birimi takın." + "%s çıkarılıyor" + "Çıkarmayın" "Kur" "Çıkar" "Keşfet" "%s bulunamıyor" - "Bu cihazı yeniden yerleştirin" + "Cihazı tekrar takın" "%s taşınıyor" "Veriler taşınıyor" - "Taşıma işlemi tamamlandı" - "Veriler %s depolama birimine taşındı" - "Veriler taşınamadı" - "Orijinal konumda veri kaldı" + "İçerik aktarma işlemi tamamlandı" + "İçerik %s konumuna taşındı" + "İçerik taşınamadı" + "İçeriği taşımayı tekrar deneyin" "Kaldırıldı" "Çıkarıldı" "Kontrol ediliyor…" @@ -1333,14 +1357,14 @@ "Her zaman açık VPN\'ye bağlanılıyor…" "Her zaman açık VPN\'ye bağlanıldı" "Her zaman açık VPN bağlantı kesildi" - "Her zaman açık VPN hatası" + "Her zaman açık VPN\'ye bağlanılamadı" "Ağ veya VPN ayarlarını değiştirin" "Dosya seç" "Seçili dosya yok" "Sıfırla" "Gönder" - "Araba modu etkin" - "Araba modundan çıkmak için dokunun." + "Sürüş uygulaması çalışıyor" + "Sürüş uygulamasından çıkmak için dokunun." "Tethering veya hotspot etkin" "Ayarlamak için dokunun." "Tethering devre dışı bırakıldı" @@ -1418,22 +1442,19 @@ "%s USB sürücüsü" "USB bellek" "Düzenle" - "Veri kullanımı uyarısı" - "Kul. ve ayar. gör. için dokunun." - "2G-3G veri sınırına ulaşıldı" - "4G veri sınırına ulaşıldı" + "Veri uyarısı" + "%s veri kullandınız" "Mobil veri limitine ulaşıldı" "Kablosuz veri sınırına ulaşıldı" - "Kalan dönemde veri duraklatıldı" - "2G-3G veri limiti aşıldı" - "4G veri limiti aşıldı" - "Mobil veri limiti aşıldı" - "Kablosuz veri limiti aşıldı" - "%s, belirlenen limiti aşıyor." + "Döngünüzün kalanı için veriler duraklatıldı" + "Mobil veri sınırınızı aştınız" + "Kablosuz veri sınırınızı aştınız" + "Belirlenmiş %s sınırınızı aştınız" "Arka plan verileri kısıtlı" "Kısıtlamayı kaldır. için dokunun" - "Fazla veri kullanımı" - "Son birkaç gün içindeki veri kullanımınız normalden fazla. Kullanımı ve ayarları görüntülemek için dokunun." + "Yüksek mobil veri kullanımı" + "Uygulamalarınız normalden daha fazla veri kullandı" + "%s normalden daha fazla veri kullandı" "Güvenlik sertifikası" "Bu sertifika geçerli." "Verilen:" @@ -1669,7 +1690,7 @@ "Yöneticiniz tarafından yüklendi" "Yöneticiniz tarafından güncellendi" "Yöneticiniz tarafından silindi" - "Pil Tasarrufu özelliği, pil ömrünü iyileştirmeye yardımcı olmak için cihazınızın performansını düşürür, titreşimi, konum hizmetlerini ve arka plan verilerinin çoğunu sınırlar. Senkronizasyona dayalı olarak çalışan e-posta, mesajlaşma uygulamaları ve diğer uygulamalar, bunları açmadığınız sürece güncellenmeyebilir.\n\nCihazınız şarj olurken Pil Tasarrufu otomatik olarak kapatılır." + "Pil Tasarrufu pil ömrünü uzatmak için cihazınızın performansını azaltır, ayrıca titreşimi, konum hizmetlerini ve arka plan verileri sınırlar. Senkronizasyona dayalı olarak çalışan e-posta, mesajlaşma ve diğer uygulamalar, açılmadıkları sürece güncellenmeyebilir.\n\nCihazınız şarj olurken, Pil Tasarrufu otomatik olarak kapanır." "Veri kullanımını azaltmaya yardımcı olması için Veri Tasarrufu, bazı uygulamaların arka planda veri göndermesini veya almasını engeller. Şu anda kullandığınız bir uygulama veri bağlantısına erişebilir, ancak bunu daha seyrek yapabilir. Bu durumda örneğin, siz resimlere dokunmadan resimler görüntülenmez." "Veri Tasarrufu açılsın mı?" "Aç" @@ -1681,9 +1702,9 @@ %1$d dakika için (şu saate kadar: %2$s) 1 dakika için (şu saate kadar: %2$s) - + %1$d saat için (şu saate kadar: %2$s) - Bir saat için (şu saate kadar: %2$s) + 1 saat için (şu saate kadar: %2$s) %1$d saat için (şu saate kadar: %2$s) @@ -1697,9 +1718,9 @@ %d dakika için 1 dakika için - + %d saat için - Bir saat için + 1 saat için %d saat için @@ -1720,14 +1741,14 @@ "%1$s tarafından kapatıldı" "Cihazınızla ilgili dahili bir sorun oluştu ve fabrika verilerine sıfırlama işlemi gerçekleştirilene kadar kararsız çalışabilir." "Cihazınızla ilgili dahili bir sorun oluştu. Ayrıntılı bilgi için üreticinizle iletişim kurun." - "USSD isteği DIAL isteği olarak değiştirildi." - "USSD isteği SS isteği olarak değiştirildi." - "USSD isteği yeni USSD isteği olarak değiştirildi." - "USSD isteği Video DIAL isteği olarak değiştirildi." - "SS isteği DIAL isteği olarak değiştirildi." - "SS isteği, Video DIAL isteği olarak değiştirildi." - "SS isteği USSD isteği olarak değiştirildi." - "SS isteği yeni SS isteği olarak değiştirildi." + "USSD isteği normal çağrı olarak değişti" + "USSD isteği SS isteği olarak değişti" + "Yeni USSD isteği olarak değişti" + "USSD isteği görüntülü çağrı olarak değişti" + "SS isteği normal çağrı olarak değişti" + "SS isteği görüntülü görüşme olarak değişti" + "SS isteği USSD isteği olarak değişti" + "Yeni SS isteği olarak değişti" "İş profili" "Genişlet" "Daralt" @@ -1825,6 +1846,10 @@ "Ses için SIM\'in temel hazırlığı yapılmadı" "Ses için SIM\'e izin verilmiyor" "Ses için telefona izin verilmiyor" + "%d numaralı SIM karta izin verilmiyor" + "%d numaralı SIM kart sağlanmadı" + "%d numaralı SIM karta izin verilmiyor" + "%d numaralı SIM karta izin verilmiyor" "Pop-up Pencere" "+ %1$d" "Uygulama eski sürümüne geçirildi veya bu kısayol ile uyumlu değil" @@ -1837,7 +1862,14 @@ "Zararlı uygulama tespit edildi" "%1$s uygulaması, %2$s dilimlerini göstermek istiyor" "Düzenle" + "Çağrılar ve bildirimler titreşim yapacak" + "Çağrılar ve bildirimlerin sesi kapalı olacak" "Sistem değişiklikleri" + "Rahatsız Etmeyin" + "Konsantre olmanıza yardımcı olmak için, Rahatsız Etmeyin ayarı bildirimleri gizliyor" + "Yeni davranış bu şekildedir. Değiştirmek için dokunun." "Rahatsız Etmeyin modu değişti" - "Kesintilerle ilgili davranış ayarlarınızı kontrol etmek için dokunun" + "Nelerin engellendiğini kontrol etmek için dokunun." + "Sistem" + "Ayarlar" diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index 61f74bf684a7a567f587bb162b662ef1c71e38ae..e031539028c00c617e66b68251e37769a5febd4c 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -79,15 +79,16 @@ "Ідентиф. абонента за умовч. не обмеж. Наст. дзвінок: не обмежений" "Службу не ініціалізовано." "Ви не можете змінювати налаштування ідентифікатора абонента." - "Немає мобільного Інтернету" - "Екстрені виклики заблоковано" + "Службу передавання мобільних даних заблоковано" + "Екстрені виклики недоступні" "Немає голосової служби" - "Немає голосової/екстреної служби" - "Тимчасово не пропонується мобільною мережею у вашому місцезнаходженні" - "Не вдається під’єднатися до мережі" - "Щоб покращити прийняття сигналу, змініть тип у меню \"Налаштування\" > \"Мережа й Інтернет\" > \"Мобільні мережі\" > \"Тип мережі\"." - "Виклики через Wi-Fi активовано" - "Щоб здійснювати екстрені виклики, потрібне з’єднання з мобільною мережею." + "Голосову службу й екстрені виклики заблоковано" + "Оператор тимчасово вимкнув службу" + "Оператор тимчасово вимкнув службу для SIM-карти %d" + "Не вдається під’єднатися до мобільної мережі" + "Спробуйте змінити вибрану мережу. Торкніться, щоб це зробити." + "Екстрені виклики недоступні" + "Не можна здійснювати екстрені виклики через Wi-Fi" "Сповіщення" "Переадресація виклику" "Режим екстреного зворотного виклику" @@ -122,12 +123,12 @@ "Банер роум-гу ввімк." "Банер роум-гу вимк." "Пошук служби" - "Дзвінок через Wi-Fi" + "Не вдалося налаштувати дзвінки через Wi‑Fi" "Щоб телефонувати або надсилати повідомлення через Wi-Fi, спершу попросіть свого оператора налаштувати цю послугу. Після цього знову ввімкніть дзвінки через Wi-Fi у налаштуваннях. (Код помилки: %1$s)" - "Зареєструйтеся в оператора (код помилки: %1$s)" + "Проблема з реєстрацією дзвінків через Wi‑Fi у вашого оператора: %1$s" "%s" @@ -162,8 +163,8 @@ "Обробляється забагато запитів. Спробуйте пізніше." "Помилка входу для облікового запису %1$s" "Синхр." - "Синхр." - "Забагато видалень %s." + "Не вдалося синхронізувати" + "Спроба видалити забагато вмісту %s." "Пам’ять планшетного ПК заповнено. Видаліть якісь файли, щоб звільнити місце." "Пам’ять годинника заповнено. Видаліть файли, щоб звільнити місце." "Пам’ять телевізора заповнено. Видаліть файли, щоб звільнити місце." @@ -178,14 +179,13 @@ "Адміністратор робочого профілю" "Доменом %s" "Робочий профіль видалено" - "Робочий профіль видалено через відсутність додатка адміністратора" "Додаток адміністратора в робочому профілі відсутній або пошкоджений. У результаті ваш робочий профіль і пов’язані з ним дані видалено. Зверніться до свого адміністратора по допомогу." "Робочий профіль більше не доступний на цьому пристрої" "Забагато спроб ввести пароль" "Пристрій контролюється" "Адміністратор вашої організації контролює цей пристрій і відстежує мережевий трафік. Торкніться, щоб дізнатися більше." "З вашого пристрою буде стерто всі дані" - "Не можна використовувати цей додаток адміністратора. На пристрої буде відновлено заводські налаштування.\n\nЯкщо у вас є запитання, зв’яжіться з адміністратором організації." + "Не можна запускати додаток для адміністраторів. Буде відновлено заводські налаштування пристрою.\n\nЯкщо у вас є запитання, зв’яжіться з адміністратором своєї організації." "Додаток %s вимкнув друк." "Я" "Парам. пристрою" @@ -242,6 +242,9 @@ "Режим польоту" "Режим польоту ВВІМК." "Режим польоту ВИМК." + "Режим економії заряду акумулятора" + "Режим економії заряду акумулятора ВИМКНЕНО" + "Режим економії заряду акумулятора ВВІМКНЕНО" "Налаштування" "Підказки" "Голос. підказки" @@ -275,31 +278,31 @@ "Перейти в робочий профіль" "Контакти" "отримувати доступ до контактів" - "Надати додатку <b>%1$s</b> доступ до контактів" + "Надати додатку <b>%1$s</b> доступ до контактів?" "Геодані" "доступ до геоданих пристрою" - "Надати додатку <b>%1$s</b> доступ до геоданих пристрою" + "Надати додатку <b>%1$s</b> доступ до геоданих пристрою?" "Календар" "отримувати доступ до календаря" - "Надати додатку <b>%1$s</b> доступ до календаря" + "Надати додатку <b>%1$s</b> доступ до календаря?" "SMS" "надсилати та переглядати SMS-повідомлення" - "Дозволити додатку <b>%1$s</b> надсилати та переглядати SMS-повідомлення" + "Дозволити додатку <b>%1$s</b> надсилати та переглядати SMS?" "Зберігання" "отримувати доступ до фотографій, мультимедійного вмісту та файлів на вашому пристрої" - "Надати додатку <b>%1$s</b> доступ до фото, медіа та файлів на пристрої" + "Надати додатку <b>%1$s</b> доступ до фото, медіа та файлів на пристрої?" "Мікрофон" "записувати аудіо" - "Дозволити додатку <b>%1$s</b> записувати аудіо" + "Дозволити додатку <b>%1$s</b> записувати аудіо?" "Камера" "фотографувати та записувати відео" - "Дозволити додатку <b>%1$s</b> робити знімки та записувати відео" + "Дозволити додатку <b>%1$s</b> робити знімки та записувати відео?" "Телефон" "телефонувати та керувати дзвінками" - "Дозволити додатку <b>%1$s</b> здійснювати телефонні виклики та керувати ними" + "Дозволити додатку <b>%1$s</b> здійснювати телефонні дзвінки та керувати ними?" "Датчики на тілі" "отримувати доступ до інформації датчиків про ваші життєві показники" - "Надати додатку <b>%1$s</b> доступ до життєвих показників із датчиків" + "Надати додатку <b>%1$s</b> доступ до життєвих показників із датчиків?" "Отримувати вміст вікна" "Перевіряти вміст вікна, з яким ви взаємодієте." "Увімкнути функцію дослідження дотиком" @@ -311,7 +314,7 @@ "Виконання жестів" "Можна торкатися, проводити пальцем, стискати пальці та виконувати інші жести." "Жести на сканері відбитків пальців" - "Фіксуються жести на сканері відбитків пальців." + "Може фіксувати жести на сканері відбитків пальців." "вимикати чи змін. рядок стану" "Дозволяє програмі вимикати рядок стану чи додавати та видаляти піктограми системи." "відображатися як рядок стану" @@ -362,6 +365,8 @@ "Дозволяє програмі робити свої частини сталими в пам’яті. Це може зменшувати обсяг пам’яті, доступної для інших програм, і сповільнювати роботу планшетного ПК." "Додаток може робити свої частини сталими в пам’яті. Це може зменшувати обсяг пам’яті, доступної для інших додатків, і сповільнювати роботу телевізора." "Дозволяє програмі робити свої частини сталими в пам’яті. Це може зменшувати обсяг пам’яті, доступної для інших програм, і сповільнювати роботу телефону." + "запускати пріоритетну службу" + "Додаток може використовувати пріоритетні служби." "визначати об’єм пам’яті програми" "Дозволяє програмі отримувати її код, дані та розміри кеш-пам’яті" "змінювати налаштування системи" @@ -484,6 +489,8 @@ "Дозволяє програмі обмінюватися даними з тегами, картками та читачами екрана Near Field Communication (NFC)." "вимикати блокування екрана" "Дозволяє програмі вимикати блокування клавіатури та будь-який пов’язаний паролем захист. Наприклад: телефон вимикає блокування клавіатури під час отримання вхідного дзвінка, після закінчення якого блокування клавіатури відновлюється." + "використовувати біометричне апаратне забезпечення" + "Додаток може використовувати біометричне апаратне забезпечення для автентифікації" "керувати апаратним забезпеченням для цифрових відбитків" "Увімкнути в додатку функції для додавання й видалення шаблонів цифрових відбитків." "використання сканера цифрових відбитків" @@ -496,6 +503,7 @@ "Не розпізнано" + "Відбиток автентифіковано" "Апаратне забезпечення для сканування відбитка недоступне." "Не вдалося зберегти відбиток. Видаліть наявний відбиток." "Час очікування відбитка минув. Повторіть спробу." @@ -808,6 +816,8 @@ "Розблокування ключем." "Фейсконтроль" "Розблокування PIN-кодом." + "Розблокування SIM-карти PIN-кодом." + "Розблокування SIM-карти PUK-кодом." "Розблокування паролем." "Область ключа." "Область повзунка." @@ -869,6 +879,12 @@ "Текст скопійов. в буф. обм." "Більше" "Меню+" + "Meta+" + "Ctrl+" + "Alt+" + "Shift+" + "Sym+" + "Function+" "пробіл" "enter" "delete" @@ -1034,14 +1050,23 @@ "Метод введення" "Дії з текстом" "Електронна пошта" + "Надіслати електронний лист на вибрану адресу" "Зателефонувати" + "Набрати вибраний номер телефону" "Знайти" + "Знайти вибрану адресу на картах" "Відкрити" + "Відкрити вибрану URL-адресу" "Повідомлення" + "Надіслати повідомлення за вибраним номером телефону" "Додати" + "Додати в контакти" "Переглянути" + "Переглянути вибраний час у календарі" "Запланувати" + "Запланувати подію на вибраний час" "Відстежити" + "Відстежувати вибраний авіарейс" "Закінчується пам’ять" "Деякі системні функції можуть не працювати" "Недостатньо місця для системи. Переконайтесь, що на пристрої є 250 МБ вільного місця, і повторіть спробу." @@ -1114,31 +1139,28 @@ "Шукати оновлення" "Програма %1$s (процес %2$s) порушила свою самозастосовну політику StrictMode." "Процес %1$s порушив свою самозастосовну політику StrictMode." - "Android оновлюється..." - "Запуск ОС Android…" + "Телефон оновлюється…" + "Планшет оновлюється…" + "Пристрій оновлюється…" + "Телефон запускається…" + "Планшет запускається…" + "Пристрій запускається…" "Оптимізація пам’яті." - "Завершується оновлення Android…" - "Деякі додатки можуть не працювати належним чином, доки не завершиться оновлення" + "Завершується оновлення системи…" "Додаток %1$s оновлюється…" "Оптимізація програми %1$d з %2$d." "Підготовка додатка %1$s." "Запуск програм." "Завершення завантаження." "Працює %1$s" - - - - - - - - - - - - + "Торкніться, щоб повернутися в гру" + "Виберіть гру" + "Щоб підвищити продуктивність, відкривайте лише одну гру." + "Назад у додаток %1$s" + "Відкрийте додаток %1$s" + "%1$s закриється без зберігання" "Процес %1$s перевищив ліміт пам’яті" - "Дані динамічної пам’яті зібрано. Торкніться, щоб поділитися" + "Дані динамічної пам’яті зібрано. Торкніться, щоб надіслати." "Поділитися даними динамічної пам’яті?" "Процес %1$s перевищив ліміт пам’яті (%2$s). Ви можете поділитися даними динамічної пам’яті з розробником. Увага: ці дані можуть містити вашу особисту інформацію, до якої має доступ додаток." "Виберіть дію для тексту" @@ -1177,12 +1199,12 @@ "Під’єднайтеся до відкритої мережі Wi-Fi" "Під’єднайтеся до мережі Wi-Fi оператора" - "Під’єднання до відкритої мережі Wi-Fi" + "З’єднання з мережею Wi-Fi" "Під’єднано до мережі Wi-Fi" "Не вдалося під’єднатися до мережі Wi-Fi" "Торкніться, щоб побачити всі мережі" "Під’єднатися" - "Усі мережі" + "Усі мережі" "Wi-Fi вмикатиметься автоматично" "Коли ви поблизу збереженої мережі високої якості" "Не вмикати знову" @@ -1248,6 +1270,7 @@ "Перезапуск" "Активувати мобільну службу" "Завантажити додаток оператора, щоб активувати нову SIM-карту" + "Щоб активувати нову SIM-карту, завантажте додаток %1$s" "Завантажити додаток" "Вставлено нову SIM-карту" "Торкніться, щоб налаштувати" @@ -1266,13 +1289,13 @@ "Режим PTP через USB ввімкнено" "Режим USB-модема ввімкнено" "Режим MIDI через USB ввімкнено" - "Режим USB-аксесуара ввімкнено" + "Під’єднано USB-аксесуар" "Торкніться, щоб переглянути більше опцій." "Під’єднаний пристрій заряджається. Торкніться, щоб побачити більше опцій." "Виявлено аналоговий аксесуар для аудіо" "Під’єднаний пристрій несумісний із цим телефоном. Торкніться, щоб дізнатися більше." "Налагодження USB завершено" - "Торкніться, щоб вимкнути налагодження USB." + "Торкніться, щоб вимкнути налагоджувач USB" "Виберіть, щоб вимкнути налагодження за USB" "Створюється повідомлення про помилку…" "Надіслати звіт про помилку?" @@ -1291,34 +1314,35 @@ "Додаток %s відображається поверх інших додатків" "%s відображається поверх інших додатків" "Щоб у додатку %s не працювала ця функція, вимкніть її в налаштуваннях." - "ВИМКНУТИ" - "Підготовка пристрою пам’яті %s" - "Виявлення помилок" - "Виявлено новий пристрій пам’яті (%s)" + "Вимкнути" + "Перевіряється %s…" + "Перевірка поточного вмісту" + "Новий пристрій пам’яті (%s)" + "Торкніться, щоб налаштувати" "Для перенесення фотографій і медіафайлів" - "%s не підключається" - "Носій (%s) пошкоджено. Торкніться, щоб виправити." + "Проблема з носієм (%s)" + "Торкніться, щоб виправити" "Пристрій %s пошкоджено. Виберіть, щоб виправити." "%s не підтримується" "%s не підтримується цим пристроєм. Торкніться, щоб налаштувати підтримуваний формат." "%s не підтримується на цьому пристрої. Виберіть, щоб налаштувати в підтримуваному форматі." "%s несподівано вийнято" - "Перш ніж виймати пристрій пам’яті %s, відключіть його, щоб не втратити дані" - "Ви вийняли пристрій пам’яті %s" - "Ви вийняли пристрій пам’яті %s. Вставте новий пристрій" - "Відключення пристрою пам’яті %s…" - "Не виймайте пристрій пам’яті" + "Перш ніж виймати носій, відключіть його, щоб не втратити вміст" + "Пристрій пам’яті (%s) вийнято" + "Деякі функції можуть не працювати належним чином. Вставте новий пристрій пам’яті." + "%s відключається…" + "Не виймайте пристрій пам’яті" "Налаштувати" "Відключити" "Переглянути" "Немає пристрою %s" - "Вийміть і вставте пристрій" + "Вставте пристрій знову" "Переміщення додатка %s" "Переміщення даних" - "Дані переміщено" - "Дані переміщено на пристрій %s" - "Не вдалося перемістити дані" - "Дані не переміщено" + "Вміст перенесено" + "Вміст перенесено на пристрій пам’яті (%s)" + "Не вдалося перенести вміст" + "Спробуйте перенести вміст знову" "Вийнято" "Відключено" "Перевірка…" @@ -1377,14 +1401,14 @@ "Під’єднання до постійної мережі VPN…" "Під’єднано до постійної мережі VPN" "Від’єднано від постійної мережі VPN" - "Помилка постійної мережі VPN" + "Не вдалося під’єднати пристрій до постійної мережі VPN" "Змінити налаштування мережі або VPN" "Виберіть файл" "Не вибрано файл" "Скинути" "Надіслати" - "Режим авто ввімкн." - "Торкніться, щоб вийти з режиму автомобіля." + "Працює додаток для автомобілів" + "Торкніться, щоб вийти з додатка для автомобілів." "Прив\'язка чи точка дост. активна" "Торкніться, щоб налаштувати." "Використання телефона в режимі модема вимкнено" @@ -1464,22 +1488,19 @@ "Носій USB (%s)" "Носій USB" "Редагувати" - "Сповіщення про використ. трафіку" - "Переглянути дані та параметри." - "Досягнуто ліміту даних 2G–3G" - "Досягнуто ліміту даних 4G" + "Застереження про передавання даних" + "Ви використали %s даних" "Досягнуто ліміту моб. трафіку" "Досягнуто ліміту даних Wi-Fi" - "Передавання даних призупинено" - "Перевищено ліміт даних 2G–3G" - "Перевищено ліміт даних 4G" - "Перевищено ліміт мобільних даних" - "Перевищено ліміт даних Wi-Fi" - "%s – понад указаний ліміт." + "Передавання даних призупинено до кінця циклу" + "Перевищено ліміт мобільного передавання даних" + "Перевищено ліміт передавання даних через Wi-Fi" + "Ви перевищили ліміт на %s" "Викор-ня фонових даних обмежено" "Скасувати обмеження." - "Надмірне використання трафіку" - "За останні кілька днів ви використовуєте більше трафіку, ніж зазвичай. Торкніться, щоб переглянути дані й налаштування." + "Надмірне мобільне передавання даних" + "Додатки використали більше даних, ніж зазвичай" + "Додаток %s використав більше даних, ніж зазвичай" "Сертифікат безпеки" "Цей сертифікат дійсний." "Кому видано:" @@ -1719,7 +1740,7 @@ "Установлено адміністратором" "Оновлено адміністратором" "Видалено адміністратором" - "Щоб подовжити час роботи акумулятора, у режимі економії заряду акумулятора знижується продуктивність пристрою й обмежуються вібрація, функції служб локації та фоновий режим обміну даними. Електронна пошта, чати й інші додатки, які синхронізуються, можуть не оновлюватися, доки ви їх не відкриєте.\n\nРежим економії заряду акумулятора автоматично вимикається під час заряджання пристрою." + "Щоб пристрій працював довше, у режимі економії заряду акумулятора знижується його продуктивність і обмежуються або вимикаються вібрація, служби локації й фоновий режим обміну даними. Електронна пошта, чати й інші додатки, які мають синхронізуватися, можуть не оновлюватися, доки ви їх не відкриєте.\n\nРежим економії заряду акумулятора автоматично вимикається під час заряджання пристрою." "Щоб зменшити використання трафіку, функція \"Заощадження трафіку\" не дозволяє деяким додаткам надсилати чи отримувати дані у фоновому режимі. Поточний додаток зможе отримувати доступ до таких даних, але рідше. Наприклад, зображення не відображатиметься, доки ви не торкнетеся його." "Увімкнути Заощадження трафіку?" "Увімкнути" @@ -1735,7 +1756,7 @@ Протягом %1$d хв (до %2$s) Протягом %1$d хв (до %2$s) - + %1$d годину (до %2$s) %1$d години (до %2$s) %1$d годин (до %2$s) @@ -1759,7 +1780,7 @@ Протягом %d хв Протягом %d хв - + %d годину %d години %d годин @@ -1786,14 +1807,14 @@ "%1$s вимикає звук" "Через внутрішню помилку ваш пристрій може працювати нестабільно. Відновіть заводські налаштування." "На пристрої сталася внутрішня помилка. Зв’яжіться з виробником пристрою, щоб дізнатися більше." - "Запит USSD перетворено на запит DIAL." - "Запит USSD перетворено на запит SS." - "Запит USSD перетворено на новий запит USSD." - "Запит USSD перетворено на запит Video DIAL." - "Запит SS перетворено на запит DIAL." - "Запит SS перетворено на запит Video DIAL." - "Запит SS перетворено на запит USSD." - "Запит SS перетворено на новий запит SS." + "Запит USSD змінено на звичайний виклик" + "Запит USSD змінено на запит SS" + "Змінено на новий запит USSD" + "Запит USSD змінено на відеовиклик" + "Запит SS змінено на звичайний виклик" + "Запит SS змінено на відеовиклик" + "Запит SS змінено на запит USSD" + "Змінено на новий запит SS" "Робочий профіль" "Розгорнути" "Згорнути" @@ -1895,6 +1916,10 @@ "Не вказано SIM-карту для голосових дзвінків" "Голосові дзвінки із SIM-карти заборонено" "Голосові дзвінки з телефона заборонено" + "SIM-карту %d заборонено" + "SIM-карту %d не ініціалізовано" + "SIM-карту %d заборонено" + "SIM-карту %d заборонено" "Спливаюче вікно" "+ %1$d" "Версія додатка застаріла або несумісна з цим ярликом" @@ -1907,7 +1932,14 @@ "Виявлено шкідливий додаток" "%1$s хоче показати фрагменти додатка %2$s" "Редагувати" + "Вібросигнал для викликів і сповіщень увімкнено" + "Звуковий сигнал для викликів і сповіщень вимкнено" "Системні зміни" + "Не турбувати" + "У режимі \"Не турбувати\" сповіщення ховаються, щоб ви могли зосередитись" + "Це нова поведінка. Торкніться, щоб змінити." "Налаштування режиму \"Не турбувати\" змінено" - "Торкніться, щоб перевірити налаштування сповіщень" + "Торкніться, щоб перевірити, що заблоковано." + "Система" + "Налаштування" diff --git a/core/res/res/values-ur/strings.xml b/core/res/res/values-ur/strings.xml index cb5646915e7aebfac88352b1e3d7a1012e0baad1..5c046ee382f2998bc73362989865e2fe13fd0a93 100644 --- a/core/res/res/values-ur/strings.xml +++ b/core/res/res/values-ur/strings.xml @@ -82,6 +82,8 @@ "کوئی صوتی سروس نہیں" "کوئی صوتی سروس یا ہنگامی کالنگ دستیاب نہیں ہے" "آپ کے کیریئر نے عارضی طور پر آف کر دیا ہے" + + "موبائل نیٹ ورک تک رسائی نہیں ہو سکتی" "ترجیحی نیٹ ورک تبدیل کر کے دیکھیں۔ تبدیل کرنے کے لیے تھپتھپائیں۔" "ہنگامی کالنگ دستیاب نہیں ہے" @@ -120,12 +122,13 @@ "رومنگ بینر آن ہے" "رومنگ بینر آف" "سروس کی تلاش کر رہا ہے" - - + "‏Wi‑Fi کالنگ کو ترتیب نہیں دیا جا سکا" "‏Wi-Fi سے کالز کرنے اور پیغامات بھیجنے کے لیے، پہلے اپنے کیریئر سے اس سروس کو سیٹ اپ کرنے کے لیے کہیں۔ پھر ترتیبات سے دوبارہ Wi-Fi کالنگ آن کریں۔ (خراب کوڈ: %1$s)" - + + "‏آپ کے کیریئر کے ساتھ Wi‑Fi کالنگ رجسٹر کرنے میں مسئلہ درپیش ہے: %1$s" + "‎%s" "‏‎%s Wi-Fi کالنگ" @@ -159,10 +162,8 @@ "کافی زیادہ درخواستوں پر کارروائی کی جا رہے ہے۔ بعد میں دوبارہ کوشش کریں۔" "%1$s کیلئے سائن ان کی خرابی" "مطابقت پذیری کریں" - - - - + "مطابقت پذیر نہیں کر سکا" + "بہت زیادہ %s حذف کرنی کی کوشش کی گئی" "ٹیبلیٹ اسٹوریج بھرا ہوا ہے. جگہ خالی کرنے کیلئے کچھ فائلیں حذف کریں۔" "دیکھنے کا اسٹوریج بھرا ہوا ہے۔ جگہ خالی کرنے کیلئے کچھ فائلیں حذف کریں۔" "‏TV اسٹوریج بھرا ہوا ہے۔ جگہ خالی کرنے کیلئے کچھ فائلیں حذف کریں۔" @@ -272,40 +273,31 @@ "دفتری پروفائل پر سوئچ کریں" "رابطے" "اپنے رابطوں تک رسائی حاصل کریں" - - + "‏<b>%1$s</b> کو آپ کے رابطوں تک رسائی کی اجازت دیں؟" "مقام" "اس آلہ کے مقام تک رسائی حاصل کریں" - - + "‏<b>%1$s</b> کو اس آلہ کے مقام تک رسائی کی اجازت دیں؟" "کیلنڈر" "اپنے کیلنڈر تک رسائی حاصل کریں" - - + "‏<b>%1$s</b> کو آپ کے کیلنڈر تک رسائی کی اجازت دیں؟" "SMS" "‏SMS پیغامات بھیجیں اور دیکھیں" - - + "‏<b>%1$s</b> کو SMS پیغامات بھیجنے اور انہیں ملاحظہ کرنے کی اجازت دیں؟" "اسٹوریج" "اپنے آلہ پر تصاویر، میڈیا اور فائلوں تک رسائی حاصل کریں" - - + "‏<b>%1$s</b> کو آپ کے آلہ پر تصاویر، میڈیا اور فائلوں تک رسائی کی اجازت دیں؟" "مائکروفون" "آڈیو ریکارڈ کریں" - - + "‏<b>%1$s</b> کو آڈیو ریکارڈ کرنے کی اجازت دیں؟" "کیمرا" "تصاویر لیں اور ویڈیو ریکارڈ کریں" - - + "‏<b>%1$s</b> کو تصاویر لینے اور ویڈیو ریکارڈ کرنے کی اجازت دیں؟" "فون" "فون کالز کریں اور ان کا نظم کریں" - - + "‏</b>%1$s</b> کو فون کالز کرنے اور ان کا نظم کرنے کی اجازت دیں؟" "جسم سینسرز" "اپنی علامات حیات کے متعلق سنسر ڈیٹا تک رسائی حاصل کریں" - - + "‏<b>%1$s</b> کو آپ کے اہم اشاروں کے متعلق سینسر ڈیٹا تک رسائی کی اجازت دیں؟" "ونڈو مواد بازیافت کرنے کی" "کسی ایسی ونڈو کے مواد کا معائنہ کریں جس کے ساتھ آپ تعامل کر رہے ہیں۔" "ٹچ کے ذریعے دریافت کریں کو آن کرنے کی" @@ -492,6 +484,10 @@ "‏ایپ کو Near Field Communication (NFC)‎ ٹیگز، کارڈز اور ریڈرز کے ساتھ مواصلت کرنے کی اجازت دیٹا ہے۔" "اپنے اسکرین لاک کو غیر فعال کریں" "ایپ کو کلیدی لاک اور کسی بھی متعلقہ پاس ورڈ سیکیورٹی کو غیر فعال کرنے کی اجازت دیتا ہے۔ مثلاً، کوئی آنے والی فون کال موصول ہونے کے وقت فون کلیدی لاک کو غیر فعال کرتا ہے، پھر کال پوری ہوجانے پر کلیدی لاک کو دوبارہ فعال کردیتا ہے۔" + + + + "فنگر پرنٹ ہارڈ ویئر کا نظم کریں" "ایپ کو استعمال کیلئے فنگر پرنٹ کی تمثیلات شامل کرنے اور حذف کرنے کیلئے طریقوں کو کالعدم قرار دینے کی اجازت دیتا ہے۔" "فنگر پرنٹ ہارڈ ویئر استعمال کریں" @@ -504,6 +500,8 @@ "تسلیم شدہ نہیں ہے" + + "فنگر پرنٹ ہارڈ ویئر دستیاب نہیں ہے۔" "فنگر پرنٹ اسٹور نہیں کیا جا سکتا ہے۔ براہ کرم ایک موجودہ فنگر پرنٹ ہٹائیں۔" "فنگر پرنٹ کی میعاد ختم ہوگئی۔ دوبارہ کوشش کریں۔" @@ -1016,14 +1014,32 @@ "اندراج کا طریقہ" "متن کی کارروائیاں" "ای میل" + + "کال کریں" + + "پتا لگائیں" + + "کھولیں" + + "پیغام" + + "شامل کریں" + + "دیکھیں" + + "شیڈول کریں" + + "پتہ لگائیں" + + "اسٹوریج کی جگہ ختم ہو رہی ہے" "ممکن ہے سسٹم کے کچھ فنکشنز کام نہ کریں" "‏سسٹم کیلئے کافی اسٹوریج نہیں ہے۔ اس بات کو یقینی بنائیں کہ آپ کے پاس 250MB خالی جگہ ہے اور دوبارہ شروع کریں۔" @@ -1117,8 +1133,7 @@ "%1$s کھوليں" "%1$s محفوظ کیے بغیر بند ہو جائے گی" "%1$s میموری کی حد سے تجاوز کرگئی" - - + "ہیپ ڈمپ جمع ہو گیا ہے۔ اشتراک کرنے کیلئے تھپتھپائیں۔" "ہیپ ڈمپ کا اشتراک کریں؟" "کارروائی %1$s اپنی کارروائی کی میموری کی حد %2$s سے تجاوز کر گئی ہے۔ آپ کیلئے ایک ہیپ ڈمپ اس کے ڈیولپر سے اشتراک کرنے کیلئے دستیاب ہے۔ احتیاط برتیں: اس ہیپ ڈمپ میں آپ کی ایسی ذاتی معلومات میں سے کوئی بھی شامل ہو سکتی ہے جس تک ایپلیکیشن کو رسائی ہے۔" "متن کیلئے ایک کارروائی منتخب کریں" @@ -1153,8 +1168,7 @@ "‏عوامی Wi‑Fi نیٹ ورک سے منسلک ہوں" "‏کیریئر Wi‑Fi نیٹ ورک سے منسلک ہوں" - - + "‏Wi‑Fi نیٹ ورک سے منسلک ہو رہا ہے" "‏عوامی Wi‑Fi نیٹ ورک سے منسلک ہو گيا" "‏Wi‑Fi نیٹ ورک سے منسلک نہیں ہو سکا" "تمام نیٹ ورکس دیکھنے کیلئے تھپتھپائيں" @@ -1271,33 +1285,49 @@ "%s دیگر ایپس پر ڈسپلے ہو رہی ہے" "اگر آپ نہیں چاہتے ہیں کہ %s اس خصوصیت کا استعمال کرے تو ترتیبات کھولنے کیلئے تھپتھپائیں اور اسے بند کریں۔" "آف کریں" - "%s تیار کیا جا رہا ہے" - "خرابیوں کیلئے چیک کیا جا رہا ہے" - "نئے %s کا پتا چلا" + + + + + + + + "تصاویر اور میڈیا منتقل کرنے کیلئے" - "خراب شدہ %s" - "%s خراب ہے۔ اسے ٹھیک کرنے کیلئے تھپتھپائیں۔" - "%s خراب ہے۔ اسے ٹھیک کرنے کیلئے منتخب کریں۔" + + + + "غیر تعاون یافتہ %s" "یہ آلہ %s کو سپورٹ نہیں کرتا۔ ایک سپورٹ یافتہ فارمیٹ میں سیٹ اپ کرنے کیلئے تھپتھپائیں۔" "یہ آلہ اس %s کو سپورٹ نہیں کرتا ہے۔ ایک سپورٹ یافتہ فارمیٹ میں سیٹ اپ کرنے کیلئے منتخب کریں۔" "%s غیر متوقع طور پر ہٹا دیا گیا" - "ڈیٹا ضائع ہونے سے بچانے کیلئے ہٹانے سے پہلے %s کو اَن ماؤنٹ کریں" - "%s کو ہٹا دیا گیا" - "%s کو ہٹا دیا گیا؛ ایک نیا داخل کریں" - "ابھی بھی %s کو خارج کر رہا ہے…" - "نہ ہٹائیں" + + + + + + + + + + "سیٹ اپ کریں" "خارج کریں" "دریافت کریں" "%s غائب ہے" - "اس آلہ کو دوبارہ داخل کریں" + + "%s کو منتقل کیا جا رہا ہے" "ڈیٹا منتقل کیا جا رہا ہے…" - "منتقل کرنا مکمل ہوگیا" - "ڈیٹا کو %s پر منتقل کر دیا گیا" - "ڈیٹا منتقل نہیں کیا جا سکا" - "ڈیٹا اصل جگہ پر باقی ہے" + + + + + + + + "ہٹا دیا گیا" "اخراج شدہ" "چیک کیا جا رہا ہے…" @@ -1356,17 +1386,14 @@ "‏ہمیشہ آن VPN مربوط ہو رہا ہے…" "‏ہمیشہ آن VPN مربوط ہوگیا" "‏ہمیشہ آن VPN سے غیر منسلک ہو گيا" - - + "‏ہمیشہ آن VPN سے منسلک نہیں کیا جا سکا" "‏نیٹ ورک یا VPN کی ترتیبات تبدیل کریں" "فائل منتخب کریں" "کوئی فائل منتخب نہیں کی گئی" "دوبارہ ترتیب دیں" "جمع کرائیں" - - - - + "ڈرائیونگ ایپ چل رہی ہے" + "ڈرائیونگ ایپ سے باہر نکلنے کے لئے تھپتھپائيں۔" "ٹیدرنگ یا ہاٹ اسپاٹ فعال" "سیٹ اپ کرنے کیلئے تھپتھپائیں۔" "ٹیدرنگ غیر فعال ہے" @@ -1692,8 +1719,7 @@ "آپ کے منتظم کے ذریعے انسٹال کیا گیا" "آپ کے منتظم کے ذریعے اپ ڈیٹ کیا گیا" "آپ کے منتظم کے ذریعے حذف کیا گیا" - - + "بیٹری لائف کی توسیع کیلئے، بیٹری سیور آپ کے آلہ کی کارکردگی میں تخفیف کر دیتی ہے اور وائبریشن، مقام کی سروسز اور پس منظر کے ڈیٹا کو محدود کر دیتی ہے یا بند کر دیتی ہے۔ ای میل، پیغام رسانی اور مطابقت پذیری پر انحصار کرنے والی دیگر ایپس ممکن ہے اس وقت تک اپ ڈیٹ نہ ہوں جب تک آپ انہیں نہ کھولیں۔\n\nآپ کا آلہ چارج ہوتے وقت بیٹری سیور خود بخود آف ہو جاتی ہے۔" "ڈیٹا کے استعمال کو کم کرنے میں مدد کیلئے، ڈیٹا سیور پس منظر میں کچھ ایپس کو ڈیٹا بھیجنے یا موصول کرنے سے روکتا ہے۔ آپ جو ایپ فی الحال استعمال کر رہے ہیں وہ ڈیٹا پر رسائی کر سکتی ہے مگر ہو سکتا ہے ایسا زیادہ نہ ہو۔ اس کا مطلب مثال کے طور پر یہ ہو سکتا ہے کہ تصاویر تھپتھپانے تک ظاہر نہ ہوں۔" "ڈیٹا سیور آن کریں؟" "آن کریں" @@ -1744,22 +1770,14 @@ "%1$s کے ذریعے خاموش کردہ" "آپ کے آلہ میں ایک داخلی مسئلہ ہے اور جب تک آپ فیکٹری ڈیٹا کو دوبارہ ترتیب نہیں دے دیتے ہیں، ہوسکتا ہے کہ یہ غیر مستحکم رہے۔" "آپ کے آلہ میں ایک داخلی مسئلہ ہے۔ تفصیلات کیلئے اپنے مینوفیکچرر سے رابطہ کریں۔" - - - - - - - - - - - - - - - - + "‏USSD درخواست کو ریگولر کال میں تبدیل کر دیا گیا" + "‏USSD درخواست کو SS درخواست میں تبدیل کر دیا گیا" + "‏نئی USSD درخواست میں تبدیل کر دیا گیا" + "‏USSD درخواست کو ویڈیو کال میں تبدیل کر دیا گیا" + "‏SS درخواست کو ریگولر کال میں تبدیل کر دیا گیا" + "‏SS درخواست کو ویڈیو کال میں تبدیل کر دیا گیا" + "‏SS درخواست کو USSD درخواست میں تبدیل کر دیا گیا" + "‏نئی SS درخواست میں تبدیل کر دیا گیا" "دفتری پروفائل" "پھیلائیں" "سکیڑیں" @@ -1857,6 +1875,14 @@ "‏SIM میں آواز کیلئے سہولت نہیں ہے" "‏آواز کیلئے SIM کو اجازت نہیں ہے" "آواز کیلئے فون کو اجازت نہیں ہے" + + + + + + + + "پاپ اپ ونڈو" "‎‎‎‎‎+ %1$d‎‎" "ایپ کے ورژن کا درجہ کم ہے یا اس شارٹ کٹ کے ساتھ مطابقت پذیر نہیں ہے" @@ -1877,8 +1903,6 @@ "یہ نیا برتاؤ ہے۔ تبدیل کرنے کے لیے تھتھپائيں۔" "\'ڈسٹرب نہ کریں\' تبدیل ہو گيا ہے" "مسدود کی گئی چیزوں کو چیک کرنے کے لیے تھپتھپائیں۔" - - - - + "سسٹم" + "ترتیبات" diff --git a/core/res/res/values-uz/strings.xml b/core/res/res/values-uz/strings.xml index 9776eeb543827caa861c0427b9ae4cc65472963b..97ccc5bd6083575a00d1c8c00118414b1e8fb101 100644 --- a/core/res/res/values-uz/strings.xml +++ b/core/res/res/values-uz/strings.xml @@ -82,6 +82,8 @@ "Ovozli chaqiruvlar ishlamaydi" "Ovozli yoki favqulodda chaqiruvlar ishlamayapti" "Aloqa operatoringiz tomonidan vaqtinchalik faolsizlantirilgan" + + "Mobil tarmoqqa ulanib bo‘lmadi" "Tarmoq turini almashtiring. Almashtirish uchun bosing." "Favqulodda chaqiruv ishlamayapti" @@ -120,12 +122,13 @@ "Rouming banneri yoqilgan" "Rouming banneri o‘chirilgan" "Xizmatlar qidirilmoqda" - - + "Wi‑Fi chaqiruv sozlanmadi" "Wi-Fi orqali qo‘ng‘iroqlarni amalga oshirish va xabarlar bilan almashinish uchun uyali aloqa operatoringizdan ushbu xizmatni yoqib qo‘yishni so‘rashingiz lozim. Keyin sozlamalarda Wi-Fi qo‘ng‘irog‘i imkoniyatini yoqib olishingiz mumkin. (Xato kodi: %1$s)" - + + "Aloqa operatoringiz orqali Wi-Fi chaqiruv funksiyasinini ulashda xato: %1$s" + "%s" "%s Wi-Fi qo‘ng‘iroqlar" @@ -159,10 +162,8 @@ "Juda ko‘p so‘rovlar amalga oshirilmoqda. Keyinroq urinib ko‘ring." "%1$s hisobiga kirishda xato" "Sinx." - - - - + "Sinxronlanmadi" + "Juda ko‘p elementni (%s) o‘chirib tashlashga urindingiz." "Planshet xotirasi to‘la. Joy bo‘shatish uchun ba’zi fayllarni o‘chiring." "Soat xotirasi to‘lgan. Joy bo‘shatish uchun ba’zi fayllarni o‘chiring." "Televizor xotirasi to‘lgan. Joy bo‘shatish uchun ba’zi fayllarni o‘chiring." @@ -272,40 +273,31 @@ "Ishchi profilga almashtirish" "Kontaktlar" "kontaktlarga kirish" - - + "<b>%1$s</b> uchun kontaktlaringizga ruxsat berilsinmi?" "Joylashuv" "shu qurilmaning joylashuvi haqidagi axborotga kirish" - - + "<b>%1$s</b> uchun bu qurilmaning joylashuvi haqidagi axborotdan foydalanishiga ruxsat berilsinmi?" "Taqvim" "taqvimingizga kirish" - - + "<b>%1$s</b> uchun taqvimingizga ruxsat berilsinmi?" "SMS" "SMS xabarlarni yuborish va ko‘rish" - - + "<b>%1$s</b> uchun SMS xabarlarni yuborish va ko‘rishga ruxsat berilsinmi?" "Xotira" "qurilmangizdagi surat, multimedia va fayllarga kirish" - - + "<b>%1$s</b> uchun qurilmangizdagi surat, multimedia va fayllarga ruxsat berilsinmi?" "Mikrofon" "ovoz yozib olish" - - + "<b>%1$s</b> uchun audio yozib olishga ruxsat berilsinmi?" "Kamera" "suratga olish va video yozib olish" - - + "<b>%1$s</b> uchun surat va videoga olishga ruxsat berilsinmi?" "Telefon" "telefon qo‘ng‘iroqlarini amalga oshirish va boshqarish" - - + "<b>%1$s</b> uchun telefon chaqiruvlarini amalga oshirish va boshqarishga ruxsat berilsinmi?" "Tana sezgichlari" "organizm holati haqidagi sezgich ma’lumotlariga kirish" - - + "<b>%1$s</b> uchun organizm holati haqidagi sezgichlar axborotlariga ruxsat berilsinmi?" "Oynadagi kontentni o‘qiydi" "Joriy oynadagi kontent mazmunini aniqlaydi." "Teginib o‘rganish xizmatini yoqadi" @@ -492,6 +484,8 @@ "Ilova qisqa masofali aloqa (NFC) texnologiyasi yordamida NFC yorliqlari, kartalar va o‘qish moslamalari bilan ma’lumot almashishi mumkin." "ekran qulfini o‘chirib qo‘yish" "Ilovaga ekran qulfini va har qanday parol yordamidagi xavfsizlik himoyalarini o‘chirishga ruxsat beradi. Masalan, kirish qo‘ng‘irog‘ida telefon ekran qulfini o‘chiradi va qo‘ng‘iroq tugashi bilan qulfni yoqadi." + "biometrik sensoridan foydalanish" + "Ilova haqiqiylikni tekshirish uchun biometrik sensoridan foydalanishi mumkin" "barmoq izi skanerini boshqarish" "Ilova foydalanish uchun barmoq izi namunalarini qo‘shish va o‘chirish usullarini qo‘llashi mumkin." "barmoq izi sensoridan foydalanish" @@ -504,6 +498,8 @@ "Aniqlanmadi" + + "Barmoq izi skaneri ish holatida emas." "Barmoq izini saqlab bo‘lmadi. Mavjud barmoq izlaridan birini o‘chirib tashlang." "Barmoq izini aniqlash vaqti tugab qoldi. Qayta urinib ko‘ring." @@ -1016,14 +1012,23 @@ "Kiritish uslubi" "Matn yozish" "E-pochta" + "Belgilangan manzilga xat yuborish" "Chaqiruv" + "Belgilangan raqamga telefon qilish" "Xaritadan topish" + "Belgilangan manzilni xaritadan topish" "Ochish" + "Belgilangan URL manzilini ochish" "Xabar" + "Belgilangan telefon raqamiga SMS yuborish" "Qo‘shish" + "Kontaktlarga saqlash" "Ochish" + "Taqvimda belgilangan vaqtni ko‘rish" "Jadval" + "Belgilangan vaqt uchun tadbirni rejalashtirish" "Trek" + "Belgilangan parvozni kuzatish" "Xotirada bo‘sh joy tugamoqda" "Ba‘zi tizim funksiyalari ishlamasligi mumkin" "Tizim uchun xotirada joy yetarli emas. Avval 250 megabayt joy bo‘shatib, keyin qurilmani o‘chirib yoqing." @@ -1117,8 +1122,7 @@ "%1$s ilovasini ochish" "%1$s saqlanmasdan yopiladi" "%1$s foydalanish uchun ajratilgan xotira chegarasidan o‘tib ketdi" - - + "Hip-damp yaratildi. Uni ulashish uchun bosing." "Hip-damp ma’lumotlari bilan ulashasizmi?" "%1$s jarayoni o‘zi uchun ajratilgan %2$s xotira chegarasidan o‘tib ketdi. Ilova dasturchisi bilan ulashishingiz uchun hip-damp ma’lumotlari yig‘ilib qoldi. Ehtiyot bo\'ling: ushbu hip-dampda ilova uchun foydalanishga ruxsat berilgan shaxsiy ma’lumotlaringiz bo‘lishi mumkin." "Matn uchun amalni tanlash" @@ -1153,8 +1157,7 @@ "Ochiq Wi‑Fi tarmoqqa ulaning" "Aloqa operatori Wi-Fi tarmog‘iga ulanish" - - + "Wi‑Fi tarmoqqa ulanmoqda" "Wi‑Fi tarmoqqa ulanildi" "Wi-Fi tarmoqqa ulanib bo‘lmadi" "Barcha tarmoqlarni ko‘rish uchun bosing" @@ -1271,33 +1274,49 @@ "%s boshqa ilovalar ustidan ochilgan" "%s ilovasi uchun bu funksiyani sozlamalar orqali o‘chirib qo‘yish mumkin." "Faolsizlantirish" - "%s tayyorlanmoqda" - "Xatolar qidirilmoqda" - "Yangi %s kartasi aniqlandi" + + + + + + + + "Rasm va boshqa fayllarni o‘tkazish" - "“%s” buzilgan" - "%s: buzilgan. Uni tuzatish uchun bosing." - "%s: buzilgan. Tuzatish uchun uni tanlang." + + + + "%s qo‘llab-quvvatlanmaydi" "Bu xotira qurilmasi (%s) qo‘llab-quvvatlanmaydi. Uni mos keladigan formatda sozlash uchun bu yerga bosing." "Bu xotira qurilmasi (%s) qo‘llab-quvvatlanmaydi. Mos formatda sozlash uchun uni tanlang." "%s kutilmaganda chiqarib olindi" - "Ma’lumotlar yo‘qolishining oldini olish uchun %s kartasini chiqarishdan oldin u bilan ulanishni uzing" - "“%s” kartasi chiqarib olingan" - "%s chiqarib olingan; yangisini kiriting" - "“%s” kartasi chiqarilmoqda…" - "Chiqara ko‘rmang" + + + + + + + + + + "Sozlash" "Chiqarish" "O‘rganish" "%s topilmadi" - "Qurilmani qaytadan joylang" + + "%s ko‘chirib o‘tkazilmoqda" "Ma’lumotlar ko‘chirilmoqda" - "Ko‘chirib o‘tkazish tugadi" - "Ma’lumotlar %s xotirasiga ko‘chirib o‘tkazildi" - "Ma’lumotlar ko‘chirilmadi" - "Ma’lumotlar o‘z joyida qoldi" + + + + + + + + "Sug‘urib olingan" "Chiqarib olingan" "Tekshirilmoqda…" @@ -1356,17 +1375,14 @@ "Ulanmoqda…" "Ulandi" "Doimiy VPN tarmoqdan uzildi" - - + "Doimiy VPN tarmoqqa ulanmadi" "Tarmoq yoki VPN sozlamalarini o‘zgartiring" "Faylni tanlash" "Hech qanday fayl tanlanmadi" "Asliga qaytarish" "Yuborish" - - - - + "Avtomobil ilovasi ishlayapti" + "Avtomobil ilovasidan chiqish uchun bosing" "Modem rejimi yoniq" "Sozlash uchun bosing." "Modem rejimi faolsizlantirildi" @@ -1692,8 +1708,7 @@ "Administrator tomonidan o‘rnatilgan" "Administrator tomonidan yangilangan" "Administrator tomonidan o‘chirilgan" - - + "Batareya quvvatini uzoqroq vaqtga yetkazish uchun quvvat tejash funksiyasi qurilmangiz unumdorligini kamaytiradi hamda uning tebranishi, joylashuv xizmatlari va orqa fonda internetdan foydalanishini cheklaydi yoki faolsizlantiradi. Sinxronlanishni talab qiladigan e-pochta, xabar almashinuv va boshqa ilovalar esa qachonki ularni ishga tushirganingizda yangilanadi.\n\nQurilma quvvat olayotganda quvvat tejash funksiyasi avtomatik tarzda o‘chadi." "Trafik tejash rejimida ayrim ilovalar uchun orqa fondan internetdan foydalanish imkoniyati cheklanadi. Siz ishlatayotgan ilova zaruratga qarab internet-trafik sarflashi mumkin, biroq cheklangan miqdorda. Masalan, rasmlar ustiga bosmaguningizcha ular yuklanmaydi." "Trafik tejash yoqilsinmi?" "Yoqish" @@ -1744,22 +1759,14 @@ "“%1$s” tomonidan ovozsiz qilingan" "Qurilmangiz bilan bog‘liq ichki muammo mavjud. U zavod sozlamalari tiklanmaguncha barqaror ishlamasligi mumkin." "Qurilmangiz bilan bog‘liq ichki muammo mavjud. Tafsilotlar uchun qurilmangiz ishlab chiqaruvchisiga murojaat qiling." - - - - - - - - - - - - - - - - + "USSD talabi odatiy chaqiruvga almashtirildi" + "USSD talabi SS talabiga almashtirildi" + "Yangi USSD talabiga almashtirildi" + "USSD talabi video chaqiruvga almashtirildi" + "SS talabi odatiy chaqiruvga almashtirildi" + "SS talabi video chaqiruvga almashtirildi" + "SS talabi USSD talabiga almashtirildi" + "Yangi SS talabiga almashtirildi" "Ishchi profil" "Yoyish" "Yig‘ish" @@ -1857,6 +1864,14 @@ "Ovoz uchun SIM karta taqdim etilmagan" "Ovoz uchun SIM karta ishlatish taqiqlangan" "Ovoz uchun telefon taqiqlangan" + + + + + + + + "Qalqib chiquvchi oyna" "+ %1$d" "Ilova versiyasi eski yoki bu yorliq bilan mos emas" @@ -1877,8 +1892,6 @@ "Bu yangi xatti-harakat. O‘zgartirish uchun bosing." "Bezovta qilinmasin rejimi sozlamalari o‘zgartirildi" "Nimalar bloklanganini tekshirish uchun bosing" - - - - + "Tizim" + "Sozlamalar" diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index 59fb3b80e909ca6840395967977115546fd00043..e1a5791b8f91ca581c8dc691157a88ac189a6ab0 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -82,6 +82,8 @@ "Không có dịch vụ thoại" "Không có dịch vụ thoại hoặc gọi khẩn cấp" "Nhà mạng đã tạm thời tắt dịch vụ này" + + "Không thể kết nối với mạng di động" "Hãy thử thay đổi mạng ưu tiên. Nhấn để thay đổi." "Không có dịch vụ gọi khẩn cấp" @@ -120,12 +122,13 @@ "Biểu ngữ Chuyển vùng Bật" "Biểu ngữ Chuyển vùng Tắt" "Đang tìm kiếm Dịch vụ" - - + "Không thể thiết lập tính năng gọi qua Wi‑Fi" "Để gọi điện và gửi tin nhắn qua Wi-Fi, trước tiên hãy yêu cầu nhà cung cấp dịch vụ của bạn thiết lập dịch vụ này. Sau đó, bật lại gọi qua Wi-Fi từ Cài đặt. (Mã lỗi: %1$s)" - + + "Sự cố khi đăng ký dịch vụ gọi qua Wi‑Fi với nhà mạng của bạn: %1$s" + "%s" "Gọi điện qua Wi-Fi %s" @@ -481,6 +484,8 @@ "Cho phép ứng dụng giao tiếp với thẻ Giao tiếp trường gần (NFC), thẻ và trình đọc." "vô hiệu hóa khóa màn hình của bạn" "Cho phép ứng dụng tắt khóa phím và bất kỳ bảo mật mật khẩu được liên kết nào. Ví dụ: điện thoại tắt khóa phím khi nhận được cuộc gọi đến, sau đó bật lại khóa phím khi cuộc gọi kết thúc." + "sử dụng phần cứng sinh trắc học" + "Cho phép ứng dụng dùng phần cứng sinh trắc học để xác thực" "quản lý phần cứng vân tay" "Cho phép ứng dụng gọi các phương pháp để thêm và xóa các mẫu vân tay để sử dụng." "sử dụng phần cứng vân tay" @@ -493,6 +498,8 @@ "Không nhận dạng được" + + "Phần cứng vân tay không khả dụng." "Không thể lưu vân tay. Vui lòng xóa vân tay hiện có." "Đã hết thời gian chờ vân tay. Hãy thử lại." @@ -1005,14 +1012,23 @@ "Phương thức nhập" "Tác vụ văn bản" "Email" + "Gửi email đến địa chỉ đã chọn" "Gọi" + "Gọi đến số điện thoại đã chọn" "Định vị" + "Định vị địa chỉ đã chọn" "Mở" + "Mở URL đã chọn" "Gửi tin nhắn" + "Nhắn tin đến số điện thoại đã chọn" "Thêm" + "Thêm vào danh bạ" "Xem" + "Xem thời gian đã chọn trong lịch" "Lịch biểu" + "Lên lịch biểu sự kiện cho thời gian đã chọn" "Theo dõi" + "Theo dõi chuyến bay đã chọn" "Sắp hết dung lượng lưu trữ" "Một số chức năng hệ thống có thể không hoạt động" "Không đủ bộ nhớ cho hệ thống. Đảm bảo bạn có 250 MB dung lượng trống và khởi động lại." @@ -1141,8 +1157,7 @@ "Kết nối với mạng Wi-Fi đang mở" "Kết nối với mạng Wi‑Fi của nhà mạng" - - + "Đang kết nối với mạng Wi-Fi" "Đã kết nối với mạng Wi-Fi" "Không thể kết nối với mạng Wi‑Fi" "Nhấn để xem tất cả các mạng" @@ -1258,33 +1273,49 @@ "%s hiển thị trên ứng dụng khác" "Nếu bạn không muốn %s sử dụng tính năng này, hãy nhấn để mở cài đặt và tắt tính năng này." "Tắt" - "Đang chuẩn bị %s" - "Đang kiểm tra lỗi" - "Đã phát hiện %s mới" + + + + + + + + "Để chuyển ảnh và phương tiện" - "%s bị lỗi" - "%s bị lỗi. Nhấn để khắc phục." - "%s bị lỗi. Chọn để sửa." + + + + "%s không được hỗ trợ" "Thiết bị này không hỗ trợ %s này. Nhấn để thiết lập ở định dạng được hỗ trợ." "Thiết bị này không hỗ trợ %s này. Chọn để thiết lập ở định dạng được hỗ trợ." "Đã tháo đột ngột %s" - "Ngắt kết nối %s trước khi tháo nhằm tránh mất dữ liệu" - "Đã tháo %s" - "Đã tháo %s; hãy lắp phương tiện mới" - "Vẫn đang ngắt kết nối %s…" - "Không tháo" + + + + + + + + + + "Thiết lập" "Tháo" "Khám phá" "%s bị thiếu" - "Cắm lại thiết bị này" + + "Di chuyển %s" "Di chuyển dữ liệu" - "Hoàn tất di chuyển" - "Dữ liệu được di chuyển sang %s" - "Không thể di chuyển dữ liệu" - "Dữ liệu vẫn ở vị trí ban đầu" + + + + + + + + "Đã tháo" "Đã đẩy ra" "Đang kiểm tra…" @@ -1676,8 +1707,7 @@ "Do quản trị viên của bạn cài đặt" "Do quản trị viên của bạn cập nhật" "Do quản trị viên của bạn xóa" - - + "Để kéo dài thời lượng pin, Trình tiết kiệm pin sẽ giảm mức hoạt động của thiết bị, hạn chế hoặc tắt chế độ rung, dịch vụ vị trí và dữ liệu nền. Ứng dụng email, nhắn tin và các ứng dụng khác sử dụng đồng bộ hóa có thể không cập nhật nếu bạn không mở chúng.\n\nTrình tiết kiệm pin tự động tắt khi thiết bị của bạn đang sạc." "Để giúp giảm mức sử dụng dữ liệu, Trình tiết kiệm dữ liệu chặn một số ứng dụng gửi hoặc nhận dữ liệu trong nền. Ứng dụng mà bạn hiện sử dụng có thể truy cập dữ liệu nhưng có thể thực hiện việc đó ít thường xuyên hơn. Ví dụ: hình ảnh sẽ không hiển thị cho đến khi bạn nhấn vào hình ảnh đó." "Bật Trình tiết kiệm dữ liệu?" "Bật" @@ -1728,22 +1758,14 @@ "Do %1$s tắt tiếng" "Đã xảy ra sự cố nội bộ với thiết bị của bạn và thiết bị có thể sẽ không ổn định cho tới khi bạn thiết lập lại dữ liệu ban đầu." "Đã xảy ra sự cố nội bộ với thiết bị. Hãy liên hệ với nhà sản xuất của bạn để biết chi tiết." - - - - - - - - - - - - - - - - + "Yêu cầu USSD đã thay đổi thành cuộc gọi thông thường" + "Yêu cầu USSD đã thay đổi thành yêu cầu SS" + "Đã thay đổi thành yêu cầu USSD mới" + "Yêu cầu USSD đã thay đổi thành cuộc gọi video" + "Yêu cầu SS đã thay đổi thành cuộc gọi thông thường" + "Yêu cầu SS đã thay đổi thành cuộc gọi video" + "Yêu cầu SS đã thay đổi thành yêu cầu USSD" + "Đã thay đổi thành yêu cầu SS mới" "Hồ sơ công việc" "Mở rộng" "Thu gọn" @@ -1841,6 +1863,14 @@ "SIM không được cung cấp tính năng thoại" "SIM không được phép sử dụng tính năng thoại" "Điện thoại không được phép sử dụng tính năng thoại" + + + + + + + + "Cửa sổ bật lên" "+ %1$d" "Phiên bản của ứng dụng đã bị hạ cấp hoặc không tương thích với lối tắt này" diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index ff11ef55d723f47ceb669448e57d331c23f9e7a8..6ac57ae43c13259ad15f6f1bd80cc8063966fe05 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -77,15 +77,17 @@ "默认显示本机号码,在下一次通话中也显示" "未提供服务。" "您无法更改来电显示设置。" - "无法使用数据服务" - "无法进行紧急呼救" + "无法使用移动数据服务" + "无法使用紧急呼救服务" "无法使用语音通话服务" - "无法使用语音通话/紧急呼救服务" - "您所在位置的移动网络暂时不提供这项服务" - "无法连接网络" - "要改善信号情况,请尝试更改在“设置”>“网络和互联网”>“移动网络”>“首选网络类型”中选择的类型。" - "正在进行 WLAN 通话" - "紧急呼救需要使用移动网络。" + "无法使用语音服务或紧急呼救服务" + "已由运营商暂时关闭" + + + "无法连接到移动网络" + "请尝试更改首选网络。点按即可更改。" + "无法使用紧急呼救服务" + "无法通过 WLAN 拨打紧急呼救电话" "提醒" "来电转接" "紧急回拨模式" @@ -120,12 +122,12 @@ "启用漫游横幅" "禁用漫游横幅" "正在搜索服务" - "WLAN 通话" + "无法设置 WLAN 通话" "要通过 WLAN 打电话和发信息,请先让您的运营商开通此服务,然后再到“设置”中重新开启 WLAN 通话功能(错误代码:%1$s)。" - "向您的运营商注册(错误代码:%1$s)" + "向您的运营商注册 WLAN 通话时遇到问题:%1$s" "%s" @@ -160,8 +162,8 @@ "正在处理的请求太多,请稍后重试。" "登录 %1$s 时出错" "同步" - "同步" - "太多%s删除项。" + "无法同步" + "尝试删除的%s数量太多。" "平板电脑存储空间已满。请删除一些文件以腾出空间。" "手表存储空间已满。请删除一些文件以腾出空间。" "电视存储空间已满。请删除一些文件以腾出空间。" @@ -174,14 +176,13 @@ "由您的工作资料管理员监控" "受到 %s 监控" "工作资料已删除" - "由于缺少管理应用,工作资料已被删除" "工作资料管理应用缺失或损坏,因此系统已删除您的工作资料及相关数据。如需帮助,请与您的管理员联系。" "您的工作资料已不在此设备上" "密码尝试次数过多" "设备为受管理设备" "贵单位会管理该设备,且可能会监控网络流量。点按即可了解详情。" "系统将清空您的设备" - "相关管理应用无法使用,系统现在将清空您的设备。\n\n如有疑问,请与您所在单位的管理员联系。" + "无法使用管理应用,系统现在将清空您的设备。\n\n如有疑问,请与您所在单位的管理员联系。" "“%s”已停用打印功能。" "我" "平板电脑选项" @@ -236,6 +237,9 @@ "飞行模式" "已开启飞行模式" "未开启飞行模式" + "省电模式" + "省电模式已关闭" + "省电模式已开启" "设置" "助理" "语音助理" @@ -269,31 +273,31 @@ "切换到工作资料" "通讯录" "访问您的通讯录" - "允许<b>%1$s</b>访问您的通讯录" + "允许<b>%1$s</b>访问您的通讯录吗?" "位置信息" "获取此设备的位置信息" - "允许<b>%1$s</b>获取此设备的位置信息" + "允许<b>%1$s</b>获取此设备的位置信息吗?" "日历" "访问您的日历" - "允许<b>%1$s</b>访问您的日历" + "允许<b>%1$s</b>访问您的日历吗?" "短信" "发送和查看短信" - "允许<b>%1$s</b>发送和查看短信" + "允许<b>%1$s</b>发送和查看短信吗?" "存储空间" "访问您设备上的照片、媒体内容和文件" - "允许“<b>%1$s</b>”访问您设备上的照片、媒体内容和文件" + "允许<b>%1$s</b>访问您设备上的照片、媒体内容和文件吗?" "麦克风" "录制音频" - "允许<b>%1$s</b>录音" + "允许<b>%1$s</b>录音吗?" "相机" "拍摄照片和录制视频" - "允许<b>%1$s</b>拍摄照片和录制视频" + "允许<b>%1$s</b>拍摄照片和录制视频吗?" "电话" "拨打电话和管理通话" - "允许<b>%1$s</b>拨打电话和管理通话" + "允许<b>%1$s</b>拨打电话和管理通话吗?" "身体传感器" "访问与您的生命体征相关的传感器数据" - "允许<b>%1$s</b>访问与您的生命体征相关的传感器数据" + "允许<b>%1$s</b>访问与您的生命体征相关的传感器数据吗?" "检索窗口内容" "检测您正访问的窗口的内容。" "启用触摸浏览" @@ -305,7 +309,7 @@ "执行手势" "可执行点按、滑动、双指张合等手势。" "指纹手势" - "可以捕获在设备指纹传感器上执行的手势。" + "可以捕获在设备指纹传感器上执行的手势。" "停用或修改状态栏" "允许应用停用状态栏或者增删系统图标。" "用作状态栏" @@ -356,6 +360,8 @@ "允许该应用在内存中持续保留其自身的某些组件。这会限制其他应用可用的内存,从而减缓平板电脑运行速度。" "允许应用在内存中持续保留其自身的部分组件。此权限可能会限制其他应用可用的内存,从而减缓电视运行速度。" "允许该应用在内存中持续保留其自身的某些组件。这会限制其他应用可用的内存,从而减缓手机运行速度。" + "运行前台服务" + "允许该应用使用前台服务。" "计算应用存储空间" "允许应用检索其代码、数据和缓存大小" "修改系统设置" @@ -478,6 +484,10 @@ "允许应用与近距离无线通信(NFC)标签、卡和读取器通信。" "停用屏幕锁定" "允许该应用停用键锁以及任何关联的密码安全措施。例如,让手机在接听来电时停用键锁,在通话结束后重新启用键锁。" + + + + "管理指纹硬件" "允许该应用调用方法来添加和删除可用的指纹模板。" "使用指纹硬件" @@ -490,6 +500,8 @@ "无法识别" + + "指纹硬件无法使用。" "无法存储指纹。请移除一个现有的指纹。" "指纹录入操作超时,请重试。" @@ -802,6 +814,8 @@ "图案解锁。" "人脸解锁。" "PIN码解锁。" + "SIM 卡 PIN 码解锁。" + "SIM 卡 PUK 码解锁。" "密码解锁。" "图案区域。" "滑动区域。" @@ -863,6 +877,12 @@ "文本已复制到剪贴板。" "更多" "MENU+" + "Meta+" + "Ctrl+" + "Alt+" + "Shift+" + "Sym+" + "Fn+" "空格" "Enter 键" "删除" @@ -994,14 +1014,32 @@ "输入法" "文字操作" "电子邮件" + + "拨打电话" + + "定位" + + "打开" + + "发短信" + + "添加" + + "查看" + + "排定时间" + + "跟踪" + + "存储空间不足" "某些系统功能可能无法正常使用" "系统存储空间不足。请确保您有250MB的可用空间,然后重新启动。" @@ -1074,31 +1112,28 @@ "检查更新" "“%1$s”应用(%2$s 进程)违反了自我强制执行的严格模式 (StrictMode) 政策。" "进程 %1$s 违反了自我强制执行的严格模式 (StrictMode) 政策。" - "Android正在升级..." - "Android 正在启动…" + "手机正在更新…" + "平板电脑正在更新…" + "设备正在更新…" + "手机正在启动…" + "平板电脑正在启动…" + "设备正在启动…" "正在优化存储空间。" - "即将完成 Android 更新…" - "在升级完成之前,部分应用可能无法正常运行" + "正在完成系统更新…" "正在升级%1$s…" "正在优化第%1$d个应用(共%2$d个)。" "正在准备升级%1$s。" "正在启动应用。" "即将完成启动。" "%1$s正在运行" - - - - - - - - - - - - + "点按即可返回游戏" + "选择游戏" + "为了提升性能,一次只能打开其中一个游戏。" + "返回%1$s" + "打开%1$s" + "%1$s将会在不保存的情况下关闭" "%1$s占用的内存已超出限制" - "已收集堆转储数据;点按即可共享" + "已收集堆转储数据。点按即可分享。" "要共享堆转储数据吗?" "%1$s进程占用的内存已超出限制 (%2$s)。您可以将收集的堆转储数据共享给相应的开发者。请注意:此数据中可能包含该应用有权存取的您的个人信息。" "选择要对文字执行的操作" @@ -1133,12 +1168,12 @@ "连接到开放的 WLAN 网络" "连接到运营商 WLAN 网络" - "正在连接到开放的 WLAN 网络" + "正在连接到 WLAN 网络" "已连接到 WLAN 网络" "无法连接到 WLAN 网络" "点按即可查看所有网络" "连接" - "所有网络" + "所有网络" "WLAN 将自动开启" "当您位于已保存的高品质网络信号范围内时" "不要重新开启" @@ -1204,6 +1239,7 @@ "重新启动" "激活移动网络服务" "下载运营商应用即可激活您的新 SIM 卡" + "下载%1$s应用即可激活您的新 SIM 卡" "下载应用" "已插入新 SIM 卡" "点按即可进行设置" @@ -1222,13 +1258,13 @@ "已开启 USB PTP 模式" "已开启 USB 网络共享模式" "已开启 USB MIDI 模式" - "已开启 USB 配件模式" + "USB 配件已连接" "点按即可查看更多选项。" "正在为连接的设备充电。点按即可查看更多选项。" "检测到模拟音频配件" "连接的设备与此手机不兼容。点按即可了解详情。" "已连接到 USB 调试" - "点按即可停用 USB 调试功能。" + "点按即可关闭 USB 调试" "选择即可停用 USB 调试功能。" "正在生成错误报告…" "要分享错误报告吗?" @@ -1245,36 +1281,52 @@ " 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ" "显示在其他应用的上层" "%s正在其他应用的上层显示内容" - "%s正在其他应用的上层显示内容" + "“%s”正在其他应用的上层显示内容" "如果您不想让%s使用此功能,请点按以打开设置,然后关闭此功能。" - "关闭" - "正在准备%s" - "检查是否有错误" - "检测到新的%s" + "关闭" + + + + + + + + "可用于传输照片和媒体文件" - "%s已损坏" - "%s已损坏,点按即可修复。" - "%s已损坏。选择即可进行修正。" + + + + "%s不受支持" "该设备不支持此%s。点按即可使用支持的格式进行设置。" "此设备不支持该%s。选择即可使用支持的格式进行设置。" "%s已意外移除" - "请先卸载%s,再将其移除,以防数据丢失。" - "已移除%s" - "%s已移除,请插入新的外部媒体" - "仍然弹出%s…" - "请勿移除" + + + + + + + + + + "设置" "弹出" "浏览" "缺少%s" - "重新插入此设备" + + "正在移动%s" "正在移动数据" - "数据移动完成" - "数据已移到%s" - "无法移动数据" - "数据仍保存在原来的位置" + + + + + + + + "已移除" "已弹出" "正在检查…" @@ -1333,14 +1385,14 @@ "正在连接到始终开启的 VPN…" "已连接到始终开启的 VPN" "始终开启的 VPN 已断开连接" - "始终开启的 VPN 出现错误" + "无法连接到始终开启的 VPN" "更改网络或 VPN 设置" "选择文件" "未选定任何文件" "重置" "提交" - "已启用车载模式" - "点按即可退出车载模式。" + "驾驶应用正在运行" + "点按即可退出驾驶应用。" "网络共享或热点已启用" "点按即可进行设置。" "网络共享已停用" @@ -1418,22 +1470,19 @@ "%s U 盘" "USB存储器" "修改" - "流量消耗提醒" - "点按即可查看使用情况和设置。" - "已达到2G-3G流量上限" - "已达到4G流量上限" + "数据流量警告" + "您已使用 %s 的数据流量" "已达到移动数据流量上限" "已达到WLAN流量上限" - "已暂停本周期剩余时间的流量使用" - "已超出 2G-3G 数据流量限制" - "已超出 4G 数据使用上限" - "已超出移动数据流量上限" - "超出了WLAN数据流量上限" - "超出规定上限 %s。" + "已暂停使用数据网络连接,直到这个周期结束为止" + "已超出移动数据流量上限" + "已超出 WLAN 数据流量上限" + "您已使用 %s,超出所设上限" "后台流量受限制" "点按即可取消限制。" - "流量消耗较多" - "您过去几天的流量消耗超出了正常消耗量。点按即可查看流量消耗情况和设置。" + "移动数据用量较多" + "您的应用使用的数据流量比平时多" + "%s使用的数据流量比平时多" "安全证书" "该证书有效。" "颁发给:" @@ -1669,7 +1718,7 @@ "已由您的管理员安装" "已由您的管理员更新" "已由您的管理员删除" - "为了延长电池的续航时间,省电模式会降低设备的性能,并限制振动、位置信息服务和大部分后台流量。对于电子邮件、聊天工具等依赖于同步功能的应用,可能要打开这类应用时才能收到新信息。\n\n省电模式会在设备充电时自动关闭。" + "为了延长电池的续航时间,省电模式会降低设备的性能,并限制或关闭振动、位置信息服务和后台流量。对于电子邮件、聊天工具等依赖于同步功能的应用,可能要打开这类应用时才能收到新信息。\n\n省电模式会在设备充电时自动关闭。" "为了减少流量消耗,流量节省程序会阻止某些应用在后台收发数据。您当前使用的应用可以收发数据,但频率可能会降低。举例而言,这可能意味着图片只有在您点按之后才会显示。" "要开启流量节省程序吗?" "开启" @@ -1681,9 +1730,9 @@ %1$d 分钟(到%2$s)) 1 分钟(到%2$s - - %1$d 小时(到%2$s - 1 小时(到%2$s + + %1$d 小时(直到%2$s + 1 小时(直到%2$s %1$d 小时(到%2$s @@ -1697,7 +1746,7 @@ %d 分钟 1 分钟 - + %d 小时 1 小时 @@ -1720,14 +1769,14 @@ "已被%1$s设为静音" "您的设备内部出现了问题。如果不将设备恢复出厂设置,设备运行可能会不稳定。" "您的设备内部出现了问题。请联系您的设备制造商了解详情。" - "USSD 请求已修改为 DIAL 请求。" - "USSD 请求已修改为 SS 请求。" - "USSD 请求已修改为新的 USSD 请求。" - "USSD 请求已修改为视频 DIAL 请求。" - "SS 请求已修改为 DIAL 请求。" - "SS 请求已修改为视频 DIAL 请求。" - "SS 请求已修改为 USSD 请求。" - "SS 请求已修改为新的 SS 请求。" + "USSD 请求已更改为普通通话" + "USSD 请求已更改为 SS 请求" + "已更改为新的 USSD 请求" + "USSD 请求已更改为视频通话" + "SS 请求已更改为普通通话" + "SS 请求已更改为视频通话" + "SS 请求已更改为 USSD 请求" + "已更改为新的 SS 请求" "工作资料" "展开" "收起" @@ -1825,6 +1874,14 @@ "未配置支持语音的 SIM 卡" "SIM 卡不支持语音" "手机不支持语音" + + + + + + + + "弹出式窗口" "+ %1$d" "应用版本已降级或与此快捷方式不兼容" @@ -1837,7 +1894,14 @@ "检测到有害应用" "“%1$s”想要显示“%2$s”图块" "编辑" + "有来电和通知时会振动" + "有来电和通知时会静音" "系统变更" + "勿扰" + "“勿扰”模式将会隐藏通知,以帮助您集中注意力" + "这是新行为。点按即可更改。" "“勿扰”设置有变更" - "点按即可查看您的干扰行为设置" + "点按即可查看屏蔽内容。" + "系统" + "设置" diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index e46a4b69fe8d9ac9d95b87086e1ed01b789828cc..0c9e347e5e9e7d9dbdd0f7ec9c584d5844838873 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -82,6 +82,7 @@ "沒有語音服務" "無法使用語音服務或撥打緊急電話" "已由流動網絡供應商暫時關閉" + "SIM 卡 %d 暫時遭電信業者停用" "無法連線至流動網絡" "請嘗試變更偏好的網絡。輕按即可變更。" "無法撥打緊急電話" @@ -120,12 +121,13 @@ "漫遊橫幅開啟" "漫遊橫幅關閉" "正在搜尋服務" - - + "無法設定 Wi-Fi 通話" "如要透過 Wi-Fi 撥打電話和傳送訊息,請先向流動網絡供應商要求設定此服務,然後再次在「設定」中開啟「Wi-Fi 通話」。(錯誤代碼:%1$s)" - + + "向您的流動網絡供應商註冊 Wi-Fi 通話時發生問題:%1$s" + "%s" "%s Wi-Fi 通話" @@ -160,7 +162,7 @@ "%1$s 登入錯誤" "Google Sync" "無法同步處理" - "嘗試刪除的「%s」數量過多。" + "嘗試刪除 %s 的次數過多。" "平板電腦的儲存空間已滿。請刪除一些檔案,以騰出可用空間。" "手錶的儲存空間已滿。請刪除一些檔案,以騰出可用空間。" "電視儲存空間已滿。請刪除部分檔案,以釋放儲存空間。" @@ -270,31 +272,31 @@ "切換至工作設定檔" "通訊錄" "存取您的通訊錄" - "要允許「%1$s」存取你的聯絡人嗎?" + "允許「%1$s」<b></b>存取您的聯絡人嗎?" "位置" "存取此裝置的位置" - "要允許「%1$s」存取這個裝置的位置資訊嗎?" + "允許「%1$s」<b></b>存取此裝置的位置資訊嗎?" "日曆" "存取您的日曆" - "要允許「%1$s」存取你的日曆嗎?" + "允許「%1$s」<b></b>存取您的日曆嗎?" "短訊" "傳送和查看短訊" - "要允許「%1$s」傳送及查看簡訊嗎?" + "允許「%1$s」<b></b>傳送和查看短訊嗎?" "儲存空間" "存取裝置上的相片、媒體和檔案" - "要允許「%1$s」存取裝置中的相片、媒體和檔案嗎?" + "允許「%1$s」<b></b>存取您裝置上的相片、媒體和檔案嗎?" "麥克風" "錄音" - "要允許「%1$s」錄音嗎?" + "允許「%1$s」<b></b>錄音嗎?" "相機" "拍照和錄製影片" - "要允許「%1$s」拍攝相片及錄製影片嗎?" + "允許「%1$s」<b></b>拍照和錄製影片嗎?" "電話" "撥打電話及管理通話" - "要允許「%1$s」撥打電話及管理通話嗎?" + "允許「%1$s」<b></b>撥打電話和管理通話嗎?" "人體感應器" "存取與您生命體徵相關的感應器資料" - "要允許「%1$s」存取與你生命徵象相關的感應器資料嗎?" + "允許「%1$s」<b></b>存取與您身體機能相關的感應器資料嗎?" "擷取視窗內容" "檢查您使用中的視窗內容。" "開啟「輕觸探索」功能" @@ -481,6 +483,8 @@ "允許應用程式使用近距離無線通訊 (NFC) 標記、卡片及讀取程式進行通訊。" "停用螢幕上鎖" "允許應用程式停用按鍵鎖定以及其他相關的密碼安全措施。例如:手機收到來電時停用按鍵鎖定,通話結束後重新啟用按鍵鎖定。" + "使用生物識別硬件" + "允許應用程式使用生物識別硬件驗證" "管理指紋硬件" "允許應用程式調用加入和刪除指紋模板的方法以供使用。" "使用指紋硬件" @@ -493,6 +497,7 @@ "未能辨別" + "指紋驗證成功" "無法使用指紋軟件。" "指紋無法儲存。請移除現有指紋。" "指紋已逾時。請再試一次。" @@ -1005,14 +1010,23 @@ "輸入法" "文字操作" "電郵" + "Send email 去指定地址" "通話" + "打指定電話號碼" "尋找" + "搵出指定地址" "開啟" + "打開指定網址" "短訊" + "Send 短訊去指定電話號碼" "新增" + "加入通訊錄" "查看" + "喺日曆度睇返指定時間" "時間表" + "將活動安排喺指定時間" "追蹤" + "追蹤指定航班" "儲存空間即將用盡" "部分系統功能可能無法運作" "系統儲存空間不足。請確認裝置有 250 MB 的可用空間,然後重新啟動。" @@ -1106,7 +1120,7 @@ "開啟「%1$s」" "「%1$s」將會在不儲存的情況下關閉" "%1$s 的記憶體用量已超過限額" - "已取得記憶體快照資料。輕觸即可分享。" + "已收集堆轉儲,輕按即可分享。" "分享堆轉儲?" "這處理程序 (%1$s) 的記憶體用量已超過限額 (%2$s)。您可將已收集的堆轉儲分享給開發人員。請謹慎,這堆轉儲可包含該應用程式有權存取您的任何個人資料。" "選擇處理文字的操作" @@ -1141,8 +1155,7 @@ "連線至開放的 Wi-Fi 網絡" "連接流動網絡供應商的 Wi‑Fi 網絡" - - + "正在連線至 Wi-Fi 網絡" "已連線至 Wi-Fi 網絡" "無法連線至 Wi-Fi 網絡" "輕按即可查看所有網絡" @@ -1258,33 +1271,34 @@ "「%s」正在其他應用程式上顯示內容" "如果您不想「%s」使用此功能,請輕按以開啟設定,然後停用此功能。" "關閉" - "正在準備%s" - "正在檢查錯誤" - "已偵測到新%s" + "正在檢查 %s…" + "正在檢查目前的內容" + "新的 %s" + "輕觸即可進行設定" "用於轉移相片和媒體" - "%s 已受損" - "%s已損壞,輕按即可修復。" + "%s發生問題" + "輕觸即可修正問題" "%s已損毀。選取即可修正。" "不支援的 %s" "此裝置並不支援此 %s。輕按即可在支援的格式設定。" "這部裝置不支援此 %s。選取即可使用支援的格式設定。" "%s被意外移除" - "請先卸載%s,然後才移除,以免遺失資料。" - "已移除%s" - "已移除%s;請插入新的外部儲存空間" - "仍在移除%s…" - "不要移除" + "請先退出媒體,再將其移除,以免內容遺失" + "已移除 %s" + "部分功能可能無法正常運作。請插入新的儲存空間。" + "正在退出 %s" + "請勿移除" "設定" "移除" "探索" "找不到%s" - "重新插入此裝置" + "請再次插入裝置" "正在轉移%s" "正在轉移資料" - "完成轉移" - "資料已轉移至%s" - "無法轉移資料" - "資料仍然儲存在原來位置" + "內容轉移作業已完成" + "已將內容移至 %s" + "無法移動內容" + "請再次嘗試移動內容" "已移除" "已卸載" "正在檢查…" @@ -1343,14 +1357,14 @@ "正在連線至永久連線的 VPN…" "已連線至永久連線的 VPN" "永遠開啟的 VPN 已中斷連線" - "無法連上永久連線的 VPN" + "無法連接永久連線的 VPN" "變更網絡或 VPN 設定" "選擇檔案" "未選擇檔案" "重設" "提交" - "行車應用程式執行中" - "輕觸即可結束行車應用程式。" + "駕駛應用程式執行中" + "輕按即可退出駕駛應用程式。" "已啟用網絡共享或熱點" "輕按即可設定。" "網絡共享已停用" @@ -1676,8 +1690,7 @@ "已由您的管理員安裝" "已由您的管理員更新" "已由您的管理員刪除" - - + "為延長電池壽命,省電模式會降低裝置效能,並限制或關閉震動功能、位置資訊服務和背景數據。此外,如果未開啟電郵、短訊和其他需要使用同步功能的應用程式,系統將不會自動更新這些應用程式。\n\n省電模式會在裝置充電時自動關閉。" "「數據節省模式」可防止部分應用程式在背景收發資料,以節省數據用量。您正在使用的應用程式可存取資料,但次數可能會減少。例如,圖片可能需要輕按才會顯示。" "要開啟「數據節省模式」嗎?" "開啟" @@ -1728,22 +1741,14 @@ "靜音設定者:%1$s" "您裝置的系統發生問題,回復原廠設定後即可解決該問題。" "您裝置的系統發生問題,請聯絡您的製造商瞭解詳情。" - - - - - - - - - - - - - - - - + "USSD 要求已變更為一般通話" + "USSD 要求已變更為 SS 要求" + "已變更為新的 USSD 要求" + "USSD 要求已變更為視像通話" + "SS 要求已變更為一般通話" + "SS 要求已變更為視像通話" + "SS 要求已變更為 USSD 要求" + "已變更為新的 SS 要求" "工作設定檔" "展開" "收合" @@ -1841,6 +1846,10 @@ "未佈建支援語音的 SIM 卡" "SIM 卡不支援語音" "手機不支援語音" + "不允許使用 SIM 卡 %d" + "未佈建 SIM 卡 %d" + "不允許使用 SIM 卡 %d" + "不允許使用 SIM 卡 %d" "彈出式視窗" "+ %1$d" "應用程式版本已降級或與此捷徑不兼容" diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index 88d4168f30eeff58eaea2afe3fab3c8ffc8ca5ee..5d73d071368a733f487e17cfa293d757f019a80b 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -82,6 +82,7 @@ "無法使用語音通話服務" "沒有語音通話服務或無法撥打緊急電話" "暫時由電信業者關閉" + "SIM 卡 %d 暫時遭電信業者停用" "無法連上行動網路" "請嘗試變更偏好的網路。輕觸即可變更。" "無法撥打緊急電話" @@ -120,12 +121,13 @@ "漫遊橫幅開啟" "漫遊橫幅關閉" "正在搜尋服務" - - + "無法設定 Wi‑Fi 通話" "如要透過 Wi-Fi 網路撥打電話及傳送訊息,請先要求電信業者為你設定這項服務,然後再次前往「設定」頁面啟用 Wi-Fi 通話功能。(錯誤代碼:%1$s)" - + + "向你的電信業者註冊 Wi‑Fi 通話時發生問題:%1$s" + "%s" "%s Wi-Fi 通話" @@ -481,6 +483,8 @@ "允許應用程式與近距離無線通訊 (NFC) 電子感應標籤、卡片及感應器進行通訊。" "停用螢幕鎖定" "允許應用程式停用按鍵鎖定以及其他相關的密碼安全性功能。例如:手機收到來電時停用按鍵鎖定,通話結束後重新啟用按鍵鎖定。" + "使用生物特徵硬體" + "允許應用程式使用生物特徵硬體進行驗證" "管理指紋硬體" "允許應用程式呼叫方法來新增及移除可用的指紋範本" "使用指紋硬體" @@ -493,6 +497,7 @@ "無法識別" + "指紋驗證成功" "指紋硬體無法使用。" "無法儲存指紋,請先移除現有指紋。" "指紋處理作業逾時,請再試一次。" @@ -1005,14 +1010,23 @@ "輸入法" "文字動作" "電子郵件" + "將電子郵件寄到所選地址" "通話" + "撥打所選電話號碼" "定位" + "找到所選地址" "開啟" + "開啟所選網址" "訊息" + "將訊息傳送到所選電話號碼" "新增" + "新增至聯絡人" "查看" + "在日曆中查看所選時間" "時間表" + "將活動安排在所選時間" "追蹤" + "追蹤所選航班" "儲存空間即將用盡" "部分系統功能可能無法運作" "系統儲存空間不足。請確定你已釋出 250MB 的可用空間,然後重新啟動。" @@ -1141,8 +1155,7 @@ "連線至開放的 Wi‑Fi 網路" "連上電信業者的 Wi‑Fi 網路" - - + "正在連線至 Wi‑Fi 網路" "已連線至 Wi-Fi 網路" "無法連線至 Wi‑Fi 網路" "輕觸即可查看所有網路" @@ -1258,33 +1271,34 @@ "「%s」正在其他應用程式上顯示內容" "如果你不想讓「%s」使用這項功能,請輕觸開啟設定頁面,然後停用此功能。" "關閉" - "正在準備「%s」" - "正在檢查錯誤" - "偵測到新的「%s」" + "正在檢查 %s…" + "正在檢查目前的內容" + "新的 %s" + "輕觸即可進行設定" "可用於傳輸相片和媒體" - "「%s」毀損" - "%s已損毀。輕觸即可修正。" + "%s發生問題" + "輕觸即可修正問題" "%s已損毀。選取即可進行修正。" "不支援的「%s」" "此裝置不支援這個 %s。輕觸即可使用支援的格式進行設定。" "此裝置不支援這個 %s。選取即可使用支援的格式進行設定。" "意外移除「%s」" - "請先卸載「%s」,再將其移除,以免資料遺失。" - "已移除「%s」" - "已移除「%s」;請插入新的媒體" - "依然退出「%s」..." - "請勿移除" + "請先退出媒體,再將其移除,以免內容遺失" + "已移除 %s" + "部分功能可能無法正常運作。請插入新的儲存空間。" + "正在退出 %s" + "請勿移除" "設定" "退出" "探索" "找不到 %s" - "重新插入這部裝置" + "請再次插入裝置" "正在移動「%s」" "正在移動資料" - "移動完成" - "資料已移動至「%s」" - "無法移動資料" - "資料留在原來的位置" + "內容轉移作業已完成" + "已將內容移至 %s" + "無法移動內容" + "請再次嘗試移動內容" "已移除" "已退出" "檢查中…" @@ -1676,8 +1690,7 @@ "已由你的管理員安裝" "已由你的管理員更新" "已由你的管理員刪除" - - + "為了延長電池續航力,節約耗電量模式會降低裝置效能,並限制或關閉震動、定位服務及背景數據傳輸。此外,如果未開啟電子郵件、簡訊和其他需要使用同步功能的應用程式,系統將不會自動更新這些應用程式。\n\n當你為裝置充電時,節約耗電量模式會自動關閉。" "「數據節省模式」可防止部分應用程式在背景收發資料,以節省數據用量。你目前使用的某個應用程式可以存取資料,但存取頻率可能不如平時高。舉例來說,圖片可能不會自動顯示,而必須由你輕觸後才會顯示。" "要開啟數據節省模式嗎?" "開啟" @@ -1728,22 +1741,14 @@ "由 %1$s 設為靜音" "你的裝置發生內部問題,必須將裝置恢復原廠設定才能解除不穩定狀態。" "你的裝置發生內部問題,詳情請洽裝置製造商。" - - - - - - - - - - - - - - - - + "USSD 要求已變更為一般通話" + "USSD 要求已變更為 SS 要求" + "已變更為新的 USSD 要求" + "USSD 要求已變更為視訊通話" + "SS 要求已變更為一般通話" + "SS 要求已變更為視訊通話" + "SS 要求已變更為 USSD 要求" + "已變更為新的 SS 要求" "Work 設定檔" "展開" "收合" @@ -1841,6 +1846,10 @@ "未佈建支援語音的 SIM 卡" "SIM 卡不支援語音" "手機不支援語音" + "不允許使用 SIM 卡 %d" + "未佈建 SIM 卡 %d" + "不允許使用 SIM 卡 %d" + "不允許使用 SIM 卡 %d" "彈出式視窗" "+ %1$d" "應用程式版本已降級或與這個捷徑不相容" diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index 74bca258e5b1709cab3a8a3938acaaf9fcd67811..c430da94fd9b8c87f18b13352b452c2233c1a8e0 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -77,15 +77,16 @@ "I-ID Yomshayeli ishintshela kokungavinjelwe. Ucingo olulandelayo: Aluvinjelwe" "Isevisi ayilungiselelwe." "Ngeke ukwazi ukuguqul izilungiselelo zemininingwane yoshayayo." - "Ayikho isevisi yedatha" - "Akukho ukushaya kwesimo esiphuthumayo" + "Ayikho isevisi yedatha yeselula" + "Ukushaya okuphuthumayo akutholakali" "Ayikho isevisi yezwi" - "Ayikho isevisi yezwi/yesimo esiphuthumayo" - "Okwesikhashana akunikezwa inethiwekhi yeselula endaweni yakho" - "Ayikwazi ukufinyelela inethiwekhi" - "Ukuze uthuthukise ukwamukela, zama ukushintsha uhlobo olukhethiwe kuzilungiselelo > Inethiwekhi ne-inthanethi > Amanethiwekhi eselula > Uhlobo lwenethiwekhi oluncanyelwayo." - "Ukushaya kwe-Wi-Fi kuyasebenza" - "Amakholi aphuthumayo adinga inethiwekhi yeselula." + "Ayikho isevisi yezwi noma ukushaya okuphuthumayo" + "Kuvalwe okwesikhashana inkampani yakho yenethiwekhi" + "Kuvalwe okwesikhashana inkampani yakho yenethiwekhi ku-SIM %d" + "Ayikwazi ukufinyelela kunethiwekhi yeselula" + "Zama ukushintsha inethiwekhi encanyelwayo. Thepha ukuze ushintshe." + "Ukushaya okuphuthumayo akutholakali" + "Ayikwazi ukwenza amakholi aphuthumayo nge-Wi-Fi" "Izexwayiso" "Ukudlulisa ikholi" "Imodi yokushayela yesimo esiphuthumayo" @@ -120,12 +121,12 @@ "Ibhena Yokuzulazula Ivuliwe" "Ibhena yokuzulazula ivaliwe" "Iseshela Isevisi" - "Ukushaya kwe-Wi-Fi" + "Ayikwazanga ukusetha ukushaya kwe-Wi-Fi" "Ukuze wenze amakholi uphinde uthumele imilayezo nge-Wi-Fi, qala ucele inkampani yakho yenethiwekhi ukuthi isethe le sevisi. Bese uvula ukushaya kwe-Wi-Fi futhi kusukela kuzilungiselelo (Ikhodi yephutha: %1$s)" - "Bhalisa ngenkampani yakho yenethiwekhi (Ikhodi yephutha: %1$s)" + "Inkinga yokubhalisa ukushaya kwe-Wi-Fi ngenkampani yakho yenethiwekhi: %1$s" "%s" @@ -160,8 +161,8 @@ "Kunezicelo eziningi ezenziwayo. Zama futhi emva kwesikhathi" "Iphutha lokungena %1$s" "Vumelanisa" - "Vumelanisa" - "Kunokususa %s okuningi kakhulu." + "Ayikwazi ukuvumelanisa" + "Izame ukususa i-%s eningi kakhulu." "Isilondolozi sethebhulethi sigcwele! Susa amanye amafayela ukukhulula isikhala." "Isitoreji sokubuka sigcwele. Susa amanye amafayela ukukhulula isikhala." "Isitoreji se-TV sigcwele. Susa amanye amafayela ukuze wenze kukhululeke isikhala." @@ -174,14 +175,13 @@ "Ngomlawuli wakho wephrofayela yomsebenzi" "Nge-%s" "Iphrofayela yomsebenzi isusiwe" - "Iphrofayela yomsebenzi isuswe ngenxa yohlelo lokusebenza olungekho lomlawuli" "Uhlelo lokusebenza lokulawula lephrofayela yomsebenzi kungenzeka alukho noma lonakele. Njengomphumela, iphrofayela yakho yomsebenzi nedatha ehlobene isusiwe. Xhumana nomlawuli wakho ukuze uthole usizo." "Iphrofayela yakho yomsebenzi ayisatholakali kule divayisi" "Imizamo yamaphasiwedi eminingi kakhulu" "Idivayisi iphethwe" "Inhlangano yakho iphethe le divayisi futhi kungenzeka ingaqaphi ithrafikhi yenethiwekhi. Thephela imininingwane." "Idivayisi yakho izosulwa" - "Uhlelo lokusebenza lomlawuli alikwazi ukusetshenziswa. Idivayisi yakho manje izosuswa.\n\nUma unemibuzo, xhumana nomlawuli wezinhlangano zakho." + "Uhlelo lokusebenza lomlawuli alikwazi ukusetshenziswa. Idivayisi yakho manje izosuswa.\n\nUma unemibuzo, xhumana nomlawuli wezinhlangano zakho." "Ukuphrinta kukhutshazwe nge-%s." "Mina" "Okukhethwa kukho kwethebhulethi" @@ -236,6 +236,9 @@ "Imodi yendiza" "Imodi yendiza IVULIWE" "Imodi yendiza IVALIWE" + "Isilondolozi sebhethri" + "Iseva yebhethri SIVALIWE" + "Isilondolozi sebhethri SIVULIWE" "Izilungiselelo" "Siza" "Isisekeli sezwi" @@ -269,31 +272,31 @@ "Shintshela kuphrofayela yomsebenzi" "Oxhumana nabo" "finyelela koxhumana nabo" - "Vumela i-<b>%1$s</b> ukuthi ithole ukufinyelela koxhumana nabo" + "Vumela i-<b>%1$s</b> ukuthi ithole ukufinyelela koxhumana nabo?" "Indawo" "finyelela kundawo yale divayisi" - "Vumela i-<b>%1$s</b> ukuthi ifinyelele indawo yale divayisi" + "Vumela i-<b>%1$s</b> ukuthi ifinyelele indawo yale divayisi?" "Ikhalenda" "finyelela kukhalenda yakho" - "Vumela i-<b>%1$s</b> ukuthi ifinyelele kukhalenda yakho" + "Vumela i-<b>%1$s</b> ukuthi ifinyelele kukhalenda yakho?" "I-SMS" "thumela uphinde ubuke imilayezo ye-SMS" - "Vumela i-<b>%1$s</b> ukuthi ithumele iphinde ibuke imilayezo ye-SMS" + "Vumela i-<b>%1$s</b> ukuthi ithumele iphinde ibuke imilayezo ye-SMS?" "Isitoreji" "finyelela kuzithombe, imidiya, namafayela kudivayisi yakho" - "Vumela i-<b>%1$s</b> ukuthi ifinyelele kuzithombe, imidiya, namafayela akudivayisi yakho" + "Vumela i-<b>%1$s</b> ukuthi ifinyelele kuzithombe, imidiya, namafayela akudivayisi yakho?" "I-Microphone" "rekhoda ividiyo" - "Vumela i-<b>%1$s</b> ukuthi irekhode umsindo" + "Vumela i-<b>%1$s</b> ukuthi irekhode umsindo?" "Ikhamela" "thatha izithombe uphinde urekhode ividiyo" - "Vumela i-<b>%1$s</b> ukuthatha izithombe iphinde irekhode ividiyo" + "Vumela i-<b>%1$s</b> ukuthatha izithombe iphinde irekhode ividiyo?" "Ifoni" "yenza uphinde uphathe amakholi wefoni" - "Vumela i-<b>%1$s</b> ukuthi yenze iphinde iphathe amakholi efoni" + "Vumela i-<b>%1$s</b> ukuthi yenze iphinde iphathe amakholi efoni?" "Izinzwa zomzimba" "finyelela idatha yesizweli mayelana nezimpawu zakho ezibalulekile" - "Vumela i-<b>%1$s</b> ukuthi ifinyelele kudatha yenzwa emayelana nezimpawu zakho ezibalulekile" + "Vumela i-<b>%1$s</b> ukuthi ifinyelele kudatha yenzwa emayelana nezimpawu zakho ezibalulekile?" "Thola okuqukethwe kwewindi" "Hlola okuqukethwe kwewindi ohlanganyela nalo." "Vula ukuhlola ngokuthinta" @@ -305,7 +308,7 @@ "Yenza ukuthinta" "Ingathepha, iswayiphe, incinze, futhi yenze okunye ukuthintwa." "Ukuthinta kwezigxivizo zeminwe" - "Ingathatha ukuthinta okwenziwe kunzwa yezigxivizo zeminwe zamadivayisi." + "Ingathatha ukuthinta okwenziwe kunzwa yezigxivizo zeminwe zedivayisi." "khubaza noma guqula ibha yomumo" "Ivumela uhlelo lokusebenza ukuthi yenze umudwa ochaza ngesimo ukuthi ungasebenzi noma ukufaka noma ukukhipha izithonjana zohlelo." "yiba yibha yesimo" @@ -356,6 +359,8 @@ "Ivumela uhlelo kusebenza ukwenza izingxenye yazo ezicindezelayo kumemori. Lokhu kungakhawulela imemori ekhona kwezinye izinhlelo zokusebenza ukwenza ukuthi ithebhulethi ingasheshi." "Ivumela uhlelo lokusebenza ukwenza izingxenye zalo ziqhubeke kumemori. Lokhu kungakhawulela imemori etholakala kwezinye izinhlelo zokusebenza ezenza i-TV ihambe kancane." "Ivumela uhlelo kusebenza ukwenza izingxenye yazo ezicindezelayo kumemori. Lokhu kungakhawulela imemori ekhona kwezinye izinhlelo zokusebenza ukwenza ukuthi ifoni ingasheshi." + "qalisa amasevisi waphambili" + "Vumela uhlelo lokusebenza ukusebenzisa amasevisi wangaphambili." "linganisa isikhala sokugcina uhlelo lokusebenza" "Ivuela uhlelo lokusebenza ukuthi ithole kabusha ikhodi yayo, i-dat kanye nosayizi abagcinwe okwesikhashana." "guqula izilungiselelo zohlelo" @@ -478,6 +483,8 @@ "Ivuela uhlelo lokusebenza ukuthi ixhumane ne-Near Field Communication (NFC) amathegi, amakhadi kanye nezinhlelo zokufunda." "khubaza ukukhiya kwakho iskrini" "Ivumela uhlelo lokusebenza ukukhubaza ukuvala ukhiye nanoma yikuphi ukuphepha kwephasiwedi okuhlobene. Isibonelo, ifoni ikhubaza ukuvala ukhiye lapho ithola ikholi yefoni engenayo, bese inike amandla kabusha ukuvala ukhiye lapho ikholi isiqedile." + "sebenzisa izingxenyekazi zekhompyutha ze-biometric" + "Ivumela uhlelo lokusebenza ukuthi lusebenzise izingxenyekazi zekhompyutha ze-biometric ukuze kuqinisekiswe" "phatha izingxenyekazi zekhompyutha zezigxivizo zeminwe" "Ivumela uhlelo lokusebenza ukuthi libuyisele izindlela zokungeza nokususa izifanekiso zezigxivizo zeminwe ngokusetshenziswa." "sebenzisa izingxenyekazi zekhompyutha zezigxivizo zeminwe" @@ -490,6 +497,7 @@ "Akubonwa" + "Isingxivizo somunwe sigunyaziwe" "Izingxenyekazi zekhompuyutha zezingxivizo zeminwe azitholakali." "Izigxivizo zeminwe azikwazi ukugcinwa. Sicela ususe izigxivizo zeminwe ezikhona." "Kufinyelelwe isikhathi sokuvala sezigxivizo zeminwe. Zama futhi" @@ -802,6 +810,8 @@ "Ukuvula ngephethini." "Vula ngobuso" "Ukuvula ngephinikhodi." + "Ukuvulwa kwephinikhodi ye-Sim." + "Ukuvulwa kwe-puk ye-Sim." "Ukuvula ngephasiwedi." "Indawo yephethini." "Indawo yokushelelisa." @@ -863,6 +873,12 @@ "Umbhalo ukopishwe ebhodini lokunamathisela." "Okuningi" "Imenyu+" + "Meta+" + "Ctrl+" + "Alt+" + "Shift+" + "Sym+" + "Function+" "isikhala" "faka" "susa" @@ -994,14 +1010,23 @@ "Indlela yokufakwayo" "Izenzo zombhalo" "I-imeyili" + "I-imeyili ikhethe amakheli" "Shaya" + "Ikholi ikhethe inombolo yefoni" "Beka" + "Isifunda sikhethe ikheli" "Vula" + "Vula i-URL ekhethiwe" "Umlayezo" + "Umlayezo ukhethe inombolo yefoni" "Engeza" + "Engeza koxhumana nabo" "Buka" + "Buka isikhathi esikhethiwe kwikhalenda" "Ishejuli" + "Shejula imicimbi yesikhathi esikhethiwe" "Landelela" + "Ithrekhi ikhethe indiza" "Isikhala sokulondoloza siyaphela" "Eminye imisebenzi yohlelo ingahle ingasebenzi" "Akusona isitoreji esanele sesistimu. Qiniseka ukuthi unesikhala esikhululekile esingu-250MB uphinde uqalise kabusha." @@ -1074,31 +1099,28 @@ "Hlola izibuyekezo" "Inqubo %1$s (yohlelo %2$s) iphule inqubomgomo oziphoqelela yona Yemodi Ebukhali." "Inqubo %1$s yephule inqubomgomo yokuziphoqelela Yemodi Ebukhali." - "I-Android ifaka ezakamuva..." - "I-Android iyaqala…" + "Ifoni iyabuyekeza…" + "Ithebulethi iyabuyekeza…" + "Idivayisi iyabuyekeza…" + "Ifoni iyaqala…" + "Ithebulethi iyaqala…" + "Idivayisi iyaqala…" "Ikhulisa isitoreji." - "Iqedela isibuyekezo se-Android…" - "Ezinye izinhlelo zokusebenza kungenzeka zingasebenzi kahle kuze kuqedwe ukuthuthukiswa" + "Iqedela ukubuyekezwa kwesistimu…" "%1$s iyathuthukisa…" "Ukubeka ezingeni eliphezulu %1$d uhlelo lokusebenza %2$d" "Ukulungisela i-%1$s." "Qalisa izinhlelo zokusebenza." "Qedela ukuqala kabusha." "%1$s iyasebenza" - - - - - - - - - - - - + "Thepha ukuze ubuyele emuva kwigeyimu" + "Khetha igeyimu" + "Ngokusebenza okungcono, eyodwa yalawa mageyimu ingavulwa ngesikhathi." + "Emuva ku-%1$s" + "Vula i-%1$s" + "%1$s izovala ngaphandle kokulondoloza" "I-%1$s idlule umkhawulo wememori" - "Ukulahlwa kwehipu kuqoqiwe; thepha ukuze wabelane" + "Ukulahlwa kwehipu kuqoqiwe. Thepha ukuze wabelane." "Yabelana ngokulahlwa kwehipu?" "Inqubo engu-%1$s idlule inqubo yayo yomkhawulo wememori ongu-%2$s. Ukulahlwa kwehipu kuyatholakala kuwe ukuze wabelane nonjiniyela wayo. Qaphela: lokhu kulahlwa kwehipu kungaqukatha noma yiluphi ulwazi lakho lomuntu siqu uhlelo lokusebenza elinokufinyelela kukho." "Khetha okufanele kwenziwe okomqhafazo" @@ -1133,12 +1155,12 @@ "Xhuma kunethiwekhi evulekile ye-Wi‑Fi" "Xhumeka kunethiwekhi yenkampani yenethiwekhi ye-Wi-Fi" - "Ixhuma kunethiwekhi evulekile ye-Wi‑Fi" + "Ixhumeka kunethiwekhi ye-Wi-Fi" "Kuxhumeke kunethiwekhi ye-Wi‑Fi" "Ayikwazanga ukuxhumeka kunethiwekhi ye-Wi-Fi" "Thepha ukuze ubone onke amanethiwekhi" "Xhuma" - "Onke amanethiwekhi" + "Onke amanethiwekhi" "I-Wi-Fi izovuleka ngokuzenzakalela" "Uma useduze kwenethiwekhi yekhwalithi ephezulu elondoloziwe" "Ungaphindi uvule" @@ -1204,6 +1226,7 @@ "Qala phansi" "Yenza kusebenze isevisi yeselula" "Landa uhlelo lokusebenza lwenkampani yenethiwekhi ukuze wenze kusebenze i-SIM yakho entsha" + "Landa uhlelo lokusebenza lwe-%1$s ukuze wenze kusebenze i-SIM yakho entsha" "Landa uhlelo lokusebenza" "Kufakwe i-SIM entsha" "Thepha ukuze uyisethe" @@ -1222,13 +1245,13 @@ "I-PTP nge-USB ivuliwe" "Kuvulwe ukusebenzisa ifoni njengemodemu kwe-USB" "I-MIDI nge-USB ivuliwe" - "Imodi yesisetshenziswa se-USB ivuliwe" + "Insiza ye-USB ixhunyiwe" "Thepha ngezinketho eziningi." "Ishaja idivayisi exhunyiwe. Thepha ukuze uthole ezinye izinketho." "Kutholwe isisetshenziswa se-analog yomsindo" "Idivayisi enamathiselwe kwi-imeyili ayihambisani nale foni. Thepha ukuze ufunde kabanzi." "Ukulungisa iphutha le-USB kuxhunyiwe" - "Thepha ukuze ukhubaze ukususa isiphazamisi se-USB." + "Thepha ukuze uvale ukulungisa amaphutha kwe-USB" "Khetha ukuvimbela ukulungisa iphutha le-USB." "Ithatha umbiko wesiphazamisi..." "Yabelana ngombiko wesiphazamisi?" @@ -1247,34 +1270,35 @@ "%s ukubonisa ngaphezu kwezinye izinhlelo zokusebenza" "%s ibonisa ngaphezu kwezinye izinhlelo zokusebenza" "Uma ungafuni ukuthi i-%s isebenzise lesi sici, thepha ukuze uvule izilungiselelo bese usivale." - "VALA" - "Ilungiselela i-%s" - "Ihlolela amaphutha" - "I-%s entsha itholiwe" + "Vala" + "Iyahlola %s…" + "Ukubuyekeza okuqukethwe kwamanje" + "Okusha %s" + "Thepha ukuze usethe" "Ukuze kudluliselwe izithombe nemidiya" - "Yonakele %s" - "%s yonakele. Thepha ukuze ulungise." + "Inkinga ngo-%s" + "Thepha ukuze ulungise" "%s yonakele. Khetha ukulungisa." "Akusekelwe %s" "Le divayisi ayisekeli le %s. Thepha ukuze usethe ngefomethi esekelwayo." "Le divayisi ayisekeli le %s. Khetha ukuze usethe ngefomethi esekelwayo." "I-%s isuswe ngokungalindelekile" - "Yehlisa i-%s ngaphambi kokususa ukuze ugweme ukulahleka kwedatha" - "I-%s isusiwe" - "I-%s isusiwe; faka entsha" - "Isakhipha i-%s…" - "Ungayisusi" + "Khipha imidiya ngaphambi kokususa ukuze ugweme ukulahlekelwa okuqukethwe" + "%s ususiwe" + "Eminye imisebenzi ingahle ingasebenzi kahle. Faka isitoreji esisha." + "Ukukhipha i-%s" + "Ungayisusi" "Setha" "Khipha" "Hlola" "%s okulahlekile" - "Faka kabusha le divayisi" + "Faka idivayisi futhi" "Ihambisa i-%s" "Ihambisa idatha" - "Ukuhamba kuphelele" - "Idatha iyiswe ku-%s" - "Ayikwazanga ukuhambisa idatha" - "Idatha isele endaweni yoqobo" + "Ukudlulisela okuqukethwe kwenziwe" + "Okuqukethwe kuyiswe ku-%s" + "Ayikwazanga ukuhambisa okuqukethwe" + "Zama ukuhambisa okuqukethwe futhi" "Susiwe" "Khipha" "Iyahlola..." @@ -1333,14 +1357,14 @@ "I-VPN ehlala ikhanya iyaxhuma…" "I-VPN ehlala ikhanya ixhunyiwe" "Inqamukile kusuka ku-VPN njalo" - "Iphutha le-VPN ehlala ikhanya" + "Ayikwazanga ukuxhumeka ku-VPN ehlala ivuliwe" "Shintsha inethiwekhi noma izilungiselelo ze-VPN" "Khetha ifayela" "Ayikho ifayela ekhethiwe" "Setha kabusha" "Hambisa" - "Imodi yemoto ivunyelwe" - "Thepha ukuze uphume kumodi yemoto." + "Uhlelo lokusebenza lokushayela luyasebenza" + "Thepha ukuze uphume kuhlelo lokusebenza lokushayela." "Ukusebenzisa njengemodemu noma i-hotspot ephathekayo kuvuliwe" "Thepha ukuze usethe." "Ukusebenzisa ifoni njengemodemu kukhutshaziwe" @@ -1418,22 +1442,19 @@ "%s idrayivu ye-USB" "Isitoreji se-USB" "Hlela" - "Izexwayiso zokusetshenziswa kwedatha" - "Thepha ukuze ubuke ukusetshenziswa nezilungiselelo." - "2G-3G umkhawulo wedatha ufinyelelwe" - "4G umkhawulo wedatha ufinyelelwe" + "Isexwayiso sedatha" + "Usebenzise i-%s yedatha" "Kufinyelelwe kumkhawulo wedatha yeselula" "Umkhawulo wedatha ye-Wi-Fi ufinyelelwe" - "Idatha imiswe ngokusetha kabusha umjikelezo" - "umkhawulo wedatha ye-2G-3G ufinyelelwe" - "Umkhawulo wedatha ye-4G ufinyelelwe" - "Umkhawulo wedatha yefoni ufinyelelwe" - "Kufinyelwe kunkhawulo we-Wi-Fi ongedlulwe" - "%s ngaphezu komkhawulo ocacisiwe" + "Idatha imiswe okwesikhashana kuwo wonke umjikelezo wakho" + "Ngaphezulu komkhawulo wakho wedatha osethiwe weselula" + "Ngaphezulu komkhawulo wakho wedatha ye-Wi-Fi" + "Udlule ngokungu-%s ngaphezulu komkhawulo wakho osethiwe" "Imininingo egciniwe ivinjelwe" "Thepha ukuze ususe umkhawulo." - "Ukusetshenziswa okukhulu kwedatha" - "Ukusetshenziswa kwedatha yakho ezinsukwini zokugcina ezimbalwa yinkulu kunokujwayelekile. Thepha ukuze ubuke ukusetshenziswa nezilungiselelo." + "Ukusetshenziswa kwedatha yeselula okuphezulu" + "Izinhlelo zakho zokusebenza zisebenzise idatha eningi kunejwayelekile" + "I-%s isebenzise idatha engaphezulu kunokujwayelekile" "Isitifiketi sokuvikeleka" "Lesi sitifiketi silungile." "Ikhishelwe u:" @@ -1669,7 +1690,7 @@ "Kufakwe umlawuli wakho" "Kubuyekezwe umlawuli wakho" "Kususwe umlawuli wakho" - "Ukuze kusizwe ukuthuthukisa impilo yebhethri, isilondolozi sebhethri sehlisa ukusebenza kwedivayisi yakho kuphinde kukhawulele ukudlidliza, amasevisi endawo kanye nedatha eningi yasemuva. I-imeyili, ukulayeza nezinye izinhlelo zokusebenza ezithembele ekuvunyelanisweni kungenzeka zingabuyekezwa ngaphandle kokuthi uzivule.\n\nIsilondolozi sebhethri sivalwa ngokuzenzakalela uma idivayisi yakho ishaja." + "Ukuze kunwetshwe impilo yebhethri, Isilondolozi sebhethri sehlisa ukusebenza kwedivayisi yakho siphinde sikhawulele noma sivale ukudlidliza, amasevisi endawo, nedatha engemuva. I-imeyili, ukulayeza, nezinye izinhlelo zokusebenza ezithembele ekuvunyelanisweni kungenzeka zingabuyekezi ngaphandle kokuthi uzivule.\n\nIsilondolozi sebhethri sivalwa ngokuzenzakalela uma idivayisi yakho ishaja." "Ukusiza ukwehlisa ukusetshenziswa kwedatha, iseva yedatha igwema ezinye izinhlelo zokusebenza ukuthi zithumele noma zamukele idatha ngasemuva. Uhlelo lokusebenza olisebenzisa okwamanje lingafinyelela idatha, kodwa lingenza kanjalo kancane. Lokhu kungachaza, isibonelo, ukuthi izithombe azibonisi uze uzithephe." "Vula iseva yedatha?" "Vula" @@ -1681,9 +1702,9 @@ Ngeminithi elingu-%1$d (kuze kube ngu-%2$s) Ngeminithi elingu-%1$d (kuze kube ngu-%2$s) - - Kwamahora angu-%1$d (kuze kube ngo-%2$s) - Kwamahora angu-%1$d (kuze kube ngo-%2$s) + + Amahora angu-%1$d (kuze kube ngu-%2$s) + Amahora angu-%1$d (kuze kube ngu-%2$s) Ngehora elingu-%1$d (kuze kube ngu-%2$s) @@ -1697,7 +1718,7 @@ Ngeminithi elingu-%d Ngeminithi elingu-%d - + Amahora angu-%d Amahora angu-%d @@ -1720,14 +1741,14 @@ "Ithuliswe ngu-%1$s" "Kukhona inkinga yangaphakathi ngedivayisi yakho, futhi ingase ibe engazinzile kuze kube yilapho usetha kabusha yonke idatha." "Kukhona inkinga yangaphakathi ngedivayisi yakho. Xhumana nomkhiqizi wakho ukuze uthole imininingwane." - "Isicelo se-USSD siguqulelwe kusicelo se-DIAL." - "Isicelo se-USSD siguqulelwe kusicelo se-SS." - "Isicelo se-USSD siguqulelwe kusicelo esisha se-USSD." - "Isicelo se-USSD siguqulelwe kusicelo se-DIAL." - "Isicelo se-SS siguqulelwe kusicelo se-DIAL." - "Isicelo se-SS siguqulelwe kusicelo se-DIAL." - "Isicelo se-SS siguqulelwe kusicelo se-USSD." - "Isicelo se-SS siguqulelwe kusicelo esisha se-SS." + "Isicelo se-USSD sishintshele kukholi ejwayelekile" + "Isicelo se-USSD sishintshele kusicelo se-SS" + "Kushintshwelwe kusicelo esisha se-USSD" + "Isicelo se-USSD sishintshele kukholi yevidiyo" + "Isicelo se-SS sishintshele kukholi ejwayelekile" + "Isicelo se-SS sishintshele kukholi yevidiyo" + "Isicelo se-SS sishintshele kusicelo se-USSD" + "Ishintshele kusicelo esisha se-SS" "Iphrofayela yomsebenzi" "Nweba" "Goqa" @@ -1825,6 +1846,10 @@ "I-SIM ayinikezelwe izwi" "I-SIM ayivunyelwe kwizwi" "Ifoni ayivunyelwe izwi" + "I-SIM %d ayivunyelwe" + "I-SIM %d ayinikeziwe" + "I-SIM %d ayivunyelwe" + "I-SIM %d ayivunyelwe" "Iwindi lesigelekeqe" "+ %1$d" "Inguqulo yohlelo lokusebenza yehliselwe phansi noma ayihambelani nalesi sinqamuleli" @@ -1837,7 +1862,14 @@ "Uhlelo lokusebenza oluyingozi lutholakele" "I-%1$s ifuna ukubonisa izingcezu ze-%2$s" "Hlela" + "Amakholi nezaziso zizodlidliza" + "Amakholi nezaziso zizothuliswa" "Ushintsho lwesistimu" + "Ungaphazamasi" + "Okuthi Ungaphazamisi kufihla izaziso ukukusiza ukuthi ugxile" + "Lokhu ukuziphatha okusha. Thepha ukuze ushintshe." "Ukungaphazamisi kushintshile" - "Thepha ukuze uhlole izilungiselelo zokuziphatha zokuphazanyiswa" + "Thepha ukuze uhlole ukuthi yini evinjelwe." + "Isistimu" + "Izilungiselelo" diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml index 449d3e7beca1d76a04cbb96a8114ffd6bb4c91cf..c63f31997bcb7d89e0ae9232e0e2f5b9f39fcb1b 100644 --- a/core/res/res/values/colors.xml +++ b/core/res/res/values/colors.xml @@ -33,11 +33,16 @@ a light UI more visible. --> #80ffffff #80ffffff + #ffffffff + #ff000000 #ffff0000 + #00000000 + #ff000000 + #ffffffff @android:color/background_light @android:color/background_dark @@ -80,6 +85,7 @@ #ddd + #aaa diff --git a/core/res/res/values/colors_holo.xml b/core/res/res/values/colors_holo.xml index 917c781812ca8a88a0aea12b999957e0a88d5cb5..4297eeaafdc443c14b80517bfddf096f7edea969 100644 --- a/core/res/res/values/colors_holo.xml +++ b/core/res/res/values/colors_holo.xml @@ -50,29 +50,29 @@ - + #ff33b5e5 - + #33999999 - + #ff99cc00 - + #ffff4444 - + #ff0099cc - + #ff669900 - + #ffcc0000 - + #ffaa66cc - + #ffffbb33 - + #ffff8800 - + #ff00ddff - + #33CCCCCC diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 66d25df41e63f4f58265bd7ff7420636416b4c60..2a6b33108881d2d8c4854d20dcbdc27a1162771b 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -30,33 +30,32 @@ @string/status_bar_rotate @string/status_bar_headset @string/status_bar_data_saver - @string/status_bar_managed_profile @string/status_bar_ime @string/status_bar_sync_failing @string/status_bar_sync_active - @string/status_bar_cast - @string/status_bar_hotspot - @string/status_bar_location - @string/status_bar_bluetooth @string/status_bar_nfc @string/status_bar_tty @string/status_bar_speakerphone @string/status_bar_zen @string/status_bar_mute @string/status_bar_volume + @string/status_bar_cdma_eri + @string/status_bar_data_connection + @string/status_bar_phone_evdo_signal + @string/status_bar_phone_signal + @string/status_bar_secure + @string/status_bar_alarm_clock + @string/status_bar_bluetooth + @string/status_bar_managed_profile + @string/status_bar_cast @string/status_bar_vpn + @string/status_bar_location + @string/status_bar_hotspot @string/status_bar_ethernet @string/status_bar_wifi @string/status_bar_mobile @string/status_bar_airplane - @string/status_bar_cdma_eri - @string/status_bar_data_connection - @string/status_bar_phone_evdo_signal - @string/status_bar_phone_signal @string/status_bar_battery - @string/status_bar_alarm_clock - @string/status_bar_secure - @string/status_bar_clock rotate diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 0246c804952c34178e579df99fab98b3c33112d7..42cc54f83f468a420b1f377fff321476bbb024a0 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -708,23 +708,38 @@ + + + + + + + + + + + + + + + diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index 49cd2726731762948f6ced25f8844f946639f08b..17b9d28aaab34c16540b6d57fb79988a3012b333 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -2767,10 +2767,10 @@ Call selected phone number - Locate + Map - Locale selected address + Locate selected address Open diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index cb8d629abaaf4a70b1effd63683186d645099442..cbd7b4ddb2bc08ea5903d55aa08b5c12473db2ef 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2732,6 +2732,10 @@ + + + + diff --git a/core/tests/coretests/src/android/os/MemoryFileTest.java b/core/tests/coretests/src/android/os/MemoryFileTest.java index 82af662e207e6d79d00c79a009bf205c4494151a..20b298d639d24034f74baf573e801425a8338c77 100644 --- a/core/tests/coretests/src/android/os/MemoryFileTest.java +++ b/core/tests/coretests/src/android/os/MemoryFileTest.java @@ -23,6 +23,7 @@ import android.test.suitebuilder.annotation.SmallTest; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.nio.BufferOverflowException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -110,7 +111,7 @@ public class MemoryFileTest extends AndroidTestCase { try { os.write(new byte[] { -1, -1 }); fail(); - } catch (IndexOutOfBoundsException expected) { + } catch (IndexOutOfBoundsException | BufferOverflowException expected) { } byte[] copy = new byte[file.length()]; diff --git a/core/tests/coretests/src/android/provider/SettingsBackupTest.java b/core/tests/coretests/src/android/provider/SettingsBackupTest.java index 2a3fcadb51445251a34f4beab17847b65ebee50d..dfc99f6fcb3adaff82bdc6ae02c5949b0a997cad 100644 --- a/core/tests/coretests/src/android/provider/SettingsBackupTest.java +++ b/core/tests/coretests/src/android/provider/SettingsBackupTest.java @@ -267,6 +267,7 @@ public class SettingsBackupTest { Settings.Global.LOW_POWER_MODE, Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL_MAX, Settings.Global.LOW_POWER_MODE_STICKY, + Settings.Global.LOW_POWER_MODE_SUGGESTION_PARAMS, Settings.Global.LTE_SERVICE_FORCED, Settings.Global.MAX_NOTIFICATION_ENQUEUE_RATE, Settings.Global.MAX_SOUND_TRIGGER_DETECTION_SERVICE_OPS_PER_DAY, @@ -587,7 +588,8 @@ public class SettingsBackupTest { Settings.Secure.BLUETOOTH_ON_WHILE_DRIVING, Settings.Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, Settings.Secure.LOW_POWER_WARNING_ACKNOWLEDGED, - Settings.Secure.SUPPRESS_AUTO_BATTERY_SAVER_SUGGESTION); + Settings.Secure.SUPPRESS_AUTO_BATTERY_SAVER_SUGGESTION, + Settings.Secure.PACKAGES_TO_CLEAR_DATA_BEFORE_FULL_RESTORE); @Test public void systemSettingsBackedUpOrBlacklisted() { diff --git a/core/tests/coretests/src/android/view/textclassifier/TextClassificationTest.java b/core/tests/coretests/src/android/view/textclassifier/TextClassificationTest.java index afc4bd5aa783e2eeea15faad0266409637fea2f7..5d58f550b3f518086f2026b624c186a4af04bcec 100644 --- a/core/tests/coretests/src/android/view/textclassifier/TextClassificationTest.java +++ b/core/tests/coretests/src/android/view/textclassifier/TextClassificationTest.java @@ -37,9 +37,10 @@ import android.view.View; import org.junit.Test; import org.junit.runner.RunWith; -import java.util.Calendar; +import java.time.Instant; +import java.time.ZoneId; +import java.time.ZonedDateTime; import java.util.Locale; -import java.util.TimeZone; @SmallTest @RunWith(AndroidJUnit4.class) @@ -163,8 +164,9 @@ public class TextClassificationTest { @Test public void testParcelOptions() { - Calendar referenceTime = Calendar.getInstance(TimeZone.getTimeZone("UTC"), Locale.US); - referenceTime.setTimeInMillis(946771200000L); // 2000-01-02 + ZonedDateTime referenceTime = ZonedDateTime.ofInstant( + Instant.ofEpochMilli(946771200000L), // 2000-01-02 + ZoneId.of("UTC")); TextClassification.Options reference = new TextClassification.Options(); reference.setDefaultLocales(new LocaleList(Locale.US, Locale.GERMANY)); diff --git a/graphics/java/android/graphics/ImageDecoder.java b/graphics/java/android/graphics/ImageDecoder.java index 5ca0ad63159f5f33131fb968f81b35d745797a63..00dc22ea162bacc667325c6abe5194ecbd488619 100644 --- a/graphics/java/android/graphics/ImageDecoder.java +++ b/graphics/java/android/graphics/ImageDecoder.java @@ -21,10 +21,12 @@ import static android.system.OsConstants.SEEK_SET; import static java.lang.annotation.RetentionPolicy.SOURCE; +import android.annotation.AnyThread; import android.annotation.IntDef; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.TestApi; +import android.annotation.WorkerThread; import android.content.ContentResolver; import android.content.res.AssetFileDescriptor; import android.content.res.AssetManager; @@ -65,6 +67,16 @@ public final class ImageDecoder implements AutoCloseable { /** * Source of the encoded image data. + * + *

        This object references the data that will be used to decode a + * Drawable or Bitmap in {@link #decodeDrawable} or {@link #decodeBitmap}. + * Constructing a {@code Source} (with one of the overloads of + * {@code createSource}) can be done on any thread because the construction + * simply captures values. The real work is done in decodeDrawable or + * decodeBitmap.

        + * + *

        Further, a Source object can be reused with different settings, or + * even used simultaneously in multiple threads.

        */ public static abstract class Source { private Source() {} @@ -120,7 +132,8 @@ public final class ImageDecoder implements AutoCloseable { int length = mBuffer.limit() - mBuffer.position(); return nCreate(mBuffer.array(), offset, length, this); } - return nCreate(mBuffer, mBuffer.position(), mBuffer.limit(), this); + ByteBuffer buffer = mBuffer.slice(); + return nCreate(buffer, buffer.position(), buffer.limit(), this); } } @@ -232,6 +245,8 @@ public final class ImageDecoder implements AutoCloseable { /** * For backwards compatibility, this does *not* close the InputStream. + * + * Further, unlike other Sources, this one is not reusable. */ private static class InputStreamSource extends Source { InputStreamSource(Resources res, InputStream is, int inputDensity) { @@ -322,12 +337,17 @@ public final class ImageDecoder implements AutoCloseable { final Resources mResources; final int mResId; int mResDensity; + private Object mLock = new Object(); @Override public Resources getResources() { return mResources; } @Override - public int getDensity() { return mResDensity; } + public int getDensity() { + synchronized (mLock) { + return mResDensity; + } + } @Override public ImageDecoder createImageDecoder() throws IOException { @@ -336,10 +356,12 @@ public final class ImageDecoder implements AutoCloseable { // keep it alive. InputStream is = mResources.openRawResource(mResId, value); - if (value.density == TypedValue.DENSITY_DEFAULT) { - mResDensity = DisplayMetrics.DENSITY_DEFAULT; - } else if (value.density != TypedValue.DENSITY_NONE) { - mResDensity = value.density; + synchronized (mLock) { + if (value.density == TypedValue.DENSITY_DEFAULT) { + mResDensity = DisplayMetrics.DENSITY_DEFAULT; + } else if (value.density != TypedValue.DENSITY_NONE) { + mResDensity = value.density; + } } return createFromAsset((AssetInputStream) is, this); @@ -432,6 +454,18 @@ public final class ImageDecoder implements AutoCloseable { public boolean isAnimated() { return mDecoder.mAnimated; } + + /** + * If known, the color space the decoded bitmap will have. Note that the + * output color space is not guaranteed to be the color space the bitmap + * is encoded with. If not known (when the config is + * {@link Bitmap.Config#ALPHA_8} for instance), or there is an error, + * it is set to null. + */ + @Nullable + public ColorSpace getColorSpace() { + return mDecoder.getColorSpace(); + } }; /** @removed @@ -443,6 +477,9 @@ public final class ImageDecoder implements AutoCloseable { /** * Optional listener supplied to {@link #decodeDrawable} or * {@link #decodeBitmap}. + * + *

        This is necessary in order to change the default settings of the + * decode.

        */ public static interface OnHeaderDecodedListener { /** @@ -534,6 +571,9 @@ public final class ImageDecoder implements AutoCloseable { /** * Retrieve the {@link Source} that was interrupted. + * + *

        This can be used for equality checking to find the Source which + * failed to completely decode.

        */ @NonNull public Source getSource() { @@ -582,16 +622,17 @@ public final class ImageDecoder implements AutoCloseable { private final int mHeight; private final boolean mAnimated; - private int mDesiredWidth; - private int mDesiredHeight; - private int mAllocator = ALLOCATOR_DEFAULT; - private boolean mRequireUnpremultiplied = false; - private boolean mMutable = false; - private boolean mConserveMemory = false; - private boolean mDecodeAsAlphaMask = false; - private Rect mCropRect; - private Rect mOutPaddingRect; - private Source mSource; + private int mDesiredWidth; + private int mDesiredHeight; + private int mAllocator = ALLOCATOR_DEFAULT; + private boolean mUnpremultipliedRequired = false; + private boolean mMutable = false; + private boolean mConserveMemory = false; + private boolean mDecodeAsAlphaMask = false; + private ColorSpace mDesiredColorSpace = null; + private Rect mCropRect; + private Rect mOutPaddingRect; + private Source mSource; private PostProcessor mPostProcessor; private OnPartialImageListener mOnPartialImageListener; @@ -645,6 +686,7 @@ public final class ImageDecoder implements AutoCloseable { * @return a new Source object, which can be passed to * {@link #decodeDrawable} or {@link #decodeBitmap}. */ + @AnyThread @NonNull public static Source createSource(@NonNull Resources res, int resId) { @@ -659,6 +701,7 @@ public final class ImageDecoder implements AutoCloseable { * @return a new Source object, which can be passed to * {@link #decodeDrawable} or {@link #decodeBitmap}. */ + @AnyThread @NonNull public static Source createSource(@NonNull ContentResolver cr, @NonNull Uri uri) { @@ -670,6 +713,7 @@ public final class ImageDecoder implements AutoCloseable { * * @hide */ + @AnyThread @NonNull public static Source createSource(@NonNull ContentResolver cr, @NonNull Uri uri, @Nullable Resources res) { @@ -679,6 +723,7 @@ public final class ImageDecoder implements AutoCloseable { /** * Create a new {@link Source} from a file in the "assets" directory. */ + @AnyThread @NonNull public static Source createSource(@NonNull AssetManager assets, @NonNull String fileName) { return new AssetSource(assets, fileName); @@ -696,6 +741,7 @@ public final class ImageDecoder implements AutoCloseable { * not within data. * @hide */ + @AnyThread @NonNull public static Source createSource(@NonNull byte[] data, int offset, int length) throws ArrayIndexOutOfBoundsException { @@ -714,6 +760,7 @@ public final class ImageDecoder implements AutoCloseable { * See {@link #createSource(byte[], int, int). * @hide */ + @AnyThread @NonNull public static Source createSource(@NonNull byte[] data) { return createSource(data, 0, data.length); @@ -731,24 +778,35 @@ public final class ImageDecoder implements AutoCloseable { * be modified, even after the {@code AnimatedImageDrawable} is returned. * {@code buffer}'s contents should never be modified during decode.

        */ + @AnyThread @NonNull public static Source createSource(@NonNull ByteBuffer buffer) { - return new ByteBufferSource(buffer.slice()); + return new ByteBufferSource(buffer); } /** * Internal API used to generate bitmaps for use by Drawables (i.e. BitmapDrawable) + * + *

        Unlike other Sources, this one cannot be reused.

        + * * @hide */ + @AnyThread + @NonNull public static Source createSource(Resources res, InputStream is) { return new InputStreamSource(res, is, Bitmap.getDefaultDensity()); } /** * Internal API used to generate bitmaps for use by Drawables (i.e. BitmapDrawable) + * + *

        Unlike other Sources, this one cannot be reused.

        + * * @hide */ + @AnyThread @TestApi + @NonNull public static Source createSource(Resources res, InputStream is, int density) { return new InputStreamSource(res, is, density); } @@ -756,6 +814,7 @@ public final class ImageDecoder implements AutoCloseable { /** * Create a new {@link Source} from a {@link java.io.File}. */ + @AnyThread @NonNull public static Source createSource(@NonNull File file) { return new FileSource(file); @@ -766,14 +825,16 @@ public final class ImageDecoder implements AutoCloseable { * *

        This takes an input that functions like * {@link BitmapFactory.Options#inSampleSize}. It returns a width and - * height that can be acheived by sampling the encoded image. Other widths + * height that can be achieved by sampling the encoded image. Other widths * and heights may be supported, but will require an additional (internal) * scaling step. Such internal scaling is *not* supported with - * {@link #setRequireUnpremultiplied} set to {@code true}.

        + * {@link #setUnpremultipliedRequired} set to {@code true}.

        * * @param sampleSize Sampling rate of the encoded image. * @return {@link android.util.Size} of the width and height after * sampling. + * + * @hide */ @NonNull public Size getSampledSize(int sampleSize) { @@ -789,14 +850,32 @@ public final class ImageDecoder implements AutoCloseable { } // Modifiers + /** @removed + * @deprecated Renamed to {@link #setTargetSize}. + */ + @java.lang.Deprecated + public ImageDecoder setResize(int width, int height) { + this.setTargetSize(width, height); + return this; + } + /** - * Resize the output to have the following size. + * Specify the size of the output {@link Drawable} or {@link Bitmap}. + * + *

        By default, the output size will match the size of the encoded + * image, which can be retrieved from the {@link ImageInfo} in + * {@link OnHeaderDecodedListener#onHeaderDecoded}.

        + * + *

        Only the last call to this or {@link #setTargetSampleSize} is + * respected.

        + * + *

        Like all setters on ImageDecoder, this must be called inside + * {@link OnHeaderDecodedListener#onHeaderDecoded}.

        * * @param width must be greater than 0. * @param height must be greater than 0. - * @return this object for chaining. */ - public ImageDecoder setResize(int width, int height) { + public void setTargetSize(int width, int height) { if (width <= 0 || height <= 0) { throw new IllegalArgumentException("Dimensions must be positive! " + "provided (" + width + ", " + height + ")"); @@ -804,21 +883,70 @@ public final class ImageDecoder implements AutoCloseable { mDesiredWidth = width; mDesiredHeight = height; + } + + /** @removed + * @deprecated Renamed to {@link #setTargetSampleSize}. + */ + @java.lang.Deprecated + public ImageDecoder setResize(int sampleSize) { + this.setTargetSampleSize(sampleSize); return this; } + private int getTargetDimension(int original, int sampleSize, int computed) { + // Sampling will never result in a smaller size than 1. + if (sampleSize >= original) { + return 1; + } + + // Use integer divide to find the desired size. If that is what + // getSampledSize computed, that is the size to use. + int target = original / sampleSize; + if (computed == target) { + return computed; + } + + // If sampleSize does not divide evenly into original, the decoder + // may round in either direction. It just needs to get a result that + // is close. + int reverse = computed * sampleSize; + if (Math.abs(reverse - original) < sampleSize) { + // This is the size that can be decoded most efficiently. + return computed; + } + + // The decoder could not get close (e.g. it is a DNG image). + return target; + } + /** - * Resize based on a sample size. + * Set the target size with a sampleSize. * - *

        This has the same effect as passing the result of - * {@link #getSampledSize} to {@link #setResize(int, int)}.

        + *

        By default, the output size will match the size of the encoded + * image, which can be retrieved from the {@link ImageInfo} in + * {@link OnHeaderDecodedListener#onHeaderDecoded}.

        + * + *

        Requests the decoder to subsample the original image, returning a + * smaller image to save memory. The sample size is the number of pixels + * in either dimension that correspond to a single pixel in the output. + * For example, sampleSize == 4 returns an image that is 1/4 the + * width/height of the original, and 1/16 the number of pixels.

        + * + *

        Must be greater than or equal to 1.

        + * + *

        Only the last call to this or {@link #setTargetSize} is respected.

        + * + *

        Like all setters on ImageDecoder, this must be called inside + * {@link OnHeaderDecodedListener#onHeaderDecoded}.

        * * @param sampleSize Sampling rate of the encoded image. - * @return this object for chaining. */ - public ImageDecoder setResize(int sampleSize) { + public void setTargetSampleSize(int sampleSize) { Size size = this.getSampledSize(sampleSize); - return this.setResize(size.getWidth(), size.getHeight()); + int targetWidth = getTargetDimension(mWidth, sampleSize, size.getWidth()); + int targetHeight = getTargetDimension(mHeight, sampleSize, size.getHeight()); + this.setTargetSize(targetWidth, targetHeight); } private boolean requestedResize() { @@ -832,7 +960,7 @@ public final class ImageDecoder implements AutoCloseable { * Will typically result in a {@link Bitmap.Config#HARDWARE} * allocation, but may be software for small images. In addition, this will * switch to software when HARDWARE is incompatible, e.g. - * {@link #setMutable}, {@link #setDecodeAsAlphaMask}. + * {@link #setMutableRequired}, {@link #setDecodeAsAlphaMaskEnabled}. */ public static final int ALLOCATOR_DEFAULT = 0; @@ -855,8 +983,8 @@ public final class ImageDecoder implements AutoCloseable { * Require a {@link Bitmap.Config#HARDWARE} {@link Bitmap}. * * When this is combined with incompatible options, like - * {@link #setMutable} or {@link #setDecodeAsAlphaMask}, {@link #decodeDrawable} - * / {@link #decodeBitmap} will throw an + * {@link #setMutableRequired} or {@link #setDecodeAsAlphaMaskEnabled}, + * {@link #decodeDrawable} / {@link #decodeBitmap} will throw an * {@link java.lang.IllegalStateException}. */ public static final int ALLOCATOR_HARDWARE = 3; @@ -871,17 +999,18 @@ public final class ImageDecoder implements AutoCloseable { /** * Choose the backing for the pixel memory. * - * This is ignored for animated drawables. + *

        This is ignored for animated drawables.

        + * + *

        Like all setters on ImageDecoder, this must be called inside + * {@link OnHeaderDecodedListener#onHeaderDecoded}.

        * * @param allocator Type of allocator to use. - * @return this object for chaining. */ - public ImageDecoder setAllocator(@Allocator int allocator) { + public void setAllocator(@Allocator int allocator) { if (allocator < ALLOCATOR_DEFAULT || allocator > ALLOCATOR_HARDWARE) { throw new IllegalArgumentException("invalid allocator " + allocator); } mAllocator = allocator; - return this; } /** @@ -905,18 +1034,35 @@ public final class ImageDecoder implements AutoCloseable { * {@link Drawable} will throw an {@link java.lang.IllegalStateException}. *

        * - * @return this object for chaining. + *

        Like all setters on ImageDecoder, this must be called inside + * {@link OnHeaderDecodedListener#onHeaderDecoded}.

        + */ + public void setUnpremultipliedRequired(boolean unpremultipliedRequired) { + mUnpremultipliedRequired = unpremultipliedRequired; + } + + /** @removed + * @deprecated Renamed to {@link #setUnpremultipliedRequired}. */ - public ImageDecoder setRequireUnpremultiplied(boolean requireUnpremultiplied) { - mRequireUnpremultiplied = requireUnpremultiplied; + @java.lang.Deprecated + public ImageDecoder setRequireUnpremultiplied(boolean unpremultipliedRequired) { + this.setUnpremultipliedRequired(unpremultipliedRequired); return this; } /** * Return whether the {@link Bitmap} will have unpremultiplied pixels. */ + public boolean isUnpremultipliedRequired() { + return mUnpremultipliedRequired; + } + + /** @removed + * @deprecated Renamed to {@link #isUnpremultipliedRequired}. + */ + @java.lang.Deprecated public boolean getRequireUnpremultiplied() { - return mRequireUnpremultiplied; + return this.isUnpremultipliedRequired(); } /** @@ -932,11 +1078,12 @@ public final class ImageDecoder implements AutoCloseable { * {@link Canvas} will be recorded immediately and then applied to each * frame.

        * - * @return this object for chaining. + *

        Like all setters on ImageDecoder, this must be called inside + * {@link OnHeaderDecodedListener#onHeaderDecoded}.

        + * */ - public ImageDecoder setPostProcessor(@Nullable PostProcessor p) { + public void setPostProcessor(@Nullable PostProcessor p) { mPostProcessor = p; - return this; } /** @@ -953,11 +1100,12 @@ public final class ImageDecoder implements AutoCloseable { *

        Will be called if there is an error in the input. Without one, an * error will result in an Exception being thrown.

        * - * @return this object for chaining. + *

        Like all setters on ImageDecoder, this must be called inside + * {@link OnHeaderDecodedListener#onHeaderDecoded}.

        + * */ - public ImageDecoder setOnPartialImageListener(@Nullable OnPartialImageListener l) { + public void setOnPartialImageListener(@Nullable OnPartialImageListener l) { mOnPartialImageListener = l; - return this; } /** @@ -972,19 +1120,20 @@ public final class ImageDecoder implements AutoCloseable { * Crop the output to {@code subset} of the (possibly) scaled image. * *

        {@code subset} must be contained within the size set by - * {@link #setResize} or the bounds of the image if setResize was not - * called. Otherwise an {@link IllegalStateException} will be thrown by + * {@link #setTargetSize} or the bounds of the image if setTargetSize was + * not called. Otherwise an {@link IllegalStateException} will be thrown by * {@link #decodeDrawable}/{@link #decodeBitmap}.

        * *

        NOT intended as a replacement for * {@link BitmapRegionDecoder#decodeRegion}. This supports all formats, * but merely crops the output.

        * - * @return this object for chaining. + *

        Like all setters on ImageDecoder, this must be called inside + * {@link OnHeaderDecodedListener#onHeaderDecoded}.

        + * */ - public ImageDecoder setCrop(@Nullable Rect subset) { + public void setCrop(@Nullable Rect subset) { mCropRect = subset; - return this; } /** @@ -1001,13 +1150,13 @@ public final class ImageDecoder implements AutoCloseable { * If the image is a nine patch, this Rect will be set to the padding * rectangle during decode. Otherwise it will not be modified. * - * @return this object for chaining. + *

        Like all setters on ImageDecoder, this must be called inside + * {@link OnHeaderDecodedListener#onHeaderDecoded}.

        * * @hide */ - public ImageDecoder setOutPaddingRect(@NonNull Rect outPadding) { + public void setOutPaddingRect(@NonNull Rect outPadding) { mOutPaddingRect = outPadding; - return this; } /** @@ -1026,20 +1175,37 @@ public final class ImageDecoder implements AutoCloseable { * order to modify. Attempting to decode a mutable {@link Drawable} will * throw an {@link java.lang.IllegalStateException}.

        * - * @return this object for chaining. + *

        Like all setters on ImageDecoder, this must be called inside + * {@link OnHeaderDecodedListener#onHeaderDecoded}.

        */ - public ImageDecoder setMutable(boolean mutable) { + public void setMutableRequired(boolean mutable) { mMutable = mutable; + } + + /** @removed + * @deprecated Renamed to {@link #setMutableRequired}. + */ + @java.lang.Deprecated + public ImageDecoder setMutable(boolean mutable) { + this.setMutableRequired(mutable); return this; } /** * Return whether the {@link Bitmap} will be mutable. */ - public boolean getMutable() { + public boolean isMutableRequired() { return mMutable; } + /** @removed + * @deprecated Renamed to {@link #isMutableRequired}. + */ + @java.lang.Deprecated + public boolean getMutable() { + return this.isMutableRequired(); + } + /** * Specify whether to potentially save RAM at the expense of quality. * @@ -1052,11 +1218,11 @@ public final class ImageDecoder implements AutoCloseable { * This necessarily lowers the quality of the output, but saves half * the memory used.

        * - * @return this object for chaining. + *

        Like all setters on ImageDecoder, this must be called inside + * {@link OnHeaderDecodedListener#onHeaderDecoded}.

        */ - public ImageDecoder setConserveMemory(boolean conserveMemory) { + public void setConserveMemory(boolean conserveMemory) { mConserveMemory = conserveMemory; - return this; } /** @@ -1077,45 +1243,97 @@ public final class ImageDecoder implements AutoCloseable { * with only one channel, treat that channel as alpha. Otherwise this call has * no effect.

        * - *

        setDecodeAsAlphaMask is incompatible with {@link #ALLOCATOR_HARDWARE}. Trying to + *

        This is incompatible with {@link #ALLOCATOR_HARDWARE}. Trying to * combine them will result in {@link #decodeDrawable}/ * {@link #decodeBitmap} throwing an * {@link java.lang.IllegalStateException}.

        * - * @return this object for chaining. + *

        Like all setters on ImageDecoder, this must be called inside + * {@link OnHeaderDecodedListener#onHeaderDecoded}.

        + */ + public void setDecodeAsAlphaMaskEnabled(boolean enabled) { + mDecodeAsAlphaMask = enabled; + } + + /** @removed + * @deprecated Renamed to {@link #setDecodeAsAlphaMaskEnabled}. */ - public ImageDecoder setDecodeAsAlphaMask(boolean decodeAsAlphaMask) { - mDecodeAsAlphaMask = decodeAsAlphaMask; + @java.lang.Deprecated + public ImageDecoder setDecodeAsAlphaMask(boolean enabled) { + this.setDecodeAsAlphaMaskEnabled(enabled); return this; } /** @removed - * @deprecated Call {@link #setDecodeAsAlphaMask} instead. + * @deprecated Renamed to {@link #setDecodeAsAlphaMaskEnabled}. */ @java.lang.Deprecated public ImageDecoder setAsAlphaMask(boolean asAlphaMask) { - return this.setDecodeAsAlphaMask(asAlphaMask); + this.setDecodeAsAlphaMask(asAlphaMask); + return this; } /** * Return whether to treat single channel input as alpha. * - *

        This returns whether {@link #setDecodeAsAlphaMask} was set to {@code true}. - * It may still return {@code true} even if the image has more than one - * channel and therefore will not be treated as an alpha mask.

        + *

        This returns whether {@link #setDecodeAsAlphaMaskEnabled} was set to + * {@code true}. It may still return {@code true} even if the image has + * more than one channel and therefore will not be treated as an alpha + * mask.

        */ + public boolean isDecodeAsAlphaMaskEnabled() { + return mDecodeAsAlphaMask; + } + + /** @removed + * @deprecated Renamed to {@link #isDecodeAsAlphaMaskEnabled}. + */ + @java.lang.Deprecated public boolean getDecodeAsAlphaMask() { return mDecodeAsAlphaMask; } /** @removed - * @deprecated Call {@link #getDecodeAsAlphaMask} instead. + * @deprecated Renamed to {@link #isDecodeAsAlphaMaskEnabled}. */ @java.lang.Deprecated public boolean getAsAlphaMask() { return this.getDecodeAsAlphaMask(); } + /** + * Specify the desired {@link ColorSpace} for the output. + * + *

        If non-null, the decoder will try to decode into this + * color space. If it is null, which is the default, or the request cannot + * be met, the decoder will pick either the color space embedded in the + * image or the color space best suited for the requested image + * configuration (for instance {@link ColorSpace.Named#SRGB sRGB} for + * the {@link Bitmap.Config#ARGB_8888} configuration).

        + * + *

        {@link Bitmap.Config#RGBA_F16} always uses the + * {@link ColorSpace.Named#LINEAR_EXTENDED_SRGB scRGB} color space). + * Bitmaps in other configurations without an embedded color space are + * assumed to be in the {@link ColorSpace.Named#SRGB sRGB} color space.

        + * + *

        Only {@link ColorSpace.Model#RGB} color spaces are + * currently supported. An IllegalArgumentException will + * be thrown by the decode methods when setting a non-RGB color space + * such as {@link ColorSpace.Named#CIE_LAB Lab}.

        + * + *

        The specified color space's transfer function must be + * an {@link ColorSpace.Rgb.TransferParameters ICC parametric curve}. An + * IllegalArgumentException will be thrown by the decode methods + * if calling {@link ColorSpace.Rgb#getTransferParameters()} on the + * specified color space returns null.

        + * + *

        Like all setters on ImageDecoder, this must be called inside + * {@link OnHeaderDecodedListener#onHeaderDecoded}.

        + */ + public void setTargetColorSpace(ColorSpace colorSpace) { + mDesiredColorSpace = colorSpace; + } + @Override public void close() { mCloseGuard.close(); @@ -1151,9 +1369,20 @@ public final class ImageDecoder implements AutoCloseable { } } - if (mPostProcessor != null && mRequireUnpremultiplied) { + if (mPostProcessor != null && mUnpremultipliedRequired) { throw new IllegalStateException("Cannot draw to unpremultiplied pixels!"); } + + if (mDesiredColorSpace != null) { + if (!(mDesiredColorSpace instanceof ColorSpace.Rgb)) { + throw new IllegalArgumentException("The target color space must use the " + + "RGB color model - provided: " + mDesiredColorSpace); + } + if (((ColorSpace.Rgb) mDesiredColorSpace).getTransferParameters() == null) { + throw new IllegalArgumentException("The target color space must use an " + + "ICC parametric transfer function - provided: " + mDesiredColorSpace); + } + } } private static void checkSubset(int width, int height, Rect r) { @@ -1166,13 +1395,14 @@ public final class ImageDecoder implements AutoCloseable { } } + @WorkerThread @NonNull private Bitmap decodeBitmapInternal() throws IOException { checkState(); return nDecodeBitmap(mNativePtr, this, mPostProcessor != null, mDesiredWidth, mDesiredHeight, mCropRect, - mMutable, mAllocator, mRequireUnpremultiplied, - mConserveMemory, mDecodeAsAlphaMask); + mMutable, mAllocator, mUnpremultipliedRequired, + mConserveMemory, mDecodeAsAlphaMask, mDesiredColorSpace); } private void callHeaderDecoded(@Nullable OnHeaderDecodedListener listener, @@ -1194,10 +1424,12 @@ public final class ImageDecoder implements AutoCloseable { * @param listener for learning the {@link ImageInfo} and changing any * default settings on the {@code ImageDecoder}. This will be called on * the same thread as {@code decodeDrawable} before that method returns. + * This is required in order to change any of the default settings. * @return Drawable for displaying the image. * @throws IOException if {@code src} is not found, is an unsupported * format, or cannot be decoded for any reason. */ + @WorkerThread @NonNull public static Drawable decodeDrawable(@NonNull Source src, @NonNull OnHeaderDecodedListener listener) throws IOException { @@ -1208,6 +1440,7 @@ public final class ImageDecoder implements AutoCloseable { return decodeDrawableImpl(src, listener); } + @WorkerThread @NonNull private static Drawable decodeDrawableImpl(@NonNull Source src, @Nullable OnHeaderDecodedListener listener) throws IOException { @@ -1215,7 +1448,7 @@ public final class ImageDecoder implements AutoCloseable { decoder.mSource = src; decoder.callHeaderDecoded(listener, src); - if (decoder.mRequireUnpremultiplied) { + if (decoder.mUnpremultipliedRequired) { // Though this could be supported (ignored) for opaque images, // it seems better to always report this error. throw new IllegalStateException("Cannot decode a Drawable " + @@ -1268,8 +1501,18 @@ public final class ImageDecoder implements AutoCloseable { } /** - * See {@link #decodeDrawable(Source, OnHeaderDecodedListener)}. + * Create a {@link Drawable} from a {@code Source}. + * + *

        Since there is no {@link OnHeaderDecodedListener}, the default + * settings will be used. In order to change any settings, call + * {@link #decodeDrawable(Source, OnHeaderDecodedListener)} instead.

        + * + * @param src representing the encoded image. + * @return Drawable for displaying the image. + * @throws IOException if {@code src} is not found, is an unsupported + * format, or cannot be decoded for any reason. */ + @WorkerThread @NonNull public static Drawable decodeDrawable(@NonNull Source src) throws IOException { @@ -1283,10 +1526,12 @@ public final class ImageDecoder implements AutoCloseable { * @param listener for learning the {@link ImageInfo} and changing any * default settings on the {@code ImageDecoder}. This will be called on * the same thread as {@code decodeBitmap} before that method returns. + * This is required in order to change any of the default settings. * @return Bitmap containing the image. * @throws IOException if {@code src} is not found, is an unsupported * format, or cannot be decoded for any reason. */ + @WorkerThread @NonNull public static Bitmap decodeBitmap(@NonNull Source src, @NonNull OnHeaderDecodedListener listener) throws IOException { @@ -1297,6 +1542,7 @@ public final class ImageDecoder implements AutoCloseable { return decodeBitmapImpl(src, listener); } + @WorkerThread @NonNull private static Bitmap decodeBitmapImpl(@NonNull Source src, @Nullable OnHeaderDecodedListener listener) throws IOException { @@ -1353,7 +1599,7 @@ public final class ImageDecoder implements AutoCloseable { float scale = (float) dstDensity / srcDensity; int scaledWidth = (int) (decoder.mWidth * scale + 0.5f); int scaledHeight = (int) (decoder.mHeight * scale + 0.5f); - decoder.setResize(scaledWidth, scaledHeight); + decoder.setTargetSize(scaledWidth, scaledHeight); return dstDensity; } @@ -1362,9 +1608,24 @@ public final class ImageDecoder implements AutoCloseable { return nGetMimeType(mNativePtr); } + @Nullable + private ColorSpace getColorSpace() { + return nGetColorSpace(mNativePtr); + } + /** - * See {@link #decodeBitmap(Source, OnHeaderDecodedListener)}. + * Create a {@link Bitmap} from a {@code Source}. + * + *

        Since there is no {@link OnHeaderDecodedListener}, the default + * settings will be used. In order to change any settings, call + * {@link #decodeBitmap(Source, OnHeaderDecodedListener)} instead.

        + * + * @param src representing the encoded image. + * @return Bitmap containing the image. + * @throws IOException if {@code src} is not found, is an unsupported + * format, or cannot be decoded for any reason. */ + @WorkerThread @NonNull public static Bitmap decodeBitmap(@NonNull Source src) throws IOException { return decodeBitmapImpl(src, null); @@ -1410,12 +1671,14 @@ public final class ImageDecoder implements AutoCloseable { boolean doPostProcess, int width, int height, @Nullable Rect cropRect, boolean mutable, - int allocator, boolean requireUnpremul, - boolean conserveMemory, boolean decodeAsAlphaMask) + int allocator, boolean unpremulRequired, + boolean conserveMemory, boolean decodeAsAlphaMask, + @Nullable ColorSpace desiredColorSpace) throws IOException; private static native Size nGetSampledSize(long nativePtr, int sampleSize); private static native void nGetPadding(long nativePtr, @NonNull Rect outRect); private static native void nClose(long nativePtr); private static native String nGetMimeType(long nativePtr); + private static native ColorSpace nGetColorSpace(long nativePtr); } diff --git a/graphics/java/android/graphics/Path.java b/graphics/java/android/graphics/Path.java index 098cdc67555d09f8118956be25f92465d0d64e81..cd0862cd13fe87c5a4af633f9b35fd93ecc74932 100644 --- a/graphics/java/android/graphics/Path.java +++ b/graphics/java/android/graphics/Path.java @@ -24,6 +24,8 @@ import android.annotation.Size; import dalvik.annotation.optimization.CriticalNative; import dalvik.annotation.optimization.FastNative; +import libcore.util.NativeAllocationRegistry; + /** * The Path class encapsulates compound (multiple contour) geometric paths * consisting of straight line segments, quadratic curves, and cubic curves. @@ -32,10 +34,14 @@ import dalvik.annotation.optimization.FastNative; * text on a path. */ public class Path { + + private static final NativeAllocationRegistry sRegistry = new NativeAllocationRegistry( + Path.class.getClassLoader(), nGetFinalizer(), 48 /* dummy size */); + /** * @hide */ - public long mNativePath; + public final long mNativePath; /** * @hide @@ -52,6 +58,7 @@ public class Path { */ public Path() { mNativePath = nInit(); + sRegistry.registerNativeAllocation(this, mNativePath); } /** @@ -69,6 +76,7 @@ public class Path { } } mNativePath = nInit(valNative); + sRegistry.registerNativeAllocation(this, mNativePath); } /** @@ -297,7 +305,7 @@ public class Path { * a rectangle * @return true if the path specifies a rectangle */ - public boolean isRect(RectF rect) { + public boolean isRect(@Nullable RectF rect) { return nIsRect(mNativePath, rect); } @@ -771,15 +779,6 @@ public class Path { nTransform(mNativePath, matrix.native_instance); } - protected void finalize() throws Throwable { - try { - nFinalize(mNativePath); - mNativePath = 0; // Other finalizers can still call us. - } finally { - super.finalize(); - } - } - /** @hide */ public final long readOnlyNI() { return mNativePath; @@ -820,7 +819,7 @@ public class Path { private static native long nInit(); private static native long nInit(long nPath); - private static native void nFinalize(long nPath); + private static native long nGetFinalizer(); private static native void nSet(long native_dst, long nSrc); private static native void nComputeBounds(long nPath, RectF bounds); private static native void nIncReserve(long nPath, int extraPtCount); diff --git a/keystore/java/android/security/IKeyChainService.aidl b/keystore/java/android/security/IKeyChainService.aidl index 5a8fa07003286ad5e92cfd4ce019376b11c441d4..0d32075d20d28683b30c319d3c62375485f1f295 100644 --- a/keystore/java/android/security/IKeyChainService.aidl +++ b/keystore/java/android/security/IKeyChainService.aidl @@ -33,8 +33,8 @@ interface IKeyChainService { boolean isUserSelectable(String alias); void setUserSelectable(String alias, boolean isUserSelectable); - boolean generateKeyPair(in String algorithm, in ParcelableKeyGenParameterSpec spec); - boolean attestKey(in String alias, in byte[] challenge, in int[] idAttestationFlags, + int generateKeyPair(in String algorithm, in ParcelableKeyGenParameterSpec spec); + int attestKey(in String alias, in byte[] challenge, in int[] idAttestationFlags, out KeymasterCertificateChain chain); boolean setKeyPairCertificate(String alias, in byte[] userCert, in byte[] certChain); diff --git a/keystore/java/android/security/KeyChain.java b/keystore/java/android/security/KeyChain.java index 2daf733d057fbe697e94fecaed1313093d50b877..46a7fa8d5e28f7d05b34f13e96fc9136bd6d4b46 100644 --- a/keystore/java/android/security/KeyChain.java +++ b/keystore/java/android/security/KeyChain.java @@ -245,6 +245,82 @@ public final class KeyChain { */ public static final String EXTRA_KEY_ACCESSIBLE = "android.security.extra.KEY_ACCESSIBLE"; + /** + * Indicates that a call to {@link #generateKeyPair} was successful. + * @hide + */ + public static final int KEY_GEN_SUCCESS = 0; + + /** + * An alias was missing from the key specifications when calling {@link #generateKeyPair}. + * @hide + */ + public static final int KEY_GEN_MISSING_ALIAS = 1; + + /** + * A key attestation challenge was provided to {@link #generateKeyPair}, but it shouldn't + * have been provided. + * @hide + */ + public static final int KEY_GEN_SUPERFLUOUS_ATTESTATION_CHALLENGE = 2; + + /** + * Algorithm not supported by {@link #generateKeyPair} + * @hide + */ + public static final int KEY_GEN_NO_SUCH_ALGORITHM = 3; + + /** + * Invalid algorithm parameters when calling {@link #generateKeyPair} + * @hide + */ + public static final int KEY_GEN_INVALID_ALGORITHM_PARAMETERS = 4; + + /** + * Keystore is not available when calling {@link #generateKeyPair} + * @hide + */ + public static final int KEY_GEN_NO_KEYSTORE_PROVIDER = 5; + + /** + * General failure while calling {@link #generateKeyPair} + * @hide + */ + public static final int KEY_GEN_FAILURE = 6; + + /** + * Successful call to {@link #attestKey} + * @hide + */ + public static final int KEY_ATTESTATION_SUCCESS = 0; + + /** + * Attestation challenge missing when calling {@link #attestKey} + * @hide + */ + public static final int KEY_ATTESTATION_MISSING_CHALLENGE = 1; + + /** + * The caller requested Device ID attestation when calling {@link #attestKey}, but has no + * permissions to get device identifiers. + * @hide + */ + public static final int KEY_ATTESTATION_CANNOT_COLLECT_DATA = 2; + + /** + * The underlying hardware does not support Device ID attestation or cannot attest to the + * identifiers that are stored on the device. This indicates permanent inability + * to get attestation records on the device. + * @hide + */ + public static final int KEY_ATTESTATION_CANNOT_ATTEST_IDS = 3; + + /** + * General failure when calling {@link #attestKey} + * @hide + */ + public static final int KEY_ATTESTATION_FAILURE = 4; + /** * Returns an {@code Intent} that can be used for credential * installation. The intent may be used without any extras, in diff --git a/keystore/java/android/security/KeyStore.java b/keystore/java/android/security/KeyStore.java index 1924bbe764c7d445c3c6ca7f049b9ba6815e3529..fe05c13c999be05c12211721f6065f8f86cda478 100644 --- a/keystore/java/android/security/KeyStore.java +++ b/keystore/java/android/security/KeyStore.java @@ -16,6 +16,7 @@ package android.security; +import android.app.ActivityManager; import android.app.ActivityThread; import android.app.Application; import android.app.KeyguardManager; @@ -66,6 +67,7 @@ public class KeyStore { public static final int VALUE_CORRUPTED = 8; public static final int UNDEFINED_ACTION = 9; public static final int WRONG_PASSWORD = 10; + public static final int CANNOT_ATTEST_IDS = -66; public static final int HARDWARE_TYPE_UNAVAILABLE = -68; /** @@ -278,7 +280,7 @@ public class KeyStore { /** * Attempt to lock the keystore for {@code user}. * - * @param user Android user to lock. + * @param userId Android user to lock. * @return whether {@code user}'s keystore was locked. */ public boolean lock(int userId) { @@ -299,7 +301,7 @@ public class KeyStore { * This is required before keystore entries created with FLAG_ENCRYPTED can be accessed or * created. * - * @param user Android user ID to operate on + * @param userId Android user ID to operate on * @param password user's keystore password. Should be the most recent value passed to * {@link #onUserPasswordChanged} for the user. * diff --git a/keystore/java/android/security/keystore/KeyGenParameterSpec.java b/keystore/java/android/security/keystore/KeyGenParameterSpec.java index 4b9f3c803481e6cc06f645b318b2444b0b357a8b..c342acdf101ed5bb67a7874065400eb399bd4115 100644 --- a/keystore/java/android/security/keystore/KeyGenParameterSpec.java +++ b/keystore/java/android/security/keystore/KeyGenParameterSpec.java @@ -266,6 +266,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu private final boolean mInvalidatedByBiometricEnrollment; private final boolean mIsStrongBoxBacked; private final boolean mUserConfirmationRequired; + private final boolean mUnlockedDeviceRequired; /** * @hide should be built with Builder @@ -296,7 +297,8 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu boolean userAuthenticationValidWhileOnBody, boolean invalidatedByBiometricEnrollment, boolean isStrongBoxBacked, - boolean userConfirmationRequired) { + boolean userConfirmationRequired, + boolean unlockedDeviceRequired) { if (TextUtils.isEmpty(keyStoreAlias)) { throw new IllegalArgumentException("keyStoreAlias must not be empty"); } @@ -345,6 +347,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu mInvalidatedByBiometricEnrollment = invalidatedByBiometricEnrollment; mIsStrongBoxBacked = isStrongBoxBacked; mUserConfirmationRequired = userConfirmationRequired; + mUnlockedDeviceRequired = unlockedDeviceRequired; } /** @@ -669,6 +672,15 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu return mIsStrongBoxBacked; } + /** + * Returns {@code true} if the key cannot be used unless the device screen is unlocked. + * + * @see Builder#setUnlockedDeviceRequired(boolean) + */ + public boolean isUnlockedDeviceRequired() { + return mUnlockedDeviceRequired; + } + /** * @hide */ @@ -707,6 +719,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu private boolean mInvalidatedByBiometricEnrollment = true; private boolean mIsStrongBoxBacked = false; private boolean mUserConfirmationRequired; + private boolean mUnlockedDeviceRequired = false; /** * Creates a new instance of the {@code Builder}. @@ -1274,6 +1287,18 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu return this; } + /** + * Sets whether the keystore requires the screen to be unlocked before allowing decryption + * using this key. If this is set to {@code true}, any attempt to decrypt using this key + * while the screen is locked will fail. A locked device requires a PIN, password, + * fingerprint, or other trusted factor to access. + */ + @NonNull + public Builder setUnlockedDeviceRequired(boolean unlockedDeviceRequired) { + mUnlockedDeviceRequired = unlockedDeviceRequired; + return this; + } + /** * Builds an instance of {@code KeyGenParameterSpec}. */ @@ -1305,7 +1330,8 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec, UserAu mUserAuthenticationValidWhileOnBody, mInvalidatedByBiometricEnrollment, mIsStrongBoxBacked, - mUserConfirmationRequired); + mUserConfirmationRequired, + mUnlockedDeviceRequired); } } } diff --git a/keystore/java/android/security/keystore/KeyProtection.java b/keystore/java/android/security/keystore/KeyProtection.java index 95eeec704847d9ec6a4807fb08d3739376e8918b..22568ce7a596a80cb0f2fe746e85965247f1f321 100644 --- a/keystore/java/android/security/keystore/KeyProtection.java +++ b/keystore/java/android/security/keystore/KeyProtection.java @@ -224,12 +224,13 @@ public final class KeyProtection implements ProtectionParameter, UserAuthArgs { private final boolean mRandomizedEncryptionRequired; private final boolean mUserAuthenticationRequired; private final int mUserAuthenticationValidityDurationSeconds; - private final boolean mTrustedUserPresenceRequred; + private final boolean mTrustedUserPresenceRequired; private final boolean mUserAuthenticationValidWhileOnBody; private final boolean mInvalidatedByBiometricEnrollment; private final long mBoundToSecureUserId; private final boolean mCriticalToDeviceEncryption; private final boolean mUserConfirmationRequired; + private final boolean mUnlockedDeviceRequired; private KeyProtection( Date keyValidityStart, @@ -243,12 +244,13 @@ public final class KeyProtection implements ProtectionParameter, UserAuthArgs { boolean randomizedEncryptionRequired, boolean userAuthenticationRequired, int userAuthenticationValidityDurationSeconds, - boolean trustedUserPresenceRequred, + boolean trustedUserPresenceRequired, boolean userAuthenticationValidWhileOnBody, boolean invalidatedByBiometricEnrollment, long boundToSecureUserId, boolean criticalToDeviceEncryption, - boolean userConfirmationRequired) { + boolean userConfirmationRequired, + boolean unlockedDeviceRequired) { mKeyValidityStart = Utils.cloneIfNotNull(keyValidityStart); mKeyValidityForOriginationEnd = Utils.cloneIfNotNull(keyValidityForOriginationEnd); mKeyValidityForConsumptionEnd = Utils.cloneIfNotNull(keyValidityForConsumptionEnd); @@ -262,12 +264,13 @@ public final class KeyProtection implements ProtectionParameter, UserAuthArgs { mRandomizedEncryptionRequired = randomizedEncryptionRequired; mUserAuthenticationRequired = userAuthenticationRequired; mUserAuthenticationValidityDurationSeconds = userAuthenticationValidityDurationSeconds; - mTrustedUserPresenceRequred = trustedUserPresenceRequred; + mTrustedUserPresenceRequired = trustedUserPresenceRequired; mUserAuthenticationValidWhileOnBody = userAuthenticationValidWhileOnBody; mInvalidatedByBiometricEnrollment = invalidatedByBiometricEnrollment; mBoundToSecureUserId = boundToSecureUserId; mCriticalToDeviceEncryption = criticalToDeviceEncryption; mUserConfirmationRequired = userConfirmationRequired; + mUnlockedDeviceRequired = unlockedDeviceRequired; } /** @@ -444,7 +447,7 @@ public final class KeyProtection implements ProtectionParameter, UserAuthArgs { * been performed between the {@code Signature.initSign()} and {@code Signature.sign()} calls. */ public boolean isTrustedUserPresenceRequired() { - return mTrustedUserPresenceRequred; + return mTrustedUserPresenceRequired; } /** @@ -504,6 +507,15 @@ public final class KeyProtection implements ProtectionParameter, UserAuthArgs { return mCriticalToDeviceEncryption; } + /** + * Returns {@code true} if the key cannot be used unless the device screen is unlocked. + * + * @see Builder#setUnlockedDeviceRequired(boolean) + */ + public boolean isUnlockedDeviceRequired() { + return mUnlockedDeviceRequired; + } + /** * Builder of {@link KeyProtection} instances. */ @@ -524,6 +536,8 @@ public final class KeyProtection implements ProtectionParameter, UserAuthArgs { private boolean mUserAuthenticationValidWhileOnBody; private boolean mInvalidatedByBiometricEnrollment = true; private boolean mUserConfirmationRequired; + private boolean mUnlockedDeviceRequired = false; + private long mBoundToSecureUserId = GateKeeper.INVALID_SECURE_USER_ID; private boolean mCriticalToDeviceEncryption = false; @@ -913,6 +927,18 @@ public final class KeyProtection implements ProtectionParameter, UserAuthArgs { return this; } + /** + * Sets whether the keystore requires the screen to be unlocked before allowing decryption + * using this key. If this is set to {@code true}, any attempt to decrypt using this key + * while the screen is locked will fail. A locked device requires a PIN, password, + * fingerprint, or other trusted factor to access. + */ + @NonNull + public Builder setUnlockedDeviceRequired(boolean unlockedDeviceRequired) { + mUnlockedDeviceRequired = unlockedDeviceRequired; + return this; + } + /** * Builds an instance of {@link KeyProtection}. * @@ -937,7 +963,8 @@ public final class KeyProtection implements ProtectionParameter, UserAuthArgs { mInvalidatedByBiometricEnrollment, mBoundToSecureUserId, mCriticalToDeviceEncryption, - mUserConfirmationRequired); + mUserConfirmationRequired, + mUnlockedDeviceRequired); } } } diff --git a/keystore/java/android/security/keystore/KeymasterUtils.java b/keystore/java/android/security/keystore/KeymasterUtils.java index 0ef08f237b4e06c8833bf59a0cfde29d9dc9c82a..14a9970c66d46ba690fa6dfd64567ac520d97d61 100644 --- a/keystore/java/android/security/keystore/KeymasterUtils.java +++ b/keystore/java/android/security/keystore/KeymasterUtils.java @@ -16,9 +16,8 @@ package android.security.keystore; -import android.util.Log; +import android.app.ActivityManager; import android.hardware.fingerprint.FingerprintManager; -import android.os.UserHandle; import android.security.GateKeeper; import android.security.KeyStore; import android.security.keymaster.KeymasterArguments; @@ -101,8 +100,8 @@ public abstract class KeymasterUtils { * state (e.g., secure lock screen not set up) for generating or importing keys that * require user authentication. */ - public static void addUserAuthArgs(KeymasterArguments args, - UserAuthArgs spec) { + public static void addUserAuthArgs(KeymasterArguments args, UserAuthArgs spec) { + if (spec.isUserConfirmationRequired()) { args.addBoolean(KeymasterDefs.KM_TAG_TRUSTED_CONFIRMATION_REQUIRED); } @@ -111,6 +110,10 @@ public abstract class KeymasterUtils { args.addBoolean(KeymasterDefs.KM_TAG_TRUSTED_USER_PRESENCE_REQUIRED); } + if (spec.isUnlockedDeviceRequired()) { + args.addBoolean(KeymasterDefs.KM_TAG_UNLOCKED_DEVICE_REQUIRED); + } + if (!spec.isUserAuthenticationRequired()) { args.addBoolean(KeymasterDefs.KM_TAG_NO_AUTH_REQUIRED); return; diff --git a/keystore/java/android/security/keystore/UserAuthArgs.java b/keystore/java/android/security/keystore/UserAuthArgs.java index 1949592e7240c1c0f5aac5c52c675cedd7b97053..ad18ff8aef767dd90d3ebd21b2ba1d89a022e166 100644 --- a/keystore/java/android/security/keystore/UserAuthArgs.java +++ b/keystore/java/android/security/keystore/UserAuthArgs.java @@ -33,5 +33,6 @@ public interface UserAuthArgs { boolean isUserConfirmationRequired(); long getBoundToSpecificSecureUserId(); boolean isTrustedUserPresenceRequired(); + boolean isUnlockedDeviceRequired(); } diff --git a/libs/hwui/pipeline/skia/LayerDrawable.cpp b/libs/hwui/pipeline/skia/LayerDrawable.cpp index d9584db2df9d442d6daad17758f7edab50bb9284..293e45f2273f0355a69498c83831c6c55df73f46 100644 --- a/libs/hwui/pipeline/skia/LayerDrawable.cpp +++ b/libs/hwui/pipeline/skia/LayerDrawable.cpp @@ -34,7 +34,8 @@ void LayerDrawable::onDraw(SkCanvas* canvas) { } } -bool LayerDrawable::DrawLayer(GrContext* context, SkCanvas* canvas, Layer* layer) { +bool LayerDrawable::DrawLayer(GrContext* context, SkCanvas* canvas, Layer* layer, + const SkRect* dstRect) { if (context == nullptr) { SkDEBUGF(("Attempting to draw LayerDrawable into an unsupported surface")); return false; @@ -43,8 +44,8 @@ bool LayerDrawable::DrawLayer(GrContext* context, SkCanvas* canvas, Layer* layer SkMatrix layerTransform; layer->getTransform().copyTo(layerTransform); sk_sp layerImage; - int layerWidth = layer->getWidth(); - int layerHeight = layer->getHeight(); + const int layerWidth = layer->getWidth(); + const int layerHeight = layer->getHeight(); if (layer->getApi() == Layer::Api::OpenGL) { GlLayer* glLayer = static_cast(layer); GrGLTextureInfo externalTexture; @@ -62,21 +63,21 @@ bool LayerDrawable::DrawLayer(GrContext* context, SkCanvas* canvas, Layer* layer } if (layerImage) { - SkMatrix textureMatrix; - layer->getTexTransform().copyTo(textureMatrix); + SkMatrix textureMatrixInv; + layer->getTexTransform().copyTo(textureMatrixInv); // TODO: after skia bug https://bugs.chromium.org/p/skia/issues/detail?id=7075 is fixed // use bottom left origin and remove flipV and invert transformations. SkMatrix flipV; flipV.setAll(1, 0, 0, 0, -1, 1, 0, 0, 1); - textureMatrix.preConcat(flipV); - textureMatrix.preScale(1.0f / layerWidth, 1.0f / layerHeight); - textureMatrix.postScale(layerWidth, layerHeight); - SkMatrix textureMatrixInv; - if (!textureMatrix.invert(&textureMatrixInv)) { - textureMatrixInv = textureMatrix; + textureMatrixInv.preConcat(flipV); + textureMatrixInv.preScale(1.0f / layerWidth, 1.0f / layerHeight); + textureMatrixInv.postScale(layerWidth, layerHeight); + SkMatrix textureMatrix; + if (!textureMatrixInv.invert(&textureMatrix)) { + textureMatrix = textureMatrixInv; } - SkMatrix matrix = SkMatrix::Concat(layerTransform, textureMatrixInv); + SkMatrix matrix = SkMatrix::Concat(layerTransform, textureMatrix); SkPaint paint; paint.setAlpha(layer->getAlpha()); @@ -88,7 +89,20 @@ bool LayerDrawable::DrawLayer(GrContext* context, SkCanvas* canvas, Layer* layer canvas->save(); canvas->concat(matrix); } - canvas->drawImage(layerImage.get(), 0, 0, &paint); + if (dstRect) { + SkMatrix matrixInv; + if (!matrix.invert(&matrixInv)) { + matrixInv = matrix; + } + SkRect srcRect = SkRect::MakeIWH(layerWidth, layerHeight); + matrixInv.mapRect(&srcRect); + SkRect skiaDestRect = *dstRect; + matrixInv.mapRect(&skiaDestRect); + canvas->drawImageRect(layerImage.get(), srcRect, skiaDestRect, &paint, + SkCanvas::kFast_SrcRectConstraint); + } else { + canvas->drawImage(layerImage.get(), 0, 0, &paint); + } // restore the original matrix if (nonIdentityMatrix) { canvas->restore(); diff --git a/libs/hwui/pipeline/skia/LayerDrawable.h b/libs/hwui/pipeline/skia/LayerDrawable.h index 345038769306ca4fe054b4f8176859f60f084094..18d118405a392b38f91a36f41859b00a6175b668 100644 --- a/libs/hwui/pipeline/skia/LayerDrawable.h +++ b/libs/hwui/pipeline/skia/LayerDrawable.h @@ -32,7 +32,8 @@ class LayerDrawable : public SkDrawable { public: explicit LayerDrawable(DeferredLayerUpdater* layerUpdater) : mLayerUpdater(layerUpdater) {} - static bool DrawLayer(GrContext* context, SkCanvas* canvas, Layer* layer); + static bool DrawLayer(GrContext* context, SkCanvas* canvas, Layer* layer, + const SkRect* dstRect = nullptr); protected: virtual SkRect onGetBounds() override { diff --git a/libs/hwui/pipeline/skia/ShaderCache.cpp b/libs/hwui/pipeline/skia/ShaderCache.cpp index 2fa56f613144bd7a0df1884151706ff2fba599de..670074871c7155ed1fab5361ed1796ba55f956b3 100644 --- a/libs/hwui/pipeline/skia/ShaderCache.cpp +++ b/libs/hwui/pipeline/skia/ShaderCache.cpp @@ -83,10 +83,12 @@ sk_sp ShaderCache::load(const SkData& key) { int maxTries = 3; while (valueSize > mObservedBlobValueSize && maxTries > 0) { mObservedBlobValueSize = std::min(valueSize, maxValueSize); - valueBuffer = realloc(valueBuffer, mObservedBlobValueSize); - if (!valueBuffer) { + void *newValueBuffer = realloc(valueBuffer, mObservedBlobValueSize); + if (!newValueBuffer) { + free(valueBuffer); return nullptr; } + valueBuffer = newValueBuffer; valueSize = bc->get(key.data(), keySize, valueBuffer, mObservedBlobValueSize); maxTries--; } diff --git a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp index 365d7403e04671be845ca0caeb4381852c1e17f3..74cfb2854e62c19397c847786f193b0a2f1ff58e 100644 --- a/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp +++ b/libs/hwui/pipeline/skia/SkiaOpenGLPipeline.cpp @@ -138,7 +138,9 @@ bool SkiaOpenGLPipeline::copyLayerInto(DeferredLayerUpdater* deferredLayer, SkBi SkBudgeted::kYes, bitmap->info()); Layer* layer = deferredLayer->backingLayer(); - if (LayerDrawable::DrawLayer(mRenderThread.getGrContext(), tmpSurface->getCanvas(), layer)) { + const SkRect dstRect = SkRect::MakeIWH(bitmap->width(), bitmap->height()); + if (LayerDrawable::DrawLayer(mRenderThread.getGrContext(), tmpSurface->getCanvas(), layer, + &dstRect)) { sk_sp tmpImage = tmpSurface->makeImageSnapshot(); if (tmpImage->readPixels(bitmap->info(), bitmap->getPixels(), bitmap->rowBytes(), 0, 0)) { bitmap->notifyPixelsChanged(); diff --git a/libs/incident/proto/android/privacy.proto b/libs/incident/proto/android/privacy.proto index f29f57f1c197676cc0df347237dddc45c995e60d..1ef36df8121fe8e06bacafb20af02220a79fe3ef 100644 --- a/libs/incident/proto/android/privacy.proto +++ b/libs/incident/proto/android/privacy.proto @@ -16,13 +16,13 @@ syntax = "proto2"; -option java_package = "android"; +package android; + +option java_package = "com.android.incident"; option java_multiple_files = true; import "google/protobuf/descriptor.proto"; -package android; - enum Destination { // Fields or messages annotated with DEST_LOCAL must never be // extracted from the device automatically. They can be accessed diff --git a/libs/protoutil/include/android/util/ProtoOutputStream.h b/libs/protoutil/include/android/util/ProtoOutputStream.h index 43ac1ec387a47a904c9477d6da49fd6069a06c7c..e17f48b98037d152afce2e128985d4d3eae62c47 100644 --- a/libs/protoutil/include/android/util/ProtoOutputStream.h +++ b/libs/protoutil/include/android/util/ProtoOutputStream.h @@ -137,8 +137,8 @@ private: EncodedBuffer mBuffer; size_t mCopyBegin; bool mCompact; - int mDepth; - int mObjectId; + uint32_t mDepth; + uint32_t mObjectId; uint64_t mExpectedObjectToken; inline void writeDoubleImpl(uint32_t id, double val); diff --git a/libs/protoutil/src/ProtoOutputStream.cpp b/libs/protoutil/src/ProtoOutputStream.cpp index a040bd223e94369c4a18f412c546676fd4ad202c..af98a111322812214210ddd8abd871063fee927f 100644 --- a/libs/protoutil/src/ProtoOutputStream.cpp +++ b/libs/protoutil/src/ProtoOutputStream.cpp @@ -15,6 +15,8 @@ */ #define LOG_TAG "libprotoutil" +#include + #include #include #include @@ -28,7 +30,7 @@ ProtoOutputStream::ProtoOutputStream() mCompact(false), mDepth(0), mObjectId(0), - mExpectedObjectToken(0ULL) + mExpectedObjectToken(UINT64_C(-1)) { } @@ -45,7 +47,7 @@ ProtoOutputStream::clear() mCompact = false; mDepth = 0; mObjectId = 0; - mExpectedObjectToken = 0ULL; + mExpectedObjectToken = UINT64_C(-1); } bool @@ -215,48 +217,48 @@ ProtoOutputStream::write(uint64_t fieldId, const char* val, size_t size) * - 3 bits, max value 7, max value needed 5 * Bit 60 - true if the object is repeated * Bits 59-51 - depth (For error checking) - * - 9 bits, max value 512, when checking, value is masked (if we really - * are more than 512 levels deep) + * - 9 bits, max value 511, when checking, value is masked (if we really + * are more than 511 levels deep) * Bits 32-50 - objectId (For error checking) - * - 19 bits, max value 524,288. that's a lot of objects. IDs will wrap + * - 19 bits, max value 524,287. that's a lot of objects. IDs will wrap * because of the overflow, and only the tokens are compared. * Bits 0-31 - offset of the first size field in the buffer. */ -uint64_t -makeToken(int tagSize, bool repeated, int depth, int objectId, int sizePos) { - return ((0x07L & (uint64_t)tagSize) << 61) - | (repeated ? (1LL << 60) : 0) - | (0x01ffL & (uint64_t)depth) << 51 - | (0x07ffffL & (uint64_t)objectId) << 32 - | (0x0ffffffffL & (uint64_t)sizePos); +static uint64_t +makeToken(uint32_t tagSize, bool repeated, uint32_t depth, uint32_t objectId, size_t sizePos) { + return ((UINT64_C(0x07) & (uint64_t)tagSize) << 61) + | (repeated ? (UINT64_C(1) << 60) : 0) + | (UINT64_C(0x01ff) & (uint64_t)depth) << 51 + | (UINT64_C(0x07ffff) & (uint64_t)objectId) << 32 + | (UINT64_C(0x0ffffffff) & (uint64_t)sizePos); } /** * Get the encoded tag size from the token. */ -static int getTagSizeFromToken(uint64_t token) { - return (int)(0x7 & (token >> 61)); +static uint32_t getTagSizeFromToken(uint64_t token) { + return 0x7 & (token >> 61); } /** * Get the nesting depth of startObject calls from the token. */ -static int getDepthFromToken(uint64_t token) { - return (int)(0x01ff & (token >> 51)); +static uint32_t getDepthFromToken(uint64_t token) { + return 0x01ff & (token >> 51); } /** * Get the location of the childRawSize (the first 32 bit size field) in this object. */ -static int getSizePosFromToken(uint64_t token) { - return (int)token; +static uint32_t getSizePosFromToken(uint64_t token) { + return (uint32_t)token; } uint64_t ProtoOutputStream::start(uint64_t fieldId) { if ((fieldId & FIELD_TYPE_MASK) != FIELD_TYPE_MESSAGE) { - ALOGE("Can't call start for non-message type field: 0x%llx", (long long)fieldId); + ALOGE("Can't call start for non-message type field: 0x%" PRIx64, fieldId); return 0; } @@ -278,18 +280,18 @@ void ProtoOutputStream::end(uint64_t token) { if (token != mExpectedObjectToken) { - ALOGE("Unexpected token: 0x%llx, should be 0x%llx", (long long)token, (long long)mExpectedObjectToken); + ALOGE("Unexpected token: 0x%" PRIx64 ", should be 0x%" PRIx64, token, mExpectedObjectToken); return; } - int depth = getDepthFromToken(token); + uint32_t depth = getDepthFromToken(token); if (depth != (mDepth & 0x01ff)) { - ALOGE("Unexpected depth: %d, should be %d", depth, mDepth); + ALOGE("Unexpected depth: %" PRIu32 ", should be %" PRIu32, depth, mDepth); return; } mDepth--; - int sizePos = getSizePosFromToken(token); + uint32_t sizePos = getSizePosFromToken(token); // number of bytes written in this start-end session. int childRawSize = mBuffer.wp()->pos() - sizePos - 8; @@ -317,7 +319,7 @@ bool ProtoOutputStream::compact() { if (mCompact) return true; if (mDepth != 0) { - ALOGE("Can't compact when depth(%d) is not zero. Missing calls to end.", mDepth); + ALOGE("Can't compact when depth(%" PRIu32 ") is not zero. Missing calls to end.", mDepth); return false; } // record the size of the original buffer. @@ -458,7 +460,10 @@ ProtoOutputStream::compactSize(size_t rawSize) size_t ProtoOutputStream::size() { - compact(); + if (!compact()) { + ALOGE("compact failed, the ProtoOutputStream data is corrupted!"); + // TODO: handle this error + } return mBuffer.size(); } @@ -492,7 +497,10 @@ ProtoOutputStream::flush(int fd) EncodedBuffer::iterator ProtoOutputStream::data() { - compact(); + if (!compact()) { + ALOGE("compact failed, the ProtoOutputStream data is corrupted!"); + // TODO: handle this error + } return mBuffer.begin(); } diff --git a/media/java/android/media/AudioDeviceInfo.java b/media/java/android/media/AudioDeviceInfo.java index 86dfc9c887236d253b53f9b176110704e24fd6d0..ca895fcdfc4a45d6178f159b0f47409e653f71a6 100644 --- a/media/java/android/media/AudioDeviceInfo.java +++ b/media/java/android/media/AudioDeviceInfo.java @@ -226,11 +226,10 @@ public final class AudioDeviceInfo { } /** - * @hide * @return The "address" string of the device. This generally contains device-specific * parameters. */ - public String getAddress() { + public @NonNull String getAddress() { return mPort.address(); } diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java index e408a115787c8e0237ad7ca1967020025aea6beb..aeef2158b20fea3aa332c6be2e8041581e04b463 100644 --- a/media/java/android/media/AudioManager.java +++ b/media/java/android/media/AudioManager.java @@ -4596,8 +4596,7 @@ public class AudioManager { private static boolean checkTypes(AudioDevicePort port) { return AudioDeviceInfo.convertInternalDeviceToDeviceType(port.type()) != - AudioDeviceInfo.TYPE_UNKNOWN && - port.type() != AudioSystem.DEVICE_IN_BACK_MIC; + AudioDeviceInfo.TYPE_UNKNOWN; } /** diff --git a/media/java/android/media/MediaDrm.java b/media/java/android/media/MediaDrm.java index 8d62cac133c353378fb4a28cb633ef0641e4b033..51737437d69223e9c8292c84c21cdd78317c099a 100644 --- a/media/java/android/media/MediaDrm.java +++ b/media/java/android/media/MediaDrm.java @@ -705,7 +705,9 @@ public final class MediaDrm implements AutoCloseable { public @interface KeyType {} /** - * Contains the opaque data an app uses to request keys from a license server + * Contains the opaque data an app uses to request keys from a license server. + * These request types may or may not be generated by a given plugin. Refer + * to plugin vendor documentation for more information. */ public static final class KeyRequest { private byte[] mData; @@ -730,8 +732,8 @@ public final class MediaDrm implements AutoCloseable { public static final int REQUEST_TYPE_RELEASE = 2; /** - * Keys are already loaded. No license request is necessary, and no - * key request data is returned. + * Keys are already loaded and are available for use. No license request is necessary, and + * no key request data is returned. */ public static final int REQUEST_TYPE_NONE = 3; diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java index befbade0c7018bb523be9f665f5fa162e939c465..aef31b116dd6392a7215941d7eafbba63da10360 100644 --- a/media/java/android/media/MediaPlayer.java +++ b/media/java/android/media/MediaPlayer.java @@ -4099,8 +4099,8 @@ public class MediaPlayer extends PlayerBase /** The player was started because it was used as the next player for another * player, which just completed playback. + * @see android.media.MediaPlayer#setNextMediaPlayer(MediaPlayer) * @see android.media.MediaPlayer.OnInfoListener - * @hide */ public static final int MEDIA_INFO_STARTED_AS_NEXT = 2; diff --git a/media/java/android/media/MicrophoneInfo.java b/media/java/android/media/MicrophoneInfo.java index 004efea64d2d4c9e184926e28f70ec262d4ea034..d6399a4163fe9ebeb71770695aefbc58c818c6eb 100644 --- a/media/java/android/media/MicrophoneInfo.java +++ b/media/java/android/media/MicrophoneInfo.java @@ -17,6 +17,7 @@ package android.media; import android.annotation.IntDef; +import android.annotation.NonNull; import android.util.Pair; import java.lang.annotation.Retention; @@ -224,12 +225,11 @@ public final class MicrophoneInfo { } /** - * @hide * Returns The "address" string of the microphone that corresponds to the * address returned by {@link AudioDeviceInfo#getAddress()} * @return the address of the microphone */ - public String getAddress() { + public @NonNull String getAddress() { return mAddress; } diff --git a/media/java/android/media/audiofx/DynamicsProcessing.java b/media/java/android/media/audiofx/DynamicsProcessing.java index d09c9a895e0cd9ace6f0eb64996594eabd0be3b2..4c17ae1d93b36fcec9ed4548c370c2f4b0aaadac 100644 --- a/media/java/android/media/audiofx/DynamicsProcessing.java +++ b/media/java/android/media/audiofx/DynamicsProcessing.java @@ -16,10 +16,11 @@ package android.media.audiofx; +import android.annotation.NonNull; +import android.annotation.Nullable; import android.media.AudioTrack; import android.media.MediaPlayer; import android.media.audiofx.AudioEffect; -import android.media.audiofx.DynamicsProcessing.Settings; import android.util.Log; import java.nio.ByteBuffer; @@ -90,66 +91,18 @@ public final class DynamicsProcessing extends AudioEffect { private final static String TAG = "DynamicsProcessing"; - /** - * Config object used to initialize and change effect parameters at runtime. - */ - private Config mConfig = null; - - // These parameter constants must be synchronized with those in // /system/media/audio_effects/include/audio_effects/effect_dynamicsprocessing.h - - private static final int PARAM_GET_CHANNEL_COUNT = 0x0; - private static final int PARAM_EQ_BAND_COUNT = 0x1; - private static final int PARAM_MBC_BAND_COUNT = 0x2; - private static final int PARAM_INPUT_GAIN = 0x3; - private static final int PARAM_PRE_EQ_ENABLED = 0x10; - private static final int PARAM_PRE_EQ_BAND_ENABLED = 0x11; - private static final int PARAM_PRE_EQ_BAND_FREQUENCY = 0x12; - private static final int PARAM_PRE_EQ_BAND_GAIN = 0x13; - private static final int PARAM_EQ_FREQUENCY_RANGE = 0x22; - private static final int PARAM_EQ_GAIN_RANGE = 0x23; - private static final int PARAM_MBC_ENABLED = 0x30; - private static final int PARAM_MBC_BAND_ENABLED = 0x31; - private static final int PARAM_MBC_BAND_FREQUENCY = 0x32; - private static final int PARAM_MBC_BAND_ATTACK_TIME = 0x33; - private static final int PARAM_MBC_BAND_RELEASE_TIME = 0x34; - private static final int PARAM_MBC_BAND_RATIO = 0x35; - private static final int PARAM_MBC_BAND_THRESHOLD = 0x36; - private static final int PARAM_MBC_BAND_KNEE_WIDTH = 0x37; - private static final int PARAM_MBC_BAND_NOISE_GATE_THRESHOLD = 0x38; - private static final int PARAM_MBC_BAND_EXPANDER_RATIO = 0x39; - private static final int PARAM_MBC_BAND_GAIN_PRE = 0x3A; - private static final int PARAM_MBC_BAND_GAIN_POST = 0x3B; - private static final int PARAM_MBC_FREQUENCY_RANGE = 0x42; - private static final int PARAM_MBC_ATTACK_TIME_RANGE = 0x43; - private static final int PARAM_MBC_RELEASE_TIME_RANGE = 0x44; - private static final int PARAM_MBC_RATIO_RANGE = 0x45; - private static final int PARAM_MBC_THRESHOLD_RANGE = 0x46; - private static final int PARAM_MBC_KNEE_WIDTH_RANGE = 0x47; - private static final int PARAM_MBC_NOISE_GATE_THRESHOLD_RANGE = 0x48; - private static final int PARAM_MBC_EXPANDER_RATIO_RANGE = 0x49; - private static final int PARAM_MBC_GAIN_RANGE = 0x4A; - private static final int PARAM_POST_EQ_ENABLED = 0x50; - private static final int PARAM_POST_EQ_BAND_ENABLED = 0x51; - private static final int PARAM_POST_EQ_BAND_FREQUENCY = 0x52; - private static final int PARAM_POST_EQ_BAND_GAIN = 0x53; - private static final int PARAM_LIMITER_ENABLED = 0x60; - private static final int PARAM_LIMITER_LINK_GROUP = 0x61; - private static final int PARAM_LIMITER_ATTACK_TIME = 0x62; - private static final int PARAM_LIMITER_RELEASE_TIME = 0x63; - private static final int PARAM_LIMITER_RATIO = 0x64; - private static final int PARAM_LIMITER_THRESHOLD = 0x65; - private static final int PARAM_LIMITER_GAIN_POST = 0x66; - private static final int PARAM_LIMITER_ATTACK_TIME_RANGE = 0x72; - private static final int PARAM_LIMITER_RELEASE_TIME_RANGE = 0x73; - private static final int PARAM_LIMITER_RATIO_RANGE = 0x74; - private static final int PARAM_LIMITER_THRESHOLD_RANGE = 0x75; - private static final int PARAM_LIMITER_GAIN_RANGE = 0x76; - private static final int PARAM_VARIANT = 0x100; - private static final int PARAM_VARIANT_DESCRIPTION = 0x101; - private static final int PARAM_VARIANT_COUNT = 0x102; - private static final int PARAM_SET_ENGINE_ARCHITECTURE = 0x200; + private static final int PARAM_GET_CHANNEL_COUNT = 0x10; + private static final int PARAM_INPUT_GAIN = 0x20; + private static final int PARAM_ENGINE_ARCHITECTURE = 0x30; + private static final int PARAM_PRE_EQ = 0x40; + private static final int PARAM_PRE_EQ_BAND = 0x45; + private static final int PARAM_MBC = 0x50; + private static final int PARAM_MBC_BAND = 0x55; + private static final int PARAM_POST_EQ = 0x60; + private static final int PARAM_POST_EQ_BAND = 0x65; + private static final int PARAM_LIMITER = 0x70; /** * Index of variant that favors frequency resolution. Frequency domain based implementation. @@ -226,12 +179,13 @@ public final class DynamicsProcessing extends AudioEffect { * Config object that suits your needs. A null cfg parameter will create and use a default * configuration for the effect */ - public DynamicsProcessing(int priority, int audioSession, Config cfg) { + public DynamicsProcessing(int priority, int audioSession, @Nullable Config cfg) { super(EFFECT_TYPE_DYNAMICS_PROCESSING, EFFECT_TYPE_NULL, priority, audioSession); if (audioSession == 0) { Log.w(TAG, "WARNING: attaching a DynamicsProcessing to global output mix is" + "deprecated!"); } + final Config config; mChannelCount = getChannelCount(); if (cfg == null) { //create a default configuration and effect, with the number of channels this effect has @@ -239,21 +193,33 @@ public final class DynamicsProcessing extends AudioEffect { new DynamicsProcessing.Config.Builder( CONFIG_DEFAULT_VARIANT, mChannelCount, - true /*use preEQ*/, 6 /*pre eq bands*/, - true /*use mbc*/, 6 /*mbc bands*/, - true /*use postEQ*/, 6 /*postEq bands*/, - true /*use Limiter*/); - mConfig = builder.build(); + CONFIG_DEFAULT_USE_PREEQ, + CONFIG_DEFAULT_PREEQ_BANDS, + CONFIG_DEFAULT_USE_MBC, + CONFIG_DEFAULT_MBC_BANDS, + CONFIG_DEFAULT_USE_POSTEQ, + CONFIG_DEFAULT_POSTEQ_BANDS, + CONFIG_DEFAULT_USE_LIMITER); + config = builder.build(); } else { - //validate channels are ok. decide what to do: replicate channels if more, or fail, or - mConfig = new DynamicsProcessing.Config(mChannelCount, cfg); + //validate channels are ok. decide what to do: replicate channels if more + config = new DynamicsProcessing.Config(mChannelCount, cfg); + } + + //configure engine + setEngineArchitecture(config.getVariant(), + config.getPreferredFrameDuration(), + config.isPreEqInUse(), + config.getPreEqBandCount(), + config.isMbcInUse(), + config.getMbcBandCount(), + config.isPostEqInUse(), + config.getPostEqBandCount(), + config.isLimiterInUse()); + //update all the parameters + for (int ch = 0; ch < mChannelCount; ch++) { + updateEngineChannelByChannelIndex(ch, config.getChannelByChannelIndex(ch)); } - - setEngineArchitecture(mConfig.getVariant(), - mConfig.isPreEqInUse(), mConfig.getPreEqBandCount(), - mConfig.isMbcInUse(), mConfig.getMbcBandCount(), - mConfig.isPostEqInUse(), mConfig.getPostEqBandCount(), - mConfig.isLimiterInUse()); } /** @@ -261,11 +227,51 @@ public final class DynamicsProcessing extends AudioEffect { * @return Config Current Config object used to setup this DynamicsProcessing effect. */ public Config getConfig() { - return mConfig; + //Query engine architecture to create config object + Number[] params = { PARAM_ENGINE_ARCHITECTURE }; + Number[] values = { 0 /*0 variant */, + 0.0f /* 1 preferredFrameDuration */, + 0 /*2 preEqInUse */, + 0 /*3 preEqBandCount */, + 0 /*4 mbcInUse */, + 0 /*5 mbcBandCount*/, + 0 /*6 postEqInUse */, + 0 /*7 postEqBandCount */, + 0 /*8 limiterInUse */}; + byte[] paramBytes = numberArrayToByteArray(params); + byte[] valueBytes = numberArrayToByteArray(values); //just interest in the byte size. + getParameter(paramBytes, valueBytes); + byteArrayToNumberArray(valueBytes, values); + DynamicsProcessing.Config.Builder builder = + new DynamicsProcessing.Config.Builder( + values[0].intValue(), + mChannelCount, + values[2].intValue() > 0 /*use preEQ*/, + values[3].intValue() /*pre eq bands*/, + values[4].intValue() > 0 /*use mbc*/, + values[5].intValue() /*mbc bands*/, + values[6].intValue() > 0 /*use postEQ*/, + values[7].intValue()/*postEq bands*/, + values[8].intValue() > 0 /*use Limiter*/). + setPreferredFrameDuration(values[1].floatValue()); + Config config = builder.build(); + for (int ch = 0; ch < mChannelCount; ch++) { + Channel channel = queryEngineByChannelIndex(ch); + config.setChannelTo(ch, channel); + } + return config; } - private static final int CONFIG_DEFAULT_VARIANT = 0; //favor frequency + private static final int CONFIG_DEFAULT_VARIANT = VARIANT_FAVOR_FREQUENCY_RESOLUTION; + private static final boolean CONFIG_DEFAULT_USE_PREEQ = true; + private static final int CONFIG_DEFAULT_PREEQ_BANDS = 6; + private static final boolean CONFIG_DEFAULT_USE_MBC = true; + private static final int CONFIG_DEFAULT_MBC_BANDS = 6; + private static final boolean CONFIG_DEFAULT_USE_POSTEQ = true; + private static final int CONFIG_DEFAULT_POSTEQ_BANDS = 6; + private static final boolean CONFIG_DEFAULT_USE_LIMITER = true; + private static final float CHANNEL_DEFAULT_INPUT_GAIN = 0; // dB private static final float CONFIG_PREFERRED_FRAME_DURATION_MS = 10.0f; //milliseconds @@ -1276,7 +1282,7 @@ public final class DynamicsProcessing extends AudioEffect { mChannel = new Channel[mChannelCount]; //check if channelconfig is null or has less channels than channel count. //options: fill the missing with default options. - // or fail? + // or fail? for (int ch = 0; ch < mChannelCount; ch++) { if (ch < channel.length) { mChannel[ch] = new Channel(channel[ch]); //copy create @@ -1331,7 +1337,7 @@ public final class DynamicsProcessing extends AudioEffect { * Class constructor for Config * @param cfg Configuration object copy constructor */ - public Config(Config cfg) { + public Config(@NonNull Config cfg) { this(cfg.mChannelCount, cfg); } @@ -1763,138 +1769,115 @@ public final class DynamicsProcessing extends AudioEffect { } //=== CHANNEL public Channel getChannelByChannelIndex(int channelIndex) { - return mConfig.getChannelByChannelIndex(channelIndex); + return queryEngineByChannelIndex(channelIndex); } public void setChannelTo(int channelIndex, Channel channel) { - mConfig.setChannelTo(channelIndex, channel); + updateEngineChannelByChannelIndex(channelIndex, channel); } public void setAllChannelsTo(Channel channel) { - mConfig.setAllChannelsTo(channel); + for (int ch = 0; ch < mChannelCount; ch++) { + setChannelTo(ch, channel); + } } //=== channel params public float getInputGainByChannelIndex(int channelIndex) { - //TODO: return info from engine instead of cached config - return mConfig.getInputGainByChannelIndex(channelIndex); + return getTwoFloat(PARAM_INPUT_GAIN, channelIndex); } public void setInputGainbyChannel(int channelIndex, float inputGain) { - mConfig.setInputGainByChannelIndex(channelIndex, inputGain); - //TODO: communicate change to engine + setTwoFloat(PARAM_INPUT_GAIN, channelIndex, inputGain); } public void setInputGainAllChannelsTo(float inputGain) { - mConfig.setInputGainAllChannelsTo(inputGain); - //TODO: communicate change to engine + for (int ch = 0; ch < mChannelCount; ch++) { + setInputGainbyChannel(ch, inputGain); + } } //=== PreEQ public Eq getPreEqByChannelIndex(int channelIndex) { - //TODO: return info from engine instead of cached config - return mConfig.getPreEqByChannelIndex(channelIndex); + return queryEngineEqByChannelIndex(PARAM_PRE_EQ, channelIndex); } - public void setPreEqByChannelIndex(int channelIndex, Eq preEq) { - mConfig.setPreEqByChannelIndex(channelIndex, preEq); - //TODO: communicate change to engine + updateEngineEqByChannelIndex(PARAM_PRE_EQ, channelIndex, preEq); } - public void setPreEqAllChannelsTo(Eq preEq) { - mConfig.setPreEqAllChannelsTo(preEq); - //TODO: communicate change to engine + for (int ch = 0; ch < mChannelCount; ch++) { + setPreEqByChannelIndex(ch, preEq); + } } - public EqBand getPreEqBandByChannelIndex(int channelIndex, int band) { - //TODO: return info from engine instead of cached config - return mConfig.getPreEqBandByChannelIndex(channelIndex, band); + return queryEngineEqBandByChannelIndex(PARAM_PRE_EQ_BAND, channelIndex, band); } - public void setPreEqBandByChannelIndex(int channelIndex, int band, EqBand preEqBand) { - mConfig.setPreEqBandByChannelIndex(channelIndex, band, preEqBand); - //TODO: communicate change to engine + updateEngineEqBandByChannelIndex(PARAM_PRE_EQ_BAND, channelIndex, band, preEqBand); } - public void setPreEqBandAllChannelsTo(int band, EqBand preEqBand) { - mConfig.setPreEqBandAllChannelsTo(band, preEqBand); - //TODO: communicate change to engine + for (int ch = 0; ch < mChannelCount; ch++) { + setPreEqBandByChannelIndex(ch, band, preEqBand); + } } //=== MBC public Mbc getMbcByChannelIndex(int channelIndex) { - //TODO: return info from engine instead of cached config - return mConfig.getMbcByChannelIndex(channelIndex); + return queryEngineMbcByChannelIndex(channelIndex); } - public void setMbcByChannelIndex(int channelIndex, Mbc mbc) { - mConfig.setMbcByChannelIndex(channelIndex, mbc); - //TODO: communicate change to engine + updateEngineMbcByChannelIndex(channelIndex, mbc); } - public void setMbcAllChannelsTo(Mbc mbc) { - mConfig.setMbcAllChannelsTo(mbc); - //TODO: communicate change to engine + for (int ch = 0; ch < mChannelCount; ch++) { + setMbcByChannelIndex(ch, mbc); + } } - public MbcBand getMbcBandByChannelIndex(int channelIndex, int band) { - //TODO: return info from engine instead of cached config - return mConfig.getMbcBandByChannelIndex(channelIndex, band); + return queryEngineMbcBandByChannelIndex(channelIndex, band); } - public void setMbcBandByChannelIndex(int channelIndex, int band, MbcBand mbcBand) { - mConfig.setMbcBandByChannelIndex(channelIndex, band, mbcBand); - //TODO: communicate change to engine + updateEngineMbcBandByChannelIndex(channelIndex, band, mbcBand); } - public void setMbcBandAllChannelsTo(int band, MbcBand mbcBand) { - mConfig.setMbcBandAllChannelsTo(band, mbcBand); - //TODO: communicate change to engine + for (int ch = 0; ch < mChannelCount; ch++) { + setMbcBandByChannelIndex(ch, band, mbcBand); + } } //== PostEq public Eq getPostEqByChannelIndex(int channelIndex) { - //TODO: return info from engine instead of cached config - return mConfig.getPostEqByChannelIndex(channelIndex); + return queryEngineEqByChannelIndex(PARAM_POST_EQ, channelIndex); } - public void setPostEqByChannelIndex(int channelIndex, Eq postEq) { - mConfig.setPostEqByChannelIndex(channelIndex, postEq); - //TODO: communicate change to engine + updateEngineEqByChannelIndex(PARAM_POST_EQ, channelIndex, postEq); } - public void setPostEqAllChannelsTo(Eq postEq) { - mConfig.setPostEqAllChannelsTo(postEq); - //TODO: communicate change to engine + for (int ch = 0; ch < mChannelCount; ch++) { + setPostEqByChannelIndex(ch, postEq); + } } - public EqBand getPostEqBandByChannelIndex(int channelIndex, int band) { - //TODO: return info from engine instead of cached config - return mConfig.getPostEqBandByChannelIndex(channelIndex, band); + return queryEngineEqBandByChannelIndex(PARAM_POST_EQ_BAND, channelIndex, band); } - public void setPostEqBandByChannelIndex(int channelIndex, int band, EqBand postEqBand) { - mConfig.setPostEqBandByChannelIndex(channelIndex, band, postEqBand); - //TODO: communicate change to engine + updateEngineEqBandByChannelIndex(PARAM_POST_EQ_BAND, channelIndex, band, postEqBand); } - public void setPostEqBandAllChannelsTo(int band, EqBand postEqBand) { - mConfig.setPostEqBandAllChannelsTo(band, postEqBand); - //TODO: communicate change to engine + for (int ch = 0; ch < mChannelCount; ch++) { + setPostEqBandByChannelIndex(ch, band, postEqBand); + } } //==== Limiter public Limiter getLimiterByChannelIndex(int channelIndex) { - //TODO: return info from engine instead of cached config - return mConfig.getLimiterByChannelIndex(channelIndex); + return queryEngineLimiterByChannelIndex(channelIndex); } - public void setLimiterByChannelIndex(int channelIndex, Limiter limiter) { - mConfig.setLimiterByChannelIndex(channelIndex, limiter); - //TODO: communicate change to engine + updateEngineLimiterByChannelIndex(channelIndex, limiter); } - public void setLimiterAllChannelsTo(Limiter limiter) { - mConfig.setLimiterAllChannelsTo(limiter); - //TODO: communicate change to engine + for (int ch = 0; ch < mChannelCount; ch++) { + setLimiterByChannelIndex(ch, limiter); + } } /** @@ -1905,165 +1888,327 @@ public final class DynamicsProcessing extends AudioEffect { return getOneInt(PARAM_GET_CHANNEL_COUNT); } - private void setEngineArchitecture(int variant, boolean preEqInUse, int preEqBandCount, - boolean mbcInUse, int mbcBandCount, boolean postEqInUse, int postEqBandCount, - boolean limiterInUse) { - int[] values = { variant, (preEqInUse ? 1 : 0), preEqBandCount, - (mbcInUse ? 1 : 0), mbcBandCount, (postEqInUse ? 1 : 0), postEqBandCount, + //=== Engine calls + private void setEngineArchitecture(int variant, float preferredFrameDuration, + boolean preEqInUse, int preEqBandCount, boolean mbcInUse, int mbcBandCount, + boolean postEqInUse, int postEqBandCount, boolean limiterInUse) { + + Number[] params = { PARAM_ENGINE_ARCHITECTURE }; + Number[] values = { variant /* variant */, + preferredFrameDuration, + (preEqInUse ? 1 : 0), + preEqBandCount, + (mbcInUse ? 1 : 0), + mbcBandCount, + (postEqInUse ? 1 : 0), + postEqBandCount, (limiterInUse ? 1 : 0)}; - //TODO: enable later setIntArray(PARAM_SET_ENGINE_ARCHITECTURE, values); + setNumberArray(params, values); + } + + private void updateEngineEqBandByChannelIndex(int param, int channelIndex, int bandIndex, + @NonNull EqBand eqBand) { + Number[] params = {param, + channelIndex, + bandIndex}; + Number[] values = {(eqBand.isEnabled() ? 1 : 0), + eqBand.getCutoffFrequency(), + eqBand.getGain()}; + setNumberArray(params, values); + } + private Eq queryEngineEqByChannelIndex(int param, int channelIndex) { + + Number[] params = {param == PARAM_PRE_EQ ? PARAM_PRE_EQ : PARAM_POST_EQ, + channelIndex}; + Number[] values = {0 /*0 in use */, + 0 /*1 enabled*/, + 0 /*2 band count */}; + byte[] paramBytes = numberArrayToByteArray(params); + byte[] valueBytes = numberArrayToByteArray(values); //just interest in the byte size. + getParameter(paramBytes, valueBytes); + byteArrayToNumberArray(valueBytes, values); + int bandCount = values[2].intValue(); + Eq eq = new Eq(values[0].intValue() > 0 /* in use */, + values[1].intValue() > 0 /* enabled */, + bandCount /*band count*/); + for (int b = 0; b < bandCount; b++) { + EqBand eqBand = queryEngineEqBandByChannelIndex(param == PARAM_PRE_EQ ? + PARAM_PRE_EQ_BAND : PARAM_POST_EQ_BAND, channelIndex, b); + eq.setBand(b, eqBand); + } + return eq; + } + private EqBand queryEngineEqBandByChannelIndex(int param, int channelIndex, int bandIndex) { + Number[] params = {param, + channelIndex, + bandIndex}; + Number[] values = {0 /*0 enabled*/, + 0.0f /*1 cutoffFrequency */, + 0.0f /*2 gain */}; + + byte[] paramBytes = numberArrayToByteArray(params); + byte[] valueBytes = numberArrayToByteArray(values); //just interest in the byte size. + getParameter(paramBytes, valueBytes); + + byteArrayToNumberArray(valueBytes, values); + + return new EqBand(values[0].intValue() > 0 /* enabled */, + values[1].floatValue() /* cutoffFrequency */, + values[2].floatValue() /* gain*/); + } + private void updateEngineEqByChannelIndex(int param, int channelIndex, @NonNull Eq eq) { + int bandCount = eq.getBandCount(); + Number[] params = {param, + channelIndex}; + Number[] values = { (eq.isInUse() ? 1 : 0), + (eq.isEnabled() ? 1 : 0), + bandCount}; + setNumberArray(params, values); + for (int b = 0; b < bandCount; b++) { + EqBand eqBand = eq.getBand(b); + updateEngineEqBandByChannelIndex(param == PARAM_PRE_EQ ? + PARAM_PRE_EQ_BAND : PARAM_POST_EQ_BAND, channelIndex, b, eqBand); + } + } + + private Mbc queryEngineMbcByChannelIndex(int channelIndex) { + Number[] params = {PARAM_MBC, + channelIndex}; + Number[] values = {0 /*0 in use */, + 0 /*1 enabled*/, + 0 /*2 band count */}; + byte[] paramBytes = numberArrayToByteArray(params); + byte[] valueBytes = numberArrayToByteArray(values); //just interest in the byte size. + getParameter(paramBytes, valueBytes); + byteArrayToNumberArray(valueBytes, values); + int bandCount = values[2].intValue(); + Mbc mbc = new Mbc(values[0].intValue() > 0 /* in use */, + values[1].intValue() > 0 /* enabled */, + bandCount /*band count*/); + for (int b = 0; b < bandCount; b++) { + MbcBand mbcBand = queryEngineMbcBandByChannelIndex(channelIndex, b); + mbc.setBand(b, mbcBand); + } + return mbc; + } + private MbcBand queryEngineMbcBandByChannelIndex(int channelIndex, int bandIndex) { + Number[] params = {PARAM_MBC_BAND, + channelIndex, + bandIndex}; + Number[] values = {0 /*0 enabled */, + 0.0f /*1 cutoffFrequency */, + 0.0f /*2 AttackTime */, + 0.0f /*3 ReleaseTime */, + 0.0f /*4 Ratio */, + 0.0f /*5 Threshold */, + 0.0f /*6 KneeWidth */, + 0.0f /*7 NoiseGateThreshold */, + 0.0f /*8 ExpanderRatio */, + 0.0f /*9 PreGain */, + 0.0f /*10 PostGain*/}; + + byte[] paramBytes = numberArrayToByteArray(params); + byte[] valueBytes = numberArrayToByteArray(values); //just interest in the byte size. + getParameter(paramBytes, valueBytes); + + byteArrayToNumberArray(valueBytes, values); + + return new MbcBand(values[0].intValue() > 0 /* enabled */, + values[1].floatValue() /* cutoffFrequency */, + values[2].floatValue()/*2 AttackTime */, + values[3].floatValue()/*3 ReleaseTime */, + values[4].floatValue()/*4 Ratio */, + values[5].floatValue()/*5 Threshold */, + values[6].floatValue()/*6 KneeWidth */, + values[7].floatValue()/*7 NoiseGateThreshold */, + values[8].floatValue()/*8 ExpanderRatio */, + values[9].floatValue()/*9 PreGain */, + values[10].floatValue()/*10 PostGain*/); + } + private void updateEngineMbcBandByChannelIndex(int channelIndex, int bandIndex, + @NonNull MbcBand mbcBand) { + Number[] params = { PARAM_MBC_BAND, + channelIndex, + bandIndex}; + Number[] values = {(mbcBand.isEnabled() ? 1 : 0), + mbcBand.getCutoffFrequency(), + mbcBand.getAttackTime(), + mbcBand.getReleaseTime(), + mbcBand.getRatio(), + mbcBand.getThreshold(), + mbcBand.getKneeWidth(), + mbcBand.getNoiseGateThreshold(), + mbcBand.getExpanderRatio(), + mbcBand.getPreGain(), + mbcBand.getPostGain()}; + setNumberArray(params, values); + } + + private void updateEngineMbcByChannelIndex(int channelIndex, @NonNull Mbc mbc) { + int bandCount = mbc.getBandCount(); + Number[] params = { PARAM_MBC, + channelIndex}; + Number[] values = {(mbc.isInUse() ? 1 : 0), + (mbc.isEnabled() ? 1 : 0), + bandCount}; + setNumberArray(params, values); + for (int b = 0; b < bandCount; b++) { + MbcBand mbcBand = mbc.getBand(b); + updateEngineMbcBandByChannelIndex(channelIndex, b, mbcBand); + } + } + + private void updateEngineLimiterByChannelIndex(int channelIndex, @NonNull Limiter limiter) { + Number[] params = { PARAM_LIMITER, + channelIndex}; + Number[] values = {(limiter.isInUse() ? 1 : 0), + (limiter.isEnabled() ? 1 : 0), + limiter.getLinkGroup(), + limiter.getAttackTime(), + limiter.getReleaseTime(), + limiter.getRatio(), + limiter.getThreshold(), + limiter.getPostGain()}; + setNumberArray(params, values); + } + + private Limiter queryEngineLimiterByChannelIndex(int channelIndex) { + Number[] params = {PARAM_LIMITER, + channelIndex}; + Number[] values = {0 /*0 in use (int)*/, + 0 /*1 enabled (int)*/, + 0 /*2 link group (int)*/, + 0.0f /*3 attack time (float)*/, + 0.0f /*4 release time (float)*/, + 0.0f /*5 ratio (float)*/, + 0.0f /*6 threshold (float)*/, + 0.0f /*7 post gain(float)*/}; + + byte[] paramBytes = numberArrayToByteArray(params); + byte[] valueBytes = numberArrayToByteArray(values); //just interest in the byte size. + getParameter(paramBytes, valueBytes); + byteArrayToNumberArray(valueBytes, values); + + return new Limiter(values[0].intValue() > 0 /*in use*/, + values[1].intValue() > 0 /*enabled*/, + values[2].intValue() /*linkGroup*/, + values[3].floatValue() /*attackTime*/, + values[4].floatValue() /*releaseTime*/, + values[5].floatValue() /*ratio*/, + values[6].floatValue() /*threshold*/, + values[7].floatValue() /*postGain*/); + } + + private Channel queryEngineByChannelIndex(int channelIndex) { + float inputGain = getTwoFloat(PARAM_INPUT_GAIN, channelIndex); + Eq preEq = queryEngineEqByChannelIndex(PARAM_PRE_EQ, channelIndex); + Mbc mbc = queryEngineMbcByChannelIndex(channelIndex); + Eq postEq = queryEngineEqByChannelIndex(PARAM_POST_EQ, channelIndex); + Limiter limiter = queryEngineLimiterByChannelIndex(channelIndex); + + Channel channel = new Channel(inputGain, + preEq.isInUse(), preEq.getBandCount(), + mbc.isInUse(), mbc.getBandCount(), + postEq.isInUse(), postEq.getBandCount(), + limiter.isInUse()); + channel.setInputGain(inputGain); + channel.setPreEq(preEq); + channel.setMbc(mbc); + channel.setPostEq(postEq); + channel.setLimiter(limiter); + return channel; + } + + private void updateEngineChannelByChannelIndex(int channelIndex, @NonNull Channel channel) { + //send things with as few calls as possible + setTwoFloat(PARAM_INPUT_GAIN, channelIndex, channel.getInputGain()); + Eq preEq = channel.getPreEq(); + updateEngineEqByChannelIndex(PARAM_PRE_EQ, channelIndex, preEq); + Mbc mbc = channel.getMbc(); + updateEngineMbcByChannelIndex(channelIndex, mbc); + Eq postEq = channel.getPostEq(); + updateEngineEqByChannelIndex(PARAM_POST_EQ, channelIndex, postEq); + Limiter limiter = channel.getLimiter(); + updateEngineLimiterByChannelIndex(channelIndex, limiter); } //****** convenience methods: // - private int getOneInt(int paramGet) { - int[] param = new int[1]; - int[] result = new int[1]; + private int getOneInt(int param) { + final int[] params = { param }; + final int[] result = new int[1]; - param[0] = paramGet; - checkStatus(getParameter(param, result)); + checkStatus(getParameter(params, result)); return result[0]; } - private int getTwoInt(int paramGet, int paramA) { - int[] param = new int[2]; - int[] result = new int[1]; + private void setTwoFloat(int param, int paramA, float valueSet) { + final int[] params = { param, paramA }; + final byte[] value; - param[0] = paramGet; - param[1] = paramA; - checkStatus(getParameter(param, result)); - return result[0]; - } - - private int getThreeInt(int paramGet, int paramA, int paramB) { - //have to use bytearrays, with more than 2 parameters. - byte[] paramBytes = concatArrays(intToByteArray(paramGet), - intToByteArray(paramA), - intToByteArray(paramB)); - byte[] resultBytes = new byte[4]; //single int - - checkStatus(getParameter(paramBytes, resultBytes)); - - return byteArrayToInt(resultBytes); - } - - private void setOneInt(int paramSet, int valueSet) { - int[] param = new int[1]; - int[] value = new int[1]; - - param[0] = paramSet; - value[0] = valueSet; - checkStatus(setParameter(param, value)); - } - - private void setTwoInt(int paramSet, int paramA, int valueSet) { - int[] param = new int[2]; - int[] value = new int[1]; - - param[0] = paramSet; - param[1] = paramA; - value[0] = valueSet; - checkStatus(setParameter(param, value)); - } - - private void setThreeInt(int paramSet, int paramA, int paramB, int valueSet) { - //have to use bytearrays, with more than 2 parameters. - byte[] paramBytes = concatArrays(intToByteArray(paramSet), - intToByteArray(paramA), - intToByteArray(paramB)); - byte[] valueBytes = intToByteArray(valueSet); - - checkStatus(setParameter(paramBytes, valueBytes)); - } - - private void setOneFloat(int paramSet, float valueSet) { - int[] param = new int[1]; - byte[] value; - - param[0] = paramSet; - value = floatToByteArray(valueSet); - checkStatus(setParameter(param, value)); - } - - private void setTwoFloat(int paramSet, int paramA, float valueSet) { - int[] param = new int[2]; - byte[] value; - - param[0] = paramSet; - param[1] = paramA; value = floatToByteArray(valueSet); - checkStatus(setParameter(param, value)); + checkStatus(setParameter(params, value)); } - private void setThreeFloat(int paramSet, int paramA, int paramB, float valueSet) { - //have to use bytearrays, with more than 2 parameters. - byte[] paramBytes = concatArrays(intToByteArray(paramSet), - intToByteArray(paramA), - intToByteArray(paramB)); - byte[] valueBytes = floatToByteArray(valueSet); - - checkStatus(setParameter(paramBytes, valueBytes)); - } - private byte[] intArrayToByteArray(int[] values) { - int expectedBytes = values.length * 4; + private byte[] numberArrayToByteArray(Number[] values) { + int expectedBytes = 0; + for (int i = 0; i < values.length; i++) { + if (values[i] instanceof Integer) { + expectedBytes += Integer.BYTES; + } else if (values[i] instanceof Float) { + expectedBytes += Float.BYTES; + } else { + throw new IllegalArgumentException("unknown value type " + + values[i].getClass()); + } + } ByteBuffer converter = ByteBuffer.allocate(expectedBytes); converter.order(ByteOrder.nativeOrder()); - for (int k = 0; k < values.length; k++) { - converter.putFloat(values[k]); + for (int i = 0; i < values.length; i++) { + if (values[i] instanceof Integer) { + converter.putInt(values[i].intValue()); + } else if (values[i] instanceof Float) { + converter.putFloat(values[i].floatValue()); + } } return converter.array(); } - private void setIntArray(int paramSet, int[] paramArray) { - //have to use bytearrays, with more than 2 parameters. - byte[] paramBytes = intToByteArray(paramSet); - byte[] valueBytes = intArrayToByteArray(paramArray); - checkStatus(setParameter(paramBytes, valueBytes)); + private void byteArrayToNumberArray(byte[] valuesIn, Number[] valuesOut) { + int inIndex = 0; + int outIndex = 0; + while (inIndex < valuesIn.length && outIndex < valuesOut.length) { + if (valuesOut[outIndex] instanceof Integer) { + valuesOut[outIndex++] = byteArrayToInt(valuesIn, inIndex); + inIndex += Integer.BYTES; + } else if (valuesOut[outIndex] instanceof Float) { + valuesOut[outIndex++] = byteArrayToFloat(valuesIn, inIndex); + inIndex += Float.BYTES; + } else { + throw new IllegalArgumentException("can't convert " + + valuesOut[outIndex].getClass()); + } + } + if (outIndex != valuesOut.length) { + throw new IllegalArgumentException("only converted " + outIndex + + " values out of "+ valuesOut.length + " expected"); + } } - private float getOneFloat(int paramGet) { - int[] param = new int[1]; - byte[] result = new byte[4]; - - param[0] = paramGet; - checkStatus(getParameter(param, result)); - return byteArrayToFloat(result); + private void setNumberArray(Number[] params, Number[] values) { + byte[] paramBytes = numberArrayToByteArray(params); + byte[] valueBytes = numberArrayToByteArray(values); + checkStatus(setParameter(paramBytes, valueBytes)); } - private float getTwoFloat(int paramGet, int paramA) { - int[] param = new int[2]; - byte[] result = new byte[4]; + private float getTwoFloat(int param, int paramA) { + final int[] params = { param, paramA }; + final byte[] result = new byte[4]; - param[0] = paramGet; - param[1] = paramA; - checkStatus(getParameter(param, result)); + checkStatus(getParameter(params, result)); return byteArrayToFloat(result); } - private float getThreeFloat(int paramGet, int paramA, int paramB) { - //have to use bytearrays, with more than 2 parameters. - byte[] paramBytes = concatArrays(intToByteArray(paramGet), - intToByteArray(paramA), - intToByteArray(paramB)); - byte[] resultBytes = new byte[4]; //single float - - checkStatus(getParameter(paramBytes, resultBytes)); - - return byteArrayToFloat(resultBytes); - } - - private float[] getOneFloatArray(int paramGet, int expectedSize) { - int[] param = new int[1]; - byte[] result = new byte[4 * expectedSize]; - - param[0] = paramGet; - checkStatus(getParameter(param, result)); - float[] returnArray = new float[expectedSize]; - for (int k = 0; k < expectedSize; k++) { - returnArray[k] = byteArrayToFloat(result, 4 * k); - } - return returnArray; - } /** * @hide * The OnParameterChangeListener interface defines a method called by the DynamicsProcessing diff --git a/packages/CaptivePortalLogin/res/values-as/strings.xml b/packages/CaptivePortalLogin/res/values-as/strings.xml index 6791d1bf783704f5fb95b1e74c5887a40848b27e..94c3147724837030e3b91e3691f876d5b5c03f65 100644 --- a/packages/CaptivePortalLogin/res/values-as/strings.xml +++ b/packages/CaptivePortalLogin/res/values-as/strings.xml @@ -4,13 +4,9 @@ "CaptivePortalLogin" "এই নেটৱৰ্কটো এইদৰে ব্যৱহাৰ কৰক" "এই নেটৱৰ্কটো ব্যৱহাৰ নকৰিব" - - + "নেটৱৰ্কত ছাইন ইন কৰক" "%1$st ছাইন ইন কৰক" - - - - - - + "আপুনি সংযোগ কৰিবলৈ চেষ্টা কৰি থকা নেটৱৰ্কটোত সুৰক্ষাজনিত সমস্যা আছে।" + "উদাহৰণস্বৰূপে, আপোনাক দেখুওৱা লগ ইনৰ পৃষ্ঠাটো প্ৰতিষ্ঠানটোৰ নিজা নহ\'বও পাৰে।" + "তথাপি ব্ৰাউজাৰৰ জৰিয়তে অব্যাহত ৰাখক" diff --git a/packages/CaptivePortalLogin/res/values-or/strings.xml b/packages/CaptivePortalLogin/res/values-or/strings.xml index b7c8321071935ed6f726295eb74f0c1199c68c39..80074c394b83364db9e293a4d8e37ce04c4bc7f6 100644 --- a/packages/CaptivePortalLogin/res/values-or/strings.xml +++ b/packages/CaptivePortalLogin/res/values-or/strings.xml @@ -5,8 +5,7 @@ "ଏହି ନେଟ୍‌ୱର୍କ ଯେପରି ଅଛି, ସେହିପରି ବ୍ୟବହାର କରନ୍ତୁ" "ଏହି ନେଟ୍‌ୱର୍କକୁ ବ୍ୟବହାର କରନ୍ତୁ ନାହିଁ" "ନେଟ୍‌ୱର୍କରେ ସାଇନ୍‍ ଇନ୍‍ କରନ୍ତୁ" - - + "%1$sରେ ସାଇନ୍‍-ଇନ୍‍ କରନ୍ତୁ" "ଆପଣ ଯୋଗ ଦେବାକୁ ଚେଷ୍ଟା କରୁଥିବା ନେଟ୍‌ୱର୍କର ସୁରକ୍ଷା ସମସ୍ୟା ଅଛି।" "ଉଦାହରଣସ୍ୱରୂପ, ଲଗଇନ୍‍ ପୃଷ୍ଠା ଦେଖାଯାଇଥିବା ସଂସ୍ଥାର ନହୋଇଥାଇପାରେ।" "ବ୍ରାଉଜର୍‍ ଜରିଆରେ ଯେମିତିବି ହେଉ ଜାରି ରଖନ୍ତୁ" diff --git a/packages/CarrierDefaultApp/res/values-eu/strings.xml b/packages/CarrierDefaultApp/res/values-eu/strings.xml index abd069689591dd4c7e012c87b482d60c357b65cf..f98a192f394888b528d506df40f8b4537c89318f 100644 --- a/packages/CarrierDefaultApp/res/values-eu/strings.xml +++ b/packages/CarrierDefaultApp/res/values-eu/strings.xml @@ -9,7 +9,7 @@ "Jarri harremanetan %s operadorearekin" "Ez dago datu-konexiorik" "Gehitu datuak eta ibiltaritza-plana %s bidez" - "Datu mugikorren egoera" + "Datu-konexioaren egoera" "Hasi saioa sare mugikorrean" "Erabili nahi duzun sareak segurtasun-arazoak ditu." "Adibidez, baliteke saioa hasteko orria adierazitako erakundearena ez izatea." diff --git a/packages/CarrierDefaultApp/res/values-or/strings.xml b/packages/CarrierDefaultApp/res/values-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..fd51ed0f78b974da307a620d4bb6a76c5b3086e7 --- /dev/null +++ b/packages/CarrierDefaultApp/res/values-or/strings.xml @@ -0,0 +1,17 @@ + + + "CarrierDefaultApp" + "ମୋବାଇଲ୍‌ କେରିଅର୍‍" + "ମୋବାଇଲ୍‍ ଡାଟା ଶେଷ ହୋଇଯାଇଛି" + "ଆପଣଙ୍କ ମୋବାଇଲ୍‍ ଡାଟା ନିଷ୍କ୍ରୀୟ କରାଯାଇଛି" + "%s ୱେବସାଇଟ୍‍ ଭିଜିଟ୍‍ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ" + "ଦୟାକରି ଆପଣଙ୍କ ସେବା ପ୍ରଦାନକାରୀ %sକୁ ଯୋଗାଯୋଗ କରନ୍ତୁ।" + "କୌଣସି ମୋବାଇଲ୍‍ ଡାଟା କନେକ୍ସନ୍‌ ନାହିଁ" + "%s ଜରିଆରେ ଡାଟା କିମ୍ବା ରୋମିଙ୍ଗ ପ୍ଲାନ୍‍ ଯୋଡ଼ନ୍ତୁ" + "ମୋବାଇଲ୍‍ ଡାଟା ସ୍ଥିତି" + "ମୋବାଇଲ୍‍ ନେଟୱର୍କରେ ସାଇନ୍‍ ଇନ୍‍ କରନ୍ତୁ" + "ଆପଣ ଯୋଗ ଦେବାକୁ ଚେଷ୍ଟା କରୁଥିବା ନେଟୱର୍କର ସୁରକ୍ଷା ସମସ୍ୟା ଅଛି।" + "ଉଦାହରଣସ୍ୱରୂପ, ଲଗଇନ୍‍ ପୃଷ୍ଠା ଦେଖାଯାଇଥିବା ସଂସ୍ଥାର ହୋଇନଥାଇପାରେ।" + "ବ୍ରାଉଜର୍‍ ଜରିଆରେ ଯେମିତିବି ହେଉ ଜାରି ରଖନ୍ତୁ" + diff --git a/packages/ExternalStorageProvider/res/values-or/strings.xml b/packages/ExternalStorageProvider/res/values-or/strings.xml index 034d8a4ae5f790940bd5b1f5841cff93db5a493e..5387dc7d7663ab850852b08de93e19a2e2dd82ab 100644 --- a/packages/ExternalStorageProvider/res/values-or/strings.xml +++ b/packages/ExternalStorageProvider/res/values-or/strings.xml @@ -17,8 +17,7 @@ "ଏକ୍ସଟର୍ନଲ୍‌ ଷ୍ଟୋରେଜ୍‌" - - + "ଲୋକାଲ୍‍ ଷ୍ଟୋରେଜ୍‍" "ଇଣ୍ଟର୍ନଲ୍‌ ଷ୍ଟୋରେଜ୍‌" "ଡକ୍ୟୁମେଣ୍ଟ" diff --git a/packages/InputDevices/res/values-or/strings.xml b/packages/InputDevices/res/values-or/strings.xml index eece5b780e96040aec89cdcf3b294dcd3a5f243d..cf69accd82cbea98e00fe3b1e32e725e20a980bd 100644 --- a/packages/InputDevices/res/values-or/strings.xml +++ b/packages/InputDevices/res/values-or/strings.xml @@ -41,8 +41,6 @@ "ଲିଥୁଆନିଆନ୍" "ସ୍ପାନିଶ୍‍ (ଲାଟିନ୍‌)" "ଲାଟିଭିଆନ୍‍" - - - - + "ପାର୍ସିଆନ୍‌" + "ଆଜେର୍‌ବୈଜାନି" diff --git a/packages/MtpDocumentsProvider/perf_tests/Android.mk b/packages/MtpDocumentsProvider/perf_tests/Android.mk index 6504af12db23c1bfd4bc632d3f9946b8e357201d..e873157dcf3432ad8de99787d3bb6b83c90f0d02 100644 --- a/packages/MtpDocumentsProvider/perf_tests/Android.mk +++ b/packages/MtpDocumentsProvider/perf_tests/Android.mk @@ -8,5 +8,6 @@ LOCAL_PACKAGE_NAME := MtpDocumentsProviderPerfTests LOCAL_PRIVATE_PLATFORM_APIS := true LOCAL_INSTRUMENTATION_FOR := MtpDocumentsProvider LOCAL_CERTIFICATE := media +LOCAL_COMPATIBILITY_SUITE += device-tests include $(BUILD_PACKAGE) diff --git a/packages/MtpDocumentsProvider/perf_tests/AndroidTest.xml b/packages/MtpDocumentsProvider/perf_tests/AndroidTest.xml new file mode 100644 index 0000000000000000000000000000000000000000..8b7292b625e1e1f2d2eb054f21cf4c14f3bffc02 --- /dev/null +++ b/packages/MtpDocumentsProvider/perf_tests/AndroidTest.xml @@ -0,0 +1,27 @@ + + + + diff --git a/packages/PrintSpooler/res/values-as/strings.xml b/packages/PrintSpooler/res/values-as/strings.xml index 0a95c8475ea1d5fdfe13131d3ff90342ee7a3136..ba4fd99e2b3c7df58f08f4f773f88dea9d183312 100644 --- a/packages/PrintSpooler/res/values-as/strings.xml +++ b/packages/PrintSpooler/res/values-as/strings.xml @@ -24,8 +24,7 @@ "কাগজৰ আকাৰ" "কাগজৰ আকাৰ:" "ৰং" - - + "পৃষ্ঠাখনৰ দুয়োফালে" "দিশ" "পৃষ্ঠাসমূহ" "প্ৰিণ্টাৰ বাছনি কৰক" @@ -56,7 +55,10 @@ "প্ৰিণ্টাৰ যোগ কৰক" "প্ৰিণ্টাৰ বাছনি কৰক" "প্ৰিণ্টাৰ পাহৰি যাওক" - + + %1$sটা প্ৰিণ্টাৰ বিচাৰি পোৱা হৈছে + %1$sটা প্ৰিণ্টাৰ বিচাৰি পোৱা হৈছে + "%1$s - %2$s" "এই প্ৰিণ্টাৰটোৰ বিষয়ে অধিক তথ্য" "প্ৰিণ্ট হৈ থকা কামবোৰ" @@ -73,7 +75,10 @@ "অনুমোদিত সেৱাসমূহ" "অক্ষম কৰা সেৱাসমূহ" "সকলো সেৱা" - + + %1$sটা প্ৰিণ্টাৰ বিচাৰিবলৈ ইনষ্টল কৰক + %1$sটা প্ৰিণ্টাৰ বিচাৰিবলৈ ইনষ্টল কৰক + "%1$s প্ৰিণ্ট কৰি থকা হৈছে" "%1$s বাতিল কৰি থকা হৈছে" "প্ৰিণ্টাৰৰ আসোঁৱাহ %1$s" diff --git a/packages/PrintSpooler/res/values-fr-rCA/strings.xml b/packages/PrintSpooler/res/values-fr-rCA/strings.xml index 8e1252589267a48505d7c5ab91fe4ec881cf44ff..bf306ff500b89a55914d0459000771aa8a5b5117 100644 --- a/packages/PrintSpooler/res/values-fr-rCA/strings.xml +++ b/packages/PrintSpooler/res/values-fr-rCA/strings.xml @@ -84,7 +84,7 @@ "Erreur impression : « %1$s »" "Impression de « %1$s » bloquée" "Annuler" - "Recommencer" + "Redémarrer" "Aucune connexion à l\'imprimante" "inconnu" "Utiliser %1$s?" diff --git a/packages/PrintSpooler/res/values-gu/strings.xml b/packages/PrintSpooler/res/values-gu/strings.xml index 4d035da21fc58509d8b0157427fecfa8386e8ab8..aeeff16c32221a4df2ee8f6abf6ddfedff42b747 100644 --- a/packages/PrintSpooler/res/values-gu/strings.xml +++ b/packages/PrintSpooler/res/values-gu/strings.xml @@ -61,8 +61,8 @@ "%1$s - %2$s" "આ પ્રિન્ટર વિશે વધુ માહિતી" - "ચાલી રહેલા છાપવાનાં કાર્યો" - "નિષ્ફળ થયેલ છાપવાના કાર્યો" + "ચાલી રહેલા છાપવાનાં Tasks" + "નિષ્ફળ થયેલ છાપવાના Tasks" "ફાઇલ બનાવી શક્યાં નથી" "કેટલીક છાપવાની સેવાઓ અક્ષમ કરેલ છે" "પ્રિન્ટર્સ માટે શોધી રહ્યું છે" diff --git a/packages/PrintSpooler/res/values-or/strings.xml b/packages/PrintSpooler/res/values-or/strings.xml index d9328d0ecb8a6f12bfe7d302377a76ca92fca846..7eeac87710321a3cf2eafc92cbb581616432d045 100644 --- a/packages/PrintSpooler/res/values-or/strings.xml +++ b/packages/PrintSpooler/res/values-or/strings.xml @@ -61,31 +61,24 @@ "%1$s - %2$s" "ଏହି ପ୍ରିଣ୍ଟର୍‌ ବିଷୟରେ ଅଧିକ ସୂଚନା" - - - - + "ଚାଲୁଥିବା ପ୍ରିଣ୍ଟ ଜବ୍‌" + "ବିଫଳ ହୋଇଥିବା ପ୍ରିଣ୍ଟ ଜବ୍‌" "ଫାଇଲ୍‍ ତିଆରି କରିହେଲା ନାହିଁ" - - + "କିଛି ପ୍ରିଣ୍ଟ ସର୍ଭିସ୍‌କୁ ଅକ୍ଷମ କରାଯାଇଛି" "ପ୍ରିଣ୍ଟର୍‌ ଖୋଜାଯାଉଛି" "କୌଣସି ପ୍ରିଣ୍ଟ ସେବା ସକ୍ଷମ କରାଯାଇନାହିଁ" "କୌଣସି ପ୍ରିଣ୍ଟର୍‍ ମିଳିଲା ନାହିଁ" - - - - - - - - - - - - - - - + "ପ୍ରିଣ୍ଟର ଯୋଡ଼ିହେବ ନାହିଁ" + "ପ୍ରିଣ୍ଟର ଯୋଡ଼ିବାକୁ ଚୟନ କରନ୍ତୁ" + "ସକ୍ଷମ କରିବା ପାଇଁ ଚୟନ କରନ୍ତୁ" + "ସକ୍ଷମ କରାଯାଇଥିବା ସର୍ଭିସ୍‌" + "ସୁପାରିସ କରାଯାଇଥିବା ସର୍ଭିସ୍‌" + "ଅକ୍ଷମ କରାଯାଇଥିବା ସର୍ଭିସ୍‌" + "ସମସ୍ତ ସର୍ଭିସ୍‌" + + %1$sଟି ପ୍ରିଣ୍ଟର୍‍ ଖୋଜିବା ପାଇଁ ଇନଷ୍ଟଲ୍‍ କରନ୍ତୁ + %1$sଟି ପ୍ରିଣ୍ଟର୍‍ ଖୋଜିବା ପାଇଁ ଇନଷ୍ଟଲ୍‍ କରନ୍ତୁ + "%1$s ପ୍ରିଣ୍ଟ କରାଯାଉଛି" "%1$s କ୍ୟାନ୍ସଲ୍‍ କରାଯାଉଛି" "%1$s ପ୍ରିଣ୍ଟର୍‍ ତ୍ରୁଟି" @@ -113,7 +106,6 @@ "କାମ କଲାନାହିଁ, ପୁଣିଥରେ ଚେଷ୍ଟା କରନ୍ତୁ" "ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ" "ପ୍ରିଣ୍ଟର୍‍ ବର୍ତ୍ତମାନ ଉପଲବ୍ଧ ନାହିଁ।" - - + "ଝଲକ ଦେଖାଇହେବ ନାହିଁ" "ଝଲକ ତିଆରି କରାଯାଉଛି…" diff --git a/packages/SettingsLib/Android.mk b/packages/SettingsLib/Android.mk index 859f86faecbe16d0a7f5a4e554461849018d7005..5a8be3192b0c89b255cdfe09561ec342a8c8f834 100644 --- a/packages/SettingsLib/Android.mk +++ b/packages/SettingsLib/Android.mk @@ -3,6 +3,8 @@ include $(CLEAR_VARS) LOCAL_USE_AAPT2 := true +LOCAL_AAPT2_ONLY := true + LOCAL_MODULE := SettingsLib LOCAL_JAVA_LIBRARIES := \ diff --git a/packages/SettingsLib/common.mk b/packages/SettingsLib/common.mk index 28f97d1948bd39dbb1281f80c04e936fd2aff6ad..5de3a6e994402cfda9f0474e5d97008a985f2d52 100644 --- a/packages/SettingsLib/common.mk +++ b/packages/SettingsLib/common.mk @@ -13,7 +13,6 @@ # include frameworks/base/packages/SettingsLib/common.mk # -ifeq ($(LOCAL_USE_AAPT2),true) LOCAL_STATIC_JAVA_LIBRARIES += \ android-support-annotations \ android-arch-lifecycle-common @@ -26,45 +25,4 @@ LOCAL_STATIC_ANDROID_LIBRARIES += \ android-support-v7-appcompat \ android-support-v14-preference \ SettingsLib -else -LOCAL_RESOURCE_DIR += $(call my-dir)/res - -## Include transitive dependencies below - -# Include support-v7-appcompat, if not already included -ifeq (,$(findstring android-support-v7-appcompat,$(LOCAL_STATIC_JAVA_LIBRARIES))) -LOCAL_RESOURCE_DIR += prebuilts/sdk/current/support/v7/appcompat/res -LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.appcompat -LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-appcompat -endif - -# Include support-v7-recyclerview, if not already included -ifeq (,$(findstring android-support-v7-recyclerview,$(LOCAL_STATIC_JAVA_LIBRARIES))) -LOCAL_RESOURCE_DIR += prebuilts/sdk/current/support/v7/recyclerview/res -LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.recyclerview -LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-recyclerview -endif - -# Include android-support-v7-preference, if not already included -ifeq (,$(findstring android-support-v7-preference,$(LOCAL_STATIC_JAVA_LIBRARIES))) -LOCAL_RESOURCE_DIR += prebuilts/sdk/current/support/v7/preference/res -LOCAL_AAPT_FLAGS += --extra-packages android.support.v7.preference -LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-preference -endif - -# Include android-support-v14-preference, if not already included -ifeq (,$(findstring android-support-v14-preference,$(LOCAL_STATIC_JAVA_LIBRARIES))) -LOCAL_AAPT_FLAGS += --extra-packages android.support.v14.preference -LOCAL_STATIC_JAVA_LIBRARIES += android-support-v14-preference -endif - -LOCAL_AAPT_FLAGS += --auto-add-overlay --extra-packages com.android.settingslib - -LOCAL_STATIC_JAVA_LIBRARIES += \ - android-support-annotations \ - android-support-v4 \ - android-arch-lifecycle-runtime \ - android-arch-lifecycle-common \ - SettingsLib -endif diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml index e8a3cd8dd3a7205a5e3c7130a18039d1207ecdc6..bdc88fd0e27a956d0e1b246b69bd13d0ab5030df 100644 --- a/packages/SettingsLib/res/values-af/strings.xml +++ b/packages/SettingsLib/res/values-af/strings.xml @@ -40,6 +40,8 @@ "Gekoppel via %1$s" "Beskikbaar via %1$s" "Gekoppel, geen internet nie" + "Geen internet nie" + "Aanmelding word vereis" "Toegangspunt is tydelik vol" "Gekoppel via %1$s" "Beskikbaar via %1$s" @@ -63,6 +65,9 @@ "Gekoppel (geen foon nie), battery %1$s%2$s" "Gekoppel (geen media nie), battery %1$s%2$s" "Gekoppel (geen foon of media nie), battery %1$s%2$s" + "Aktief, %1$s batterykrag" + "%1$s batterykrag" + "Aktief" "Media-oudio" "Foonoproepe" "Lêeroordrag" @@ -109,6 +114,10 @@ "Oorfoon" "Randinvoertoestel" "Bluetooth" + "Bind tans linkergehoortoestel saam …" + "Bind tans regtergehoortoestel saam …" + "Links – %1$s batterykrag" + "Regs – %1$s batterykrag" "Wi-Fi af." "Wi-Fi is ontkoppel." "Wi-Fi een staaf." @@ -188,7 +197,7 @@ "Bly wakker" "Skerm sal nooit slaap terwyl laai nie" "Aktiveer Bluetooth HCI-loerloglêer" - "Vang alle Bluetooth HCI-pakette in \'n lêer vas" + "Vang alle Bluetooth HCI-pakkette in \'n lêer vas (Wissel Bluetooth nadat jy hierdie instelling verander het)" "OEM-ontsluit" "Laat toe dat die selflaaiprogram ontsluit word" "Laat OEM-ontsluit toe?" @@ -207,15 +216,20 @@ "Bluetooth AVRCP-weergawe" "Kies Bluetooth AVRCP-weergawe" "Bluetooth-oudiokodek" - "Kies Bluetooth-oudiokodek" + + "Bluetooth-oudiovoorbeeldkoers" - "Kies Bluetooth-oudiokodek:\nVoorbeeldtempo" + + "Bluetooth-oudiobisse per voorbeeld" - "Kies Bluetooth-oudiokodek:\nBis per voorbeeld" + + "Bluetooth-oudiokanaalmodus" - "Kies Bluetooth-oudiokodek:\nKanaalmodus" + + "Bluetooth-oudio-LDAC-kodek: Speelgehalte" - "Kies Bluetooth-oudio-LDAC-kodek:\nSpeelgehalte" + + "Stroming: %1$s" "Private DNS" "Kies private DNS-modus" @@ -223,9 +237,12 @@ "Outomaties" "Gasheernaam van private DNS-verskaffer" "Voer gasheernaam van DNS-verskaffer in" + "Kon nie koppel nie" "Wys opsies vir draadlose skermsertifisering" "Verhoog Wi-Fi-aantekeningvlak, wys per SSID RSSI in Wi‑Fi-kieser" "Verewekansig MAC-adres wanneer daar aan Wi‑Fi-netwerke gekoppel word" + "Beperk" + "Onbeperk" "Loggerbuffer se groottes" "Kies loggergroottes per logbuffer" "Maak logskrywer se aanhoudende berging skoon?" @@ -360,14 +377,10 @@ "Ongeveer %1$s oor gegrond op jou gebruik" "Omtrent %1$s oor op grond van jou gebruik (%2$s)" "%1$s oor" - - - - - - - - + "Sal op grond van jou gebruik waarskynlik hou tot omtrent %1$s (%2$s)" + "Sal op grond van jou gebruik waarskynlik hou tot omtrent %1$s" + "Sal waarskynlik hou tot omtrent %1$s (%2$s)" + "Sal waarskynlik hou tot omtrent %1$s" "Minder as %1$s oor" "Minder as %1$s oor (%2$s)" "Meer as %1$s oor (%2$s)" @@ -422,8 +435,7 @@ "Geregistreer" "Nie geregistreer nie" "Onbeskikbaar" - - + "MAC word ewekansig gemaak" %1$d toestelle is gekoppel %1$d toestel is gekoppel @@ -443,6 +455,5 @@ "op %1$s" "Tydsduur" "Vra elke keer" - - + "Sopas" diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml index 70107f3da9a68088f80fa4fb0e0b5ce9a1f8763c..4305a925bb9bd4e8e13090ac045bc6a9fd7a22e4 100644 --- a/packages/SettingsLib/res/values-am/strings.xml +++ b/packages/SettingsLib/res/values-am/strings.xml @@ -40,6 +40,8 @@ "በ%1$s በኩል መገናኘት" "በ%1$s በኩል የሚገኝ" "ተገናኝቷል፣ ምንም በይነመረብ የለም" + "ምንም በይነመረብ የለም" + "ወደ መለያ መግባት ያስፈልጋል" "የመዳረሻ ነጥብ ለጊዜው ሞልቷል" "በ%1$s በኩል ተገናኝቷል" "በ%1$s በኩል የሚገኝ" @@ -63,6 +65,9 @@ "ተገናኝቷል (ምንም ስልክ የለም)፣ ባትሪ %1$s%2$s" "ተገናኝቷል (ምንም ማህደረ መረጃ የለም)፣ ባትሪ %1$s%2$s" "ተገናኝቷል (ምንም ስልክ ወይም ማህደረ መረጃ የለም)፣ ባትሪ %1$s%2$s" + "ንቁ፣ %1$s ባትሪ" + "%1$s ባትሪ" + "ንቁ" "የማህደረ መረጃ ኦዲዮ" "የስልክ ጥሪዎች" "ፋይል ማስተላለፍ" @@ -109,6 +114,10 @@ "የጆሮ ማዳመጫ" "የግቤት መለዋወጫ" "ብሉቱዝ" + "ግራ አጋዥ መስሚያን በማጣመር ላይ…" + "ቀኝ አጋዥ መስሚያን በማጣመር ላይ…" + "ግራ - %1$s ባትሪ" + "ቀኝ - %1$s ባትሪ" "Wifi ጠፍቷል።" "የWifi ግንኙነት ተቋርጧል።" "አንድ የWiFi አሞሌ።" @@ -188,7 +197,7 @@ "ነቅተህ ቆይ" "ማያኃይል በመሙላት ላይበፍፁም አይተኛም" "የብሉቱዝ HCI ስለላ ምዝግብ ማስታወሻን ያንቁ" - "በአንድ ፋይል ውስጥ ያሉትን የብሉቱዝ HCI እሽጎች ይቅረጹ" + "በአንድ ፋይል ውስጥ ያሉት ሁሉንም የብሉቱዝ HCI ጥቅሎች ይቅረጹ (ይህን ቅንብር ከቀየሩ በኋላ ብሉቱዝን ይቀይሩ)" "OEM መክፈቻ" "የማስነሻ ተሸካሚ እንዲከፈት ፍቀድ" "የOEM መክፈቻ ይፈቀድ?" @@ -207,15 +216,20 @@ "የብሉቱዝ AVRCP ስሪት" "የብሉቱዝ AVRCP ስሪት ይምረጡ" "የብሉቱዝ ኦዲዮ ኮዴክ" - "የብሉቱዝ ኦዲዮ ኮዴክ ይምረጡ" + + "የብሉቱዝ ኦዲዮ ናሙና ፍጥነት" - "የብሉቱዝ ኦዲዮ ኮዴክ ይምረጡ፦\nየናሙና ፍጥነት" + + "የብሉቱዝ ኦዲዮ ቢት በናሙና" - "የብሉቱዝ ኦዲዮ ኮዴክ ይምረጡ፦\nቢት በናሙና" + + "የብሉቱዝ ኦዲዮ ሰርጥ ሁነታ" - "የብሉቱዝ ኦዲዮ ኮዴክ ይምረጡ፦\nየሰርጥ ሁነታ" + + "የብሉቱዝ ኦዲዮ LDAC ኮዴክ ይምረጡ፦ የመልሶ ማጫወት ጥራት" - "የብሉቱዝ ኦዲዮ LDAC ኮዴክ ይምረጡ፦\nየመልሶ ማጫወት ጥራት" + + "ዥረት፦ %1$s" "የግል ዲኤንኤስ" "የግል ዲኤንኤስ ሁነታ ይምረጡ" @@ -223,9 +237,12 @@ "ራስ-ሰር" "የግል ዲኤንኤስ አቅራቢ አስተናጋጅ ስም" "የዲኤንኤስ አቅራቢ አስተናጋጅ ስም ያስገቡ" + "መገናኘት አልተቻለም" "የገመድ አልባ ማሳያ እውቅና ማረጋገጫ አማራጮችን አሳይ" "የWi‑Fi ምዝግብ ማስታወሻ አያያዝ ደረጃ ጨምር፣ በWi‑Fi መምረጫ ውስጥ በአንድ SSID RSSI አሳይ" "ከWi-Fi አውታረ መረቦች ጋር ሲገናኙ የማክ አድራሻን በዘፈቀደ ይስሩ" + "የሚለካ" + "ያልተለካ" "የምዝግብ ማስታወሻ ያዥ መጠኖች" "በአንድ ምዝግብ ማስታወሻ ቋጥ የሚኖረው የምዝግብ ማስታወሻ ያዥ መጠኖች ይምረጡ" "የምዝግብ ማስታወሻ ያዢ ቋሚ ማከማቻ ይጽዳ?" @@ -360,14 +377,10 @@ "በእርስዎ አጠቃቀም ላይ በመመስረት %1$s ገደማ ቀርቷል" "በአጠቃቀምዎ (%2$s) መሠረት %1$s ገደማ ቀርቷል" "%1$s ቀርቷል" - - - - - - - - + "በአጠቃቀምዎ (%2$s) መሠረት እስከ %1$s ገደማ መቆየት አለበት" + "በአጠቃቀምዎ መሠረት እስከ %1$s ገደማ መቆየት አለበት" + "እስከ %1$s (%2$s) ገደማ ድረስ መቆየት አለበት" + "እስከ %1$s ገደማ መቆየት አለበት" "ከ%1$s ያነሰ ይቀራል" "ከ%1$s ያነሰ ይቀራል (%2$s)" "ከ%1$s በላይ ይቀራል (%2$s)" @@ -422,8 +435,7 @@ "የተመዘገበ" "አልተመዘገበም" "አይገኝም" - - + "ማክ በዘፈቀደ ይሰራል" %1$d መሣሪያዎች ተገናኝተዋል %1$d መሣሪያዎች ተገናኝተዋል @@ -443,6 +455,5 @@ "በ%1$s ላይ" "የቆይታ ጊዜ" "ሁልጊዜ ጠይቅ" - - + "ልክ አሁን" diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml index 20e245bd9c297efd1732ddc81e9468470dd7a994..9c49cc816be60a503c22f25c067893782cc43df3 100644 --- a/packages/SettingsLib/res/values-ar/strings.xml +++ b/packages/SettingsLib/res/values-ar/strings.xml @@ -40,6 +40,8 @@ "‏تم الاتصال عبر %1$s" "‏متوفرة عبر %1$s" "متصلة ولكن بلا إنترنت" + "لا يتوفر اتصال إنترنت." + "يلزم تسجيل الدخول" "نقطة الدخول ممتلئة مؤقتًا" "‏تم الاتصال عبر %1$s" "‏متوفرة عبر %1$s" @@ -63,6 +65,9 @@ "الجهاز متصل (من دون هاتف)، ومستوى طاقة البطارية %1$s%2$s" "الجهاز متصل (من دون وسائط)، ومستوى طاقة البطارية %1$s%2$s" "الجهاز متّصل (من دون هاتف أو وسائط)، ومستوى طاقة البطارية %1$s%2$s" + "نشط، ومستوى طاقة البطارية %1$s" + "مستوى طاقة البطارية %1$s" + "نشط" "الإعدادات الصوتية للوسائط" "المكالمات الهاتفية" "نقل الملف" @@ -109,6 +114,10 @@ "سماعة أذن" "جهاز إدخال طرفي" "بلوتوث" + "جارٍ إقران سماعة الأذن الطبية اليسرى…" + "جارٍ إقران سماعة الأذن الطبية اليمنى…" + "اليسرى - مستوى طاقة البطارية %1$s" + "اليمنى - مستوى طاقة البطارية %1$s" "‏تم إيقاف Wi-Fi." "‏تم قطع اتصال Wi-Fi." "‏إشارة Wi-Fi تتكون من شريط واحد." @@ -188,7 +197,7 @@ "البقاء في الوضع النشط" "لا يتم مطلقًا دخول الشاشة في وضع السكون أثناء الشحن" "تمكين سجل تطفل بواجهة وحدة تحكم المضيف عبر بلوتوث" - "التقاط حزم واجهة وحدة تحكم المضيف في ملف عبر بلوتوث" + "‏التقاط جميع حزم واجهة وحدة تحكم المضيف (HCI) في أحد الملفات عبر البلوتوث (تبديل البلوتوث بعد تغيير هذا الإعداد)" "إلغاء قفل المصنّع الأصلي للجهاز" "‏السماح بإلغاء قفل برنامج bootloader" "هل تريد السماح بإلغاء قفل المصنّع الأصلي للجهاز؟" @@ -207,15 +216,20 @@ "‏إصدار Bluetooth AVRCP" "‏اختيار إصدار Bluetooth AVRCP" "ترميز صوت بلوتوث" - "اختيار برنامج الترميز لصوت البلوتوث" + + "معدّل عيّنة صوت بلوتوث" - "اختيار برنامج ترميز صوت البلوتوث:\nمعدل العينة" + + "وحدات البت لكل عيّنة في صوت بلوتوث" - "اختيار برنامج ترميز صوت البلوتوث:\nوحدات بت لكل عينة" + + "وضع قناة صوت بلوتوث" - "اختيار برنامج ترميز صوت البلوتوث:\nوضع القناة" + + "‏برنامج ترميز LDAC لصوت البلوتوث: جودة التشغيل" - "‏اختيار برنامج ترميز LDAC لصوت البلوتوث:\nجودة التشغيل" + + "البث: %1$s" "نظام أسماء النطاقات الخاص" "اختر وضع نظام أسماء النطاقات الخاص" @@ -223,9 +237,12 @@ "آلي" "اسم مضيف مزوّد نظام أسماء النطاقات الخاص" "أدخل اسم مضيف مزوّد نظام أسماء النطاقات" + "تعذّر الاتصال" "عرض خيارات شهادة عرض شاشة لاسلكي" "‏زيادة مستوى تسجيل Wi-Fi، وعرض لكل SSID RSSI في منتقي Wi-Fi" "‏اختيار عشوائي لعنوان MAC عند الاتصال بشبكات Wi‑Fi" + "بقياس" + "بدون قياس" "أحجام ذاكرة التخزين المؤقت للتسجيل" "حدد أحجامًا أكبر لكل ذاكرة تخزين مؤقت للتسجيل" "هل تريد محو سعة التخزين الدائمة للمسجِّل؟" @@ -360,14 +377,10 @@ "يتبقى %1$s تقريبًا بناءً على استخدامك" "يتبقى %1$s تقريبًا، بناءً على استخدامك (%2$s)" "يتبقى %1$s" - - - - - - - - + "من المفترض أن يستمر شحن البطارية حوالي %1$s حسب استخدامك (%2$s)." + "من المفترض أن يستمر شحن البطارية حوالي %1$s حسب استخدامك." + "من المفترض أن يستمر شحن البطارية حوالي %1$s (%2$s)." + "من المفترض أن يستمر شحن البطارية حوالي %1$s." "يتبقى أقل من %1$s." "يتبقى أقل من %1$s (%2$s)." "يتبقى أكثر من %1$s (%2$s)." @@ -422,8 +435,7 @@ "مُسجَّل" "غير مُسجَّل" "غير متاح" - - + "‏يتم اختيار عنوان MAC بشكل انتقائي." ‏عدد الأجهزة المتصلة ‎%1$d ‏عدد الأجهزة المتصلة ‎%1$d @@ -447,6 +459,5 @@ "يوم %1$s" "المدة" "الطلب في كل مرة" - - + "للتو" diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml index d44ce400cddcd2dc1f2903faec2b1555d86c5920..763a0eb3fbb788e41e01d10c9fc4345ab18a5fbd 100644 --- a/packages/SettingsLib/res/values-as/strings.xml +++ b/packages/SettingsLib/res/values-as/strings.xml @@ -40,6 +40,10 @@ "%1$s-ৰ মাধ্যমেদি সংযোগ কৰা হৈছে" "%1$sৰ মাধ্যমেৰে উপলব্ধ" "সংযোজিত, ইণ্টাৰনেট নাই" + + + + "একচেছ পইণ্ট কিছু সময়ৰ বাবে পূৰ্ণ হৈ আছে" "%1$sৰ যোগেৰে সংযোজিত" "%1$sৰ মাধ্যমেৰে উপলব্ধ" @@ -53,24 +57,21 @@ "সংযোগ বিচ্ছিন্ন কৰা হ’ল" "সংযোগ বিচ্ছিন্ন কৰি থকা হৈছে…" "সংযোগ কৰি থকা হৈছে…" - - + "%1$s সংযোগ কৰা হ\'ল" "যোৰা লগোৱা হৈছে…" - - - - - - - - - - - + "সংযোগ কৰা হ\'ল (ফ\'ন নাই)%1$s" + "সংযোগ কৰা হ\'ল (মিডিয়া নাই)%1$s" + "সংযোগ কৰা হ\'ল (বাৰ্তাত প্ৰৱেশাধিকাৰ নাই)%1$s" + "সংযোগ কৰা হ\'ল (কোনো ফ\'ন বা মিডিয়া নাই)%1$s" + "সংযোগ কৰা হ\'ল, বেটাৰিৰ স্তৰ %1$s%2$s" + "সংযোগ কৰা হ\'ল (ফ\'ন নাই), বেটাৰিৰ স্তৰ %1$s%2$s" + "সংযোগ কৰা হ\'ল (মিডিয়া নাই), বেটাৰিৰ স্তৰ %1$s%2$s" + "সংযোগ কৰা হ\'ল (কোনো ফ\'ন বা মিডিয়া নাই), বেটাৰিৰ স্তৰ %1$s%2$s" + - + - + "মিডিয়াৰ অডিঅ’" "ফ\'ন কলসমূহ" @@ -84,10 +85,8 @@ "ছিম প্ৰৱেশ" "এইচ্ছডি অডি\'অ: %1$s" "এইচ্ছডি অডিঅ’" - - - - + "শ্ৰৱণ যন্ত্ৰ" + "শ্ৰৱণ যন্ত্ৰৰ লগত সংযোগ কৰা হ\'ল" "মিডিয়া অডিঅ’লৈ সংযোগ হৈছে" "ফোন অডিঅ\'ৰ লগত সংযোগ কৰা হ\'ল" "ফাইল ট্ৰান্সফাৰ ছাৰ্ভাৰৰ সৈতে সংযোজিত হৈ আছে" @@ -104,8 +103,7 @@ "ফ\'ন অডিঅ\'ৰ বাবে ব্যৱহাৰ কৰক" "ফাইল স্থানান্তৰ কৰিবলৈ ব্যৱহাৰ কৰক" "ইনপুটৰ বাবে ব্যৱহাৰ কৰক" - - + "শ্ৰৱণ যন্ত্ৰৰ বাবে ব্যৱহাৰ কৰক" "যোৰা লগাওক" "যোৰা লগাওক" "বাতিল কৰক" @@ -121,6 +119,14 @@ "হেডফ\'ন" "ইনপুট সম্পৰ্কীয় বাহ্য় ডিভাইচ" "ব্লুটুথ" + + + + + + + + "ৱাই-ফাই অফহৈ আছে।" "ৱাইফাই সংযোগ বিচ্ছিন্ন হৈ আছে।" "ৱাই-ফাই এদাল দণ্ড।" @@ -200,7 +206,8 @@ "জাগ্ৰত কৰি ৰাখক" "চ্চাৰ্জ হৈ থকাৰ সময়ত স্ক্ৰীণ কেতিয়াও সুপ্ত অৱস্থালৈ নাযায়" "ব্লুটুথ HCI স্নুপ ল’গ সক্ষম কৰক" - "ব্লুটুথ HCI পেকেটসমূহ এটা ফাইলত ৰাখক" + + "ঔইএম আনলক" "বুটল\'ডাৰটো আনলক কৰিবলৈ অনুমতি দিয়ক" "ঔইএম আনলক কৰাৰ অনুমতি দিবনে?" @@ -211,8 +218,7 @@ "নেটৱৰ্কিং" "বেতাঁৰ ডিছপ্লে প্ৰমাণীকৰণ" "ৱাই-ফাই ভাৰ্ব\'ছ লগিং সক্ষম কৰক" - - + "সংযুক্ত MAC যাদৃচ্ছিকৰণ" "ম\'বাইল ডেটা সদা-সক্ৰিয়" "টেডাৰিং হাৰ্ডৱেৰ ত্বৰণ" "নামবিহীন ব্লুটুথ ডিভাইচসমূহ দেখুৱাওক" @@ -220,26 +226,35 @@ "ব্লুটুথ AVRCP সংস্কৰণ" "ব্লুটুথ AVRCP সংস্কৰণ বাছনি কৰক" "ব্লুটুথ অডিঅ’ ক’ডেক" - "ব্লুটুথ অডিঅ’ ক’ডেক বাছনি কৰক" + + "ব্লুটুথ অডিঅ\' ছেম্পল ৰেইট" - "ব্লুটুথ অডিঅ\' ক\'ডেক বাছনি কৰক:\nনমুনাৰ হাৰ" + + "প্ৰতি ছেম্পলত ব্লুটুথ অডিঅ\' বিটসমূহ" - "ব্লুটুথ অডিঅ\' ক\'ডেক বাছনি কৰক:\nবিট প্ৰতি নমুনা" + + "ব্লুটুথ অডিঅ\' চেনেল ম\'ড" - "ব্লুটুথ অডিঅ\' ক\'ডেক বাছনি কৰক:\nচ্চেনেল ম\'ড" + + "ব্লুটুথ অডিঅ’ LDAC ক’ডেক: পৰিৱেশনৰ মান" - "ব্লুটুথ LDAC ক\'ডেক বাছনি কৰক:\nপৰিৱেশনৰ মান" + + "ষ্ট্ৰীম কৰি থকা হৈছে: %1$s" "ব্যক্তিগত DNS" "ব্যক্তিগত DNS ম\'ড বাছনি কৰক" "অফ" - - + "স্বয়ংক্ৰিয়" "ব্যক্তিগত ডিএনএছ প্ৰদানকাৰীৰ হোষ্টনাম" "ডিএনএছ সেৱা যোগানকাৰীৰ হ\'ষ্টনাম দিয়ক" + + "বেতাঁৰ ডিছপ্লে প্ৰমাণপত্ৰৰ বাবে বিকল্পসমূহ দেখুৱাওক" "ৱাই-ফাই লগিঙৰ মাত্ৰা বঢ়াওক, Wi‑Fi পিকাৰত প্ৰতি SSID RSSI দেখুৱাওক" - + "ৱাই-ফাই নেটৱৰ্কৰ লগত সংযোগ কৰি থকাৰ সময়ত MAC ঠিকনা যাদৃচ্ছিক কৰক" + + + "লগাৰৰ বাফাৰৰ আকাৰ" "প্ৰতিটো লগ বাফাৰত ল\'গাৰৰ আকাৰ বাছনি কৰক" @@ -319,10 +334,8 @@ "কাৰ্যকলাপসমূহ নাৰাখিব" "ব্যৱহাৰকাৰী ওলোৱাৰ লগে লগে সকলো কাৰ্যকলাপ মচক" "নেপথ্যত চলা প্ৰক্ৰিয়াৰ সীমা" - - - - + "নেপথ্য এএনআৰবোৰ দেখুৱাওক" + "নেপথ্য এপসমূহৰ বাবে এপে সঁহাৰি দিয়া নাই ডায়ল\'গ প্ৰদৰ্শন কৰক" "জাননী চ্চেনেলৰ সকীয়নিসমূহ দেখুৱাওক" "কোনো এপে বৈধ চ্চেনেল নোহোৱাকৈ কোনো জাননী প\'ষ্ট কৰিলে স্ক্ৰীণত সকীয়নি প্ৰদৰ্শন হয়" "বাহ্যিক সঞ্চয়াগাৰত এপক বলেৰে অনুমতি দিয়ক" @@ -347,12 +360,10 @@ "চকুৱে দেখা পোৱা ধৰণৰ প্ৰাকৃতিক ৰং" "ডিজিটেল সমলৰ বাবে ৰং অপ্টিমাইজ কৰা হৈছে" - - + "ষ্টেণ্ডবাইত থকা এপসমূহ" "নিষ্ক্ৰিয়। ট\'গল কৰিবলৈ টিপক।" "সক্ৰিয়। ট\'গল কৰিবলৈ টিপক।" - - + "এপ্ ষ্টেণ্ডবাই অৱস্থাত আছে: %s" "চলিত সেৱা" "বৰ্তমান চলি থকা সেৱাসমূহ চাওক আৰু নিয়ন্ত্ৰণ কৰক" "ৱেবভিউ প্ৰয়োগ" @@ -375,40 +386,24 @@ "এই সুবিধাটো পৰীক্ষামূলক, সেয়ে ই কাৰ্যক্ষমতাৰ ওপৰত প্ৰভাৱ পেলাব পাৰে।" "%1$sৰ দ্বাৰা অগ্ৰাহ্য কৰা হৈছে" "প্ৰায় %1$s বাকী আছে" - - + "প্ৰায় %1$s সময় বাকী আছে (%2$s)" "আপোনাৰ ব্যৱহাৰৰ ওপৰত ভিত্তি কৰি প্ৰায় %1$s বাকী আছে" - - + "আপোনাৰ ব্যৱহাৰ (%2$s)ক ভিত্তি কৰি প্ৰায় %1$s সময় বাকী আছে" "%1$s বাকী" - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "আপোনাৰ ব্যৱহাৰৰ ওপৰত ভিত্তি কৰি বেটাৰি আনুমানিকভাৱে %1$s লৈকে চলিব (%2$s)" + "আপোনাৰ ব্যৱহাৰৰ ওপৰত ভিত্তি কৰি বেটাৰি আনুমানিকভাৱে %1$s লৈকে চলিব" + "বেটাৰি আনুমানিকভাৱে %1$s লৈকে চলিব (%2$s)" + "বেটাৰি আনুমানিকভাৱে %1$s লৈকে চলিব" + "%1$sতকৈও কম সময় বাকী আছে" + "%1$sতকৈও কম সময় বাকী আছে (%2$s)" + "%1$sতকৈও বেছি সময় বাকী আছে (%2$s)" + "%1$sতকৈও বেছি সময় বাকী আছে" + "ফ\'নটো সোনকালেই বন্ধ হ\'ব পাৰে" + "টেবলেটটো সোনকালেই বন্ধ হ\'ব পাৰে" + "ডিভাইচটো সোনকালেই বন্ধ হ\'ব পাৰে" + "ফ\'নটো সোনকালেই বন্ধ হ\'ব পাৰে (%1$s)" + "টেবলেটটো সোনকালেই বন্ধ হ\'ব পাৰে (%1$s)" + "ডিভাইচটো সোনকালেই বন্ধ হ\'ব পাৰে (%1$s)" "%1$s - %2$s" "সম্পূৰ্ণকৈ চ্চাৰ্জ হ\'বলৈ %1$s বাকী" "%1$s - %2$s সম্পূৰ্ণৰূপে চ্চাৰ্জ হোৱা পৰ্যন্ত" @@ -453,36 +448,25 @@ "পঞ্জীকৃত" "পঞ্জীকৃত নহয়" "উপলব্ধ নহয়" - - - - - - - + "MAC ক্ৰমানুসৰি ছেট কৰা হোৱা নাই" + + %1$dটা ডিভাইচ সংযোগ হ\'ল + %1$dটা ডিভাইচ সংযোগ হ\'ল + + "অধিক সময়।" + "কম সময়।" "বাতিল কৰক" "ঠিক" - - - - + "অন কৰক" + "অসুবিধা নিদিব অন কৰক" "কেতিয়াও নহয়" - - - - - - - - - - - - - - - - - - + "কেৱল গুৰুত্বপূৰ্ণ" + "%1$s. %2$s" + "আপুনি আপোনাৰ পিছৰটো এলাৰ্ম %1$s বজাত শুনা নাপাব যদিহে তাৰ আগতে আপুনি এইটো অফ নকৰে" + "আপুনি আপোনাৰ পিছৰটো এলাৰ্ম %1$s বজাত শুনা নাপাব" + "%1$s বজাত" + "%1$s বজাত" + "সময়ৰ পৰিসৰ" + "প্ৰতিবাৰতে সোধক" + "এই মাত্ৰ" diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml index ce362ce562554834f0dc92a245fbfe2b2ec3e7e5..6ebb959a7441ac6045b6bbf9a0996b4f4c4befbe 100644 --- a/packages/SettingsLib/res/values-az/strings.xml +++ b/packages/SettingsLib/res/values-az/strings.xml @@ -40,6 +40,8 @@ "%1$s vasitəsilə qoşuludur" "%1$s vasitəsilə əlçatandır" "Qoşuludur, internet yoxdur" + "İnternet yoxdur" + "Giriş tələb olunur" "Giriş nöqtəsi müvəqqəti olaraq doludur" "%1$s ilə qoşuludur" "%1$s vasitəsilə əlçatandır" @@ -63,6 +65,9 @@ "Qoşuludur (telefon yoxdur), batareya %1$s%2$s" "Qoşuludur (media yoxdur), batareya %1$s%2$s" "Qoşuludur (telefon və ya media yoxdur), batareya %1$s%2$s" + "Aktiv, %1$s batareya" + "%1$s batareya" + "Aktiv" "Media audio" "Telefon zəngləri" "Fayl transferi" @@ -109,6 +114,10 @@ "Qulaqlıq" "Daxiletmə periferiki" "Bluetooth" + "Sol qulaqlıq birləşdirilir…" + "Sağ qulaqlıq birləşdirilir…" + "Sol - %1$s batareya" + "Sağ - %1$s batareya" "Wifi sönülüdür." "Wifi bağlantı kəsildi." "Wifi bir xətdir." @@ -188,7 +197,7 @@ "Oyaq qal" "Enereji doldurularkən ekran heç vaxt yuxu rejimində olmur" "Bluetooth HCI izləmə jurnalını aktivləşdir" - "Bütün bluetooth HCI paketlərini fayla atın" + "Bütün Bluetooth HCI paketlərini faylda saxlayın (Bu ayarı dəyişdikdən sonra Bluetooth\'a keçin)" "OEM kilidinin açılması" "Əməliyyat sistemi yükləyicisinin kilidinin açılmasına icazə ver" "OEM kilidinin açılmasına icazə verilsin?" @@ -207,15 +216,20 @@ "Bluetooth AVRCP Versiya" "Bluetooth AVRCP Versiyasını seçin" "Bluetooth Audio Kodek" - "Bluetooth Audio Kodeki Seçin" + + "Bluetooth Audio Nümunə Göstəricisi" - "Bluetooth Audio Kodekini Seçin:\nNümunə Dərəcəsi" + + "Hər Nümunə Üçün Bluetooth Audio Bit" - "Bluetooth Audio Kodekini Seçin:\nHər Nümunə üçün Bit" + + "Bluetooth Audio Kanal Rejimi" - "Bluetooth Audio Kodekini Seçin:\nKanal Rejimi" + + "Bluetooth Audio LDAC Kodeki:Oxutma Keyfiyyəti" - "Bluetooth Audio LDAC Kodek:\nOxutma Keyfiyyəti Seçin" + + "Canlı yayım: %1$s" "Şəxsi DNS" "Şəxsi DNS Rejimini Seçin" @@ -223,9 +237,12 @@ "Avtomatik" "Şəxsi DNS provayderinin host adı" "DNS provayderinin host adını daxil edin" + "Qoşulmaq mümkün olmadı" "Simsiz displey sertifikatlaşması üçün seçimləri göstərir" "Wi‑Fi giriş səviyyəsini qaldırın, Wi‑Fi seçəndə hər SSID RSSI üzrə göstərin" "Wi‑Fi şəbkələrinə qoşulan zaman ixtiyari MAC ünvanı seçin" + "Ödənişli" + "Limitsiz" "Logger bufer ölçüləri" "Hər jurnal buferinı Logger ölçüsü seçin" "Loqqerin davamlı yaddaşı silinsin?" @@ -360,14 +377,10 @@ "İstifadəyə əsasən təxminən %1$s qalıb" "İstifadənizə %2$s əsasən təxminən %1$s qalıb" "%1$s qalıb" - - - - - - - - + "İstifadəyə (%2$s) əsasən təxminən %1$s olana qədər davam edəcək" + "İstifadəyə əsasən təxminən %1$s olana qədər davam edəcək" + "Təxminən %1$s olana qədər davam edəcək (%2$s)" + "Təxminən %1$s olana qədər davam edəcək" "Qalan vaxt %1$s və daha azdır" "Qalan vaxt %1$s və daha azdır (%2$s)" "Qalan vaxt %1$s və daha çoxdur (%2$s)" @@ -422,8 +435,7 @@ "Qeydiyyatlı" "Qeydiyyatsız" "Əlçatmazdır" - - + "MAC ixtiyari olaraq seçildi" %1$d cihaz qoşuludur %1$d cihaz qoşuludur @@ -443,6 +455,5 @@ "%1$s olduqda" "Müddət" "Hər dəfə soruşun" - - + "İndicə" diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml index 7dbf7b3914a649eb650a250c3f7256d0066f2705..7631498d6a3f6db0ffb2aee4c269397ff2f47fc6 100644 --- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml @@ -40,6 +40,8 @@ "Veza je uspostavljena preko pristupne tačke %1$s" "Dostupna je preko pristupne tačke %1$s" "Veza je uspostavljena, nema interneta" + "Nema interneta" + "Treba da se prijavite" "Pristupna tačka je privremeno zauzeta" "Povezano preko %1$s" "Dostupno preko %1$s" @@ -63,6 +65,9 @@ "Povezano (bez telefona), nivo baterije je %1$s%2$s" "Povezano (bez medija), nivo baterije je %1$s%2$s" "Povezano (bez telefona ili medija), nivo baterije je %1$s%2$s" + "Aktivan, nivo baterije je %1$s" + "Nivo baterije je %1$s" + "Aktivan" "Zvuk medija" "Telefonski pozivi" "Prenos datoteke" @@ -109,6 +114,10 @@ "Slušalice" "Periferni uređaj za unos" "Bluetooth" + "Uparivanje levog slušnog aparata…" + "Uparivanje desnog slušnog aparata…" + "Levi – nivo baterije je %1$s" + "Desni – nivo baterije je %1$s" "Wi-Fi je isključen." "Wi-Fi veza je prekinuta." "Wi-Fi signal ima jednu crtu." @@ -188,7 +197,7 @@ "Ne zaključavaj" "Ekran neće biti u režimu spavanja tokom punjenja" "Omogući snoop evidenciju za Bluetooth HCI" - "Snimi sve Bluetooth HCI pakete u datoteci" + "Snimi sve Bluetooth HCI pakete u datoteci (Uključite/isključite Bluetooth kada promenite ovo podešavanje)" "Otključavanje OEM-a" "Dozvoli otključavanje funkcije za pokretanje" "Želite li da dozvolite otključavanje proizvođača originalne opreme (OEM)?" @@ -207,15 +216,20 @@ "Verzija Bluetooth AVRCP-a" "Izaberite verziju Bluetooth AVRCP-a" "Bluetooth audio kodek" - "Izaberite Bluetooth audio kodek" + + "Brzina uzorkovanja za Bluetooth audio" - "Izaberite Bluetooth audio kodek:\nbrzina uzorkovanja" + + "Bitova po uzorku za Bluetooth audio" - "Izaberite Bluetooth audio kodek:\nbitova po uzorku" + + "Režim kanala za Bluetooth audio" - "Izaberite Bluetooth audio kodek:\nrežim kanala" + + "Bluetooth audio kodek LDAC: kvalitet reprodukcije" - "Izaberite Bluetooth audio kodek LDAC:\nkvalitet reprodukcije" + + "Strimovanje: %1$s" "Privatni DNS" "Izaberite režim privatnog DNS-a" @@ -223,9 +237,12 @@ "Automatski" "Ime hosta dobavljača usluge privatnog DNS-a" "Unesite ime hosta dobavljača usluge DNS-a" + "Povezivanje nije uspelo" "Prikaz opcija za sertifikaciju bežičnog ekrana" "Povećava nivo evidentiranja za Wi‑Fi. Prikaz po SSID RSSI-u u biraču Wi‑Fi mreže" "Izaberi nasumičnu MAC adresu tokom povezivanja na Wi‑Fi mreže" + "Sa ograničenjem" + "Bez ograničenja" "Veličine bafera podataka u programu za evidentiranje" "Izaberite veličine po baferu evidencije" "Želite li da obrišete stalni memorijski prostor programa za evidentiranje?" @@ -360,14 +377,10 @@ "Na osnovu potrošnje imate još otprilike %1$s" "Na osnovu korišćenja imate još približno %1$s (%2$s)" "Preostalo vreme: %1$s" - - - - - - - - + "Trajaće približno do %1$s na osnovu korišćenja (%2$s)" + "Trajaće približno do %1$s na osnovu korišćenja" + "Trajaće približno do %1$s (%2$s)" + "Trajaće približno do %1$s" "Preostalo je manje od %1$s" "Preostalo je manje od %1$s (%2$s)" "Preostalo je više od %1$s (%2$s)" @@ -422,8 +435,7 @@ "Registrovan je" "Nije registrovan" "Nedostupno" - - + "MAC adresa je nasumično izabrana" Povezan je %1$d uređaj Povezana su %1$d uređaja @@ -444,6 +456,5 @@ "%1$s" "Trajanje" "Uvek pitaj" - - + "Upravo sada" diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml index f2efd7e26d537e6e53cde92b22a341956b038434..ee54231d8d6daf4808f9deb1ccbd535de095308d 100644 --- a/packages/SettingsLib/res/values-be/strings.xml +++ b/packages/SettingsLib/res/values-be/strings.xml @@ -40,6 +40,10 @@ "Падлучана праз %1$s" "Даступна праз %1$s" "Падключана, без доступу да інтэрнэту" + + + + "Пункт доступу часова заняты" "Падлучана праз %1$s" "Даступна праз %1$s" @@ -63,6 +67,12 @@ "Падключана прылада %2$s (без званкоў). Узровень зараду яе акумулятара: %1$s" "Падключана прылада %2$s (без аўдыя). Узровень зараду яе акумулятара: %1$s" "Падключана прылада %2$s (без званкоў і аўдыя). Узровень зараду яе акумулятара: %1$s" + + + + + + "Аўдыё медыяпрылады" "Тэлефонныя выклікі" "Перадача файлаў" @@ -109,6 +119,14 @@ "Навушнікі" "Перыферыйная прылада ўводу" "Bluetooth" + + + + + + + + "Wi-Fi выключаны." "Wi-Fi адлучаны." "Адзiн слупок Wi-Fi." @@ -188,7 +206,7 @@ "Прадухіляць ад пераходу ў рэжым сну" "Экран ніколі не ўвайдзе ў рэжым сну падчас зарадкі" "Уключыць журнал адсочвання Bluetooth HCI" - "Захаваць усе пакеты bluetooth HCI у адным файле" + "Захоўваць усе пакеты Bluetooth HCI у файле (пераключыце Bluetooth пасля змены гэтай налады)" "Разблакіроўка OEM" "Дазволіць разблакіроўку загрузчыка" "Дазволіць разблакіроўку OEM?" @@ -207,15 +225,20 @@ "Версія Bluetooth AVRCP" "Выбраць версію Bluetooth AVRCP" "Кодэк Bluetooth Audio" - "Выбраць аўдыякодэк Bluetooth" + + "Частата дыскрэтызацыі Bluetooth Audio" - "Выбраць аўдыякодэк Bluetooth:\nчастата дыскрэтызацыі" + + "Біты на сэмпл для Bluetooth Audio" - "Выбраць аўдыякодэк Bluetooth:\nбіты на сэмпл" + + "Канальны рэжым Bluetooth Audio" - "Выбраць аўдыякодэк Bluetooth:\nканальны рэжым" + + "Аўдыякодэк Bluetooth LDAC: якасць прайгравання" - "Выбраць аўдыякодэк Bluetooth LDAC:\nякасць прайгравання" + + "Перадача плынню: %1$s" "Прыватная DNS" "Выберыце рэжым прыватнай DNS" @@ -223,9 +246,15 @@ "Аўтаматычна" "Імя вузла аператара прыватнай DNS" "Увядзіце імя вузла аператара DNS" + + "Паказаць опцыі сертыфікацыі бесправаднога дысплея" "Падвыс. узровень дэтал-цыі журнала Wi‑Fi у залежн. ад SSID RSSI у Wi‑Fi Picker" "Генерыраваць выпадковы MAC-адрас пры падключэнні да сетак Wi‑Fi" + + + + "Памеры буфера для сродку вядзення журнала" "Выберыце памеры сродку вядзення журнала для буфераў журнала" "Ачысціць пастаяннае сховішча журнала?" @@ -360,14 +389,10 @@ "Засталося каля %1$s на аснове вашага выкарыстання" "Зараду (%2$s) хопіць на %1$s пры цяперашнім узроўні выкарыстання" "Засталося %1$s" - - - - - - - - + "Зараду (%2$s) хопіць прыблізна да %1$s пры цяперашнім узроўні выкарыстання" + "Зараду хопіць прыблізна да %1$s пры цяперашнім узроўні выкарыстання" + "Зараду (%2$s) хопіць прыблізна да %1$s" + "Зараду хопіць прыблізна да %1$s" "Засталося менш за %1$s" "Узровень зараду батарэі: %2$s (хопіць менш чым на %1$s)" "Узровень зараду батарэі: %2$s (хопіць больш чым на %1$s)" @@ -422,8 +447,7 @@ "Зарэгістраваны" "Не зарэгістраваны" "Адсутнічае" - - + "Выпадковы MAC-адрас" %1$d прылада падключана %1$d прылады падключаны @@ -445,6 +469,5 @@ %1$s" "Працягласць" "Заўсёды пытацца" - - + "Зараз" diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml index 4b765d0802c304d20954855912c3edecd547f800..817a78326065b22f5954841787b626f938d5d0a2 100644 --- a/packages/SettingsLib/res/values-bg/strings.xml +++ b/packages/SettingsLib/res/values-bg/strings.xml @@ -40,6 +40,8 @@ "Установена е връзка през „%1$s“" "Мрежата е достъпна през „%1$s“" "Установена е връзка – няма достъп до интернет" + "Няма връзка с интернет" + "Изисква се вход в профила" "Точката за достъп временно е пълна" "Установена е връзка през %1$s" "Мрежата е достъпна през %1$s" @@ -63,6 +65,9 @@ "Свързано (без телефон), батерия: %1$s%2$s" "Свързано (без мултимедия), батерия: %1$s%2$s" "Свързано (без телефон или мултимедия), батерия: %1$s%2$s" + "Активно. Батерия: %1$s" + "Батерия: %1$s" + "Активно" "Мултимедийно аудио" "Телефонни обаждания" "Прехвърляне на файл" @@ -109,6 +114,10 @@ "Слушалки" "Периферен вход" "Bluetooth" + "Слуховият апарат за ляво ухо се сдвоява…" + "Слуховият апарат за дясно ухо се сдвоява…" + "За ляво ухо. Батерия: %1$s" + "За дясно ухо. Батерия: %1$s" "Wi-Fi е изключен." "Няма връзка с Wi-Fi." "Wi-Fi е с една чертичка." @@ -188,7 +197,7 @@ "Да остане активен" "Екранът никога няма да е в спящ режим при зареждане" "Активиране на рег. файл за анализ за Bluetooth с протокола HCI" - "Заснемане на всички пакети за Bluetooth с протокола HCI във файла" + "Всички пакети за комуникация през Bluetooth чрез HCI да се записват във файл (превключване на Bluetooth след промяна на тази настройка)" "Отключване от OEM" "Разрешаване на първонач. зареждащата прогр. да се откл." "Да се разреши ли отключване от OEM?" @@ -207,15 +216,20 @@ "Версия на AVRCP за Bluetooth" "Избиране на версия на AVRCP за Bluetooth" "Аудиокодек за Bluetooth" - "Изберете аудиокодек за Bluetooth" + + "Честота на дискретизация за звука през Bluetooth" - "Изберете аудиокодек за Bluetooth:\nЧестота на дискретизация" + + "Битове на дискрет за звука през Bluetooth" - "Изберете аудиокодек за Bluetooth:\nБитове на дискрет" + + "Режим на канала на звука през Bluetooth" - "Изберете аудиокодек за Bluetooth:\nРежим на канала" + + "Кодек за звука през Bluetooth с технологията LDAC: Качество на възпроизвеждане" - "Изберете кодек за звука през Bluetooth с технологията LDAC:\nКачество на възпроизвеждане" + + "Поточно предаване: %1$s" "Частен DNS" "Изберете режим на частния DNS" @@ -223,9 +237,12 @@ "Автоматично" "Име на хоста на доставчика на частния DNS" "Въведете името на хоста на DNS доставчика" + "Не можа да се установи връзка" "Показване на опциите за сертифициране на безжичния дисплей" "По-подробно регистр. на Wi‑Fi – данни за RSSI на SSID в инстр. за избор на Wi‑Fi" "Рандомизиране на MAC адреса при свързване с Wi-Fi мрежи" + "С отчитане" + "Без отчитане" "Размери на регистрац. буфери" "Размер на един рег. буфер: Избор" "Да се изчистят ли трайно съхраняваните регистрационни данни?" @@ -360,14 +377,10 @@ "Още около %1$s въз основа на използването" "Още около %1$s въз основа на използването (%2$s)" "Оставащо време: %1$s" - - - - - - - - + "Следва да издържи приблизително до %1$s въз основа на използването (%2$s)" + "Следва да издържи приблизително до %1$s въз основа на използването" + "Следва да издържи приблизително до %1$s (%2$s)" + "Следва да издържи приблизително до %1$s" "Остава/т по-малко от %1$s" "Остава/т по-малко от %1$s (%2$s)" "Остава/т повече от %1$s (%2$s)" @@ -422,8 +435,7 @@ "Регистрирано" "Не е регистрирано" "Няма данни" - - + "MAC адресът е рандомизиран" %1$d устройства са свързани %1$d устройство е свързано @@ -443,6 +455,5 @@ "в/ъв %1$s" "Времетраене" "Да се пита винаги" - - + "Току-що" diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml index f6e22b40105f2c59adad66914569063dbd764f26..35f82e55f955ca248ec261fbcc1453fd3d83c8b2 100644 --- a/packages/SettingsLib/res/values-bn/strings.xml +++ b/packages/SettingsLib/res/values-bn/strings.xml @@ -40,6 +40,10 @@ "%1$s মাধ্যমে সংযুক্ত হয়েছে" "%1$s এর মাধ্যমে উপলব্ধ" "সংযুক্ত, ইন্টারনেট নেই" + + + + "এই মুহূর্তে অ্যাক্সেস পয়েন্টের কোনও কানেকশন ফাঁকা নেই" "%1$s এর মাধ্যমে সংযুক্ত হয়েছে" "%1$s এর মাধ্যমে পাওয়া যাচ্ছে" @@ -63,6 +67,12 @@ "কানেক্ট করা আছে (ফোনের অডিও ছাড়া), ব্যাটারি %1$s%2$s" "কানেক্ট করা আছে (মিডিয়ার অডিও ছাড়া), ব্যাটারি %1$s%2$s" "কানেক্ট করা আছে (ফোনের বা মিডিয়ার অডিও ছাড়া), ব্যাটারি %1$s%2$s" + + + + + + "মিডিয়া অডিও" "ফোন কল" "ফাইল স্থানান্তর" @@ -109,6 +119,14 @@ "হেডফোন" "পেরিফেরাল ইনপুট" "ব্লুটুথ" + + + + + + + + "ওয়াই ফাই বন্ধ৷" "ওয়াই ফাই এর সংযোগ বিচ্ছিন্ন হয়েছে৷" "ওয়াই ফাই এ একটি দণ্ড৷" @@ -188,7 +206,8 @@ "জাগিয়ে রাখুন" "চার্জ হওয়ার স্ক্রীন কখনই নিদ্রা মোডে যাবে না" "ব্লুটুথ HCI স্নুপ লগ সক্ষম করুন" - "একটি ফাইলে সব bluetooth HCI প্যাকেট ক্যাপচার করুন" + + "OEM আনলক করা হচ্ছে" "বুট-লোডার আনলক করার অনুমতি দিন" "OEM আনলক করার অনুমতি দিতে চান?" @@ -207,15 +226,20 @@ "ব্লুটুথ AVRCP ভার্সন" "ব্লুটুথ AVRCP ভার্সন বেছে নিন" "ব্লুটুথ অডিও কোডেক" - "ব্লুটুথ অডিও কোডেক বেছে নিন" + + "ব্লুটুথ অডিওর নমুনা হার" - "ব্লুটুথ অডিও কোডেক বেছে নিন:\nস্যাম্পল রেট" + + "নমুনা প্রতি ব্লুটুথ অডিও বিট" - "ব্লুটুথ অডিও কোডেক বেছে নিন:\nবিটস পার স্যাম্পল" + + "ব্লুটুথ অডিও চ্যানেল মোড" - "ব্লুটুথ অডিও কোডেক বেছে নিন:\nচ্যানেল মোড" + + "ব্লুটুথ অডিও LDAC কোডেক: প্লেব্যাক গুণমান" - "ব্লুটুথ অডিও LDAC কোডেক বেছে নিন:\nপ্লেব্যাক গুণমান" + + "স্ট্রিমিং: %1$s" "ব্যক্তিগত ডিএনএস" "ব্যক্তিগত ডিএনএস মোড বেছে নিন" @@ -223,9 +247,15 @@ "অটোমেটিক" "ব্যক্তিগত ডিএনএস প্রদানকারীর হোস্টনেম" "ডিএনএস প্রদানকারীর হোস্টনেম লিখুন" + + "ওয়্যারলেস প্রদর্শন সার্টিফিকেশন জন্য বিকল্পগুলি দেখান" "ওয়াই-ফাই লগিং স্তর বাড়ান, ওয়াই-ফাই চয়নকারীতে SSID RSSI অনুযায়ী দেখান" "ওয়াই-ফাই নেটওয়ার্কে সংযুক্ত করার সময় MAC অ্যাড্রেস র‍্যান্ডমাইজ করুন" + + + + "লগার বাফারের আকারগুলি" "লগ বাফার প্রতি অপেক্ষাকৃত বড় আকারগুলির বেছে নিন" "লগারের স্টোরেজ সাফ করবেন?" @@ -360,14 +390,10 @@ "বর্তমান ব্যাটারি ব্যবহার অনুযায়ী আর %1$s বাকি" "বর্তমান ব্যবহার অনুযায়ী আর আনুমানিক %1$s চলবে (%2$s)" "%1$s বাকী আছে" - - - - - - - - + "বর্তমান ব্যবহার অনুযায়ী আনুমানিক %1$s পর্যন্ত চলবে (%2$s)" + "বর্তমান ব্যবহার অনুযায়ী আনুমানিক %1$s পর্যন্ত চলবে" + "আনুমানিক %1$s পর্যন্ত চলবে (%2$s)" + "আনুমানিক %1$s পর্যন্ত চলবে" "%1$s এর থেকেও কম বাকি আছে" "আর %1$s-এর কম চার্জ বাকি আছে (%2$s)" "আরও %1$s-এর বেশি চলবে (%2$s)" @@ -422,8 +448,7 @@ "রেজিস্টার করা" "রেজিস্টার করা নয়" "অনুপলব্ধ" - - + "MAC র‍্যান্ডমাইজ করা হয়েছে" %1$dটি ডিভাইস সংযুক্ত %1$dটি ডিভাইস সংযুক্ত @@ -443,6 +468,5 @@ "তারিখ ও সময় %1$s" "সময়কাল" "প্রতিবার জিজ্ঞেস করা হবে" - - + "এখনই" diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml index 172fb3cadc2aca2617001c6ef155dca56b0941d1..3e51f16088385c7e01ce2cb3b5febce45416de50 100644 --- a/packages/SettingsLib/res/values-bs/strings.xml +++ b/packages/SettingsLib/res/values-bs/strings.xml @@ -40,6 +40,8 @@ "Povezani preko %1$s" "Dostupan preko %1$s" "Povezano, nema interneta" + "Nema internetske veze" + "Potrebna je prijava" "Pristupna tačka je privremeno puna" "Povezana koristeći %1$s" "Dostupna koristeći %1$s" @@ -63,6 +65,9 @@ "Povezano (bez telefona), baterija %1$s%2$s" "Povezano (bez medija), baterija %1$s%2$s" "Povezano (bez telefona ili medija), baterija %1$s%2$s" + "Aktivan, %1$s baterije" + "%1$s baterije" + "Aktivan" "Zvuk medija" "Telefonski pozivi" "Prenošenje fajla" @@ -109,6 +114,10 @@ "Slušalice" "Ulazni periferni uređaj" "Bluetooth" + "Uparivanje lijevog slušnog aparata…" + "Uparivanje desnog slušnog aparata…" + "Lijevi - %1$s baterije" + "Desni - %1$s baterije" "Wi-Fi isključen." "Wi-Fi nije povezan." "Wi-Fi jedna crtica." @@ -188,7 +197,7 @@ "Ostani aktivan" "Ekran neće prelaziti u stanje mirovanja tokom punjenja" "Omogući Bluetooth HCI snoop zapis" - "Smjesti sve Bluetooth HCI pakete u datoteku" + "Snimite sve Bluetooth HCI pakete u datoteku (uključite/isključite Bluetooth nakon promjene ove postavke)" "OEM otključavanje" "Dozvoli otključavanje bootloadera" "Želite li dozvoliti OEM otključavanje?" @@ -207,15 +216,20 @@ "Bluetooth AVRCP verzija" "Odaberite Bluetooth AVRCP verziju" "Bluetooth Audio kodek" - "Odaberite Bluetooth Audio kodek" + + "Brzina uzorkovanja za Bluetooth audio" - "Odaberite Bluetooth Audio kodek:\nBrzina uzorka" + + "Bluetooth audio bitovi po uzorku" - "Odaberite Bluetooth Audio kodek:\nBita po uzorku" + + "Način Bluetooth audio kanala" - "Odaberite Bluetooth Audio kodek:\nNačin rada kanala" + + "Bluetooth Audio LDAC kodek: Kvalitet reprodukcije" - "Odaberite Bluetooth Audio LDAC kodek:\nKvalitet reprodukcije" + + "Prijenos: %1$s" "Privatni DNS" "Odaberite način rada privatnog DNS-a" @@ -223,9 +237,12 @@ "Automatski" "Naziv host računara privatnog DNS-a" "Unesite naziv host računara pružaoca DNS-a" + "Povezivanje nije uspjelo" "Pokaži opcije za certifikaciju Bežičnog prikaza" "Povećajte nivo Wi-Fi zapisivanja, pokazati po SSID RSSI Wi-Fi Picker" "Nasumično odaberi MAC adresu prilikom povezivanja na Wi-Fi mreže" + "S naplatom" + "Mreža bez ograničenja" "Veličine bafera za zapisnik" "Odaberite veličine za Logger prema međumemoriji evidencije" "Želite li izbrisati trajnu pohranu zapisivača?" @@ -360,14 +377,10 @@ "Preostalo je još oko %1$s, na osnovu vašeg korištenja" "Preostalo je još oko %1$s na osnovu vaše upotrebe (%2$s)" "Imate još %1$s" - - - - - - - - + "Trebala bi trajati otprilike do %1$s na osnovu vaše upotrebe (%2$s)" + "Trebala bi trajati otprilike do %1$s na osnovu vaše upotrebe" + "Trebala bi trajati do otprilike %1$s (%2$s)" + "Trebala bi trajati otprilike do %1$s" "Preostalo je manje od %1$s" "Preostalo je manje od %1$s (%2$s)" "Preostalo je više od %1$s (%2$s)" @@ -422,8 +435,7 @@ "Registrirano" "Nije registrirano" "Nije dostupno" - - + "MAC adresa je nasumično odabrana" Povezan je %1$d uređaj Povezana su %1$duređaja @@ -444,6 +456,5 @@ "u %1$s" "Trajanje" "Pitaj svaki put" - - + "Upravo" diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml index 56acc36fec7d8528a56de4a7235f72bacade69c3..a5b92de8d1f78ccb0bf90f2079c0e0e1560b29b6 100644 --- a/packages/SettingsLib/res/values-ca/strings.xml +++ b/packages/SettingsLib/res/values-ca/strings.xml @@ -40,6 +40,10 @@ "Connectada mitjançant %1$s" "Disponible mitjançant %1$s" "Connectada, sense Internet" + + + + "El punt d\'accés està temporalment ple" "Connectat mitjançant %1$s" "Disponible mitjançant %1$s" @@ -63,6 +67,12 @@ "%2$s connectat (sense accés al telèfon), %1$s de bateria" "%2$s connectat (sense accés al contingut multimèdia), %1$s de bateria" "%2$s connectat (sense accés al telèfon ni al contingut multimèdia), %1$s de bateria" + + + + + + "Àudio multimèdia" "Trucades telefòniques" "Transferència del fitxer" @@ -109,6 +119,14 @@ "Auricular" "Perifèric d\'entrada" "Bluetooth" + + + + + + + + "Wi-Fi desactivada." "Wi-Fi desconnectada." "Senyal Wi-Fi: una barra." @@ -188,7 +206,7 @@ "Pantalla activa" "La pantalla no entra mai en mode de repòs si el dispositiu està carregant-se" "Activa registre cerca HCI Bluetooth" - "Captura tots els paquets HCI de Bluetooth en un fitxer" + "Captura tots els paquets HCI de Bluetooth en un fitxer (activa el Bluetooth un cop hagis canviat aquesta opció)" "Desbloqueig d\'OEM" "Permet desbloquejar el bootloader" "Permetre el desbloqueig d\'OEM?" @@ -207,15 +225,20 @@ "Versió AVRCP de Bluetooth" "Selecciona la versió AVRCP de Bluetooth" "Còdec d\'àudio per Bluetooth" - "Selecciona el còdec d\'àudio per Bluetooth" + + "Velocitat de mostra d’àudio per Bluetooth" - "Selecciona el còdec d\'àudio per Bluetooth:\nFreqüència de mostratge" + + "Bits per mostra de l\'àudio per Bluetooth" - "Selecciona el còdec d\'àudio per Bluetooth:\nBits per mostra" + + "Mode de canal de l\'àudio per Bluetooth" - "Selecciona el còdec d\'àudio per Bluetooth:\nMode de canal" + + "Còdec LDAC d\'àudio per Bluetooth: qualitat de reproducció" - "Selecciona el còdec LDAC d\'àudio per Bluetooth:\nQualitat de reproducció" + + "S\'està reproduint en temps real: %1$s" "DNS privat" "Selecciona el mode de DNS privat" @@ -223,17 +246,23 @@ "Automàtic" "Nom d\'amfitrió del proveïdor de DNS privat" "Introdueix el nom d\'amfitrió del proveïdor de DNS" + + "Mostra les opcions de certificació de pantalla sense fil" "Augmenta nivell de registre Wi‑Fi i mostra\'l per SSID RSSI al Selector de Wi‑Fi" "Aleatoritza l\'adreça MAC quan estiguis connectat a una xarxa Wi-Fi" + + + + "Mides memòria intermèdia Logger" "Mida Logger per memòria intermèdia" "Vols esborrar l\'emmagatzematge persistent del registrador?" "Quan deixem de supervisar amb el registrador persistent, hem d\'esborrar les dades del registrador que hi ha al teu dispositiu." "Emm. dades reg. persist. a disp." "Selecciona memòries interm. de registre per emmag. de manera persistent al disp." - "Selecciona configuració USB" - "Selecciona configuració USB" + "Selecciona configuració d\'USB" + "Selecciona configuració d\'USB" "Ubicacions simulades" "Permet les ubicacions simulades" "Inspecció d\'atributs de visualització" @@ -360,14 +389,10 @@ "Temps restant aproximat segons l\'ús que en fas: %1$s" "Temps restant aproximat segons l\'ús que en fas: %1$s (%2$s)" "Temps restant: %1$s" - - - - - - - - + "La bateria hauria de durar aproximadament fins a les %1$s segons l\'ús que en fas (%2$s)" + "La bateria hauria de durar aproximadament fins a les %1$s segons l\'ús que en fas" + "La bateria hauria de durar aproximadament fins a les %1$s (%2$s)" + "La bateria hauria de durar aproximadament fins a les %1$s" "Temps restant inferior a %1$s" "Temps restant inferior a %1$s (%2$s)" "Temps restant superior a %1$s (%2$s)" @@ -422,8 +447,7 @@ "Registrat" "Sense registrar" "No disponible" - - + "L\'adreça MAC és aleatòria" %1$d dispositius connectats %1$d dispositiu connectat @@ -443,6 +467,5 @@ "Data: %1$s" "Durada" "Pregunta sempre" - - + "Ara mateix" diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml index cbad3efa0516f80dd612767acc71ff1cc9f9753b..5c2037d2ea00177171b2519f4fbf8eec545e5edf 100644 --- a/packages/SettingsLib/res/values-cs/strings.xml +++ b/packages/SettingsLib/res/values-cs/strings.xml @@ -40,6 +40,8 @@ "Připojeno prostřednictvím %1$s" "Dostupné prostřednictvím %1$s" "Připojeno, není k dispozici internet" + "Nejste připojeni k internetu" + "Je vyžadováno přihlášení" "Přístupový bod je dočasně zaplněn" "Připojeno prostřednictvím %1$s" "Dostupné prostřednictvím %1$s" @@ -63,6 +65,9 @@ "Připojeno k zařízení %2$s (bez telefonu), úroveň baterie %1$s" "Připojeno k zařízení %2$s (bez médií), úroveň baterie %1$s" "Připojeno k zařízení %2$s (bez telefonu a médií), úroveň baterie %1$s" + "Aktivní, %1$s baterie" + "%1$s baterie" + "Aktivní" "Zvuk médií" "Telefonní hovory" "Přenos souborů" @@ -109,6 +114,10 @@ "Sluchátka" "Periferní vstupní zařízení" "Bluetooth" + "Párování levého naslouchátka…" + "Párování pravého naslouchátka…" + "Levá strana – %1$s baterie" + "Pravá strana – %1$s baterie" "Síť Wi-Fi je vypnuta." "Síť Wi-Fi je odpojena." "Wi-Fi – jedna čárka." @@ -188,7 +197,7 @@ "Nevypínat obrazovku" "Obrazovka se při nabíjení nepřepne do režimu spánku" "Povolit protokol Bluetooth HCI" - "Zachytit všechny pakety Bluetooth HCI do souboru" + "Zachytit všechny pakety Bluetooth HCI do souboru (po změně tohoto nastavení přepnout Bluetooth)" "Odemknutí OEM" "Povolit odemknutí zavaděče" "Povolit odemknutí OEM?" @@ -207,15 +216,20 @@ "Verze profilu Bluetooth AVRCP" "Vyberte verzi profilu Bluetooth AVRCP" "Bluetooth Audio – kodek" - "Vyberte zvukový kodek Bluetooth" + + "Bluetooth Audio – vzorkovací frekvence" - "Vyberte zvukový kodek Bluetooth:\nVzorkovací frekvence" + + "Bluetooth Audio – počet bitů na vzorek" - "Vyberte zvukový kodek Bluetooth:\nPočet bitů na vzorek" + + "Bluetooth Audio – režim kanálu" - "Vyberte zvukový kodek Bluetooth:\nRežim kanálu" + + "Kodek Bluetooth Audio LDAC: Kvalita přehrávání" - "Vyberte kodek Bluetooth Audio LDAC:\nKvalita přehrávání" + + "Streamování: %1$s" "Soukromé DNS" "Vyberte soukromý režim DNS" @@ -223,9 +237,12 @@ "Automaticky" "Název hostitele poskytovatele soukromého DNS" "Zadejte název hostitele poskytovatele DNS" + "Nelze se připojit" "Zobrazit možnosti certifikace bezdrátového displeje" "Zvýšit úroveň protokolování Wi‑Fi zobrazenou v SSID a RSSI při výběru sítě Wi‑Fi." "Při připojení k sítím Wi-Fi používat náhodnou adresu MAC" + "Měřená" + "Neměřená" "Vyrovnávací paměť protokol. nástroje" "Velikost vyrovnávací paměti protokol. nástroje" "Vymazat trvalé úložiště protokolovacího nástroje?" @@ -360,14 +377,10 @@ "Při vašem obvyklém využití zbývá asi %1$s" "Při vašem obvyklém využití (%2$s) zbývá asi %1$s" "Zbývající čas: %1$s" - - - - - - - - + "Při vašem obvyklém využití (%2$s) vydrží asi do %1$s" + "Při vašem obvyklém využití vydrží asi do %1$s" + "Vydrží asi do %1$s (%2$s)" + "Vydrží asi do %1$s" "Zbývá méně než %1$s" "Zbývá méně než %1$s (%2$s)" "Zbývá více než %1$s (%2$s)" @@ -422,8 +435,7 @@ "Registrováno" "Neregistrováno" "Není k dispozici" - - + "Adresa MAC je vybrána náhodně" Připojena %1$d zařízení Připojeno %1$d zařízení @@ -445,6 +457,5 @@ "v %1$s" "Trvání" "Pokaždé se zeptat" - - + "Právě teď" diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml index 33f09cb14f1b120117486ca5420dd430de0c8695..7a693b524fe0383e898781b80def8c65b45b5919 100644 --- a/packages/SettingsLib/res/values-da/strings.xml +++ b/packages/SettingsLib/res/values-da/strings.xml @@ -40,6 +40,10 @@ "Tilsluttet via %1$s" "Tilgængelig via %1$s" "Tilsluttet – intet internet" + + + + "Adgangspunktet er midlertidigt fuldt" "Tilsluttet via %1$s" "Tilgængelig via %1$s" @@ -63,6 +67,12 @@ "Tilsluttet %2$s (ingen telefon) – batteriniveau %1$s" "Tilsluttet %2$s (ingen medier) – batteriniveau %1$s" "Tilsluttet %2$s (ingen telefon eller medier) – batteriniveau %1$s" + + + + + + "Medielyd" "Telefonopkald" "Filoverførsel" @@ -109,6 +119,14 @@ "Hovedtelefoner" "Eksterne inputenheder" "Bluetooth" + + + + + + + + "Wi-Fi er slået fra." "Wi-Fi er afbrudt." "Wi-Fi har én bjælke." @@ -188,7 +206,7 @@ "Lås ikke" "Skærmen går ikke i dvale under opladning" "Aktivér Bluetooth HCI snoop log" - "Gem alle Bluetooth HCI-pakker i en fil" + "Gem alle Bluetooth HCI-pakker i en fil (slå Bluetooth fra og til igen, når du har ændret denne indstilling)" "OEM-oplåsning" "Tillad, at startindlæseren låses op" "Vil du tillade OEM-oplåsning?" @@ -207,15 +225,20 @@ "AVRCP-version for Bluetooth" "Vælg AVRCP-version for Bluetooth" "Bluetooth-lydcodec" - "Vælg codec for Bluetooth-lyd" + + "Eksempelfrekvens for Bluetooth-lyd" - "Vælg codec for Bluetooth-lyd:\nSamplingfrekvens" + + "Bit pr. eksempel for Bluetooth-lyd" - "Vælg codec for Bluetooth-lyd:\nBits pr. sampling" + + "Kanaltilstand for Bluetooth-lyd" - "Vælg codec for Bluetooth-lyd:\nKanaltilstand" + + "LDAC-codec for Bluetooth-lyd: Afspilningskvalitet" - "Vælg LDAC-codec for Bluetooth-lyd:\nAfspilningskvalitet" + + "Streamer: %1$s" "Privat DNS" "Vælg privat DNS-tilstand" @@ -223,9 +246,15 @@ "Automatisk" "Hostname for privat DNS-udbyder" "Angiv hostname for DNS-udbyder" + + "Vis valgmuligheder for certificering af trådløs skærm" "Øg mængden af Wi‑Fi-logføring. Vis opdelt efter SSID RSSI i Wi‑Fi-vælgeren" "Brug en tilfældig MAC-adresse, når der oprettes forbindelse til Wi‑Fi-netværk" + + + + "Størrelser for Logger-buffer" "Vælg Logger-størrelser pr. logbuffer" "Vil du rydde det permanente lager for logger?" @@ -360,14 +389,10 @@ "Der er ca. %1$s tilbage, alt efter hvordan du bruger enheden" "Ca. %1$s tilbage, alt efter hvordan du bruger enheden (%2$s)" "%1$s tilbage" - - - - - - - - + "Bør holde indtil ca. %1$s baseret på dit forbrug (%2$s)" + "Bør holde indtil ca. %1$s baseret på dit forbrug" + "Bør holde indtil ca. %1$s (%2$s)" + "Bør holde indtil ca. %1$s" "Der er mindre end %1$s tilbage" "Der er mindre end %1$s tilbage (%2$s)" "Der er mere end %1$s tilbage (%2$s)" @@ -422,8 +447,7 @@ "Registreret" "Ikke registreret" "Utilgængelig" - - + "MAC-adressen er tilfældig" %1$d enhed er tilsluttet %1$d enheder er tilsluttet @@ -443,6 +467,5 @@ "på %1$s" "Varighed" "Spørg hver gang" - - + "Lige nu" diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml index a7048503f17a5c573c2950621e4a22c35838513f..b7eb02acd89364d98ddc858dde1e2486a63e6f52 100644 --- a/packages/SettingsLib/res/values-de/strings.xml +++ b/packages/SettingsLib/res/values-de/strings.xml @@ -40,6 +40,10 @@ "Über %1$s verbunden" "Verfügbar über %1$s" "Verbunden, kein Internet" + + + + "Zugangspunkt vorübergehend voll belegt" "Über %1$s verbunden" "Verfügbar über %1$s" @@ -63,6 +67,12 @@ "Mit %2$s verbunden (kein Telefon-Audio), Akkustand bei %1$s" "Mit %2$s verbunden (kein Medien-Audio), Akkustand bei %1$s" "Mit %2$s verbunden (weder Telefon- noch Medien-Audio), Akkustand bei %1$s" + + + + + + "Medien-Audio" "Telefonanrufe" "Dateiübertragung" @@ -109,6 +119,14 @@ "Kopfhörer" "Eingabeperipherie" "Bluetooth" + + + + + + + + "WLAN: aus" "WLAN getrennt" "WLAN: ein Balken" @@ -188,7 +206,7 @@ "Aktiv lassen" "Display wird beim Laden nie in den Ruhezustand versetzt" "Bluetooth HCI-Snoop-Protokoll aktivieren" - "Alle Bluetooth HCI-Pakete in einer Datei erfassen" + "Alle Bluetooth HCI-Pakete in einer Datei erfassen (Wenn diese Einstellung geändert wurde, muss Bluetooth umgeschaltet werden)" "OEM-Entsperrung" "Bootloader-Entsperrung zulassen" "OEM-Entsperrung zulassen?" @@ -207,15 +225,20 @@ "Bluetooth AVRCP-Version" "Bluetooth AVRCP-Version auswählen" "Bluetooth-Audio-Codec" - "Bluetooth-Audio-Codec auswählen" + + "Bluetooth-Audio-Abtastrate" - "Bluetooth-Audio-Codec auswählen:\nAbtastrate" + + "Bluetooth-Audio/Bits pro Sample" - "Bluetooth-Audio-Codec auswählen:\nBits pro Sample" + + "Modus des Bluetooth-Audiokanals" - "Bluetooth-Audio-Codec auswählen:\nKanalmodus" + + "Bluetooth-Audio-LDAC-Codec: Wiedergabequalität" - "Bluetooth-Audio-LDAC-Codec auswählen:\nWiedergabequalität" + + "Streaming: %1$s" "Privates DNS" "Privaten DNS-Modus auswählen" @@ -223,9 +246,15 @@ "Automatisch" "Hostname des privaten DNS-Anbieters" "Hostname des DNS-Anbieters eingeben" + + "Optionen zur Zertifizierung für kabellose Übertragung anzeigen" "Level für WLAN-Protokollierung erhöhen, in WiFi Picker pro SSID-RSSI anzeigen" "MAC-Adresse randomisieren, wenn WLAN-Verbindungen hergestellt werden" + + + + "Logger-Puffergrößen" "Größe pro Protokollpuffer wählen" "Speicher der dauerhaften Protokollierung löschen?" @@ -360,14 +389,10 @@ "Noch ca. %1$s, basierend auf deiner Nutzung" "Noch ca. %1$s, basierend auf deiner Nutzung (%2$s)" "Noch %1$s" - - - - - - - - + "Sollte basierend auf deiner Nutzung etwa bis %1$s reichen (%2$s)" + "Sollte basierend auf deiner Nutzung etwa bis %1$s reichen" + "Sollte etwa bis %1$s reichen (%2$s)" + "Sollte etwa bis %1$s reichen" "Weniger als %1$s verbleibend" "Weniger als %1$s verbleibend (%2$s)" "Mehr als %1$s verbleibend (%2$s)" @@ -422,8 +447,7 @@ "Registriert" "Nicht registriert" "Nicht verfügbar" - - + "MAC-Adresse wird zufällig festgelegt" %1$d Geräte verbunden %1$d Gerät verbunden @@ -443,6 +467,5 @@ "am %1$s" "Dauer" "Jedes Mal fragen" - - + "Gerade eben" diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml index 53713f049eee31727803a6f6136dd2ab7bae25c4..28798a7f33800b1bee8d05de08d81d8d604a355e 100644 --- a/packages/SettingsLib/res/values-el/strings.xml +++ b/packages/SettingsLib/res/values-el/strings.xml @@ -40,6 +40,8 @@ "Συνδέθηκε μέσω %1$s" "Διαθέσιμο μέσω %1$s" "Συνδέθηκε, χωρίς σύνδεση στο διαδίκτυο" + "Δεν υπάρχει σύνδεση στο διαδίκτυο" + "Απαιτείται σύνδεση" "Το σημείο πρόσβασης είναι προσωρινά πλήρες" "Συνδέθηκε μέσω %1$s" "Διαθέσιμο μέσω %1$s" @@ -63,6 +65,9 @@ "Σε σύνδεση (χωρίς τηλέφωνο), μπαταρία %1$s%2$s" "Σε σύνδεση (χωρίς μέσα), μπαταρία %1$s%2$s" "Σε σύνδεση (χωρίς τηλέφωνο ή μέσα), μπαταρία %1$s%2$s" + "Ενεργό, %1$s μπαταρία" + "%1$s μπαταρία" + "Ενεργό" "Ήχος πολυμέσων" "Τηλεφωνικές κλήσεις" "Μεταφορά αρχείου" @@ -109,6 +114,10 @@ "Ακουστικά" "Περιφερειακό εισόδου" "Bluetooth" + "Σύζευξη αριστερού ακουστικού βοηθήματος…" + "Σύζευξη δεξιού ακουστικού βοηθήματος…" + "Αριστερά - %1$s μπαταρία" + "Δεξιά - %1$s μπαταρία" "Wi-Fi ανενεργό." "Το Wi-Fi έχει αποσυνδεθεί." "Μία γραμμή Wi-Fi." @@ -188,7 +197,7 @@ "Παραμονή σε λειτουργία" "Η οθόνη δεν θα μεταβαίνει ποτέ σε κατάσταση αδράνειας κατά τη φόρτιση" "Ενερ/ση καταγρ. Bluetooth HCI" - "Καταγραφή όλων των πακέτων bluetooth HCI σε ένα αρχείο" + "Καταγραφή όλων των πακέτων Bluetooth HCI σε ένα αρχείο (Εναλλαγή Bluetooth μετά την αλλαγή αυτής της ρύθμισης)" "Ξεκλείδωμα OEM" "Να επιτρέπεται το ξεκλείδωμα λειτουργίας εκκίνησης" "Να επιτρέπεται το ξεκλείδωμα OEM;" @@ -207,15 +216,20 @@ "Έκδοση AVRCP Bluetooth" "Επιλογή έκδοσης AVRCP Bluetooth" "Κωδικοποιητής ήχου Bluetooth" - "Επιλογή κωδικοποιητή ήχου Bluetooth" + + "Ρυθμός δειγματοληψίας ήχου Bluetooth" - "Επιλογή κωδικοποιητή ήχου Bluetooth:\nΠοσοστό δείγματος" + + "Bit ανά δείγμα ήχου Bluetooth" - "Επιλογή κωδικοποιητή ήχου Bluetooth:\nBit ανά δείγμα" + + "Λειτουργία καναλιού ήχου Bluetooth" - "Επιλογή κωδικοποιητή ήχου Bluetooth:\nΛειτουργία καναλιού" + + "Κωδικοποιητής LDAC ήχου Bluetooth: Ποιότητα αναπαραγωγής" - "Επιλογή κωδικοποιητή LDAC ήχου Bluetooth:\nΠοιότητα αναπαραγωγής" + + "Ροή: %1$s" "Ιδιωτικό DNS" "Επιλέξτε τη λειτουργία ιδιωτικού DNS" @@ -223,9 +237,12 @@ "Αυτόματα" "Όνομα κεντρικού υπολογιστή παρόχου DNS" "Εισαγάγετε το όνομα κεντρικού υπολογιστή του παρόχου DNS" + "Δεν ήταν δυνατή η σύνδεση" "Εμφάνιση επιλογών για πιστοποίηση ασύρματης οθόνης" "Αύξηση επιπέδου καταγ. Wi-Fi, εμφάνιση ανά SSID RSSI στο εργαλείο επιλογής Wi-Fi" "Τυχαιοποίηση διεύθυνσης MAC κατά τη σύνδεση σε δίκτυα Wi‑Fi" + "Μέτρηση με βάση τη χρήση" + "Χωρίς μέτρηση με βάση τη χρήση" "Μέγεθος προσωρινής μνήμης για τη λειτουργία καταγραφής" "Μέγεθος αρχείων κατ/φής ανά προ/νή μνήμη αρχείου κατ/φής" "Διαγραφή αποθηκευτικού χώρου μόνιμων αρχείων καταγραφής;" @@ -360,14 +377,10 @@ "Απομένει/ουν περίπου %1$s με βάση τη χρήση σας" "Απομένει/ουν περίπου %1$s, ανάλογα με τη χρήση σας (%2$s)" "Απομένει/ουν %1$s" - - - - - - - - + "Θα διαρκέσει μέχρι τις %1$s περίπου, ανάλογα με τη χρήση σας (%2$s)" + "Θα διαρκέσει μέχρι τις %1$s περίπου, ανάλογα με τη χρήση σας" + "Θα διαρκέσει μέχρι τις %1$s περίπου (%2$s)" + "Θα διαρκέσει μέχρι τις %1$s περίπου" "Απομένει/ουν λιγότερo/α από %1$s" "Απομένει/ουν λιγότερo/α από %1$s (%2$s)" "Απομένουν περισσότερα/ες από %1$s (%2$s)" @@ -422,8 +435,7 @@ "Εγγεγραμμένη" "Μη εγγεγραμμένη" "Μη διαθέσιμο" - - + "Η διεύθυνση MAC είναι τυχαία" %1$d συσκευές συνδέθηκαν %1$d συσκευή συνδέθηκε @@ -443,6 +455,5 @@ "το/τη(ν) %1$s" "Διάρκεια" "Να ερωτώμαι κάθε φορά" - - + "Μόλις τώρα" diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml index 8ad2f89e25f950567b3605c228e16cf638b98156..018c33b34952da08e71cc01e79e10f0343c538e5 100644 --- a/packages/SettingsLib/res/values-en-rAU/strings.xml +++ b/packages/SettingsLib/res/values-en-rAU/strings.xml @@ -40,6 +40,8 @@ "Connected via %1$s" "Available via %1$s" "Connected, no Internet" + "No Internet" + "Sign-in required" "Access point temporarily full" "Connected via %1$s" "Available via %1$s" @@ -63,6 +65,9 @@ "Connected (no phone), battery %1$s%2$s" "Connected (no media), battery %1$s%2$s" "Connected (no phone or media), battery %1$s%2$s" + "Active, %1$s battery" + "%1$s battery" + "Active" "Media audio" "Phone calls" "File transfer" @@ -109,6 +114,10 @@ "Headphone" "Input Peripheral" "Bluetooth" + "Pairing left hearing aid…" + "Pairing right hearing aid…" + "Left – %1$s battery" + "Right – %1$s battery" "Wi-Fi off." "Wi-Fi disconnected." "Wi-Fi one bar." @@ -188,7 +197,7 @@ "Stay awake" "Screen will never sleep while charging" "Enable Bluetooth HCI snoop log" - "Capture all Bluetooth HCI packets in a file" + "Capture all Bluetooth HCI packets in a file (Toggle Bluetooth after changing this setting)" "OEM unlocking" "Allow the bootloader to be unlocked" "Allow OEM unlocking?" @@ -207,15 +216,20 @@ "Bluetooth AVRCP Version" "Select Bluetooth AVRCP Version" "Bluetooth Audio Codec" - "Select Bluetooth Audio Codec" + + "Bluetooth Audio Sample Rate" - "Select Bluetooth Audio Codec:\nSample Rate" + + "Bluetooth Audio Bits Per Sample" - "Select Bluetooth Audio Codec:\nBits Per Sample" + + "Bluetooth Audio Channel Mode" - "Select Bluetooth Audio Codec:\nChannel Mode" + + "Bluetooth Audio LDAC Codec: Playback Quality" - "Select Bluetooth Audio LDAC Codec:\nPlayback Quality" + + "Streaming: %1$s" "Private DNS" "Select private DNS mode" @@ -223,9 +237,12 @@ "Automatic" "Private DNS provider hostname" "Enter hostname of DNS provider" + "Couldn\'t connect" "Show options for wireless display certification" "Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker" "Randomise MAC address when connecting to Wi‑Fi networks" + "Metered" + "Unmetered" "Logger buffer sizes" "Select Logger sizes per log buffer" "Clear logger persistent storage?" @@ -438,6 +455,5 @@ "on %1$s" "Duration" "Ask every time" - - + "Just now" diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml index 8ad2f89e25f950567b3605c228e16cf638b98156..018c33b34952da08e71cc01e79e10f0343c538e5 100644 --- a/packages/SettingsLib/res/values-en-rCA/strings.xml +++ b/packages/SettingsLib/res/values-en-rCA/strings.xml @@ -40,6 +40,8 @@ "Connected via %1$s" "Available via %1$s" "Connected, no Internet" + "No Internet" + "Sign-in required" "Access point temporarily full" "Connected via %1$s" "Available via %1$s" @@ -63,6 +65,9 @@ "Connected (no phone), battery %1$s%2$s" "Connected (no media), battery %1$s%2$s" "Connected (no phone or media), battery %1$s%2$s" + "Active, %1$s battery" + "%1$s battery" + "Active" "Media audio" "Phone calls" "File transfer" @@ -109,6 +114,10 @@ "Headphone" "Input Peripheral" "Bluetooth" + "Pairing left hearing aid…" + "Pairing right hearing aid…" + "Left – %1$s battery" + "Right – %1$s battery" "Wi-Fi off." "Wi-Fi disconnected." "Wi-Fi one bar." @@ -188,7 +197,7 @@ "Stay awake" "Screen will never sleep while charging" "Enable Bluetooth HCI snoop log" - "Capture all Bluetooth HCI packets in a file" + "Capture all Bluetooth HCI packets in a file (Toggle Bluetooth after changing this setting)" "OEM unlocking" "Allow the bootloader to be unlocked" "Allow OEM unlocking?" @@ -207,15 +216,20 @@ "Bluetooth AVRCP Version" "Select Bluetooth AVRCP Version" "Bluetooth Audio Codec" - "Select Bluetooth Audio Codec" + + "Bluetooth Audio Sample Rate" - "Select Bluetooth Audio Codec:\nSample Rate" + + "Bluetooth Audio Bits Per Sample" - "Select Bluetooth Audio Codec:\nBits Per Sample" + + "Bluetooth Audio Channel Mode" - "Select Bluetooth Audio Codec:\nChannel Mode" + + "Bluetooth Audio LDAC Codec: Playback Quality" - "Select Bluetooth Audio LDAC Codec:\nPlayback Quality" + + "Streaming: %1$s" "Private DNS" "Select private DNS mode" @@ -223,9 +237,12 @@ "Automatic" "Private DNS provider hostname" "Enter hostname of DNS provider" + "Couldn\'t connect" "Show options for wireless display certification" "Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker" "Randomise MAC address when connecting to Wi‑Fi networks" + "Metered" + "Unmetered" "Logger buffer sizes" "Select Logger sizes per log buffer" "Clear logger persistent storage?" @@ -438,6 +455,5 @@ "on %1$s" "Duration" "Ask every time" - - + "Just now" diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml index 8ad2f89e25f950567b3605c228e16cf638b98156..018c33b34952da08e71cc01e79e10f0343c538e5 100644 --- a/packages/SettingsLib/res/values-en-rGB/strings.xml +++ b/packages/SettingsLib/res/values-en-rGB/strings.xml @@ -40,6 +40,8 @@ "Connected via %1$s" "Available via %1$s" "Connected, no Internet" + "No Internet" + "Sign-in required" "Access point temporarily full" "Connected via %1$s" "Available via %1$s" @@ -63,6 +65,9 @@ "Connected (no phone), battery %1$s%2$s" "Connected (no media), battery %1$s%2$s" "Connected (no phone or media), battery %1$s%2$s" + "Active, %1$s battery" + "%1$s battery" + "Active" "Media audio" "Phone calls" "File transfer" @@ -109,6 +114,10 @@ "Headphone" "Input Peripheral" "Bluetooth" + "Pairing left hearing aid…" + "Pairing right hearing aid…" + "Left – %1$s battery" + "Right – %1$s battery" "Wi-Fi off." "Wi-Fi disconnected." "Wi-Fi one bar." @@ -188,7 +197,7 @@ "Stay awake" "Screen will never sleep while charging" "Enable Bluetooth HCI snoop log" - "Capture all Bluetooth HCI packets in a file" + "Capture all Bluetooth HCI packets in a file (Toggle Bluetooth after changing this setting)" "OEM unlocking" "Allow the bootloader to be unlocked" "Allow OEM unlocking?" @@ -207,15 +216,20 @@ "Bluetooth AVRCP Version" "Select Bluetooth AVRCP Version" "Bluetooth Audio Codec" - "Select Bluetooth Audio Codec" + + "Bluetooth Audio Sample Rate" - "Select Bluetooth Audio Codec:\nSample Rate" + + "Bluetooth Audio Bits Per Sample" - "Select Bluetooth Audio Codec:\nBits Per Sample" + + "Bluetooth Audio Channel Mode" - "Select Bluetooth Audio Codec:\nChannel Mode" + + "Bluetooth Audio LDAC Codec: Playback Quality" - "Select Bluetooth Audio LDAC Codec:\nPlayback Quality" + + "Streaming: %1$s" "Private DNS" "Select private DNS mode" @@ -223,9 +237,12 @@ "Automatic" "Private DNS provider hostname" "Enter hostname of DNS provider" + "Couldn\'t connect" "Show options for wireless display certification" "Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker" "Randomise MAC address when connecting to Wi‑Fi networks" + "Metered" + "Unmetered" "Logger buffer sizes" "Select Logger sizes per log buffer" "Clear logger persistent storage?" @@ -438,6 +455,5 @@ "on %1$s" "Duration" "Ask every time" - - + "Just now" diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml index 8ad2f89e25f950567b3605c228e16cf638b98156..018c33b34952da08e71cc01e79e10f0343c538e5 100644 --- a/packages/SettingsLib/res/values-en-rIN/strings.xml +++ b/packages/SettingsLib/res/values-en-rIN/strings.xml @@ -40,6 +40,8 @@ "Connected via %1$s" "Available via %1$s" "Connected, no Internet" + "No Internet" + "Sign-in required" "Access point temporarily full" "Connected via %1$s" "Available via %1$s" @@ -63,6 +65,9 @@ "Connected (no phone), battery %1$s%2$s" "Connected (no media), battery %1$s%2$s" "Connected (no phone or media), battery %1$s%2$s" + "Active, %1$s battery" + "%1$s battery" + "Active" "Media audio" "Phone calls" "File transfer" @@ -109,6 +114,10 @@ "Headphone" "Input Peripheral" "Bluetooth" + "Pairing left hearing aid…" + "Pairing right hearing aid…" + "Left – %1$s battery" + "Right – %1$s battery" "Wi-Fi off." "Wi-Fi disconnected." "Wi-Fi one bar." @@ -188,7 +197,7 @@ "Stay awake" "Screen will never sleep while charging" "Enable Bluetooth HCI snoop log" - "Capture all Bluetooth HCI packets in a file" + "Capture all Bluetooth HCI packets in a file (Toggle Bluetooth after changing this setting)" "OEM unlocking" "Allow the bootloader to be unlocked" "Allow OEM unlocking?" @@ -207,15 +216,20 @@ "Bluetooth AVRCP Version" "Select Bluetooth AVRCP Version" "Bluetooth Audio Codec" - "Select Bluetooth Audio Codec" + + "Bluetooth Audio Sample Rate" - "Select Bluetooth Audio Codec:\nSample Rate" + + "Bluetooth Audio Bits Per Sample" - "Select Bluetooth Audio Codec:\nBits Per Sample" + + "Bluetooth Audio Channel Mode" - "Select Bluetooth Audio Codec:\nChannel Mode" + + "Bluetooth Audio LDAC Codec: Playback Quality" - "Select Bluetooth Audio LDAC Codec:\nPlayback Quality" + + "Streaming: %1$s" "Private DNS" "Select private DNS mode" @@ -223,9 +237,12 @@ "Automatic" "Private DNS provider hostname" "Enter hostname of DNS provider" + "Couldn\'t connect" "Show options for wireless display certification" "Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker" "Randomise MAC address when connecting to Wi‑Fi networks" + "Metered" + "Unmetered" "Logger buffer sizes" "Select Logger sizes per log buffer" "Clear logger persistent storage?" @@ -438,6 +455,5 @@ "on %1$s" "Duration" "Ask every time" - - + "Just now" diff --git a/packages/SettingsLib/res/values-en-rXC/strings.xml b/packages/SettingsLib/res/values-en-rXC/strings.xml index 6cbb23deb779c6d170dea588ca83f593b801d7c2..02c087250071c99cf6c204aa4611820053ca6414 100644 --- a/packages/SettingsLib/res/values-en-rXC/strings.xml +++ b/packages/SettingsLib/res/values-en-rXC/strings.xml @@ -40,6 +40,8 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‎‏‎‏‏‎‎‏‎‎‏‎‏‎‏‎‎‎‏‏‏‎‎‏‎‏‏‎‏‏‎‏‎‏‏‎Connected via %1$s‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‏‏‎‎‏‎‎‏‎‎‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‎‎‎‏‏‎‏‎Available via %1$s‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‎‏‏‎‏‎‎‏‎‏‎Connected, no internet‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‎‎‏‎‏‎‏‎‏‏‎‏‎‏‎‎‏‎No internet‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‏‎‏‏‎‏‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‎‏‎‎‏‏‏‎‏‏‎‏‎‏‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‎‏‎‎‎Sign in required‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‏‎‏‎‏‏‏‎‏‎‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‏‏‎‏‎Access point temporarily full‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‏‏‏‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‏‎‎‏‏‎‎‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‏‏‎‎‎‎Connected via %1$s‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‏‏‎‎‎‏‏‎‎‎‏‎‎‎‎‏‎‎‏‎‎‏‏‏‎‏‎‎‎‏‏‎‏‏‎‏‎‏‎‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎‏‎Available via %1$s‎‏‎‎‏‎" @@ -63,6 +65,9 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‏‏‎‎‎‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‏‎‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‏‎‎‎‏‏‎‎‏‎‎‏‎‏‎‎Connected (no phone), battery ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎‏‎‏‎‎‏‎‏‎‏‎‎‏‎‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‎Connected (no media), battery ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‏‎‎‎‎‏‏‏‏‎‏‏‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎Connected (no phone or media), battery ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎%2$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‎‏‎‏‏‎‏‎‏‎‎‎‏‎‎‏‎‎‏‎‏‏‏‎‎‏‎Active, ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ battery‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‏‎‎‏‎‎‎‏‏‎‏‏‏‏‎‎‏‎‎‎‎‎‎‎‏‎‎‏‏‏‎‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ battery‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‏‎‎‏‏‎‎‏‎‎‎‏‎‎‎‏‏‏‎‏‎‏‎‎‏‎‏‏‎‎‏‎‎‏‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‎‎‎Active‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‎‎‎‏‏‎‎‎‏‎‏‎‎‎‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‎‎Media audio‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‏‎‏‏‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‎‏‎‎‏‎‎Phone calls‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‎‏‎File transfer‎‏‎‎‏‎" @@ -109,6 +114,10 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‎‏‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‏‎‏‎‏‎‏‎‏‎‎‏‏‎‏‏‎‏‎‎‏‏‎‏‏‏‎‎‏‎‎‏‎‎‎‏‎‏‎‎‎‎‎Headphone‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‎‎‏‎‎‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‎‏‏‎‎‎Input Peripheral‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‏‎‏‎‏‎‏‏‎‏‎‎‎‏‎‏‏‎‏‏‎‏‎‏‎‎‎‎‏‏‏‎‎‏‎‎‏‎‏‏‎‎‎Bluetooth‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‎‎‏‏‎‏‏‎‎‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‎‎Pairing left hearing aid…‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‏‎‎‎‎‏‎‎‎‎‎‎‏‎‎‎‏‏‎‎‎‎‏‎‎‏‎‎‏‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‏‏‏‎‏‏‎Pairing right hearing aid…‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‏‏‎‎‎‎‎‎‏‏‎‏‎‏‏‏‎‏‎‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‎‏‎‏‏‏‏‎‎‎‏‏‎‏‎‎Left - ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ battery‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‏‏‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‎‏‎‎‎‏‎‏‏‎‏‎‎‎‎‏‎‎‎‏‏‏‎‏‎‎‎‎‏‏‎‏‏‏‎‏‎Right - ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ battery‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‏‏‏‎‎‏‎‎‎‎‎‎‏‏‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‏‏‏‏‎‎‎Wifi off.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎‎‎Wifi disconnected.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‏‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‏‎‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‏‎‎‏‏‏‏‏‎‎‎Wifi one bar.‎‏‎‎‏‎" @@ -188,7 +197,7 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‏‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‎‎‏‎‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‎‏‏‏‎‏‎‎‏‎‎‎‎‎‏‏‎‎‎‎Stay awake‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎‏‎‎‎‏‎Screen will never sleep while charging‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‏‎‎‏‎‏‏‏‎‎‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‎‏‏‎‏‏‏‏‏‎‎‎‎‎‏‎‎‎‎‏‎‏‏‏‏‎‎‎‎‎‏‏‎‎Enable Bluetooth HCI snoop log‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‎‏‎‎‏‎‏‏‎‏‏‏‏‎‎‏‏‎‏‏‎‎‏‏‎‏‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‏‏‎Capture all bluetooth HCI packets in a file‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‏‏‎‏‎‎‎‏‎‏‎‎‏‎‎‏‎‏‏‎‏‏‏‏‏‎‏‏‎‏‎‏‎‎‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‏‎‎‎‎‎‏‎‎‏‏‎Capture all Bluetooth HCI packets in a file (Toggle Bluetooth after changing this setting)‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎‏‏‎‏‎‎‎‏‏‏‏‎‎‎‏‏‎‏‎‏‎‎‎‎‏‎‎‏‎‎‎‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎OEM unlocking‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‏‏‎‏‎‏‎‎‎‎‎‏‏‏‎‎‏‎‏‏‎‏‎‎‎‎‏‏‏‎‏‏‎‎‎‏‎‎‏‎‎‎‎Allow the bootloader to be unlocked‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‎‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‎‏‎‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‎‏‏‎‏‎‎‎‏‎‏‏‎‎‎‏‎‏‎‎Allow OEM unlocking?‎‏‎‎‏‎" @@ -207,15 +216,20 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‎‎‎‏‎‏‎‏‏‏‎‎‎‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‎‎‎‎‎‎‏‎Bluetooth AVRCP Version‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‎‎‎‏‎‏‏‎‏‏‎‎‎‎‏‎‏‏‎‎‏‎‎‏‏‎‎Select Bluetooth AVRCP Version‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‏‏‎‏‎‎‎‎‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‏‏‏‎‎‏‎‎‎‎‎‏‎‎Bluetooth Audio Codec‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‏‎‏‎‏‎‏‏‎‏‎‎‏‎‎‏‎‎‎‎‏‎‏‏‏‏‎‎‏‏‎‎‎‎‏‎‎‎‎‎‏‎Select Bluetooth Audio Codec‎‏‎‎‏‎" + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‎‏‏‎‎‎‏‏‏‎‎‎‎‎‏‏‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎Bluetooth Audio Sample Rate‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‏‏‏‎‏‎‏‏‏‏‎‏‎‏‏‎‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‏‏‏‏‎‏‎Select Bluetooth Audio Codec:‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Sample Rate‎‏‎‎‏‎" + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‎‏‎‏‏‎‏‎Bluetooth Audio Bits Per Sample‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‎‎‏‏‎‏‎‎‏‏‎‏‏‎‎‎‏‎‏‎‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‎‏‎‎‏‏‏‎‏‎‎‏‎Select Bluetooth Audio Codec:‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Bits Per Sample‎‏‎‎‏‎" + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‎‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‏‎‎‎Bluetooth Audio Channel Mode‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‎‏‏‎‏‏‏‏‏‎‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‎‏‎‎‎‏‎‏‎‏‎‎‎‏‎‎‎‎‏‏‏‎Select Bluetooth Audio Codec:‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Channel Mode‎‏‎‎‏‎" + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‎‎‎‏‏‏‎‏‏‎‏‏‎‎‏‏‎‎‏‏‎‏‎‎‏‎‎‏‏‎‏‎Bluetooth Audio LDAC Codec: Playback Quality‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‎‏‎‎‎‏‎‎‏‏‏‏‎‎‏‏‏‏‎‎‎‏‎‎‏‏‎‏‏‎‎‏‏‎‎‏‏‏‎‎‏‎‏‎‎‏‎‎‏‎‎‎‎‎Select Bluetooth Audio LDAC Codec:‎‏‎‎‏‏‎\n‎‏‎‎‏‏‏‎Playback Quality‎‏‎‎‏‎" + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‏‎‏‏‏‎‏‏‎‏‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‎Streaming: ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‏‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‏‎‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‎‏‎‏‏‎‎‏‏‎‎‏‎‎Private DNS‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‏‏‎‏‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎Select Private DNS Mode‎‏‎‎‏‎" @@ -223,9 +237,12 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‏‎‎‎‏‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‎‎‎‏‎‎‏‎‏‎‎‏‏‏‎Automatic‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‏‎‏‎‏‏‎‎‎‏‎‏‎‎‎‎‏‏‎‎‏‎‎‎‏‏‎‏‎‏‎‏‎‎‏‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‎Private DNS provider hostname‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‎‏‎‎‎‎‏‎‏‎‏‎‏‏‎‎‏‎‎‏‎‎‏‎‏‏‎‎‎‏‎‏‎‏‏‏‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‎‎‏‏‏‏‎Enter hostname of DNS provider‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‏‎‏‏‏‏‎‏‎‎‏‏‎‏‏‎‎‏‎‎‏‏‎‎‎‏‎‎‏‏‏‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‎‏‏‎‏‏‏‎Couldn\'t connect‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‎‎‎‎‏‎‎‎‎‎‎‎‏‎‎‎‎‎‏‏‎‎‎‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‏‏‎‎‎‎‏‏‎‏‎‏‎‏‏‏‎‏‎Show options for wireless display certification‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‎‎‏‏‎‏‎‏‏‏‎‏‎‎‏‎‎‏‎‏‏‎‎‎‏‏‎‎‏‎‎‎‎‏‏‎‏‏‏‏‏‎‎‏‎‎‏‏‏‏‎‏‏‎‎Increase Wi‑Fi logging level, show per SSID RSSI in Wi‑Fi Picker‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‎‎‎‏‏‎‎‎‎‏‎‎‏‎‏‏‏‏‎‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‎‎‏‏‏‏‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‎‏‎Randomize MAC address when connecting to Wi‑Fi networks‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‎‏‎‎‏‏‏‏‎‎‎‎‏‎‏‏‏‎‎‏‎‏‏‏‎‏‏‏‎‎‎‏‎‏‏‎‏‎Metered‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‎‎‎‎‏‏‏‏‎‎‎‏‎‎‏‏‏‎‎‎‏‏‎Unmetered‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‎‏‏‏‏‏‎‎‏‏‏‎‏‏‎‏‎‎‎‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‏‎‎‏‎‎‏‎‎‎Logger buffer sizes‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‏‏‎‎‎‎‏‎‏‏‏‏‏‏‎‏‎‎‏‏‏‎‎‏‎‎‏‎‏‏‎‎‏‏‏‏‏‎‎‏‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‏‎‏‏‎‎‎‎Select Logger sizes per log buffer‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‎‎‎‎‎‎‎‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‏‏‏‏‎Clear logger persistent storage?‎‏‎‎‏‎" @@ -438,6 +455,5 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‏‏‎‎‏‎‎‏‎‏‎‎‎‏‏‎‏‎‏‎‎‎‏‏‎‎‎‏‎‎‎‏‎‏‎‎‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‎on ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‎‏‎‏‏‎‎‏‎‏‏‏‏‏‎‎‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‏‏‏‏‏‎‎‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‎‏‎‏‎Duration‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‏‎‏‏‎‏‎‎‏‏‎‎‎‏‏‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‎‎‏‏‎‏‏‏‎‏‎Ask every time‎‏‎‎‏‎" - - + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‎‎‏‏‏‏‎‎‎‏‏‏‎‎‏‏‏‏‎‎‎‏‏‎‏‎‏‎‏‎‏‏‏‎‏‏‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‏‏‎‎Just now‎‏‎‎‏‎" diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml index 2a54c131e20c40a2eb2b56407b45cd2772ad465c..662ecda2f7b0e5c3598adbc563dbe54de4740559 100644 --- a/packages/SettingsLib/res/values-es-rUS/strings.xml +++ b/packages/SettingsLib/res/values-es-rUS/strings.xml @@ -40,6 +40,10 @@ "Conexión a través de %1$s" "Disponible a través de %1$s" "Conectado pero sin conexión a Internet" + + + + "El punto de acceso está completo temporalmente" "Conexión a través de %1$s" "Disponible a través de %1$s" @@ -63,6 +67,12 @@ "Conectado (sin teléfono) a %2$s (%1$s de batería)" "Conectado (sin archivos multimedia) a %2$s (%1$s de batería)" "Conectado (sin teléfono ni archivos multimedia) a %2$s (%1$s de batería)" + + + + + + "Audio multimedia" "Llamadas telefónicas" "Transferencia de archivos" @@ -109,6 +119,14 @@ "Auriculares" "Periférico de entrada" "Bluetooth" + + + + + + + + "Wi-Fi inhabilitado" "Wi-Fi desconectado" "Una barra de Wi-Fi" @@ -188,7 +206,7 @@ "Permanecer activo" "La pantalla nunca quedará inactiva mientras el dispositivo se esté cargando." "Registro de Bluetooth HCI" - "Captura todos los paquetes de Bluetooth HCI en un archivo." + "Capturar todos los paquetes de Bluetooth HCI de un archivo (Activar o desactivar el Bluetooth después de cambiar esta opción)" "Desbloqueo de OEM" "Permitir que el cargador de inicio se desbloquee" "¿Permitir desbloqueo de OEM?" @@ -207,15 +225,20 @@ "Versión de AVRCP del Bluetooth" "Selecciona la versión de AVRCP del Bluetooth" "Códec del audio Bluetooth" - "Seleccionar códec del audio Bluetooth" + + "Frecuencia de muestreo del audio Bluetooth" - "Seleccionar códec del audio Bluetooth:\nVelocidad de la muestra" + + "Bits por muestra del audio Bluetooth" - "Seleccionar códec del audio Bluetooth:\nBits por muestra" + + "Modo de canal del audio Bluetooth" - "Seleccionar códec del audio Bluetooth:\nModo de canal" + + "Códec del audio Bluetooth LDAC: calidad de reproducción" - "Seleccionar códec del audio Bluetooth LDAC:\nCalidad de reproducción" + + "Transmitiendo: %1$s" "DNS privado" "Selecciona el modo de DNS privado" @@ -223,9 +246,15 @@ "Automático" "Nombre de host del proveedor de DNS privado" "Ingresa el nombre de host del proveedor de DNS" + + "Mostrar opciones de certificación de pantalla inalámbrica" "Aumentar nivel de registro Wi-Fi; mostrar por SSID RSSI en el selector de Wi-Fi" "Seleccionar la dirección MAC de forma aleatoria cuando se establezca conexión con redes Wi-Fi" + + + + "Tamaños de búfer de Logger" "Selecciona el tamaño del Logger por búfer" "¿Borrar el almacenamiento persistente del registrador?" @@ -360,14 +389,10 @@ "Aproximadamente %1$s restantes en función del uso" "Tiempo restante: %1$s aproximadamente según el uso (%2$s)" "Tiempo restante: %1$s" - - - - - - - - + "Debería durar aproximadamente hasta %1$s según el uso (%2$s)" + "Debería durar aproximadamente hasta %1$s según el uso" + "Debería durar aproximadamente hasta %1$s (%2$s)" + "Debería durar aproximadamente hasta %1$s" "Tiempo restante: menos de %1$s" "Tiempo restante: menos de %1$s (%2$s)" "Tiempo restante: más de %1$s (%2$s)" @@ -422,8 +447,7 @@ "Registrado" "Sin registrar" "No disponible" - - + "La dirección MAC es aleatoria" %1$d dispositivos conectados %1$d dispositivo conectado @@ -443,6 +467,5 @@ "el %1$s" "Duración" "Preguntar siempre" - - + "Recién" diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml index f4fb7f3919cb5a7fabf4054df218fee9fffd4764..3647f43b07f0422e33598742a687c920d002c266 100644 --- a/packages/SettingsLib/res/values-es/strings.xml +++ b/packages/SettingsLib/res/values-es/strings.xml @@ -40,6 +40,10 @@ "Conectado a través de %1$s" "Disponible a través de %1$s" "Conexión sin Internet" + + + + "Punto de acceso temporalmente lleno" "Conectado a través de %1$s" "Disponible a través de %1$s" @@ -63,6 +67,12 @@ "Conectado (sin audio de teléfono) a %2$s (%1$s de batería)" "Conectado (sin audio multimedia) a %2$s (%1$s de batería)" "Conectado (sin audio de teléfono ni multimedia) a %2$s (%1$s de batería)" + + + + + + "Audio multimedia" "Llamadas de teléfono" "Transferencia de archivos" @@ -109,6 +119,14 @@ "Auriculares" "Periférico de entrada" "Bluetooth" + + + + + + + + "Wi-Fi desactivado." "Wi-Fi desconectado." "Una barra de Wi-Fi." @@ -188,7 +206,7 @@ "Pantalla activa" "La pantalla nunca entra en modo de suspensión si el dispositivo se está cargando" "Registro de búsqueda de HCI Bluetooth" - "Capturar todos los paquetes de Bluetooth HCI en un archivo" + "Capturar todos los paquetes de Bluetooth HCI de un archivo (Alternar la conexión Bluetooth después de cambiar esta opción)" "Desbloqueo de OEM" "Permitir desbloquear el bootloader" "¿Permitir desbloqueo de OEM?" @@ -207,15 +225,20 @@ "Versión AVRCP del Bluetooth" "Selecciona la versión AVRCP del Bluetooth" "Códec de audio por Bluetooth" - "Selecciona el códec de audio por Bluetooth" + + "Porcentaje de muestreo de audio por Bluetooth" - "Selecciona el códec de audio por Bluetooth:\nFrecuencia de muestreo" + + "Bits de audio por Bluetooth por muestra" - "Selecciona el códec de audio por Bluetooth:\nBits por muestra" + + "Modo de canal de audio por Bluetooth" - "Selecciona el códec de audio por Bluetooth:\nModo de canal" + + "Selecciona el códec LDAC por Bluetooth: calidad de reproducción" - "Selecciona el códec LDAC de audio por Bluetooth:\nCalidad de reproducción" + + "Streaming: %1$s" "DNS privado" "Selecciona el modo de DNS privado" @@ -223,9 +246,15 @@ "Automático" "Nombre de host de proveedor de DNS privado" "Introduce el nombre de host del proveedor de DNS" + + "Mostrar opciones para la certificación de la pantalla inalámbrica" "Aumentar el nivel de registro de Wi-Fi, mostrar por SSID RSSI en el selector Wi-Fi" "Ordenar las direcciones MAC de forma aleatoria al conectarse a redes Wi‑Fi" + + + + "Tamaños de búfer de registrador" "Elige el tamaño del Logger por búfer" "¿Borrar almacenamiento continuo del registrador?" @@ -360,14 +389,10 @@ "Tiempo restante aproximado según tu uso: %1$s" "Tiempo restante aproximado según tu uso: %1$s (%2$s)" "Tiempo restante: %1$s" - - - - - - - - + "Debería durar aproximadamente hasta %1$s según el uso (%2$s)" + "Debería durar aproximadamente hasta %1$s según el uso" + "Debería durar aproximadamente hasta %1$s (%2$s)" + "Debería durar aproximadamente hasta %1$s" "Tiempo restante: menos de %1$s" "Queda menos del %1$s (%2$s)" "Queda más del %1$s (%2$s)" @@ -422,8 +447,7 @@ "Registrado" "No registrado" "No disponible" - - + "La dirección MAC es aleatoria" %1$d dispositivos conectados %1$d dispositivo conectado @@ -443,6 +467,5 @@ "Fecha: %1$s" "Duración" "Preguntar siempre" - - + "Justo ahora" diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml index de256afbd0f6d073a22c66a0e58c1a77d0fa9d21..0998679430aae9bcabf8eb403e4190f8f68fd91a 100644 --- a/packages/SettingsLib/res/values-et/strings.xml +++ b/packages/SettingsLib/res/values-et/strings.xml @@ -40,6 +40,10 @@ "Ühendatud üksuse %1$s kaudu" "Saadaval üksuse %1$s kaudu" "Ühendatud, Interneti-ühendus puudub" + + + + "Pääsupunkt on ajutiselt täis" "Ühendatud operaatori %1$s kaudu" "Saadaval operaatori %1$s kaudu" @@ -63,6 +67,12 @@ "Ühendatud (telefoni pole), aku %1$s%2$s" "Ühendatud (meediat pole), aku %1$s%2$s" "Ühendatud (telefoni ega meediat pole), aku %1$s%2$s" + + + + + + "Meedia heli" "Telefonikõned" "Failiedastus" @@ -109,6 +119,14 @@ "Kõrvaklapid" "Sisestatud välisseade" "Bluetooth" + + + + + + + + "WiFi on välja lülitatud." "WiFi-ühendus on katkestatud." "WiFi: üks pulk." @@ -188,7 +206,7 @@ "Jää sisselülitatuks" "Ekraan ei lähe kunagi laadimise ajal unerežiimi" "Luba Bluetoothi HCI jälgimise logi" - "Hõiva kõik faili Bluetoothi HCI paketid" + "Jäädvusta kõik failis olevad Bluetoothi HCI-paketid (pärast seade muutmist muutke Bluetoothi olekut)" "OEM-i avamine" "Luba buudilaadur avada" "Kas lubada OEM-i avamine?" @@ -207,15 +225,20 @@ "Bluetoothi AVRCP versioon" "Valige Bluetoothi AVRCP versioon" "Bluetoothi heli kodek" - "Valige Bluetoothi helikodek" + + "Bluetoothi heli diskreetimissagedus" - "Valige Bluetoothi helikodek:\ndiskreetimissagedus" + + "Bluetoothi heli bitte diskreedi kohta" - "Valige Bluetoothi helikodek:\nbitte diskreetimise kohta" + + "Bluetoothi heli kanalirežiim" - "Valige Bluetoothi helikodek:\nkanalirežiim" + + "Bluetoothi LDAC-helikodek: taasesituskvaliteet" - "Valige Bluetoothi LDAC-helikodek:\ntaasesituskvaliteet" + + "Voogesitus: %1$s" "Privaatne DNS" "Valige privaatse DNS-i režiim" @@ -223,9 +246,15 @@ "Automaatne" "Privaatse DNS-i teenusepakkuja hostinimi" "Sisestage DNS-i teenusepakkuja hostinimi" + + "Juhtmeta ekraaniühenduse sertifitseerimisvalikute kuvamine" "Suurenda WiFi logimistaset, kuva WiFi valijas SSID RSSI järgi" "Määra WiFi-võrkudega ühenduse loomisel juhuslik MAC-aadress" + + + + "Logija puhvri suurused" "Vali logija suur. logipuhvri kohta" "Kas kustutada logija püsivalt salvestatud andmed?" @@ -360,14 +389,10 @@ "Teie kasutuse alusel on jäänud ligikaudu %1$s" "Teie kasutuse põhjal on jäänud umbes %1$s (%2$s)" "%1$s on jäänud" - - - - - - - - + "Peaks teie kasutuse põhjal kestma kuni %1$s (%2$s)" + "Peaks teie kasutuse põhjal kestma kuni %1$s" + "Peaks kestma kuni %1$s (%2$s)" + "Peaks kestma kuni %1$s" "Jäänud on alla %1$s" "Jäänud on alla %1$s (%2$s)" "Jäänud on üle %1$s (%2$s)" @@ -422,8 +447,7 @@ "Registreeritud" "Ei ole registreeritud" "Pole saadaval" - - + "MAC-aadress on juhuslikuks muudetud" %1$d seadet on ühendatud %1$d seade on ühendatud @@ -443,6 +467,5 @@ "– %1$s" "Kestus" "Küsi iga kord" - - + "Äsja" diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml index 1fd4639bc92dce63442ae788a5e5dd0c8ab4add0..2c989661ec1bd08daf4d89b01ca8c3953d47ef92 100644 --- a/packages/SettingsLib/res/values-eu/strings.xml +++ b/packages/SettingsLib/res/values-eu/strings.xml @@ -40,6 +40,10 @@ "%1$s bidez konektatuta" "%1$s bidez erabilgarri" "Konektatuta; ezin da atzitu Internet" + + + + "Sarbide-puntua beteta dago aldi baterako" "%1$s bidez konektatuta" "%1$s bidez erabilgarri" @@ -63,6 +67,12 @@ "Konektatuta (telefonoaren audiorik gabe). Bateria: %1$s%2$s." "Konektatuta (gailuaren audiorik gabe). Bateria: %1$s%2$s." "Konektatuta (telefonoaren edo gailuaren audiorik gabe). Bateria: %1$s%2$s." + + + + + + "Euskarriaren audioa" "Telefono-deiak" "Fitxategi-transferentzia" @@ -109,6 +119,14 @@ "Aurikularra" "Idazteko gailua" "Bluetooth gailua" + + + + + + + + "Desaktibatuta dago Wi-Fi konexioa." "Deskonektatu egin da Wi-Fi konexioa." "Wi-Fi sarearen barra bat." @@ -150,7 +168,7 @@ "Hizketa-sintesiaren adibide bat da hau" "Hizkuntza lehenetsiaren egoera" "%1$s guztiz onartzen da." - "%1$s eskualde-ezarpenak sareko konexioa behar du" + "%1$s lurralde-ezarpenak sareko konexioa behar du" "Ez da %1$s onartzen" "Egiaztatzen…" "%s motorraren ezarpenak" @@ -188,7 +206,7 @@ "Mantendu aktibo" "Pantaila ez da inoiz inaktibo ezarriko kargatu bitartean" "Gaitu Bluetooth HCI miatze-erregistroa" - "Bildu Bluetooth HCI pakete guztiak fitxategi batean" + "Bildu fitxategi bateko Bluetooth HCI pakete guztiak (aldatu Bluetooth konexioaren egoera ezarpen hau aldatu ondoren)" "OEM desblokeoa" "Onartu abiarazlea desblokeatzea" "OEM desblokeoa onartu nahi duzu?" @@ -207,15 +225,20 @@ "Bluetooth AVRCP bertsioa" "Hautatu Bluetooth AVRCP bertsioa" "Bluetooth bidezko audioaren kodeka" - "Hautatu Bluetooth audioaren kodeka" + + "Bluetooth bidezko audioaren lagin-abiadura" - "Hautatu Bluetooth audioaren LDAC kodeka:\nlaginaren abiadura" + + "Bluetooth bidezko audioaren lagin bakoitzeko bit kopurua" - "Hautatu Bluetooth audioaren kodeka:\nlagin bakoitzeko bitak" + + "Bluetooth bidezko audioaren kanalaren modua" - "Hautatu Bluetooth audioaren kodeka:\nkanal modua" + + "Bluetooth audioaren LDAC kodeka: erreprodukzioaren kalitatea" - "Hautatu Bluetooth audioaren LDAC kodeka:\nerreprodukzioaren kalitatea" + + "Igortzean: %1$s" "DNS pribatua" "Hautatu DNS pribatuaren modua" @@ -223,9 +246,15 @@ "Automatikoa" "DNS hornitzaile pribatuaren ostalari-izena" "Idatzi DNS hornitzailearen ostalari-izena" + + "Erakutsi hari gabeko bistaratze-egiaztapenaren aukerak" "Erakutsi datu gehiago Wi-Fi sareetan saioa hasterakoan. Erakutsi sarearen identifikatzailea eta seinalearen indarra Wi‑Fi sareen hautagailuan." "Aukeratu ausaz MAC helbideak Wi‑Fi sareetara konektatzean" + + + + "Erregistroen buffer-tamainak" "Hautatu erregistroen buffer-tamainak" "Erregistro iraunkorraren biltegia garbitu nahi duzu?" @@ -360,14 +389,10 @@ "%1$s inguru gelditzen dira, erabileraren arabera" "Erabilera kontuan izanda, %1$s inguru gelditzen dira (%2$s)" "%1$s guztiz kargatu arte" - - - - - - - - + "Erabileraren arabera, ordu honetara arte iraungo du, gutxi gorabehera: %1$s (%2$s)" + "Erabileraren arabera, ordu honetara arte iraungo du, gutxi gorabehera: %1$s" + "Ordu honetara arte iraungo du, gutxi gorabehera: %1$s (%2$s)" + "Ordu honetara arte iraungo du, gutxi gorabehera: %1$s" "%1$s baino gutxiago gelditzen dira" "%1$s baino gutxiago gelditzen da (%2$s)" "%1$s baino gehiago gelditzen da (%2$s)" @@ -422,8 +447,7 @@ "Erregistratuta" "Erregistratu gabe" "Ez dago erabilgarri" - - + "Ausaz aukeratutako MAC helbidea" %1$d gailu daude konektatuta %1$d gailu dago konektatuta @@ -443,6 +467,5 @@ "data: %1$s" "Iraupena" "Galdetu beti" - - + "Oraintxe" diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml index 140ce4b87504166fb738c86b4abf93522a7cc9b0..96350198c243327f08c43016f7095d6bebfa2fb3 100644 --- a/packages/SettingsLib/res/values-fa/strings.xml +++ b/packages/SettingsLib/res/values-fa/strings.xml @@ -40,6 +40,8 @@ "‏متصل از طریق %1$s" "‏در دسترس از طریق %1$s" "متصل، بدون اینترنت" + "عدم دسترسی به اینترنت" + "ورود به سیستم لازم است" "ظرفیت نقطه دسترسی موقتاً تکمیل شده است" "‏متصل ازطریق %1$s" "‏در دسترس ازطریق %1$s" @@ -63,6 +65,9 @@ "متصل (بدون تلفن)، باتری %1$s%2$s" "متصل (بدون رسانه)، باتری %1$s%2$s" "متصل (بدون تلفن یا رسانه)، باتری %1$s%2$s" + "فعال، %1$s شارژ باتری" + "%1$s شارژ باتری" + "فعال" "رسانه صوتی" "تماس‌های تلفنی" "انتقال فایل" @@ -109,6 +114,10 @@ "هدفون" "ورودی محیطی" "بلوتوث" + "درحال مرتبط‌سازی با سمعک چپ…" + "درحال مرتبط‌سازی با سمعک راست…" + "چپ - %1$s شارژ باتری" + "راست - %1$s شارژ باتری" "‏Wi‑Fi خاموش است." "‏Wi-Fi قطع‌ شد." "‏یک نوار برای Wi‑Fi." @@ -188,7 +197,7 @@ "بیدار ماندن" "صفحه هرگز در حین شارژ شدن به حالت خواب نمی‌رود" "‏فعال کردن گزارش تجسس Bluetooth HCI" - "‏ذخیره تمامی بسته‌های HCI بلوتوث در یک فایل" + "‏ضبط همه بسته‌های HCI بلوتوث‌ها در یک فایل (بعد از تغییر این تنظیم، بلوتوث را روشن/خاموش کنید)" "بازکردن سازنده تجهیزات اصلی" "اجازه دهید قفل بوت‌لودر باز شود" "‏بازکردن سازنده تجهیزات اصلی مجاز (OEM) است؟" @@ -207,15 +216,20 @@ "‏نسخه AVRCP بلوتوث" "‏انتخاب نسخه AVRCP بلوتوث" "کدک بلوتوث صوتی" - "انتخاب کدک صوتی بلوتوث" + + "سرعت نمونه بلوتوث صوتی" - "انتخاب کدک صوتی بلوتوث:\nنرخ نمونه" + + "بیت‌های بلوتوث صوتی در هر نمونه" - "انتخاب کدک صوتی بلوتوث:\nبیت در نمونه" + + "حالت کانال بلوتوث‌ صوتی" - "انتخاب کدک صوتی بلوتوث:\nحالت کانال" + + "‏کدک LDAC صوتی بلوتوث: کیفیت پخش" - "‏انتخاب کدک LDAC صوتی بلوتوث:\nکیفیت پخش" + + "پخش جریانی: %1$s" "‏DNS خصوصی" "‏حالت DNS خصوصی را انتخاب کنید" @@ -223,9 +237,12 @@ "خودکار" "‏نام میزبان ارائه‌دهنده DNS خصوصی" "‏نام میزبان ارائه‌دهنده DNS خصوصی را وارد کنید" + "متصل نشد" "نمایش گزینه‌ها برای گواهینامه نمایش بی‌سیم" "‏افزایش سطح گزارش‌گیری Wi‑Fi، نمایش به ازای SSID RSSI در انتخاب‌کننده Wi‑Fi" "‏تصادفی کردن نشانی MAC هنگام اتصال به شبکه‌های Wi-Fi" + "کنتوردار" + "بدون کنتور" "اندازه‌های حافظه موقت ثبت‌کننده" "انتخاب اندازه‌ ثبت‌کننده در حافظه موقت ثبت" "حافظه دائم ثبت‌کننده پاک شود؟" @@ -360,14 +377,10 @@ "براساس میزان مصرف شما، %1$s باقی‌مانده است" "بسته به مصرفتان، حدوداً %1$s (%2$s) شارژ باقی است" "%1$s باقی مانده" - - - - - - - - + "با توجه به میزان مصرفتان (%2$s)، باید حدوداً تا %1$s شارژ داشته باشید" + "باتوجه به میزان مصرفتان، باید حدوداً تا %1$s شارژ داشته باشید" + "باید حدوداً تا %1$s (%2$s) شارژ داشته باشید" + "باید حدوداً تا %1$s شارژ داشته باشید" "کمتر از %1$s باقی مانده" "کمتر از %1$s شارژ باقی مانده است (%2$s)" "بیش از %1$s شارژ باقی مانده است (%2$s)" @@ -422,8 +435,7 @@ "ثبت‌شده" "ثبت نشده است" "در دسترس نیست" - - + "‏ویژگی تصادفی‌سازی MAC فعال است" ‏%1$d دستگاه متصل ‏%1$d دستگاه متصل @@ -443,6 +455,5 @@ "روز %1$s" "مدت" "هربار پرسیده شود" - - + "هم‌اکنون" diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml index 3f1d03685f2803d4ddf4dfc7b4e039be266cd441..fe85a6cae8c9477f6c47b9f7338a8b2c3ff18a2c 100644 --- a/packages/SettingsLib/res/values-fi/strings.xml +++ b/packages/SettingsLib/res/values-fi/strings.xml @@ -40,6 +40,10 @@ "Yhdistetty seuraavan kautta: %1$s" "Käytettävissä seuraavan kautta: %1$s" "Yhdistetty, ei internetyhteyttä" + + + + "Yhteyspiste tilapäisesti täynnä" "Yhdistetty, verkko: %1$s" "Käytettävissä, verkko: %1$s" @@ -63,6 +67,12 @@ "Yhdistetty (ei puhelimen ääntä), akun varaus %1$s %2$s" "Yhdistetty (ei median ääntä), akun varaus %1$s %2$s" "Yhdistetty (ei puhelimen tai median ääntä), akun varaustaso %1$s %2$s" + + + + + + "Median ääni" "Puhelut" "Tiedostonsiirto" @@ -109,6 +119,14 @@ "Kuulokkeet" "Syöttölisälaite" "Bluetooth" + + + + + + + + "Wi-Fi pois käytöstä" "Ei Wi-Fi-yhteyttä" "Wi-Fi-signaali – yksi palkki" @@ -188,7 +206,7 @@ "Pysy käynnissä" "Näyttö ei sammu puhelimen latautuessa" "Ota Bluetoothin HCI-tarkkailuloki käyttöön" - "Tallenna kaikki Bluetoothin HCl-paketit tiedostoon" + "Tallenna kaikki Bluetoothin HCl-paketit tiedostoon (ota Bluetooth käyttöön tämän asetuksen muuttamisen jälkeen)" "OEM:n lukituksen avaus" "Salli käynnistysohjelman lukituksen avaaminen" "Sallitaanko OEM:n lukituksen avaus?" @@ -207,15 +225,20 @@ "Bluetoothin AVRCP-versio" "Valitse Bluetoothin AVRCP-versio" "Bluetooth-äänen koodekki" - "Valitse Bluetooth-äänen koodekki" + + "Bluetooth-ääninäytteen siirtonopeus" - "Valitse Bluetooth-äänen koodekki:\nSiirtonopeus" + + "Bluetooth-äänen bittiä/näyte-arvo" - "Valitse Bluetooth-äänen koodekki:\nBittiä/näyte" + + "Bluetooth-äänen kanavatila" - "Valitse Bluetooth-äänen koodekki:\nKanavatila" + + "Bluetooth-äänen LDAC-koodekki: Toiston laatu" - "Valitse Bluetooth-äänen LDAC-koodekki:\nToiston laatu" + + "Striimaus: %1$s" "Yksityinen DNS" "Valitse yksityinen DNS-tila" @@ -223,9 +246,15 @@ "Automaattinen" "Yksityisen DNS-tarjoajan isäntänimi" "Anna isäntänimi tai DNS-tarjoaja." + + "Näytä langattoman näytön sertifiointiin liittyvät asetukset" "Lisää Wi‑Fin lokikirjaustasoa, näytä SSID RSSI -kohtaisesti Wi‑Fi-valitsimessa." "Käytä satunnaista MAC-osoitetta, kun yhdistät Wi-Fi-verkkoon" + + + + "Lokipuskurien koot" "Valitse puskurikohtaiset lokikoot" "Tyhjennetäänkö lokityökalun pysyvä tallennustila?" @@ -360,14 +389,10 @@ "Noin %1$s jäljellä käytön perusteella" "Noin %1$s jäljellä käyttösi perusteella (%2$s)" "%1$s jäljellä" - - - - - - - - + "Varaus loppuu käyttösi perusteella noin %1$s (%2$s)" + "Varaus loppuu käyttösi perusteella noin %1$s" + "Varaus loppuu noin %1$s (%2$s)" + "Varaus loppuu noin %1$s" "Alle %1$s jäljellä" "Alle %1$s jäljellä (%2$s)" "Yli %1$s jäljellä (%2$s)" @@ -422,8 +447,7 @@ "Rekisteröity" "Ei rekisteröity" "Ei käytettävissä" - - + "MAC-osoite satunnaistetaan" %1$d laitetta liitetty %1$d laite liitetty @@ -443,6 +467,5 @@ "%1$s" "Kesto" "Kysy aina" - - + "Äsken" diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml index e3d789628d34d336a10290996391380a605b4cc4..270a8681959f20c2dfa99382a04085245d5c7628 100644 --- a/packages/SettingsLib/res/values-fr-rCA/strings.xml +++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml @@ -40,6 +40,10 @@ "Connecté par %1$s" "Accessible par %1$s" "Connecté, aucun accès à Internet" + + + + "Le point d\'accès est temporairement plein" "Connecté par %1$s" "Accessible par %1$s" @@ -63,6 +67,12 @@ "Connecté (aucun téléphone), pile chargée à %1$s %2$s" "Connecté (aucun média), pile chargée à %1$s %2$s" "Connecté (aucun téléphone ni média), pile chargée à %1$s %2$s" + + + + + + "Paramètres audio du support" "Appels téléphoniques" "Transfert de fichier" @@ -109,6 +119,14 @@ "Écouteurs" "Périphérique d\'entrée" "Bluetooth" + + + + + + + + "Wi-Fi désactivé." "Wi-Fi déconnecté." "Wi-Fi : une barre." @@ -188,7 +206,8 @@ "Rester activé" "L\'écran ne se met jamais en veille lors du chargement" "Activer le journal HCI Snoop Bluetooth" - "Capturer tous les paquets HCI Bluetooth dans un fichier" + + "Déverrouillage par le fabricant" "Autoriser le déverrouillage du fichier d\'amorce" "Permettre le déverrouillage par le fabricant?" @@ -207,15 +226,20 @@ "Version du profil Bluetooth AVRCP" "Sélectionner la version du profil Bluetooth AVRCP" "Codec audio Bluetooth" - "Sélectionner le codec audio Bluetooth" + + "Taux d\'échantillonnage pour l\'audio Bluetooth" - "Sélectionner le codec audio Bluetooth :\nTaux d\'échantillonnage" + + "Bits par échantillon pour l\'audio Bluetooth" - "Sélectionner le codec audio Bluetooth :\nBits par échantillon" + + "Mode de canal pour l\'audio Bluetooth" - "Sélectionner le codec audio Bluetooth :\nMode de chaîne" + + "Codec audio Bluetooth LDAC : qualité de lecture" - "Sélectionner le codec audio Bluetooth LDAC :\nQualité de lecture" + + "Diffusion : %1$s" "DNS privé" "Sélectionnez le mode DNS privé" @@ -223,9 +247,15 @@ "Automatique" "Nom d\'hôte du fournisseur DNS privé" "Entrez le nom d\'hôte du fournisseur DNS" + + "Afficher les options pour la certification d\'affichage sans fil" "Détailler davantage les données Wi-Fi, afficher par SSID RSSI dans sélect. Wi-Fi" "Sélectionner l\'adresse MAC de manière aléatoire lors de la connexion aux réseaux Wi-Fi" + + + + "Tailles des mémoires tampons d\'enregistreur" "Tailles enreg. par tampon journal" "Supprimer les données de l\'enregistreur?" @@ -360,14 +390,10 @@ "Il reste environ %1$s en fonction de votre usage" "Il reste environ %1$s en fonction de votre usage (%2$s)" "Temps restant : %1$s" - - - - - - - - + "Devrait durer jusqu\'à environ %1$s, en fonction de votre usage (%2$s)" + "Devrait durer jusqu\'à environ %1$s, en fonction de votre usage" + "Devrait durer jusqu\'à environ %1$s (%2$s)" + "Devrait durer jusqu\'à environ %1$s" "Il reste moins de %1$s" "Il reste moins de %1$s (%2$s)" "Il reste plus de %1$s (%2$s)" @@ -422,8 +448,7 @@ "Enregistré" "Non enregistré" "Non accessible" - - + "Les adresses MAC sont randomisées" %1$d appareil connecté %1$d appareils connectés @@ -443,6 +468,5 @@ "le %1$s" "Durée" "Toujours demander" - - + "À l\'instant" diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml index 2fa0364e865865b7f5e92dd3f7f0650750a741be..6712813cf611392f77950d02b39623e9f29b5fac 100644 --- a/packages/SettingsLib/res/values-fr/strings.xml +++ b/packages/SettingsLib/res/values-fr/strings.xml @@ -40,6 +40,10 @@ "Connecté via %1$s" "Disponible via %1$s" "Connecté, aucun accès à Internet" + + + + "Point d\'accès temporairement plein" "Connecté via %1$s" "Disponible via %1$s" @@ -63,6 +67,12 @@ "Connecté (aucun téléphone), batterie à %1$s%2$s" "Connecté (aucun contenu multimédia), batterie à %1$s%2$s" "Connecté (aucun téléphone ni contenu multimédia), batterie à %1$s%2$s" + + + + + + "Multimédia" "Appels téléphoniques" "Transfert de fichier" @@ -109,6 +119,14 @@ "Casque audio" "Périphérique d\'entrée" "Bluetooth" + + + + + + + + "Wi-Fi désactivé" "Wi-Fi déconnecté" "Signal Wi-Fi faible" @@ -188,7 +206,7 @@ "Rester activé" "L\'écran ne se met jamais en veille lors du chargement." "Activer journaux HCI Bluetooth" - "Enregistrer tous les paquets HCI Bluetooth dans un fichier" + "Enregistrer tous les paquets HCI Bluetooth dans un fichier (Activez/désactivez le Bluetooth après avoir modifié ce paramètre.)" "Déverrouillage OEM" "Autoriser le déverrouillage du chargeur d\'amorçage" "Autoriser le déverrouillage OEM ?" @@ -207,15 +225,20 @@ "Version Bluetooth AVRCP" "Sélectionner la version Bluetooth AVRCP" "Codec audio Bluetooth" - "Sélectionner le codec audio Bluetooth" + + "Taux d\'échantillonnage audio Bluetooth" - "Sélectionner le codec audio Bluetooth :\nTaux d\'échantillonnage" + + "Nombre de bits par échantillon pour l\'audio Bluetooth" - "Sélectionner le codec audio Bluetooth :\nBits par échantillon" + + "Mode de chaîne de l\'audio Bluetooth" - "Sélectionner le codec audio Bluetooth :\nMode de chaîne" + + "Codec audio Bluetooth LDAC : qualité de lecture" - "Sélectionner le codec audio Bluetooth LDAC :\nQualité de lecture" + + "Diffusion : %1$s" "DNS privé" "Sélectionner le mode DNS privé" @@ -223,9 +246,15 @@ "Automatique" "Nom d\'hôte du fournisseur DNS privé" "Saisissez le nom d\'hôte du fournisseur DNS" + + "Afficher les options de la certification de l\'affichage sans fil" "Détailler plus infos Wi-Fi, afficher par RSSI de SSID dans outil sélection Wi-Fi" "Sélectionner l\'adresse MAC de manière aléatoire lors de la connexion aux réseaux Wi-Fi" + + + + "Tailles mémoires tampons enregistr." "Tailles enreg. par tampon journal" "Effacer l\'espace de stockage persistant de l\'enregistreur ?" @@ -360,14 +389,10 @@ "Temps restant en fonction de votre utilisation : environ %1$s" "Temps restant en fonction de votre utilisation (%2$s) : environ %1$s" "Temps restant : %1$s" - - - - - - - - + "Devrait durer jusqu\'à environ %1$s en fonction de l\'utilisation (%2$s)" + "Devrait durer jusqu\'à environ %1$s en fonction de l\'utilisation" + "Devrait durer jusqu\'à environ %1$s (%2$s)" + "Devrait durer jusqu\'à environ %1$s" "Il reste moins de %1$s" "Il reste moins de %1$s (%2$s)" "Il reste plus de %1$s (%2$s)" @@ -422,8 +447,7 @@ "Enregistré" "Non enregistré" "Non disponible" - - + "La sélection des adresses MAC est aléatoire" %1$d appareil connecté %1$d appareils connectés @@ -443,6 +467,5 @@ "le %1$s" "Durée" "Toujours demander" - - + "À l\'instant" diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml index 995658d5003a188bfbf29811a8e199919426969c..bacea23f480562096362359be270e75a71334852 100644 --- a/packages/SettingsLib/res/values-gl/strings.xml +++ b/packages/SettingsLib/res/values-gl/strings.xml @@ -40,6 +40,8 @@ "Conectado a través de %1$s" "Dispoñible a través de %1$s" "Conexión sen Internet" + "Non hai conexión a Internet" + "É obrigatorio iniciar sesión" "O punto de acceso está temporalmente cheo" "Conectado a través de %1$s" "Dispoñible a través de %1$s" @@ -63,6 +65,9 @@ "Conectado a %2$s (sen teléfono), batería ao %1$s" "Conectado a %2$s (sen audio multimedia), batería ao %1$s" "Conectado a %2$s (sen teléfono nin audio multimedia), batería ao %1$s" + "Dispositivo activo, %1$s de batería" + "%1$s de batería" + "Activo" "Audio multimedia" "Chamadas telefónicas" "Transferencia de ficheiros" @@ -109,6 +114,10 @@ "Auriculares" "Periférico de entrada" "Bluetooth" + "Sincronizando audiófono esquerdo…" + "Sincronizando audiófono dereito…" + "Esquerdo: %1$s de batería" + "Dereito: %1$s de batería" "Wifi desactivada." "Wifi desconectada." "Unha barra de wifi." @@ -188,7 +197,7 @@ "Pantalla activa" "A pantalla nunca estará en modo de suspensión durante a carga" "Activar rexistro de busca HCI Bluetooth" - "Capturar todos os paquetes HCI Bluetooth nun ficheiro" + "Captura todos os paquetes HCI Bluetooth nun ficheiro (activa/desactiva o Bluetooth despois de cambiar esta opción de configuración)" "Desbloqueo do OEM" "Permitir que se desbloqueo o cargador de inicio" "Queres permitir o desbloqueo do OEM?" @@ -207,15 +216,20 @@ "Versión AVRCP de Bluetooth" "Selecciona a versión AVRCP de Bluetooth" "Códec de audio por Bluetooth" - "Seleccionar códec de audio por Bluetooth" + + "Taxa de mostraxe de audio por Bluetooth" - "Seleccionar códec de audio por Bluetooth:\nfrecuencia de mostraxe" + + "Bits por mostra de audio por Bluetooth" - "Seleccionar códec de audio por Bluetooth:\nbits por mostra" + + "Modo de canle de audio por Bluetooth" - "Seleccionar códec de audio por Bluetooth:\nmodo de canle" + + "Códec LDAC de audio por Bluetooth: calidade de reprodución" - "Seleccionar códec LDAC de audio por Bluetooth:\ncalidade de reprodución" + + "Reprodución en tempo real: %1$s" "DNS privado" "Selecciona o modo de DNS privado" @@ -223,9 +237,12 @@ "Automático" "Nome de host de provedor de DNS privado" "Introduce o nome de host de provedor de DNS" + "Non se puido conectar" "Mostra opcións para o certificado de visualización sen fíos" "Aumentar o nivel de rexistro da wifi, mostrar por SSID RSSI no selector de wifi" "Selecciona aleatoriamente o enderezo MAC cando te conectes a redes wifi" + "De pago por consumo" + "Sen pago por consumo" "Tamaños de búfer de rexistrador" "Seleccionar tamaños por búfer" "Queres borrar o almacenamento continuo do rexistrador?" @@ -360,14 +377,10 @@ "Tempo restante aproximado en función do uso: %1$s" "Tempo restante aproximado en función do uso: %1$s (%2$s)" "Tempo restante: %1$s" - - - - - - - - + "En función do uso, debería durar aproximadamente ata a seguinte hora: %1$s (%2$s)" + "En función do uso, debería durar aproximadamente ata a seguinte hora: %1$s" + "Debería durar aproximadamente ata a seguinte hora: %1$s (%2$s)" + "Debería durar aproximadamente ata a seguinte hora: %1$s" "Tempo restante inferior a %1$s" "Tempo restante: menos de %1$s (%2$s)" "Tempo restante: máis de %1$s (%2$s)" @@ -422,8 +435,7 @@ "Rexistrado" "Non rexistrado" "Non dispoñible" - - + "O enderezo MAC é aleatorio" %1$d dispositivos conectados %1$d dispositivo conectado @@ -443,6 +455,5 @@ "na seguinte data: %1$s" "Duración" "Preguntar sempre" - - + "Agora mesmo" diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml index 5522a74044b542cf5f58ca730e9a15a67d090387..89729306c45ae412402d2d003f3dad42d4c1e3b6 100644 --- a/packages/SettingsLib/res/values-gu/strings.xml +++ b/packages/SettingsLib/res/values-gu/strings.xml @@ -40,6 +40,10 @@ "%1$s દ્વારા કનેક્ટ થયેલ" "%1$s દ્વારા ઉપલબ્ધ" "કનેક્ટ કર્યું, કોઈ ઇન્ટરનેટ નથી" + + + + "ઍક્સેસ પૉઇન્ટ અસ્થાયીરૂપે ભરાયેલ છે" "%1$s દ્વારા કનેક્ટ થયેલ" "%1$s દ્વારા ઉપલબ્ધ" @@ -63,6 +67,12 @@ "%2$s સાથે કનેક્ટ થયેલ (કોઈ ફોન નથી), બૅટરી %1$s" "%2$s સાથે કનેક્ટ થયેલ (કોઈ મીડિયા નથી), બૅટરી %1$s" "%2$s સાથે કનેક્ટ થયેલ (કોઈ ફોન અથવા મીડિયા નથી), બૅટરી %1$s" + + + + + + "મીડિયા ઑડિઓ" "ફોન કૉલ" "ફાઇલ સ્થાનાંતરણ" @@ -109,6 +119,14 @@ "હેડફોન" "ઇનપુટ પેરિફેરલ" "બ્લૂટૂથ" + + + + + + + + "Wifi બંધ." "Wifi ડિસ્કનેક્ટ થયું." "Wifi એક બાર." @@ -188,7 +206,8 @@ "સક્રિય રાખો" "ચાર્જિંગ દરમિયાન સ્ક્રીન ક્યારેય નિષ્ક્રિય થશે નહીં" "બ્લૂટૂથ HCI સ્નૂપ લૉગ સક્ષમ કરો" - "ફાઇલમાં તમામ બ્લૂટૂથ HCI પૅકેટ્સ કેપ્ચર કરો" + + "OEM અનલૉકિંગ" "બુટલોડર અનલૉક કરવાની મંજૂરી આપો" "OEM ને અનલૉક કરવાની મંજૂરી આપીએ?" @@ -207,15 +226,20 @@ "બ્લૂટૂથ AVRCP સંસ્કરણ" "બ્લૂટૂથ AVRCP સંસ્કરણ પસંદ કરો" "બ્લૂટૂથ ઑડિઓ કોડેક" - "બ્લૂટૂથ ઑડિઓ LDAC કોડેક પસંદ કરો" + + "બ્લૂટૂથ ઑડિઓ નમૂના દર" - "બ્લૂટૂથ ઑડિઓ LDAC કોડેક પસંદ કરો:\nનમૂના દર" + + "નમૂના દીઠ બ્લૂટૂથ ઑડિઓ બિટ" - "બ્લૂટૂથ ઑડિઓ કોડેક પસંદ કરો:\nનમૂના દીઠ બિટ" + + "બ્લૂટૂથ ઑડિઓ ચેનલ મોડ" - "બ્લૂટૂથ ઑડિઓ કોડેક પસંદ કરો:\nચૅનલ મોડ" + + "બ્લૂટૂથ ઑડિઓ LDAC કોડેક: પ્લેબૅક ગુણવત્તા" - "બ્લૂટૂથ ઑડિઓ LDAC કોડેક પસંદ કરો:\nપ્લેબૅક ગુણવત્તા" + + "સ્ટ્રીમિંગ: %1$s" "ખાનગી DNS" "ખાનગી DNS મોડને પસંદ કરો" @@ -223,9 +247,15 @@ "આપમેળે" "ખાનગી DNS પ્રદાતા હોસ્ટનું નામ" "DNS પ્રદાતાના હોસ્ટનું નામ દાખલ કરો" + + "વાયરલેસ ડિસ્પ્લે પ્રમાણપત્ર માટેના વિકલ્પો બતાવો" "વાઇ-ફાઇ લોગિંગ સ્તર વધારો, વાઇ-ફાઇ પીકરમાં SSID RSSI દીઠ બતાવો" "વાઇ-ફાઇ નેટવર્ક સાથે જ્યારે કનેક્ટ કરી રહ્યાં હોય ત્યારે MAC ઍડ્રેસને રેન્ડમાઇઝ કરો" + + + + "લોગર બફર કદ" "લૉગ દીઠ લૉગર કદ બફર પસંદ કરો" "લૉગર નિરંતર સ્ટોરેજ સાફ કરીએ?" @@ -360,14 +390,10 @@ "તમારા વપરાશનાં આધારે લગભગ %1$s બાકી છે" "તમારા વપરાશના આધારે લગભગ %1$s બાકી છે (%2$s)" "%1$s બાકી" - - - - - - - - + "તમારા વપરાશના આધારે લગભગ %1$s સુધી ચાલવી જોઈએ (%2$s)" + "તમારા વપરાશના આધારે લગભગ %1$s સુધી ચાલવી જોઈએ" + "લગભગ %1$s સુધી ચાલવી જોઈએ (%2$s)" + "લગભગ %1$s સુધી ચાલવી જોઈએ" "%1$s કરતાં ઓછો સમય બાકી છે" "%1$s કરતાં ઓછો સમય બાકી છે (%2$s)" "%1$s કરતાં વધુ સમય બાકી છે (%2$s)" @@ -422,8 +448,7 @@ "રજિસ્ટર કરેલ" "રજિસ્ટર કરેલ નથી" "અનુપલબ્ધ" - - + "MACને રેન્ડમ કરેલ છે" %1$d ઉપકરણ કનેક્ટ કર્યું %1$d ઉપકરણો કનેક્ટ કર્યા @@ -443,6 +468,5 @@ "%1$s વાગ્યે" "અવધિ" "દર વખતે પૂછો" - - + "હમણાં જ" diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml index 13047fd1753ffeb279805f30b4971c86b42515af..296da2dd1bd3d0020bad80c7a09681a6050591b2 100644 --- a/packages/SettingsLib/res/values-hi/strings.xml +++ b/packages/SettingsLib/res/values-hi/strings.xml @@ -40,6 +40,10 @@ "%1$s के द्वारा उपलब्ध" "%1$s के द्वारा उपलब्ध" "कनेक्ट हो गया है, लेकिन इंटरनेट नहीं है" + + + + "एक्सेस प्वाइंट फ़िलहाल भरा हुआ है" "%1$s के ज़रिए कनेक्ट" "%1$s के ज़रिए उपलब्ध" @@ -63,6 +67,12 @@ "जुड़ गया (फ़ोन के ऑडियो को छोड़कर), बैटरी का लेवल %1$s%2$s" "जुड़ गया (मीडिया ऑडियो को छोड़कर), बैटरी का लेवल %1$s%2$s" "जुड़ गया (फ़ोन या मीडिया ऑडियो को छोड़कर), बैटरी का लेवल %1$s%2$s" + + + + + + "मीडिया ऑडियो" "फ़ोन कॉल" "फ़ाइल स्थानांतरण" @@ -109,6 +119,14 @@ "हेडफ़ोन" "इनपुट पेरिफ़ेरल" "ब्लूटूथ" + + + + + + + + "वाई-फ़ाई बंद है." "वाई-फ़ाई डिसकनेक्ट है." "वाई-फ़ाई का एक बार है." @@ -188,7 +206,8 @@ "स्क्रीन को चालू रखें" "चार्ज करते समय स्‍क्रीन कभी भी कम बैटरी मोड में नहीं जाएगी" "ब्लूटूथ HCI स्‍नूप लॉग चालू करें" - "फ़ाइल के सभी ब्लूटूथ HCI पैकेट कैप्‍चर करें" + + "OEM अनलॉक करना" "बूटलोडर को अनलाॅक किए जाने की अनुमति दें" "OEM अनलॉक करने की अनुमति दें?" @@ -207,15 +226,20 @@ "ब्लूटूथ AVRCP वर्शन" "ब्लूटूथ AVRCP वर्शन चुनें" "ब्लूटूथ ऑडियो कोडेक" - "ब्लूटूथ ऑडियो कोडेक चुनें" + + "ब्लूटूथ ऑडियो नमूना दर" - "ब्लूटूथ ऑडियो कोडेक चुनें:\nनमूना दर" + + "ब्लूटूथ ऑडियो बिट प्रति नमूना" - "ब्लूटूथ ऑडियो कोडेक चुनें:\nबिट प्रति नमूना" + + "ब्लूटूथ ऑडियो चैनल मोड" - "ब्लूटूथ ऑडियो कोडेक चुनें:\nचैनल मोड" + + "ब्लूटूथ ऑडियो LDAC कोडेक: प्लेबैक क्वालिटी" - "ब्लूटूथ ऑडियो LDAC कोडेक चुनें:\nप्लेबैक क्वालिटी" + + "चलाया जा रहा है: %1$s" "निजी DNS" "निजी DNS मोड चुनें" @@ -223,9 +247,15 @@ "अपने आप" "निजी DNS सेवा देने वाले का होस्टनाम" "DNS सेवा देने वाले का होस्टनाम डालें" + + "वायरलेस दिखाई देने के लिए प्रमाणन विकल्प दिखाएं" "वाई-फ़ाई प्रवेश स्तर बढ़ाएं, वाई-फ़ाई पिकर में प्रति SSID RSSI दिखाएं" "वाई-फ़ाई से जुड़ते समय अलग-अलग एमएसी पते इस्तेमाल करें" + + + + "लॉगर बफ़र आकार" "प्रति लॉग बफ़र लॉगर आकार चुनें" "लॉगर सतत मेमोरी साफ़ करें?" @@ -360,14 +390,10 @@ "आपके उपयोग के आधार पर लगभग %1$s का समय बचा है" "आपके इस्तेमाल के हिसाब से बैटरी लगभग %1$s में खत्म हो जाएगी (%2$s)" "%1$s शेष" - - - - - - - - + "आपके इस्तेमाल के हिसाब से बैटरी लगभग %1$s चलेगी (%2$s)" + "आपके इस्तेमाल के हिसाब से बैटरी लगभग %1$s चलेगी" + "बैटरी लगभग %1$s चलेगी (%2$s)" + "बैटरी लगभग %1$s चलेगी" "%1$s से कम समय बचा है" "%1$s से कम बैटरी बची है (%2$s)" "%1$s से ज़्यादा चलने लायक बैटरी बची है (%2$s)" @@ -422,8 +448,7 @@ "रजिस्टर है" "रजिस्टर नहीं है" "अनुपलब्ध" - - + "एमएसी पता रैंडम पर सेट है" %1$d डिवाइस जुड़े हैं %1$d डिवाइस जुड़े हैं @@ -443,6 +468,5 @@ "अलार्म %1$s को बजेगा" "अवधि" "हर बार पूछें" - - + "अभी-अभी" diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml index 97298bb4165b052c06239362e4a6312e101be28e..8f4cff8d59f1b6c190eb010b9bcff18118325d06 100644 --- a/packages/SettingsLib/res/values-hr/strings.xml +++ b/packages/SettingsLib/res/values-hr/strings.xml @@ -40,6 +40,10 @@ "Povezano putem %1$s" "Dostupno putem %1$s" "Povezano, bez interneta" + + + + "Pristupna je točka privremeno puna" "Povezano putem mreže %1$s" "Dostupno putem mreže %1$s" @@ -63,6 +67,12 @@ "Povezano (bez telefona), baterija %1$s%2$s" "Povezano (bez medija), baterija %1$s%2$s" "Povezano (bez telefona i medija), baterija %1$s%2$s" + + + + + + "Medijski zvuk" "Telefonski pozivi" "Prijenos datoteke" @@ -109,6 +119,14 @@ "Slušalice" "Periferni uređaj za unos" "Bluetooth" + + + + + + + + "Wi-Fi je isključen." "Wi-Fi je isključen." "Wi-Fi signal ima jedan stupac." @@ -188,7 +206,7 @@ "Ne pokreći mirovanje" "Zaslon nikad neće prijeći u mirovanje tijekom punjenja" "Zapisi za Bluetooth HCI" - "Snimi sve Bluetooth HCI pakete u datoteci" + "Snimi sve Bluetooth HCI pakete u datoteci (uključite/isključite Bluetooth nakon promjene te postavke)" "OEM otključavanje" "Neka kôd za pokretanje sustava bude otključan" "Želite li dopustiti OEM otključavanje?" @@ -207,15 +225,20 @@ "Verzija AVRCP-a za Bluetooth" "Odaberite verziju AVRCP-a za Bluetooth" "Kodek za Bluetooth Audio" - "Odaberi kodek za Bluetooth Audio" + + "Brzina uzorka za Bluetooth Audio" - "Odaberi kodek za Bluetooth Audio:\nbrzina uzorkovanja" + + "Bitovi po uzorku za Bluetooth Audio" - "Odaberi kodek za Bluetooth Audio:\nbitovi po uzorku" + + "Način kanala za Bluetooth Audio" - "Odaberi kodek za Bluetooth Audio:\nnačin kanala" + + "Kodek za Bluetooth Audio LDAC: kvaliteta reprodukcije" - "Odaberi kodek za Bluetooth Audio LDAC:\nkvaliteta reprodukcije" + + "Strujanje: %1$s" "Privatni DNS" "Odaberite način privatnog DNS-a" @@ -223,9 +246,15 @@ "Automatski" "Naziv hosta davatelja usluge privatnog DNS-a" "Unesite naziv hosta davatelja usluge DNS-a" + + "Prikaži opcije za certifikaciju bežičnog prikaza" "Povećana razina prijave na Wi‑Fi, prikaz po SSID RSSI-ju u Biraču Wi‑Fi-ja" "Nasumično odaberi MAC adresu pri povezivanju s Wi-Fi mrežama" + + + + "Veličine međuspremnika zapisnika" "Odaberite veličinu međuspremnika zapisnika" "Želite li izbrisati trajnu pohranu zapisivača?" @@ -360,14 +389,10 @@ "Još otprilike %1$s na temelju vaše upotrebe" "Još otprilike %1$s na temelju vaše upotrebe (%2$s)" "Još %1$s" - - - - - - - - + "Otprilike bi trebalo trajati do %1$s na temelju vaše upotrebe (%2$s)" + "Otprilike bi trebalo trajati do %1$s na temelju vaše upotrebe" + "Otprilike bi trebalo trajati do %1$s (%2$s)" + "Otprilike bi trebalo trajati do %1$s" "Preostalo je manje od %1$s" "Preostalo je manje od %1$s (%2$s)" "Preostalo je više od %1$s (%2$s)" @@ -422,8 +447,7 @@ "Registrirano" "Nije registrirano" "Nije dostupno" - - + "MAC adresa određena je nasumično" Povezan je %1$d uređaj Povezana su %1$d uređaja @@ -444,6 +468,5 @@ "u %1$s" "Trajanje" "Pitaj svaki put" - - + "Upravo sad" diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml index 0b27780caa979d4f3481ec63aa0ce64449f9619e..2c314788fa1dea8e939e79235ae71ba22aee08d0 100644 --- a/packages/SettingsLib/res/values-hu/strings.xml +++ b/packages/SettingsLib/res/values-hu/strings.xml @@ -40,6 +40,10 @@ "Csatlakozva a következőn keresztül: %1$s" "Elérhető a következőn keresztül: %1$s" "Csatlakozva, nincs internet-hozzáférés" + + + + "A hozzáférési pont átmenetileg megtelt" "Csatlakozva a következőn keresztül: %1$s" "Elérhető a következőn keresztül: %1$s" @@ -63,6 +67,12 @@ "Csatlakoztatva (telefonhang nélkül); az akkumulátor töltöttségi szintje: %1$s%2$s" "Csatlakoztatva (médiahang nélkül); az akkumulátor töltöttségi szintje: %1$s%2$s" "Csatlakoztatva (nincs telefon- és médiahang); az akkumulátor töltöttségi szintje: %1$s%2$s" + + + + + + "Média audió" "Telefonhívások" "Fájlátvitel" @@ -109,6 +119,14 @@ "Fejhallgató" "Beviteli periféria" "Bluetooth" + + + + + + + + "Wi-Fi kikapcsolva." "Nincs Wi-Fi-kapcsolat." "Wi-Fi-jel: egy sáv." @@ -188,7 +206,7 @@ "Nem kapcsolódik ki" "A képernyő soha nem kapcsol ki töltés során" "Bluetooth HCI snoop napló engedélyezése" - "Az összes Bluetooth HCI-csomag rögzítése egy fájlban" + "Az összes Bluetooth HCI-csomag rögzítése egy fájlban (Bluetooth bekapcsolása a beállítás módosítása után)" "OEM-feloldás" "A rendszerbetöltő feloldásának engedélyezése" "Engedélyezi az OEM-feloldást?" @@ -207,15 +225,20 @@ "A Bluetooth AVRCP-verziója" "A Bluetooth AVRCP-verziójának kiválasztása" "Bluetooth hang – Kodek" - "Bluetooth hangkodek kiválasztása" + + "Bluetooth hang – mintavételezési gyakoriság" - "Bluetooth hangkodek kiválasztása:\nmintavételi gyakoriság" + + "Bluetooth hang – bit/minta" - "Bluetooth hangkodek kiválasztása:\nbit/minta" + + "Bluetooth hang – Csatornamód" - "Bluetooth hangkodek kiválasztása:\ncsatornamód" + + "Bluetooth LDAC hangkodek: lejátszási minőség" - "Bluetooth LDAC hangkodek kiválasztása:\nlejátszási minőség" + + "Streamelés: %1$s" "Privát DNS" "„Privát DNS” mód kiválasztása" @@ -223,9 +246,15 @@ "Automatikus" "Privát DNS-szolgáltató gazdagépneve" "Adja meg a DNS-szolgáltató gazdagépnevét" + + "Vezeték nélküli kijelző tanúsítványával kapcsolatos lehetőségek megjelenítése" "Wi‑Fi-naplózási szint növelése, RSSI/SSID megjelenítése a Wi‑Fi-választóban" "MAC-cím véletlenszerű generálása Wi‑Fi-hálózatra való csatlakozáskor" + + + + "Naplózási puffer mérete" "Naplózási pufferméret kiválasztása" "Törli a naplózó program állandó tárhelyét?" @@ -360,14 +389,10 @@ "Körülbelül %1$s van hátra az eszköz igénybevétele alapján" "A használat alapján nagyjából %1$s maradt (%2$s)" "%1$s van hátra" - - - - - - - - + "A használat alapján nagyjából még ennyit bír: %1$s (%2$s)" + "A használat alapján nagyjából még ennyit bír: %1$s" + "Nagyjából még ennyit bír: %1$s (%2$s)" + "Nagyjából még ennyit bír: %1$s" "Kevesebb mint %1$s van hátra" "Kevesebb mint %1$s van hátra (%2$s)" "Kevesebb mint %1$s van hátra (%2$s)" @@ -422,8 +447,7 @@ "Regisztrált" "Nem regisztrált" "Nem érhető el" - - + "A MAC-cím generálása véletlenszerű." %1$d eszköz csatlakozik %1$d eszköz csatlakozik @@ -443,6 +467,5 @@ "ezen a napon: %1$s" "Időtartam" "Mindig kérdezzen rá" - - + "Az imént" diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml index bf7f492129be6aae05429664c44317418d3d36d3..de2cfc92760b7a6ee9b995d1c00ca656b3fa65b5 100644 --- a/packages/SettingsLib/res/values-hy/strings.xml +++ b/packages/SettingsLib/res/values-hy/strings.xml @@ -40,6 +40,10 @@ "Կապակցված է %1$s-ի միջոցով" "Հասանելի է %1$s-ի միջոցով" "Միացված է, սակայն ինտերնետ կապ չկա" + + + + "Հասանելիության կետը ժամանակավորապես լիքն է" "Միացված է %1$s-ի միջոցով" "Հասանելի է %1$s-ի միջոցով" @@ -63,6 +67,12 @@ "Միացված է (հեռախոս չկա), մարտկոցի լիցքը՝ %1$s%2$s" "Միացված է (մեդիա չկա), մարտկոցի լիցքը՝ %1$s%2$s" "Միացված է (հեռախոս կամ մեդիա չկա), մարտկոցի լիցքը՝ %1$s%2$s" + + + + + + "Մեդիա աուդիո" "Հեռախոսազանգեր" "Ֆայլերի փոխանցում" @@ -109,6 +119,14 @@ "Ականջակալ" "Մուտքի արտաքին սարքեր" "Bluetooth" + + + + + + + + "Wi-Fi-ն անջատված է:" "Wi-Fi-ը կապակցված չէ:" "Wi-Fi-ի ուժգնությունը՝ մեկ գիծ:" @@ -188,7 +206,7 @@ "Մնալ արթուն" "Էկրանը երբեք չի քնի լիցքավորման ընթացքում" "Միացնել Bluetooth HCI snoop log-ը" - "Կորզել բոլոր bluetooth HCI փաթեթները մի ֆայլում" + "Բոլոր Bluetooth HCI փաթեթները պահել մեկ ֆայլում (այս կարգավորումը փոխելուց հետո անհրաժեշտ է վերագործարկել Bluetooth-ը)" "OEM ապակողպում" "Թույլ տալ սկզբնաբեռնման բեռնիչի ապակողպումը" "Թույլատրե՞լ OEM ապակողպումը:" @@ -207,15 +225,20 @@ "Bluetooth AVRCP տարբերակը" "Ընտրել Bluetooth AVRCP տարբերակը" "Bluetooth աուդիո կոդեկ" - "Ընտրեք Bluetooth աուդիո կոդեկը" + + "Bluetooth աուդիոյի Ընդհատավորման հաճախականությունը" - "Ընտրեք Bluetooth աուդիո կոդեկը՝\nընդհատավորման հաճախականություն" + + "Bluetooth աուդիո, բիթ / նմուշ" - "Ընտրեք Bluetooth աուդիո կոդեկը՝\nբիթ/նմուշ" + + "Bluetooth աուդիո կապուղու ռեժիմը" - "Ընտրեք Bluetooth աուդիո կոդեկը՝\nկապուղու ռեժիմ" + + "Bluetooth աուդիո LDAC կոդեկ՝ նվագարկման որակ" - "Ընտրեք Bluetooth աուդիո LDAC կոդեկը՝\nնվագարկման որակ" + + "Հեռարձակում՝ %1$s" "Անհատական DNS" "Ընտրեք անհատական DNS սերվերի ռեժիմը" @@ -223,9 +246,15 @@ "Ավտոմատ" "Անհատական DNS ծառայության մատակարարի խնամորդի անունը" "Մուտքագրեք DNS ծառայության մատակարարի խնամորդի անունը" + + "Ցույց տալ անլար էկրանի հավաստագրման ընտրանքները" "Բարձրացնել մակարդակը, Wi‑Fi ընտրիչում ամեն մի SSID-ի համար ցույց տալ RSSI" "Պատահականորեն ընտրել MAC հասցեն Wi-Fi ցանցերին միանալիս" + + + + "Տեղեկամատյանի պահնակի չափերը" "Ընտրեք տեղեկամատյանի չափը մեկ պահնակի համար" "Ջնջե՞լ մատյանի մշտական հիշողությունը:" @@ -360,14 +389,10 @@ "Մնացել է մոտ %1$s՝ օգտագործման եղանակից կախված" "Լիցքը (%2$s) կբավարարի մոտ %1$s՝ կախված օգտագործման եղանակից" "Մնացել է %1$s" - - - - - - - - + "Լիցքը (%2$s) պետք է, որ բավականացնի մոտ %1$s՝ կախված օգտագործման եղանակից" + "Լիցքը պետք է, որ բավականացնի մոտ %1$s՝ կախված օգտագործման եղանակից" + "Լիցքը (%2$s) պետք է, որ բավականացնի մոտ %1$s" + "Լիցքը պետք է, որ բավականացնի մոտ %1$s" "Մնացել է %1$s-ից պակաս" "Մնացել է %1$s-ից պակաս (%2$s)" "Մնացել է ավելի քան %1$s (%2$s)" @@ -422,8 +447,7 @@ "Գրանցված է" "Գրանցված չէ" "Անհասանելի" - - + "MAC հասցեն պատահականորեն է փոխվում" Միացված է %1$d սարք Միացված է %1$d սարք @@ -443,6 +467,5 @@ "%1$s-ին" "Տևողություն" "Հարցնել ամեն անգամ" - - + "Հենց նոր" diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml index 4bf0790094399dfeee90fb27d6f4bf3ac5cce90e..eb611ac35ea5ffb00bd4ce660deb38a30209a7e6 100644 --- a/packages/SettingsLib/res/values-in/strings.xml +++ b/packages/SettingsLib/res/values-in/strings.xml @@ -40,6 +40,8 @@ "Terhubung melalui %1$s" "Tersedia melalui %1$s" "Tersambung, tidak ada internet" + "Tidak ada internet" + "Perlu login" "Titik akses penuh untuk sementara" "Tersambung melalui %1$s" "Tersedia melalui %1$s" @@ -63,6 +65,9 @@ "Terhubung (tanpa ponsel), baterai %1$s%2$s" "Terhubung (tanpa media), baterai %1$s%2$s" "Terhubung (tanpa ponsel atau media), baterai %1$s%2$s" + "Aktif, %1$s baterai" + "Baterai %1$s" + "Aktif" "Audio media" "Panggilan telepon" "Transfer file" @@ -109,6 +114,10 @@ "Headphone" "Periferal Masukan" "Bluetooth" + "Menyambungkan alat bantu dengar sebelah kiri…" + "Menyambungkan alat bantu dengar sebelah kanan…" + "Kiri - %1$s baterai" + "Kanan - %1$s baterai" "Wi-Fi tidak aktif." "Wi-Fi tidak tersambung." "Wi-Fi satu baris." @@ -188,7 +197,7 @@ "Tetap terjaga" "Layar tidak akan redup selama mengisi daya" "Aktifkan log pengintaian HCI Bluetooth" - "Tangkap semua paket HCI bluetooth di dalam file" + "Mengambil semua paket HCI Bluetooth dalam satu file (Aktifkan Bluetooth setelah mengubah setelan ini)" "Buka kunci OEM" "Izinkan bootloader dibuka kuncinya" "Izinkan buka kunci OEM?" @@ -207,15 +216,20 @@ "Versi AVRCP Bluetooth" "Pilih Versi AVRCP Bluetooth" "Codec Audio Bluetooth" - "Pilih Codec Audio Bluetooth" + + "Frekuensi Sampel Audio Bluetooth" - "Pilih Codec Audio Bluetooth:\nFrekuensi Sampel" + + "Bit Per Sampel Audio Bluetooth" - "Pilih Codec Audio Bluetooth:\nBit Per Sampel" + + "Mode Channel Audio Bluetooth" - "Pilih Codec Audio Bluetooth:\nMode Channel" + + "Codec LDAC Audio Bluetooth: Kualitas Pemutaran" - "Pilih Codec LDAC Audio Bluetooth:\nKualitas Pemutaran" + + "Streaming: %1$s" "DNS Pribadi" "Pilih Mode DNS Pribadi" @@ -223,9 +237,12 @@ "Otomatis" "Hostname penyedia DNS pribadi" "Masukkan hostname penyedia DNS" + "Tidak dapat terhubung" "Tampilkan opsi untuk sertifikasi layar nirkabel" "Tingkatkan level pencatatan log Wi-Fi, tampilkan per SSID RSSI di Pemilih Wi‑Fi" "Acak alamat MAC saat menghubungkan ke jaringan Wi-Fi" + "Berbayar" + "Tidak berbayar" "Ukuran penyangga pencatat log" "Ukuran Pencatat Log per penyangga log" "Hapus penyimpanan tetap pencatat log?" @@ -360,14 +377,10 @@ "Kira-kira %1$s lagi berdasarkan penggunaan Anda" "Tersisa kira-kira %1$s berdasarkan penggunaan Anda (%2$s)" "%1$s tersisa" - - - - - - - - + "Akan bertahan kira-kira sampai %1$s berdasarkan penggunaan Anda (%2$s)" + "Akan bertahan kira-kira sampai %1$s berdasarkan penggunaan Anda" + "Akan bertahan kira-kira sampai %1$s (%2$s)" + "Akan bertahan kira-kira sampai %1$s" "Tersisa kurang dari %1$s" "Tersisa kurang dari %1$s (%2$s)" "Tersisa lebih dari %1$s (%2$s)" @@ -422,8 +435,7 @@ "Terdaftar" "Tidak terdaftar" "Tidak Tersedia" - - + "MAC diacak" %1$d perangkat terhubung %1$d perangkat terhubung @@ -443,6 +455,5 @@ "pada %1$s" "Durasi" "Selalu tanya" - - + "Baru saja" diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml index 913f2f8a5c4a365d9d4b8655a2cb4766bb95e9ce..337fa89e52952b5b3e1e30b9bbfca56ad0d1155d 100644 --- a/packages/SettingsLib/res/values-is/strings.xml +++ b/packages/SettingsLib/res/values-is/strings.xml @@ -40,6 +40,10 @@ "Tengt í gegnum %1$s" "Í boði í gegnum %1$s" "Tengt, enginn netaðgangur" + + + + "Aðgangsstaður tímabundið fullur" "Tengt í gegnum %1$s" "Í boði í gegnum %1$s" @@ -63,6 +67,12 @@ "Tengt (enginn sími), staða rafhlöðu %1$s%2$s" "Tengt (ekkert efni), staða rafhlöðu %1$s%2$s" "Tengt (enginn sími eða efni), staða rafhlöðu %1$s%2$s" + + + + + + "Hljóð efnis" "Símtöl" "Skráaflutningur" @@ -109,6 +119,14 @@ "Heyrnartól" "Jaðartæki með inntak" "Bluetooth" + + + + + + + + "Slökkt á Wi-Fi." "Wi-Fi ótengt." "Wi-Fi: Eitt strik." @@ -188,7 +206,7 @@ "Vaka" "Skjárinn fer aldrei í hvíld við hleðslu" "Gera HCI-snuðraraskrá Bluetooth virka" - "Fanga alla HCI-pakka Bluetooth í skrá" + "Fanga alla HCI-pakka Bluetooth í skrá (Velja skal Bluetooth eftir að þessari stillingu er breytt)" "Opnun framleiðanda" "Leyfa opnun ræsiforritsins" "Leyfa opnun framleiðanda?" @@ -207,15 +225,20 @@ "Bluetooth AVRCP-útgáfa" "Velja Bluetooth AVRCP-útgáfu" "Bluetooth hljóðkóðari" - "Velja Bluetooth-hljóðkóðara" + + "Bluetooth hljóðtökutíðni" - "Velja hljóðkóðara Bluetooth:\ntökutíðni" + + "Bluetooth hljóðbitar í úrtaki" - "Velja hljóðkóðara Bluetooth:\nbitar í úrtaki" + + "Hljóðrásarstilling Bluetooth" - "Velja hljóðkóðara Bluetooth:\nstilling rásar" + + "Bluetooth LDAC-hljóðkóðari: gæði spilunar" - "Velja Bluetooth LDAC-hljóðkóðara:\ngæði spilunar" + + "Streymi: %1$s" "Lokað DNS" "Velja lokaða DNS-stillingu" @@ -223,9 +246,15 @@ "Sjálfvirkt" "Hýsilheiti lokaðrar DNS-veitu" "Slá inn hýsilheiti DNS-veitu" + + "Sýna valkosti fyrir vottun þráðlausra skjáa" "Auka skráningarstig Wi-Fi, sýna RSSI fyrir hvert SSID í Wi-Fi vali" "Velja MAC-vistfang af handahófi þegar tengst er við Wi‑Fi net" + + + + "Annálsritastærðir biðminna" "Veldu annálsritastærðir á biðminni" "Hreinsa varanlega geymslu annálsrita?" @@ -360,14 +389,10 @@ "U.þ.b. %1$s eftir miðað við notkun þína" "Um það bil %1$s eftir miðað við notkun þína (%2$s)" "%1$s eftir" - - - - - - - - + "Ætti að endast til u.þ.b. %1$s miðað við notkun þína (%2$s)" + "Ætti að endast til u.þ.b. %1$s miðað við notkun þína" + "Ætti að endast til u.þ.b. %1$s (%2$s)" + "Ætti að endast til u.þ.b. %1$s" "Minna en %1$s eftir" "Minna en %1$s eftir (%2$s)" "Meira en %1$s eftir (%2$s)" @@ -422,8 +447,7 @@ "Skráð" "Ekki skráð" "Ekki tiltækt" - - + "MAC-vistfang er valið af handahófi" %1$d tæki tengt %1$d tæki tengd @@ -443,6 +467,5 @@ "á/í %1$s" "Lengd" "Spyrja í hvert skipti" - - + "Rétt í þessu" diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml index 66276186dfb3b09bc104c8854b5e017279585617..d2f5ff16e128d57317dad27033c17e32f9a25e5d 100644 --- a/packages/SettingsLib/res/values-it/strings.xml +++ b/packages/SettingsLib/res/values-it/strings.xml @@ -40,6 +40,10 @@ "Collegato tramite %1$s" "Disponibile tramite %1$s" "Connesso, senza Internet" + + + + "Punto di accesso momentaneamente al completo" "Connesso tramite %1$s" "Disponibile tramite %1$s" @@ -63,6 +67,12 @@ "%2$s connesso (telefono escluso), batteria al %1$s" "%2$s connesso (contenuti multimediali esclusi), batteria al %1$s" "%2$s connesso (telefono o contenuti multimediali esclusi), batteria al %1$s" + + + + + + "Audio multimediale" "Telefonate" "Trasferimento file" @@ -109,6 +119,14 @@ "Cuffie" "Periferica di immissione" "Bluetooth" + + + + + + + + "Wi-Fi non attivo." "Rete Wi-Fi scollegata." "Wi-Fi: una barra." @@ -188,7 +206,7 @@ "Rimani attivo" "Lo schermo non va mai in stand-by se sotto carica" "Attiva log di esame HCI Bluetooth" - "Acquisisci tutti i pacchetti HCI Bluetooth in un file" + "Acquisisci tutti i pacchetti HCI Bluetooth in un file (attiva/disattiva il Bluetooth dopo aver modificato questa impostazione)" "Sblocco OEM" "Consenti lo sblocco del bootloader" "Consentire lo sblocco OEM?" @@ -207,15 +225,20 @@ "Versione Bluetooth AVRCP" "Seleziona versione Bluetooth AVRCP" "Codec audio Bluetooth" - "Seleziona il codec audio Bluetooth" + + "Frequenza di campionamento audio Bluetooth" - "Seleziona il codec audio Bluetooth:\nFrequenza di campionamento" + + "Bit per campione dell\'audio Bluetooth" - "Seleziona il codec audio Bluetooth:\nBit per campione" + + "Modalità canale audio Bluetooth" - "Seleziona il codec audio Bluetooth:\nModalità canale" + + "Codec LDAC audio Bluetooth: qualità di riproduzione" - "Seleziona il codec LDAC audio Bluetooth:\nQualità di riproduzione" + + "Streaming: %1$s" "DNS privato" "Seleziona modalità DNS privato" @@ -223,9 +246,15 @@ "Automatico" "Nome host del provider DNS privato" "Inserisci il nome host del provider DNS" + + "Mostra opzioni per la certificazione display wireless" "Aumenta il livello di registrazione Wi-Fi, mostrando il SSID RSSI nel selettore Wi-Fi" "Seleziona indirizzo MAC casuale con reti Wi-Fi collegate" + + + + "Dimensioni buffer Logger" "Seleziona dimensioni Logger per buffer log" "Cancellare i dati nello spazio di archiviazione permanente del logger?" @@ -360,14 +389,10 @@ "Tempo rimanente in base al tuo utilizzo: %1$s circa" "Tempo rimanente in base al tuo utilizzo (%2$s): %1$s circa" "Tempo rimanente: %1$s" - - - - - - - - + "Tempo stimato rimanente in base al tuo utilizzo: %1$s circa (%2$s)" + "Tempo stimato rimanente in base al tuo utilizzo: %1$s circa" + "Tempo stimato rimanente: %1$s circa (%2$s)" + "Tempo stimato rimanente: %1$s circa" "Tempo rimanente: meno di %1$s" "Tempo rimanente: meno di %1$s (%2$s)" "Tempo rimanente: più di %1$s (%2$s)" @@ -422,8 +447,7 @@ "Registrato" "Non registrato" "Non disponibile" - - + "Selezione casuale dell\'indirizzo MAC" %1$d dispositivi connessi %1$d dispositivo connesso @@ -443,6 +467,5 @@ "il giorno %1$s" "Durata" "Chiedi ogni volta" - - + "Adesso" diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml index 08224933205eeeadca23d0ae009f9096116898ee..666ca76203842b7adc319238774cbd107d7c2a30 100644 --- a/packages/SettingsLib/res/values-iw/strings.xml +++ b/packages/SettingsLib/res/values-iw/strings.xml @@ -40,6 +40,10 @@ "‏מחובר דרך %1$s" "‏זמינה דרך %1$s" "מחובר. אין אינטרנט" + + + + "נקודת הגישה מלאה באופן זמני" "‏מחובר לרשת של %1$s" "‏זמינה דרך %1$s" @@ -63,6 +67,12 @@ "מחובר (ללא טלפון), שיעור הסוללה %1$s%2$s" "מחובר (ללא מדיה), שיעור הסוללה %1$s%2$s" "מחובר (ללא טלפון או מדיה), שיעור הסוללה %1$s%2$s" + + + + + + "אודיו של מדיה" "שיחות טלפון" "העברת קבצים" @@ -109,6 +119,14 @@ "אוזנייה" "ציוד קלט היקפי" "Bluetooth" + + + + + + + + "‏Wi-Fi כבוי." "‏Wi-Fi מנותק." "‏פס אחד של Wi-Fi." @@ -188,7 +206,8 @@ "השאר פועל" "המסך לעולם לא יהיה במצב שינה במהלך טעינה" "‏הפעלת Snoop Log של Bluetooth HCI" - "‏אחד את כל חבילות Bluetooth HCI בקובץ" + + "‏ביטול נעילה של OEM" "אפשר ביטול של נעילת מנהל האתחול" "‏האם לאפשר ביטול נעילה של OEM (יצרן ציוד מקורי)?" @@ -207,15 +226,20 @@ "‏Bluetooth גרסה AVRCP" "‏בחר Bluetooth גרסה AVRCP" "‏Codec אודיו ל-Bluetooth" - "‏בחירת ‏Codec אודיו ל-Bluetooth" + + "‏קצב דגימה של אודיו ל-Bluetooth" - "‏בחירת Codec אודיו ל-Bluetooth‏:\nקצב דגימה" + + "‏מספר סיביות לדגימה באודיו ל-Bluetooth" - "‏בחירת codec אודיו ל-Bluetooth:‏\nסיביות לדגימה" + + "‏מצב של ערוץ אודיו ל-Bluetooth" - "‏בחירת codec אודיו ל-Bluetooth:‏\nמצב ערוץ" + + "‏Codec אודיו LDAC ל-Bluetooth: איכות נגינה" - "‏בחירת Codec אודיו LDAC ל-Bluetooth:‏\nאיכות נגינה" + + "סטרימינג: %1$s" "‏DNS פרטי" "‏צריך לבחור במצב DNS פרטי" @@ -223,9 +247,15 @@ "באופן אוטומטי" "‏שם מארח של ספק DNS פרטי" "‏צריך להזין את שם המארח של ספק DNS" + + "‏הצג אפשרויות עבור אישור של תצוגת WiFi" "‏העלה את רמת הרישום של Wi‑Fi ביומן, הצג לכל SSID RSSI ב-Wi‑Fi Picker" "‏יצירת כתובת MAC אקראית בהתחברות לרשתות Wi-Fi" + + + + "גדלי מאגר של יומן רישום" "בחר גדלים של יוצר יומן לכל מאגר יומן" "האם למחוק את אחסון המתעד המתמיד?" @@ -360,14 +390,10 @@ "על סמך השימוש במכשיר, הסוללה תתרוקן בעוד %1$s, בקירוב" "נותרו בערך %1$s על סמך השימוש במכשיר (%2$s)" "נותרו %1$s" - - - - - - - - + "אמורה להחזיק מעמד בערך עד %1$s על סמך השימוש במכשיר (%2$s)" + "אמורה להחזיק מעמד בערך עד %1$s על סמך השימוש במכשיר" + "אמורה להחזיק מעמד בערך עד %1$s (%2$s)" + "אמורה להחזיק מעמד בערך עד %1$s" "נותרו פחות מ-%1$s" "נותרו פחות מ-%1$s (%2$s)" "נותרו יותר מ-%1$s (%2$s)" @@ -422,8 +448,7 @@ "רשום" "לא רשום" "לא זמין" - - + "‏MAC נמצא במצב אקראי" ‏%1$d מכשירים מחוברים ‏%1$d מכשירים מחוברים @@ -445,6 +470,5 @@ "ב-%1$s" "משך" "שאל בכל פעם" - - + "הרגע" diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml index 200cf8b7abd7f08cdd7eb8cfb49e3694e9f07721..6422103bf3f7646ad7dd8ec9bd0cc5563bf5e918 100644 --- a/packages/SettingsLib/res/values-ja/strings.xml +++ b/packages/SettingsLib/res/values-ja/strings.xml @@ -40,6 +40,10 @@ "%1$s経由で接続" "%1$s経由で使用可能" "接続済み、インターネット接続なし" + + + + "アクセス ポイントが一時的にいっぱいです" "%1$s 経由で接続済み" "%1$s 経由で使用可能" @@ -63,6 +67,12 @@ "接続済み(電話なし)、電池残量 %1$s: %2$s" "接続済み(メディアなし)、電池残量 %1$s: %2$s" "接続済み(電話、メディアなし)、電池残量 %1$s: %2$s" + + + + + + "メディアの音声" "電話" "ファイル転送" @@ -109,6 +119,14 @@ "ヘッドフォン" "入力用周辺機器" "Bluetooth" + + + + + + + + "Wi-FiはOFFです。" "Wi-Fiが切断されました。" "Wi-Fiはレベル1です。" @@ -188,7 +206,7 @@ "スリープモードにしない" "充電中に画面をスリープにしない" "Bluetooth HCIスヌープログをON" - "Bluetooth HCIパケットをすべてファイルにキャプチャする" + "Bluetooth HCI パケットをすべてファイルにキャプチャする(この設定を変更した場合は Bluetooth を切り替えてください)" "OEMロック解除" "ブートローダーによるロック解除を許可する" "OEMロック解除の許可" @@ -207,15 +225,20 @@ "Bluetooth AVRCP バージョン" "Bluetooth AVRCP バージョンを選択する" "Bluetooth オーディオ コーデック" - "Bluetooth オーディオ コーデックを選択" + + "Bluetooth オーディオ サンプルレート" - "Bluetooth オーディオ コーデックを選択:\nサンプルレート" + + "サンプルあたりの Bluetooth オーディオ ビット" - "Bluetooth オーディオ コーデックを選択:\nサンプルあたりのビット" + + "Bluetooth オーディオ チャンネル モード" - "Bluetooth オーディオ コーデックを選択:\nチャンネル モード" + + "Bluetooth オーディオ LDAC コーデック: 再生音質" - "Bluetooth オーディオ LDAC コーデックを選択:\n再生音質" + + "ストリーミング: %1$s" "プライベート DNS" "プライベート DNS モードを選択" @@ -223,9 +246,15 @@ "自動" "プライベート DNS プロバイダのホスト名" "DNS プロバイダのホスト名を入力" + + "ワイヤレスディスプレイ認証のオプションを表示" "Wi-Fiログレベルを上げて、Wi-Fi選択ツールでSSID RSSIごとに表示します" "Wi-Fi ネットワーク接続時の MAC アドレスのランダム化" + + + + "ログバッファのサイズ" "各ログバッファのログサイズを選択" "ログの永続ストレージを消去しますか?" @@ -360,14 +389,10 @@ "残り時間: 約 %1$s(使用状況に基づく)" "残り時間: 約 %1$s(使用状況に基づく)(%2$s)" "%1$s(残り時間)" - - - - - - - - + "電池切れの推定時間: %1$s(使用状況に基づく)(%2$s)" + "電池切れの推定時間: %1$s(使用状況に基づく)" + "電池切れの推定時間: %1$s%2$s)" + "電池切れの推定時間: %1$s" "残り時間: %1$s未満" "残り時間: %1$s未満(%2$s)" "残り時間: %1$s以上(%2$s)" @@ -424,8 +449,7 @@ "登録済み" "未登録" "不明" - - + "MAC はランダムに設定されます" %1$d 台の端末が接続されています %1$d 台の端末が接続されています @@ -445,6 +469,5 @@ "%1$s" "期間" "毎回確認" - - + "たった今" diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml index a80ffb18c60d5ce73c06460807eaa9135973501d..d6271f06b15a0d664d2ee28f40374f2e9f775ae1 100644 --- a/packages/SettingsLib/res/values-ka/strings.xml +++ b/packages/SettingsLib/res/values-ka/strings.xml @@ -40,6 +40,10 @@ "%1$s-ით დაკავშირებული" "ხელმისაწვდომია %1$s-ით" "დაკავშირებულია, ინტერნეტის გარეშე" + + + + "წვდომის წერტილი დროებით გადატვირთულია" "%1$s-ით დაკავშირებული" "ხელმისაწვდომია %1$s-ით" @@ -63,6 +67,12 @@ "დაკავშირებულია (ტელეფონი არ არის). ბატარეის დონე: %1$s%2$s" "დაკავშირებულია (მედია არ არის). ბატარეა: %1$s%2$s" "დაკავშირებულია (ტელეფონი ან მედია არ არის). ბატარეის დონე: %1$s%2$s" + + + + + + "მედია აუდიო" "სატელეფონო ზარები" "ფაილების გადაცემა" @@ -109,6 +119,14 @@ "ყურსასმენი" "შეყვანის პერიფერიული მოწყობილობა" "Bluetooth" + + + + + + + + "WiFi გამორთულია." "WiFi არ არის დაკავშირებული." "WiFi სიგნალი ერთ ზოლზეა." @@ -188,7 +206,7 @@ "არ დაიძინო" "დატენვისას ეკრანი არ დაიძინებს" "Bluetooth HCI snoop ჟურნალის ჩართვა" - "ყველა bluetooth HCI პაკეტის ფაილში ჩაწერა" + "ყველა Bluetooth HCI პაკეტის ფაილში ჩაწერა (ამ პარამეტრის ჩართვის შემდეგ Bluetooth უნდა გადართოთ)" "OEM განბლოკვა" "ნება დართოს განბლოკოს ჩამტვირთველმა" "მისცეს ნება OEM განბლოკვას?" @@ -207,15 +225,20 @@ "Bluetooth-ის AVRCP-ის ვერსია" "აირჩიეთ Bluetooth-ის AVRCP-ის ვერსია" "Bluetooth აუდიოს კოდეკი" - "აირჩიეთ Bluetooth აუდიოს კოდეკი" + + "Bluetooth აუდიოს დისკრეტიზაციის სიხშირე" - "აირჩიეთ Bluetooth აუდიოს კოდეკის\nდისკრეტიზაციის სიხშირე" + + "Bluetooth აუდიოს ბიტების რაოდენობა ნიმუშზე" - "აირჩიეთ Bluetooth აუდიოს კოდეკის\nბიტების რაოდენობა ნიმუშზე" + + "Bluetooth აუდიოს არხის რეჟიმი" - "აირჩიეთ Bluetooth აუდიოს კოდეკის\nარხის რეჟიმი" + + "Bluetooth აუდიოს LDAC კოდეკის დაკვრის ხარისხი" - "აირჩიეთ Bluetooth აუდიოს LDAC კოდეკის\nდაკვრის ხარისხი" + + "სტრიმინგი: %1$s" "პირადი DNS" "აირჩიეთ პირადი DNS რეჟიმი" @@ -223,9 +246,15 @@ "ავტომატური" "პირადი DNS პროვაიდერის სერვერის სახელი" "შეიყვანეთ DNS პროვაიდერის სერვერის სახელი" + + "უსადენო ეკრანის სერტიფიცირების ვარიანტების ჩვენება" "Wi‑Fi-ს აღრიცხვის დონის გაზრდა, Wi‑Fi ამომრჩეველში ყოველ SSID RSSI-ზე ჩვენება" "MAC მისამართის შემთხვევითობა ჩაირთოს, როცა Wi‑Fi-ქსელებთან დაკავშირება ხდება" + + + + "ჟურნალიზაციის ბუფერის ზომები" "აირჩიეთ ჟურნ. ზომა / ჟურნ. ბუფერზე" "გსურთ მუდმივი ჟურნალირების მეხსიერების გასუფთავება?" @@ -360,14 +389,10 @@ "დარჩა დაახლოებით %1$s, ბატარეის მოხმარების გათვალისწინებით" "იმუშავებს დაახლოებით %1$s, ბატარეის მოხმარების გათვალისწინებით (%2$s)" "დარჩენილია %1$s" - - - - - - - - + "უნდა იმუშაოს დაახლოებით %1$s, ოხმარების გათვალისწინებით (%2$s)" + "უნდა იმუშაოს დაახლოებით %1$s, მოხმარების გათვალისწინებით" + "უნდა იმუშაოს დაახლოებით %1$s (%2$s)" + "უნდა იმუშაოს დაახლოებით %1$s" "დარჩენილია %1$s-ზე ნაკლები" "დარჩენილია %1$s-ზე ნაკლები დრო (%2$s)" "დარჩენილია %1$s-ზე მეტი დრო (%2$s)" @@ -422,8 +447,7 @@ "რეგისტრირებული" "არარეგისტრირებული" "მიუწვდომელია" - - + "MAC-ის მიმდევრობა არეულია" დაკავშირებულია %1$d მოწყობილობა დაკავშირებულია %1$d მოწყობილობა @@ -443,6 +467,5 @@ "%1$s-ზე" "ხანგრძლივობა" "ყოველთვის მკითხეთ" - - + "ახლახან" diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml index efcb072afed2b9fa63ee5fb3e12572de66f4a2ab..f80421f45e58719ee67da9acf086f48a4623de63 100644 --- a/packages/SettingsLib/res/values-kk/strings.xml +++ b/packages/SettingsLib/res/values-kk/strings.xml @@ -40,6 +40,10 @@ "%1$s арқылы қосылған" "%1$s арқылы қолжетімді" "Қосылған, интернет жоқ" + + + + "Кіру нүктесі уақытша бос емес" "%1$s арқылы қосылды" "%1$s арқылы қолжетімді" @@ -63,6 +67,12 @@ "Жалғанды (телефонсыз), батарея заряды: %1$s%2$s" "Жалғанды (аудиосыз), батарея заряды: %1$s%2$s" "Жалғанды (телефонсыз не аудиосыз), батарея заряды: %1$s%2$s" + + + + + + "Meдиа аудиосы" "Телефон қоңыраулары" "Файл жіберу" @@ -109,6 +119,14 @@ "Құлақаспап" "Кіріс құралы" "Bluetooth" + + + + + + + + "Wi-Fi өшірулі." "Wi-Fi ажыратылған." "Wi-Fi сигналы — бір жолақ." @@ -188,7 +206,7 @@ "Ояу тұру" "Зарядтау кезінде экран ұйықтамайды" "Bluetooth HCI snoop тіркелімін қосу" - "Барлық bluetooth HCI жинақтарын файлға сақтау" + "Барлық Bluetooth HCI жинақтарын файлға сақтау (бұл параметр өзгергеннен кейін Bluetooth функциясын қосыңыз)" "OEM бекітпесін ашу" "Жүктеуші бекітпесін ашуға рұқсат ету" "OEM бекітпесін ашуға рұқсат ету керек пе?" @@ -207,15 +225,20 @@ "Bluetooth AVRCP нұсқасы" "Bluetooth AVRCP нұсқасын таңдау" "Bluetooth аудимазмұн кодегі" - "Bluetooth аудиокодегін таңдау" + + "Bluetooth аудиомазмұны бойынша үлгі жиілігі" - "Bluetooth аудиокодегін таңдау:\nдискреттеу жылдамдығы" + + "Bluetooth аудиомазмұны бойынша әр үлгіге келетін биттер саны" - "Bluetooth аудиокодегін таңдау:\nбит/үлгі" + + "Bluetooth аудиомазмұны бойынша арна режимі" - "Bluetooth аудиокодегін таңдау:\nарна режимі" + + "Bluetooth LDAC аудиокодегі: ойнату сапасы" - "Bluetooth LDAC аудиокодегін таңдау:\nойнату сапасы" + + "Трансляция: %1$s" "Жеке DNS" "Жеке DNS режимін таңдаңыз" @@ -223,9 +246,15 @@ "Автоматты" "Жеке DNS провайдерінің хост атауы" "DNS провайдерінің хост атауын енгізіңіз" + + "Сымсыз дисплей растау опцияларын көрсету" "Wi‑Fi жур. тір. дең. арт., Wi‑Fi желісін таңдағышта әр SSID RSSI бойынша көрсету" "Wi‑Fi желісіне қосылу кезінде MAC мекенжайларын еркін таңдау" + + + + "Журналға тіркеуші буферінің өлшемдері" "Әр журнал буфері үшін журналға тіркеуші өлшемдерін таңдау" "Тіркеуіштің тұрақты жадын тазарту керек пе?" @@ -360,14 +389,10 @@ "Пайдалану негізінде шамамен %1$s қалды" "Пайдалануға байланысты шамамен %1$s қалды (%2$s)" "%1$s қалды" - - - - - - - - + "Пайдалануға байланысты шамамен %1$s уақытқа жетеді (%2$s)" + "Пайдалануға байланысты шамамен %1$s уақытқа жетеді" + "Шамамен %1$s (%2$s) уақытқа жетеді" + "Шамамен %1$s уақытқа жетеді" "%1$s шамасынан аз қалды" "%1$s шамасынан аз қалды (%2$s)" "%1$s шамасынан көп уақыт қалды (%2$s)" @@ -422,8 +447,7 @@ "Тіркелген" "Тіркелмеген" "Қол жетімсіз" - - + "MAC еркін таңдауға қойылды" %1$d құрылғы қосылды %1$d құрылғы қосылды @@ -443,6 +467,5 @@ "Уақыты: %1$s" "Ұзақтығы" "Әрдайым сұрау" - - + "Дәл қазір" diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml index dee37e84bedbf796ec85a367291c99e107b821f0..09f28bcabd12c8312d0909c1b927d399f6edea59 100644 --- a/packages/SettingsLib/res/values-km/strings.xml +++ b/packages/SettingsLib/res/values-km/strings.xml @@ -40,6 +40,10 @@ "បានភ្ជាប់តាមរយៈ %1$s" "មានតាមរយៈ %1$s" "បាន​ភ្ជាប់ ប៉ុន្តែ​គ្មាន​អ៊ីនធឺណិត​ទេ" + + + + "ចំណុចចូលប្រើពេញជាបណ្តោះអាសន្ន" "បានភ្ជាប់តាមរយៈ %1$s" "មានតាមរយៈ %1$s" @@ -63,6 +67,12 @@ "បាន​ភ្ជាប់ (គ្មាន​ទូរសព្ទ​ទេ) ហើយ​ថ្ម​មាន​កម្រិត %1$s%2$s" "បាន​ភ្ជាប់ (គ្មាន​មេឌៀ​ទេ) ហើយ​ថ្ម​មាន​កម្រិត %1$s%2$s" "បាន​ភ្ជាប់ (គ្មាន​ទូរសព្ទ ឬ​មេឌៀ​ទេ) ហើយ​ថ្ម​មាន​កម្រិត %1$s%2$s" + + + + + + "សំឡេង​មេឌៀ" "ការហៅ​ទូរសព្ទ" "ផ្ទេរ​ឯកសារ" @@ -109,6 +119,14 @@ "កាស" "ធាតុបញ្ចូលបន្ថែម" "ប៊្លូធូស" + + + + + + + + "បានបិទ Wifi" "បានផ្តាច់ Wifi" "Wifi មួយកាំ" @@ -188,7 +206,7 @@ "កុំ​បិទ​អេក្រង់" "អេក្រង់​នឹង​មិន​ដេក​ពេល​បញ្ចូល​ថ្ម" "បើក​កំណត់​ហេតុ HCI snoop ប៊្លូធូស" - "ចាប់​យក​​​កញ្ចប់​ HCI​ ប៊្លូ​ធូ​ស ទាំង​អស់​នៅ​ក្នុង​ឯកសារ" + "ចាប់​យក​កញ្ចប់ HCI ប៊្លូធូស​ទាំងអស់​នៅ​ក្នុង​ឯកសារ​ (បិទ/​បើក​ប៊្លូធូស ​បន្ទាប់ពី​ប្តូរ​ការកំណត់​នេះ)" "ការដោះសោ OEM" "អនុញ្ញាតឲ្យដោះសោកម្មវិធីចាប់ផ្តើមប្រព័ន្ធ" "អនុញ្ញាតការដោះសោ OEM?" @@ -207,15 +225,20 @@ "កំណែប្ល៊ូធូស AVRCP" "ជ្រើសរើសកំណែប្ល៊ូធូស AVRCP" "កូឌិក​សំឡេង​ប៊្លូធូស" - "ជ្រើសរើស​កូឌិក​សំឡេង​ប៊្លូធូស" + + "អត្រា​គំរូ​សំឡេង​ប៊្លូធូស" - "ជ្រើសរើស​កូឌិក​សំឡេង​ប៊្លូធូស៖\nអត្រា​គំរូ" + + "កម្រិត​ប៊ីត​ក្នុង​មួយ​គំរូ​នៃ​សំឡេង​ប៊្លូធូស" - "ជ្រើសរើស​កូឌិក​សំឡេង​ប៊្លូធូស៖\nកម្រិត​ប៊ីត​ក្នុង​មួយ​គំរូ" + + "មុខ​ងារ​រលកសញ្ញា​សំឡេង​ប៊្លូធូស" - "ជ្រើសរើស​កូឌិក​សំឡេង​ប៊្លូធូស៖\nប្រភេទសំឡេង" + + "កូឌិកប្រភេទ LDAC នៃសំឡេង​ប៊្លូធូស៖ គុណភាព​ចាក់​សំឡេង" - "ជ្រើសរើស​កូឌិក​ប្រភេទ​ LDAC នៃសំឡេង​ប៊្លូធូស៖\nគុណភាព​ចាក់​សំឡេង" + + "កំពុង​ចាក់៖ %1$s" "DNS ឯកជន" "ជ្រើសរើសមុខងារ DNS ឯកជន" @@ -223,9 +246,15 @@ "ស្វ័យប្រវត្តិ" "ឈ្មោះម៉ាស៊ីនក្រុមហ៊ុនផ្ដល់សេវា DNS ឯកជន" "បញ្ចូលឈ្មោះម៉ាស៊ីនរបស់ក្រុមហ៊ុនផ្ដល់សេវា DNS" + + "បង្ហាញ​ជម្រើស​សម្រាប់​វិញ្ញាបនបត្រ​បង្ហាញ​ឥត​ខ្សែ" "បង្កើនកម្រិតកំណត់ហេតុវ៉ាយហ្វាយបង្ហាញក្នុង SSID RSSI ក្នុងកម្មវិធីជ្រើស​វ៉ាយហ្វាយ" "ជ្រើសរើសអាសយដ្ឋាន MAC ដោយចៃដន្យ នៅពេល​ភ្ជាប់​បណ្តាញ Wi‑Fi" + + + + "ទំហំ buffer របស់ Logger" "ជ្រើស​ទំហំ Logger per log buffer" "ជម្រះទំហំផ្ទុក logger ដែលប្រើបានយូរឬ?" @@ -360,14 +389,10 @@ "សល់ប្រហែល %1$s ទៀតផ្អែកលើការប្រើប្រាស់របស់អ្នក" "នៅសល់​ប្រហែល %1$s ទៀត ផ្អែក​លើការ​ប្រើប្រាស់​របស់អ្នក (%2$s)" "នៅសល់ %1$s" - - - - - - - - + "គួរ​តែ​អាច​ប្រើបាន​រហូតដល់​ម៉ោងប្រហែល %1$s ដោយផ្អែក​លើការ​ប្រើប្រាស់​របស់អ្នក (%2$s)" + "គួរ​តែ​អាច​ប្រើបាន​រហូតដល់​ម៉ោងប្រហែល %1$s ដោយផ្អែក​លើការ​ប្រើប្រាស់​របស់អ្នក" + "គួរ​តែ​អាច​ប្រើបាន​រហូតដល់​ម៉ោងប្រហែល %1$s (%2$s)" + "គួរ​តែ​អាច​ប្រើបាន​រហូតដល់​ម៉ោងប្រហែល %1$s" "នៅ​សល់​តិច​ជាង %1$s" "នៅសល់​តិចជាង %1$s (%2$s)" "នៅសល់​ច្រើនជាង %1$s (%2$s)" @@ -422,8 +447,7 @@ "បាន​ចុះឈ្មោះ" "មិនបាន​ចុះឈ្មោះ" "មិន​មាន" - - + "MAC ត្រូវ​បាន​ជ្រើសរើស​ដោយ​ចៃដន្យ" បានភ្ជាប់​ឧបករណ៍ %1$d បានភ្ជាប់​ឧបករណ៍ %1$d @@ -443,6 +467,5 @@ "នៅ​ថ្ងៃ %1$s" "រយៈពេល" "សួរគ្រប់ពេល" - - + "អម្បាញ់មិញ" diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml index 10236b823e7f1d2787a4865a4e541d2210102e08..65273c7509ab1884e880e66e2cb2658916253244 100644 --- a/packages/SettingsLib/res/values-kn/strings.xml +++ b/packages/SettingsLib/res/values-kn/strings.xml @@ -40,6 +40,8 @@ "%1$s ಮೂಲಕ ಸಂಪರ್ಕಗೊಂಡಿದೆ" "%1$s ಮೂಲಕ ಲಭ್ಯವಿದೆ" "ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ, ಇಂಟರ್ನೆಟ್ ಇಲ್ಲ" + "ಇಂಟರ್ನೆಟ್ ಇಲ್ಲ" + "ಸೈನ್ ಇನ್ ಮಾಡುವ ಅಗತ್ಯವಿದೆ" "ಪ್ರವೇಶ ಕೇಂದ್ರ ತಾತ್ಕಾಲಿಕವಾಗಿ ಭರ್ತಿಯಾಗಿದೆ" "%1$s ಮೂಲಕ ಸಂಪರ್ಕಗೊಂಡಿದೆ" "%1$s ಮೂಲಕ ಲಭ್ಯವಿದೆ" @@ -63,6 +65,9 @@ "ಸಂಪರ್ಕಗೊಂಡಿದೆ (ಫೋನ್ ಇಲ್ಲ), ಬ್ಯಾಟರಿ ಚಾರ್ಜ್‌ ಮಟ್ಟ %1$s%2$s" "ಸಂಪರ್ಕಗೊಂಡಿದೆ (ಮಾಧ್ಯಮವಿಲ್ಲ), ಬ್ಯಾಟರಿ ಚಾರ್ಜ್‌ ಮಟ್ಟ %1$s%2$s" "ಸಂಪರ್ಕಗೊಂಡಿದೆ (ಫೋನ್ ಅಥವಾ ಮಾಧ್ಯಮವಿಲ್ಲ), ಬ್ಯಾಟರಿ ಚಾರ್ಜ್‌ ಮಟ್ಟ %1$s%2$s" + "ಸಕ್ರಿಯ, %1$s ಬ್ಯಾಟರಿ" + "%1$s ಬ್ಯಾಟರಿ" + "ಸಕ್ರಿಯ" "ಮಾಧ್ಯಮ ಆಡಿಯೋ" "ಫೋನ್ ಕರೆಗಳು" "ಫೈಲ್ ವರ್ಗಾವಣೆ" @@ -109,6 +114,10 @@ "ಹೆಡ್‌ಫೋನ್" "ಪೆರಿಪೆರಲ್ ಇನ್‌ಪುಟ್‌‌" "ಬ್ಲೂಟೂತ್" + "ಎಡ ಶ್ರವಣ ಸಾಧನವನ್ನು ಜೋಡಿಸಲಾಗುತ್ತಿದೆ…" + "ಬಲ ಶ್ರವಣ ಸಾಧನವನ್ನು ಜೋಡಿಸಲಾಗುತ್ತಿದೆ…" + "ಎಡ - %1$s ಬ್ಯಾಟರಿ" + "ಬಲ - %1$s ಬ್ಯಾಟರಿ" "ವೈಫೈ ಆಫ್." "ವೈಫೈ ಸಂಪರ್ಕ ಕಡಿತಗೊಂಡಿದೆ." "ವೈಫೈ ಒಂದು ಪಟ್ಟಿ." @@ -188,7 +197,8 @@ "ಎಚ್ಚರವಾಗಿರು" "ಚಾರ್ಜ್ ಮಾಡುವಾಗ ಪರದೆಯು ಎಂದಿಗೂ ನಿದ್ರಾವಸ್ಥೆಗೆ ಹೋಗುವುದಿಲ್ಲ" "ಬ್ಲೂಟೂತ್‌‌ HCI ಸ್ನೂಪ್‌ಲಾಗ್" - "ಫೈಲ್‌ನಲ್ಲಿ ಎಲ್ಲ ಬ್ಲೂಟೂತ್ HCI ಪ್ಯಾಕೆಟ್‌ಗಳನ್ನು ಸೆರೆಹಿಡಿಯಿರಿ" + + "OEM ಅನ್‌ಲಾಕ್‌ ಮಾಡಲಾಗುತ್ತಿದೆ" "ಬೂಟ್‌ಲೋಡರ್‌ ಅನ್‌ಲಾಕ್‌ ಮಾಡಲು ಅನುಮತಿಸಿ" "OEM ಅನ್‌ಲಾಕ್‌ ಮಾಡುವಿಕೆಯನ್ನು ಅನುಮತಿಸುವುದೇ?" @@ -207,15 +217,20 @@ "ಬ್ಲೂಟೂತ್ AVRCP ಆವೃತ್ತಿ" "ಬ್ಲೂಟೂತ್ AVRCP ಆವೃತ್ತಿಯನ್ನು ಆಯ್ಕೆ ಮಾಡಿ" "ಬ್ಲೂಟೂತ್ ಆಡಿಯೋ ಕೋಡೆಕ್" - "ಬ್ಲೂಟೂತ್‌ ಆಡಿಯೊ ಕೋಡೆಕ್ ಆಯ್ಕೆ ಮಾಡಿ" + + "ಬ್ಲೂಟೂತ್ ಆಡಿಯೋ ಮಾದರಿ ದರ" - "ಬ್ಲೂಟೂತ್‌ ಆಡಿಯೋ ಕೋಡೆಕ್:\nಮಾದರಿ ದರ ಆಯ್ಕೆ ಮಾಡಿ" + + "ಬ್ಲೂಟೂತ್‌ ಆಡಿಯೊ ಬಿಟ್ಸ್‌‌ನ ಪ್ರತಿ ಮಾದರಿ" - "ಬ್ಲೂಟೂತ್‌ ಆಡಿಯೋ ಕೋಡೆಕ್‌:\nಬಿಟ್ಸ್ ಪ್ರತಿ ಮಾದರಿ ಆಯ್ಕೆ ಮಾಡಿ" + + "ಬ್ಲೂಟೂತ್ ಆಡಿಯೋ ಚಾನೆಲ್ ಮೋಡ್" - "ಬ್ಲೂಟೂತ್‌ ಆಡಿಯೋ ಕೋಡೆಕ್:\nಚಾನೆಲ್ ಮೋಡ್ ಆಯ್ಕೆ ಮಾಡಿ" + + "ಬ್ಲೂಟೂತ್‌ ಆಡಿಯೊ LDAC ಕೋಡೆಕ್: ಪ್ಲೇಬ್ಯಾಕ್ ಗುಣಮಟ್ಟ" - "ಬ್ಲೂಟೂತ್‌ ಆಡಿಯೊ LDAC ಕೋಡೆಕ್:\nಪ್ಲೇಬ್ಯಾಕ್‌ ಗುಣಮಟ್ಟ ಆಯ್ಕೆ ಮಾಡಿ" + + "ಸ್ಟ್ರೀಮಿಂಗ್: %1$s" "ಖಾಸಗಿ DNS" "ಖಾಸಗಿ DNS ಮೋಡ್ ಆಯ್ಕೆಮಾಡಿ" @@ -223,9 +238,12 @@ "ಸ್ವಯಂಚಾಲಿತ" "ಖಾಸಗಿ DNS ಪೂರೈಕೆದಾರರ ಹೋಸ್ಟ್‌ಹೆಸರು" "DNS ಪೂರೈಕೆದಾರರ ಹೋಸ್ಟ್‌ಹೆಸರನ್ನು ನಮೂದಿಸಿ" + "ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ" "ವೈರ್‌ಲೆಸ್‌‌‌ ಪ್ರದರ್ಶನ ಪ್ರಮಾಣೀಕರಣಕ್ಕಾಗಿ ಆಯ್ಕೆಗಳನ್ನು ತೋರಿಸು" "Wi‑Fi ಲಾಗಿಂಗ್ ಮಟ್ಟನ್ನು ಹೆಚ್ಚಿಸಿ, Wi‑Fi ಆಯ್ಕೆಯಲ್ಲಿ ಪ್ರತಿಯೊಂದು SSID RSSI ತೋರಿಸಿ" "ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ಗಳು ಸಂಪರ್ಕಿಸುವಾಗ MAC ವಿಳಾಸವನ್ನು ಯಾದೃಚ್ಛಿಕಗೊಳಿಸಿ" + "ಮೀಟರ್ ಮಾಡಲಾಗಿದೆ" + "ಮೀಟರ್ ಮಾಡಲಾಗಿಲ್ಲ" "ಲಾಗರ್ ಬಫರ್ ಗಾತ್ರಗಳು" "ಪ್ರತಿ ಲಾಗ್ ಬಫರ್‌ಗೆ ಲಾಗರ್ ಗಾತ್ರಗಳನ್ನು ಆಯ್ಕೆಮಾಡಿ" "ಶಾಶ್ವತವಾಗಿರುವ ಸಂಗ್ರಹಣೆ ಲಾಗರ್ ಅನ್ನು ತೆರವುಗೊಳಿಸುವುದೇ?" @@ -360,14 +378,10 @@ "ನಿಮ್ಮ ಬಳಕೆಯ ಆಧಾರದ ಮೇಲೆ ಸುಮಾರು %1$s ಉಳಿದಿದೆ" "ನಿಮ್ಮ ಬಳಕೆಯ %2$s ಆಧಾರದ ಮೇಲೆ ಸುಮಾರು %1$s ಉಳಿದಿದೆ" "%1$s ಉಳಿದಿದೆ" - - - - - - - - + "ನಿಮ್ಮ ಬಳಕೆ (%2$s) ಆಧರಿಸಿ %1$s ಸಮಯದವರೆಗೆ ಫೋನ್‌ ರನ್‌ ಆಗಬೇಕು" + "ನಿಮ್ಮ ಬಳಕೆ ಆಧರಿಸಿ %1$s ಸಮಯದವರೆಗೆ ಫೋನ್‌ ರನ್‌ ಆಗಬೇಕು" + "%1$s (%2$s) ಸಮಯದವರೆಗೆ ಫೋನ್‌ ರನ್‌ ಆಗಬೇಕು" + "%1$s ಸಮಯದವರೆಗೆ ಫೋನ್‌ ರನ್‌ ಆಗಬೇಕು" "%1$s ನಿಮಿಷಕ್ಕಿಂತ ಕಡಿಮೆ ಸಮಯ ಉಳಿದಿದೆ" "%1$s ಕ್ಕಿಂತ ಕಡಿಮೆ (%2$s) ಬಾಕಿ" "%1$s ಕ್ಕಿಂತ ಹೆಚ್ಚು (%2$s) ಬಾಕಿ" @@ -422,8 +436,7 @@ "ನೋಂದಾಯಿಸಲಾಗಿದೆ" "ನೋಂದಾಯಿಸಲಾಗಿಲ್ಲ" "ಲಭ್ಯವಿಲ್ಲ" - - + "MAC ಯಾದೃಚ್ಛಿಕವಾಗಿದೆ" %1$d ಸಾಧನಗಳನ್ನು ಸಂಪರ್ಕಿಸಲಾಗಿದೆ %1$d ಸಾಧನಗಳನ್ನು ಸಂಪರ್ಕಿಸಲಾಗಿದೆ @@ -443,6 +456,5 @@ "%1$s ಕ್ಕೆ" "ಅವಧಿ" "ಪ್ರತಿ ಬಾರಿ ಕೇಳಿ" - - + "ಇದೀಗ" diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml index b6b2f56f5b7a186b5b56cb48fd100a173b6056da..cae15354eef2c6bb1cf7af80495bcd1d38f9bbcb 100644 --- a/packages/SettingsLib/res/values-ko/strings.xml +++ b/packages/SettingsLib/res/values-ko/strings.xml @@ -40,6 +40,10 @@ "%1$s을(를) 통해 연결됨" "%1$s을(를) 통해 사용 가능" "연결됨, 인터넷 사용 불가" + + + + "액세스 포인트가 일시적으로 가득 참" "%1$s을(를) 통해 연결됨" "%1$s을(를) 통해 사용 가능" @@ -63,6 +67,12 @@ "연결됨(전화 없음), 배터리 %1$s%2$s" "연결됨(미디어 없음), 배터리 %1$s%2$s" "연결됨(전화 또는 미디어 없음), 배터리 %1$s%2$s" + + + + + + "미디어 오디오" "전화 통화" "파일 전송" @@ -109,6 +119,14 @@ "헤드폰" "입력 주변기기" "블루투스" + + + + + + + + "Wi-Fi가 꺼져 있습니다." "Wi-Fi 연결이 끊어졌습니다." "Wi-Fi 신호 막대가 한 개입니다." @@ -188,7 +206,7 @@ "화면 켜짐 상태 유지" "충전하는 동안 화면이 꺼지지 않음" "블루투스 HCI 스누프 로그 사용" - "모든 블루투스 HCI 패킷을 하나의 파일에 캡처" + "모든 블루투스 HCI 패킷을 하나의 파일에 캡처(설정 변경 후 블루투스 전환)" "OEM 잠금 해제" "부트로더 잠금 해제 허용" "OEM 잠금 해제를 허용하시겠습니까?" @@ -207,15 +225,20 @@ "블루투스 AVRCP 버전" "블루투스 AVRCP 버전 선택" "블루투스 오디오 코덱" - "블루투스 오디오 코덱 선택" + + "블루투스 오디오 샘플링 비율" - "블루투스 오디오 코덱 선택:\n샘플링 비율" + + "블루투스 오디오 샘플당 비트" - "블루투스 오디오 코덱 선택:\n샘플당 비트" + + "블루투스 오디오 채널 모드" - "블루투스 오디오 코덱 선택:\n채널 모드" + + "블루투스 오디오 LDAC 코덱: 재생 품질" - "블루투스 오디오 LDAC 코덱 선택:\n재생 품질" + + "스트리밍: %1$s" "비공개 DNS" "비공개 DNS 모드 선택" @@ -223,9 +246,15 @@ "자동" "비공개 DNS 제공업체 호스트 이름" "DNS 제공업체의 호스트 이름 입력" + + "무선 디스플레이 인증서 옵션 표시" "Wi‑Fi 로깅 수준을 높이고, Wi‑Fi 선택도구에서 SSID RSSI당 값을 표시합니다." "Wi‑Fi 네트워크에 연결할 때 MAC 주소 임의 선택" + + + + "로거 버퍼 크기" "로그 버퍼당 로거 크기 선택" "로거 영구 저장소를 삭제하시겠습니까?" @@ -360,14 +389,10 @@ "내 사용량을 기준으로 약 %1$s 남음" "내 사용량(%2$s)을 기준으로 약 %1$s 남음" "%1$s 남음" - - - - - - - - + "사용량(%2$s)을 기준으로 약 %1$s까지 사용 가능" + "사용량을 기준으로 약 %1$s까지 사용 가능" + "약 %1$s까지 사용 가능(%2$s)" + "약 %1$s까지 사용 가능" "%1$s 미만 남음" "%1$s 미만 남음(%2$s)" "%1$s 이상 남음(%2$s)" @@ -422,8 +447,7 @@ "등록됨" "등록되지 않음" "사용할 수 없음" - - + "MAC가 임의 선택됨" 기기 %1$d개 연결됨 기기 %1$d개 연결됨 @@ -443,6 +467,5 @@ "일시: %1$s" "지속 시간" "항상 확인" - - + "조금 전" diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml index 13174bca2fabce7e3474ccae5f02b87a4a193c2c..65689f1055011fd0766cd6b7c2ae1ec4ea62b95f 100644 --- a/packages/SettingsLib/res/values-ky/strings.xml +++ b/packages/SettingsLib/res/values-ky/strings.xml @@ -40,6 +40,10 @@ "%1$s аркылуу жеткиликтүү" "%1$s аркылуу жеткиликтүү" "Туташып турат, Интернет жок" + + + + "Туташуу түйүнү убактылуу толуп калды" "%1$s аркылуу туташты" "%1$s аркылуу иштейт" @@ -63,6 +67,12 @@ "Туташып турат (телефониясыз), батареянын деңгээли – %1$s%2$s" "Туташып турат (медиасыз), батареянын деңгээли – %1$s%2$s" "Туташып турат (телефониясыз же медиасыз), батареянын деңгээли – %1$s%2$s" + + + + + + "Аудио" "Телефон чалуулар" "Файл алмашуу" @@ -109,6 +119,14 @@ "Кулакчын" "Дайындарды киргизүүчү сырткы түзмөк" "Bluetooth" + + + + + + + + "Wifi өчүк." "Wifi туташуусу жок." "Wifi: бир таякча." @@ -188,7 +206,7 @@ "Ойгоо туруу" "Кубаттоо учурунда экран эч уктабайт" "Bluetooth HCI уруксатсыздарды каттоону иштетүү" - "Бардык Bluetooth HCI пакеттерин бир файлга жазуу" + "Файлдагы бардык Bluetooth HCI таңгактары алынсын (Бул жөндөөнү өзгөрткөндөн кийин Bluetooth\'ду өчүрүп-күйгүзүңүз)" "OEM бөгөттөн чыгаруу" "Кайра жүктөгүчтү бөгөттөн чыгарууга уруксат берүү" "OEM бөгөттөн чыгарууга уруксатпы?" @@ -207,15 +225,20 @@ "Bluetooth AVRCP версиясы" "Bluetooth AVRCP версиясын тандоо" "Bluetooth аудио кодек" - "Bluetooth аудио кодегин тандаңыз" + + "Bluetooth аудио үлгүсүнүн ылдамдыгы" - "Bluetooth аудио кодегин тандаңыз:\nҮлгү жыштыгы" + + "Бир үлгүдөгү Bluetooth аудио биттери" - "Bluetooth аудио кодегин тандаңыз:\nБир үлгүдөгү биттер" + + "Bluetooth аудио каналынын режими" - "Bluetooth аудио кодегин тандаңыз:\nКанал режими" + + "Bluetooth аудио LDAC кодеги: Ойнотуу сапаты" - "Bluetooth аудио LDAC кодегин тандаңыз:\nОйнотуу сапаты" + + "Трансляция: %1$s" "Купуя DNS" "Купуя DNS режимин тандаңыз" @@ -223,9 +246,15 @@ "Автоматтык режим" "Купуя DNS түйүндүн аталышы" "DNS түйүндүн аталышын киргизиңиз" + + "Зымсыз дисплейди сертификатто мүмкүнчүлүктөрүн көргөзүү" "Wi-Fi Кармагычта Wi‑Fi протокол деңгээлин жогорулатуу жана ар бир SSID RSSI үчүн көрсөтүү." "Wi‑Fi тармагына туташууда кокустан тандаган MAC дарегин колдонуу" + + + + "Каттагыч буферлеринин өлчөмдөрү" "Каттоо буфери үчүн Каттагычтын көлөмүн тандаңыз" "Таржымалдын туруктуу диски тазалансынбы?" @@ -360,14 +389,10 @@ "Колдонушуңузга караганда болжол менен %1$s калды" "Колдонгонуңузга караганда болжол менен %1$s (%2$s) калды" "%1$s калды" - - - - - - - - + "Колдонгонуңузга караганда болжол менен %1$s (%2$s) кийин өчөт" + "Колдонгонуңузга караганда болжол менен %1$s кийин өчөт" + "Болжол менен %1$s (%2$s) кийин өчөт" + "Болжол менен %1$s кийин өчөт" "%1$s жетпеген убакыт калды" "%1$s жетпеген убакыт калды (%2$s)" "%1$s ашыгыраак убакыт калды (%2$s)" @@ -422,8 +447,7 @@ "Катталган" "Катталган эмес" "Жеткиликсиз" - - + "MAC дарегин кокустан тандоо иштетилген" %1$d түзмөк туташып турат %1$d түзмөк туташып турат @@ -443,6 +467,5 @@ "%1$s" "Узактыгы" "Ар дайым суралсын" - - + "Азыр эле" diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml index b01defb329ed614f2102abd302bafb8e5eeb9950..434c6e7613ada390c8e5f114bffa1a380c342036 100644 --- a/packages/SettingsLib/res/values-lo/strings.xml +++ b/packages/SettingsLib/res/values-lo/strings.xml @@ -40,6 +40,10 @@ "​ເຊື່ອມຕໍ່​ຜ່ານ %1$s ​ແລ້ວ" "ມີ​ໃຫ້​ຜ່ານ %1$s" "ເຊື່ອມຕໍ່ແລ້ວ, ບໍ່ມີອິນເຕີເນັດ" + + + + "ຈຸດການເຂົ້າເຖິງເຕັມຊົ່ວຄາວ" "ເຊື່ອມຕໍ່ຜ່ານ %1$s ແລ້ວ" "ໃຊ້ໄດ້ຜ່ານ %1$s" @@ -63,6 +67,12 @@ "ເຊື່ອມຕໍ່ແລ້ວ (ບໍ່ມີໂທລະສັບ), ແບັດເຕີຣີ %1$s%2$s" "ເຊື່ອມຕໍ່ແລ້ວ (ບໍ່ມີມີເດຍ), ແບັດເຕີຣີ %1$s%2$s" "ເຊື່ອມຕໍ່ແລ້ວ (ບໍ່ມີໂທລະສັບ ຫຼື ມີເດຍ), ແບັດເຕີຣີ %1$s%2$s" + + + + + + "ສຽງ" "ການໂທ" "ການໂອນຍ້າຍໄຟລ໌" @@ -109,6 +119,14 @@ "ຫູຟັງ" "ອຸປະກອນພ່ວງອິນພຸດ" "Bluetooth" + + + + + + + + "WiFi ປິດຢູ່." "ຕັດການເຊື່ອມຕໍ່ Wi-Fi ແລ້ວ." "ສັນຍານ Wi-Fi ນຶ່ງຂີດ." @@ -188,7 +206,8 @@ "ເປີດໜ້າຈໍຕະຫຼອດ" "ໜ້າຈໍຈະບໍ່ປິດໃນຂະນະທີ່ສາກໄຟຢູ່" "ເປີດໃຊ້ງານການຊອດແນມ Bluetooth HCI" - "ເກັບກຳທຸກແພັກເກັດໃນໄຟລ໌ bluetooth HCI" + + "ການ​ປົດ​ລັອກ OEM" "ອະ​ນຸ​ຍາດ​ໃຫ້​ປົດ​ລັອກ​ບູດ​ໂຫຼດ​ເດີ" "ອະ​ນຸ​ຍາດ​ການ​ປົກ​ລັອກ OEM ບໍ?" @@ -207,15 +226,20 @@ "ເວີຊັນ Bluetooth AVRCP" "ເລືອກເວີຊັນ Bluetooth AVRCP" "Bluetooth Audio Codec" - "Select Bluetooth Audio Codec" + + "Bluetooth Audio Sample Rate" - "Select Bluetooth Audio Codec:\nSample Rate" + + "Bluetooth Audio Bits Per Sample" - "Select Bluetooth Audio Codec:\nBits Per Sample" + + "Bluetooth Audio Channel Mode" - "Select Bluetooth Audio Codec:\nChannel Mode" + + "Bluetooth Audio LDAC Codec: Playback Quality" - "Select Bluetooth Audio LDAC Codec:\nPlayback Quality" + + "Streaming: %1$s" "DNS ສ່ວນຕົວ" "ເລືອກໂໝດ DNS ສ່ວນຕົວ" @@ -223,9 +247,15 @@ "ອັດຕະໂນມັດ" "ຊື່ໂຮສຜູ້ໃຫ້ບໍລິການ DNS ສ່ວນຕົວ" "ລະບຸຊື່ໂຮສຂອງຜູ້ໃຫ້ບໍລິການ DNS" + + "ສະແດງໂຕເລືອກສຳລັບການສະແດງການຮັບຮອງລະບົບໄຮ້ສາຍ" "ເພີ່ມ​ລະ​ດັບ​ການ​ເກັບ​ປະ​ຫວັດ Wi‑Fi, ສະ​ແດງ​ຕໍ່ SSID RSSI ​ໃນ​ Wi‑Fi Picker" "ສຸ່ມທີ່ຢູ່ MAC ເມື່ອເຊື່ອມຕໍ່ຫາເຄືອຂ່າຍ Wi‑Fi" + + + + "ຂະ​ໜາດ​​ບັບ​ເຟີໂຕ​ລັອກ" "ເລືອກ​ຂະ​ໜາດ​ລັອກ​ຕໍ່​ບັບ​ເຟີ" "ລຶບລ້າງບ່ອນຈັດເກັບຖາວອນຂອງຕົວບັນທຶກບໍ່?" @@ -360,14 +390,10 @@ "ເຫຼືອອີກປະມານ %1$s ໂດຍອ້າງອີງຈາກການນຳໃຊ້ຂອງທ່ານ" "ເຫຼືອອີກປະມານ %1$s ໂດຍອ້າງອີງຈາກການນຳໃຊ້ຂອງທ່ານ (%2$s)" "ຍັງເຫຼືອ %1$s" - - - - - - - - + "Should last until about %1$s based on your usage (%2$s)" + "Should last until about %1$s based on your usage" + "Should last until about %1$s (%2$s)" + "Should last until about %1$s" "ຍັງເຫຼືອໜ້ອຍກວ່າ %1$s" "ຍັງເຫຼືອໜ້ອຍກວ່າ %1$s (%2$s)" "ຍັງເຫຼືອຫຼາຍກວ່າ %1$s (%2$s)" @@ -422,8 +448,7 @@ "ລົງທະບຽນແລ້ວ" "ບໍ່ໄດ້ລົງທະບຽນ" "ບໍ່ມີຂໍ້ມູນ" - - + "MAC is randomized" ເຊື່ອມຕໍ່ %1$d ອຸປະກອນແລ້ວ ເຊື່ອມຕໍ່ %1$d ອຸປະກອນແລ້ວ @@ -443,6 +468,5 @@ "ເວລາ %1$s" "ໄລຍະເວລາ" "ຖາມທຸກເທື່ອ" - - + "ຕອນນີ້" diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml index 0fc3916ac64a6414707ce4fe193c635ff435589e..66912f6a8bef14ee8dbe826acee370785ae23223 100644 --- a/packages/SettingsLib/res/values-lt/strings.xml +++ b/packages/SettingsLib/res/values-lt/strings.xml @@ -40,6 +40,8 @@ "Prisijungta naudojant „%1$s“" "Pasiekiama naudojant „%1$s“" "Prisijungta, nėra interneto" + "Nėra interneto ryšio" + "Reikia prisijungti" "Prieigos taškas laikinai visiškai užimtas" "Prisijungta naudojant „%1$s“" "Pasiekiama naudojant „%1$s“" @@ -63,6 +65,9 @@ "Prisijungta (%2$s), (telefono nėra), akumuliatoriaus įkrovos lygis: %1$s" "Prisijungta (%2$s), (medijos nėra), akumuliatoriaus įkrovos lygis: %1$s" "Prisijungta (%2$s), (telefono ar medijos nėra), akumuliatoriaus įkrovos lygis: %1$s" + "Aktyvus, akumuliatoriaus įkrova: %1$s" + "Akumuliatoriaus įkrova: %1$s" + "Aktyvus" "Laikmenos garsas" "Telefono skambučiai" "Failo perkėlimas" @@ -109,6 +114,10 @@ "Ausinės" "Išorinis įvesties įrenginys" "Bluetooth" + "Siejamas kairysis klausos aparatas…" + "Siejamas dešinysis klausos aparatas…" + "Kairė – akumuliatoriaus įkrova: %1$s" + "Dešinė – akumuliatoriaus įkrova: %1$s" "„Wi-Fi“ išjungtas." "„Wi-Fi“ atjungtas." "Viena „Wi-Fi“ signalo juosta." @@ -188,7 +197,8 @@ "Veikti" "Kraunant ekranas niekada neveiks miego režimu" "Įgalinti „Bluetooth“ HCI šnipinėjimo žurnalą" - "Užfiksuoti visus faile esančius „Bluetooth“ HCI paketus" + + "OĮG atrakinimas" "Leisti atrakinti oper. sistemos paleidimo progr." "Leisti OĮG atrakinimą?" @@ -207,15 +217,20 @@ "„Bluetooth“ AVRCP versija" "Pasirinkite „Bluetooth“ AVRCP versiją" "„Bluetooth“ garso kodekas" - "Pasirinkite „Bluetooth“ garso kodeką" + + "„Bluetooth“ garso pavyzdžio dažnis" - "Pasirinkite „Bluetooth“ garso kodekas:\nimties dydis" + + "„Bluetooth“ garso įrašo bitų skaičius pavyzdyje" - "Pasirinkite „Bluetooth“ garso kodeką:\nbitų skaičius viename pavyzdyje" + + "„Bluetooth“ garso kanalo režimas" - "Pasirinkite „Bluetooth“ garso kodeką:\n kanalo režimas" + + "„Bluetooth“ garso LDAC kodekas: atkūrimo kokybė" - "Pasirinkite „Bluetooth“ garso LDAC kodeką:\natkūrimo kokybė" + + "Srautinis perdavimas: %1$s" "Privatus DNS" "Pasirinkite privataus DNS režimą" @@ -223,9 +238,12 @@ "Automatinis" "Privataus DNS teikėjo prieglobos serverio pavadinimas" "Įveskite DNS teikėjo prieglobos serverio pavadinimą" + "Prisijungti nepavyko" "Rodyti belaidžio rodymo sertifikavimo parinktis" "Padidinti „Wi‑Fi“ įrašymo į žurnalą lygį, rodyti SSID RSSI „Wi-Fi“ rinkiklyje" "Atsitiktinai parinkti MAC adresą prisijungiant prie „Wi‑Fi“ tinklų" + "Matuojamas" + "Neišmatuotas" "Registruotuvo buferio dydžiai" "Pasir. registr. dydž. žurn. bufer." "Išvalyti nuolatinę registruotuvo saugyklą?" @@ -360,14 +378,10 @@ "Liko maždaug %1$s, atsižvelgiant į naudojimą" "Liko maždaug %1$s, atsižvelgiant į naudojimą (%2$s)" "Liko %1$s" - - - - - - - - + "Pagal tai, kaip naudojama, turėtų išsikrauti maždaug po %1$s (%2$s)" + "Pagal tai, kaip naudojama, turėtų išsikrauti maždaug po %1$s" + "Turėtų išsikrauti maždaug po %1$s (%2$s)" + "Turėtų išsikrauti maždaug po %1$s" "Liko mažiau nei %1$s" "Liko mažiau nei %1$s (%2$s)" "Liko daugiau nei %1$s (%2$s)" @@ -422,8 +436,7 @@ "Užregistruota" "Neužregistruota" "Užimta" - - + "MAC parinktas atsitiktine tvarka" Prijungtas %1$d įrenginys Prijungti %1$d įrenginiai @@ -445,6 +458,5 @@ "%1$s" "Trukmė" "Klausti kaskart" - - + "Ką tik" diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml index e22d44a1a085ae455ee443404b3ac06d7bd91520..bdd1ac9b42aa0ad898a210aec2062060c675af84 100644 --- a/packages/SettingsLib/res/values-lv/strings.xml +++ b/packages/SettingsLib/res/values-lv/strings.xml @@ -40,6 +40,8 @@ "Savienots, izmantojot %1$s" "Pieejams, izmantojot %1$s" "Savienojums izveidots, nav piekļuves internetam" + "Nav piekļuves internetam" + "Nepieciešama pierakstīšanās" "Piekļuves punkts īslaicīgi ir pilns" "Savienojums izveidots, izmantojot %1$s" "Pieejams, izmantojot %1$s" @@ -63,6 +65,9 @@ "Savienojums izveidots %2$s (nav tālrunis), akumulatora uzlādes līmenis: %1$s" "Savienojums izveidots (%2$s) (nav multivide), akumulatora uzlādes līmenis: %1$s" "Savienojums izveidots (nav tālrunis vai multivide) (%2$s), akumulatora uzlādes līmenis: %1$s" + "Aktīvs, akumulatora uzlādes līmenis: %1$s" + "Akumulatora uzlādes līmenis: %1$s" + "Aktīvs" "Multivides audio" "Tālruņa zvani" "Failu pārsūtīšana" @@ -109,6 +114,10 @@ "Austiņas" "Ievades ierīce" "Bluetooth" + "Notiek kreisā dzirdes aparāta savienošana pārī…" + "Notiek labā dzirdes aparāta savienošana pārī…" + "Pa kreisi — akumulatora uzlādes līmenis: %1$s" + "Pa labi — akumulatora uzlādes līmenis: %1$s" "Wi-Fi savienojums izslēgts" "Wi-Fi savienojums pārtraukts" "Wi-Fi: viena josla" @@ -188,7 +197,7 @@ "Atstāt nomodā" "Uzlādes laikā ekrāns nekad nepārslēgsies miega režīmā" "Iespējot Bluetooth HCI analizētāja žurnālu" - "Tvert visas Bluetooth HCI paketes failā" + "Tvert visas Bluetooth HCI paketes failā (pārslēgt Bluetooth pēc šī iestatījuma mainīšanas)" "OEM atbloķēšana" "Atļaut palaišanas ielādētāja atbloķēšanu" "Vai atļaut OEM atbloķēšanu?" @@ -207,15 +216,20 @@ "Bluetooth AVRCP versija" "Atlasiet Bluetooth AVRCP versiju" "Bluetooth audio kodeks" - "Atlasīt Bluetooth audio kodeku" + + "Bluetooth audio iztveršanas ātrums" - "Atlasīt Bluetooth audio kodeku:\niztveršanas ātrums" + + "Bluetooth audio bitu skaits iztvērumā" - "Atlasīt Bluetooth audio kodeku:\nbitu skaits iztvērumā" + + "Bluetooth audio kanāla režīms" - "Atlasīt Bluetooth audio kodeku:\nkanāla režīms" + + "Bluetooth audio LDAC kodeks: atskaņošanas kvalitāte" - "Atlasīt Bluetooth audio LDAC kodeku:\natskaņošanas kvalitāte" + + "Straumēšana: %1$s" "Privāts DNS" "Atlasiet privāta DNS režīmu" @@ -223,9 +237,12 @@ "Automātiski" "Privātā DNS pakalpojumu sniedzēja saimniekdatora nosaukums" "Ievadiet DNS pakalpojumu sniedzēja saimniekdatora nosaukumu" + "Nevarēja izveidot savienojumu." "Rādīt bezvadu attēlošanas sertifikācijas iespējas" "Palieliniet Wi‑Fi reģistrēšanas līmeni; rādīt katram SSID RSSI Wi‑Fi atlasītājā." "Izveidot nejaušas MAC adreses, izveidojot savienojumu ar Wi‑Fi tīkliem" + "Maksas" + "Bezmaksas" "Reģistrētāja buferu lielumi" "Atlasīt reģistrētāja bufera liel." "Vai notīrīt reģistrētāja pastāvīgo krātuvi?" @@ -360,14 +377,10 @@ "Atlikušais laiks: aptuveni %1$s (ņemot vērā lietojumu)" "Ņemot vērā lietojumu, atlikušais laiks: aptuveni %1$s (%2$s)" "Atlicis: %1$s" - - - - - - - - + "Ņemot vērā lietojumu (%2$s), darbosies aptuveni līdz %1$s." + "Ņemot vērā lietojumu, darbosies aptuveni līdz %1$s" + "Darbosies aptuveni līdz %1$s (%2$s)" + "Darbosies aptuveni līdz %1$s" "Atlikušais laiks — mazāk nekā %1$s" "Atlicis mazāk nekā %1$s (%2$s)" "Atlicis vairāk nekā %1$s (%2$s)" @@ -422,8 +435,7 @@ "Reģistrēts" "Nav reģistrēts" "Nepieejams" - - + "MAC ir atlasīts nejaušā secībā" Pievienotas %1$d ierīces Pievienota %1$d ierīce @@ -444,6 +456,5 @@ "%1$s" "Ilgums" "Vaicāt katru reizi" - - + "Tikko" diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml index c47083bcfa64271cbaa3905d9b15b1d239f68002..fa29adc05e8f9027008c9f6400446167a6d58537 100644 --- a/packages/SettingsLib/res/values-mk/strings.xml +++ b/packages/SettingsLib/res/values-mk/strings.xml @@ -40,6 +40,8 @@ "Поврзано преку %1$s" "Достапно преку %1$s" "Поврзана, нема интернет" + "Нема интернет" + "Потребно е најавување" "Пристапната точка привремено е преоптоварена" "Поврзано преку %1$s" "Достапно преку %1$s" @@ -63,6 +65,9 @@ "Поврзан со %2$s (без телефон), ниво на батеријата %1$s" "Поврзан со %2$s (без аудиовизуелни содржини), ниво на батеријата %1$s" "Поврзан со %2$s (без телефон и аудиовизуелни содржини), ниво на батеријата %1$s" + "Активен, %1$s батерија" + "%1$s батерија" + "Активен" "Аудио на медиуми" "Телефонски повици" "Пренос на датотека" @@ -109,6 +114,10 @@ "Слушалка" "Периферен влез" "Bluetooth" + "Се спарува лев апарат за слушање…" + "Се спарува десен апарат за слушање…" + "Лево - %1$s батерија" + "Десно - %1$s батерија" "Wi-Fi е исклучено." "Wi-Fi е исклучено." "Една црта на Wi-Fi." @@ -188,7 +197,7 @@ "Остани во активен режим" "Екранот никогаш нема да биде во режим на штедење додека се полни" "Овозможи Bluetooth HCI за евиденција на пресретнување пакети" - "Сними ги сите Bluetooth HCI пакети во датотека" + "Сними ги сите Bluetooth HCI пакети во датотека (Вклучи Bluetooth откако ќе се смени поставкава)" "Отклучување со OEM" "Дозволи да се отклучи подигнувачот" "Дозволете отклучување со OEM?" @@ -207,15 +216,20 @@ "Верзија Bluetooth AVRCP" "Изберете верзија Bluetooth AVRCP" "Кодек за аудио преку Bluetooth" - "Изберете кодек за аудио преку Bluetooth" + + "Стапка на семпл преку Bluetooth" - "Изберете кодек за аудио преку Bluetooth:\nСтапка на примерок" + + "Аудио бит-по-семпл преку Bluetooth" - "Изберете кодек за аудио преку Bluetooth:\nБитови/примерок" + + "Режим на канал за аудио преку Bluetooth" - "Изберете кодек за аудио преку Bluetooth:\nРежим на канал" + + "Кодек за LDAC-аудио преку Bluetooth: квалитет на репродукција" - "Изберете кодек за LDAC-аудио преку Bluetooth:\nКвалитет на репродукција" + + "Емитување: %1$s" "Приватен DNS" "Изберете режим на приватен DNS" @@ -223,9 +237,12 @@ "Автоматски" "Име на хост на оператор на приватен DNS" "Внесете име на хост на операторот на DNS" + "Не може да се поврзе" "Покажи ги опциите за безжичен приказ на сертификат" "Зголеми Wi‑Fi ниво на пријавување, прикажи по SSID RSSI во Wi‑Fi бирач" "Користи MAC-адреса по случаен избор при поврзување на Wi‑Fi мрежи" + "Со ограничен интернет" + "Без ограничен интернет" "Величини на меѓумеморија на забележувач" "Величина/меѓумеморија на дневник" "Да се избрише постојаната меморија на дневникот?" @@ -360,14 +377,10 @@ "Уште околу %1$s според користењето" "Уште околу %1$s според вашето користење (%2$s)" "уште %1$s" - - - - - - - - + "Треба да трае до околу %1$s според вашето користење (%2$s)" + "Треба да трае до околу %1$s според вашето користење" + "Треба да трае до околу %1$s (%2$s)" + "Треба да трае до околу %1$s" "Уште помалку од %1$s" "Уште помалку од %1$s (%2$s)" "Уште повеќе од %1$s (%2$s)" @@ -422,8 +435,7 @@ "Регистриран" "Не е регистриран" "Недостапен" - - + "MAC-адресата е рандомизирана" Поврзан е %1$d уред Поврзани се %1$d уреди @@ -443,6 +455,5 @@ "во %1$s" "Времетраење" "Секогаш прашувај" - - + "Неодамнешни" diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml index 5b33ba86e2ce032b6c27dd6ae063d5ad4aa62405..8972733090eced9991e679ac5b8c6a374f5fbcb6 100644 --- a/packages/SettingsLib/res/values-ml/strings.xml +++ b/packages/SettingsLib/res/values-ml/strings.xml @@ -40,6 +40,8 @@ "%1$s വഴി ബന്ധിപ്പിച്ചു" "%1$s വഴി ലഭ്യം" "കണക്റ്റ് ചെയ്‌തു, ഇന്റർനെറ്റ് ഇല്ല" + "ഇന്റർനെറ്റ് ഇല്ല" + "സൈൻ ഇൻ ചെയ്യേണ്ടത് ആവശ്യമാണ്" "ആക്‌സസ് പോയിന്റ് താൽക്കാലികമായി നിറഞ്ഞിരിക്കുന്നു" "%1$s വഴി ബന്ധിപ്പിച്ചു" "%1$s വഴി ലഭ്യം" @@ -63,6 +65,9 @@ "കണ‌ക്റ്റ് ചെയ്‌തു (ഫോൺ ഇല്ല), ബാറ്ററി നില %1$s%2$s" "കണക്റ്റ് ചെയ്‌തു (മീഡിയ ഇല്ല), ബാറ്ററി %1$s%2$s" "കണ‌ക്റ്റ് ചെയ്‌തു (ഫോണോ മീഡിയയോ ഇല്ല), ബാറ്ററി നില %1$s%2$s" + "സജീവം, %1$s ബാറ്ററി" + "%1$s ബാറ്ററി" + "സജീവം" "മീഡിയ ഓഡിയോ" "ഫോണ്‍‌ കോളുകൾ" "ഫയൽ കൈമാറൽ" @@ -109,6 +114,10 @@ "ഹെഡ്ഫോൺ" "ഇൻപുട്ട് പെരിഫറൽ" "Bluetooth" + "ഇടത് വശത്തെ ശ്രവണ സഹായി ജോടിയാക്കുന്നു…" + "വലത് വശത്തെ ശ്രവണ സഹായി ജോടിയാക്കുന്നു…" + "ഇടത് വശത്ത്- %1$s ബാറ്ററി" + "വലത് വശത്ത് - %1$s ബാറ്ററി" "വൈഫൈ ഓഫാണ്." "വൈഫൈ വിച്ഛേദിച്ചു." "വൈഫൈ സിഗ്നൽ ഒരു ബാർ." @@ -188,7 +197,8 @@ "സജീവമായി തുടരുക" "ചാർജ്ജുചെയ്യുമ്പോൾ സ്‌ക്രീൻ ഒരിക്കലും സുഷുപ്തിയിലാകില്ല" "ബ്ലൂടൂത്ത് HCI സ്‌നൂപ്പ് ലോഗ് സജീവമാക്കൂ" - "ഒരു ഫയലിൽ എല്ലാ ബ്ലൂടൂത്ത് HCI പാക്കറ്റുകളും ക്യാപ്‌ചർ ചെയ്യുക" + + "OEM അൺലോക്കുചെയ്യൽ" "അൺലോക്കാകാൻ ബൂട്ട്‌ലോഡറിനെ അനുവദിക്കുക" "OEM അൺലോക്കുചെയ്യൽ അനുവദിക്കണോ?" @@ -207,15 +217,20 @@ "Bluetooth AVRCP പതിപ്പ്" "Bluetooth AVRCP പതിപ്പ് തിരഞ്ഞെടുക്കുക" "Bluetooth ഓഡിയോ കോഡെക്" - "Bluetooth ഓഡിയോ കോഡെക് തിരഞ്ഞെടുക്കുക" + + "Bluetooth ഓഡിയോ സാമ്പിൾ നിരക്ക്" - "Bluetooth ഓഡിയോ കോഡെക് തിരഞ്ഞെടുക്കുക:\nസാമ്പിൾ നിരക്ക്" + + "പ്രതി സാമ്പിളിലെ Bluetooth ഓഡിയോ ബിറ്റ് നി" - "Bluetooth ഓഡിയോ കോഡെക് തിരഞ്ഞെടുക്കുക:\nബിറ്റ്‌/സാമ്പിൾ" + + "Bluetooth ഓഡിയോ ചാനൽ മോഡ്" - "Bluetooth ഓഡിയോ കോഡെക് തിരഞ്ഞെടുക്കുക:\nചാനൽ മോഡ്" + + "Bluetooth ഓഡിയോ LDAC കോഡെക്: പ്ലേബാക്ക് ‌നിലവാരം" - "Bluetooth ഓഡിയോ LDAC കോഡെക് തിരഞ്ഞെടുക്കുക:\nപ്ലേബാക്ക് ‌നിലവാരം" + + "സ്ട്രീമിംഗ്: %1$s" "സ്വകാര്യ DNS" "സ്വകാര്യ DNS മോഡ് തിരഞ്ഞെടുക്കുക" @@ -223,9 +238,12 @@ "സ്വമേധയാ" "സ്വകാര്യ DNS ദാതാവിന്‍റെ ഹോസ്റ്റുനാമം" "DNS ദാതാവിന്‍റെ ഹോസ്റ്റുനാമം നൽകുക" + "കണക്റ്റ് ചെയ്യാനായില്ല" "വയർലെസ് ഡിസ്‌പ്ലേ സർട്ടിഫിക്കേഷനായി ഓപ്‌ഷനുകൾ ദൃശ്യമാക്കുക" "വൈഫൈ പിക്കറിൽ ഓരോ SSID RSSI പ്രകാരം കാണിക്കാൻ വൈഫൈ ലോഗിംഗ് നില വർദ്ധിപ്പിക്കുക" "വൈഫൈ നെറ്റ്‌വർക്കുകളിലേക്ക് കണക്‌റ്റ് ചെയ്യുമ്പോൾ MAC വിലാസം ക്രമരഹിതമാക്കുക" + "മീറ്റർമാപകം" + "മീറ്റർമാപകമല്ലാത്തത്" "ലോഗർ ബഫർ വലുപ്പം" "ഓരോ ലോഗ് ബഫറിനും വലുപ്പം തിരഞ്ഞെടുക്കൂ" "ലോഗർ സ്ഥിര സ്റ്റോറേജ് മായ്ക്കണോ?" @@ -360,14 +378,10 @@ "നിങ്ങളുടെ ഉപയോഗത്തെ അടിസ്ഥാനമാക്കി ഏതാണ്ട് %1$s ശേഷിക്കുന്നു" "നിങ്ങളുടെ ഉപയോഗത്തെ അടിസ്ഥാനമാക്കി ഏതാണ്ട് %1$s ശേഷിക്കുന്നു (%2$s)" "%1$s ശേഷിക്കുന്നു" - - - - - - - - + "നിങ്ങളുടെ ഉപയോഗത്തെ അടിസ്ഥാനമാക്കി ഏകദേശം %1$s വരെ നീണ്ടുനിൽക്കേണ്ടതാണ് (%2$s)" + "നിങ്ങളുടെ ഉപയോഗത്തെ അടിസ്ഥാനമാക്കി ഏകദേശം %1$s വരെ നീണ്ടുനിൽക്കേണ്ടതാണ്" + "ഏകദേശം %1$s വരെ നീണ്ടുനിൽക്കേണ്ടതാണ് (%2$s)" + "ഏകദേശം %1$s വരെ നീണ്ടുനിൽക്കേണ്ടതാണ്" "%1$s-ൽ കുറവ് സമയം ശേഷിക്കുന്നു" "%1$s-ൽ കുറവ് സമയം ശേഷിക്കുന്നു (%2$s)" "%1$s-ൽ കൂടുതൽ സമയം ശേഷിക്കുന്നു (%2$s)" @@ -422,8 +436,7 @@ "രജിസ്റ്റർ ചെയ്‌തു" "രജിസ്‌റ്റർ ചെയ്‌തിട്ടില്ല" "ലഭ്യമല്ല" - - + "MAC യാദൃച്ഛികമാക്കിയിരിക്കുന്നു" %1$d ഉപകരണങ്ങൾ കണക്‌റ്റ് ചെയ്‌തു %1$d ഉപകരണം കണക്‌റ്റ് ചെയ്‌തു @@ -443,6 +456,5 @@ "%1$s-ന്" "ദൈർഘ്യം" "എപ്പോഴും ചോദിക്കുക" - - + "ഇപ്പോൾ" diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml index 14db7137f764aa5c247ae3b33083cccd42eafbd5..bc1d2e7753965bee0111036c6856ed80ff208207 100644 --- a/packages/SettingsLib/res/values-mn/strings.xml +++ b/packages/SettingsLib/res/values-mn/strings.xml @@ -40,6 +40,10 @@ "%1$s-р холбогдсон" "%1$s-р боломжтой" "Холбогдсон хэдий ч интернет алга" + + + + "Хандах цэг түр хугацаанд дүүрсэн байна" "%1$s-р холбогдсон" "%1$s-р боломжтой" @@ -63,6 +67,12 @@ "Холбогдсон (утас байхгүй), батерей %1$s%2$s" "Холбогдсон (медиа байхгүй), батерей %1$s%2$s" "Холбогдсон (утас эсвэл медиа байхгүй), батерей %1$s%2$s" + + + + + + "Медиа аудио" "Утасны дуудлага" "Файл дамжуулалт" @@ -109,6 +119,14 @@ "Чихэвч" "Нэмэлт оролт" "Bluetooth" + + + + + + + + "Wifi унтраалттай байна." "Wifi холбогдоогүй байна." "Wifi сүлжээний дохио нэг баганатай байна." @@ -188,7 +206,7 @@ "Идэвхтэй байлгах" "Цэнэглэж байх үед дэлгэц хэзээ ч амрахгүй" "Bluetooth HCI снүүп логыг идэвхжүүлэх" - "Файл доторх бүх блютүүт HCI пакетуудыг унших" + "Файлд Bluetooth HCI-н бүх багцыг авах (Энэ тохиргоог өөрчилсний дараа Bluetooth-г унтраах/асаах)" "OEM түгжээ тайлагч" "Bootloader-н түгжээг тайлахыг зөвшөөрөх" "OEM түгжээ тайлагчийг зөвшөөрөх үү?" @@ -207,15 +225,20 @@ "Bluetooth AVRCP хувилбар" "Bluetooth AVRCP хувилбарыг сонгох" "Bluetooth аудио кодлогч" - "Bluetooth аудио кодлогч сонгох" + + "Bluetooth аудио жишээний үнэлгээ" - "Bluetooth аудио кодлогч сонгох:\nЖишээний хэмжээ" + + "Жишээ тутмын Bluetooth аудионы бит" - "Bluetooth аудио кодлогч сонгох:\nЖишээ бүрт бит" + + "Bluetooth аудио сувгийн горим" - "Bluetooth аудио кодлогч сонгох:\nСувгийн горим" + + "Bluetooth Аудио LDAC Кодлогч: Тоглуулагчийн чанар" - "Bluetooth Аудио LDAC Кодлогч сонгох:\nТоглуулагчийн чанар" + + "Дамжуулж байна: %1$s" "Хувийн DNS" "Хувийн DNS Горимыг сонгох" @@ -223,9 +246,15 @@ "Автомат" "Хувийн DNS-н үйлчилгээ үзүүлэгчийн хостын нэр" "DNS-н үйлчилгээ үзүүлэгчийн хостын нэрийг оруулах" + + "Утасгүй дэлгэцийн сертификатын сонголтыг харуулах" "Wi‑Fi лог-н түвшинг нэмэгдүүлэх, Wi‑Fi Сонгогч дээрх SSID-д ногдох RSSI-г харуулах" "Wi‑Fi сүлжээнд холбогдох үедээ шинэ дурын (random) MAC хаяг үүсгэх" + + + + "Логгерын буферын хэмжээ" "Лог буфер бүрт ногдох логгерын хэмжээг сонгоно уу" "Нэвтрэгчийн тогтмол санг устгах уу?" @@ -360,14 +389,10 @@ "Таны хэрэглээнд тулгуурлан %1$s орчмын хугацаа үлдсэн байна" "Таны хэрэглээнд тулгуурлан ойролцоогоор %1$s үлдсэн (%2$s)" "%1$s үлдсэн" - - - - - - - - + "Таны хэрэглээнд (%2$s) тулгуурлан ойролцоогоор %1$s хүртэл барих ёстой" + "Таны хэрэглээнд тулгуурлан ойролцоогоор %1$s хүртэл барих ёстой" + "Ойролцоогоор %1$s хүртэл барих ёстой (%2$s)" + "Ойролцоогоор %1$s хүртэл барих ёстой" "%1$s-с бага хугацаа үлдсэн" "%1$s-с бага хугацаа үлдсэн (%2$s)" "%1$s-с их хугацаа үлдсэн (%2$s)" @@ -422,8 +447,7 @@ "Бүртгэсэн" "Бүртгээгүй" "Байхгүй" - - + "MAC хаягийг үүсгэсэн" %1$d төхөөрөмж холбосон %1$d төхөөрөмж холбосон @@ -443,6 +467,5 @@ "%1$s-д" "Хугацаа" "Тухай бүрт асуух" - - + "Дөнгөж сая" diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml index d6ac6533c22906cdce3e36cd47aed6006c2f2252..64f745cec21d74d57999290efd2d4dbb421b106d 100644 --- a/packages/SettingsLib/res/values-mr/strings.xml +++ b/packages/SettingsLib/res/values-mr/strings.xml @@ -40,6 +40,10 @@ "%1$s द्वारे कनेक्‍ट केले" "%1$s द्वारे उपलब्‍ध" "कनेक्‍ट केले, इंटरनेट नाही" + + + + "अॅक्सेस पॉइंट तात्पुरते भरलेले" "%1$s ने कनेक्‍ट केले" "%1$s ने उपलब्‍ध" @@ -63,6 +67,12 @@ "कनेक्ट केले (फोन नाही), बॅटरी %1$s%2$s" "कनेक्ट केले (मीडिया नाही), बॅटरी %1$s%2$s" "कनेक्ट केले (फोन किंवा मीडिया नाही), बॅटरी %1$s%2$s" + + + + + + "मीडिया ऑडिओ" "फोन कॉल" "फाइल स्थानांतरण" @@ -109,6 +119,14 @@ "हेडफोन" "इनपुट परिधीय" "ब्लूटूथ" + + + + + + + + "वाय फाय बंद." "वाय फाय डिस्कनेक्ट झाले." "वाय फाय एक बार." @@ -188,7 +206,8 @@ "सक्रिय रहा" "चार्ज होत असताना स्क्रीन कधीही निष्क्रिय होणार नाही" "ब्लूटूथ HCI स्नूप लॉग सक्षम करा" - "सर्व ब्लूटूथ HCI पॅकेट एका फाईलमध्ये कॅप्चर करा" + + "OEM अनलॉक करणे" "बूटलोडर अनलॉक करण्यासाठी अनुमती द्या" "OEM अनलॉक करण्यास अनुमती द्यायची?" @@ -207,15 +226,20 @@ "ब्लूटूथ AVRCP आवृत्ती" "ब्लूटूथ AVRCP आवृत्ती निवडा" "ब्लूटूथ ऑडिओ कोडेक" - "ब्लूटूथ ऑडिओ कोडेक निवडा" + + "ब्लूटूथ ऑडिओ पॅटर्न दर" - "ब्लूटूध ऑडिओ कोडेक निवडा:\nपॅटर्न दर" + + "प्रति पॅटर्न ब्लूटूध ऑडिओ बिट" - "ब्लूटूध ऑडिओ कोडेक निवडा:\nबिट प्रति पॅटर्न" + + "ब्लूटूथ ऑडिओ चॅनेल मोड" - "ब्लूटूथ ऑडिओ कोडेक निवडा:\nचॅनेल मोड" + + "ब्लूटूथ ऑडिओ LDAC कोडेक: प्लेबॅक गुणवत्ता" - "ब्लूटूथ ऑडिओ LDAC कोडेक निवडा:\nप्लेबॅक गुणवत्ता" + + "स्ट्रीमिंग: %1$s" "खाजगी DNS" "खाजगी DNS मोड निवडा" @@ -223,9 +247,15 @@ "आपोआप" "खाजगी DNS पुरवठादार होस्ट नाव" "DNS पुरवठादाराचे होस्टनाव टाका" + + "वायरलेस डिस्प्ले प्रमाणिकरणाचे पर्याय दाखवा" "वाय-फाय लॉगिंग स्‍तर वाढवा, वाय-फाय सिलेक्टरमध्‍ये प्रति SSID RSSI दर्शवा" "वाय-फाय नेटवर्कशी कनेक्ट करताना MAC अ‍ॅड्रेस रँडमाइझ करा" + + + + "लॉगर बफर आकार" "प्रति लॉग बफर लॉगर आकार निवडा" "लॉगरवर सतत असणारा संचय साफ करायचा?" @@ -360,14 +390,10 @@ "तुमच्या वापरानुसार अंदाजे %1$s पुरेल इतकी बॅटरी शिल्लक आहे" "तुमच्या वापराच्या (%2$s) आधारावर %1$s शिल्लक आहे" "%1$s शिल्लक" - - - - - - - - + "तुमच्या वापरावर अवलंबून सुमारे %1$s पर्यंत टिकावी (%2$s)" + "तुमच्या वापरावर अवलंबून सुमारे %1$s पर्यंत टिकावी" + "सुमारे %1$s पर्यंत टिकेल (%2$s)" + "सुमारे %1$s पर्यंत टिकावी" "%1$s पेक्षा कमी शिल्लक आहे" "%1$s पेक्षा कमी वेळ शिल्लक आहे (%2$s)" "%1$s पेक्षा जास्त वेळ शिल्लक आहे (%2$s)" @@ -422,8 +448,7 @@ "नोंदवलेले" "नोंदवलेले नाही" "अनुपलब्ध" - - + "MAC रँडमाइझ केला आहे" %1$d डिव्हाइस कनेक्ट केले आहे %1$d डिव्हाइस कनेक्ट केली आहेत @@ -443,6 +468,5 @@ "%1$s रोजी" "कालावधी" "प्रत्येक वेळी विचारा" - - + "आत्ताच" diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml index 7d2fb8a60524884038c824de2ce9d38f6e6ba7d5..7f8e73e2fdec8b3e30936b7867297c6723e8e46a 100644 --- a/packages/SettingsLib/res/values-ms/strings.xml +++ b/packages/SettingsLib/res/values-ms/strings.xml @@ -40,6 +40,10 @@ "Disambungkan melalui %1$s" "Tersedia melalui %1$s" "Disambungkan, tiada Internet" + + + + "Titik akses penuh buat sementara waktu" "Disambungkan melalui %1$s" "Tersedia melalui %1$s" @@ -63,6 +67,12 @@ "Disambungkan (tiada telefon), bateri %1$s%2$s" "Disambungkan (tiada media), bateri %1$s%2$s" "Disambungkan (tiada telefon atau media), bateri %1$s%2$s" + + + + + + "Audio media" "Panggilan telefon" "Pemindahan fail" @@ -109,6 +119,14 @@ "Fon kepala" "Persisian Input" "Bluetooth" + + + + + + + + "Wi-Fi dimatikan." "Wi-Fi diputuskan sambungannya." "Wi-Fi satu bar." @@ -188,7 +206,7 @@ "Tetap berjaga" "Skrin tidak sekali-kali akan tidur semasa pengecasan" "Dayakan log intip HCI Bluetooth" - "Tangkap semua paket HCI bluetooth dalam fail" + "Tangkap semua paket HCI Bluetooth dalam fail (Togol Bluetooth selepas menukar tetapan ini)" "Pembukaan kunci OEM" "Benarkan pemuat but untuk dibuka kunci" "Benarkan pembukaan kunci OEM?" @@ -207,15 +225,20 @@ "Versi AVRCP Bluetooth" "Pilih Versi AVRCP Bluetooth" "Codec Audio Bluetooth" - "Pilih Codec Audio Bluetooth" + + "Kadar Sampel Audio Bluetooth" - "Pilih Codec Audio Bluetooth:\nKadar Sampel" + + "Bit Per Sampel Audio Bluetooth" - "Pilih Codec Audio Bluetooth:\nBit Per Sampel" + + "Mod Saluran Audio Bluetooth" - "Pilih Codec Audio Bluetooth:\nMod Saluran" + + "Codec LDAC Audio Bluetooth: Kualiti Main Balik" - "Pilih Codec LDAC Audio Bluetooth:\nKualiti Main Balik" + + "Penstriman: %1$s" "DNS Peribadi" "Pilih Mod DNS Peribadi" @@ -223,9 +246,15 @@ "Automatik" "Nama hos pembekal DNS peribadi" "Masukkan nama hos pembekal DNS" + + "Tunjukkan pilihan untuk pensijilan paparan wayarles" "Tingkatkan tahap pengelogan Wi-Fi, tunjuk setiap SSID RSSI dalam Pemilih Wi-Fi" "Rawakkan alamat MAC apabila menyambung ke rangkaian Wi‑Fi" + + + + "Saiz penimbal pengelog" "Pilih saiz Pengelog bagi setiap penimbal log" "Kosongkan storan gigih pengelog?" @@ -360,14 +389,10 @@ "Tinggal kira-kira %1$s berdasarkan penggunaan anda" "Tinggal kira-kira %1$s berdasarkan penggunaan anda (%2$s)" "%1$s lagi" - - - - - - - - + "Seharusnya boleh digunakan hingga kira-kira %1$s berdasarkan penggunaan anda (%2$s)" + "Seharusnya boleh digunakan hingga kira-kira %1$s berdasarkan penggunaan anda" + "Seharusnya boleh digunakan hingga kira-kira %1$s (%2$s)" + "Seharusnya boleh digunakan hingga kira-kira %1$s" "Tinggal kurang daripada %1$s" "Kurang daripada %1$s lagi (%2$s)" "Lebih daripada %1$s lagi (%2$s)" @@ -422,8 +447,7 @@ "Berdaftar" "Tidak didaftarkan" "Tidak tersedia" - - + "MAC dirawakkan" %1$d peranti disambungkan %1$d peranti disambungkan @@ -443,6 +467,5 @@ "pada %1$s" "Tempoh" "Tanya setiap kali" - - + "Sebentar tadi" diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml index 1ee6414ebd9e1eb84e4e7dc874bb7cdfbda9b386..1a80a067d2e07fe42f4b3f015124ac757a918ea3 100644 --- a/packages/SettingsLib/res/values-my/strings.xml +++ b/packages/SettingsLib/res/values-my/strings.xml @@ -40,6 +40,8 @@ "%1$s မှတစ်ဆင့် ချိတ်ဆက်ထားသည်" "%1$s မှတစ်ဆင့်ရနိုင်သည်" "ချိတ်ဆက်ထားသည်၊ အင်တာနက်မရှိ" + "အင်တာနက် မရှိပါ" + "လက်မှတ်ထိုးဝင်ရန် လိုအပ်သည်" "ကွန်ရက်ချိတ်ဆက်မှု ယာယီပြည့်နေသည်" "%1$s မှတစ်ဆင့် ချိတ်ဆက်ထားသည်" "%1$s မှတစ်ဆင့် ရနိုင်သည်" @@ -63,6 +65,9 @@ "ချိတ်ဆက်ပြီးပြီ (ဖုန်းမရှိပါ)၊ ဘက်ထရီ %1$s%2$s" "ချိတ်ဆက်ပြီးပြီ (မီဒီယာ မရှိပါ)၊ ဘက်ထရီ %1$s%2$s" "ချိတ်ဆက်ပြီးပြီ (ဖုန်း (သို့) မီဒီယာ မရှိပါ)၊ ဘက်ထရီ %1$s%2$s" + "ဖွင့်ထားသည်၊ ဘက်ထရီ %1$s" + "ဘက်ထရီ %1$s" + "ဖွင့်ထားသည်" "မီဒီယာ အသံ" "ဖုန်းခေါ်ဆိုမှုများ" "ဖိုင်လွဲပြောင်းခြင်း" @@ -109,6 +114,10 @@ "နားကြပ်" "ချိတ်ဆက်အသုံးပြုရသည့် စက်ပစ္စည်းများ" "ဘလူးတုသ်" + "ဘယ်ဘက် နားကြီးကိရိယာကို တွဲချိတ်နေသည်…" + "ညာဘက် နားကြားကိရိယာကို တွဲချိတ်နေသည်…" + "ဘယ်ဘက် − ဘက်ထရီ %1$s" + "ညာဘက် − ဘက်ထရီ %1$s" "Wi-Fi ပိတ်ထားသည်" "Wi-Fi ချိတ်ဆက်ထားမှု မရှိပါ" "Wi-Fi ၁ ဘားရှိ" @@ -188,7 +197,7 @@ "ဖွင့်လျက်သား" "အားသွင်းနေစဉ် ဖန်သားပြင်မှာဘယ်သောအခါမှ ပိတ်မည်မဟုတ်ပါ။" "ဘလူးတုသ် HCI snoop မှတ်တမ်းကို ဖွင့်ရန်။" - "ဘလူးတုသ် HCI အစုလိုက်များကို ဖိုင်တစ်ခုတွင် ဖမ်းယူရန်" + "ဖိုင်တစ်ခုတွင် ဘလူးတုသ် HCI အစုလိုက်များကို ဖမ်းယူရန် (ဤဆက်တင်ကို ပြောင်းပြီးသည့်အခါ ဘလူးတုသ် ဖွင့်/ပိတ် လုပ်ပါ)" "OEM သော့ဖွင့်ခြင်း" "အစပြုခြင်းကိရိယာအား သော့ဖွင့်ရန် ခွင့်ပြုမည်" "OEM သော့ဖွင့်ခြင်း ခွင့်ပြုမလား?" @@ -207,15 +216,20 @@ "ဘလူးတုသ် AVRCP ဗားရှင်း" "ဘလူးတုသ် AVRCP ဗားရှင်းကို ရွေးပါ" "ဘလူးတုသ်အသံ ကိုးဒက်ခ်" - "ဘလူးတုသ်အသံကိုးဒက်ခ်ကို ရွေးပါ" + + "ဘလူးတုသ်အသံနမူနာနှုန်း" - "ဘလူးတုသ်အသံ ကိုးဒက်ခ်ကို ရွေးပါ−\nနမူနာနှုန်း" + + "နမူနာတစ်ခုစီတွင် ပါဝင်သော ဘလူးတုသ်အသံပမာဏ Bits" - "ဘလူးတုသ်အသံ ကိုးဒက်ခ်ကို ရွေးပါ−\nနမူနာတစ်ခုချင်းအတွက် Bits" + + "ဘလူးတုသ်အသံချန်နယ်မုဒ်" - "ဘလူးတုသ်အသံကိုးဒက်ခ်ကို ရွေးပါ−\nချန်နယ်မုဒ်" + + "ဘလူးတုသ်အသံ LDAC ကိုးဒက်ခ်− နားထောင်ရန် အရည်အသွေး" - "ဘလူးတုသ်အသံ LDAC ကိုးဒက်ခ်ကို ရွေးပါ−\nနားထောင်ရန် အရည်အသွေး" + + "တိုက်ရိုက်လွှင့်နေသည်− %1$s" "သီးသန့် DNS" "သီးသန့် DNS မုဒ်ကို ရွေးပါ" @@ -223,9 +237,12 @@ "အလိုအလျောက်" "သီးသန့် DNS ပံ့ပိုးသူ၏ အင်တာနက်လက်ခံဝန်ဆောင်ပေးသူအမည်" "DNS ဝန်ဆောင်မှုပေးသူ၏ အင်တာနက်လက်ခံဝန်ဆောင်ပေးသူအမည်ကို ထည့်ပါ" + "ချိတ်ဆက်၍ မရပါ" "ကြိုးမဲ့ အခင်းအကျင်း အသိအမှတ်ပြုလက်မှတ်အတွက် ရွေးချယ်စရာများပြရန်" "Wi‑Fi မှတ်တမ်းတင်ခြင်း နှုန်းအားမြင့်ကာ၊ Wi‑Fi ရွေးရာတွင် SSID RSSI ဖြင့်ပြပါ" "Wi‑Fi ကွန်ရက်များသို့ ချိတ်ဆက်သည့်အခါ MAC လိပ်စာ ကျပန်းပြုလုပ်ခြင်း" + "မိမိအသုံးပြုမှုအလိုက် ကောက်ခံထားသည်" + "မိမိအသုံးပြုမှုအလိုက် ကောက်ခံခြင်းမရှိပါ" "လော့ဂါး ဘာဖား ဆိုက်များ" "လော့ ဘာဖားတွက် လော့ဂါးဆိုက် ရွေး" "မှတ်တမ်းထိန်းသိမ်းပေးသည့် သိုလှောင်ခန်းကို ရှင်းလင်းမလား။" @@ -360,14 +377,10 @@ "သင့်အသုံးပြုမှုအရ %1$s ခန့် ကျန်ပါသည်" "သင်၏ အသုံးပြုမှု အပေါ် မူတည်၍ %1$s ခန့် ကျန်သည် (%2$s)" "%1$s ကျန်သည်" - - - - - - - - + "သင်၏ အသုံးပြုမှုအပေါ် မူတည်၍ %1$s ခန့်အထိ သုံးနိုင်သည် (%2$s)" + "သင်၏ အသုံးပြုမှုအပေါ် အခြေခံ၍ %1$s ခန့်အထိ သုံးနိုင်သည်" + "%1$s ခန့်အထိ သုံးနိုင်သည် (%2$s)" + "%1$s ခန့်အထိ သုံးနိုင်သည်" "%1$s ခန့်သာ ကျန်တော့သည်" "%1$s အောက်သာ ကျန်သည် (%2$s)" "%1$s ကျော် ကျန်သည် (%2$s)" @@ -422,8 +435,7 @@ "မှတ်ပုံတင်ထားသည်" "မှတ်ပုံတင်မထားပါ" "မရရှိနိုင်ပါ။" - - + "MAC ကို ကျပန်းပေးထားသည်" စက် %1$d ခု ချိတ်ဆက်ထားသည် စက် %1$d ခု ချိတ်ဆက်ထားသည် @@ -443,6 +455,5 @@ "%1$s တွင်" "ကြာချိန်" "အမြဲမေးပါ" - - + "ယခုလေးတင်" diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml index 8ffa69a135bb965be70f4152be09aaf6f3469864..cdb7448b3c776232d0323b1501dc49cb6391cac7 100644 --- a/packages/SettingsLib/res/values-nb/strings.xml +++ b/packages/SettingsLib/res/values-nb/strings.xml @@ -40,6 +40,10 @@ "Tilkoblet via %1$s" "Tilgjengelig via %1$s" "Tilkoblet – ingen Internett-tilgang" + + + + "Tilgangspunktet er midlertidig fullt" "Tilkoblet via %1$s" "Tilgjengelig via %1$s" @@ -63,6 +67,12 @@ "Koblet til (ingen telefon), batteri %1$s%2$s" "Koblet til (ingen medier), batteri %1$s%2$s" "Koblet til (ingen telefon eller medier), batteri %1$s%2$s" + + + + + + "Medielyd" "Telefonsamtaler" "Filoverføring" @@ -109,6 +119,14 @@ "Øretelefoner" "Inndata fra ytre utstyrsenheter" "Bluetooth" + + + + + + + + "Wi-Fi er av." "Wi-Fi er frakoblet." "Wi-Fi-signal med én stolpe." @@ -188,7 +206,7 @@ "Forbli våken" "Skjermen blir aldri svart under lading" "Slå på Bluetooth HCI snoop-logg" - "Samle alle Bluetooth HCI-pakker i en fil" + "Samle alle Bluetooth HCI-pakker i en fil (slå Bluetooth av/på etter at du har endret denne innstillingen)" "OEM-opplåsing" "Tillat at oppstartsinnlasteren låses opp" "Vil du tillate OEM-opplåsing?" @@ -207,15 +225,20 @@ "Bluetooth AVRCP-versjon" "Velg Bluetooth AVRCP-versjon" "Kodek for Bluetooth-lyd" - "Velg kodek for Bluetooth-lyd" + + "Samplefrekvens for Bluetooth-lyd" - "Velg kodek for Bluetooth-lyd:\nSamplefrekvens" + + "Bits per sample for Bluetooth-lyd" - "Velg lydkodek for Bluetooth:\nBits Per Sample" + + "Kanalmodus for Bluetooth-lyd" - "Velg lydkodek for Bluetooth:\nKanalmodus" + + "LDAC-kodek for Bluetooth-lyd: Avspillingskvalitet" - "Velg LDAC-kodek for Bluetooth-lyd:\nAvspillingskvalitet" + + "Strømming: %1$s" "Privat DNS" "Velg Privat DNS-modus" @@ -223,9 +246,15 @@ "Automatisk" "Vertsnavn for privat DNS-leverandør" "Skriv inn vertsnavnet til DNS-leverandøren" + + "Vis alternativer for sertifisering av trådløs skjerm" "Øk Wi-Fi-loggenivå – vis per SSID RSSI i Wi-Fi-velgeren" "Angi tilfeldig MAC-adresse når du kobler til Wi-Fi-nettverk" + + + + "Bufferstørrelser for logg" "Velg loggstørrelse per loggbuffer" "Vil du tømme det varige logglageret?" @@ -360,14 +389,10 @@ "Omtrent %1$s igjen basert på bruken din" "Omtrent %1$s gjenstår basert på bruken din (%2$s)" "%1$s gjenstår" - - - - - - - - + "Skal vare til omtrent %1$s, basert på bruken din (%2$s)" + "Skal vare til omtrent %1$s, basert på bruken din" + "Skal vare til omtrent %1$s (%2$s)" + "Skal vare til omtrent %1$s" "Mindre enn %1$s gjenstår" "Mindre enn %1$s gjenstår (%2$s)" "Mer enn %1$s gjenstår (%2$s)" @@ -422,8 +447,7 @@ "Registrert" "Ikke registrert" "Ikke tilgjengelig" - - + "MAC velges tilfeldig" %1$d enheter er tilkoblet %1$d enhet er tilkoblet @@ -443,6 +467,5 @@ "%1$s" "Varighet" "Spør hver gang" - - + "Nå nettopp" diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml index 668a5b6280a0dfb2b1abbc881c0d246a056d6997..0835c6c10324fddb0da3dadbfae0f2dcf3917766 100644 --- a/packages/SettingsLib/res/values-ne/strings.xml +++ b/packages/SettingsLib/res/values-ne/strings.xml @@ -40,6 +40,10 @@ "%1$s मार्फत जडित" "%1$s मार्फत उपलब्ध" "जडान गरियो तर इन्टरनेट छैन" + + + + "पहुँचसम्बन्धी स्थान अस्थायी रूपमा भरिएको छ" "%1$s मार्फत जडान गरियो" "%1$s मार्फत उपलब्ध" @@ -63,6 +67,12 @@ "जडान गरियो (फोनबाहेेक), ब्याट्री %1$s%2$s" "जडान गरियो (मिडियाबाहेक), ब्याट्री %1$s%2$s" "जडान गरियो (फोन वा मिडियाबाहेक), ब्याट्री %1$s%2$s" + + + + + + "मिडिया अडियो" "फोन कलहरू" "फाइल स्थानान्तरण" @@ -109,6 +119,14 @@ "हेडफोन" "इनपुट सम्बन्धी बाह्य यन्त्र" "ब्लुटुथ" + + + + + + + + "Wi-Fi बन्द।" "Wi-Fi जडान विच्छेद भयो।" "Wi-Fi एक पट्टि।" @@ -188,7 +206,8 @@ "जागा रहनुहोस्" "चार्ज गर्ने बेलामा स्क्रिन कहिल्यै सुत्दैन।" "ब्लुटुथ HCI snoop लग सक्षम पार्नुहोस्" - "सम्पूर्ण ब्लुटुथ HCI प्याकेटहरू एक फाइलमा कैद गर्नुहोस्" + + "OEM अनलक गर्दै" "अनलक हुन बूटलोडरलाई अनुमति दिनुहोस्" "OEM अनलक गर्न अनुमति दिने?" @@ -207,15 +226,20 @@ "ब्लुटुथको AVRCP संस्करण" "ब्लुटुथको AVRCP संस्करण चयन गर्नुहोस्" "ब्लुटुथ अडियोको कोडेक" - "ब्लुटुथ अडियोको कोडेक चयन गर्नुहोस्‌" + + "ब्लुटुथ अडियोको नमूना दर" - "ब्लुटुथ अडियोको कोडेक चयन गर्नुहोस्‌:\nनमूना दर" + + "प्रति नमूना ब्लुटुथ अडियोका बिटहरू" - "ब्लुटुथ अडियोको कोडेक चयन गर्नुहोस्‌:\n प्रति नमूना बिट" + + "ब्लुटुथ अडियो च्यानलको मोड" - "ब्लुटुथ अडियोको कोडेक चयन गर्नुहोस्‌:\nच्यानलको मोड" + + "ब्लुटुथ अडियो LDAC कोडेक: प्लेब्याक गुणस्तर" - "ब्लुटुथ अडियो LDAC कोडेक चयन गर्नुहोस्‌:\nप्लेब्याक गुणस्तर" + + "स्ट्रिमिङ: %1$s" "निजी DNS" "निजी DNS मोड चयन गर्नुहोस्" @@ -223,9 +247,15 @@ "स्वचालित" "निजी DNS प्रदायकको होस्टनाम" "DNS प्रदायकको होस्टनाम प्रविष्ट गर्नुहोस्" + + "ताररहित प्रदर्शन प्रमाणीकरणका लागि विकल्पहरू देखाउनुहोस्" "Wi-Fi लग स्तर बढाउनुहोस्, Wi-Fi चयनकर्तामा प्रति SSID RSSI देखाइन्छ" "Wi‑Fi नेटवर्कहरूमा जडान गर्ने बेला MAC को ठेगाना अनियमित गर्नुहोस्" + + + + "लगर बफर आकारहरू" "लग बफर प्रति लगर आकार चयन गर्नुहोस्" "लगरको निरन्तर भण्डारणलाई खाली गर्ने हो?" @@ -360,14 +390,10 @@ "तपाईंको प्रयोगका आधारमा लगभग %1$s बाँकी" "तपाईंको प्रयोगका आधारमा %1$s बाँकी (%2$s)" "बाँकी समय %1$s" - - - - - - - - + "तपाईंको प्रयोगका आधारमा लगभग %1$s सम्म टिक्नु पर्छ (%2$s)" + "तपाईंको प्रयोगका आधारमा लगभग %1$s सम्म टिक्नु पर्छ" + "ब्याट्री लगभग %1$s सम्म टिक्नु पर्छ (%2$s)" + "लगभग %1$s सम्म टिक्नु पर्छ" "%1$s भन्दा कम समय बाँकी छ" "%1$s भन्दा कम समय बाँकी (%2$s)" "%1$s भन्दा बढी समय बाँकी (%2$s)" @@ -422,8 +448,7 @@ "दर्ता गरिएको" "दर्ता नगरिएको" "अनुपलब्ध" - - + "MAC क्रमरहित छ" %1$d यन्त्रहरू जडान गरिए %1$d यन्त्र जडान गरियो @@ -443,6 +468,5 @@ "%1$s मा" "अवधि" "प्रत्येक पटक सोध्नुहोस्" - - + "अहिले भर्खरै" diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml index a41bab7463c793a3b4c942be36d1972053589891..18d3a08ab9e7065fc199949bab495208c65d64fc 100644 --- a/packages/SettingsLib/res/values-nl/strings.xml +++ b/packages/SettingsLib/res/values-nl/strings.xml @@ -40,6 +40,10 @@ "Verbonden via %1$s" "Beschikbaar via %1$s" "Verbonden, geen internet" + + + + "Toegangspunt tijdelijk vol" "Verbonden via %1$s" "Beschikbaar via %1$s" @@ -63,6 +67,12 @@ "Verbonden: %2$s (geen telefoon), batterij: %1$s" "Verbonden: %2$s (geen media), batterij: %1$s" "Verbonden: %2$s (geen telefoon of media), batterij: %1$s" + + + + + + "Media-audio" "Telefoongesprekken" "Bestandsoverdracht" @@ -109,6 +119,14 @@ "Hoofdtelefoon" "Randapparaat voor invoer" "Bluetooth" + + + + + + + + "Wifi: uitgeschakeld." "Wifi-verbinding verbroken." "Wifi: één streepje." @@ -188,7 +206,7 @@ "Stand-by" "Scherm gaat nooit uit tijdens het opladen" "Snoop-logbestand voor Bluetooth-HCI inschakelen" - "Alle Bluetooth-HCI-pakketten tot één bestand samenvoegen" + "Alle Bluetooth-HCI-pakketten tot één bestand samenvoegen (Schakel Bluetooth in nadat je deze instelling hebt gewijzigd)" "OEM-ontgrendeling" "Toestaan dat de bootloader wordt ontgrendeld" "OEM-ontgrendeling toestaan?" @@ -207,15 +225,20 @@ "Bluetooth-AVRCP-versie" "Bluetooth-AVRCP-versie selecteren" "Bluetooth-audiocodec" - "Bluetooth-audiocodec selecteren" + + "Bemonsteringsfrequentie (sample rate) van Bluetooth-audio" - "Bluetooth-audiocodec selecteren:\nbemonsteringsfrequentie" + + "Bits per sample voor Bluetooth-audio" - "Bluetooth-audiocodec selecteren:\nbit per sample" + + "Kanaalmodus voor Bluetooth-audio" - "Bluetooth-audiocodec selecteren:\nkanaalmodus" + + "LDAC-codec voor Bluetooth-audio: afspeelkwaliteit" - "LDAC-codec voor Bluetooth-audio selecteren:\nafspeelkwaliteit" + + "Streaming: %1$s" "Privé-DNS" "Selecteer de modus Privé-DNS" @@ -223,9 +246,15 @@ "Automatisch" "Hostnaam van privé-DNS-provider" "Geef hostnaam van DNS-provider op" + + "Opties weergeven voor certificering van draadloze weergave" "Logniveau voor wifi verhogen, weergeven per SSID RSSI in wifi-kiezer" "Een willekeurig MAC-adres bij het maken van verbinding met wifi-netwerken" + + + + "Logger-buffergrootten" "Kies Logger-grootten per logbuffer" "Persistente loggeropslag wissen?" @@ -360,14 +389,10 @@ "Nog ongeveer %1$s over op basis van je gebruik" "Nog ongeveer %1$s resterend op basis van je gebruik (%2$s)" "%1$s resterend" - - - - - - - - + "Is nog genoeg voor ongeveer %1$s op basis van je gebruik (%2$s)" + "Is nog genoeg voor ongeveer %1$s op basis van je gebruik" + "Is nog genoeg voor ongeveer %1$s (%2$s)" + "Is nog genoeg voor ongeveer %1$s" "Minder dan %1$s resterend" "Minder dan %1$s resterend (%2$s)" "Meer dan %1$s resterend (%2$s)" @@ -422,8 +447,7 @@ "Geregistreerd" "Niet geregistreerd" "Niet beschikbaar" - - + "MAC-adres is willekeurig" %1$d apparaten verbonden %1$d apparaat verbonden @@ -443,6 +467,5 @@ "op %1$s" "Duur" "Altijd vragen" - - + "Zojuist" diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml index b5936c26677da5bd3d077461f3581daef6c3f989..d7b2dc9ae930c659a1797c6152edd66485911800 100644 --- a/packages/SettingsLib/res/values-or/strings.xml +++ b/packages/SettingsLib/res/values-or/strings.xml @@ -40,6 +40,10 @@ "%1$s ମାଧ୍ୟମରେ ସଂଯୁକ୍ତ" "%1$s ମାଧ୍ୟମରେ ଉପଲବ୍ଧ" "ସଂଯୁକ୍ତ, ଇଣ୍ଟର୍‌ନେଟ୍‌ ନାହିଁ" + + + + "ଆକ୍ସେସ୍ ପଏଣ୍ଟ ସାମୟିକ ଭାବେ ପୂର୍ଣ୍ଣ" "%1$s ମାଧ୍ୟମରେ ସଂଯୁକ୍ତ" "%1$s ମାଧ୍ୟମରେ ଉପଲବ୍ଧ" @@ -63,6 +67,12 @@ "ସଂଯୁକ୍ତ ନାହିଁ (ଫୋନ୍ ନୁହେଁ), ବ୍ୟାଟେରୀ%1$s%2$s" "ସଂଯୁକ୍ତ ହେଲା (ମିଡିଆ ନୁହେଁ), ବ୍ୟାଟେରୀ %1$s%2$s" "ସଂଯୁକ୍ତ ହେଲା (ଫୋନ୍ କିମ୍ବା ମେଡିଆ ନୁହେଁ), ବ୍ୟାଟେରୀ %1$s%2$s" + + + + + + "ମିଡିଆ ଅଡିଓ" "ଫୋନ୍‌ କଲ୍‌‌ଗୁଡ଼ିକ" "ଫାଇଲ୍‌ ଟ୍ରାନ୍ସଫର୍‌" @@ -109,6 +119,14 @@ "ହେଡ୍‌ଫୋନ୍‌" "ଇନ୍‌ପୁଟ୍‌ ଉପକରଣ" "ବ୍ଲୁଟୂଥ୍‌" + + + + + + + + "ୱାଇ-ଫାଇ ବନ୍ଦ।" "ୱାଇଫାଇ ବିଚ୍ଛିନ୍ନ କରାଗଲା।" "Wifiର 1 ବାର" @@ -188,7 +206,8 @@ "ଜାଗ୍ରତ ରଖନ୍ତୁ" "ଚାର୍ଜ ହେବାବେଳେ ସ୍କ୍ରୀନ୍‌ ଆଦୌ ବନ୍ଦ ହେବନାହିଁ" "ବ୍ଲୁଟୁଥ୍‌ HCI ସ୍ନୁପ୍‌ ଲଗ୍‌ ସକ୍ଷମ କରନ୍ତୁ" - "ଗୋଟିଏ ଫାଇଲ୍‌ରେ ସମସ୍ତ ବ୍ଲୁଟୂଥ୍‌ HCI ପ୍ୟାକେଟ୍‌ଗୁଡିକୁ କ୍ୟାପଚର୍‌ କରନ୍ତୁ" + + "OEM ଅନଲକ୍‌ କରିବା" "bootloaderକୁ ଅନ୍‌ଲକ୍‌ ହେବାର ଅନୁମତି ଦିଅନ୍ତୁ" "OEM ଅନଲକ୍‌ କରିବା ଅନୁମତି ଦେବେ?" @@ -207,15 +226,20 @@ "ବ୍ଲୁଟୂଥ୍‌ AVRCP ଭର୍ସନ୍" "ବ୍ଲୁଟୂଥ୍‌ AVRCP ଭର୍ସନ୍‌" "ବ୍ଲୁଟୁଥ୍‌ ଅଡିଓ କୋଡେକ୍‌" - "ବ୍ଲୁଟୁଥ୍‌ ଅଡିଓ କୋଡେକ୍‌ ଚୟନ କରନ୍ତୁ" + + "ବ୍ଲୁଟୂଥ୍‌ ଅଡିଓ ସାମ୍ପଲ୍‌ ରେଟ୍‌" - "ବ୍ଲୁଟୁଥ୍‌ ଅଡିଓ କୋଡେକ୍ ଚୟନ କରନ୍ତୁ: \n ନମୁନା ଦର" + + "ନମୁନା ପିଛା ବ୍ଲୁଟୁଥ୍‌ ଅଡିଓ ବିଟ୍ସ" - "ବ୍ଲୁଟୂଥ ଅଡିଓ କୋଡେକ୍‌ ବାଛନ୍ତୁ:\nନମୂନା ପ୍ରତି ବିଟସ୍‌" + + "ବ୍ଲୁଟୂଥ୍‌ ଅଡିଓ ଚ୍ୟାନେଲ୍‌ ମୋଡ୍" - "ବ୍ଲୁଟୂଥ୍‌ ଅଡ଼ିଓ କୋଡେକ୍‌:\nଚାନେଲ୍‌ ମୋଡ୍‌ ବାଛନ୍ତୁ" + + "ବ୍ଲୁଟୁଥ୍‌ ଅଡିଓ LDAC କୋଡେକ୍‌: ପ୍ଲେବ୍ୟାକ୍‌ ଗୁଣବତ୍ତା" - "ବ୍ଲୁଟୂଥ୍‌ ଅଡିଓ LDAC କୋଡେକ୍‌ ବାଛନ୍ତୁ:\nପ୍ଲେବ୍ୟାକ୍‌ କ୍ୱାଲିଟୀ" + + "ଷ୍ଟ୍ରିମ୍ କରୁଛି: %1$s" "ବ୍ୟକ୍ତିଗତ DNS" "ବ୍ୟକ୍ତିଗତ DNS ମୋଡ୍‌ ବାଛନ୍ତୁ" @@ -223,9 +247,15 @@ "ସ୍ଵଚାଳିତ" "ବ୍ୟକ୍ତିଗତ DNS ପ୍ରଦାତା ହୋଷ୍ଟନାମ" "DNS ପ୍ରଦାନକାରୀଙ୍କ ହୋଷ୍ଟନାମ ପ୍ରବେଶ କରନ୍ତୁ" + + "ୱେୟାରଲେସ୍‌ ପ୍ରଦର୍ଶନ ସାର୍ଟିଫିକେସନ୍‌ ପାଇଁ ବିକଳ୍ପଗୁଡିକ ଦେଖାନ୍ତୁ" "ୱାଇ-ଫାଇ ଲଗିଙ୍ଗ ସ୍ତର ବଢ଼ାନ୍ତୁ, ୱାଇ-ଫାଇ ପିକର୍‌ରେ ପ୍ରତି SSID RSSI ଦେଖାନ୍ତୁ" "ୱାଇ-ଫାଇ ନେଟ୍‌ୱର୍କଗୁଡ଼ିକ ସହିତ କନେକ୍ଟ କରିବାବେଳେ MAC ଠିକଣାକୁ ରେଣ୍ଡୋମାଇଜ୍ କରନ୍ତୁ" + + + + "ଲଗର୍‌ ବଫର୍‌ ଆକାରଗୁଡ଼ିକ" "ଲଗ୍‌ ବଫର୍‌ ପିଛା ଲଗର୍‌ ଆକାରଗୁଡିକର ଚୟନ କରନ୍ତୁ" "ଲଗର୍‌ ରୋଧି ଷ୍ଟୋରେଜ୍‌ ଖାଲି କରିବେ?" diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml index 1d80e77f1cea757992a9eed46765565969cbb06e..313413a1c5708e1b409cc8eae9fa64c51b526e75 100644 --- a/packages/SettingsLib/res/values-pa/strings.xml +++ b/packages/SettingsLib/res/values-pa/strings.xml @@ -40,6 +40,10 @@ "%1$s ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ" "%1$s ਰਾਹੀਂ ਉਪਲਬਧ" "ਕਨੈਕਟ ਕੀਤਾ, ਕੋਈ ਇੰਟਰਨੈੱਟ ਨਹੀਂ" + + + + "ਐਕਸੈੱਸ ਪੁਆਇੰਟ ਅਸਥਾਈ ਤੌਰ \'ਤੇ ਸੰਪੂਰਨ ਰੁਝੇਂਵੇਂ ਵਿੱਚ ਹੈ" "%1$s ਰਾਹੀਂ ਕਨੈਕਟ ਕੀਤਾ" "%1$s ਰਾਹੀਂ ਉਪਲਬਧ" @@ -63,6 +67,12 @@ "ਕਨੈਕਟ ਕੀਤਾ ਹੋਇਆ (ਕੋਈ ਫ਼ੋਨ ਨਹੀਂ), ਬੈਟਰੀ ਦਾ ਪੱਧਰ %1$s%2$s" "ਕਨੈਕਟ ਕੀਤਾ ਹੋਇਆ (ਕੋਈ ਮੀਡੀਆ ਨਹੀਂ), ਬੈਟਰੀ ਦਾ ਪੱਧਰ %1$s%2$s" "ਕਨੈਕਟ ਕੀਤਾ ਹੋਇਆ (ਕੋਈ ਫ਼ੋਨ ਜਾਂ ਮੀਡੀਆ ਨਹੀਂ), ਬੈਟਰੀ ਦਾ ਪੱਧਰ %1$s%2$s" + + + + + + "ਮੀਡੀਆ ਆਡੀਓ" "ਫ਼ੋਨ ਕਾਲਾਂ" "ਫਾਈਲ ਟ੍ਰਾਂਸਫਰ" @@ -109,6 +119,14 @@ "ਹੈੱਡਫੋਨ" "ਇਨਪੁੱਟ ਪੈਰਿਫੈਰਲ" "ਬਲੂਟੁੱਥ" + + + + + + + + "Wifi ਬੰਦ।" "Wifi ਡਿਸਕਨੈਕਟ ਕੀਤਾ।" "Wifi ਇੱਕ ਬਾਰ।" @@ -188,7 +206,8 @@ "ਸਕਿਰਿਆ ਰੱਖੋ" "ਸਕ੍ਰੀਨ ਚਾਰਜਿੰਗ ਦੇ ਸਮੇਂ ਕਦੇ ਵੀ ਸਲੀਪ ਨਹੀਂ ਹੋਵੇਗੀ" "ਬਲੂਟੁੱਥ HCI ਸਨੂਪ ਲੌਗ ਨੂੰ ਚਾਲੂ ਕਰੋ" - "ਇੱਕ ਫਾਈਲ ਵਿੱਚ ਸਾਰੇ bluetooth HCI ਪੈਕੇਟ ਕੈਪਚਰ ਕਰੋ" + + "OEM ਅਣਲਾਕ ਕਰਨਾ" "ਬੂਟਲੋਡਰ ਨੂੰ ਅਣਲਾਕ ਕੀਤੇ ਜਾਣ ਦੀ ਆਗਿਆ ਦਿਓ" "ਕੀ OEM ਨੂੰ ਅਣਲਾਕ ਕਰਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?" @@ -207,15 +226,20 @@ "ਬਲੂਟੁੱਥ AVRCP ਵਰਜਨ" "ਬਲੂਟੁੱਥ AVRCP ਵਰਜਨ ਚੁਣੋ" "ਬਲੂਟੁੱਥ ਔਡੀਓ ਕੋਡੇਕ" - "ਬਲੂਟੁੱਥ ਔਡੀਓ ਕੋਡੇਕ ਚੁਣੋ" + + "ਬਲੂਟੁੱਥ ਆਡੀਓ ਨਮੂਨਾ ਦਰ" - "ਬਲੂਟੁੱਥ ਔਡੀਓ ਕੋਡੇਕ ਚੁਣੋ:\nਸੈਂਪਲ ਰੇਟ" + + "ਪ੍ਰਤੀ ਨਮੂਨਾ ਬਲੂਟੁੱਥ ਆਡੀਓ ਬਿਟਾਂ" - "ਬਲੂਟੁੱਥ ਔਡੀਓ ਕੋਡੇਕ ਚੁਣੋ:\nਬਿਟਾਂ ਪ੍ਰਤੀ ਨਮੂਨਾ" + + "ਬਲੂਟੁੱਥ ਆਡੀਓ ਚੈਨਲ ਮੋਡ" - "ਬਲੂਟੁੱਥ ਔਡੀਓ ਕੋਡੇਕ ਚੁਣੋ:\nਚੈਨਲ ਮੋਡ" + + "ਬਲੂਟੁੱਥ ਔਡੀਓ LDAC ਕੋਡੇਕ: ਪਲੇਬੈਕ ਗੁਣਵੱਤਾ" - "ਬਲੂਟੁੱਥ ਔਡੀਓ LDAC ਕੋਡੇਕ ਚੁਣੋ:\nਪਲੇਬੈਕ ਗੁਣਵੱਤਾ" + + "ਸਟ੍ਰੀਮਿੰਗ: %1$s" "ਨਿੱਜੀ DNS" "ਨਿੱਜੀ DNS ਮੋਡ ਚੁਣੋ" @@ -223,9 +247,15 @@ "ਸਵੈਚਲਿਤ" "ਨਿੱਜੀ DNS ਪ੍ਰਦਾਨਕ ਹੋਸਟਨਾਮ" "DNS ਪ੍ਰਦਾਨਕ ਦਾ ਹੋਸਟਨਾਮ ਦਾਖਲ ਕਰੋ" + + "ਵਾਇਰਲੈੱਸ ਡਿਸਪਲੇ ਪ੍ਰਮਾਣੀਕਰਨ ਲਈ ਚੋਣਾਂ ਪ੍ਰਦਰਸ਼ਿਤ ਕਰੋ" "ਵਾਈ‑ਫਾਈ ਲੌਗਿੰਗ ਪੱਧਰ ਵਧਾਓ, ਵਾਈ‑ਫਾਈ Picker ਵਿੱਚ ਪ੍ਰਤੀ SSID RSSI ਦਿਖਾਓ" "ਵਾਈ-ਫਾਈ ਨੈੱਟਵਰਕਾਂ ਨਾਲ ਕਨੈਕਟ ਹੋਣ \'ਤੇ MAC ਪਤਾ ਬੇਤਰਤੀਬਵਾਰ ਚੁਣੋ" + + + + "ਲੌਗਰ ਬਫ਼ਰ ਆਕਾਰ" "ਪ੍ਰਤੀ ਲੌਗ ਬਫ਼ਰ ਲੌਗਰ ਆਕਾਰ ਚੁਣੋ" "ਕੀ ਲੌਗਰ ਪ੍ਰਸਿੱਸਟੈਂਟ ਸਟੋਰੇਜ ਨੂੰ ਸਾਫ਼ ਕਰਨਾ ਹੈ?" @@ -360,14 +390,10 @@ "ਤੁਹਾਡੀ ਵਰਤੋਂ ਦੇ ਆਧਾਰ \'ਤੇ ਲਗਭਗ %1$s ਬਾਕੀ" "ਤੁਹਾਡੀ ਵਰਤੋਂ ਦੇ ਆਧਾਰ \'ਤੇ ਲਗਭਗ %1$s ਬਾਕੀ (%2$s)" "%1$s ਬਾਕੀ" - - - - - - - - + "ਤੁਹਾਡੀ ਵਰਤੋਂ ਦੇ ਆਧਾਰ \'ਤੇ ਲਗਭਗ %1$s ਚੱਲੇਗਾ (%2$s)" + "ਤੁਹਾਡੀ ਵਰਤੋਂ ਦੇ ਆਧਾਰ \'ਤੇ ਲਗਭਗ %1$s ਚੱਲੇਗਾ" + "ਲਗਭਗ %1$s ਚੱਲੇਗਾ (%2$s)" + "ਲਗਭਗ %1$s ਚੱਲੇਗਾ" "%1$s ਤੋਂ ਘੱਟ ਸਮਾਂ ਬਾਕੀ" "%1$s ਤੋਂ ਘੱਟ ਸਮਾਂ ਬਾਕੀ (%2$s)" "%1$s ਤੋਂ ਵੱਧ ਸਮਾਂ ਬਾਕੀ (%2$s)" @@ -422,8 +448,7 @@ "ਰਜਿਸਟਰ ਕੀਤੀ ਗਈ" "ਰਜਿਸਟਰ ਨਹੀਂ ਕੀਤੀ ਗਈ" "ਅਣਉਪਲਬਧ" - - + "MAC ਬੇਤਰਤੀਬਾ ਹੈ" %1$d ਡੀਵਾਈਸ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ %1$d ਡੀਵਾਈਸ ਕਨੈਕਟ ਕੀਤੇ ਗਏ @@ -443,6 +468,5 @@ "%1$s ਵਜੇ" "ਮਿਆਦ" "ਹਰ ਵਾਰ ਪੁੱਛੋ" - - + "ਹੁਣੇ ਹੀ" diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml index 1a6321c1372d548856b709ef6d6c0f8bbbb8b826..3192719101c3057a36c21a2f4ad716a182da81f6 100644 --- a/packages/SettingsLib/res/values-pl/strings.xml +++ b/packages/SettingsLib/res/values-pl/strings.xml @@ -40,6 +40,10 @@ "Połączono przez %1$s" "Dostępne przez %1$s" "Połączono, brak internetu" + + + + "Punkt dostępu jest tymczasowo zajęty" "Połączono przez: %1$s" "Dostępna przez: %1$s" @@ -63,6 +67,12 @@ "Połączono (bez telefonu), bateria: %1$s%2$s" "Połączono (bez multimediów), bateria: %1$s%2$s" "Połączono (bez telefonu i multimediów), bateria %1$s%2$s" + + + + + + "Dźwięk multimediów" "Połączenia telefoniczne" "Przesyłanie pliku" @@ -109,6 +119,14 @@ "Słuchawki" "Peryferyjne urządzenie wejściowe" "Bluetooth" + + + + + + + + "Wi-Fi wyłączone." "Wi-Fi odłączone." "Wi-Fi: jeden pasek." @@ -188,7 +206,7 @@ "Pozostaw ekran włączony" "Ekran nie będzie gaszony podczas ładowania telefonu" "Włącz dziennik snoop Bluetooth HCI" - "Przechwyć wszystkie pakiety Bluetooth HCI do pliku" + "Przechwyć wszystkie pakiety Bluetooth HCI do pliku (przełącz Bluetooth po zmianie tego ustawienia)" "Zdjęcie blokady OEM" "Zezwalaj na odblokowanie programu rozruchowego" "Zezwolić na zdjęcie blokady OEM?" @@ -207,15 +225,20 @@ "Wersja AVRCP Bluetooth" "Wybierz wersję AVRCP Bluetooth" "Kodek dźwięku Bluetooth" - "Wybierz kodek dźwięku Bluetooth" + + "Dźwięk Bluetooth – współczynnik próbkowania" - "Wybierz kodek dźwięku Bluetooth:\nwspółczynnik próbkowania" + + "Dźwięk Bluetooth – liczba bitów na próbkę" - "Wybierz kodek dźwięku Bluetooth:\nliczba bitów na próbkę" + + "Dźwięk Bluetooth – tryb kanału" - "Wybierz kodek dźwięku Bluetooth:\ntryb kanału" + + "Kodek dźwięku Bluetooth LDAC: jakość odtwarzania" - "Wybierz kodek dźwięku Bluetooth LDAC:\njakość odtwarzania" + + "Strumieniowe przesyłanie danych: %1$s" "Prywatny DNS" "Wybierz tryb prywatnego DNS" @@ -223,9 +246,15 @@ "Automatyczny" "Nazwa hosta dostawcy prywatnego DNS" "Wpisz nazwę hosta dostawcy DNS" + + "Pokaż opcje certyfikacji wyświetlacza bezprzewodowego" "Zwiększ poziom rejestrowania Wi‑Fi, pokazuj według RSSI SSID w selektorze Wi‑Fi" "Wygeneruj losowo adres MAC podczas łączenia z siecią Wi‑Fi" + + + + "Rozmiary bufora Rejestratora" "Wybierz rozmiary Rejestratora/bufor dziennika" "Wyczyścić pamięć trwałych dzienników?" @@ -360,14 +389,10 @@ "Jeszcze około %1$s (na podstawie Twojego sposobu korzystania)" "Na podstawie Twojego sposobu korzystania jeszcze około %1$s (%2$s)" "Zostało %1$s" - - - - - - - - + "Na podstawie Twojego sposobu korzystania (%2$s) jeszcze około %1$s" + "Na podstawie Twojego sposobu korzystania jeszcze około %1$s" + "Jeszcze około %1$s (%2$s)" + "Jeszcze około %1$s" "Pozostało mniej niż %1$s" "Pozostało mniej niż %1$s (%2$s)" "Pozostało ponad: %1$s (%2$s)" @@ -422,8 +447,7 @@ "Zarejestrowane" "Niezarejestrowane" "Niedostępny" - - + "Adres MAC jest randomizowany" %1$d urządzenia podłączone %1$d urządzeń podłączonych @@ -445,6 +469,5 @@ "w: %1$s" "Czas" "Zawsze pytaj" - - + "Przed chwilą" diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml index bdefad84ffaaa2d72e2224414c86514f27cca49e..d8582ee6ad5e95f01c76363ce5702ecc4dc93c3e 100644 --- a/packages/SettingsLib/res/values-pt-rBR/strings.xml +++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml @@ -40,6 +40,8 @@ "Conectado via %1$s" "Disponível via %1$s" "Conectada, sem Internet" + "Sem Internet" + "É necessário fazer login" "Ponto de acesso temporariamente cheio" "Conectado via %1$s" "Disponível via %1$s" @@ -63,6 +65,9 @@ "Conectado (sem telefone), %1$s%2$s de bateria" "Conectado (sem mídia), %1$s%2$s de bateria" "Conectado (sem telefone ou mídia), %1$s%2$s de bateria" + "Ativo, %1$s de bateria" + "Bateria: %1$s" + "Ativo" "Áudio da mídia" "Chamadas telefônicas" "Transferência de arquivo" @@ -109,6 +114,10 @@ "Headphone" "Periférico de entrada" "Bluetooth" + "Pareando aparelho auditivo esquerdo…" + "Pareando aparelho auditivo direito…" + "Esquerdo: %1$s de bateria" + "Direito: %1$s de bateria" "Wi-Fi desligado." "Wi-Fi desconectado" "Uma barra de Wi-Fi." @@ -188,7 +197,7 @@ "Permanecer ativo" "A tela nunca entrará em inatividade enquanto estiver carregando." "Ativar log de rastreamento Bluetooth HCI" - "Capturar todos os pacotes Bluetooth HCI em um arquivo" + "Capturar todos os pacotes Bluetooth HCI em um arquivo (ative o Bluetooth depois de alterar esta configuração)" "Desbloqueio de OEM" "Permitir que o bootloader seja desbloqueado" "Permitir desbloqueio de OEM?" @@ -207,15 +216,20 @@ "Versão do Bluetooth AVRCP" "Selecionar versão do Bluetooth AVRCP" "Codec de áudio Bluetooth" - "Selecionar codec de áudio Bluetooth" + + "Taxa de amostra do áudio Bluetooth" - "Selecionar codec de áudio Bluetooth:\ntaxa de amostragem" + + "Bits por amostra do áudio Bluetooth" - "Selecionar codec de áudio Bluetooth:\nbits por amostra" + + "Modo de canal de áudio Bluetooth" - "Selecionar codec de áudio Bluetooth:\nmodo de canal" + + "Codec de áudio Bluetooth LDAC: qualidade de reprodução" - "Selecionar codec de áudio Bluetooth LDAC:\nqualidade de reprodução" + + "Streaming: %1$s" "DNS particular" "Selecione o modo DNS particular" @@ -223,9 +237,12 @@ "Automático" "Nome do host do provedor de DNS particular" "Informe o nome do host do provedor de DNS" + "Não foi possível conectar" "Mostrar opções de certificação de Display sem fio" "Aumentar o nível de registro do Wi-Fi; mostrar conforme o RSSI de SSID na Seleção de Wi-Fi" "Escolher o endereço MAC de forma aleatória quando estiver conectado a redes Wi-Fi" + "Limitada" + "Ilimitada" "Tamanhos de buffer de logger" "Sel. tam. de logger/buffer de log" "Limpar armazenamento de logger constante?" @@ -360,14 +377,10 @@ "Cerca de %1$s restante(s) com base no seu uso" "Cerca de %1$s restante(s) com base no seu uso (%2$s)" "%1$s restante(s)" - - - - - - - - + "Deve durar até cerca de %1$s com base no seu uso (%2$s)" + "Deve durar até cerca de %1$s com base no seu uso" + "Deve durar até cerca de %1$s (%2$s)" + "Deve durar até cerca de %1$s" "Menos de %1$s restante(s)" "Menos de %1$s restante(s) (%2$s)" "Mais de %1$s restante(s) (%2$s)" @@ -422,8 +435,7 @@ "Registrado" "Não registrado" "Não disponível" - - + "O MAC é randomizado" %1$d dispositivo conectado %1$d dispositivos conectados @@ -443,6 +455,5 @@ "%1$s" "Duração" "Perguntar sempre" - - + "Agora" diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml index acd105dbc2796e7ef70324866e4b2dc2213186cd..99b769c16e76a0fecd6319f11a8ef382bfc838cb 100644 --- a/packages/SettingsLib/res/values-pt-rPT/strings.xml +++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml @@ -40,6 +40,8 @@ "Ligado através de %1$s" "Disponível através de %1$s" "Ligado, sem Internet." + "Sem Internet" + "É necessário iniciar sessão" "Ponto de acesso temporariamente cheio" "Ligado através de %1$s" "Disponível através de %1$s" @@ -63,6 +65,9 @@ "Ligado (sem telemóvel), bateria a %1$s%2$s" "Ligado (sem multimédia), bateria a %1$s%2$s" "Ligado (sem telemóvel nem multimédia), bateria a %1$s%2$s" + "Ativo, %1$s de bateria" + "%1$s de bateria" + "Ativo" "Áudio de multimédia" "Chamadas telefónicas" "Transferência do ficheiro" @@ -109,6 +114,10 @@ "Auricular" "Periférico de entrada" "Bluetooth" + "A sincronizar aparelho auditivo do lado esquerdo…" + "A sincronizar aparelho auditivo do lado direito…" + "Lado esquerdo – %1$s de bateria" + "Lado direito – %1$s de bateria" "Wi-Fi desativado." "Wi-Fi desligado." "Uma barra de Wi-Fi." @@ -188,7 +197,7 @@ "Manter ativo" "O ecrã nunca entrará em suspensão durante o carregamento" "Ativar registo de monit. Bluetooth HCI" - "Capturar todos os pacotes Bluetooth HCI num ficheiro" + "Capturar todos os pacotes Bluetooth HCI num ficheiro (ative/desative o Bluetooth após alterar esta definição)" "Desbloqueio de OEM" "Permitir o desbloqueio do carregador de arranque" "Pretende permitir o desbloqueio de OEM?" @@ -207,15 +216,20 @@ "Versão de Bluetooth AVRCP" "Selecionar versão de Bluetooth AVRCP" "Codec de áudio Bluetooth" - "Selecionar codec de áudio Bluetooth" + + "Taxa de amostragem de áudio Bluetooth" - "Selecionar codec de áudio Bluetooth:\nTaxa de amostragem" + + "Bits por amostra de áudio Bluetooth" - "Selecionar codec de áudio Bluetooth:\nBits por amostra" + + "Modo de canal áudio Bluetooth" - "Selecionar codec de áudio de Bluetooth:\nModo de canal" + + "Codec LDAC de áudio Bluetooth: qualidade de reprodução" - "Selecionar codec LDAC de áudio Bluetooth:\nQualidade de reprodução" + + "Transmissão em fluxo contínuo: %1$s" "DNS privado" "Selecionar modo DNS privado" @@ -223,9 +237,12 @@ "Automático" "Nome de anfitrião do fornecedor DNS privado" "Introduza o nome de anfitrião do fornecedor DNS." + "Não foi possível ligar" "Mostrar opções da certificação de display sem fios" "Aumentar o nível de reg. de Wi-Fi, mostrar por RSSI de SSID no Selec. de Wi-Fi" "Selecionar aleatoriamente o endereço MAC quando estabelecer ligação a redes Wi‑Fi" + "Acesso limitado" + "Acesso ilimitado" "Tamanhos da memória intermédia do registo" "Selec. tam. reg. p/ mem. int. reg." "Pretende limpar o armazenamento persistente do registo?" @@ -360,14 +377,10 @@ "Resta(m) cerca de %1$s com base na sua utilização" "Resta(m) cerca de %1$s com base na sua utilização (%2$s)." "Resta(m) %1$s" - - - - - - - - + "Deve durar até cerca da(s) %1$s com base na sua utilização (%2$s)." + "Deve durar até cerca da(s) %1$s com base na sua utilização." + "Deve durar até cerca da(s) %1$s (%2$s)." + "Deve durar até cerca da(s) %1$s." "Resta(m) menos de %1$s." "Resta(m) menos de %1$s (%2$s)." "Resta(m) mais de %1$s (%2$s)." @@ -422,8 +435,7 @@ "Registado" "Não registado" "Indisponível" - - + "O MAC é aleatório." %1$d dispositivos ligados %1$d dispositivo ligado @@ -443,6 +455,5 @@ "no(a) %1$s" "Duração" "Perguntar sempre" - - + "Agora mesmo" diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml index bdefad84ffaaa2d72e2224414c86514f27cca49e..d8582ee6ad5e95f01c76363ce5702ecc4dc93c3e 100644 --- a/packages/SettingsLib/res/values-pt/strings.xml +++ b/packages/SettingsLib/res/values-pt/strings.xml @@ -40,6 +40,8 @@ "Conectado via %1$s" "Disponível via %1$s" "Conectada, sem Internet" + "Sem Internet" + "É necessário fazer login" "Ponto de acesso temporariamente cheio" "Conectado via %1$s" "Disponível via %1$s" @@ -63,6 +65,9 @@ "Conectado (sem telefone), %1$s%2$s de bateria" "Conectado (sem mídia), %1$s%2$s de bateria" "Conectado (sem telefone ou mídia), %1$s%2$s de bateria" + "Ativo, %1$s de bateria" + "Bateria: %1$s" + "Ativo" "Áudio da mídia" "Chamadas telefônicas" "Transferência de arquivo" @@ -109,6 +114,10 @@ "Headphone" "Periférico de entrada" "Bluetooth" + "Pareando aparelho auditivo esquerdo…" + "Pareando aparelho auditivo direito…" + "Esquerdo: %1$s de bateria" + "Direito: %1$s de bateria" "Wi-Fi desligado." "Wi-Fi desconectado" "Uma barra de Wi-Fi." @@ -188,7 +197,7 @@ "Permanecer ativo" "A tela nunca entrará em inatividade enquanto estiver carregando." "Ativar log de rastreamento Bluetooth HCI" - "Capturar todos os pacotes Bluetooth HCI em um arquivo" + "Capturar todos os pacotes Bluetooth HCI em um arquivo (ative o Bluetooth depois de alterar esta configuração)" "Desbloqueio de OEM" "Permitir que o bootloader seja desbloqueado" "Permitir desbloqueio de OEM?" @@ -207,15 +216,20 @@ "Versão do Bluetooth AVRCP" "Selecionar versão do Bluetooth AVRCP" "Codec de áudio Bluetooth" - "Selecionar codec de áudio Bluetooth" + + "Taxa de amostra do áudio Bluetooth" - "Selecionar codec de áudio Bluetooth:\ntaxa de amostragem" + + "Bits por amostra do áudio Bluetooth" - "Selecionar codec de áudio Bluetooth:\nbits por amostra" + + "Modo de canal de áudio Bluetooth" - "Selecionar codec de áudio Bluetooth:\nmodo de canal" + + "Codec de áudio Bluetooth LDAC: qualidade de reprodução" - "Selecionar codec de áudio Bluetooth LDAC:\nqualidade de reprodução" + + "Streaming: %1$s" "DNS particular" "Selecione o modo DNS particular" @@ -223,9 +237,12 @@ "Automático" "Nome do host do provedor de DNS particular" "Informe o nome do host do provedor de DNS" + "Não foi possível conectar" "Mostrar opções de certificação de Display sem fio" "Aumentar o nível de registro do Wi-Fi; mostrar conforme o RSSI de SSID na Seleção de Wi-Fi" "Escolher o endereço MAC de forma aleatória quando estiver conectado a redes Wi-Fi" + "Limitada" + "Ilimitada" "Tamanhos de buffer de logger" "Sel. tam. de logger/buffer de log" "Limpar armazenamento de logger constante?" @@ -360,14 +377,10 @@ "Cerca de %1$s restante(s) com base no seu uso" "Cerca de %1$s restante(s) com base no seu uso (%2$s)" "%1$s restante(s)" - - - - - - - - + "Deve durar até cerca de %1$s com base no seu uso (%2$s)" + "Deve durar até cerca de %1$s com base no seu uso" + "Deve durar até cerca de %1$s (%2$s)" + "Deve durar até cerca de %1$s" "Menos de %1$s restante(s)" "Menos de %1$s restante(s) (%2$s)" "Mais de %1$s restante(s) (%2$s)" @@ -422,8 +435,7 @@ "Registrado" "Não registrado" "Não disponível" - - + "O MAC é randomizado" %1$d dispositivo conectado %1$d dispositivos conectados @@ -443,6 +455,5 @@ "%1$s" "Duração" "Perguntar sempre" - - + "Agora" diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml index e5912c68389103ad2fcbef401f8bd4b18f46a8f7..f6352c064801cc8ae6823708f6ed6b645291c1e1 100644 --- a/packages/SettingsLib/res/values-ro/strings.xml +++ b/packages/SettingsLib/res/values-ro/strings.xml @@ -40,6 +40,8 @@ "Conectată prin %1$s" "Disponibilă prin %1$s" "Conectată, fără internet" + "Fără conexiune la internet" + "Trebuie să vă conectați" "Punctul de acces este temporar plin" "Conectată prin %1$s" "Disponibilă prin %1$s" @@ -63,6 +65,9 @@ "Conectat (fără telefon), baterie %1$s%2$s" "Conectat (fără conținut media), baterie %1$s%2$s" "Conectat (fără telefon sau conținut media), baterie %1$s%2$s" + "Activ, baterie %1$s" + "Nivelul bateriei: %1$s" + "Activ" "Conținut media audio" "Apeluri telefonice" "Transfer de fișiere" @@ -109,6 +114,10 @@ "Căști" "Dispozitiv periferic de intrare" "Bluetooth" + "Se asociază aparatul auditiv stâng…" + "Se asociază aparatul auditiv drept…" + "Stâng - baterie %1$s" + "Drept - baterie %1$s" "Wi-Fi dezactivat." "Wi-Fi deconectat." "Semnal Wi-Fi: o bară." @@ -188,7 +197,7 @@ "Activ permanent" "Ecranul nu va fi inactiv pe durata încărcării" "Activați jurnalul de examinare HCI Bluetooth" - "Înregistrați toate pachetele HCI Bluetooth într-un fișier" + "Înregistrați toate pachetele HCI Bluetooth într-un fișier (Comutați Bluettoth după modificarea setării)" "Deblocarea OEM" "Permiteți deblocarea bootloaderului" "Permiteți deblocarea OEM?" @@ -207,15 +216,20 @@ "Versiunea AVRCP pentru Bluetooth" "Selectați versiunea AVRCP pentru Bluetooth" "Codec audio Bluetooth" - "Selectați codecul audio Bluetooth" + + "Rată de eșantionare audio Bluetooth" - "Selectați codecul audio Bluetooth:\nrată de eșantionare" + + "Biți audio Bluetooth per eșantion" - "Selectați codecul audio Bluetooth:\nbiți per eșantion" + + "Modul canal audio Bluetooth" - "Selectați codecul audio Bluetooth:\nmodul canal" + + "Codecul LDAC audio pentru Bluetooth: calitatea redării" - "Selectați codecul LDAC audio pentru Bluetooth:\ncalitatea redării" + + "Transmitere în flux: %1$s" "DNS privat" "Selectați modul DNS privat" @@ -223,9 +237,12 @@ "Automat" "Nume de gazdă al furnizorului de DNS privat" "Introduceți numele de gazdă al furnizorului de DNS" + "Nu s-a putut conecta" "Afișați opțiunile pentru certificarea Ecran wireless" "Măriți niv. de înr. prin Wi‑Fi, afișați în fcț. de SSID RSSI în Selectorul Wi‑Fi" "Afișează aleatoriu adresa MAC când te conectezi la rețele Wi‑Fi" + "Contorizat" + "Necontorizat" "Dimensiunile tamponului jurnalului" "Dimensiuni jurnal / tampon jurnal" "Ștergeți stocarea permanentă a jurnalului?" @@ -360,14 +377,10 @@ "În baza utilizării, timpul aproximativ rămas este: %1$s" "În baza utilizării, timpul rămas este de aproximativ %1$s (%2$s)" "Timp rămas: %1$s" - - - - - - - - + "În baza utilizării, ar trebui să reziste până la aproximativ %1$s (%2$s)" + "În baza utilizării, ar trebui să reziste până la aproximativ %1$s" + "Ar trebui să reziste până la %1$s (%2$s)" + "Ar trebui să reziste până la %1$s" "a mai rămas mai puțin de %1$s" "A mai rămas mai puțin de %1$s (%2$s)" "A mai rămas mai mult de %1$s (%2$s)" @@ -422,8 +435,7 @@ "Înregistrat" "Neînregistrat" "Indisponibilă" - - + "MAC este aleatoriu" %1$d dispozitive conectate %1$d de dispozitive conectate @@ -444,6 +456,5 @@ "%1$s" "Durată" "Întreabă de fiecare dată" - - + "Chiar acum" diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml index e9283f39ed3e9cb999d3f33ba967dc4536a5ebd6..fdf82900f110f3d9f1aba7edefc99b8218781dad 100644 --- a/packages/SettingsLib/res/values-ru/strings.xml +++ b/packages/SettingsLib/res/values-ru/strings.xml @@ -40,6 +40,10 @@ "Подключено к %1$s" "Доступно через %1$s" "Подключено, без доступа к Интернету" + + + + "К точке доступа подключено слишком много устройств" "Подключено к %1$s" "Доступно через %1$s" @@ -63,6 +67,12 @@ "Подключено (кроме звонков), уровень заряда батареи: %1$s%2$s" "Подключено (кроме аудио), уровень заряда батареи: %1$s%2$s" "Подключено (кроме звонков и аудио), уровень заряда батареи: %1$s%2$s" + + + + + + "Профиль A2DP" "Звонки" "Профиль OPP" @@ -109,6 +119,14 @@ "Наушники" "Периферийное устройство ввода" "Bluetooth" + + + + + + + + "Wi-Fi выключен" "Wi-Fi отключен" "Wi-Fi: одно деление" @@ -188,7 +206,7 @@ "Не выключать экран" "Во время зарядки экран будет всегда включен" "Включить журнал HCI Bluetooth" - "Сохранять все пакеты HCI Bluetooth в файле" + "Сохранять все пакеты HCI Bluetooth в файле (перезапустите Bluetooth после изменения этой настройки)" "Заводская разблокировка" "Разрешить разблокировку загрузчика ОС" "Разрешить заводскую разблокировку?" @@ -207,15 +225,20 @@ "Версия Bluetooth AVRCP" "Выберите версию Bluetooth AVRCP" "Аудиокодек для передачи через Bluetooth" - "Аудиокодек для Bluetooth" + + "Частота дискретизации при передаче через Bluetooth" - "Аудиокодек для Bluetooth:\nчастота дискретизации" + + "Глубина кодирования звука при передаче через Bluetooth" - "Аудиокодек для Bluetooth:\nразрядность" + + "Режим аудиоканала Bluetooth" - "Аудиокодек для Bluetooth:\nрежим канала" + + "Аудиокодек LDAC для Bluetooth: качество воспроизведения" - "Аудиокодек LDAC для Bluetooth:\nкачество воспроизведения" + + "Потоковая передача: %1$s" "Персональный DNS-сервер" "Выберите режим персонального DNS-сервера" @@ -223,9 +246,15 @@ "Автоматический режим" "Имя хоста поставщика персонального DNS-сервера" "Введите имя хоста поставщика услуг DNS" + + "Показывать параметры сертификации беспроводных мониторов" "При выборе Wi‑Fi указывать в журнале RSSI для каждого SSID" "Генерировать случайные MAC-адреса при подключении к сетям Wi-Fi" + + + + "Размер буфера журнала" "Выберите размер буфера журнала" "Очистить постоянный диск журнала?" @@ -360,14 +389,10 @@ "Осталось примерно %1$s при текущем уровне использования" "Заряда (%2$s) хватит примерно на %1$s при текущем уровне расхода" "Осталось: %1$s" - - - - - - - - + "При текущем уровне использования (%2$s) заряда хватит примерно до %1$s" + "При текущем уровне использования заряда хватит примерно до %1$s" + "Заряда (%2$s) хватит примерно до %1$s" + "Заряда хватит примерно до %1$s" "Осталось менее %1$s" "Уровень заряда батареи: %2$s (хватит менее чем на %1$s)" "Уровень заряда батареи: %2$s (хватит более чем на %1$s)" @@ -422,8 +447,7 @@ "Зарегистрирован" "Не зарегистрирован" "Недоступно" - - + "Случайный MAC-адрес" Подключено %1$d устройство Подключено %1$d устройства @@ -445,6 +469,5 @@ "%1$s" "Длительность" "Всегда спрашивать" - - + "Только что" diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml index 865d05c0e705d36f960abf5f5f1daa4d30b482f1..82bd3b33a1e89f998e7ce438071655a8376afc6f 100644 --- a/packages/SettingsLib/res/values-si/strings.xml +++ b/packages/SettingsLib/res/values-si/strings.xml @@ -40,6 +40,10 @@ "%1$s හරහා සම්බන්ධ විය" "%1$s හරහා ලබා ගැනීමට හැකිය" "සම්බන්ධයි, අන්තර්ජාලය නැත" + + + + "ප්‍රවේශ ලක්ෂ්‍ය තාවකාලිකව පිරී ඇත" "%1$s හරහා සම්බන්ධ විය" "%1$s හරහා ලබා ගැනීමට හැකිය" @@ -63,6 +67,12 @@ "සම්බන්ධිතයි (දුරකථනය නැත), බැටරිය %1$s%2$s" "සම්බන්ධිතයි (මාධ්‍ය නැත), බැටරිය %1$s%2$s" "සම්බන්ධිතයි (දුරකථනය හෝ මාධ්‍ය නැත), බැටරිය %1$s%2$s" + + + + + + "මාධ්‍ය ශ්‍රව්‍ය" "දුරකථන ඇමතුම්" "ගොනු හුවමාරුව" @@ -109,6 +119,14 @@ "හෙඩ්ෆෝන්" "ආදාන උපාංග" "බ්ලූටූත්" + + + + + + + + "Wifi අක්‍රියයි." "Wifi සම්බන්ධ කර නොමැත." "Wifi තීරු එකයි." @@ -188,7 +206,7 @@ "අවදියෙන් සිටින්න" "ආරෝපණය වන අතර තුර තීරය නිද්‍රාවට නොයනු ඇත" "බ්ලූටූත් HCI ස්නුප් ලොගය සබල කරන්න" - "ගොනුවක් තුළ ඇති බ්ලූටූත් HCI පැකට්ටු සියල්ලම ග්‍රහණය කරගන්න" + "ගොනුවක ඇති බ්ලූටූත් HCI පැකට්ටු සියල්ලම ග්‍රහණය කර ගන්න (මෙම සැකසීම වෙනස් කිරීමෙන් පසු බ්ලූටූත් ටොගල කරන්න)" "OEM අඟුල ඇරීම" "බුට්ලොඩරයට අගුළු ඇර තිබීමට ඉඩ දෙන්න" "OEM අඟුල ඇරීමට ඉඩ දෙන්න?" @@ -207,15 +225,20 @@ "බ්ලූටූත් AVRCP අනුවාදය" "බ්ලූටූත් AVRCP අනුවාදය තෝරන්න" "බ්ලූටූත් ශ්‍රව්‍ය Codec" - "බ්ලූටූත් ශ්‍රව්‍ය කොඩෙක් තෝරන්න" + + "බ්ලූටූත් ශ්‍රව්‍ය නියැදි අනුපාතය" - "බ්ලූටූත් ශ්‍රව්‍ය කොඩෙක් තෝරන්න:\nනියැදි අනුපාතය" + + "නියැදියකට බ්ලූටූත් ශ්‍රව්‍ය බිටු" - "බ්ලූටූත් ශ්‍රව්‍ය කොඩෙක් තෝරන්න:\nනියැදියකට බිටු" + + "බ්ලූටූත් ශ්‍රව්‍ය නාලිකා ප්‍රකාරය" - "බ්ලූටූත් ශ්‍රව්‍ය කොඩෙක් තෝරන්න:\nනාලිකා ප්‍රකාරය" + + "බ්ලූටූත් ශ්‍රව්‍ය LDAC පසුධාවන ගුණත්වය" - "බ්ලූටූත් ශ්‍රව්‍ය LDAC කොඩෙක් තෝරන්න:\nපසුධාවන ගුණත්වය" + + "ප්‍රවාහ කරමින්: %1$s" "පුද්ගලික DNS" "පුද්ගලික DNS ප්‍රකාරය තෝරන්න" @@ -223,9 +246,15 @@ "ස්වයංක්‍රිය" "පුද්ගලික DNS සැපයුම්කරු සත්කාරක නම" "DNS සැපයුම්කරුගේ සත්කාරක නම ඇතුළු කරන්න" + + "නොරැහැන් සංදර්ශක සහතිකය සඳහා විකල්ප පෙන්වන්න" "Wi‑Fi ලොග් මට්ටම වැඩි කරන්න, Wi‑Fi තෝරනයෙහි SSID RSSI අනුව පෙන්වන්න" "Wi-Fi ජාලවලට සම්බන්ධ වීමේදී MAC ලිපිනය සසම්භාවීකරණය" + + + + "ලෝගයේ අන්තරාවක ප්‍රමාණය" "ලොග අන්තරාවකට ලෝගයේ ප්‍රමාණය තෝරන්න" "ලොගකරු නොනවතින ගබඩාව හිස් කරන්නද?" @@ -438,6 +467,5 @@ "%1$sහිදී" "කාල සීමාව" "සෑම විටම ඉල්ලන්න" - - + "මේ දැන්" diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml index 09dc5087086079489dc2c2b1a2656e2a25b77b3c..fb12574b1784db15b003c978c0b4bd9481aa4411 100644 --- a/packages/SettingsLib/res/values-sk/strings.xml +++ b/packages/SettingsLib/res/values-sk/strings.xml @@ -40,6 +40,8 @@ "Pripojené prostredníctvom %1$s" "K dispozícii prostredníctvom %1$s" "Pripojené, žiadny internet" + "Žiadny internet" + "Vyžaduje sa prihlásenie" "Prístupový bod je dočasne plný" "Pripojené prostredníctvom operátora %1$s" "K dispozícii prostredníctvom operátora %1$s" @@ -63,6 +65,9 @@ "Pripojené k zariadeniu %2$s (bez telefónu), úroveň batérie: %1$s" "Pripojené k zariadeniu %2$s (bez médií), úroveň batérie %1$s" "Pripojené k zariadeniu %2$s (bez telefónu a médií), úroveň batérie %1$s" + "Aktívne, %1$s batérie" + "Batéria: %1$s" + "Aktívne" "Zvuk medií" "Telefonické hovory" "Prenos súborov" @@ -109,6 +114,10 @@ "Slúchadlá" "Periférne vstupné zariadenie" "Bluetooth" + "Párovanie ľavej načúvacej pomôcky…" + "Párovanie pravej načúvacej pomôcky…" + "Ľavá strana – %1$s batérie" + "Pravá strana – %1$s batérie" "Sieť Wi‑Fi je vypnutá." "Sieť Wi‑Fi je odpojená." "Jedna čiarka signálu Wi‑Fi." @@ -188,7 +197,7 @@ "Nevypínať obrazovku" "Obrazovka sa pri nabíjaní neprepne do režimu spánku" "Povoliť denník Bluetooth HCI" - "Zaznamenať všetky pakety Bluetooth HCI do súboru" + "Zachytiť všetky pakety Bluetooth HCI do súboru (po zmene tohto nastavenia prepnúť Bluetooth)" "Odblokovať OEM" "Povoliť odblokovanie ponuky bootloader" "Povoliť odblokovanie OEM?" @@ -207,15 +216,20 @@ "Verzia rozhrania Bluetooth AVRCP" "Zvoľte verziu rozhrania Bluetooth AVRCP" "Bluetooth Audio – kodek" - "Vybrať kodek Bluetooth Audio" + + "Bluetooth Audio – vzorkovacia frekvencia" - "Vybrať kodek Bluetooth Audio:\nVzorkovacia frekvencia" + + "Bluetooth Audio – počet bitov na vzorku" - "Vybrať kodek Bluetooth Audio:\nPočet bitov na vzorku" + + "Bluetooth Audio – režim kanála" - "Vybrať kodek Bluetooth Audio:\nRežim kanála" + + "Kodek LDAC Bluetooth Audio: Kvalita prehrávania" - "Vybrať kodek LDAC Bluetooth Audio:\nKvalita prehrávania" + + "Streamovanie: %1$s" "Súkromné DNS" "Výber súkromného režimu DNS" @@ -223,9 +237,12 @@ "Automaticky" "Súkromný názov hostiteľa poskytovateľa DNS" "Zadajte názov hostiteľa poskytovateľa DNS" + "Nepodarilo sa pripojiť" "Zobraziť možnosti certifikácie bezdrôtového zobrazenia" "Zvýšiť úroveň denníkov Wi‑Fi, zobrazovať podľa SSID RSSI pri výbere siete Wi‑Fi" "Randomizovať adresu MAC pri pripájaní k sieťam Wi-Fi" + "S meraním dát" + "Bez merania dát" "Vyrovnávacia pamäť nástroja denníkov" "Veľkosť vyrovnávacej pamäte nástroja denníkov" "Vymazať trvalé úložisko zapisovača do denníka?" @@ -360,14 +377,10 @@ "Zostáva približne %1$s v závislosti od intenzity využitia" "Zostáva približne %1$s v závislosti od využitia (%2$s)" "Zostávajúci čas: %1$s" - - - - - - - - + "Mal by vydržať približne do %1$s v závislosti od využitia (%2$s)" + "Mal by vydržať približne do %1$s v závislosti od využitia" + "Mal by vydržať približne %1$s (%2$s)" + "Mal by vydržať približne do %1$s" "Zostáva menej ako %1$s" "Zostáva menej ako %1$s (%2$s)" "Zostáva viac ako %1$s (%2$s)" @@ -422,8 +435,7 @@ "Registrované" "Neregistrované" "Nie je k dispozícii" - - + "Adresa MAC je náhodná" %1$d pripojené zariadenia %1$d pripojeného zariadenia @@ -445,6 +457,5 @@ "o %1$s" "Trvanie" "Vždy sa opýtať" - - + "Teraz" diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml index e4aa7c02698640125866ed4d931e3e6ef2d1e4d9..a2ba6463c23f5e89d3a6938d9c101ffb990001cd 100644 --- a/packages/SettingsLib/res/values-sl/strings.xml +++ b/packages/SettingsLib/res/values-sl/strings.xml @@ -40,6 +40,8 @@ "Vzpostavljena povezava prek: %1$s" "Na voljo prek: %1$s" "Vzpostavljena povezava, brez interneta" + "Brez internetne povezave" + "Zahtevana je prijava" "Dostopna točka je trenutno zasedena" "Vzpostavljena povezava prek: %1$s" "Na voljo prek: %1$s" @@ -63,6 +65,9 @@ "Povezano (brez telefona), raven napolnjenosti akumulatorja je %1$s %2$s" "Povezano (brez predstavnosti), raven napolnjenosti akumulatorja je %1$s %2$s" "Povezano (brez telefona ali predstavnosti), raven napolnjenosti akumulatorja je %1$s %2$s" + "Aktivna, akumulator na %1$s" + "Akumulator na %1$s" + "Aktivna" "Zvok predstavnosti" "Telefonski klici" "Prenos datoteke" @@ -109,6 +114,10 @@ "Slušalka" "Zunanja dodatna oprema" "Bluetooth" + "Seznanjanje z levim slušnim pripomočkom …" + "Seznanjanje z desnim slušnim pripomočkom …" + "Levi – akumulator na %1$s" + "Desni – akumulator na %1$s" "Wi-Fi je izklopljen." "Povezava Wi-Fi je prekinjena." "Ena črtica signala Wi-Fi." @@ -188,7 +197,7 @@ "Brez zaklepanja" "Med polnjenjem se zaslon ne bo nikoli zaklenil" "Omogoči zajem dnevnika Bluetooth HCI" - "Zajemi vse pakete Bluetooth HCI v datoteko" + "Zajemi vse pakete Bluetooth HCI v datoteko (preklopi Bluetooth po spremembi te nastavitve)" "Odklepanje OEM" "Dovoli odklepanje zagonskega nalagalnika" "Želite omogočiti odklepanje OEM?" @@ -207,15 +216,20 @@ "Različica profila AVRCP za Bluetooth" "Izberite različico profila AVRCP za Bluetooth" "Zvočni kodek za Bluetooth" - "Izberi zvočni kodek za Bluetooth" + + "Hitrost vzorčenja zvoka prek Bluetootha" - "Izberi zvočni kodek za Bluetooth:\nHitrost vzorčenja" + + "Število bitov na vzorec za zvok prek Bluetootha" - "Izberi zvočni kodek za Bluetooth:\nBitov na vzorec" + + "Način zvočnega kanala prek Bluetootha" - "Izberi zvočni kodek za Bluetooth:\nNačin kanala" + + "Zvočni kodek LDAC za Bluetooth: kakovost predvajanja" - "Izberi zvočni kodek LDAC za Bluetooth:\nKakovost predvajanja" + + "Pretočno predvajanje: %1$s" "Zasebni strežnik DNS" "Izbira načina zasebnega strežnika DNS" @@ -223,9 +237,12 @@ "Samodejno" "Ime gostitelja pri ponudniku zasebnega strežnika DNS" "Vnesite ime gostitelja pri ponudniku strežnika DNS" + "Povezave ni bilo mogoče vzpostaviti" "Pokaži možnosti za potrdilo brezžičnega zaslona" "Povečaj raven zapis. dnev. za Wi-Fi; v izbir. Wi‑Fi-ja pokaži glede na SSID RSSI" "Dodelitev naključnega naslova MAC pri povezovanju z omrežji Wi‑Fi" + "Z omejenim prenosom podatkov" + "Z neomejenim prenosom podatkov" "Velikosti medpomn. zapisov. dnevnika" "Izberite velikost medpomnilnika dnevnika" "Želite izbrisati trajno shranjevanje dnevniškega orodja?" @@ -360,14 +377,10 @@ "Glede na način uporabe imate na voljo še približno %1$s" "Približen preostali čas glede na način uporabe: %1$s (%2$s)" "Še %1$s" - - - - - - - - + "Naprava bi morala glede na način uporabe (%2$s) delovati do približno %1$s" + "Naprava bi morala glede na način uporabe delovati do približno %1$s" + "Naprava bi morala delovati do približno %1$s (%2$s)" + "Naprava bi morala delovati do približno %1$s" "Preostalo manj kot %1$s" "Preostanek: manj kot %1$s (%2$s)" "Preostali čas delovanja: manj kot %1$s (%2$s)" @@ -422,8 +435,7 @@ "Registrirana" "Ni registrirana" "Ni na voljo" - - + "Naslov MAC je naključno izbran" Povezana je %1$d naprava Povezani sta %1$d napravi @@ -445,6 +457,5 @@ "v %1$s" "Trajanje" "Vedno vprašaj" - - + "Pravkar" diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml index dd436b9c7d295272d6d69bdb8df84422aa5a9c96..22c8af4703574f5e200233241b2449b9f8b95035 100644 --- a/packages/SettingsLib/res/values-sq/strings.xml +++ b/packages/SettingsLib/res/values-sq/strings.xml @@ -40,6 +40,8 @@ "E lidhur përmes %1$s" "E mundshme përmes %1$s" "U lidh, por nuk ka internet" + "Nuk ka internet" + "Kërkohet identifikimi" "Pika e qasjes është përkohësisht plot" "E lidhur përmes %1$s" "E disponueshme përmes %1$s" @@ -63,6 +65,9 @@ "E lidhur (pa telefon), bateria %1$s%2$s" "E lidhur (pa media), bateria %1$s%2$s" "E lidhur (pa telefon ose media), bateria %1$s%2$s" + "Aktiv, bateria %1$s" + "Bateria %1$s" + "Aktiv" "Audioja e klipit \"media\"" "Telefonatat" "Transferimi i skedarëve" @@ -109,6 +114,10 @@ "Kufje" "Hyrje periferike" "Bluetooth-i" + "Aparati i dëgjimit majtas po çiftohet…" + "Aparati i dëgjimit djathtas po çiftohet…" + "Majtas - bateria %1$s" + "Djathtas - bateria %1$s" "Wi-Fi është çaktivizuar." "Wi-Fi është i shkëputur." "Wi-Fi ka një vijë." @@ -188,7 +197,7 @@ "Qëndro zgjuar" "Ekrani nuk do të kalojë asnjëherë në gjendje gjumi gjatë ngarkimit" "Aktivizo regjistrin testues të Bluetooth HCI-së" - "Kap të gjitha paketat HCI të Bluetooth-it në një skedar" + "Kap të gjitha paketat HCI të Bluetooth-it në një skedar (ndryshoje Bluetooth-in pas ndryshimit të këtij cilësimi)" "Shkyçja e OEM-së" "Lejo shkyçjen e ngarkimit të sistemit" "Të lejohet shkyçja e OEM-së?" @@ -207,15 +216,20 @@ "Versioni AVRCP i Bluetooth-it" "Zgjidh versionin AVRCP të Bluetooth-it" "Kodeku Bluetooth Audio" - "Zgjidh kodekun e audios së Bluetooth-it" + + "Shpejtësia e shembullit të Bluetooth Audio" - "Zgjidh kodekun e audios së Bluetooth-it:\nShpejtësia e shembullit" + + "Bite për shembull Bluetooth Audio" - "Zgjidh kodekun e audios së Bluetooth-it:\nBite për shembull" + + "Regjimi i kanalit Bluetooth Audio" - "Zgjidh kodekun e audios së Bluetooth-it:\nModaliteti i kanalit" + + "Kodeku LDAC i audios së Bluetooth-it: Cilësia e luajtjes" - "Zgjidh kodekun LDAC të audios së Bluetooth-it:\nCilësia e luajtjes" + + "Transmetimi: %1$s" "DNS-ja private" "Zgjidh modalitetin e DNS-së private" @@ -223,9 +237,12 @@ "Automatik" "Emri i pritësit të ofruesit të DNS-së private" "Fut emrin e pritësit të ofruesit të DNS-së" + "Nuk mund të lidhej" "Shfaq opsionet për certifikimin e ekranit valor" "Rrit nivelin regjistrues të Wi‑Fi duke shfaqur SSID RSSI-në te Zgjedhësi i Wi‑Fi" "Zgjidh rastësisht adresën MAC kur lidhesh me rrjete Wi‑Fi" + "Me matje" + "Pa matje" "Madhësitë e regjistruesit" "Përzgjidh madhësitë e regjistruesit" "Do të pastrosh hapësirën ruajtëse të vazhdueshme të regjistruesit?" @@ -360,14 +377,10 @@ "Rreth %1$s të mbetura bazuar në përdorimin tënd" "Mbeten rreth %1$s bazuar në përdorimin tënd (%2$s)" "%1$s të mbetura" - - - - - - - - + "Duhet të zgjasë deri në rreth %1$s bazuar në përdorimin tënd (%2$s)" + "Duhet të zgjasë deri në rreth %1$s bazuar në përdorimin tënd" + "Duhet të zgjasë deri në rreth %1$s (%2$s)" + "Duhet të zgjasë deri në rreth %1$s" "Më pak se %1$s të mbetura" "Mbeten më pak se %1$s (%2$s)" "Mbeten më shumë se %1$s (%2$s)" @@ -422,8 +435,7 @@ "Regjistruar" "Paregjistruar" "Nuk ofrohet" - - + "Adresa MAC është e rastësishme" %1$d pajisje të lidhura %1$d pajisje e lidhur @@ -443,6 +455,5 @@ "ditën %1$s" "Kohëzgjatja" "Pyet çdo herë" - - + "Pikërisht tani" diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml index d93fda7a96b648fc0f956b3a7a804c069a196735..a6d07a734352fc12d9d857de9979d0602b04bb94 100644 --- a/packages/SettingsLib/res/values-sr/strings.xml +++ b/packages/SettingsLib/res/values-sr/strings.xml @@ -40,6 +40,8 @@ "Веза је успостављена преко приступне тачке %1$s" "Доступна је преко приступне тачке %1$s" "Веза је успостављена, нема интернета" + "Нема интернета" + "Треба да се пријавите" "Приступна тачка је привремено заузета" "Повезано преко %1$s" "Доступно преко %1$s" @@ -63,6 +65,9 @@ "Повезано (без телефона), ниво батерије је %1$s%2$s" "Повезано (без медија), ниво батерије је %1$s%2$s" "Повезано (без телефона или медија), ниво батерије је %1$s%2$s" + "Активан, ниво батерије је %1$s" + "Ниво батерије је %1$s" + "Активан" "Звук медија" "Телефонски позиви" "Пренос датотеке" @@ -109,6 +114,10 @@ "Слушалице" "Периферни уређај за унос" "Bluetooth" + "Упаривање левог слушног апарата…" + "Упаривање десног слушног апарата…" + "Леви – ниво батерије је %1$s" + "Десни – ниво батерије је %1$s" "Wi-Fi је искључен." "Wi-Fi веза је прекинута." "Wi-Fi сигнал има једну црту." @@ -188,7 +197,7 @@ "Не закључавај" "Екран неће бити у режиму спавања током пуњења" "Омогући snoop евиденцију за Bluetooth HCI" - "Сними све Bluetooth HCI пакете у датотеци" + "Сними све Bluetooth HCI пакете у датотеци (Укључите/искључите Bluetooth када промените ово подешавање)" "Откључавање OEM-a" "Дозволи откључавање функције за покретање" "Желите ли да дозволите откључавање произвођача оригиналне опреме (OEM)?" @@ -207,15 +216,20 @@ "Верзија Bluetooth AVRCP-а" "Изаберите верзију Bluetooth AVRCP-а" "Bluetooth аудио кодек" - "Изаберите Bluetooth аудио кодек" + + "Брзина узорковања за Bluetooth аудио" - "Изаберите Bluetooth аудио кодек:\nбрзина узорковања" + + "Битова по узорку за Bluetooth аудио" - "Изаберите Bluetooth аудио кодек:\nбитова по узорку" + + "Режим канала за Bluetooth аудио" - "Изаберите Bluetooth аудио кодек:\nрежим канала" + + "Bluetooth аудио кодек LDAC: квалитет репродукције" - "Изаберите Bluetooth аудио кодек LDAC:\nквалитет репродукције" + + "Стримовање: %1$s" "Приватни DNS" "Изаберите режим приватног DNS-а" @@ -223,9 +237,12 @@ "Аутоматски" "Име хоста добављача услуге приватног DNS-а" "Унесите име хоста добављача услуге DNS-а" + "Повезивање није успело" "Приказ опција за сертификацију бежичног екрана" "Повећава ниво евидентирања за Wi‑Fi. Приказ по SSID RSSI-у у бирачу Wi‑Fi мреже" "Изабери насумичну MAC адресу током повезивања на Wi‑Fi мреже" + "Са ограничењем" + "Без ограничења" "Величине бафера података у програму за евидентирање" "Изаберите величине по баферу евиденције" "Желите ли да обришете стални меморијски простор програма за евидентирање?" @@ -360,14 +377,10 @@ "На основу потрошње имате још отприлике %1$s" "На основу коришћења имате још приближно %1$s (%2$s)" "Преостало време: %1$s" - - - - - - - - + "Трајаће приближно до %1$s на основу коришћења (%2$s)" + "Трајаће приближно до %1$s на основу коришћења" + "Трајаће приближно до %1$s (%2$s)" + "Трајаће приближно до %1$s" "Преостало је мање од %1$s" "Преостало је мање од %1$s (%2$s)" "Преостало је више од %1$s (%2$s)" @@ -422,8 +435,7 @@ "Регистрован je" "Није регистрован" "Недоступно" - - + "MAC адреса је насумично изабрана" Повезан је %1$d уређај Повезана су %1$d уређаја @@ -444,6 +456,5 @@ "%1$s" "Трајање" "Увек питај" - - + "Управо сада" diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml index 3949a0c7ad3bbfed3f8a06c5cb2ff684be544717..0636816a4cad62961843fda05d516e1486676b0c 100644 --- a/packages/SettingsLib/res/values-sv/strings.xml +++ b/packages/SettingsLib/res/values-sv/strings.xml @@ -40,6 +40,10 @@ "Anslutet via %1$s" "Tillgängligt via %1$s" "Ansluten, inget internet" + + + + "Åtkomstpunkten har inga platser över för tillfället" "Anslutet via %1$s" "Tillgängligt via %1$s" @@ -63,6 +67,12 @@ "Ansluten (ingen mobil), batterinivå %1$s%2$s" "Ansluten (inga medier), batterinivå %1$s%2$s" "Ansluten (ingen mobil och inga medier), batterinivå %1$s%2$s" + + + + + + "Medialjud" "Telefonsamtal" "Filöverföring" @@ -109,6 +119,14 @@ "Hörlur" "Inmatning från kringutrustning" "Bluetooth" + + + + + + + + "Wi-Fi är inaktiverat." "Ingen Wi-Fi-anslutning." "Wi-Fi: en stapel." @@ -188,7 +206,7 @@ "Håll aktiverad" "Skärmen vilar aldrig när laddning pågår" "Aktivera HCI snoop-logg för Bluetooth" - "Samla alla HCI-paket för Bluetooth i en fil" + "Samla alla HCI-paket för Bluetooth i en fil (aktivera och inaktivera Bluetooth när du har ändrat den här inställningen)" "OEM-upplåsning" "Tillåt att bootloadern låses upp" "Vill du tillåta OEM-upplåsning?" @@ -207,15 +225,20 @@ "AVRCP-version för Bluetooth" "Välj AVRCP-version för Bluetooth" "Ljudkodek för Bluetooth" - "Välj Ljudkodek för Bluetooth" + + "Samplingsfrekvens för Bluetooth-ljud" - "Välj Ljudkodek för Bluetooth:\nsamplingsfrekvens" + + "Antar bitar per sampling för Bluetooth-ljud" - "Välj Ljudkodek för Bluetooth:\nbitar per sampling" + + "Kanalläge för Bluetooth-ljud" - "Välj Ljudkodek för Bluetooth:\nkanalläge" + + "Bluetooth-ljud via LDAC-kodek: uppspelningskvalitet" - "Välj Bluetooth-ljud via LDAC-kodek:\nuppspelningskvalitet" + + "Streaming: %1$s" "Privat DNS" "Välj läget Privat DNS" @@ -223,9 +246,15 @@ "Automatisk" "Värdnamn för leverantör av privat DNS" "Ange värdnamn för DNS-leverantör" + + "Visa certifieringsalternativ för Wi-Fi-skärmdelning" "Öka loggningsnivån för Wi-Fi, visa per SSID RSSI i Wi‑Fi Picker" "Generera en slumpmässig MAC-adress när du ansluter till Wi‑Fi-nätverk" + + + + "Buffertstorlekar för logg" "Välj loggstorlekar per loggbuffert" "Vill du rensa lagringsutrymmet för loggar?" @@ -360,14 +389,10 @@ "Cirka %1$s kvar utifrån din användning" "About %1$s kvar utifrån din användning (%2$s)" "%1$s kvar" - - - - - - - - + "Bör räcka ungefär till klockan %1$s utifrån din användning (%2$s)" + "Bör räcka ungefär till klockan %1$s utifrån din användning" + "Bör räcka ungefär till klockan %1$s (%2$s)" + "Bör räcka ungefär till klockan %1$s" "Mindre än %1$s återstår" "Mindre än %1$s återstår (%2$s)" "Mer än %1$s återstår (%2$s)" @@ -422,8 +447,7 @@ "Registrerad" "Ej registrerad" "Inte tillgängligt" - - + "MAC-adressen slumpgenereras" %1$d enheter är anslutna %1$d enhet är ansluten @@ -443,6 +467,5 @@ "på %1$s" "Varaktighet" "Fråga varje gång" - - + "Nyss" diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml index f03a9d33dd07febd1ed4f7c0d1cd63c5b499a97a..50edf38ca1b09207ccc0544b9aa98f66288bf6f4 100644 --- a/packages/SettingsLib/res/values-sw/strings.xml +++ b/packages/SettingsLib/res/values-sw/strings.xml @@ -40,6 +40,8 @@ "Imeunganishwa kupitia %1$s" "Inapatikana kupitia %1$s" "Imeunganishwa, hakuna intaneti" + "Hakuna intaneti" + "Unahitaji kuingia katika akaunti" "Lango la mtandao lina shughuli nyingi kwa sasa" "Imeunganishwa kupitia %1$s" "Inapatikana kupitia %1$s" @@ -63,6 +65,9 @@ "Imeunganishwa (hamna simu), kiasi cha chaji ni %1$s%2$s" "Imeunganishwa (hamna kifaa cha sauti), kiasi cha chaji ni %1$s%2$s" "Imeunganishwa (hamna simu au kifaa cha sauti), kiasi cha chaji ni %1$s%2$s" + "Inatumika, chaji ya betri ni %1$s" + "Chaji ya betri ni %1$s" + "Unaendelea" "Media ya sauti" "Simu" "Uhamishaji wa faili" @@ -109,6 +114,10 @@ "Kifaa cha sauti" "Vifaa vya Ziada vya Kuingiza Data" "Bluetooth" + "Inaoanisha kifaa cha kushoto cha kusaidia kusikia…" + "Inaoanisha kifaa cha kulia cha kusaidia kusikia…" + "Kushoto - chaji ya betri ni %1$s" + "Kulia - chaji ya betri ni %1$s" "Wifi imezimwa." "Wifi imeondolewa." "Kipima mtandao kimoja cha Wifi." @@ -188,7 +197,7 @@ "Weka skrini ikiwa imewashwa" "Skrini haitawahi kuzima wakati unachaji" "Washa kumbukumbu ya Bluetooth HCI Snoop" - "Nasa pakiti zote za Bluetooth HCI katika faili" + "Nasa vifurushi vyote vya Bluetooth HCI katika faili (Washa Bluetooth baada ya kuweka mipangilio hii)" "Ufunguaji wa OEM" "Ruhusu bootloader ifunguliwe" "Je, ungependa kuruhusu ufunguaji wa OEM?" @@ -207,15 +216,20 @@ "Toleo la Bluetooth AVRCP" "Chagua Toleo la Bluetooth AVRCP" "Kodeki ya Sauti ya Bluetooth" - "Chagua Kodeki ya Sauti ya Bluetooth" + + "Kiwango cha Sampuli ya Sauti ya Bluetooth" - "Chagua Kodeki ya Sauti ya Bluetooth:\nKiwango cha Sampuli" + + "Biti za Sauti ya Bluetooth kwa Kila Sampuli" - "Chagua Kodeki ya Sauti ya Bluetooth:\nBiti kwa Kila Sampuli" + + "Hali ya Mkondo wa Sauti ya Bluetooth" - "Chagua Kodeki ya Sauti ya Bluetooth:\nHali ya Kituo" + + "Kodeki ya LDAC ya Sauti ya Bluetooth: Ubora wa Kucheza" - "Chagua Kodeki ya LDAC ya Sauti ya Bluetooth:\nUbora wa Kucheza" + + "Kutiririsha: %1$s" "DNS ya Faragha" "Chagua Hali ya DNS ya Faragha" @@ -223,9 +237,12 @@ "Otomatiki" "Jina la mpangishi wa huduma za DNS ya faragha" "Weka jina la mpangishi wa huduma za DNS" + "Imeshindwa kuunganisha" "Onyesha chaguo za cheti cha kuonyesha pasiwaya" "Ongeza hatua ya uwekaji kumbukumbu ya Wi-Fi, onyesha kwa kila SSID RSSI kwenye Kichukuzi cha Wi-Fi" "Weka anwani ya MAC kwa nasibu wakati unaunganisha kwenye mitandao ya Wi‑Fi" + "Mtandao unapima data" + "Mtandao usiopima data" "Ukubwa wa kiweka bafa ya kumbukumbu" "Chagua ukubwa wa kila Kumbukumbu" "Ungependa kufuta data iliyo kwenye hifadhi ya kiweka kumbukumbu za mara kwa mara?" @@ -360,14 +377,10 @@ "Takriban %1$s zimesalia kulingana na matumizi yako" "Zimesalia takribani %1$s kulingana na jinsi utakavyoitumia (%2$s)" "Zimesalia %1$s" - - - - - - - - + "Inapaswa kudumu kwa takribani %1$s kulingana na jinsi unavyoitumia (%2$s)" + "Inapaswa kudumu hadi %1$s kulingana na jinsi unavyoitumia" + "Inapaswa kudumu kwa takribani %1$s (%2$s)" + "Inapaswa kudumu hadi %1$s" "Zimesalia chini ya %1$s" "Zimesalia chini ya %1$s (%2$s)" "Zimesalia zaidi ya %1$s (%2$s)" @@ -422,8 +435,7 @@ "Imesajiliwa" "Haijasajiliwa" "Hapatikani" - - + "Imechagua anwani ya MAC kwa nasibu" Imeunganisha vifaa %1$d Imeunganisha kifaa %1$d @@ -443,6 +455,5 @@ "siku ya %1$s" "Muda" "Uliza kila wakati" - - + "Sasa hivi" diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml index e70da6773882b30306ddd80e0fe7b48b4bd331fd..f3fe2e973d32416cff49b66e5a4c090287332b16 100644 --- a/packages/SettingsLib/res/values-ta/strings.xml +++ b/packages/SettingsLib/res/values-ta/strings.xml @@ -40,6 +40,10 @@ "%1$s வழியாக இணைக்கப்பட்டது" "%1$s வழியாகக் கிடைக்கிறது" "இணைக்கப்பட்டுள்ளது, ஆனால் இண்டர்நெட் இல்லை" + + + + "தற்காலிகமாக அணுகல் புள்ளி நிரம்பியுள்ளது" "%1$s வழியாக இணைக்கப்பட்டது" "%1$s வழியாகக் கிடைக்கிறது" @@ -63,6 +67,12 @@ "இணைக்கப்பட்டது (மொபைல் இல்லை), பேட்டரி %1$s%2$s" "இணைக்கப்பட்டது (மீடியா இல்லை), பேட்டரி %1$s%2$s" "இணைக்கப்பட்டது (மொபைல் அல்லது மீடியா இல்லை), பேட்டரி %1$s%2$s" + + + + + + "மீடியா ஆடியோ" "ஃபோன் அழைப்புகள்" "கோப்பு இடமாற்றம்" @@ -109,6 +119,14 @@ "ஹெட்ஃபோன்" "இன்புட் பெரிபெரல்" "புளூடூத்" + + + + + + + + "வைஃபை முடக்கப்பட்டது." "வைஃபை துண்டிக்கப்பட்டது." "வைஃபை சிக்னல்: ஒரு கோடு." @@ -188,7 +206,8 @@ "செயலில் வைத்திரு" "சார்ஜ் ஏறும்போது திரை எப்போதும் உறக்கநிலைக்குச் செல்லாது" "புளூடூத் HCI ஸ்னுப் பதிவை இயக்கு" - "கோப்பில் உள்ள எல்லா புளூடூத் HCI தொகுதிகளையும் படமெடு" + + "OEM திறத்தல்" "பூட்லோடரைத் திறக்க அனுமதி" "OEM திறத்தலை அனுமதிக்கவா?" @@ -207,15 +226,20 @@ "புளூடூத் AVRCP பதிப்பு" "புளூடூத் AVRCP பதிப்பைத் தேர்ந்தெடு" "புளூடூத் ஆடியோ கோடெக்" - "புளூடூத் ஆடியோ கோடெக்கைத் தேர்ந்தெடுக்கவும்" + + "புளூடூத் ஆடியோ சாம்பிள் ரேட்" - "புளூடூத் ஆடியோ கோடெக்கைத் தேர்ந்தெடுக்கவும்:\nசாம்பிள் ரேட்" + + "புளூடூத் ஆடியோ பிட்கள்/சாம்பிள்" - "புளூடூத் ஆடியோ கோடெக்கைத் தேர்ந்தெடுக்கவும்:\nபிட்கள்/சாம்பிள்" + + "புளூடூத் ஆடியோ சேனல் பயன்முறை" - "புளூடூத் ஆடியோ கோடெக்கைத் தேர்ந்தெடுக்கவும்:\nசேனல் பயன்முறை" + + "புளூடூத் ஆடியோ LDAC கோடெக்: வீடியோவின் தரம்" - "புளூடூத் ஆடியோ LDAC கோடெக்கைத் தேர்ந்தெடுக்கவும்:\nவீடியோவின் தரம்" + + "ஸ்ட்ரீமிங்: %1$s" "தனிப்பட்ட DNS" "தனிப்பட்ட DNS பயன்முறையைத் தேர்ந்தெடுக்கவும்" @@ -223,9 +247,15 @@ "தானியங்கு" "தனிப்பட்ட DNS வழங்குநரின் ஹோஸ்ட் பெயர்" "DNS வழங்குநரின் ஹோஸ்ட் பெயரை உள்ளிடவும்" + + "வயர்லெஸ் காட்சி சான்றுக்கான விருப்பங்களைக் காட்டு" "Wifi நுழைவு அளவை அதிகரித்து, வைஃபை தேர்வியில் ஒவ்வொன்றிற்கும் SSID RSSI ஐ காட்டுக" "Wi‑Fi நெட்வொர்க்குகளில் இணைக்கும்போது Randomize MAC இன் முகவரி" + + + + "லாகர் பஃபர் அளவுகள்" "லாக் பஃபர் ஒன்றிற்கு லாகர் அளவுகளைத் தேர்வுசெய்க" "லாகரின் நிலையான சேமிப்பகத்தை அழிக்கவா?" @@ -360,14 +390,10 @@ "உபயோகத்தின் அடிப்படையில் கிட்டத்தட்ட %1$s மீதமுள்ளது" "பயன்படுத்துவதன் அடிப்படையில், %1$s வரை பயன்படுத்த முடியும் (%2$s)" "%1$s மீதமுள்ளது" - - - - - - - - + "நீங்கள் பயன்படுத்துவதன் அடிப்படையில், %1$s வரை உபயோகிக்க முடியும் (%2$s)" + "நீங்கள் பயன்படுத்துவதன் அடிப்படையில் %1$s வரை உபயோகிக்க முடியும்" + "%1$s வரை பயன்படுத்த முடியும் (%2$s)" + "%1$s வரை பயன்படுத்த முடியும்" "%1$sக்கும் குறைவாகவே பயன்படுத்த முடியும்" "%1$sக்கும் குறைவாகவே பயன்படுத்த முடியும் (%2$s)" "%1$sக்கும் மேல் பயன்படுத்த முடியும் (%2$s)" @@ -422,8 +448,7 @@ "பதிவு செய்யப்பட்டது" "பதிவு செய்யப்படவில்லை" "கிடைக்கவில்லை" - - + "MAC முகவரி சீரற்றுள்ளது" %1$d சாதனங்கள் இணைக்கப்பட்டன %1$d சாதனம் இணைக்கப்பட்டது diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml index bfe54a0d8f7c8d42eead650b24d2f12fe00ed557..5558e8d5d6f9d2ac1cbac7fd48a0a644dbd75ad6 100644 --- a/packages/SettingsLib/res/values-te/strings.xml +++ b/packages/SettingsLib/res/values-te/strings.xml @@ -40,6 +40,10 @@ "%1$s ద్వారా కనెక్ట్ చేయబడింది" "%1$s ద్వారా అందుబాటులో ఉంది" "కనెక్ట్ చేయబడింది, ఇంటర్నెట్ లేదు" + + + + "యాక్సెస్ పాయింట్ తాత్కాలికంగా నిండుకుంది" "%1$s ద్వారా కనెక్ట్ చేయబడింది" "%1$s ద్వారా అందుబాటులో ఉంది" @@ -63,6 +67,12 @@ "కనెక్ట్ చేయబడింది (ఫోన్ కాదు), బ్యాటరీ %1$s%2$s" "కనెక్ట్ చేయబడింది (మీడియా కాదు), బ్యాటరీ %1$s%2$s" "కనెక్ట్ చేయబడింది (ఫోన్ లేదా మీడియా కాదు), బ్యాటరీ %1$s%2$s" + + + + + + "మీడియా ఆడియో" "ఫోన్ కాల్‌లు" "ఫైల్ బదిలీ" @@ -109,6 +119,14 @@ "హెడ్‌ఫోన్" "ఇన్‌పుట్ అనుబంధ పరికరం" "బ్లూటూత్" + + + + + + + + "Wifi ఆఫ్‌లో ఉంది." "Wifi డిస్‌కనెక్ట్ చేయబడింది." "Wifi సిగ్నల్ ఒక బార్ ఉంది." @@ -188,7 +206,8 @@ "సక్రియంగా ఉంచు" "ఛార్జ్ చేస్తున్నప్పుడు స్క్రీన్ ఎప్పటికీ నిద్రావస్థలోకి వెళ్లదు" "బ్లూటూత్ HCI రహస్య లాగ్‌ను ప్రారంభించు" - "ఫైల్‌లో అన్ని బ్లూటూత్ HCI ప్యాకెట్‌లను క్యాప్చర్ చేయి" + + "OEM అన్‌లాకింగ్" "బూట్‌లోడర్ అన్‌లాక్ కావడానికి అనుమతించు" "OEM అన్‌లాకింగ్‌ను అనుమతించాలా?" @@ -207,15 +226,20 @@ "బ్లూటూత్ AVRCP వెర్షన్" "బ్లూటూత్ AVRCP సంస్కరణను ఎంచుకోండి" "బ్లూటూత్ ఆడియో కోడెక్" - "బ్లూటూత్ ఆడియో కోడెక్‌ని ఎంచుకోండి" + + "బ్లూటూత్ ఆడియో నమూనా రేట్" - "బ్లూటూత్ ఆడియో కోడెక్‌ని ఎంచుకోండి:\nనమూనా రేటు" + + "ఒక్కో నమూనాకు బ్లూటూత్ ఆడియో బిట్‌లు" - "బ్లూటూత్ ఆడియో కోడెక్‌ని ఎంచుకోండి:\nఒక్కో నమూనాలో బిట్‌లు" + + "బ్లూటూత్ ఆడియో ఛానెల్ మోడ్" - "బ్లూటూత్ ఆడియో కోడెక్‌ని ఎంచుకోండి:\nఛానెల్ మోడ్" + + "బ్లూటూత్ ఆడియో LDAC కోడెక్: ప్లేబ్యాక్ నాణ్యత" - "బ్లూటూత్ ఆడియో LDAC కోడెక్‌ని ఎంచుకోండి:\nప్లేబ్యాక్ నాణ్యత" + + "ప్రసారం చేస్తోంది: %1$s" "ప్రైవేట్ DNS" "ప్రైవేట్ DNS మోడ్‌ను ఎంచుకోండి" @@ -223,9 +247,15 @@ "ఆటోమేటిక్" "ప్రైవేట్ DNS ప్రదాత హోస్ట్‌పేరు" "DNS ప్రదాత యొక్క హోస్ట్‌పేరును నమోదు చేయండి" + + "వైర్‌లెస్ ప్రదర్శన సర్టిఫికెట్ కోసం ఎంపికలను చూపు" "Wi‑Fi ఎంపికలో SSID RSSI ప్రకారం చూపబడే Wi‑Fi లాగింగ్ స్థాయిని పెంచండి" "Wi-Fi నెట్‌వర్క్‌కు కనెక్ట్ చేస్తున్నప్పుడు MAC చిరునామాను యాదృచ్ఛికం చేయండి" + + + + "లాగర్ బఫర్ పరిమాణాలు" "లాగ్ బఫర్‌కి లాగర్ పరిమా. ఎంచుకోండి" "లాగర్ నిరంతర నిల్వలోని డేటాను తీసివేయాలా?" @@ -360,14 +390,10 @@ "మీ వినియోగం ఆధారంగా సుమారు %1$s సమయం మిగిలి ఉంది" "మీ వినియోగం ఆధారంగా దాదాపు %1$s ఉండవచ్చు (%2$s)" "%1$s మిగిలి ఉంది" - - - - - - - - + "మీ వినియోగం ఆధారంగా %1$s వరకు ఉండాలి (%2$s)" + "మీ వినియోగం ఆధారంగా దాదాపు %1$s వరకు ఉండాలి" + "దాదాపు %1$s వరకు ఉండాలి (%2$s)" + "దాదాపు %1$s వరకు ఉండాలి" "%1$s కంటే తక్కువ సమయం మిగిలి ఉంది" "%1$s కంటే తక్కువ సమయం మిగిలి ఉంది (%2$s)" "%1$s కంటే ఎక్కువ సమయం మిగిలి ఉంది (%2$s)" @@ -422,8 +448,7 @@ "నమోదు చేయబడింది" "నమోదు కాలేదు" "అందుబాటులో లేదు" - - + "MAC యాదృచ్ఛికంగా ఉంది" %1$d పరికరాలు కనెక్ట్ చేయబడ్డాయి %1$d పరికరం కనెక్ట్ చేయబడింది @@ -443,6 +468,5 @@ "%1$sకి" "వ్యవధి" "ప్రతిసారి అడుగు" - - + "ఇప్పుడే" diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml index 6952ba3f017c8fa10deabf76b1a5f97ec7fec647..77457ac158c26347c4a523553e75004d65932761 100644 --- a/packages/SettingsLib/res/values-th/strings.xml +++ b/packages/SettingsLib/res/values-th/strings.xml @@ -40,6 +40,8 @@ "เชื่อมต่อผ่าน %1$s แล้ว" "พร้อมใช้งานผ่านทาง %1$s" "เชื่อมต่อแล้ว ไม่พบอินเทอร์เน็ต" + "ไม่มีอินเทอร์เน็ต" + "ต้องลงชื่อเข้าใช้" "จุดเข้าใช้งานเต็มชั่วคราว" "เชื่อมต่อผ่าน %1$s แล้ว" "พร้อมใช้งานผ่านทาง %1$s" @@ -63,6 +65,9 @@ "เชื่อมต่อแล้ว (ไม่รวมโทรศัพท์) แบตเตอรี่ %1$s%2$s" "เชื่อมต่อแล้ว (ไม่รวมสื่อ) แบตเตอรี่ %1$s%2$s" "เชื่อมต่อแล้ว (ไม่รวมโทรศัพท์หรือสื่อ) แบตเตอรี่ %1$s%2$s" + "ใช้งานอยู่ แบตเตอรี่ %1$s" + "แบตเตอรี่ %1$s" + "ใช้งานอยู่" "เสียงของสื่อ" "โทรศัพท์" "การถ่ายโอนไฟล์" @@ -109,6 +114,10 @@ "หูฟัง" "อุปกรณ์อินพุต" "บลูทูธ" + "กำลังจับคู่กับเครื่องช่วยการได้ยินข้างซ้าย…" + "กำลังจับคู่กับเครื่องช่วยการได้ยินข้างขวา…" + "ข้างซ้าย - แบตเตอรี่ %1$s" + "ข้างขวา - แบตเตอรี่ %1$s" "Wi-Fi ปิดอยู่" "ไม่ได้เชื่อมต่อ Wi-Fi" "สัญญาณ Wi-Fi 1 ขีด" @@ -188,7 +197,7 @@ "เปิดหน้าจอค้าง" "หน้าจอจะไม่เข้าสู่โหมดสลีปขณะชาร์จ" "เปิดใช้งานบันทึกสอดแนมบลูทูธ HCI" - "บันทึกแพ็คเก็ตบลูทูธ HCI ทั้งหมดในไฟล์" + "บันทึกแพ็กเก็ตบลูทูธ HCI ทั้งหมดในไฟล์ (สลับสวิตช์บลูทูธหลังจากเปลี่ยนการตั้งค่านี้)" "การปลดล็อก OEM" "อนุญาตให้ปลดล็อกตัวโหลดการเปิดเครื่อง" "อนุญาตการปลดล็อก OEM ไหม" @@ -207,15 +216,20 @@ "เวอร์ชันของบลูทูธ AVRCP" "เลือกเวอร์ชันของบลูทูธ AVRCP" "ตัวแปลงรหัสเสียงบลูทูธ" - "เลือกตัวแปลงรหัสเสียงบลูทูธ" + + "อัตราตัวอย่างเสียงบลูทูธ" - "เลือกตัวแปลงรหัสเสียงบลูทูธ:\nอัตราการสุ่มตัวอย่าง" + + "บิตต่อตัวอย่างของเสียงบลูทูธ" - "เลือกตัวแปลงรหัสเสียงบลูทูธ:\nบิตต่อตัวอย่าง" + + "โหมดช่องสัญญาณเสียงบลูทูธ" - "เลือกตัวแปลงรหัสเสียงบลูทูธ:\nโหมดช่องสัญญาณ" + + "ตัวแปลงรหัสเสียงบลูทูธที่ใช้ LDAC: คุณภาพการเล่น" - "เลือกตัวแปลงรหัสเสียงบลูทูธที่ใช้ LDAC:\nคุณภาพการเล่น" + + "สตรีมมิง: %1$s" "DNS ส่วนตัว" "เลือกโหมด DNS ส่วนตัว" @@ -223,9 +237,12 @@ "อัตโนมัติ" "ชื่อโฮสต์ของผู้ให้บริการ DNS ส่วนตัว" "ป้อนชื่อโฮสต์ของผู้ให้บริการ DNS" + "เชื่อมต่อไม่ได้" "แสดงตัวเลือกสำหรับการรับรองการแสดงผล แบบไร้สาย" "เพิ่มระดับการบันทึก Wi‑Fi แสดงต่อ SSID RSSI ในตัวเลือก Wi‑Fi" "สุ่มที่อยู่ MAC เมื่อเชื่อมต่อกับเครือข่าย Wi‑Fi" + "มีการวัดปริมาณอินเทอร์เน็ต" + "ไม่มีการวัดปริมาณอินเทอร์เน็ต" "ขนาดบัฟเฟอร์ของ Logger" "เลือกขนาด Logger ต่อบัฟเฟอร์ไฟล์บันทึก" "ล้างพื้นที่เก็บข้อมูลถาวรของตัวบันทึกไหม" @@ -360,14 +377,10 @@ "เหลืออีกราว %1$s ขึ้นอยู่กับการใช้งานของคุณ" "ใช้งานได้อีกประมาณ %1$s ขึ้นอยู่กับการใช้งานของคุณ (%2$s)" "เหลืออีก %1$s" - - - - - - - - + "น่าจะใช้งานได้ถึงเวลาประมาณ %1$s เมื่อดูจากการใช้งานของคุณ (%2$s)" + "น่าจะใช้งานได้ถึงเวลาประมาณ %1$s เมื่อดูจากการใช้งานของคุณ" + "น่าจะใช้งานได้ถึงเวลาประมาณ %1$s (%2$s)" + "น่าจะใช้งานได้ถึงเวลาประมาณ %1$s" "เหลืออีกไม่ถึง %1$s" "เหลือเวลาอีกไม่ถึง %1$s (%2$s)" "เหลือเวลามากกว่า %1$s (%2$s)" @@ -422,8 +435,7 @@ "ลงทะเบียนแล้ว" "ไม่ได้ลงทะเบียน" "ไม่ว่าง" - - + "MAC เป็นแบบสุ่ม" มีอุปกรณ์ที่เชื่อมต่อ %1$d เครื่อง มีอุปกรณ์ที่เชื่อมต่อ %1$d เครื่อง @@ -443,6 +455,5 @@ "วัน%1$s" "ระยะเวลา" "ถามทุกครั้ง" - - + "เมื่อสักครู่" diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml index ef228d5861fb9d52cc7d8509c7b39d5f98a97dee..712424c5eefd9ae564bac0c474c662fd98c67ab5 100644 --- a/packages/SettingsLib/res/values-tl/strings.xml +++ b/packages/SettingsLib/res/values-tl/strings.xml @@ -40,6 +40,8 @@ "Nakakonekta sa pamamagitan ng %1$s" "Available sa pamamagitan ng %1$s" "Nakakonekta, walang internet" + "Walang internet" + "Kinakailangang mag-sign in" "Pansamantalang puno ang access point" "Nakakonekta sa pamamagitan ng %1$s" "Available sa pamamagitan ng %1$s" @@ -63,6 +65,9 @@ "Nakakonekta (walang telepono), baterya %1$s%2$s" "Nakakonekta (walang media), baterya %1$s%2$s" "Nakakonekta (walang telepono o media), baterya %1$s%2$s" + "Aktibo, %1$s baterya" + "%1$s baterya" + "Aktibo" "Audio ng media" "Mga tawag sa telepono" "Paglilipat ng file" @@ -109,6 +114,10 @@ "Headphone" "Input Peripheral" "Bluetooth" + "Nagpapares ang kaliwang hearing aid…" + "Nagpapares ang kanang hearing aid…" + "Kaliwa - %1$s baterya" + "Kanan - %1$s baterya" "Naka-off ang Wifi." "Nakadiskonekta ang Wifi." "May isang bar ang Wifi." @@ -188,7 +197,7 @@ "Manatiling gumagana" "Hindi kailanman hihinto ang screen kapag kinakargahan" "I-enable ang Bluetooth HCI snoop log" - "I-capture ang lahat ng bluetooth HCI packet sa isang file" + "I-capture ang lahat ng Bluetooth HCI packet sa isang file (I-toggle ang Bluetooth pagkatapos baguhin ang setting na ito)" "Pag-a-unlock ng OEM" "Payagan na ma-unlock ang bootloader" "Payagan ang pag-a-unlock ng OEM?" @@ -207,15 +216,20 @@ "Bersyon ng AVRCP ng Bluetooth" "Pumili ng Bersyon ng AVRCP ng Bluetooth" "Bluetooth Audio Codec" - "Piliin ang Audio Codec ng Bluetooth" + + "Sample na Rate ng Bluetooth Audio" - "Piliin ang Audio Codec ng Bluetooth:\nRate ng Sample" + + "Bits Per Sample ng Bluetooth Audio" - "Piliin ang Audio Codec ng Bluetooth:\nBit Kada Sample" + + "Channel Mode ng Bluetooth Audio" - "Piliin ang Audio Codec ng Bluetooth:\nChannel Mode" + + "Audio LDAC Codec ng Bluetooth: Kalidad ng Pag-playback" - "Piliin ang Audio LDAC Codec ng Bluetooth:\nKalidad ng Pag-playback" + + "Streaming: %1$s" "Pribadong DNS" "Pumili ng Pribadong DNS Mode" @@ -223,9 +237,12 @@ "Awtomatiko" "Hostname ng provider ng pribadong DNS" "Ilagay ang hostname ng DNS provider" + "Hindi makakonekta" "Ipakita ang mga opsyon para sa certification ng wireless display" "Pataasin ang antas ng Wi‑Fi logging, ipakita sa bawat SSID RSSI sa Wi‑Fi Picker" "I-randomize ang MAC address kapag kumokonekta sa mga Wi‑Fi network" + "Nakametro" + "Hindi Nakametro" "Mga laki ng buffer ng Logger" "Pumili ng mga laki ng Logger bawat log buffer" "I-clear ang tuluy-tuloy na storage ng logger?" @@ -360,14 +377,10 @@ "Humigit-kumulang %1$s ang natitira batay sa iyong paggamit" "May humigit-kumulang %1$s pa batay sa iyong paggamit (%2$s)" "%1$s pa" - - - - - - - - + "Tatagal dapat nang hanggang humigit-kumulang %1$s batay sa iyong paggamit (%2$s)" + "Tatagal dapat nang hanggang humigit-kumulang %1$s batay sa iyong paggamit" + "Tatagal dapat nang hanggang humigit-kumulang %1$s (%2$s)" + "Tatagal dapat nang hanggang humigit-kumulang %1$s" "Wala nang %1$s ang natitira" "Wala nang %1$s ang natitira (%2$s)" "Mahigit %1$s pa ang natitira (%2$s)" @@ -422,8 +435,7 @@ "Nakarehistro" "Hindi nakarehistro" "Hindi available" - - + "Naka-randomize ang MAC" %1$d device ang nakakonekta %1$d na device ang nakakonekta @@ -443,6 +455,5 @@ "sa %1$s" "Tagal" "Magtanong palagi" - - + "Ngayon lang" diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml index 64ee67662ba79153fb75bab70cc42e67ef0d69da..b88c757495b83b034b6f00f0f92319ee2206e507 100644 --- a/packages/SettingsLib/res/values-tr/strings.xml +++ b/packages/SettingsLib/res/values-tr/strings.xml @@ -40,6 +40,8 @@ "%1$s üzerinden bağlı" "%1$s üzerinden kullanılabilir" "Bağlı, internet yok" + "İnternet yok" + "Oturum açılması gerekiyor" "Erişim noktası geçici olarak dolu" "%1$s üzerinden bağlı" "%1$s üzerinden kullanılabilir" @@ -63,6 +65,9 @@ "%2$s cihazına bağlandı (telefon yok), pil %1$s" "%2$s cihazına bağlandı (medya yok), pil %1$s" "%2$s cihazına bağlandı (telefon veya medya yok), pil seviyesi %1$s" + "Etkin, pil düzeyi %1$s" + "Pil düzeyi %1$s" + "Etkin" "Medya sesi" "Telefon çağrıları" "Dosya aktarımı" @@ -109,6 +114,10 @@ "Kulaklık" "Giriş Çevre Birimi" "Bluetooth" + "Sol kulak işitme cihazı eşleniyor…" + "Sağ kulak işitme cihazı eşleniyor…" + "Sol - Pil düzeyi %1$s" + "Sağ - Pil düzeyi %1$s" "Kablosuz kapalı." "Kablosuz bağlantı kesildi." "Kablosuz sinyal gücü tek çubuk." @@ -188,7 +197,7 @@ "Uyanık kal" "Şarj edilirken ekran hiçbir zaman uykuya geçmez" "Bluetooth HCI araştırmayı etkinleştir" - "Bir dosyadaki tüm Bluetooth HCI paketlerini yakala" + "Bir dosyadaki tüm Bluetooth HCI paketlerini yakala (Bu ayarı değiştirdikten sonra Bluetooth seçimini değiştirin)" "OEM kilit açma" "Önyükleyicinin kilidinin açılmasına izin ver" "OEM kilit açmaya izin verilsin mi?" @@ -207,15 +216,20 @@ "Bluetooth AVRCP Sürümü" "Bluetooth AVRCP Sürümünü seçin" "Bluetooth Ses Codec\'i" - "Bluetooth Ses Codec\'ini Seçin" + + "Bluetooth Ses Örnek Hızı" - "Bluetooth Ses Codec\'ini Seçin:\nÖrnek Hızı" + + "Bluetooth Ses Örnek Başına Bit Sayısı" - "Bluetooth Ses Codec\'ini Seçin:\nÖrnek Başına Bit Sayısı" + + "Bluetooth Ses Kanalı Modu" - "Bluetooth Ses Codec\'ini Seçin:\nKanal Modu" + + "Bluetooth Ses LDAC Codec\'i: Oynatma Kalitesi" - "Bluetooth Ses LDAC Codec\'ini Seçin:\nOynatma Kalitesi" + + "Akış: %1$s" "Gizli DNS" "Gizli DNS Modunu Seçin" @@ -223,9 +237,12 @@ "Otomatik" "Gizli DNS sağlayıcının ana makine adı" "DNS sağlayıcının ana makine adını gir" + "Bağlanılamadı" "Kablosuz ekran sertifikası seçeneklerini göster" "Kablosuz günlük kaydı seviyesini artır. Kablosuz Seçici\'de her bir SSID RSSI için göster." "Kablosuz ağlara bağlanırken MAC adresini rastgele seç" + "Sayaçlı" + "Sayaçsız" "Günlük Kaydedici arabellek boyutları" "Gün. arabel. başına Gün. Kayd. boyutunu seç" "Günlük kaydedici kalıcı depolama alanı silinsin mi?" @@ -360,14 +377,10 @@ "Kullanımınıza dayalı olarak yaklaşık %1$s kaldı" "Kullanımınıza dayalı olarak yaklaşık %1$s kaldı (%2$s)" "%1$s kaldı" - - - - - - - - + "Kullanımınıza göre saat yaklaşık %1$s olana kadar kullanılabilmelidir (%2$s)" + "Kullanımınıza göre saat yaklaşık %1$s olana kadar kullanılabilmelidir" + "Saat yaklaşık %1$s olana kadar kullanılabilmelidir (%2$s)" + "Saat yaklaşık %1$s olana kadar kullanılabilmelidir" "En fazla %1$s kaldı" "En çok %1$s kaldı (%2$s)" "En az %1$s kaldı (%2$s)" @@ -422,8 +435,7 @@ "Kaydettirildi" "Kaydettirilmedi" "Kullanılamıyor" - - + "MAC rastgele yapıldı" %1$d cihaz bağlı %1$d cihaz bağlı @@ -443,6 +455,5 @@ "zaman: %1$s" "Süre" "Her zaman sor" - - + "Az önce" diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml index 2bf7564651140da3fc3d53627c91d165c0348b8c..1157a20c230366c5c115b7d7879d6d1e5475b7ec 100644 --- a/packages/SettingsLib/res/values-uk/strings.xml +++ b/packages/SettingsLib/res/values-uk/strings.xml @@ -40,6 +40,8 @@ "Під’єднано через %1$s" "Доступ через %1$s" "Під’єднано, але немає доступу до Інтернету" + "Немає Інтернету" + "Потрібно ввійти в обліковий запис" "Точка доступу тимчасово переповнена" "Під’єднано через мережу %1$s" "Доступ через мережу %1$s" @@ -63,6 +65,9 @@ "%2$s під’єднано (без телефона), заряд акумулятора – %1$s" "%2$s під’єднано (без медіа), заряд акумулятора – %1$s" "%2$s під’єднано (без телефона й медіа), заряд акумулятора – %1$s" + "Активовано, %1$s заряду акумулятора" + "%1$s заряду акумулятора" + "Активовано" "Звук медіа-файлів" "Телефонні дзвінки" "Передавання файлів" @@ -109,6 +114,10 @@ "Навушники" "Периферійне введення" "Bluetooth" + "Підключення лівого слухового апарата…" + "Підключення правого слухового апарата…" + "Лівий – %1$s заряду акумулятора" + "Правий – %1$s заряду акумулятора" "Wi-Fi вимкнено." "Wi-Fi від’єднано." "Одна смужка сигналу Wi-Fi." @@ -188,7 +197,7 @@ "Залишати активним" "Екран не засинатиме під час заряджання" "Увімкнути журнал відстеження інтерфейсу Bluetooth" - "Зберігати всі пакети інтерфейсу Bluetooth у файлі" + "Зберігати всі пакети інтерфейсу Bluetooth у файлі (перемикати Bluetooth після змінення цього налаштування)" "Розблокування виробником" "Дозволити розблокування завантажувача" "Дозволити виробникові розблоковувати пристрій?" @@ -207,15 +216,20 @@ "Версія Bluetooth AVRCP" "Виберіть версію Bluetooth AVRCP" "Кодек для аудіо Bluetooth" - "Вибрати кодек для аудіо Bluetooth" + + "Частота вибірки для аудіо Bluetooth" - "Вибрати кодек для аудіо Bluetooth:\nчастота вибірки" + + "Кількість бітів на зразок для аудіо Bluetooth" - "Вибрати кодек для аудіо Bluetooth:\nбіти у вибірці" + + "Режим каналу для аудіо Bluetooth" - "Вибрати кодек для аудіо Bluetooth:\nрежим каналу" + + "Кодек для аудіо Bluetooth LDAC: якість відтворення" - "Вибрати кодек для аудіо Bluetooth LDAC:\nякість відтворення" + + "Трансляція: %1$s" "Приватна DNS" "Виберіть режим \"Приватна DNS\"" @@ -223,9 +237,12 @@ "Автоматично" "Ім’я хосту приватного постачальника послуг DNS" "Введіть ім’я хосту постачальника послуг DNS" + "Не вдалося під’єднатися" "Показати параметри сертифікації бездротового екрана" "Показувати в журналі RSSI для кожного SSID під час вибору Wi-Fi" "Довільно вибирати MAC-адресу під час з’єднання з мережами Wi-Fi" + "З тарифікацією трафіку" + "Без тарифікації трафіку" "Розміри буфера журналу" "Виберіть розміри буфера журналу" "Очистити постійну пам’ять журналу?" @@ -360,14 +377,10 @@ "На основі використання залишилося близько %1$s" "Відповідно до даних про використання, залишилося близько %1$s (%2$s)" "Залишилося %1$s" - - - - - - - - + "На основі даних про використання (%2$s), вистачить приблизно до %1$s" + "На основі даних про використання, вистачить приблизно до %1$s" + "Вистачить приблизно до %1$s (%2$s)" + "Вистачить приблизно до %1$s" "Залишилося менше ніж %1$s" "Залишилося менше ніж %1$s (%2$s)" "Залишилося понад %1$s (%2$s)" @@ -422,8 +435,7 @@ "Зареєстровано" "Не зареєстровано" "Недоступно" - - + "Для MAC-адреси вибрано функцію довільного вибору" Під’єднано %1$d пристрій Під’єднано %1$d пристрої @@ -445,6 +457,5 @@ "%1$s" "Тривалість" "Запитувати щоразу" - - + "Щойно" diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml index 4228f54f9e05f8cbfde728ecc3d090b09264a82e..fac268b69bf461e3fdf7167c38d166215df9625e 100644 --- a/packages/SettingsLib/res/values-ur/strings.xml +++ b/packages/SettingsLib/res/values-ur/strings.xml @@ -40,6 +40,10 @@ "‏منسلک بذریعہ ‎%1$s" "‏دستیاب بذریعہ ‎%1$s" "منسلک، انٹرنیٹ نہیں ہے" + + + + "رسائی پوائنٹ عارضی طور پر فُل ہے" "‏منسلک بذریعہ ‎%1$s" "‏دستیاب بذریعہ ‎%1$s" @@ -63,6 +67,12 @@ "منسلک ہے (فون کے علاوہ)، بیٹری %1$s%2$s" "منسلک ہے (میڈیا کے علاوہ)، بیٹری %1$s%2$s" "منسلک ہے (فون یا میڈیا کے علاوہ)، بیٹری %1$s%2$s" + + + + + + "میڈيا آڈیو" "فون کالز" "فائل کی منتقلی" @@ -109,6 +119,14 @@ "ہیڈ فون" "ان پٹ پیریفرل" "بلوٹوتھ" + + + + + + + + "‏Wifi آف ہے۔" "‏Wifi غیر منسلک ہو گیا۔" "‏Wifi ایک بار۔" @@ -188,7 +206,8 @@ "بیدار رکھیں" "چارج ہوتے وقت اسکرین کبھی بھی سلیپ وضع میں نہيں جائے گی" "‏بلوٹوتھ HCI کا جاسوسی لاگ فعال کریں" - "‏سبھی بلوٹوتھ HCI کے پیکٹس ایک فائل میں قید کریں" + + "‏OEM اَن لاکنگ" "بوٹ لوڈر کو غیر مقفل ہونے کی اجازت دیں" "‏OEM اَن لاکنگ کی اجازت دیں؟" @@ -207,15 +226,20 @@ "‏بلوٹوتھ AVRCP ورژن" "‏بلوٹوتھ AVRCP ورژن منتخب کریں" "بلوٹوتھ آڈیو کوڈیک" - "بلوٹوتھ آڈیو کوڈیک منتخب کریں" + + "بلوٹوتھ آڈیو کے نمونے کی شرح" - "بلوٹوتھ آڈیو کوڈیک منتخب کریں:\nنمونے کی شرح" + + "بلوٹوتھ آڈیو بٹس فی نمونہ" - "بلوٹوتھ آڈیو کوڈیک منتخب کریں:\nبٹس فی نمونہ" + + "بلوٹوتھ آڈیو چینل موڈ" - "بلوٹوتھ آڈیو کوڈیک منتخب کریں:\nچینل موڈ" + + "‏بلوٹوتھ آڈیو LDAC کوڈیک: پلے بیک کا معیار" - "‏بلوٹوتھ آڈیو LDAC کوڈیک منتخب کریں:\nپلے بیک کا معیار" + + "سلسلہ بندی: %1$s" "‏نجی DNS" "‏نجی DNS وضع منتخب کریں" @@ -223,9 +247,15 @@ "خودکار" "‏نجی DNS فراہم کنندہ میزبان کا نام" "‏DNS فراہم کنندہ کے میزبان کا نام درج کریں" + + "وائرلیس ڈسپلے سرٹیفیکیشن کیلئے اختیارات دکھائیں" "‏Wi‑Fi لاگنگ لیول میں اضافہ کریں، Wi‑Fi منتخب کنندہ میں فی SSID RSSI دکھائیں" "‏Wi-Fi نیٹ ورکس سے منسلک کرتے وقت MAC پتے کو غیر مرتب کریں" + + + + "لاگر بفر کے سائز" "فی لاگ بفر لاگر کے سائز منتخب کریں" "لاگر مستقل اسٹوریج صاف کریں؟" @@ -360,14 +390,10 @@ "آپ کے استعمال کی بنیاد پر تقریباً %1$s باقی ہے" "آپ کے استعمال کی بنیاد پر تقریباً %1$s باقی ہے (%2$s)" "%1$s باقی ہے" - - - - - - - - + "آپ کے استعمال کی بنیاد پر تقریباً %1$s تک بیٹری چلے گی (%2$s)" + "آپ کے استعمال کی بنیاد پر تقریباً %1$s تک بیٹری چلے گی" + "تقریباً %1$s تک بیٹری چلے گی (%2$s)" + "تقریباً %1$s تک بیٹری چلے گی" "%1$s سے کم باقی ہے" "%1$s سے کم باقی ہے (%2$s)" "%1$s سے زیادہ باقی ہے (%2$s)" @@ -422,8 +448,7 @@ "رجسٹر شدہ" "رجسٹر نہیں ہے" "غیر دستیاب" - - + "‏MAC پتہ رینڈم ہے" ‏%1$d آلات منسلک ہیں ‏%1$d آلہ منسلک ہے @@ -443,6 +468,5 @@ "%1$s بجے" "مدت" "ہر بار پوچھیں" - - + "ابھی ابھی" diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml index ebd873c62d759c318125ff7e214a7e0ed27a16cb..648cda7aecf6a7672328f0c730dd4cf3c3c0fa9b 100644 --- a/packages/SettingsLib/res/values-uz/strings.xml +++ b/packages/SettingsLib/res/values-uz/strings.xml @@ -40,6 +40,10 @@ "%1$s orqali ulangan" "%1$s orqali ishlaydi" "Ulangan, lekin internet aloqasi yo‘q" + + + + "Internet kirish nuqtasi vaqtinchalik to‘lgan" "%1$s orqali ulangan" "%1$s orqali ishlaydi" @@ -63,6 +67,12 @@ "%2$s ulandi (telefondan tashqari), batareya quvvati: %1$s" "%2$s ulandi (mediadan tashqari), batareya quvvati: %1$s" "%2$s ulandi (telefon yoki mediadan tashqari), batareya quvvati: %1$s" + + + + + + "Media audio" "Telefon chaqiruvlari" "Fayl uzatish" @@ -109,6 +119,14 @@ "Quloqchin" "Kiritish qurilmasi" "Bluetooth" + + + + + + + + "Wi-Fi o‘chiq." "Wi-Fi o‘chiq." "Wi-Fi: bitta ustun" @@ -188,7 +206,7 @@ "Ekranning yoniq turishi" "Qurilma quvvat olayotganda ekran doim yoniq turadi" "Bluetooth HCI amallari translatsiyasi jurnali" - "Barcha Bluetooth HCI paketlarini bitta faylga saqlash" + "Barcha Bluetooth HCI paketlarini bitta faylga saqlash (Bu parametrni o‘zgartirishdan keyin Bluetooth funksiyasini yoqish/o‘chirish)" "Zavod qulfini yechish" "Operatsion tizimni yuklash dasturining qulfini yechishga ruxsat berish" "Zavod qulfini yechishga ruxsat berilsinmi?" @@ -199,7 +217,7 @@ "Tarmoqlar" "Simsiz monitor sertifikatlari" "Batafsil Wi-Fi jurnali" - "Ulangan MAC randomizatsiyasi" + "Wi-Fi orqali ulanganda tasodifiy MAC manzillar yaratish" "Mobil internet doim yoniq tursin" "Modem rejimida apparatli tezlashtirish" "Bluetooth qurilmalarini nomlarisiz ko‘rsatish" @@ -207,15 +225,20 @@ "Bluetooth AVRCP versiyasi" "Bluetooth AVRCP versiyasini tanlang" "Bluetooth audio kodeki" - "Bluetooth orqali uzatish uchun audiokodek" + + "Bluetooth audio namunasi chastotasi" - "Bluetooth orqali uzatish uchun audiokodek:\nnamuna chastotasi" + + "Bluetooth audio namunasidagi bitlar soni" - "Bluetooth orqali uzatish uchun audiokodek:\nnamunadagi bitlar soni" + + "Bluetooth audio kanali rejimi" - "Bluetooth orqali uzatish uchun audiokodek:\nkanal rejimi" + + "LDAC audiokodeki bilan ijro etish sifati (Bluetooth orqali)" - "LDAC audiokodeki:\nijro sifati" + + "Translatsiya: %1$s" "Shaxsiy DNS" "Shaxsiy DNS rejimini tanlang" @@ -223,9 +246,15 @@ "Avtomatik" "Shaxsiy DNS provayderining host nomi" "DNS provayderining host nomini kiriting" + + "Simsiz monitorlarni sertifikatlash parametrini ko‘rsatish" "Wi-Fi ulanishini tanlashda har bir SSID uchun jurnalda ko‘rsatilsin" "Wi-Fi tarmoqlarga ulanishda MAC manzilini tasodifiy tanlash" + + + + "Jurnal buferi hajmi" "Jurnal xotirasi hajmini tanlang" "Jurnalning doimiy xotirasi tozalansinmi?" @@ -360,14 +389,10 @@ "Joriy holatda taxminan %1$s qoldi" "Joriy holatda taxminan %1$s qoldi (%2$s)" "%1$s qoldi" - - - - - - - - + "Joriy holatda taxminan %1$s gacha davom etadi (%2$s)" + "Joriy holatda taxminan %1$s gacha davom etadi" + "Taxminan %1$s gacha davom etadi (%2$s)" + "Taxminan %1$s gacha davom etadi" "%1$sdan kamroq vaqt qoldi" "%1$sdan kamroq vaqt qoldi (%2$s)" "%1$sdan ko‘proq vaqt qoldi (%2$s)" @@ -422,8 +447,7 @@ "Registratsiya qilingan" "Registratsiya qilinmagan" "Mavjud emas" - - + "MAC tasodifiy tanlandi" %1$d ta qurilma ulangan %1$d ta qurilma ulangan @@ -443,6 +467,5 @@ "%1$s" "Davomiyligi" "Har safar so‘ralsin" - - + "Hozir" diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml index 8e71bf332e03ff5cbceb445c25721639c224d871..0599aeaa0452def0e362479c225fb5eef70275a6 100644 --- a/packages/SettingsLib/res/values-vi/strings.xml +++ b/packages/SettingsLib/res/values-vi/strings.xml @@ -40,6 +40,10 @@ "Được kết nối qua %1$s" "Có sẵn qua %1$s" "Đã kết nối, không có Internet" + + + + "Điểm truy cập tạm thời đã đạt đến giới hạn số lượng thiết bị truy cập." "Được kết nối qua %1$s" "Có sẵn qua %1$s" @@ -63,6 +67,12 @@ "Đã kết nối (không có điện thoại), mức pin %1$s%2$s" "Đã kết nối (không có phương tiện), mức pin %1$s%2$s" "Đã kết nối (không có điện thoại hoặc phương tiện), mức pin %1$s%2$s" + + + + + + "Âm thanh của phương tiện" "Cuộc gọi điện thoại" "Chuyển tệp" @@ -109,6 +119,14 @@ "Tai nghe" "Thiết bị ngoại vi vào" "Bluetooth" + + + + + + + + "Đã tắt Wi-Fi." "Đã ngắt kết nối Wi-Fi." "Tín hiệu Wi-Fi một vạch." @@ -188,7 +206,7 @@ "Không khóa màn hình" "Màn hình sẽ không bao giờ chuyển sang chế độ nghỉ khi sạc" "Bật nhật ký theo dõi HCI Bluetooth" - "Giữ tất cả các gói HCI bluetooth trong một tệp" + "Thu thập tất cả các gói HCI Bluetooth vào một tệp (Bật/tắt Bluetooth sau khi thay đổi cài đặt này)" "Mở khóa OEM" "Cho phép mở khóa trình khởi động" "Cho phép mở khóa OEM?" @@ -207,15 +225,20 @@ "Bluetooth phiên bản AVRCP" "Chọn Bluetooth phiên bản AVRCP" "Codec âm thanh Bluetooth" - "Chọn Codec âm thanh Bluetooth" + + "Tốc độ lấy mẫu âm thanh Bluetooth" - "Chọn Codec âm thanh Bluetooth:\nTốc độ lấy mẫu" + + "Số bit âm thanh Bluetooth mỗi mẫu" - "Chọn Codec âm thanh Bluetooth:\nSố bit trên mẫu" + + "Chế độ kênh âm thanh Bluetooth" - "Chọn Codec âm thanh Bluetooth:\nChế độ kênh" + + "Codec LDAC âm thanh Bluetooth: Chất lượng phát lại" - "Chọn Codec LDAC âm thanh Bluetooth:\nChất lượng phát lại" + + "Truyền trực tuyến: %1$s" "DNS riêng tư" "Chọn chế độ DNS riêng tư" @@ -223,9 +246,15 @@ "Tự động" "Tên máy chủ của nhà cung cấp DNS riêng tư" "Nhập tên máy chủ của nhà cung cấp DNS" + + "Hiển thị tùy chọn chứng nhận hiển thị không dây" "Tăng mức ghi nhật ký Wi‑Fi, hiển thị mỗi SSID RSSI trong bộ chọn Wi‑Fi" "Lựa chọn ngẫu nhiên địa chỉ MAC khi kết nối với mạng Wi‑Fi" + + + + "Kích cỡ tải trình ghi" "Chọn kích thước Trình ghi/lần tải nhật ký" "Xóa bộ nhớ ổn định trong trình ghi nhật ký?" @@ -360,14 +389,10 @@ "Còn khoảng %1$s dựa trên mức sử dụng của bạn" "Còn khoảng %1$s dựa vào mức sử dụng của bạn (%2$s)" "Còn lại %1$s" - - - - - - - - + "Sẽ hết pin cho tới khoảng %1$s dựa trên mức sử dụng của bạn (%2$s)" + "Sẽ hết pin cho tới khoảng %1$s dựa trên mức sử dụng của bạn" + "Sẽ hết pin cho tới khoảng %1$s (%2$s)" + "Sẽ hết pin cho tới khoảng %1$s" "Còn lại không đến %1$s" "Còn lại không đến %1$s (%2$s)" "Còn lại hơn %1$s (%2$s)" @@ -422,8 +447,7 @@ "Đã đăng ký" "Chưa được đăng ký" "Không có" - - + "Địa chỉ MAC được gán ngẫu nhiên" %1$d thiết bị được kết nối %1$d thiết bị được kết nối @@ -443,6 +467,5 @@ "vào %1$s" "Thời lượng" "Luôn hỏi" - - + "Vừa xong" diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml index cc4d7e9a116d6d86186c802b1c0e87fc88ecde12..22ba3c32e2b49bd0b9013296bb29a21e50effc8a 100644 --- a/packages/SettingsLib/res/values-zh-rCN/strings.xml +++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml @@ -40,6 +40,10 @@ "已通过%1$s连接" "可通过%1$s连接" "已连接,但无法访问互联网" + + + + "接入点暂时满载" "已通过%1$s连接" "可通过%1$s连接" @@ -63,6 +67,12 @@ "已连接(无手机信号),电量为 %1$s %2$s" "已连接(无媒体信号),电量为 %1$s %2$s" "已连接(无手机或媒体信号),电量为 %1$s %2$s" + + + + + + "媒体音频" "通话" "文件传输" @@ -109,6 +119,14 @@ "耳机" "外围输入设备" "蓝牙" + + + + + + + + "WLAN 已关闭。" "WLAN 连接已断开。" "WLAN 信号强度为一格。" @@ -188,7 +206,8 @@ "不锁定屏幕" "充电时屏幕不会休眠" "启用蓝牙 HCI 信息收集日志" - "捕获单个文件中的所有蓝牙 HCI 包" + + "OEM 解锁" "允许解锁引导加载程序" "要允许 OEM 解锁吗?" @@ -207,15 +226,20 @@ "蓝牙 AVRCP 版本" "选择蓝牙 AVRCP 版本" "蓝牙音频编解码器" - "选择蓝牙音频编解码器" + + "蓝牙音频采样率" - "选择蓝牙音频编解码器:\n采样率" + + "蓝牙音频每样本位数" - "选择蓝牙音频编解码器:\n每样本位数" + + "蓝牙音频声道模式" - "选择蓝牙音频编解码器:\n声道模式" + + "蓝牙音频 LDAC 编解码器:播放质量" - "选择蓝牙音频 LDAC 编解码器:\n播放质量" + + "正在流式传输:%1$s" "私人 DNS" "选择私人 DNS 模式" @@ -223,9 +247,15 @@ "自动" "私人 DNS 提供商主机名" "输入 DNS 提供商的主机名" + + "显示无线显示认证选项" "提升WLAN日志记录级别(在WLAN选择器中显示每个SSID的RSSI)" "连接到 WLAN 网络时随机选择 MAC 地址" + + + + "日志记录器缓冲区大小" "选择每个日志缓冲区的日志记录器大小" "要清除永久存储的日志记录器数据吗?" @@ -360,14 +390,10 @@ "根据您的使用情况,大约还可使用 %1$s" "根据您的使用情况,剩余时间大约还有 %1$s (%2$s)" "还可用 %1$s" - - - - - - - - + "根据您的使用情况,目前电量为 %2$s,估计还能使用大约 %1$s" + "根据您的使用情况,电量估计还能使用大约 %1$s" + "目前电量为 %2$s,估计还能使用大约 %1$s" + "估计还能使用大约 %1$s" "剩余电池续航时间不到 %1$s" "电量剩余使用时间不到 %1$s (%2$s)" "电量剩余使用时间超过 %1$s (%2$s)" @@ -422,8 +448,7 @@ "已注册" "未注册" "无法获取" - - + "MAC 已随机化" 已连接 %1$d 个设备 已连接 %1$d 个设备 @@ -443,6 +468,5 @@ "时间:%1$s" "持续时间" "每次都询问" - - + "刚刚" diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml index daf83a9002c4a82c4ddb71a5c264b515383b3009..887959d74561efea46be761bf7dfb0736af9e879 100644 --- a/packages/SettingsLib/res/values-zh-rHK/strings.xml +++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml @@ -40,6 +40,8 @@ "已透過 %1$s 連線" "可透過 %1$s 連線" "已連線,但沒有互聯網" + "沒有網際網路連線" + "必須登入" "存取點暫時已滿" "已透過 %1$s 連線" "可透過 %1$s 連線" @@ -63,6 +65,9 @@ "已連接 (無手機音訊),電量為 %1$s%2$s" "已連接 (無媒體音訊),電量為 %1$s%2$s" "已連接 (無手機或媒體音訊),電量為 %1$s%2$s" + "使用中,電量:%1$s" + "電量:%1$s" + "使用中" "媒體音效" "通話" "檔案傳輸" @@ -109,6 +114,10 @@ "耳機" "輸入周邊設備" "藍牙" + "正在配對左側助聽器…" + "正在配對右側助聽器…" + "左側 - 電量:%1$s" + "右側 - 電量:%1$s" "Wi-Fi 已關閉。" "Wi-Fi 連線已中斷。" "Wi-Fi 訊號一格。" @@ -188,7 +197,7 @@ "保持啟用" "充電時螢幕永不休眠" "啟用藍牙 HCI 窺探記錄" - "擷取單一檔案內的所有藍牙 HCI 封包" + "擷取單一檔案內的所有藍牙 HCI 封包 (變更此設定後必須切換藍牙)" "原始設備製造商 (OEM) 解鎖" "允許 Bootloader 被解鎖" "允許原始設備製造商 (OEM) 解鎖嗎?" @@ -207,15 +216,20 @@ "藍牙 AVRCP 版本" "選擇藍牙 AVRCP 版本" "藍牙音訊編解碼器" - "選擇藍牙音訊編解碼器" + + "藍牙音訊取樣率" - "選擇藍牙音訊編解碼器:\n取樣率" + + "藍牙音訊每個樣本位元數" - "選擇藍牙音訊編解碼器:\n每個樣本位元數" + + "藍牙音訊聲道模式" - "選擇藍牙音訊編解碼器:\n聲道模式" + + "藍牙音訊 LDAC 編解碼器:播放品質" - "選擇藍牙音訊 LDAC 編解碼器:\n播放品質" + + "正在串流:%1$s" "不公開的網域名稱系統 (DNS)" "選取不公開的網域名稱系統 (DNS) 模式" @@ -223,9 +237,12 @@ "自動" "不公開的網域名稱系統 (DNS) 供應商主機名稱" "輸入網域名稱系統 (DNS) 供應商的主機名稱" + "無法連線" "顯示無線螢幕分享認證的選項" "讓 Wi‑Fi 記錄功能升級,在 Wi‑Fi 選擇器中依每個 SSID RSSI 顯示 Wi‑Fi 詳細紀錄" "連線至 Wi‑Fi 網絡時隨機產生 MAC 位址" + "計量付費" + "非計量付費" "記錄器緩衝區空間" "選取每個記錄緩衝區的記錄器空間" "要清除記錄器的持久儲存空間嗎?" @@ -360,14 +377,10 @@ "根據您的使用情況,剩餘約 %1$s" "根據您的使用情況,還有大約 %1$s (%2$s)" "尚餘 %1$s" - - - - - - - - + "根據您的使用情況 (%2$s),電量剩餘約 %1$s" + "根據您的使用情況,電量剩餘約 %1$s" + "電量剩餘約 %1$s (%2$s)" + "電量剩餘約 %1$s" "剩餘電量時間少於 %1$s" "還有少於 %1$s (%2$s)" "還有超過 %1$s (%2$s)" @@ -422,8 +435,7 @@ "已註冊" "未註冊" "無法使用" - - + "MAC 位址已隨機產生" %1$d 部已連線的裝置 %1$d 部已連線的裝置 @@ -443,6 +455,5 @@ "時間:%1$s" "長度" "每次都詢問" - - + "剛剛" diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml index 7b90e7343cbdb9b6ec910ab657e82d88c8681333..f679833d66744d3a0c3fea5fe0e3ed9cd97f8b44 100644 --- a/packages/SettingsLib/res/values-zh-rTW/strings.xml +++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml @@ -40,6 +40,8 @@ "已透過 %1$s 連線" "可透過 %1$s 使用" "已連線,沒有網際網路" + "沒有網際網路連線" + "必須登入" "存取點暫時滿載" "已透過 %1$s 連線" "可透過 %1$s 使用" @@ -63,6 +65,9 @@ "已連線 (無手機音訊),電量為 %1$s%2$s" "已連線 (無媒體音訊),電量為 %1$s%2$s" "已連線 (無手機或媒體音訊),電量為 %1$s%2$s" + "使用中,電量:%1$s" + "電量:%1$s" + "使用中" "媒體音訊" "通話" "檔案傳輸" @@ -109,6 +114,10 @@ "頭戴式耳機" "周邊輸入裝置" "藍牙" + "正在配對左側助聽器…" + "正在配對右側助聽器…" + "左側 - 電量:%1$s" + "右側 - 電量:%1$s" "已關閉 Wi-Fi。" "Wi-Fi 連線已中斷。" "Wi-Fi 訊號強度一格。" @@ -188,7 +197,7 @@ "螢幕不休眠" "充電時螢幕不會進入休眠" "啟用藍牙 HCI 窺探紀錄" - "擷取單一檔案內的所有藍牙 HCI 封包" + "擷取單一檔案內的所有藍牙 HCI 封包 (變更這項設定後必須切換藍牙)" "OEM 解鎖" "允許解除鎖定開機載入器" "要允許 OEM 解鎖嗎?" @@ -207,15 +216,20 @@ "藍牙 AVRCP 版本" "選取藍牙 AVRCP 版本" "藍牙音訊轉碼器" - "選取藍牙音訊轉碼器" + + "藍牙音訊取樣率" - "選取藍牙音訊轉碼器:\n取樣率" + + "藍牙音訊每單位樣本位元數" - "選取藍牙音訊轉碼器:\n每單位樣本位元數" + + "藍牙音訊聲道模式" - "選取藍牙音訊轉碼器:\n聲道模式" + + "藍牙音訊 LDAC 轉碼器:播放品質" - "選取藍牙音訊 LDAC 轉碼器:\n播放品質" + + "串流中:%1$s" "私人 DNS" "選取私人 DNS 模式" @@ -223,9 +237,12 @@ "自動" "私人 DNS 供應商主機名稱" "輸入 DNS 供應商的主機名稱" + "無法連線" "顯示無線螢幕分享認證的選項" "讓 Wi‑Fi 記錄功能升級,在 Wi‑Fi 選擇器中依每個 SSID RSSI 顯示 Wi‑Fi 詳細紀錄" "連線至 Wi‑Fi 網路時隨機化 MAC 位址" + "計量付費" + "非計量付費" "紀錄器緩衝區空間" "選取每個紀錄緩衝區的紀錄器空間" "要清除永久儲存的記錄器資料嗎?" @@ -360,14 +377,10 @@ "根據你的使用情形,剩餘時間大約還有 %1$s" "根據你的使用情形,目前電量為 %2$s,還能持續使用 %1$s" "還剩 %1$s" - - - - - - - - + "根據你的使用情形,目前電量為 %2$s,預估可持續使用到%1$s" + "根據你的使用情形,預估可持續使用到%1$s" + "目前電量 %2$s,預估還能持續使用到%1$s" + "預估還能持續使用到%1$s" "電池可用時間不到 %1$s" "電池可用時間不到 %1$s (%2$s)" "電池可用時間超過 %1$s (%2$s)" @@ -422,8 +435,7 @@ "已註冊" "未註冊" "無法取得" - - + "MAC 位址已隨機化" %1$d 個已連線的裝置 %1$d 個已連線的裝置 @@ -443,6 +455,5 @@ "時間:%1$s" "時間長度" "每次都詢問" - - + "剛剛" diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml index 24bf7bb821dcf2f234d8e75d0dccceac69ee7251..e3fa0a80e16f866bfe7405c275fe3304752235e4 100644 --- a/packages/SettingsLib/res/values-zu/strings.xml +++ b/packages/SettingsLib/res/values-zu/strings.xml @@ -40,6 +40,8 @@ "Kuxhumeke nge-%1$s" "Iyatholakala nge-%1$s" "Kuxhunyiwe, ayikho i-inthanethi" + "Ayikho i-inthanethi" + "Ukungena ngemvume kuyadingeka" "Iphoyinti lokufinyelela ligcwele okwesikhashana" "Kuxhumeke nge-%1$s" "Iyatholakala nge-%1$s" @@ -63,6 +65,9 @@ "Ixhunyiwe (ayikho ifoni), ibhethri ngu-%1$s%2$s" "Ixhunyiwe (ayikho imidiya), ibhethri iku-%1$s%2$s" "Ixhunyiwe (ayikho ifoni noma imidiya), ibhethri ngu-%1$s%2$s" + "Kuyasebenza, %1$s ibhethri" + "%1$s ibhethri" + "Iyasebenza" "Umsindo wemidiya" "Amakholi efoni" "Dlulisa ifayela" @@ -109,6 +114,10 @@ "Amahedfoni" "Okokufaka okulawulwa yikhompuyutha" "I-Bluetooth" + "Ibhanqa insiza yokuzwa engakwesokunxele…" + "Ibhanqa insiza yokuzwa…" + "Kwesokunxele - %1$s ibhethri" + "Kwesokudla - %1$s ibhethri" "I-Wifi ivaliwe." "I-Wifi inqanyuliwe." "Ibha elilodwa le-Wifi." @@ -188,7 +197,7 @@ "Hlala uphapheme" "Isikrini asisoze salala ngenkathi sishaja" "Nika amandla i-Bluetooth HCI yelogu lokuhlola" - "Shutha wonke amaphakethe we-bluetooth HCI kufayela" + "Thwebula onke amaphakethe e-Bluetooth HCI kwifayela (Shintsha i-Bluetooth ngemuva kokushintsha lesi silungiselelo)" "Ukuvula i-OEM" "Vumela ukuthi i-bootloader ivulwe" "Vumela ukuvula i-OEM?" @@ -207,15 +216,20 @@ "Inguqulo ye-Bluetooth ye-AVRCP" "Khetha inguqulo ye-Bluetooth AVRCP" "I-Bluetooth Audio Codec" - "Khetha i-Bluetooth Audio Codec" + + "Isilinganiso sesampula yomsindo we-Bluetooth" - "Khetha i-Bluetooth Audio Codec:\nIsilinganiso sesampula" + + "Ama-Bits omsindo we-Bluetooth ngesampula ngayinye" - "Khetha i-Bluetooth Audio Codec:\nBits ngesampuli" + + "Imodi yesiteshi somsindo we-Bluetooth" - "Khetha i-Bluetooth Audio Codec:\nImodi yesiteshi" + + "I-Bluetooth Audio LDAC Codec: Ikhwalithi yokudlala" - "Khetha i-Bluetooth Audio LDAC Codec:\nIkhwalithi yokudlala" + + "Ukusakaza: %1$s" "I-DNS eyimfihlo" "Khetha imodi ye-DNS eyimfihlo" @@ -223,9 +237,12 @@ "Okuzenzekelayo" "Igama lomsingathi womhlinzeki we-DNS" "Faka igama lomsingathi womhlinzeki we-DNS" + "Ayikwazanga ukuxhuma" "Bonisa izinketho zokunikeza isitifiketi ukubukeka okungenantambo" "khuphula izinga lokungena le-Wi-Fi, bonisa nge-SSID RSSI engayodwana kusikhethi se-Wi-Fi" "Ungahleli ikheli le-MAC uma kuxhumeke kumanethiwekhi e-Wi-Fi" + "Kulinganisiwe" + "Akulinganiselwa" "Amasayizi weloga ngebhafa" "Khetha amasayizi weloga ngebhafa ngayinye yelogu" "Sula isitoreji seloga eqhubekayo?" @@ -360,14 +377,10 @@ "Cishe kusele okungu-%1$s kusukela ekusetshenzisweni kwakho" "Cishe u-%1$s osele ngokuya ngokusebenzisa kwakho (%2$s)" "%1$s esisele" - - - - - - - - + "Kumele ihlale cishe kube ngu-%1$s kusukela ekusetshenzisweni kwakho (%2$s)" + "Kumele ihlale cishe kube ngu-%1$s kusukela ekusetshenzisweni kwakho" + "Kumele ihlale cishe kube ngu-%1$s (%2$s)" + "Kumele ihlale cishe kube ngu-%1$s" "Kusele okungaphansi kunokungu-%1$s" "Ngaphansi kuka-%1$s osele (%2$s)" "Ngaphezu kuka-%1$s osele (%2$s)" @@ -422,8 +435,7 @@ "Kubhalisiwe" "Akubhalisiwe" "Ayitholakali" - - + "I-MAC ayihleliwe" %1$d amadivayisi axhunyiwe %1$d amadivayisi axhunyiwe @@ -443,6 +455,5 @@ "nge-%1$s" "Ubude besikhathi" "Buza njalo" - - + "Khona manje" diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml index 82bc6af870f03fc6ac052e0d1a068b3bb7899420..6368607d7bdd9c1f13bcd73d4b1d80ed9037b765 100644 --- a/packages/SettingsLib/res/values/strings.xml +++ b/packages/SettingsLib/res/values/strings.xml @@ -543,30 +543,30 @@ Select Bluetooth AVRCP Version - + Bluetooth Audio Codec - - Select Bluetooth Audio Codec + + Trigger Bluetooth Audio Codec\u000ASelection - + Bluetooth Audio Sample Rate - - Select Bluetooth Audio Codec:\u000ASample Rate + + Trigger Bluetooth Audio Codec\u000ASelection: Sample Rate - + Bluetooth Audio Bits Per Sample - - Select Bluetooth Audio Codec:\u000ABits Per Sample + + Trigger Bluetooth Audio Codec\u000ASelection: Bits Per Sample - + Bluetooth Audio Channel Mode - - Select Bluetooth Audio Codec:\u000AChannel Mode + + Trigger Bluetooth Audio Codec\u000ASelection: Channel Mode - + Bluetooth Audio LDAC Codec: Playback Quality - Select Bluetooth Audio LDAC Codec:\u000APlayback Quality + Trigger Bluetooth Audio LDAC Codec\u000ASelection: Playback Quality Streaming: %1$s diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothCallback.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothCallback.java index ac3599cae05b2bb1bc4272afcc3449253ab72263..4a6df5051679aa1b5ce65af8072979438f558990 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothCallback.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/BluetoothCallback.java @@ -29,4 +29,5 @@ public interface BluetoothCallback { void onDeviceBondStateChanged(CachedBluetoothDevice cachedDevice, int bondState); void onConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state); void onActiveDeviceChanged(CachedBluetoothDevice activeDevice, int bluetoothProfile); + void onProfileAudioStateChanged(int bluetoothProfile, int state); } diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java index ee1219126fe35af90be2ea3de84e83555b4adc58..f9f80eb0d3c4450d0c4ec244f3a2e57c205f7f1b 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HeadsetProfile.java @@ -163,6 +163,11 @@ public class HeadsetProfile implements LocalBluetoothProfile { return mService.getActiveDevice(); } + public boolean isAudioOn() { + if (mService == null) return false; + return mService.isAudioOn(); + } + public boolean isPreferred(BluetoothDevice device) { if (mService == null) return false; return mService.getPriority(device) > BluetoothProfile.PRIORITY_OFF; diff --git a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatterySaverUtils.java b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatterySaverUtils.java index 28833a34937220aba56a6cb6e3108fe68c09fd4f..835ff07c4006d75d40ee3abcbff355d2a8996c52 100644 --- a/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatterySaverUtils.java +++ b/packages/SettingsLib/src/com/android/settingslib/fuelgauge/BatterySaverUtils.java @@ -22,8 +22,9 @@ import android.content.Intent; import android.os.PowerManager; import android.provider.Settings.Global; import android.provider.Settings.Secure; -import android.support.annotation.VisibleForTesting; +import android.util.KeyValueListParser; import android.util.Log; +import android.util.Slog; /** * Utilities related to battery saver. @@ -48,13 +49,35 @@ public class BatterySaverUtils { public static final String ACTION_SHOW_AUTO_SAVER_SUGGESTION = "PNW.autoSaverSuggestion"; - /** - * We show the auto battery saver suggestion notification when the user manually enables - * battery saver for the START_NTH time through the END_NTH time. - * (We won't show it for END_NTH + 1 time and after.) - */ - private static final int AUTO_SAVER_SUGGESTION_START_NTH = 4; - private static final int AUTO_SAVER_SUGGESTION_END_NTH = 8; + private static class Parameters { + private final Context mContext; + + /** + * We show the auto battery saver suggestion notification when the user manually enables + * battery saver for the START_NTH time through the END_NTH time. + * (We won't show it for END_NTH + 1 time and after.) + */ + private static final int AUTO_SAVER_SUGGESTION_START_NTH = 4; + private static final int AUTO_SAVER_SUGGESTION_END_NTH = 8; + + public final int startNth; + public final int endNth; + + public Parameters(Context context) { + mContext = context; + + final String newValue = Global.getString(mContext.getContentResolver(), + Global.LOW_POWER_MODE_SUGGESTION_PARAMS); + final KeyValueListParser parser = new KeyValueListParser(','); + try { + parser.setString(newValue); + } catch (IllegalArgumentException e) { + Slog.wtf(TAG, "Bad constants: " + newValue); + } + startNth = parser.getInt("start_nth", AUTO_SAVER_SUGGESTION_START_NTH); + endNth = parser.getInt("end_nth", AUTO_SAVER_SUGGESTION_END_NTH); + } + } /** * Enable / disable battery saver by user request. @@ -85,8 +108,10 @@ public class BatterySaverUtils { Secure.getInt(cr, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, 0) + 1; Secure.putInt(cr, Secure.LOW_POWER_MANUAL_ACTIVATION_COUNT, count); - if ((count >= AUTO_SAVER_SUGGESTION_START_NTH) - && (count <= AUTO_SAVER_SUGGESTION_END_NTH) + final Parameters parameters = new Parameters(context); + + if ((count >= parameters.startNth) + && (count <= parameters.endNth) && Global.getInt(cr, Global.LOW_POWER_MODE_TRIGGER_LEVEL, 0) == 0 && Secure.getInt(cr, Secure.SUPPRESS_AUTO_BATTERY_SAVER_SUGGESTION, 0) == 0) { diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java index 4cd23f9eac38d9f189ccb2ec101710499140bc77..9347674ff0eeac6fc687934be31525d830e48ece 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiStatusTracker.java @@ -50,7 +50,9 @@ public class WifiStatusTracker extends ConnectivityManager.NetworkCallback { } }; private final NetworkRequest mNetworkRequest = new NetworkRequest.Builder() - .clearCapabilities().addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(); + .clearCapabilities() + .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN) + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI).build(); private final ConnectivityManager.NetworkCallback mNetworkCallback = new ConnectivityManager .NetworkCallback() { @Override diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java index 8f80527036ec7dd7c87c3cc611822e51f3196b06..a128b542d84e2b454f899af17020faf029974712 100644 --- a/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java +++ b/packages/SettingsLib/src/com/android/settingslib/wifi/WifiTracker.java @@ -213,6 +213,7 @@ public class WifiTracker implements LifecycleObserver, OnStart, OnStop, OnDestro mNetworkRequest = new NetworkRequest.Builder() .clearCapabilities() + .addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN) .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .build(); diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HeadsetProfileTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HeadsetProfileTest.java new file mode 100644 index 0000000000000000000000000000000000000000..117f4472825cf7e362998f6a1f66e5fbaae13ec4 --- /dev/null +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/bluetooth/HeadsetProfileTest.java @@ -0,0 +1,60 @@ +package com.android.settingslib.bluetooth; + +import static com.google.common.truth.Truth.assertThat; + +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import android.bluetooth.BluetoothHeadset; +import android.bluetooth.BluetoothProfile; +import android.content.Context; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; + +@RunWith(RobolectricTestRunner.class) +public class HeadsetProfileTest { + + @Mock + private LocalBluetoothAdapter mAdapter; + @Mock + private CachedBluetoothDeviceManager mDeviceManager; + @Mock + private LocalBluetoothProfileManager mProfileManager; + @Mock + private BluetoothHeadset mService; + + private BluetoothProfile.ServiceListener mServiceListener; + private HeadsetProfile mProfile; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + Context context = spy(RuntimeEnvironment.application); + + doAnswer((invocation) -> { + mServiceListener = (BluetoothProfile.ServiceListener) invocation.getArguments()[1]; + return null; + }).when(mAdapter).getProfileProxy(any(Context.class), any(), eq(BluetoothProfile.HEADSET)); + + mProfile = new HeadsetProfile(context, mAdapter, mDeviceManager, mProfileManager); + mServiceListener.onServiceConnected(BluetoothProfile.HEADSET, mService); + } + + @Test + public void bluetoothProfile_shouldReturnTheAudioStatusFromBlueToothHeadsetService() { + when(mService.isAudioOn()).thenReturn(true); + assertThat(mProfile.isAudioOn()).isTrue(); + + when(mService.isAudioOn()).thenReturn(false); + assertThat(mProfile.isAudioOn()).isFalse(); + } +} diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java index a444ac8090d622d9ee8a2fc00bcb997b28dbe16f..f43e719d47a393b4b198cae8d49f22087aa9e2d8 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProtoDumpUtil.java @@ -1724,6 +1724,9 @@ class SettingsProtoDumpUtil { dumpSetting(s, p, Settings.Secure.BACKUP_LOCAL_TRANSPORT_PARAMETERS, SecureSettingsProto.Backup.LOCAL_TRANSPORT_PARAMETERS); + dumpSetting(s, p, + Settings.Secure.PACKAGES_TO_CLEAR_DATA_BEFORE_FULL_RESTORE, + SecureSettingsProto.Backup.PACKAGES_TO_CLEAR_DATA_BEFORE_FULL_RESTORE); p.end(backupToken); // Settings.Secure.BLUETOOTH_ON intentionally excluded since it's deprecated. diff --git a/packages/Shell/res/values-as/strings.xml b/packages/Shell/res/values-as/strings.xml index de6f78c6db364d09e9c68c95f46b0842896b715f..0e59223857c38ae2c53124fa3c11d332c84dc1cf 100644 --- a/packages/Shell/res/values-as/strings.xml +++ b/packages/Shell/res/values-as/strings.xml @@ -30,8 +30,7 @@ "স্ক্ৰীণশ্বট নোলোৱাকৈ বাগ সম্পর্কীয় অভিযোগ শ্বেয়াৰ কৰিবলৈ ইয়াত টিপক বা স্ক্ৰীণশ্বট সম্পূৰ্ণ হোৱালৈ অপেক্ষা কৰক" "বাগ সম্পর্কীয় অভিযোগত ছিষ্টেমৰ বিভিন্ন লগ ফাইল থাকে, ইয়াৰ ভিতৰত আপুনি স্পর্শকাতৰ বুলি গণ্য কৰা ডেটা (যেনে এপৰ ব্য়ৱহাৰ আৰু অৱস্থান সম্পৰ্কীয় তথ্য়) অন্তর্ভুক্ত হ\'ব পাৰে। কেৱল আপোনাৰ বিশ্বাসী লোক বা এপৰ সৈতেহে বাগ সম্পর্কীয় অভিযোগ শ্বেয়াৰ কৰিব।" "পুনৰাই নেদেখুৱাব" - - + "বাগ সম্পর্কীয় প্ৰতিবেদনসমূহ" "বাগ সম্পর্কীয় অভিযোগৰ ফাইলটো পঢ়িব পৰা নগ\'ল" "বাগ সম্পর্কীয় অভিযোগৰ বিৱৰণ জিপ ফাইলত যোগ কৰিব পৰা নগ\'ল" "নামবিহীন" diff --git a/packages/Shell/res/values-or/strings.xml b/packages/Shell/res/values-or/strings.xml index 30aeb9c6653889aa7b5ec72858f55b54f8a92641..438b71568475829d460d86b88922d6f0b4c9862e 100644 --- a/packages/Shell/res/values-or/strings.xml +++ b/packages/Shell/res/values-or/strings.xml @@ -17,46 +17,31 @@ "ଶେଲ୍‍" - - - - - - + "ବଗ୍ ରିପୋର୍ଟ" + "ବଗ୍‍ ରିପୋର୍ଟ #%d ତିଆରି କରାଯାଉଛି" + "ବଗ୍‍ ରିପୋର୍ଟ #%d କ୍ୟାପଚର୍‍ କରାଗଲା" "ବଗ୍‍ ରିପୋର୍ଟରେ ବିବରଣୀ ଯୋଡ଼ାଯାଉଛି" "ଦୟାକରି ଅପେକ୍ଷା କରନ୍ତୁ…" "ଅଳ୍ପ ସମୟ ମଧ୍ୟରେ ଫୋନ୍‌ରେ ବଗ୍‍ ରିପୋର୍ଟ ଦେଖାଯିବ" - - - - - - - - - - - - - - + "ଆପଣଙ୍କ ବଗ୍‍ ରିପୋର୍ଟ ଶେୟାର୍‍ କରିବାକୁ ଚୟନ କରନ୍ତୁ" + "ଆପଣଙ୍କ ବଗ୍‍ ରିପୋର୍ଟ ଶେୟାର୍‍ କରିବା ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ" + "ଗୋଟିଏ ସ୍କ୍ରୀନଶଟ୍‍ ସହିତ ଆପଣଙ୍କ ବଗ୍‍ ରିପୋର୍ଟ ଶେୟାର୍‍ କରିବାକୁ ଚୟନ କରନ୍ତୁ କିମ୍ବା ସ୍କ୍ରୀନଶଟ୍‍ ସମାପ୍ତ ହେବାକୁ ଅପେକ୍ଷା କରନ୍ତୁ" + "ସ୍କ୍ରୀନଶଟ୍‍ ବିନା ଆପଣଙ୍କ ବଗ୍‍ ରିପୋର୍ଟ ଶେୟାର୍‍ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ କିମ୍ବା ସ୍କ୍ରୀନଶଟ୍‍ ସମାପ୍ତ ହେବା ପାଇଁ ଅପେକ୍ଷା କରନ୍ତୁ" + "ସ୍କ୍ରୀନଶଟ୍‍ ବିନା ଆପଣଙ୍କ ବଗ୍‍ ରିପୋର୍ଟ ଶେୟାର୍‍ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ କିମ୍ବା ସ୍କ୍ରୀନଶଟ୍‍ ସମାପ୍ତ ହେବା ପାଇଁ ଅପେକ୍ଷା କରନ୍ତୁ" + "ବଗ୍‍ ରିପୋର୍ଟରେ ସିଷ୍ଟମର ବିଭିନ୍ନ ଲଗ୍‍ ଫାଇଲ୍‌ରୁ ଆସିଥିବା ଡାଟା ରହିଛି, ଯେଉଁଥିରେ ଆପଣଙ୍କ ସମ୍ବେଦନଶୀଳ ଡାଟା (ଯେପରିକି ଆପ୍‌-ବ୍ୟବହାର ଓ ଲୋକେଶନ୍‍ ଡାଟା) ରହିଥାଇପାରେ। ଆପଣ ବିଶ୍ୱାସ କରୁଥିବା ଲୋକ ତଥା ଆପ୍‍ ସହ ଏପରି ବଗ୍‍ ରିପୋର୍ଟ ଶେୟାର୍‍ କରନ୍ତୁ।" + "ପୁଣି ଦେଖାନ୍ତୁ ନାହିଁ" "ବଗ୍ ରିପୋର୍ଟ" "ବଗ୍‍ ରିପୋର୍ଟ ଫାଇଲ୍‍ ପଢ଼ାଯାଇପାରିଲା ନାହିଁ" "ଜିପ୍‍ ଫାଇଲରେ ବଗ୍‍ ରିପୋର୍ଟ ବିବରଣୀ ଯୋଡ଼ାଯାଇପାରିଲା ନାହିଁ" "ବେନାମୀ" "ବିବରଣୀ" "ସ୍କ୍ରୀନ୍‌ଶଟ୍‌" - - + "ସଫଳତାପୂର୍ବକ ସ୍କ୍ରୀନଶଟ୍‍ ନିଆଗଲା" "ସ୍କ୍ରୀନ୍‍ଶଟ୍‍ ନିଆଯାଇପାରିଲା ନାହିଁ।" - - + "ବଗ୍‍ ରିପୋର୍ଟ #%dର ବିବରଣୀ" "ଫାଇଲ୍ ନାମ" - - - - - - + "ବଗ୍‍ର ନାମ" + "ବଗ୍‍ର ସଂକ୍ଷିପ୍ତ ବିବରଣୀ" + "ସେଭ୍‌ କରନ୍ତୁ" "ବଗ୍‍ ରିପୋର୍ଟ ଶେୟାର୍‍ କରନ୍ତୁ" diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/VolumeDialogController.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/VolumeDialogController.java index c8bcdaac1d4ad2ddfec20503638a4620d3e2b89e..5f4cf033a45a8d4afa32855ddcb4c757d80dc2cb 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/VolumeDialogController.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/VolumeDialogController.java @@ -19,6 +19,7 @@ import android.content.ComponentName; import android.media.AudioManager; import android.media.AudioSystem; import android.os.Handler; +import android.os.VibrationEffect; import android.util.SparseArray; import com.android.systemui.plugins.VolumeDialogController.Callbacks; @@ -44,7 +45,8 @@ public interface VolumeDialogController { void setRingerMode(int ringerModeNormal, boolean external); boolean hasVibrator(); - void vibrate(); + void vibrate(VibrationEffect effect); + void scheduleTouchFeedback(); AudioManager getAudioManager(); diff --git a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTileView.java b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTileView.java index 53f7e44bc25a23df4794074f8601666e5a742f24..ad300f43d88d151ca0783f7006dd1449c03e861e 100644 --- a/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTileView.java +++ b/packages/SystemUI/plugin/src/com/android/systemui/plugins/qs/QSTileView.java @@ -50,4 +50,6 @@ public abstract class QSTileView extends LinearLayout { public abstract void onStateChanged(State state); public abstract int getDetailY(); + + public void setExpansion(float expansion) {} } diff --git a/packages/SystemUI/res-keyguard/values-am/strings.xml b/packages/SystemUI/res-keyguard/values-am/strings.xml index c466a0e309087b46134f04d8fb23ae2590a2a019..149d2543f5d32d0806996a57d8998ea734f67fc1 100644 --- a/packages/SystemUI/res-keyguard/values-am/strings.xml +++ b/packages/SystemUI/res-keyguard/values-am/strings.xml @@ -28,6 +28,9 @@ "የይለፍ ቃል ለመተየብ ይንኩ" "ለመክፈት የይለፍ ቃል ይተይቡ" "ለመክፈት ፒን ይተይቡ" + "የእርስዎን ፒን ያስገቡ" + "ስርዓተ-ጥለትዎን ያስገቡ" + "ይለፍ ቃልዎን ያስገቡ" "ትክክል ያልሆነ ፒን ኮድ።" "ልክ ያልሆነ ካርድ።" "ባትሪ ሞልቷል" diff --git a/packages/SystemUI/res-keyguard/values-ar/strings.xml b/packages/SystemUI/res-keyguard/values-ar/strings.xml index d2ecb34e7f3770866cbc4741aa0926e3d9d1bc48..a1ba5a43328e91359f6588d8603dbc0f212d4afe 100644 --- a/packages/SystemUI/res-keyguard/values-ar/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ar/strings.xml @@ -28,6 +28,9 @@ "المس لكتابة كلمة المرور" "اكتب كلمة المرور لإلغاء التأمين" "اكتب رمز رقم التعريف الشخصي لإلغاء التأمين" + "‏أدخل رقم التعريف الشخصي (PIN)" + "أدخل النقش" + "أدخل كلمة المرور" "رمز رقم التعريف الشخصي غير صحيح." "بطاقة غير صالحة." "تم الشحن" diff --git a/packages/SystemUI/res-keyguard/values-as/strings.xml b/packages/SystemUI/res-keyguard/values-as/strings.xml index 40e2a30687767eb2d12342786f90b91ed15e2b7c..c901402646cfca9f5c2785bc86aef9003417bf3e 100644 --- a/packages/SystemUI/res-keyguard/values-as/strings.xml +++ b/packages/SystemUI/res-keyguard/values-as/strings.xml @@ -28,15 +28,15 @@ "পাছৱৰ্ড লিখিবলৈ স্পৰ্শ কৰক" "আনলক কৰিবলৈ পাছৱৰ্ড লিখক" "আনলক কৰিবলৈ পিন লিখক" + "আপোনাৰ পিন দিয়ক" + "আপোনাৰ আৰ্হি দিয়ক" + "আপোনাৰ পাছৱৰ্ড দিয়ক" "ভুল পিন ক\'ড।" "ব্যৱহাৰৰ অযোগ্য ছিম কাৰ্ড" "চ্চার্জ কৰা হ\'ল" - - - - - - + "%s • চ্চার্জ কৰি থকা হৈছে" + "%s • দ্ৰুত গতিৰে চ্চাৰ্জ কৰি থকা হৈছে" + "%s • লাহে লাহে চ্চাৰ্জ কৰি থকা হৈছে" "আপোনাৰ চ্চার্জাৰ সংযোগ কৰক।" "আনলক কৰিবলৈ মেনু টিপক।" "নেটৱর্ক লক কৰা অৱস্থাত আছে" @@ -56,10 +56,8 @@ "পৰৱৰ্তী এলাৰ্ম %1$s বজাত ছেট কৰা হৈছে" "মচক" "ই-ছিম অক্ষম কৰক" - - - - + "ই-ছিম অক্ষম কৰিব পৰা নাযায়" + "এটা আসোঁৱাহৰ কাৰণে ই-ছিম অক্ষম কৰিব পৰা নাযায়।" "এণ্টাৰ বুটাম" "আৰ্হি পাহৰিলে নেকি" "ভুল আৰ্হি" @@ -72,8 +70,7 @@ "আপোনাৰ আৰ্হি আঁকক" "ছিমৰ পিন দিয়ক।" "\"%1$s\"ৰ ছিমৰ পিন দিয়ক।" - - + "%1$s ম\'বাইল সেৱা অবিহনে ডিভাইচ ব্যৱহাৰ কৰিবলৈ ই-ছিম অক্ষম কৰক।" "পিন দিয়ক" "পাছৱৰ্ড দিয়ক" "ছিমখন বর্তমান অক্ষম অৱস্থাত আছে। অব্যাহত ৰাখিবলৈ PUK ক\'ড লিখক। সবিশেষ জানিবলৈ বাহকৰ সৈতে যোগাযোগ কৰক।" diff --git a/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml b/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml index 59b4b534ec89cbe114a2c6fa8daee16500367035..1f1be13a9baed8cfd51040d223b56785142dc896 100644 --- a/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-b+sr+Latn/strings.xml @@ -28,6 +28,9 @@ "Dodirnite za unos lozinke" "Unesite lozinku da biste otključali" "Unesite PIN za otključavanje" + "Unesite PIN" + "Unesite šablon" + "Unesite lozinku" "PIN kôd je netačan." "Nevažeća kartica." "Napunjena je" diff --git a/packages/SystemUI/res-keyguard/values-be/strings.xml b/packages/SystemUI/res-keyguard/values-be/strings.xml index aa92e3ddd2a46dc538ed437f8ed9462cf45212d2..8ab0cabc43a3f507f5006eab74541ac176ab4b5a 100644 --- a/packages/SystemUI/res-keyguard/values-be/strings.xml +++ b/packages/SystemUI/res-keyguard/values-be/strings.xml @@ -28,12 +28,9 @@ "Дакраніцеся, каб увесці пароль" "Увядзіце пароль для разблакіравання" "Каб разблакіраваць, увядзіце PIN-код" - - - - - - + "Увядзіце PIN-код" + "Увядзіце ўзор разблакіроўкі" + "Увядзіце пароль" "Няправільны PIN-код." "Несапраўдная картка." "Зараджаны" diff --git a/packages/SystemUI/res-keyguard/values-bn/strings.xml b/packages/SystemUI/res-keyguard/values-bn/strings.xml index 17e52d3a91d50bdc0786aeefad6e7b3c0ad30778..b270ef99201d3e95a03f13f37ec4d64191d4f2d3 100644 --- a/packages/SystemUI/res-keyguard/values-bn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-bn/strings.xml @@ -28,12 +28,9 @@ "পাসওয়ার্ড লিখতে স্পর্শ করুন" "আনলক করতে পাসওয়ার্ড লিখুন" "আনলক করতে পিন লিখুন" - - - - - - + "পিন লিখুন" + "প্যাটার্ন আঁকুন" + "পাসওয়ার্ড লিখুন" "ভুল পিন কোড দেওয়া হয়েছে।" "ভুল কার্ড।" "চার্জ হয়েছে" diff --git a/packages/SystemUI/res-keyguard/values-bs/strings.xml b/packages/SystemUI/res-keyguard/values-bs/strings.xml index c9574f2d50e015197c8d7a2153ad547b8fa88976..cf8bc5c97874bc910140c80a52398521b1bcd308 100644 --- a/packages/SystemUI/res-keyguard/values-bs/strings.xml +++ b/packages/SystemUI/res-keyguard/values-bs/strings.xml @@ -28,12 +28,9 @@ "Dodirnite da upišete lozinku" "Upišite lozinku za otključavanje" "Upišite PIN za otključavanje" - - - - - - + "Unesite svoj PIN" + "Unesite svoj uzorak" + "Unesite svoju lozinku" "Pogrešan PIN." "Nevažeća kartica." "Napunjeno" diff --git a/packages/SystemUI/res-keyguard/values-cs/strings.xml b/packages/SystemUI/res-keyguard/values-cs/strings.xml index d5f80cbd227a5392183aa2eae165e88b385a7d15..36f05f4f6570c68144e5604cc0a6c413c1c12afb 100644 --- a/packages/SystemUI/res-keyguard/values-cs/strings.xml +++ b/packages/SystemUI/res-keyguard/values-cs/strings.xml @@ -28,12 +28,15 @@ "Klepnutím zadáte heslo" "Zadejte heslo pro odemknutí" "Zadejte kód PIN pro odemknutí" + "Zadejte PIN" + "Zadejte gesto" + "Zadejte heslo" "Nesprávný kód PIN." "Neplatná karta." "Nabito" - "Nabíjení" - "Rychlé nabíjení" - "Pomalé nabíjení" + "%s • Nabíjení" + "%s • Rychlé nabíjení" + "%s • Pomalé nabíjení" "Připojte dobíjecí zařízení." "Klávesy odemknete stisknutím tlačítka nabídky." "Síť je blokována" diff --git a/packages/SystemUI/res-keyguard/values-da/strings.xml b/packages/SystemUI/res-keyguard/values-da/strings.xml index 7677aef89ce875eb23be4287f4d25dd24354e6c1..ac185d603aecbb764f15c99da4a3dda47ee62da1 100644 --- a/packages/SystemUI/res-keyguard/values-da/strings.xml +++ b/packages/SystemUI/res-keyguard/values-da/strings.xml @@ -28,12 +28,9 @@ "Tryk for at angive adgangskode" "Indtast adgangskoden for at låse op" "Indtast pinkoden for at låse op" - - - - - - + "Angiv din pinkode" + "Angiv dit mønster" + "Angiv din adgangskode" "Forkert pinkode." "Ugyldigt kort." "Opladet" diff --git a/packages/SystemUI/res-keyguard/values-de/strings.xml b/packages/SystemUI/res-keyguard/values-de/strings.xml index f26942123b977ce82368cd5e030a92968ae1131e..08897216d98edea43d4c1062d5af181f485d4422 100644 --- a/packages/SystemUI/res-keyguard/values-de/strings.xml +++ b/packages/SystemUI/res-keyguard/values-de/strings.xml @@ -28,12 +28,9 @@ "Zur Passworteingabe berühren" "Bitte gib das Passwort zum Entsperren ein" "Bitte gib die PIN zum Entsperren ein" - - - - - - + "Gib deine PIN ein" + "Gib dein Muster ein" + "Gib dein Passwort ein" "Falscher PIN-Code." "Ungültige Karte." "Aufgeladen" diff --git a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml index 28415ffb80faac885bd7bc6bc9a83b476e7707f4..3eb63d5bbfda1044a891c0842147c55b8ad49edc 100644 --- a/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml +++ b/packages/SystemUI/res-keyguard/values-es-rUS/strings.xml @@ -28,12 +28,9 @@ "Toca para ingresar contraseña" "Ingresa la contraseña para desbloquearlo" "Ingresa el PIN para desbloquearlo" - - - - - - + "Ingresa tu PIN" + "Ingresa tu patrón" + "Ingresa tu contraseña" "Código PIN incorrecto" "Tarjeta no válida" "Cargada" diff --git a/packages/SystemUI/res-keyguard/values-fa/strings.xml b/packages/SystemUI/res-keyguard/values-fa/strings.xml index 0cb3e0b031aefdeb6a2deb5ff66a74ec28c10e73..86fcf1fc697ea89ccaa2d95cd1858e2f0e4a70cf 100644 --- a/packages/SystemUI/res-keyguard/values-fa/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fa/strings.xml @@ -28,12 +28,15 @@ "برای تایپ گذرواژه لمس کنید" "برای بازکردن قفل، گذرواژه را وارد کنید" "برای بازکردن قفل، پین را تایپ کنید" + "پین را وارد کنید" + "الگویتان را وارد کنید" + "گذرواژه‌تان را وارد کنید" "کد پین اشتباه است." "کارت نامعتبر" "شارژ کامل شد" - "درحال شارژ شدن" - "شارژ سریع" - "شارژ آهسته" + "%s • درحال شارژ شدن" + "%s • درحال شارژ سریع" + "%s • درحال شارژ آهسته" "شارژر را وصل کنید." "برای باز کردن قفل روی «منو» فشار دهید." "شبکه قفل شد" diff --git a/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml b/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml index e0b14b9232fcf2abc827d3032a7e5cf985e74e3c..cff3ac22fa13decdbff284298cc83f57b0b12dde 100644 --- a/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fr-rCA/strings.xml @@ -28,12 +28,15 @@ "Touchez ici pour entrer le mot de passe" "Entrez le mot de passe pour déverrouiller le clavier." "Entrez le NIP pour déverrouiller le clavier." + "Entrez votre NIP" + "Entrez votre schéma" + "Entrez votre mot de passe" "NIP erroné." "Cette carte n\'est pas valide." "Chargé" - "Pile en cours de charge" - "Charge rapide" - "Charge lente" + "En recharge : %s" + "En recharge rapide : %s" + "En recharge lente : %s" "Branchez votre chargeur." "Appuyez sur la touche Menu pour déverrouiller l\'appareil." "Réseau verrouillé" diff --git a/packages/SystemUI/res-keyguard/values-fr/strings.xml b/packages/SystemUI/res-keyguard/values-fr/strings.xml index d76fdd559f61a073b7213310a1844087fe477f2f..4033c83d5fefefbc3504167f07750d43430431f2 100644 --- a/packages/SystemUI/res-keyguard/values-fr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-fr/strings.xml @@ -28,12 +28,9 @@ "Appuyez pour saisir mot passe" "Saisissez le mot de passe pour déverrouiller le clavier" "Saisissez le code pour déverrouiller le clavier" - - - - - - + "Saisissez le code d\'accès" + "Tracez le schéma" + "Saisissez le mot de passe" "Le code est incorrect." "Carte non valide." "Chargé" diff --git a/packages/SystemUI/res-keyguard/values-gu/strings.xml b/packages/SystemUI/res-keyguard/values-gu/strings.xml index 331a8ba1311dc3f43d6775e0fcd1ded14855db39..35b188d3f4b58d8bfdd0fe4a0ca4ef3013212e74 100644 --- a/packages/SystemUI/res-keyguard/values-gu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-gu/strings.xml @@ -28,12 +28,9 @@ "પાસવર્ડ લખવા માટે સ્પર્શ કરો" "અનલૉક કરવા માટે પાસવર્ડ લખો" "અનલૉક કરવા માટે પિન લખો" - - - - - - + "તમારો પિન દાખલ કરો" + "તમારી પૅટર્ન દાખલ કરો" + "તમારો પાસવર્ડ દાખલ કરો" "ખોટો પિન કોડ." "અમાન્ય કાર્ડ." "ચાર્જ થઈ ગયું" diff --git a/packages/SystemUI/res-keyguard/values-hi/strings.xml b/packages/SystemUI/res-keyguard/values-hi/strings.xml index a64eb17d30ffcfc56fd6bc66eabc9075f3c5092d..d680febddd857208afd4c1120233c438dae67c04 100644 --- a/packages/SystemUI/res-keyguard/values-hi/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hi/strings.xml @@ -28,12 +28,9 @@ "पासवर्ड लिखने के लिए छुएं" "अनलॉक करने के लिए पासवर्ड लिखें" "अनलॉक करने के लिए पिन लिखें" - - - - - - + "अपना पिन डालें" + "अपना पैटर्न डालें" + "अपना पासवर्ड डालें" "गलत पिन कोड." "गलत कार्ड." "चार्ज हो गई है" diff --git a/packages/SystemUI/res-keyguard/values-hr/strings.xml b/packages/SystemUI/res-keyguard/values-hr/strings.xml index 77cd1b5902b4dddcd8d75a86c77f81dce25ede36..913bbd22b162162248ceeca4afbf0c7731386f18 100644 --- a/packages/SystemUI/res-keyguard/values-hr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hr/strings.xml @@ -28,12 +28,9 @@ "Dodirnite za unos zaporke" "Unesite zaporku da biste otključali" "Unesite PIN da biste otključali" - - - - - - + "Unesite PIN" + "Unesite uzorak" + "Unesite zaporku" "PIN kôd nije točan." "Nevažeća kartica." "Napunjeno" diff --git a/packages/SystemUI/res-keyguard/values-hy/strings.xml b/packages/SystemUI/res-keyguard/values-hy/strings.xml index 64be74f01f3c3a23a8ea8cccabf57846e10988ca..3f0fa769b71faf2036a00c57379fec26bf2ac8ca 100644 --- a/packages/SystemUI/res-keyguard/values-hy/strings.xml +++ b/packages/SystemUI/res-keyguard/values-hy/strings.xml @@ -28,6 +28,9 @@ "Հպեք` գաղտնաբառը մուտքագրելու համար" "Ապակողպելու համար մուտքագրեք գաղտնաբառը" "Ապակողպելու համար մուտքագրեք PIN կոդը" + "Մուտքագրեք PIN կոդը" + "Մուտքագրեք նախշը" + "Մուտքագրեք գաղտնաբառը" "PIN կոդը սխալ է։" "Սխալ քարտ" "Լիցքավորված է" diff --git a/packages/SystemUI/res-keyguard/values-is/strings.xml b/packages/SystemUI/res-keyguard/values-is/strings.xml index dfacd38bb745282de6b45bd4d8508b963f185398..325b128d176a82fdd678d0f9b595409958d7120b 100644 --- a/packages/SystemUI/res-keyguard/values-is/strings.xml +++ b/packages/SystemUI/res-keyguard/values-is/strings.xml @@ -28,6 +28,9 @@ "Snertu og sláðu inn aðgangsorð" "Sláðu inn aðgangsorðið til að opna" "Sláðu inn PIN-númer til að opna" + "Sláðu inn PIN-númer" + "Færðu inn mynstur" + "Sláðu inn aðgangsorð" "Rangt PIN-númer." "Ógilt kort." "Fullhlaðin" diff --git a/packages/SystemUI/res-keyguard/values-iw/strings.xml b/packages/SystemUI/res-keyguard/values-iw/strings.xml index 98bb40bd81e84e5d0d32132c2cbeb264015067dc..38f2c25e781153fa27a4a1c639b61e32789a3632 100644 --- a/packages/SystemUI/res-keyguard/values-iw/strings.xml +++ b/packages/SystemUI/res-keyguard/values-iw/strings.xml @@ -28,6 +28,9 @@ "גע כדי להזין את הסיסמה" "הזן סיסמה לביטול הנעילה" "הזן את קוד הגישה לביטול הנעילה" + "הזנת קוד גישה" + "הזנת קו ביטול נעילה" + "הזנת סיסמה" "קוד הגישה שגוי" "כרטיס לא חוקי." "הסוללה טעונה" diff --git a/packages/SystemUI/res-keyguard/values-kn/strings.xml b/packages/SystemUI/res-keyguard/values-kn/strings.xml index d00f4a6609ee48fe513d17ef0cbbabdb9b1ba52d..5bd01d2ce46a54ed6cdf345615358ee376a94c18 100644 --- a/packages/SystemUI/res-keyguard/values-kn/strings.xml +++ b/packages/SystemUI/res-keyguard/values-kn/strings.xml @@ -28,12 +28,9 @@ "ಪಾಸ್‌ವರ್ಡ್‌ ಟೈಪ್ ಮಾಡಲು ಸ್ಪರ್ಶಿಸಿ" "ಅನ್‌ಲಾಕ್‌ ಮಾಡಲು ಪಾಸ್‌ವರ್ಡ್‌ ಟೈಪ್‌ ಮಾಡಿ" "ಅನ್‌ಲಾಕ್‌ ಮಾಡಲು ಪಿನ್‌ ಟೈಪ್‌ ಮಾಡಿ" - - - - - - + "ನಿಮ್ಮ ಪಿನ್ ನಮೂದಿಸಿ" + "ನಿಮ್ಮ ಪ್ಯಾಟರ್ನ್ ನಮೂದಿಸಿ" + "ನಿಮ್ಮ ಪಾಸ್‌ವರ್ಡ್ ನಮೂದಿಸಿ" "ತಪ್ಪಾದ ಪಿನ್‌ ಕೋಡ್." "ಅಮಾನ್ಯ ಕಾರ್ಡ್." "ಚಾರ್ಜ್ ಆಗಿದೆ" diff --git a/packages/SystemUI/res-keyguard/values-lt/strings.xml b/packages/SystemUI/res-keyguard/values-lt/strings.xml index ec56d101250fa211d38e659a4641fe5737179371..eca0cd3f1a5439221a52422726bc8346d5640168 100644 --- a/packages/SystemUI/res-keyguard/values-lt/strings.xml +++ b/packages/SystemUI/res-keyguard/values-lt/strings.xml @@ -28,6 +28,9 @@ "Palieskite, kad įves. slaptaž." "Įveskite slaptažodį, kad atrakintumėte" "Įveskite PIN kodą, kad atrakintumėte" + "Įveskite PIN kodą" + "Įveskite atrakinimo piešinį" + "Įveskite slaptažodį" "Netinkamas PIN kodas." "Netinkama kortelė." "Įkrauta" diff --git a/packages/SystemUI/res-keyguard/values-lv/strings.xml b/packages/SystemUI/res-keyguard/values-lv/strings.xml index 42ed814d65631308b97f9a1ce80f915c0a88bd6f..bc564066484268e736d5936f4204e83d0bc1d8c9 100644 --- a/packages/SystemUI/res-keyguard/values-lv/strings.xml +++ b/packages/SystemUI/res-keyguard/values-lv/strings.xml @@ -28,6 +28,9 @@ "Piesk., lai ievadītu paroli""." "Ievadiet paroli, lai atbloķētu." "Ievadiet PIN kodu, lai atbloķētu." + "Ievadiet savu PIN kodu" + "Ievadiet savu kombināciju" + "Ievadiet savu paroli" "PIN kods nav pareizs." "Nederīga karte." "Akumulators uzlādēts" diff --git a/packages/SystemUI/res-keyguard/values-ml/strings.xml b/packages/SystemUI/res-keyguard/values-ml/strings.xml index 214bc1d7b6e4dca599ec8d2f210bfebdff8dc49d..48e65a641454a6e029ef43042ec7c441b9e00732 100644 --- a/packages/SystemUI/res-keyguard/values-ml/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ml/strings.xml @@ -28,12 +28,9 @@ "പാസ്‌വേഡ് ടൈപ്പുചെയ്യുന്നതിന് സ്‌പർശിക്കുക" "അൺലോക്കുചെയ്യുന്നതിന് പാസ്‌വേഡ് ടൈപ്പുചെയ്യുക" "അൺലോക്കുചെയ്യുന്നതിന് പിൻ ടൈപ്പുചെയ്യുക" - - - - - - + "പിൻ നൽകുക" + "നിങ്ങളുടെ പാറ്റേൺ നൽകുക" + "നിങ്ങളുടെ പാസ്‌വേഡ് നല്‍‌കുക" "പിൻ കോഡ് തെറ്റാണ്." "അസാധുവായ കാർഡ്." "ചാർജായി" diff --git a/packages/SystemUI/res-keyguard/values-mr/strings.xml b/packages/SystemUI/res-keyguard/values-mr/strings.xml index 044e5de3a00ba55f5fc6a7c3562c9e225a02199b..a536237d305a942a6f6369555c7b71d6675e9a1a 100644 --- a/packages/SystemUI/res-keyguard/values-mr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-mr/strings.xml @@ -28,12 +28,9 @@ "पासवर्ड टाइप करण्यासाठी स्पर्श करा" "अनलॉक करण्यासाठी पासवर्ड टाइप करा" "अनलॉक करण्यासाठी पिन टाइप करा" - - - - - - + "तुमचा पिन एंटर करा" + "तुमचा पॅटर्न एंटर करा" + "तुमचा पासवर्ड एंटर करा" "चुकीचा पिन कोड." "अवैध कार्ड." "चार्ज झाली" diff --git a/packages/SystemUI/res-keyguard/values-ne/strings.xml b/packages/SystemUI/res-keyguard/values-ne/strings.xml index 70dfb88837ab1f4c8e03cf048732c5898847191a..cc98f8e3db5b3bae9da00ca61881332a866e3cdc 100644 --- a/packages/SystemUI/res-keyguard/values-ne/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ne/strings.xml @@ -28,12 +28,9 @@ "पासवर्ड टाइप गर्न छुनुहोस्" "अनलक गर्न पासवर्ड टाइप गर्नुहोस्" "अनलक गर्न PIN कोड टाइप गर्नुहोस्" - - - - - - + "आफ्नो PIN प्रविष्ट गर्नुहोस्" + "आफ्नो ढाँचा प्रविष्ट गर्नुहोस्" + "आफ्नो पासवर्ड प्रविष्ट गर्ने" "PIN कोड गलत छ।" "अमान्य कार्ड।" "चार्ज भयो" diff --git a/packages/SystemUI/res-keyguard/values-or/strings.xml b/packages/SystemUI/res-keyguard/values-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..1ce98945b0988f2547bc8c04db2ed192ae3abe4a --- /dev/null +++ b/packages/SystemUI/res-keyguard/values-or/strings.xml @@ -0,0 +1,151 @@ + + + + + "କୀ’ଗାର୍ଡ" + "PIN କୋଡ୍‍ ଟାଇପ୍‍ କରନ୍ତୁ" + "SIM PUK ଓ ନୂଆ PIN କୋଡ୍‍ ଟାଇପ୍‍ କରନ୍ତୁ" + "SIM PUK କୋଡ୍‍" + "ନୂଆ SIM PIN କୋଡ୍‍" + "ପାସୱର୍ଡ ଟାଇପ୍‍ କରିବାକୁ ସ୍ପର୍ଶ କରନ୍ତୁ" + "ଅନଲକ୍‍ କରିବାକୁ ପାସ୍‌ୱର୍ଡ ଟାଇପ୍‍ କରନ୍ତୁ" + "ଅନଲକ୍‍ କରିବାକୁ PIN ଟାଇପ୍‍ କରନ୍ତୁ" + "ନିଜର PIN ଲେଖନ୍ତୁ" + "ନିଜର ପାଟର୍ନ ଆଙ୍କନ୍ତୁ" + "ନିଜର ପାସ୍‌ୱର୍ଡ ଲେଖନ୍ତୁ" + "ଭୁଲ PIN କୋଡ୍।" + "ଅମାନ୍ୟ କାର୍ଡ।" + "ଚାର୍ଜ ହୋଇଗଲା" + "%s • ଚାର୍ଜ ହେଉଛି" + "%s • ଦ୍ରୁତ ଭାବେ ଚାର୍ଜ ହେଉଛି" + "%s • ଧୀରେ ଚାର୍ଜ ହେଉଛି" + "ଆପଣଙ୍କ ଚାର୍ଜର୍‍ ସଂଯୋଗ କରନ୍ତୁ।" + "ଅନଲକ୍‌ କରିବା ପାଇଁ ମେନୁକୁ ଦବାନ୍ତୁ।" + "ନେଟୱର୍କକୁ ଲକ୍‌ କରାଯାଇଛି" + "କୌଣସି SIM କାର୍ଡ ନାହିଁ" + "ଟାବଲେଟ୍‌ରେ କୌଣସି SIM‍ କାର୍ଡ ନାହିଁ।" + "ଫୋନରେ କୌଣସି SIM କାର୍ଡ ନାହିଁ।" + "ଗୋଟିଏ SIM କାର୍ଡ ଭର୍ତ୍ତି କରନ୍ତୁ।" + "SIM କାର୍ଡ ନାହିଁ କିମ୍ବା ଖରାପ ଅଛି। SIM କାର୍ଡ ଭର୍ତ୍ତି କରନ୍ତୁ।" + "SIM କାର୍ଡଟିକୁ ବ୍ୟବହାର କରାଯାଇପାରିବ ନାହିଁ।" + "ଆପଣଙ୍କ SIM କାର୍ଡକୁ ସ୍ଥାୟୀ ରୂପେ ଅକ୍ଷମ କରିଦିଆଯାଇଛି।\n ଅନ୍ୟ SIM କାର୍ଡ ପାଇଁ ଆପଣଙ୍କ ୱାୟରଲେସ୍‍ ସେବା ପ୍ରଦାତାଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।" + "SIM କାର୍ଡ ଲକ୍‍ ହୋଇଯାଇଛି।" + "SIM କାର୍ଡଟି PUK ଲକ୍‍ ହୋଇଯାଇଛି।" + "SIM କାର୍ଡ ଅନଲକ୍‍ କରାଯାଉଛି…" + "PIN ଅଞ୍ଚଳ" + "SIM PIN ଅଞ୍ଚଳ" + "SIM PUK ଅଞ୍ଚଳ" + "%1$sରେ ପରବର୍ତ୍ତୀ ଆଲାର୍ମ ସେଟ୍‍ କରାଯାଇଛି" + "ଡିଲିଟ୍‌ କରନ୍ତୁ" + "eSIM ଅକ୍ଷମ କରନ୍ତୁ" + "eSIMକୁ ଅକ୍ଷମ କରାଯାଇପାରିବ ନାହିଁ" + "ଗୋଟିଏ ତ୍ରୁଟି କାରଣରୁ eSIMକୁ ଅକ୍ଷମ କରାଯାଇପାରିବ ନାହିଁ।" + "ଏଣ୍ଟର୍" + "ପାଟର୍ନ ଭୁଲି ଯାଇଛନ୍ତି" + "ଭୁଲ ପାଟର୍ନ" + "ଭୁଲ ପାସୱର୍ଡ" + "ଭୁଲ PIN" + + %d ସେକେଣ୍ଡ ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ। + 1 ସେକେଣ୍ଡ ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ। + + "ନିଜ ପାଟର୍ନ ଆଙ୍କନ୍ତୁ" + "SIMର PIN ଲେଖନ୍ତୁ।" + "\"%1$s\" ପାଇଁ SIMର PIN ଲେଖନ୍ତୁ।" + "%1$s ବିନା ମୋବାଇଲ୍ ସେବାରେ ଡିଭାଇସ୍‌କୁ ବ୍ୟବହାର କରିବା ପାଇଁ eSIMକୁ ଅକ୍ଷମ କରନ୍ତୁ।" + "PIN ଲେଖନ୍ତୁ" + "ପାସ୍‌ୱର୍ଡ ଲେଖନ୍ତୁ" + "SIM ବର୍ତ୍ତମାନ ଅକ୍ଷମ ଅଟେ। ଜାରି ରଖିବାକୁ PUK କୋଡ୍‍ ଏଣ୍ଟର୍ କରନ୍ତୁ। ବିବରଣୀ ପାଇଁ ନିଜ କେରିଅର୍‌ଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।" + "SIM \"%1$s\" ବର୍ତ୍ତମାନ ଅକ୍ଷମ କରାଯାଇଛି। ଜାରିରଖିବାକୁ PUK କୋଡ୍‍ ଲେଖନ୍ତୁ। ବିବରଣୀ ପାଇଁ କେରିଅରଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।" + "ନିଜ ଇଚ୍ଛାର PIN କୋଡ୍‍ ଲେଖନ୍ତୁ" + "ନିଜ ଇଚ୍ଛାର PIN କୋଡ୍‍ ନିଶ୍ଚିତ କରନ୍ତୁ" + "SIM କାର୍ଡ ଅନଲକ୍‍ କରାଯାଉଛି…" + "4 ରୁ 8 ନମ୍ବର ବିଶିଷ୍ଟ ଏକ PIN ଟାଇପ୍ କରନ୍ତୁ।" + "PUK କୋଡ୍‍‍ରେ 8ଟି କିମ୍ବା ଅଧିକ ନମ୍ବର ରହିଥାଏ।" + "ଠିକ୍‍ PUK କୋଡ୍‍ ପୁଣି ଲେଖନ୍ତୁ। ବାରମ୍ବାର ପ୍ରୟାସ କଲେ SIM କାର୍ଡ ସ୍ଥାୟୀ ରୂପେ ଅକ୍ଷମ ହୋଇଯିବ।" + "PIN କୋଡ୍‍ ମେଳ ହେଉନାହିଁ" + "ଅନେକ ପାଟର୍ନ ପ୍ରୟାସ" + "ଆପଣଙ୍କ PIN ଆପଣ %1$dଥର ଭୁଲ ଭାବେ ଟାଇପ୍‍ କରିଛନ୍ତି। \n\n%2$d ସେକେଣ୍ଡ ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।" + "ଆପଣଙ୍କ ପାସ୍‌ୱର୍ଡକୁ ଆପଣ %1$d ଥର ଭୁଲ ଭାବେ ଟାଇପ୍ କରିଛନ୍ତି। \n\n%2$d ସେକେଣ୍ଡ ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।" + "ଆପଣଙ୍କ ଲକ୍‍ ଖୋଲିବା ପାଟର୍ନକୁ ଆପଣ %1$dଥର ଭୁଲ ଭାବେ ଅଙ୍କନ କରିଛନ୍ତି। \n\n%2$d ସେକେଣ୍ଡ ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।" + "ଆପଣ ଟାବଲେଟକୁ %1$d ଭୁଲ ଭାବେ ପ୍ରୟାସ କରିଛନ୍ତି। ଆଉ %2$dଟି ଭୁଲ୍‍ ପ୍ରୟାସ ପରେ, ଏହି ଟାବଲେଟଟି ରିସେଟ୍‍ ହୋଇଯିବ, ଯାହାଦ୍ୱାରା ଏହାର ସମସ୍ତ ଡାଟା ଲିଟ୍‍ ହୋଇଯିବ।" + "ଆପଣ ଫୋନକୁ ଅନଲକ୍‍ କରିବାକୁ %1$d ଭୁଲ ଭାବେ ପ୍ରୟାସ କରିଛନ୍ତି। ଆଉ %2$dଟି ଭୁଲ୍‍ ପ୍ରୟାସ ପରେ, ଏହି ଫୋନଟି ରିସେଟ୍‍ ହୋଇଯିବ, ଯାହାଦ୍ୱାରା ଏହାର ସମସ୍ତ ଡାଟା ଲିଟ୍‍ ହୋଇଯିବ।" + "ଆପଣ ଟାବଲେଟକୁ ଅନଲକ୍‍ କରିବାକୁ %d ଥର ଭୁଲ୍‍ ଭାବେ ପ୍ରୟାସ କରିଛନ୍ତି। ଏହି ଟାବଲେଟକୁ ରିସେଟ୍‍ କରାଯିବ, ଯାହାଦ୍ୱାରା ଏହାର ସମସ୍ତ ଡାଟା ଡିଲିଟ୍‍ ହୋଇଯିବ।" + "ଆପଣ ଫୋନଟି ଅନଲକ୍‍ କରିବାକୁ %dଥର ଭୁଲ୍‍ ଭାବେ ପ୍ରୟାସ କରିଛନ୍ତି। ଏହି ଫୋନ୍‍ ରିସେଟ୍‍ କରାଯିବ, ଯାହା ଦ୍ୱାରା ଏହାର ସମସ୍ତ ଡାଟା ଡିଲିଟ୍‍ ହୋଇଯିବ।" + "ଆପଣ ଟାବଲେଟ୍‌ଟିକୁ ଅନଲକ୍‍ କରିବା ପାଇଁ %1$d ଥର ଭୁଲ ଭାବେ ଚେଷ୍ଟା କରିଛନ୍ତି। ଆଉ %2$d ଟି ଭୁଲ୍‍ ପ୍ରୟାସ ପରେ, ୱାର୍କ ପ୍ରୋଫାଇଲ୍‍କୁ ବାହାର କରିଦିଆଯିବ ଏବଂ ଏହା ଦ୍ୱାରା ସମସ୍ତ ପ୍ରୋଫାଇଲ୍‍ ଡାଟା ଡିଲିଟ୍‍ ହୋଇଯିବ।" + "ଆପଣ ଫୋନଟି ଅନଲକ୍‍ କରିବାକୁ %1$dଥର ଭୁଲ ଭାବେ ପ୍ରୟାସ କରିଛନ୍ତି। ଆଉ %2$dଟି ଭୁଲ୍‍ ପ୍ରୟାସ ପରେ, ଏହି ୟୁଜରଙ୍କୁ ବାହାର କରିଦିଆଯିବ ଏବଂ ଏହାଦ୍ୱାରା ସମସ୍ତ ୟୁଜର୍‍ ଡାଟା ଡିଲିଟ୍‍ ହୋଇଯିବ।" + "ଆପଣ ଟାବଲେଟଟି ଅନଲକ୍‍ କରିବାକୁ %dଥର ଭୁଲ୍‍ ଭାବେ ପ୍ରୟାସ କରିଛନ୍ତି। ଏହି ୟୁଜରଙ୍କୁ ବାହାର କରିଦିଆଯିବ, ଯାହାଦ୍ୱାରା ସମସ୍ତ ୟୁଜର୍‍ ଡାଟା ଡିଲିଟ୍‍ ହୋଇଯିବ।" + "ଆପଣ ଫୋନକୁ ଅନଲକ୍‍ କରିବାକୁ %d ଥର ଭୁଲ୍‍ ଭାବେ ପ୍ରୟାସ କରିଛନ୍ତି। ଏହି ୟୁଜରଙ୍କୁ ବାହାର କରିଦିଆଯିବ, ଯାହାଦ୍ୱାରା ସମସ୍ତ ୟୁଜର୍‍ ଡାଟା ଡିଲିଟ୍‍ ହୋଇଯିବ।" + "ଆପଣ ଟାବଲେଟଟି ଅନଲକ୍‍ କରିବାକୁ %1$dଥର ଭୁଲ ଭାବେ ପ୍ରୟାସ କରିଛନ୍ତି। ଆଉ %2$dଟି ଭୁଲ୍‍ ପ୍ରୟାସ ପରେ, ୱାର୍କ ପ୍ରୋଫାଇଲ୍‍କୁ ବାହାର କରିଦିଆଯିବ ଏବଂ ଏହାଦ୍ୱାରା ସମସ୍ତ ପ୍ରୋଫାଇଲ୍‍ ଡାଟା ଡିଲିଟ୍‍ ହୋଇଯିବ।" + "ଆପଣ ଫୋନଟି ଅନଲକ୍‍ କରିବାକୁ %1$dଥର ଭୁଲ ଭାବେ ପ୍ରୟାସ କରିଛନ୍ତି। ଆଉ %2$dଟି ଭୁଲ୍‍ ପ୍ରୟାସ ପରେ, ୱାର୍କ ପ୍ରୋଫାଇଲ୍‍କୁ ବାହାର କରିଦିଆଯିବ ଏବଂ ଏହାଦ୍ୱାରା ସମସ୍ତ ପ୍ରୋଫାଇଲ୍‍ ଡାଟା ଡିଲିଟ୍‍ ହୋଇଯିବ।" + "ଆପଣ ଟାବଲେଟକୁ ଅନଲକ୍‍ କରିବାକୁ %d ଭୁଲ୍‍ ଭାବେ ପ୍ରୟାସ କରିଛନ୍ତି। କାର୍ଯ୍ୟ ପ୍ରୋଫାଇଲ୍‍ ବାହାର କରିଦିଆଯିବ, ଯାହାଦ୍ୱାରା ସମସ୍ତ ପ୍ରୋଫାଇଲ୍‍ ଡାଟା ଡିଲିଟ୍‍ ହୋଇଯିବ।" + "ଆପଣ ଫୋନଟି ଅନଲକ୍‍ କରିବାକୁ %dଥର ଭୁଲ୍‍ ଭାବେ ପ୍ରୟାସ କରିଛନ୍ତି। ୱର୍କ ପ୍ରୋଫାଇଲ୍‍ ବାହାର କରିଦିଆଯିବ, ଯାହା ଦ୍ୱାରା ସମସ୍ତ ପ୍ରୋଫାଇଲ୍‍ ଡାଟା ଡିଲିଟ୍‍ ହୋଇଯିବ।" + "ଆପଣଙ୍କ ଅନଲକ୍‍ ପାଟର୍ନକୁ ଆପଣ %1$d ଥର ଭୁଲ ଭାବେ ଅଙ୍କନ କରିଛନ୍ତି। ଆଉ %2$d ଟି ଭୁଲ ପ୍ରୟାସ ପରେ ଏକ ଇମେଲ୍‍ ଆକାଉଣ୍ଟ ବ୍ୟବହାର କରି ନିଜ ଟାବଲେଟକୁ ଅନଲକ୍‌ କରିବା ପାଇଁ କୁହାଯିବ।\n\n %3$d ସେକେଣ୍ଡ ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।" + "ଆପଣଙ୍କ ଅନଲକ୍‍ ପାଟର୍ନକୁ ଆପଣ %1$d ଥର ଭୁଲ ଭାବେ ଅଙ୍କନ କରିଛନ୍ତି। ଆଉ %2$d ଟି ଭୁଲ ପ୍ରୟାସ ପରେ ଏକ ଇମେଲ୍‍ ଆକାଉଣ୍ଟ ବ୍ୟବହାର କରି ନିଜ ଫୋନକୁ ଅନଲକ୍‌ କରିବା ପାଇଁ କୁହାଯିବ।\n\n %3$d ସେକେଣ୍ଡ ପରେ ପୁଣି ଚେଷ୍ଟା କରନ୍ତୁ।" + "ଭୁଲ SIM PIN କୋଡ୍‌, ଆପଣଙ୍କ ଡିଭାଇସକୁ ଅନଲକ୍‌ କରିବା ପାଇଁ ଏବେ ହିଁ ନିଜ କେରିଅର୍‌ଙ୍କ ସହ ସମ୍ପର୍କ କରନ୍ତୁ।" + + ଭୁଲ SIM PIN କୋଡ୍, ଆପଣଙ୍କର ଆଉ %dଟି ପ୍ରୟାସ ବାକି ରହିଛି। + ଭୁଲ SIM PIN କୋଡ୍, ଡିଭାଇସ୍‍ ଅନଲକ୍‍ କରିବା ପାଇଁ କେରିଅରଙ୍କ ସହିତ ଯୋଗାଯୋଗ କରିବା ପୂର୍ବରୁ ଆପଣଙ୍କ ପାଖରେ ଆଉ %dଟି ପ୍ରୟାସ ବାକି ରହିଛି। + + "SIM ବ୍ୟବହାର କରାଯାଇପାରିବ ନାହିଁ। ନିଜ କେରିଅର୍‌ଙ୍କ ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ।" + + ଭୁଲ SIM PUK କୋଡ୍‍, SIMଟି ଆଉ %dଟି ପ୍ରୟାସ ପରେ ସ୍ଥାୟୀ ଭାବେ ବ୍ୟବହାର କରାଯାଇରିବ ନାହିଁ। + ଭୁଲ SIM PUK କୋଡ୍‍, SIMଟି ଆଉ %dଟି ପ୍ରୟାସ ପରେ ସ୍ଥାୟୀ ଭାବେ ବ୍ୟବହାର କରାଯାଇରିବ ନାହିଁ। + + "SIM PIN କାମ ବିଫଳ ହେଲା!" + "SIM PUKର କାମ ବିଫଳ ହେଲା!" + "କୋଡ୍‍ ସ୍ୱୀକାର କରାଗଲା!" + "କୌଣସି ସେବା ନାହିଁ।" + "ଇନପୁଟ୍‌ ପଦ୍ଧତି ବଦଳାନ୍ତୁ" + "ଏରୋପ୍ଲେନ୍‍ ମୋଡ୍" + "ଡିଭାଇସ୍‍ ରିଷ୍ଟାର୍ଟ ହେବା ପରେ ପାଟର୍ନ ଆବଶ୍ୟକ ଅଟେ" + "ଡିଭାଇସ୍‍ ରିଷ୍ଟାର୍ଟ ହେବାପରେ ପାସ୍‌ୱର୍ଡ ଆବଶ୍ୟକ" + "ଡିଭାଇସ୍‍ ରିଷ୍ଟାର୍ଟ ହେବା ପରେ ପାସୱର୍ଡ ଆବଶ୍ୟକ ଅଟେ" + "ଅତିରିକ୍ତ ସୁରକ୍ଷା ପାଇଁ ପାଟର୍ନ ଆବଶ୍ୟକ" + "ଅତିରିକ୍ତ ସୁରକ୍ଷା ପାଇଁ PIN ଆବଶ୍ୟକ ଅଟେ" + "ଅତିରିକ୍ତ ସୁରକ୍ଷା ପାଇଁ ପାସ୍‌ୱର୍ଡ ଆବଶ୍ୟକ" + "ଆପଣ ପ୍ରୋଫାଇଲ୍‍ ବଦଳାଇବାବେଳେ ପାଟର୍ନ ଆବଶ୍ୟକ" + "ଆପଣ ପ୍ରୋଫାଇଲ୍‍ ବଦଳାଇବା ବେଳେ PIN ଆବଶ୍ୟକ ଅଟେ" + "ଆପଣ ପ୍ରୋଫାଇଲ୍‍ ବଦଳାଇବାବେଳେ ପାସ୍‌ୱର୍ଡ ଆବଶ୍ୟକ" + "ଡିଭାଇସ୍‍ ଆଡମିନଙ୍କ ଦ୍ୱାରା ଲକ୍‍ କରାଯାଇଛି" + "ଡିଭାଇସ୍‍ ମାନୁଆଲ ଭାବେ ଲକ୍‍ କରାଗଲା" + + %d ଘଣ୍ଟା ପାଇଁ ଡିଭାଇସ୍‍ ଅନଲକ୍‍ କରାଯାଇନାହିଁ। ପାଟର୍ନ ସୁନିଶ୍ଚିତ କରନ୍ତୁ + %d ଘଣ୍ଟା ପାଇଁ ଡିଭାଇସ୍‍ ଅନଲକ୍‍ କରାଯାଇନାହିଁ। ପାଟର୍ନ ସୁନିଶ୍ଚିତ କରନ୍ତୁ + + + %d ଘଣ୍ଟା ପାଇଁ ଡିଭାଇସ୍‍ ଅନଲକ୍‍ କରାଯାଇ ନାହିଁ। PIN ନିଶ୍ଚିତ କରନ୍ତୁ + %d ଘଣ୍ଟା ପାଇଁ ଡିଭାଇସ୍‍ ଅନଲକ୍‍ କରାଯାଇ ନାହିଁ। PIN ନିଶ୍ଚିତ କରନ୍ତୁ + + + %d ଘଣ୍ଟା ପାଇଁ ଡିଭାଇସ୍‍ ଅନଲକ୍‍ କରାଯାଇ ନାହିଁ। ପାସୱର୍ଡ ସୁନିଶ୍ଚିତ କରନ୍ତୁ + %d ଘଣ୍ଟା ପାଇଁ ଡିଭାଇସ୍‍ ଅନଲକ୍‍ କରାଯାଇ ନାହିଁ। ପାସୱର୍ଡ ସୁନିଶ୍ଚିତ କରନ୍ତୁ + + "ଚିହ୍ନଟ ହେଲାନାହିଁ" + + SIM କାର୍ଡର PIN ଲେଖନ୍ତୁ, ଆପଣ ଆଉ %d ଥର ପ୍ରୟାସ କରିପାରିବେ। + SIM କାର୍ଡର PIN ଲେଖନ୍ତୁ, ଆପଣଙ୍କ ଡିଭାଇସ୍‌ ଅନଲକ୍‌ କରିବାକୁ ଆପଣ ଆଉ %d ଥର ପ୍ରୟାସ କରିପାରିବେ, ତା\'ପରେ ଆପଣଙ୍କୁ ନିଜ କେରିଅର୍‌ର ସହିତ ଯୋଗାଯୋଗ କରିବାକୁ ପଡ଼ିବ। + + + SIM କାର୍ଡକୁ ବର୍ତ୍ତମାନ ଅକ୍ଷମ କରିଦିଆଯାଇଛି। ଜାରି ରଖିବାକୁ PUK କୋଡ୍‍ ଲେଖନ୍ତୁ। ଆଉ %d ଥର ଭୁଲ କୋଡ୍‍ ଲେଖିବା ପରେ SIM କାର୍ଡ ସ୍ଥାୟୀ ଭାବେ ଅନୁପଯୋଗୀ ହୋଇଯିବ। ବିବରଣୀ ପାଇଁ କେରିଅର୍‌ର ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ। + SIM କାର୍ଡକୁ ବର୍ତ୍ତମାନ ଅକ୍ଷମ କରିଦିଆଯାଇଛି। ଜାରି ରଖିବାକୁ PUK କୋଡ୍‍ ଲେଖନ୍ତୁ। ଆଉ %d ଥର ଭୁଲ କୋଡ୍‍ ଲେଖିବା ପରେ SIM କାର୍ଡ ସ୍ଥାୟୀ ଭାବେ ଅନୁପଯୋଗୀ ହୋଇଯିବ। ବିବରଣୀ ପାଇଁ କେରିଅର୍‌ର ସହ ଯୋଗାଯୋଗ କରନ୍ତୁ। + + diff --git a/packages/SystemUI/res-keyguard/values-pa/strings.xml b/packages/SystemUI/res-keyguard/values-pa/strings.xml index e09b5844f75804f8ffb2adb3f7fdcaecb6a6a467..f17f9fcebaf24ac19fae6ae84c9fb9f57324553b 100644 --- a/packages/SystemUI/res-keyguard/values-pa/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pa/strings.xml @@ -28,12 +28,9 @@ "ਪਾਸਵਰਡ ਟਾਈਪ ਕਰਨ ਲਈ ਸਪਰਸ਼ ਕਰੋ" "ਅਣਲਾਕ ਕਰਨ ਲਈ ਪਾਸਵਰਡ ਟਾਈਪ ਕਰੋ" "ਅਣਲਾਕ ਕਰਨ ਲਈ ਪਿੰਨ ਟਾਈਪ ਕਰੋ" - - - - - - + "ਆਪਣਾ ਪਿੰਨ ਦਾਖਲ ਕਰੋ" + "ਆਪਣਾ ਪੈਟਰਨ ਦਾਖਲ ਕਰੋ" + "ਆਪਣਾ ਪਾਸਵਰਡ ਦਾਖਲ ਕਰੋ" "ਗਲਤ ਪਿੰਨ ਕੋਡ।" "ਅਵੈਧ ਕਾਰਡ।" "ਚਾਰਜ ਹੋ ਗਿਆ" diff --git a/packages/SystemUI/res-keyguard/values-pl/strings.xml b/packages/SystemUI/res-keyguard/values-pl/strings.xml index d60ff979fd0604dffa2709c0017c231fbcf73ce3..7e3e04833dc884a0fae8d63b9a46e4e211064cf9 100644 --- a/packages/SystemUI/res-keyguard/values-pl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pl/strings.xml @@ -28,12 +28,9 @@ "Dotknij, by wpisać hasło" "Wpisz hasło, aby odblokować" "Wpisz kod PIN, aby odblokować" - - - - - - + "Wpisz kod PIN" + "Narysuj wzór" + "Wpisz hasło" "Nieprawidłowy kod PIN." "Nieprawidłowa karta." "Naładowana" diff --git a/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml b/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml index 7d19b1484c887d2dc539e4563b9d1c42ac82108c..296dd1621345ac9935df480b6b402df3fdbf9797 100644 --- a/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pt-rBR/strings.xml @@ -28,12 +28,9 @@ "Toque para inserir a senha" "Digite a senha para desbloquear" "Insira o PIN para desbloquear" - - - - - - + "Digite seu PIN" + "Digite seu padrão" + "Digite sua senha" "Código PIN incorreto." "Cartão inválido." "Carregada" diff --git a/packages/SystemUI/res-keyguard/values-pt/strings.xml b/packages/SystemUI/res-keyguard/values-pt/strings.xml index 7d19b1484c887d2dc539e4563b9d1c42ac82108c..296dd1621345ac9935df480b6b402df3fdbf9797 100644 --- a/packages/SystemUI/res-keyguard/values-pt/strings.xml +++ b/packages/SystemUI/res-keyguard/values-pt/strings.xml @@ -28,12 +28,9 @@ "Toque para inserir a senha" "Digite a senha para desbloquear" "Insira o PIN para desbloquear" - - - - - - + "Digite seu PIN" + "Digite seu padrão" + "Digite sua senha" "Código PIN incorreto." "Cartão inválido." "Carregada" diff --git a/packages/SystemUI/res-keyguard/values-ru/strings.xml b/packages/SystemUI/res-keyguard/values-ru/strings.xml index 9a68604deb55ca32b9b912469d3db21215430d67..6d2f91dfae970d0fe7130acf12b9f4b0d9f3600f 100644 --- a/packages/SystemUI/res-keyguard/values-ru/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ru/strings.xml @@ -28,6 +28,9 @@ "Нажмите для ввода пароля" "Введите пароль" "Введите PIN-код для разблокировки" + "Введите PIN-код" + "Введите графический ключ" + "Введите пароль" "Неверный PIN-код." "Ошибка SIM-карты." "Батарея заряжена" diff --git a/packages/SystemUI/res-keyguard/values-sr/strings.xml b/packages/SystemUI/res-keyguard/values-sr/strings.xml index b380556a1c14666ac5ff03795e0f58c6fafd3109..c0642c28071195a1959c8b6810383f7f0eeac8e8 100644 --- a/packages/SystemUI/res-keyguard/values-sr/strings.xml +++ b/packages/SystemUI/res-keyguard/values-sr/strings.xml @@ -28,6 +28,9 @@ "Додирните за унос лозинке" "Унесите лозинку да бисте откључали" "Унесите PIN за откључавање" + "Унесите PIN" + "Унесите шаблон" + "Унесите лозинку" "PIN кôд је нетачан." "Неважећа картица." "Напуњена је" diff --git a/packages/SystemUI/res-keyguard/values-ta/strings.xml b/packages/SystemUI/res-keyguard/values-ta/strings.xml index 0bbc47098676ff303cc8b3c74b71b69cf174cea2..f679b02983b3ba4d2a5f03ebd0c2efc1fe06acb9 100644 --- a/packages/SystemUI/res-keyguard/values-ta/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ta/strings.xml @@ -28,12 +28,9 @@ "கடவுச்சொல்லை உள்ளிட, தொடவும்" "திறக்க, கடவுச்சொல்லை உள்ளிடவும்" "திறக்க, பின்னை உள்ளிடவும்" - - - - - - + "பின்னை உள்ளிடுக" + "பேட்டர்னை உள்ளிடுக" + "கடவுச்சொல்லை உள்ளிடுக" "தவறான பின் குறியீடு." "செல்லாத சிம் கார்டு." "சார்ஜ் செய்யப்பட்டது" diff --git a/packages/SystemUI/res-keyguard/values-te/strings.xml b/packages/SystemUI/res-keyguard/values-te/strings.xml index b024c3e5a6048d41dd238f03dcb823ed4b22eb91..ceb6793e07c3f4a9de37cb922a7806d1097d63a7 100644 --- a/packages/SystemUI/res-keyguard/values-te/strings.xml +++ b/packages/SystemUI/res-keyguard/values-te/strings.xml @@ -28,12 +28,9 @@ "పాస్‌వర్డ్‌ను టైప్ చేయడానికి తాకండి" "అన్‌లాక్ చేయడానికి పాస్‌వర్డ్‌ను టైప్ చేయండి" "అన్‌లాక్ చేయడానికి పిన్ టైప్ చేయండి" - - - - - - + "మీ పిన్‌ని నమోదు చేయండి" + "మీ ఆకృతిని నమోదు చేయండి" + "మీ పాస్‌వర్డ్‌ను నమోదు చేయండి" "పిన్ కోడ్ తప్పు." "చెల్లని కార్డ్." "ఛార్జ్ చేయబడింది" diff --git a/packages/SystemUI/res-keyguard/values-tl/strings.xml b/packages/SystemUI/res-keyguard/values-tl/strings.xml index 717eda0ebf4a4f4f2f2b730c89e4ec086e4fd77f..5e37ed6e396e496dce0c255fe99311899256dbd6 100644 --- a/packages/SystemUI/res-keyguard/values-tl/strings.xml +++ b/packages/SystemUI/res-keyguard/values-tl/strings.xml @@ -28,6 +28,9 @@ "Pindutin para i-type password" "I-type ang password upang i-unlock" "I-type ang PIN upang i-unlock" + "Ilagay ang iyong PIN" + "Ilagay ang iyong Pattern" + "Ilagay ang iyong Password" "Mali ang PIN code." "Di-wasto ang Card." "Tapos nang mag-charge" diff --git a/packages/SystemUI/res-keyguard/values-uk/strings.xml b/packages/SystemUI/res-keyguard/values-uk/strings.xml index 827f78e3eabcb6c522ec2f204fb02d12a0c7b29d..a358085fd2495609451e6f3bcd9a6c071133fb42 100644 --- a/packages/SystemUI/res-keyguard/values-uk/strings.xml +++ b/packages/SystemUI/res-keyguard/values-uk/strings.xml @@ -28,12 +28,9 @@ "Торкніться, щоб ввести пароль" "Введіть пароль, щоб розблокувати" "Введіть PIN-код, щоб розблокувати" - - - - - - + "Введіть PIN-код" + "Введіть ключ" + "Введіть пароль" "Неправильний PIN-код." "Недійсна картка." "Заряджено" diff --git a/packages/SystemUI/res-keyguard/values-ur/strings.xml b/packages/SystemUI/res-keyguard/values-ur/strings.xml index 1fcce8164247f3c6cc788b28b6414a52483e67f5..ccda081790796069a583c2305e97f3625221cfe8 100644 --- a/packages/SystemUI/res-keyguard/values-ur/strings.xml +++ b/packages/SystemUI/res-keyguard/values-ur/strings.xml @@ -28,12 +28,9 @@ "پاسورڈ ٹائپ کرنے کیلئے ٹچ کریں" "غیر مقفل کرنے کیلئے پاس ورڈ ٹائپ کریں" "‏غیر مقفل کرنے کیلئے PIN ٹائپ کریں" - - - - - - + "‏اپنا PIN درج کریں" + "اپنا پیٹرن درج کریں" + "اپنا پاس ورڈ درج کریں" "‏غلط PIN کوڈ۔" "غلط کارڈ۔" "چارج ہوگئی" diff --git a/packages/SystemUI/res-keyguard/values-uz/strings.xml b/packages/SystemUI/res-keyguard/values-uz/strings.xml index 4514eb1014fa27f0e7d3d72fac9d0d3c88750d6a..7ef24311b015455655a14726697ae5aead0e1d15 100644 --- a/packages/SystemUI/res-keyguard/values-uz/strings.xml +++ b/packages/SystemUI/res-keyguard/values-uz/strings.xml @@ -29,7 +29,7 @@ "Qulfni ochish uchun parolni kiriting" "Qulfni ochish uchun PIN kodni kiriting" "PIN kodni kiriting" - "Grafik kalitni kiriting" + "Grafik kalitni chizing" "Parolni kiriting" "PIN kodi xato." "SIM karta yaroqsiz." diff --git a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml index 1d9732c1e158b38276de647d508b3f29e51f20ad..c4f1833ec55b874e11d7375c780f5382cf2b23fc 100644 --- a/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zh-rCN/strings.xml @@ -28,6 +28,9 @@ "触摸即可输入密码" "输入密码即可解锁" "输入 PIN 码即可解锁" + "输入您的 PIN 码" + "绘制您的图案" + "输入您的密码" "PIN 码有误。" "SIM 卡无效。" "已充满电" diff --git a/packages/SystemUI/res-keyguard/values-zu/strings.xml b/packages/SystemUI/res-keyguard/values-zu/strings.xml index b95993398f630d8d5781ac82f3fcc33014334872..2bf328c3f7facf81b32ef83e1025df16668646a1 100644 --- a/packages/SystemUI/res-keyguard/values-zu/strings.xml +++ b/packages/SystemUI/res-keyguard/values-zu/strings.xml @@ -28,12 +28,9 @@ "Thinta ukuze uthayiphe iphasiwedi" "Bhala iphasiwedi ukuze kuvuleke" "Faka i-PIN ukuvula" - - - - - - + "Faka iPHINIKHODI yakho" + "Faka iphethini yakho" + "Faka iphasiwedi yakho" "Ikhodi ye-PIN engalungile!" "Ikhadi elingavumelekile." "Kushajiwe" diff --git a/packages/SystemUI/res/drawable/ic_1x_mobiledata.xml b/packages/SystemUI/res/drawable/ic_1x_mobiledata.xml index 726d814f7eb2ff6b514e9f361ba833c00248dff3..c0e0e59a88e27162ff8f2bd5e04c9eb69fd70cf7 100644 --- a/packages/SystemUI/res/drawable/ic_1x_mobiledata.xml +++ b/packages/SystemUI/res/drawable/ic_1x_mobiledata.xml @@ -14,17 +14,17 @@ limitations under the License. --> + android:width="14dp" + android:height="17dp" + android:viewportWidth="14" + android:viewportHeight="17"> + android:pathData="M3.77,13.48H2.55V5.05L0.46,5.98V4.84l3.12-1.36h0.19V13.48z" /> + android:pathData="M10.14,7.34l1.87-3.81h1.47L10.9,8.46l2.65,5.02h-1.48l-1.91-3.88l-1.92,3.88H6.74L9.4,8.46l-2.6-4.94h1.46L10.14,7.34z" /> - \ No newline at end of file + android:pathData="M 0 0 H 14 V 17 H 0 V 0 Z" /> + diff --git a/packages/SystemUI/res/drawable/ic_3g_mobiledata.xml b/packages/SystemUI/res/drawable/ic_3g_mobiledata.xml index 7a539ffe3471e09f9b487e472c0413f657d5fc5d..e4a5bf8a913015aec5db1d8b0c60fd3507260948 100644 --- a/packages/SystemUI/res/drawable/ic_3g_mobiledata.xml +++ b/packages/SystemUI/res/drawable/ic_3g_mobiledata.xml @@ -14,17 +14,17 @@ limitations under the License. --> + android:width="14dp" + android:height="17dp" + android:viewportWidth="14" + android:viewportHeight="17"> + android:pathData="M1.9,7.88h0.77c0.5,0,0.88-0.15,1.15-0.46s0.4-0.72,0.4-1.25c0-1.17-0.45-1.75-1.35-1.75c-0.43,0-0.77,0.16-1.02,0.47 S1.49,5.62,1.49,6.13h-1.2c0-0.8,0.24-1.46,0.73-1.97s1.11-0.78,1.86-0.78c0.78,0,1.41,0.25,1.87,0.73S5.43,5.31,5.43,6.2 c0,0.46-0.12,0.89-0.36,1.29S4.52,8.18,4.14,8.37c0.94,0.35,1.41,1.12,1.41,2.33c0,0.89-0.25,1.6-0.74,2.12 c-0.49,0.53-1.14,0.79-1.94,0.79c-0.79,0-1.43-0.25-1.91-0.75c-0.49-0.5-0.73-1.17-0.73-2.01h1.21c0,0.53,0.13,0.95,0.38,1.26 c0.26,0.31,0.6,0.47,1.05,0.47c0.45,0,0.81-0.15,1.08-0.46s0.4-0.77,0.4-1.39c0-1.21-0.57-1.81-1.72-1.81H1.9V7.88z" /> + android:pathData="M13.77,12.24l-0.22,0.27c-0.63,0.73-1.55,1.1-2.76,1.1c-1.08,0-1.92-0.36-2.53-1.07c-0.61-0.71-0.93-1.72-0.94-3.02V7.56 c0-1.39,0.28-2.44,0.84-3.13s1.39-1.04,2.51-1.04c0.95,0,1.69,0.26,2.23,0.79s0.83,1.28,0.89,2.26h-1.25 C12.47,5.82,12.3,5.33,12,4.98s-0.74-0.52-1.34-0.52c-0.72,0-1.24,0.23-1.57,0.7S8.59,6.37,8.58,7.4v2.03c0,1,0.19,1.77,0.57,2.31 c0.38,0.54,0.93,0.8,1.65,0.8c0.67,0,1.19-0.16,1.54-0.49l0.18-0.17V9.59H10.7V8.52h3.07V12.24z" /> - \ No newline at end of file + android:pathData="M 0 0 H 14 V 17 H 0 V 0 Z" /> + diff --git a/packages/SystemUI/res/drawable/ic_4g_mobiledata.xml b/packages/SystemUI/res/drawable/ic_4g_mobiledata.xml index b2fab0c80d51ef1ae0651dedc36df8748d3203bc..e98560b9c0a2d6e4de7466c99fa1c9443506bc4d 100644 --- a/packages/SystemUI/res/drawable/ic_4g_mobiledata.xml +++ b/packages/SystemUI/res/drawable/ic_4g_mobiledata.xml @@ -14,17 +14,17 @@ limitations under the License. --> + android:width="14dp" + android:height="17dp" + android:viewportWidth="14" + android:viewportHeight="17"> + android:pathData="M5.07,10.13h1.11v1.03H5.07v2.31H3.86v-2.31H0.1v-0.75l3.7-6.9h1.27V10.13z M1.44,10.13h2.42V5.4L1.44,10.13z" /> + android:pathData="M13.9,12.24l-0.22,0.27c-0.63,0.73-1.55,1.1-2.76,1.1c-1.08,0-1.92-0.36-2.53-1.07c-0.61-0.71-0.93-1.72-0.94-3.02V7.56 c0-1.39,0.28-2.44,0.84-3.13s1.39-1.04,2.51-1.04c0.95,0,1.69,0.26,2.23,0.79s0.83,1.28,0.89,2.26h-1.25 c-0.05-0.62-0.22-1.1-0.52-1.45s-0.74-0.52-1.34-0.52c-0.72,0-1.24,0.23-1.57,0.7S8.72,6.37,8.71,7.4v2.03 c0,1,0.19,1.77,0.57,2.31c0.38,0.54,0.93,0.8,1.65,0.8c0.67,0,1.19-0.16,1.54-0.49l0.18-0.17V9.59h-1.82V8.52h3.07V12.24z" /> + android:pathData="M 0 0 H 14 V 17 H 0 V 0 Z" /> diff --git a/packages/SystemUI/res/drawable/ic_4g_plus_mobiledata.xml b/packages/SystemUI/res/drawable/ic_4g_plus_mobiledata.xml index bdbb2df3ce0e3bcf1fd4d3eda1dc890e93bc7829..bf39ea2798b3de32590dd3935bda515cca7da055 100644 --- a/packages/SystemUI/res/drawable/ic_4g_plus_mobiledata.xml +++ b/packages/SystemUI/res/drawable/ic_4g_plus_mobiledata.xml @@ -14,20 +14,20 @@ limitations under the License. --> + android:width="22dp" + android:height="17dp" + android:viewportWidth="22" + android:viewportHeight="17"> + android:pathData="M5.32,10.13h1.11v1.03H5.32v2.31H4.11v-2.31H0.35v-0.75l3.7-6.9h1.27V10.13z M1.69,10.13h2.42V5.4L1.69,10.13z" /> + android:pathData="M14.15,12.24l-0.22,0.27c-0.63,0.73-1.55,1.1-2.76,1.1c-1.08,0-1.92-0.36-2.53-1.07c-0.61-0.71-0.93-1.72-0.94-3.02V7.56 c0-1.39,0.28-2.44,0.84-3.13s1.39-1.04,2.51-1.04c0.95,0,1.69,0.26,2.23,0.79s0.83,1.28,0.89,2.26H12.9 c-0.05-0.62-0.22-1.1-0.52-1.45s-0.74-0.52-1.34-0.52c-0.72,0-1.24,0.23-1.57,0.7S8.97,6.37,8.96,7.4v2.03 c0,1,0.19,1.77,0.57,2.31c0.38,0.54,0.93,0.8,1.65,0.8c0.67,0,1.19-0.16,1.54-0.49l0.18-0.17V9.59h-1.82V8.52h3.07V12.24z" /> + android:pathData="M 19.3 5.74 L 19.3 3.39 L 18 3.39 L 18 5.74 L 15.65 5.74 L 15.65 7.04 L 18 7.04 L 18 9.39 L 19.3 9.39 L 19.3 7.04 L 21.65 7.04 L 21.65 5.74 Z" /> + android:pathData="M 0 0 H 22 V 17 H 0 V 0 Z" /> diff --git a/packages/SystemUI/res/drawable/ic_e_mobiledata.xml b/packages/SystemUI/res/drawable/ic_e_mobiledata.xml index 1a4a2e362b47d38873b7ec62a3646355ef7d690e..ca601d6c36ab107867119d64b01364c8d619bd86 100644 --- a/packages/SystemUI/res/drawable/ic_e_mobiledata.xml +++ b/packages/SystemUI/res/drawable/ic_e_mobiledata.xml @@ -14,14 +14,14 @@ limitations under the License. --> + android:width="6dp" + android:height="17dp" + android:viewportWidth="6" + android:viewportHeight="17"> + android:pathData="M5.1,8.88H1.57v3.53h4.1v1.07H0.32V3.52h5.28V4.6H1.57V7.8H5.1V8.88z" /> + android:pathData="M 0 0 H 6 V 17 H 0 V 0 Z" /> diff --git a/packages/SystemUI/res/drawable/ic_g_mobiledata.xml b/packages/SystemUI/res/drawable/ic_g_mobiledata.xml index d6a0488544fd7da7dc4d51c41e6290fc0c151f03..8ff6d7a5cc88ecbd7e57af5390609c1ce069c79d 100644 --- a/packages/SystemUI/res/drawable/ic_g_mobiledata.xml +++ b/packages/SystemUI/res/drawable/ic_g_mobiledata.xml @@ -14,14 +14,14 @@ limitations under the License. --> + android:width="7dp" + android:height="17dp" + android:viewportWidth="7" + android:viewportHeight="17"> + android:pathData="M6.73,12.24l-0.22,0.27c-0.63,0.73-1.55,1.1-2.76,1.1c-1.08,0-1.92-0.36-2.53-1.07c-0.61-0.71-0.93-1.72-0.94-3.02V7.56 c0-1.39,0.28-2.44,0.84-3.13S2.5,3.39,3.62,3.39c0.95,0,1.69,0.26,2.23,0.79s0.83,1.28,0.89,2.26H5.48 c-0.05-0.62-0.22-1.1-0.52-1.45S4.22,4.46,3.62,4.46c-0.72,0-1.24,0.23-1.57,0.7S1.54,6.37,1.53,7.4v2.03c0,1,0.19,1.77,0.57,2.31 c0.38,0.54,0.93,0.8,1.65,0.8c0.67,0,1.19-0.16,1.54-0.49l0.18-0.17V9.59H3.66V8.52h3.07V12.24z" /> + android:pathData="M 0 0 H 7 V 17 H 0 V 0 Z" /> diff --git a/packages/SystemUI/res/drawable/ic_h_mobiledata.xml b/packages/SystemUI/res/drawable/ic_h_mobiledata.xml index be85bbb4f79b7be2dd0550a4685ec153f9c22bdd..68ea58e33f313cdfddbf5b6d61550371f540d020 100644 --- a/packages/SystemUI/res/drawable/ic_h_mobiledata.xml +++ b/packages/SystemUI/res/drawable/ic_h_mobiledata.xml @@ -14,14 +14,14 @@ limitations under the License. --> + android:width="7dp" + android:height="17dp" + android:viewportWidth="7" + android:viewportHeight="17"> + android:pathData="M6.76,13.48H5.5v-4.6H1.49v4.6H0.24V3.52h1.25V7.8H5.5V3.52h1.26V13.48z" /> + android:pathData="M 0 0 H 7 V 17 H 0 V 0 Z" /> diff --git a/packages/SystemUI/res/drawable/ic_h_plus_mobiledata.xml b/packages/SystemUI/res/drawable/ic_h_plus_mobiledata.xml index f31f83c5141229f4b9ba1340bee971bbe1066c7e..4212800217ec0cba6eb3be075d1bfe9369b417eb 100644 --- a/packages/SystemUI/res/drawable/ic_h_plus_mobiledata.xml +++ b/packages/SystemUI/res/drawable/ic_h_plus_mobiledata.xml @@ -14,17 +14,17 @@ limitations under the License. --> + android:width="15dp" + android:height="17dp" + android:viewportWidth="15" + android:viewportHeight="17"> + android:pathData="M7.01,13.48H5.75v-4.6H1.74v4.6H0.49V3.52h1.25V7.8h4.01V3.52h1.26V13.48z" /> + android:pathData="M 12.16 5.74 L 12.16 3.39 L 10.86 3.39 L 10.86 5.74 L 8.51 5.74 L 8.51 7.04 L 10.86 7.04 L 10.86 9.39 L 12.16 9.39 L 12.16 7.04 L 14.51 7.04 L 14.51 5.74 Z" /> + android:pathData="M 0 0 H 15 V 17 H 0 V 0 Z" /> diff --git a/packages/SystemUI/res/drawable/ic_lte_mobiledata.xml b/packages/SystemUI/res/drawable/ic_lte_mobiledata.xml index e45b5e05aff073b50871687e29c971284dba8814..7536f5134cbe0fffa2a977d9f157d4584dcc7d44 100644 --- a/packages/SystemUI/res/drawable/ic_lte_mobiledata.xml +++ b/packages/SystemUI/res/drawable/ic_lte_mobiledata.xml @@ -14,20 +14,20 @@ limitations under the License. --> + android:width="18dp" + android:height="17dp" + android:viewportWidth="18" + android:viewportHeight="17"> + android:pathData="M1.34,12.4h3.9v1.07H0.08V3.52h1.26V12.4z" /> + android:pathData="M11.1,4.6H8.48v8.88H7.23V4.6H4.62V3.52h6.48V4.6z" /> + android:pathData="M17.34,8.88h-3.52v3.53h4.1v1.07h-5.35V3.52h5.28V4.6h-4.03V7.8h3.52V8.88z" /> + android:pathData="M 0 0 H 18 V 17 H 0 V 0 Z" /> diff --git a/packages/SystemUI/res/drawable/ic_lte_plus_mobiledata.xml b/packages/SystemUI/res/drawable/ic_lte_plus_mobiledata.xml index 553a5bdc021ea161dae6cb1a2740262eb7c0c6f5..302e3bdc5287fb5faac9291497875d7a7540c095 100644 --- a/packages/SystemUI/res/drawable/ic_lte_plus_mobiledata.xml +++ b/packages/SystemUI/res/drawable/ic_lte_plus_mobiledata.xml @@ -14,23 +14,23 @@ limitations under the License. --> + android:width="26dp" + android:height="17dp" + android:viewportWidth="26" + android:viewportHeight="17"> + android:pathData="M1.59,12.4h3.9v1.07H0.33V3.52h1.26V12.4z" /> + android:pathData="M11.35,4.6H8.73v8.88H7.48V4.6H4.87V3.52h6.48V4.6z" /> + android:pathData="M17.59,8.88h-3.52v3.53h4.1v1.07h-5.35V3.52h5.28V4.6h-4.03V7.8h3.52V8.88z" /> + android:pathData="M 23.32 5.74 L 23.32 3.39 L 22.02 3.39 L 22.02 5.74 L 19.67 5.74 L 19.67 7.04 L 22.02 7.04 L 22.02 9.39 L 23.32 9.39 L 23.32 7.04 L 25.67 7.04 L 25.67 5.74 Z" /> + android:pathData="M 0 0 H 26 V 17 H 0 V 0 Z" /> diff --git a/packages/SystemUI/res/drawable/qs_customizer_background.xml b/packages/SystemUI/res/drawable/qs_customizer_background.xml index 12d8016bf6a0c1d79175f4f8ae8112650fb42126..e15a734b0e052ee8755038c664312429c5d0a75f 100644 --- a/packages/SystemUI/res/drawable/qs_customizer_background.xml +++ b/packages/SystemUI/res/drawable/qs_customizer_background.xml @@ -14,6 +14,6 @@ limitations under the License. --> - - + + diff --git a/packages/SystemUI/res/drawable/qs_customizer_background_primary.xml b/packages/SystemUI/res/drawable/qs_customizer_background_primary.xml new file mode 100644 index 0000000000000000000000000000000000000000..abe1429697ac174daae371ec8cf2bc38eeedd22d --- /dev/null +++ b/packages/SystemUI/res/drawable/qs_customizer_background_primary.xml @@ -0,0 +1,21 @@ + + + + + + + + diff --git a/packages/SystemUI/res/drawable/qs_header_status_dot.xml b/packages/SystemUI/res/drawable/qs_customizer_background_transition.xml similarity index 74% rename from packages/SystemUI/res/drawable/qs_header_status_dot.xml rename to packages/SystemUI/res/drawable/qs_customizer_background_transition.xml index 69bfd49255fc3281f84f5a3d56cdb4d662318098..ed8f61a97c2aa7f1e69cec7b8000ff1846e2e5ef 100644 --- a/packages/SystemUI/res/drawable/qs_header_status_dot.xml +++ b/packages/SystemUI/res/drawable/qs_customizer_background_transition.xml @@ -13,7 +13,9 @@ See the License for the specific language governing permissions and limitations under the License. --> - - - + + + + + + diff --git a/packages/SystemUI/res/drawable/qs_customizer_toolbar.xml b/packages/SystemUI/res/drawable/qs_customizer_toolbar.xml new file mode 100644 index 0000000000000000000000000000000000000000..557cae150303083640221f2d6ad073fb643939b0 --- /dev/null +++ b/packages/SystemUI/res/drawable/qs_customizer_toolbar.xml @@ -0,0 +1,23 @@ + + + + + + + + diff --git a/packages/SystemUI/res/drawable/rounded_full_bg_bottom.xml b/packages/SystemUI/res/drawable/rounded_full_bg_bottom.xml index c3e36f211845054c51b1f02a36ac4464a928dabc..a4b3c99f7ec6b59d13f877a906d17a052c9759c2 100644 --- a/packages/SystemUI/res/drawable/rounded_full_bg_bottom.xml +++ b/packages/SystemUI/res/drawable/rounded_full_bg_bottom.xml @@ -1,4 +1,18 @@ + diff --git a/packages/SystemUI/res/drawable/rounded_ripple.xml b/packages/SystemUI/res/drawable/rounded_ripple.xml new file mode 100644 index 0000000000000000000000000000000000000000..5588eb21ad8edf9e479b15086f699421847586b4 --- /dev/null +++ b/packages/SystemUI/res/drawable/rounded_ripple.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/packages/SystemUI/res/drawable/stat_sys_roaming.xml b/packages/SystemUI/res/drawable/stat_sys_roaming.xml index bd2edf39d92919fcc4d7e0b739650344bfe2c354..0dd9f5a39f91f3a25bd9e4d5859c8a980ca4b6b5 100644 --- a/packages/SystemUI/res/drawable/stat_sys_roaming.xml +++ b/packages/SystemUI/res/drawable/stat_sys_roaming.xml @@ -1,28 +1,27 @@ - - - - \ No newline at end of file + android:viewportWidth="17" + android:viewportHeight="17"> + + + + diff --git a/packages/SystemUI/res/layout/car_volume_dialog.xml b/packages/SystemUI/res/layout/car_volume_dialog.xml index e45c0f9f5e4eba34cd1ed4e43ac41777ad1a8290..94cc001ca01a0dfe4f230489c542f4ecc011d73e 100644 --- a/packages/SystemUI/res/layout/car_volume_dialog.xml +++ b/packages/SystemUI/res/layout/car_volume_dialog.xml @@ -38,7 +38,7 @@ android:orientation="vertical" android:clipChildren="false" android:clipToPadding="false" - android:elevation="@dimen/volume_panel_elevation" > + android:elevation="@dimen/volume_dialog_elevation" > diff --git a/packages/SystemUI/res/layout/qs_customize_panel_content.xml b/packages/SystemUI/res/layout/qs_customize_panel_content.xml index 04d0e6524eacf92efa0028bde512cc58d14303d4..d70a37ae15b2d2f64184057726a5d0ecae09bcaf 100644 --- a/packages/SystemUI/res/layout/qs_customize_panel_content.xml +++ b/packages/SystemUI/res/layout/qs_customize_panel_content.xml @@ -15,24 +15,44 @@ limitations under the License. --> - - - -> + + android:layout_height="@*android:dimen/quick_qs_offset_height" + android:background="@android:color/transparent" /> - + android:layout_marginLeft="@dimen/notification_side_paddings" + android:layout_marginRight="@dimen/notification_side_paddings" + android:orientation="vertical" + android:background="@drawable/qs_customizer_background"> + + + + diff --git a/packages/SystemUI/res/layout/quick_qs_status_icons.xml b/packages/SystemUI/res/layout/quick_qs_status_icons.xml index cd3271fa5374a5cf94c2bd442fbb81427a5aa824..c03f25c751016f2af0bb4f15e486469c3e760049 100644 --- a/packages/SystemUI/res/layout/quick_qs_status_icons.xml +++ b/packages/SystemUI/res/layout/quick_qs_status_icons.xml @@ -21,7 +21,7 @@ android:layout_marginTop="8dp" android:layout_marginBottom="14dp" android:layout_below="@id/quick_status_bar_system_icons" - > + android:paddingEnd="@dimen/signal_cluster_battery_padding" > - - diff --git a/packages/SystemUI/res/layout/quick_settings_header_info.xml b/packages/SystemUI/res/layout/quick_settings_header_info.xml index 03e8451e59dc3e2e6dc6dcf95695e6ce9ad0d0d2..54baa4a82a0bb27a1db94736b2983dcc0ad46bd9 100644 --- a/packages/SystemUI/res/layout/quick_settings_header_info.xml +++ b/packages/SystemUI/res/layout/quick_settings_header_info.xml @@ -54,15 +54,14 @@ android:layout_marginStart="@dimen/qs_header_alarm_text_margin_start" android:textAppearance="@style/TextAppearance.QS.TileLabel" /> - + android:layout_width="1dp" + android:layout_height="match_parent" + android:layout_marginStart="10dp" + android:layout_marginEnd="10dp" + android:background="@android:color/white" + android:backgroundTint="?android:attr/textColorPrimary" /> + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/layout/status_bar_wifi_group.xml b/packages/SystemUI/res/layout/status_bar_wifi_group.xml new file mode 100644 index 0000000000000000000000000000000000000000..08cef55e03933fadcbc0bb7eb8129c259f3d649c --- /dev/null +++ b/packages/SystemUI/res/layout/status_bar_wifi_group.xml @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/layout/system_icons.xml b/packages/SystemUI/res/layout/system_icons.xml index 1fafb2fc72d64eb324669a2485a3e41ae51ae149..258b82aacb2e3407793e6ceb48cad2f9e0ededb8 100644 --- a/packages/SystemUI/res/layout/system_icons.xml +++ b/packages/SystemUI/res/layout/system_icons.xml @@ -24,14 +24,10 @@ android:layout_width="0dp" android:layout_weight="1" android:layout_height="match_parent" + android:paddingEnd="4dp" android:gravity="center_vertical" android:orientation="horizontal"/> - - + android:clipChildren="false" + android:clipToPadding="false"> + android:clipChildren="false" + android:clipToPadding="false" > @@ -59,10 +64,10 @@ android:minWidth="@dimen/volume_dialog_panel_width" android:layout_height="wrap_content" android:orientation="vertical" + android:translationZ="@dimen/volume_dialog_elevation" android:clipChildren="false" android:clipToPadding="false" - android:background="@drawable/rounded_bg_full" - android:elevation="@dimen/volume_panel_elevation" > + android:background="@drawable/rounded_bg_full" > diff --git a/packages/SystemUI/res/layout/volume_dialog_row.xml b/packages/SystemUI/res/layout/volume_dialog_row.xml index bcc369252c297b32ee5c878b75008d6030238823..6128da8627a951fda5088b63c86c928f365db47e 100644 --- a/packages/SystemUI/res/layout/volume_dialog_row.xml +++ b/packages/SystemUI/res/layout/volume_dialog_row.xml @@ -60,7 +60,7 @@ style="@style/VolumeButtons" android:layout_width="@dimen/volume_dialog_tap_target_size" android:layout_height="@dimen/volume_dialog_tap_target_size" - android:background="?android:selectableItemBackgroundBorderless" + android:background="@drawable/ripple_drawable_20dp" android:layout_marginBottom="@dimen/volume_dialog_row_margin_bottom" android:tint="@color/accent_tint_color_selector" android:soundEffectsEnabled="false" /> diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index 214af1ee0a55feae3d0ba297942674a2dc2bc9c0..792b642a7b881da6769a7c8f7daa7d5307b24d76 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -33,7 +33,6 @@ "Voortdurend" "Kennisgewings" "Battery is amper pap" - "Battery is amper pap. Skakel Batterybespaarder aan" "%s oor" "%s oor; ongeveer %s oor op grond van jou gebruik" "%s oor; ongeveer %s oor" @@ -73,11 +72,10 @@ "Skermkiekie" "Stoor tans skermkiekie..." "Stoor tans skermkiekie..." - "Skermkiekie word tans gestoor" "Skermkiekie is gestoor" "Tik om jou skermkiekie te bekyk" - "Kon nie skermkiekie neem nie" - "Kon nie skermkiekie stoor nie" + "Kon nie skermkiekie stoor nie" + "Probeer weer skermkiekie neem" "Kan weens beperkte bergingspasie nie skermkiekie stoor nie" "Die program of jou organisasie laat nie toe dat skermkiekies geneem word nie" "USB-lêeroordrag-opsies" @@ -348,7 +346,7 @@ "Aan by sonsondergang" "Tot sonsopkoms" "Aan om %s" - "Tot %s" + "Tot %s" "NFC" "NFC is gedeaktiveer" "NFC is geaktiveer" @@ -432,7 +430,8 @@ "%s sal alles begin vasvang wat op jou skerm gewys word." "Moenie weer wys nie" "Vee alles uit" - "Moenie Steur Nie versteek tans kennisgewings" + "Bestuur kennisgewings" + "Moenie Steur Nie versteek tans kennisgewings" "Begin nou" "Geen kennisgewings nie" "Profiel kan gemonitor word" @@ -538,7 +537,8 @@ "%1$s. Tik om op vibreer te stel." "%1$s. Tik om te demp." "%s volumekontroles" - "Oproepe en kennisgewings sal lui" + + "Media-uitvoer" "Foonoproep-uitvoer" "Geen toestelle gekry nie" @@ -625,6 +625,7 @@ "%1$s %2$s" "kennisgewingkontroles" "kennisgewing-sluimeropsies" + "Sluimer" "ONTDOEN" "Sluimer vir %1$s" @@ -688,6 +689,8 @@ "Battery" "Horlosie" "Kopstuk" + + "Oorfone is gekoppel" "Kopstuk is gekoppel" "Databespaarder" @@ -811,6 +814,7 @@ "Skermkiekies" "Algemene boodskappe" "Berging" + "Wenke" "Kitsprogramme" "Kitsprogramme hoef nie geïnstalleer te word nie." "Programinligting" @@ -838,4 +842,11 @@ "Laat %1$s toe om skyfies uit enige program te gebruik" "Laat toe" "Weier" + "Tik om Batterybespaarder te skeduleer" + "Skakel outomaties aan wanneer battery by %d%% is" + "Nee, dankie" + "Batterybespaarder-skedule is aangeskakel" + "Batterybespaarder sal outomaties aanskakel wanneer battery onder %d%% is." + "Instellings" + "Het dit" diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index 306e418f0ca444674e7d377adef27d7ada94b2bb..c3006889c814c66dec63c510c48c2a5019559dca 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -33,17 +33,13 @@ "በመካሄድ ላይ ያለ" "ማሳወቂያዎች" "የባትሪ ኃይል አነስተኛ ነው" - "ባትሪ ዝቅተኛ ነው። የባትሪ ቆጣቢን ያብሩ" "%s ይቀራል" "%s ይቀራል፣ በእርስዎ አጠቃቀም ላይ በመመረት %s ገደማ ይቀራል" "%s ይቀራል፣ %s ገደማ ይቀራል" "%s ይቀራል። ባትሪ ቆጣቢ በርቷል።" - - - - - - + "በዩኤስቢ በኩል ኃይል መሙላት አይቻልም። ከመሣሪያዎ ጋር የመጣውን ኃይል መሙያ ይጠቀሙ።" + "በዩኤስቢ በኩል ኃይል መሙላት አይቻልም" + "ከእርስዎ መሣሪያ ጋር የመጣውን ኃይል መሙያ ይጠቀሙ" "ቅንብሮች" "ባትሪ ቆጣቢ ይብራ?" "አብራ" @@ -76,11 +72,10 @@ "ቅጽበታዊ ገጽ እይታ" "ቅጽበታዊ ገጽ እይታ በማስቀመጥ ላይ..." "ቅጽበታዊ ገጽ እይታ በማስቀመጥ ላይ..." - "ቅጽበታዊ ገጽ እይታ እየተቀመጠ ነው" "ቅጽበታዊ ገጽ እይታ ተቀምጧል" "የእርስዎን ቅጽበታዊ ገጽ እይታ ለማየት መታ ያድርጉ" - "ቅጽበታዊ ገጽ እይታን ማንሳት አልተቻለም" - "ቅጽበታዊ ገጽ ዕይታን በማስቀመጥ ላይ ሳለ ችግር አጋጥሟል" + "ቅጽበታዊ ገጽ ዕይታን ማስቀመጥ አልተቻለም" + "ቅጽበታዊ ገጽ ዕይታን እንደገና ማንሳት ይሞክሩ" "ባለው ውሱን የማከማቻ ቦታ ምክንያት ቅጽበታዊ ገጽ ዕይታን ማስቀመጥ አይችልም" "ቅጽበታዊ ገጽ እይታዎችን ማንሳት በመተግበሪያው ወይም በእርስዎ ድርጅት አይፈቀድም" "የUSB ፋይል ሰደዳ አማራጮች" @@ -151,7 +146,6 @@ "ተገናኝቷል።" "በማገናኘት ላይ።" "ጂፒአርኤስ" - "1 X" "ኤችኤስፒኤ" "3ጂ" "3.5ጂ" @@ -211,8 +205,7 @@ "የአውሮፕላን ሁነታ በርቷል።" "የአውሮፕላን ሁነታ ጠፍቷል።" "የአውሮፕላን ሁነታ በርቷል።" - - + "አትረብሽ በርቷል።" "አትረብሽ በርቷል፣ ሙሉ ለሙሉ ጸጥታ።" "አትረብሽ በርቷል፣ ማንቂያዎች ብቻ።" "አትረብሽ።" @@ -278,7 +271,7 @@ "የማወራረጃ ምግቦች መያዣ" "የማያ ገጽ ማቆያ" "ኤተርኔት" - "ለተጨማሪ አማራጮች አዶዎቹ ላይ ተጭነው ይያዟቸው" + "ተጨማሪ አማራጮችን ለማግኘት አዶዎችን ነክተው ይያዙ" "አትረብሽ" "ቅድሚያ የሚሰጠው ብቻ" "ማንቂያዎች ብቻ" @@ -353,7 +346,7 @@ "ጸሐይ ስትጠልቅ ይበራል" "ጸሐይ እስክትወጣ ድረስ" "%s ላይ ይበራል" - "እስከ %s ድረስ" + "እስከ %s ድረስ" "ኤንኤፍሲ" "ኤንኤፍሲ ተሰናክሏል" "ኤንኤፍሲ ነቅቷል" @@ -437,8 +430,8 @@ "%s በማያ ገጽዎ ላይ የታየውን ነገር በሙሉ ማንሳት ይጀምራል።" "ዳግመኛ አታሳይ" "ሁሉንም አጽዳ" - - + "ማሳወቂያዎችን ያስተዳድሩ" + "አትረብሽ ማሳወቂያዎችን እየደበቀ ነው" "አሁን ጀምር" "ምንም ማሳወቂያ የለም" "መገለጫ ክትትል ሊደረግበት ይችላል" @@ -544,9 +537,8 @@ "%1$s። ወደ ንዝረት ለማቀናበር መታ ያድርጉ።" "%1$s። ድምጸ-ከል ለማድረግ መታ ያድርጉ።" "%s የድምፅ መቆጣጠሪያዎች" - "ጥሪዎች እና ማሳወቂያዎች ይነዝራሉ" - "ጥሪዎች እና ማሳወቂያዎች ድምፀ-ከል ይሆናሉ" - "ጥሪዎች እና ማሳወቂያዎች ይደውላሉ" + + "የሚዲያ ውጽዓት" "የስልክ ጥሪ ውፅዓት" "ምንም መሣሪያዎች አልተገኙም" @@ -633,6 +625,7 @@ "%1$s %2$s" "የማሳወቂያ መቆጣጠሪያዎች" "የማሳወቂያ ማሸለቢያ አማራጮች" + "አሸልብ" "ቀልብስ" "ለ%1$s አሸልቧል" @@ -696,6 +689,8 @@ "ባትሪ" "ሰዓት" "ጆሮ ማዳመጫ" + + "የጆር ማዳመጫዎች ተገናኝተዋል" "የጆሮ ማዳመጫ ተገናኝቷል" "ውሂብ ቆጣቢ" @@ -730,8 +725,9 @@ "የቀኝ ቁልፍ ኮድ" "የግራ አዶ" "የቀኝ አዶ" - "ሰቆችን ለማከል ይጎትቱ" + "ፋይሎችን ለማከል ይዘት ይጎትቱ" "ለማስወገድ ወደዚህ ይጎትቱ" + "ቢያንስ 6 ሰቆች ያስፈልገዎታል" "አርትዕ" "ሰዓት" @@ -818,6 +814,7 @@ "ቅጽበታዊ ገጽ እይታዎች" "አጠቃላይ መልዕክቶች" "ማከማቻ" + "ፍንጮች" "የቅጽበት መተግበሪያዎች" "ቅጽበታዊ መተግበሪያዎች መጫን አያስፈልጋቸውም።" "የመተግበሪያ መረጃ" @@ -835,7 +832,9 @@ "ተካ" "በጀርባ ውስጥ የሚያሄዱ መተግበሪያዎች" "በባትሪ እና ውሂብ አጠቃቀም ላይ ዝርዝሮችን ለማግኘት መታ ያድርጉ" - "የተንቀሳቃሽ ስልክ ውሂብ ይጥፋ?" + "የተንቀሳቃሽ ስልክ ውሂብ ይጥፋ?" + "በ%s በኩል የውሂብ ወይም የበይነመረቡ መዳረሻ አይኖረዎትም። በይነመረብ በWi-Fi በኩል ብቻ ነው የሚገኝ የሚሆነው።" + "የእርስዎ አገልግሎት አቅራቢ" "አንድ መተግበሪያ የፍቃድ ጥያቄ እያገደ ስለሆነ ቅንብሮች ጥያቄዎን ማረጋገጥ አይችሉም።" "%1$s%2$s ቁራጮችን እንዲያሳይ ይፈቀድለት?" "- ከ%1$s የመጣ መረጃን ማንበብ ይችላል" @@ -843,4 +842,11 @@ "%1$s ከማንኛውም መተግበሪያ የመጡ ቁራጮችን እንዲያሳይ ፍቀድለት" "ፍቀድ" "ከልክል" + "ለባትሪ ቆጣቢ መርሐግብርን ለማስያዝ መታ ያድርጉ" + "ባትሪ %d%% ላይ ሲሆን በራስ-ሰር ያብሩ" + "አይ፣ አመሰግናለሁ" + "የባትሪ ቆጣቢ መርሐግብር በርቷል" + "ባትሪ ልክ ከ%d%% በታች ሲሆን ባትሪ ቆጣቢ በራስ-ሰር ይበራል።" + "ቅንብሮች" + "ገባኝ" diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index 611753a1cd2523dd89ea6c51a6bd5d16ef1eef46..fbbe502aff7d64ec1450dcda5144193c67857b95 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -37,17 +37,13 @@ "مستمر" "الإشعارات" "البطارية منخفضة" - "طاقة البطارية منخفضة، لذا يُرجى تفعيل الوضع \"توفير شحن البطارية\"." "متبقي %s" "طاقة البطارية المتبقية %s ويتبقى على نفادها %s تقريبًا بناءً على استخدامك." "طاقة البطارية المتبقية %s ويتبقى على نفادها %s تقريبًا." "يتبقى %s. تم تفعيل ميزة توفير شحن البطارية." - - - - - - + "‏يتعذّر الشحن باستخدام USB. استخدم الشاحن المرفق بجهازك." + "‏يتعذّر الشحن باستخدام USB." + "استخدم الشاحن المرفق بجهازك." "الإعدادات" "هل تريد تفعيل ميزة توفير شحن البطارية؟" "تشغيل" @@ -80,11 +76,10 @@ "لقطة شاشة" "جارٍ حفظ لقطة الشاشة..." "جارٍ حفظ لقطة الشاشة..." - "جارٍ حفظ لقطة الشاشة." "تم حفظ لقطة الشاشة." "انقر لعرض لقطة الشاشة." - "تعذَّر الحصول على لقطة شاشة" - "حدثت مشكلة أثناء حفظ لقطة الشاشة." + "تعذّر حفظ لقطة الشاشة" + "جرّب أخذ لقطة الشاشة مرة أخرى" "يتعذر حفظ لقطة الشاشة لأن مساحة التخزين المتاحة محدودة." "يحظر التطبيق أو تحظر مؤسستك التقاط لقطات شاشة" "‏خيارات نقل الملفات عبر USB" @@ -155,7 +150,6 @@ "متصل." "جارٍ الاتصال." "‏شبكة GPRS" - "1‎ X‎" "HSPA" "شبكة الجيل الثالث" "‏شبكة 3.5G" @@ -215,8 +209,7 @@ "تشغيل وضع الطائرة." "تم إيقاف وضع الطائرة." "تم تشغيل وضع الطائرة." - - + "وضع الرجاء عدم الإزعاج مفعّل" "تم تشغيل \"عدم الإزعاج، كتم الصوت تمامًا\"." "تم تشغيل \"عدم الإزعاج، التنبيهات فقط\"." "عدم الإزعاج." @@ -286,7 +279,7 @@ "حالة الحلويات" "شاشة التوقف" "Ethernet" - "اضغط مع الاستمرار على الرموز لمزيد من الخيارات" + "انقر مع الاستمرار على الرموز للحصول على المزيد من الخيارات." "عدم الإزعاج" "الأولوية فقط" "التنبيهات فقط" @@ -365,7 +358,7 @@ "تفعيل عند غروب الشمس" "حتى شروق الشمس" "تفعيل الإعداد في %s" - "حتى %s" + "حتى %s" "‏الاتصال القريب المدى (NFC)" "تم تعطيل الاتصال القريب المدى" "تم تمكين الاتصال القريب المدى" @@ -449,8 +442,8 @@ "%s سيبدأ التقاط كل شيء يتم عرضه على الشاشة." "عدم الإظهار مرة أخرى" "محو الكل" - - + "إدارة الإشعارات" + "يؤدي تفعيل وضع الرجاء عدم الإزعاج إلى إخفاء الإشعارات." "البدء الآن" "ليس هناك أي اشعارات" "ربما تتم مراقبة الملف الشخصي" @@ -556,9 +549,8 @@ "‏%1$s. انقر للتعيين على الاهتزاز." "‏%1$s. انقر لكتم الصوت." "‏%s عنصر للتحكم في مستوى الصوت" - "سيهتز الهاتف عند تلقي المكالمات والإشعارات" - "سيتم كتم صوت الهاتف عند تلقي المكالمات والإشعارات" - "سيصدِر الهاتف رنينًا عند تلقي المكالمات والإشعارات" + + "إخراج الوسائط" "إخراج المكالمة الهاتفية" "لم يتم العثور على أي أجهزة." @@ -653,6 +645,7 @@ "%1$s %2$s" "عناصر التحكم في الإشعارات" "خيارات تأجيل الإشعارات" + "تأجيل" "تراجع" "تم تأجيل الإشعار لمدة %1$s" @@ -724,6 +717,8 @@ "البطارية" "الساعة" "سماعة الرأس" + + "تم توصيل سماعات رأس" "تم توصيل سماعات رأس" "توفير البيانات" @@ -758,8 +753,9 @@ "رمز مفتاح اليمين" "رمز اليسار" "رمز اليمين" - "اسحب لإضافة مربعات" + "انقر باستمرار مع السحب لإضافة المربعات." "اسحب هنا للإزالة" + "تحتاج إلى 6 مربعات على الأقل." "تعديل" "الوقت" @@ -846,6 +842,7 @@ "لقطات الشاشة" "رسائل عامة" "سعة التخزين" + "تلميحات" "التطبيقات الفورية" "لا تتطلب التطبيقات الفورية إجراء التثبيت." "معلومات عن التطبيق" @@ -863,7 +860,9 @@ "استبدال" "التطبيقات التي تعمل في الخلفية" "انقر للحصول على تفاصيل حول البطارية واستخدام البيانات" - "هل تريد إيقاف تشغيل بيانات الجوال؟" + "هل تريد إيقاف بيانات الجوّال؟" + "‏لن تتمكّن من الدخول إلى البيانات أو الإنترنت من خلال %s. ولن يتوفر اتصال الإنترنت إلا عبر Wi-Fi." + "مشغّل شبكة الجوّال" "لا يمكن للإعدادات التحقق من ردك لأن هناك تطبيقًا يحجب طلب الإذن." "هل تريد السماح لتطبيق %1$s بعرض شرائح %2$s؟" "- يستطيع قراءة المعلومات من %1$s" @@ -871,4 +870,11 @@ "السماح لتطبيق %1$s بعرض شرائح من أي تطبيق" "سماح" "رفض" + "انقر لجدولة \"توفير شحن البطارية\"." + "يمكنك تفعيل الميزة تلقائيًا عندما تصل نسبة شحن البطارية إلى %d%%." + "لا، شكرًا" + "تم تفعيل جدولة \"توفير شحن البطارية\"." + "سيتم تفعيل ميزة \"توفير شحن البطارية\" عندما تنخفض البطارية عن %d%%." + "الإعدادات" + "حسنًا" diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index ed105ee8116f0e9e791d25283b34d85be3c43746..39f9e093b23170d4302dfa7241e8431a9fe72e80 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -34,17 +34,12 @@ "জাননীসমূহ" "বেটাৰি কম আছে" "%s বাকী আছে" - - - - + "%s অৱশিষ্ট আছে, আপোনাৰ ব্যৱহাৰক ভিত্তি কৰি প্ৰায় %s বাকী আছে" + "%s অৱশিষ্ট আছে, প্ৰায় %s বাকী" "%s বাকী আছে। বেটাৰি সঞ্চয়কাৰী অন হৈ আছে।" - - - - - - + "ইউএছবি জৰিয়তে চ্চাৰ্জ কৰিব নোৱাৰি। আপোনাৰ ডিভাইচৰ লগত পোৱা চ্চাৰ্জাৰটো ব্যৱহাৰ কৰক।" + "ইউএছবি জৰিয়তে চ্চাৰ্জ কৰিব নোৱাৰি" + "আপোনাৰ ডিভাইচৰ লগত পোৱা চ্চাৰ্জাৰটো ব্যৱহাৰ কৰক।" "ছেটিংসমূহ" "বেটাৰি সঞ্চয়কাৰী অন কৰেনে?" "অন কৰক" @@ -74,20 +69,16 @@ "এই ডিভাইচটোত বর্তমান ছাইন ইন হৈ থকা ব্যৱহাৰকাৰীজনে ইউএছবি ডিবাগিং অন কৰিব নোৱাৰে। এই সুবিধাটো ব্যৱহাৰ কৰিবলৈ হ\'লে মুখ্য ব্যৱহাৰকাৰী হিচাপে ছাইন ইন কৰক।" "স্ক্ৰীণ পূর্ণ কৰিবলৈ জুম কৰক" "স্ক্ৰীণ পূর্ণ কৰিবলৈ প্ৰসাৰিত কৰক" - - + "স্ক্ৰীণশ্বট" "স্ক্ৰীণশ্বট ছেভ কৰি থকা হৈছে…" "স্ক্ৰীণশ্বট ছেভ কৰি থকা হৈছে…" - - - - + "স্ক্ৰীণশ্বট ছেভ কৰা হ\'ল" + "আপোনাৰ স্ক্ৰীণশ্বট চাবলৈ টিপক" - - + "সঞ্চয়াগাৰত সীমিত খালী ঠাই থকাৰ বাবে স্ক্ৰীণশ্বট ছেভ কৰিব পৰা নগ\'ল" "এপটোৱে বা আপোনাৰ প্ৰতিষ্ঠানে স্ক্ৰীণশ্বট ল\'বলৈ অনুমতি নিদিয়ে" "ইউএছবিৰে ফাইল স্থানান্তৰণৰ বিকল্পসমূহ" "মিডিয়া প্লেয়াৰ (এমটিপি) হিচাপে সংলগ্ন কৰক" @@ -97,8 +88,7 @@ "গৃহ পৃষ্ঠাৰ বুটাম" "মেনু" "দিব্যাংগসকলৰ বাবে থকা সুবিধাসমূহ" - - + "স্ক্ৰীণ ঘূৰাওক" "অৱলোকন" "সন্ধান কৰক" "কেমেৰা" @@ -113,14 +103,10 @@ "কেমেৰা খোলক" "নতুন কাৰ্যৰ চানেকি বাছনি কৰক" "বাতিল কৰক" - - - - - - - - + "ফিংগাৰপ্ৰিণ্ট ছেন্সৰটো স্পৰ্শ কৰক" + "ফিংগাৰপ্ৰিণ্ট আইকন" + "এপ্লিকেশ্বন আইকন" + "সহায় বাৰ্তাৰ ক্ষেত্ৰ" "উপযোগিতা অনুসৰি জুম কৰা বুটাম।" "স্ক্ৰীণৰ আকাৰ ডাঙৰ কৰিবলৈ জুম কৰক।" "ব্লুটুথ সংযোগ হ\'ল।" @@ -161,42 +147,28 @@ "অফ।" "সংযোগ কৰা হ’ল।" "সংযোগ কৰি থকা হৈছে।" - - - - - - - - - - - - - - - - - - - - - - - - + "জিপিআৰএছ" + "HSPA" + "3G" + "3.5G" + "3.5G+" + "4G" + "4G+" + "এলটিই" + "এলটিই+" + "CDMA" + "ৰ\'মিং" + "EDGE" "ৱাই-ফাই" "ছিম নাই।" "ম\'বাইল ডেটা" "ম\'বাইল ডেটা অন অৱস্থাত আছে" - - + "ম\'বাইল ডেটা অফ হৈ আছে" "ব্লুটুথ টেডাৰিং।" "এয়াৰপ্লেইন ম\'ড।" "ভিপিএন অন অৱস্থাত আছে।" "কোনো ছিম কাৰ্ড নাই" - - + "বাহক নেটৱৰ্কৰ পৰিৱৰ্তন" "বেটাৰিৰ বিৱৰণসমূহ খোলক" "%d শতাংশ বেটাৰি।" "বেটাৰি চ্চাৰ্জ কৰি থকা হৈছে, %d শতাংশ।" @@ -235,8 +207,7 @@ "এয়াৰপ্লেইন ম\'ড অন হৈ আছে৷" "এয়াৰপ্লেইন ম\'ড অফ কৰা হ\'ল।" "এয়াৰপ্লেইন ম\'ড অন কৰা হ\'ল।" - - + "অসুবিধা নিদিব অন হৈ আছে।" "অসুবিধা নিদিব অন হৈ আছে, সম্পূর্ণ নিৰৱতা।" "অসুবিধা নিদিব অন হৈ আছে, মাত্ৰ এলাৰ্মসমূহ বাজিব।" "অসুবিধা নিদিব।" @@ -302,8 +273,7 @@ "মিষ্টান্ন ভাণ্ডাৰ" "স্ক্ৰীণ ছেভাৰ" "ইথাৰনেট" - - + "অধিক বিকল্পৰ বাবে আইকনসমূহ স্পৰ্শ কৰি হেঁচি ধৰক" "অসুবিধা নিদিব" "কেৱল গুৰুত্বপূৰ্ণ" "কেৱল এলাৰ্মসমূহ" @@ -312,16 +282,11 @@ "ব্লুটুথ (%dটা ডিভাইচ)" "ব্লুটুথ বন্ধ অৱস্থাত আছে" "কোনো যোৰা লগোৱা ডিভাইচ উপলব্ধ নহয়।" - - - - - - - - - - + "বেটাৰি %s" + "অডিঅ’" + "হেডছেট" + "ইনপুট" + "অন কৰি থকা হৈছে…" "উজ্জ্বলতা" "স্বয়ং-ঘূৰ্ণন" "স্বয়ং-ঘূৰ্ণন স্ক্ৰীণ" @@ -346,8 +311,7 @@ "ৱাই-ফাই অফ" "ৱাই-ফাই অন হৈ আছে" "কোনো ৱাই-ফাই নেটৱৰ্ক নাই" - - + "অন কৰি থকা হৈছে…" "কাষ্ট" "কাষ্টিং" "নাম নথকা ডিভাইচ" @@ -364,11 +328,12 @@ "সংযোগ কৰি থকা হৈছে..." "টেডাৰ কৰি থকা হৈছে" "হটস্পট" - - - - - + "অন কৰি থকা হৈছে…" + "ডেটা সঞ্চয়কাৰী অন হৈ আছে" + + %d ডিভাইচ + %d ডিভাইচ + "জাননীসমূহ" "ফ্লাশ্বলাইট" "ম\'বাইল ডেটা" @@ -378,15 +343,11 @@ "%s ব্যৱহৃত" "%s সীমা" "%s সকীয়নি" - - + "কৰ্মস্থানৰ প্ৰ\'ফাইল" "ৰাতিৰ লাইট" - - - - - - + "সূৰ্যাস্তত অন কৰক" + "সূৰ্যোদয়ৰ লৈকে" + "%sত অন কৰক" "NFC" @@ -436,12 +397,9 @@ "সম্পূর্ণ \n নিৰৱতা" "কেৱল\nগুৰুত্বপূৰ্ণ" "কেৱল\nএলাৰ্মসমূহ" - - - - - - + "%2$s • চ্চাৰ্জ কৰি থকা হৈছে (সম্পূৰ্ণ হ\'বলৈ %s বাকী)" + "%2$s • দ্ৰুতগতিৰে চ্চাৰ্জ কৰি থকা হৈছে (সম্পূৰ্ণ হ\'বলৈ %s বাকী)" + "%2$s • লাহে লাহে চ্চাৰ্জ কৰি থকা হৈছে (সম্পূৰ্ণ হ\'বলৈ %s বাকী)" "ব্যৱহাৰকাৰী সলনি কৰক" "ব্যৱহাৰকাৰী সলনি কৰক, বৰ্তমানৰ ব্যৱহাৰকাৰী %s" "বর্তমানৰ ব্যৱহাৰকাৰী %s" @@ -477,7 +435,7 @@ "সকলো মচক" - + "এতিয়াই আৰম্ভ কৰক" "কোনো জাননী নাই" @@ -546,29 +504,21 @@ "ছেট আপ কৰক" "%1$s. %2$s" "এতিয়া অফ কৰক" - - + "ধ্বনিৰ ছেটিংসমূহ" "সম্প্ৰসাৰণ কৰক" "সংকুচিত কৰক" - - + "আউটপুট ডিভাইচ সলনি কৰক" "স্ক্ৰীণ পিন কৰা হ\'ল" "এই কাৰ্যই আপুনি আনপিন নকৰালৈকে ইয়াক দেখা পোৱা অৱস্থাত ৰাখে। আনপিন কৰিবলৈ \'পিছলৈ যাওক\' আৰু \'অৱলোকন\'-ত স্পৰ্শ কৰি থাকক।" - - + "এই কাৰ্যই আপুনি আনপিন নকৰালৈকে ইয়াক দেখা পোৱা অৱস্থাত ৰাখে। আনপিন কৰিবলৈ পিছলৈ যাওক আৰু হ\'মত স্পৰ্শ কৰি সেঁচি ধৰক।" "এই কাৰ্যই আপুনি আনপিন নকৰালৈকে ইয়াক দেখা পোৱা অৱস্থাত ৰাখে। আনপিন কৰিবলৈ \'অৱলোকন\'-ত স্পৰ্শ কৰি থাকক।" - - - - - - + "এই কাৰ্যই আপুনি আনপিন নকৰালৈকে ইয়াক দেখা পোৱা অৱস্থাত ৰাখে। আনপিন কৰিবলৈ পিছলৈ যাওক আৰু হ\'মত স্পৰ্শ কৰি সেঁচি ধৰক।" + "এই স্ক্ৰীণখন আনপিন কৰিবলৈ পিছলৈ যাওক আৰু অৱলোকন বুটামত স্পৰ্শ কৰি হেঁচি ধৰক।" + "এই স্ক্ৰীণখন আনপিন কৰিবলৈ পিছলৈ যাওক আৰু হ\'ম বুটামত স্পৰ্শ কৰি হেঁচি ধৰক।" "বুজি পালোঁ" "নালাগে, ধন্যবাদ" - - - - + "স্ক্ৰীণ পিন কৰা হ\'ল" + "স্ক্ৰীণ আনপিন কৰা হ\'ল" "%1$s লুকুৱাবনে?" "আপুনি ইয়াক পৰৱৰ্তী সময়ত ছেটিংসমূহত অন কৰিলে ই পুনৰ প্ৰকট হ\'ব।" "লুকুৱাওক" @@ -591,9 +541,8 @@ "%1$s। মিউট কৰিবলৈ টিপক। দিব্য়াংগসকলৰ বাবে থকা সেৱা মিউট হৈ থাকিব পাৰে।" "%1$s। কম্পন অৱস্থাত ছেট কৰিবলৈ টিপক।" "%1$s। মিউট কৰিবলৈ টিপক।" - - - + "%s ধ্বনি নিয়ন্ত্ৰণসমূহ" + "মিডিয়া আউটপুট" "ফ\'ন কল আউটপুট" @@ -649,45 +598,35 @@ "অফ" "জাননী নিয়ন্ত্ৰণৰ অধিক কৰ্তৃত্বৰ সৈতে আপুনি এটা এপৰ জাননীৰ গুৰুত্বৰ স্তৰ ০ৰ পৰা ৫লৈ ছেট কৰিব পাৰে।\n\n""স্তৰ ৫"" \n- জাননী তালিকাৰ একেবাৰে ওপৰত দেখুৱাওক \n- সম্পূৰ্ণ স্ক্ৰীণত থাকোঁতে ব্যাঘাত জন্মাবলৈ অনুমতি দিয়ক\n- সদায় ভুমুকি মাৰিবলৈ দিয়ক\n\n""স্তৰ ৪"" \n- সম্পূৰ্ণ স্ক্ৰীণত থাকোঁতে ব্যাঘাত জন্মাবলৈ নিদিব\n- সদায় ভুমুকি মাৰিবলৈ দিয়ক\n\n""স্তৰ ৩"" \n- সম্পূৰ্ণ স্ক্ৰীণত থাকোঁতে ব্যাঘাত জন্মাবলৈ নিদিব\n- কেতিয়াও ভুমুকি মাৰিবলৈ নিদিব\n\n""স্তৰ ২"" \n- সম্পূর্ণ স্ক্ৰীণত থাকোঁতে ব্যাঘাত জন্মাবলৈ নিদিব \n- কেতিয়াও ভুমুকি মাৰিবলৈ নিদিব\n- কেতিয়াও শব্দ আৰু কম্পন কৰিবলৈ নিদিব\n\n"" স্তৰ ১"" \n- সম্পূৰ্ণ স্ক্ৰীণত থাকোঁতে ব্যাঘাত জন্মাবলৈ নিদিব\n- কেতিয়াও ভুমুকি মাৰিবলৈ নিদিব\n-কেতিয়াও শব্দ আৰু কম্পন কৰিবলৈ নিদিব \n- লক স্ক্ৰীণ আৰু স্থিতি দণ্ডৰ পৰা লুকুৱাই ৰাখক \n- জাননী তালিকাৰ একেবাৰে তলত দেখুৱাওক\n\n""স্তৰ ০"" \n- এই এপৰ সকলো জাননী অৱৰোধ কৰক" "জাননীসমূহ" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "আপোনাক এই জাননীসমূহ আৰু দেখুওৱা নহ\'ব" + "এই জাননীসমূহ মিনিমাইজ কৰি থোৱা হ\'ব" + "আপুনি সাধাৰণতে এই জাননীসমূহ অগ্ৰাহ্য কৰে। \nসেইবোৰ দেখুওৱাই থাকিব লাগিবনে?" + "এই জাননীসমূহ দেখুওৱাই থাকিব লাগিবনে?" + "জাননী বন্ধ কৰক" + "দেখুওৱাই থাকক" + "সৰু কৰক" + "এই এপটোৰ জাননী দেখুওৱাই থাকিব লাগিবনে?" + "এই জাননীসমূহ বন্ধ কৰিব নোৱাৰি" + "কেমেৰা" + "মাইক্ৰ\'ফ\'ন" + "স্ক্ৰীণত অইন এপৰ ওপৰত দেখুৱাওক" + + এই এপটোৱে %1$s আৰু %2$s + এই এপটোৱে %1$s আৰু %2$s + + + %1$s আৰু %2$s ব্যৱহাৰ কৰি আছে + %1$s আৰু %2$s ব্যৱহাৰ কৰি আছে + + "ছেটিংসমূহ" + "ঠিক" "%1$sৰ জাননী নিয়ন্ত্ৰণসমূহ খোলা অৱস্থাত আছে" "%1$sৰ জাননী নিয়ন্ত্ৰণসমূহ বন্ধ অৱস্থাত আছে" "এই চ্চেনেলৰ পৰা জাননী দিবলৈ অনুমতি দিয়ক" "অধিক ছেটিং" - - + "নিজৰ উপযোগিতা অনুসৰি" "সম্পন্ন হ\'ল" - - + "আনডু কৰক" "%1$s %2$s" "জাননীৰ নিয়ন্ত্ৰণসমূহ" "জাননীক স্নুজ কৰাৰ বিকল্পসমূহ" @@ -756,6 +695,8 @@ "বেটাৰি" "ঘড়ী" "হেডছেট" + + "হেডফ\'ন সংযোগ হৈ আছে" "হেডছেট সংযোগ হৈ আছে" "ডেটা সঞ্চয়কাৰী" @@ -768,7 +709,12 @@ "বাওঁ বুটামৰ অতিৰিক্ত প্ৰকাৰ" "সোঁ বুটামৰ অতিৰিক্ত প্ৰকাৰ" "ডিফ\'ল্ট" - + + "ক্লিপব\'ৰ্ড" + "কীক\'ড" + "ঘূৰ্ণন নিশ্চিতি, কীব\'ৰ্ড সলনিৰ সুবিধা" + "একো নাই" + "সাধাৰণ" "ঘন" @@ -785,11 +731,9 @@ "সোঁ কীক\'ড" "বাওঁ আইকন" "সোঁ আইকন" - - + "টাইল যোগ কৰিবলৈ হেঁচি ধৰি টানি আনক" "আঁতৰাবৰ বাবে টানি আনি ইয়াত এৰি দিয়ক" - - + "আপোনাক অতি কমেও ৬খন টাইল লাগিব" "সম্পাদনা কৰক" "সময়" @@ -833,8 +777,7 @@ "ক্ষিপ্ৰ ছেটিংসমূহ বন্ধ কৰক।" "এলার্ম ছেট কৰা হ\'ল।" "%s হিচাপে ছাইন ইন হ\'ল" - - + "ইণ্টাৰনেট সংযোগ নাই" "বিৱৰণসমূহ খোলক।" "%sৰ ছেটিংসমূহ খোলক।" "ছেটিংসমূহৰ ক্ৰম সম্পাদনা কৰক।" @@ -884,8 +827,7 @@ "এপ্ সম্পৰ্কীয় তথ্য" "ব্ৰাউজাৰলৈ যাওক" "ম\'বাইল ডেটা" - - + "%s%s" "ৱাই-ফাই অফ অৱস্থাত আছে" "ব্লুটুথ অফ অৱস্থাত আছে" "অসুবিধা নিদিব অফ অৱস্থাত আছে" @@ -897,25 +839,16 @@ "সলনি কৰক" "নেপথ্যত চলি থকা এপসমূহ" "বেটাৰি আৰু ডেটাৰ ব্যৱহাৰৰ বিষয়ে বিশদভাৱে জানিবলৈ টিপক" - - - - - - + "ম’বাইল ডেটা অফ কৰিবনে?" + "আপুনি %sৰ জৰিয়তে ডেটা সংযোগ বা ইণ্টাৰনেট সংযোগ নাপাব। কেৱল ৱাই-ফাইৰ যোগেৰে ইণ্টাৰনেট উপলব্ধ হ\'ব।" + "আপোনাৰ বাহক" "এটা এপে অনুমতি বিচাৰি কৰা অনুৰোধ এটা ঢাকি ধৰা বাবে ছেটিংসমূহে আপোনাৰ উত্তৰ সত্যাপন কৰিব পৰা নাই।" - - - - - - - - - - - - + "%1$s%2$sৰ অংশ দেখুওৱাবলৈ অনুমতি দিবনে?" + "- ই %1$sৰ তথ্য পঢ়িব পাৰে" + "- ই %1$sৰ ভিতৰত কাৰ্য কৰিব পাৰে" + "%1$sক যিকোনো এপৰ অংশ দেখুওৱাবলৈ অনুমতি দিয়ক" + "অনুমতি দিয়ক" + "অস্বীকাৰ কৰক" diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index c9a1e11e01fb88d3ad83230e0ebce482c9a7afe3..2f8e77c86716b4c36ae733831a8dc863cec16245 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -33,7 +33,6 @@ "Davam edir" "Bildirişlər" "Enerji azdır" - "Batareya azdır. Batareya Qənaətini aktiv edin" "%s qalır" "Qalan %s, istifadəyə əsasən təxminən %s qalıb" "Qalan %s, təxminən %s qalır" @@ -73,11 +72,10 @@ "Skrinşot" "Skrinşot yadda saxlanılır..." "Skrinşot yadda saxlanır..." - "Skrinşot yadda saxlanır" "Skrinşot yadda saxlandı" "Skrinşotunuza baxmaq üçün klikləyin" - "Skrinşot çəkmək alınmadı" - "Skrinşot yadda saxlanarkən problem baş verdi" + "Skrinşotu yadda saxlamaq alınmadı" + "Skrinşotu yenidən çəkin" "Yaddaş ehtiyatının az olması səbəbindən skrinşotu yadda saxlamaq olmur" "Skrinşot çəkməyə tətbiq və ya təşkilat tərəfindən icazə verilmir" "USB fayl transferi seçimləri" @@ -348,7 +346,7 @@ "Qürubda aktiv ediləcək" "Şəfəq vaxtına qədər" "%s olduqda aktiv ediləcək" - "%s vaxtına qədər" + "%s vaxtına qədər" "NFC" "NFC deaktiv edilib" "NFC aktiv edilib" @@ -432,7 +430,8 @@ "%s ekranınızda olan hər şeyin şəklini çəkəcək." "Daha göstərmə" "Hamısını silin" - "\"Narahat etməyin\" rejimi bildirişləri gizlədir" + "Bildirişləri idarə edin" + "\"Narahat etməyin\" rejimi bildirişləri gizlədir" "İndi başlayın" "Heç bir bildiriş yoxdur" "Profil izlənə bilər" @@ -538,7 +537,8 @@ "%1$s. Vibrasiyanı ayarlamaq üçün klikləyin." "%1$s. Səssiz etmək üçün klikləyin." "%s səs nəzarətləri" - "Zəng və bildirişlər zəng çalacaq" + + "Media çıxışı" "Zəng girişi" "Heç bir cihaz tapılmadı" @@ -625,6 +625,7 @@ "%1$s %2$s" "bildiriş nəzarəti" "bildiriş təxirə salma seçimləri" + "Mürgü" "GERİ QAYTARIN" "%1$s üçün təxirə salınıb" @@ -688,6 +689,8 @@ "Batareya" "Saat" "Qulaqlıq" + + "Qulaqlıq qoşulub" "Qulaqlıq qoşulub" "Data Qənaəti" @@ -811,6 +814,7 @@ "Skrinşotlar" "Ümumi Mesajlar" "Yaddaş" + "Məsləhətlər" "Ani Tətbiqlər" "Ani tətbiqlər quraşdırma tələb etmir." "Tətbiq məlumatı" @@ -838,4 +842,11 @@ "%1$s tətbiqinə istənilən tətbiqdən hissə göstərmək icazəsi verin" "İcazə verin" "Rədd edin" + "Batareya Qənaətini planlaşdırmaq üçün klikləyin" + "Batareya %d%% olduqda avtomatik aktiv edin" + "Xeyr, təşəkkür" + "Batareya Qənaəti aktivdir" + "Batareya %d%%-dən aşağı düşdükdə Batareya Qənaəti avtomatik aktiv ediləcək." + "Ayarlar" + "Anladım" diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index 7760db835d7003c397c1ca0bd45092cb5144d976..4719a30299123bcf80d372781670936b24f511aa 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -34,17 +34,13 @@ "Tekuće" "Obaveštenja" "Nivo napunjenosti baterije je nizak" - "Baterija je skoro prazna. Uključite Uštedu baterije" "Još %s" "Još %s, na osnovu korišćenja ostalo je oko %s" "Još %s, ostalo je oko %s" "Još %s. Ušteda baterije je uključena." - - - - - - + "Punjenje preko USB-a nije uspelo. Koristite punjač koji ste dobili uz uređaj." + "Punjenje preko USB-a nije uspelo" + "Koristite punjač koji ste dobili uz uređaj" "Podešavanja" "Želite li da uključite Uštedu baterije?" "Uključi" @@ -77,11 +73,10 @@ "Snimak ekrana" "Čuvanje snimka ekrana..." "Čuvanje snimka ekrana..." - "Snimak ekrana se čuva" "Snimak ekrana je sačuvan" "Dodirnite da biste videli snimak ekrana" - "Ne možete da napravite snimak ekrana" - "Došlo je do problema pri čuvanju snimka ekrana" + "Čuvanje snimka ekrana nije uspelo" + "Probajte da ponovo napravite snimak ekrana" "Čuvanje snimka ekrana nije uspelo zbog ograničenog memorijskog prostora" "Aplikacija ili organizacija ne dozvoljavaju pravljenje snimaka ekrana" "Opcije USB prenosa datoteka" @@ -152,7 +147,6 @@ "Povezano je." "Povezivanje." "GPRS" - "1 X" "HSPA" "3G" "3.5G" @@ -212,8 +206,7 @@ "Režim rada u avionu je uključen." "Režim rada u avionu je isključen." "Režim rada u avionu je uključen." - - + "Režim Ne uznemiravaj je uključen." "Podešavanje Ne uznemiravaj je uključeno, potpuna tišina." "Podešavanje Ne uznemiravaj je uključeno, samo alarmi." "Ne uznemiravaj." @@ -280,7 +273,7 @@ "Vitrina sa poslasticama" "Čuvar ekrana" "Eternet" - "Pritisnite i zadržite ikone za još opcija" + "Dodirnite i zadržite ikone za još opcija" "Ne uznemiravaj" "Samo prioritetni prekidi" "Samo alarmi" @@ -356,7 +349,7 @@ "Uključuje se po zalasku sunca" "Do izlaska sunca" "Uključuje se u %s" - "Do %s" + "Do %s" "NFC" "NFC je onemogućen" "NFC je omogućen" @@ -440,8 +433,8 @@ "%s će početi da snima sve što se prikazuje na ekranu." "Ne prikazuj ponovo" "Obriši sve" - - + "Upravljajte obaveštenjima" + "Režim Ne uznemiravaj krije obaveštenja" "Započni odmah" "Nema obaveštenja" "Profil se možda nadgleda" @@ -547,9 +540,8 @@ "%1$s. Dodirnite da biste podesili na vibraciju." "%1$s. Dodirnite da biste isključili zvuk." "Kontrole za jačinu zvuka za %s" - "Vibracija za pozive i obaveštenja je uključena" - "Melodija zvona za pozive i obaveštenje je isključena" - "Melodija zvona za pozive i obaveštenja je uključena" + + "Izlaz medija" "Izlaz za telefonski poziv" "Nije pronađen nijedan uređaj" @@ -638,6 +630,7 @@ "%1$s %2$s" "kontrole obaveštenja" "opcije za odlaganje obaveštenja" + "Odloži" "OPOZOVI" "Odloženo je za %1$s" @@ -703,6 +696,8 @@ "Baterija" "Sat" "Naglavne slušalice" + + "Slušalice su povezane" "Naglavne slušalice su povezane" "Ušteda podataka" @@ -737,8 +732,9 @@ "Desno dugme za kôd tastera" "Leva ikona" "Desna ikona" - "Prevucite da biste dodali pločice" + "Zadržite i prevucite da biste dodali pločice" "Prevucite ovde da biste uklonili" + "Treba da izaberete najmanje 6 pločica" "Izmeni" "Vreme" @@ -825,6 +821,7 @@ "Snimci ekrana" "Opšte poruke" "Memorijski prostor" + "Saveti" "Instant aplikacije" "Instant aplikacije ne zahtevaju instalaciju." "Informacije o aplikaciji" @@ -842,7 +839,9 @@ "Zameni" "Aplikacije pokrenute u pozadini" "Dodirnite za detalje o bateriji i potrošnji podataka" - "Želite da onemogućite mobilne podatke?" + "Želite li da isključite mobilne podatke?" + "Nećete imati pristup podacima ili internetu preko mobilnog operatera %s. Internet će biti dostupan samo preko Wi-Fi veze." + "mobilni operater" "Podešavanja ne mogu da verifikuju vaš odgovor jer aplikacija skriva zahtev za dozvolu." "Želite li da dozvolite aplikaciji %1$s da prikazuje isečke iz aplikacije %2$s?" "– Može da čita podatke iz aplikacije %1$s" @@ -850,4 +849,11 @@ "Dozvolite aplikaciji %1$s da prikazuje isečke iz bilo koje aplikacije" "Dozvoli" "Odbij" + "Dodirnite da biste napravili raspored za uštedu baterije" + "Uključuje se automatski kada je baterija na %d%%" + "Ne, hvala" + "Raspored za uštedu baterije je uključen" + "Ušteda baterije će se automatski uključivati kada baterija padne ispod %d%%." + "Podešavanja" + "Važi" diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index f20eab24850eeaf25cd7c4c02a4f6b6f3728c29e..f7d748d5f4e94e0872463e64b995f208341f22a4 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -35,7 +35,6 @@ "Пастаянныя" "Апавяшчэнні" "Нізкі ўзровень зараду акумулятара" - "Нізкі зарад акумулятара. Уключыце функцыю эканоміі зараду" "Засталося %s" "Засталося %s, у вас ёсць каля %s на аснове даных аб выкарыстанні вашай прылады" "Засталося %s, у вас ёсць каля %s" @@ -75,11 +74,12 @@ "Здымак экрана" "Захаванне скрыншота..." "Захаванне скрыншота..." - "Захаванне здымка экрана" "Здымак экрана захаваны" "Дакраніцеся, каб прагледзець здымак экрана" - "Не атрымалася зрабіць здымак экрана" - "Падчас захавання здымка экрана адбылася памылка" + + + + "Немагчыма захаваць здымак экрана, бо мала месца ў сховішчы" "Рабіць здымкі экрана не дазваляе праграма ці ваша арганізацыя" "Парам. перадачы файлаў па USB" @@ -279,8 +279,7 @@ "Вітрына з дэсертамі" "Экранная застаўка" "Ethernet" - - + "Каб адкрыць іншыя параметры, націсніце на значок і ўтрымлівайце яго" "Не турбаваць" "Толькі прыярытэтныя" "Толькі будзільнікі" @@ -357,7 +356,8 @@ "Уключаць увечары" "Да ўсходу сонца" "Уключыць у %s" - "Да %s" + + "NFC" "NFC адключаны" "NFC уключаны" @@ -441,7 +441,9 @@ "%s атрымае доступ да ўсяго, што адлюстроўваецца на вашым экране." "Не паказваць зноў" "Ачысціць усё" - "У рэжыме \"Не турбаваць\" адключаны апавяшчэнні" + + + "У рэжыме «Не турбаваць» апавяшчэнні не паказваюцца" "Пачаць зараз" "Апавяшчэнняў няма" "За профілем могуць назіраць" @@ -547,7 +549,8 @@ "%1$s. Дакраніцеся, каб уключыць вібрацыю." "%1$s. Дакраніцеся, каб адключыць гук" "Рэгулятар гучнасці %s" - "Для выклікаў і апавяшчэнняў уключаны гук" + + "Вывад мультымедыя" "Прылада вываду тэлефонных выклікаў" "Прылады не знойдзены" @@ -638,6 +641,8 @@ "%1$s %2$s" "кіраванне апавяшчэннямі" "параметры адкладвання апавяшчэнняў" + + "АДРАБІЦЬ" "Адкладзена на %1$s" @@ -705,6 +710,8 @@ "Акумулятар" "Гадзіннік" "Гарнітура" + + "Навушнікі падключаны" "Гарнітура падлучана" "Эканомія трафіку" @@ -739,11 +746,9 @@ "Код клавішы \"управа\"" "Значок \"улева\"" "Значок \"управа\"" - - + "Перацягніце патрэбныя пліткі" "Перацягніце сюды, каб выдаліць" - - + "Трэба па меншай меры 6 плітак" "Рэдагаваць" "Час" @@ -830,6 +835,7 @@ "Здымкі экрана" "Агульныя паведамленні" "Захоўванне" + "Падказкі" "Імгненныя праграмы" "Імгненныя праграмы не патрабуюць усталёўкі." "Інфармацыя пра праграму" @@ -847,12 +853,9 @@ "Замяніць" "Праграмы, якія працуюць у фонавым рэжыме" "Дакраніцеся, каб даведацца пра выкарыстанне трафіка і акумулятара" - - - - - - + "Адключыць мабільны інтэрнэт?" + "У вас не будзе доступу да даных ці інтэрнэту праз аператара %s. Інтэрнэт будзе даступны толькі праз Wi-Fi." + "ваш аператар" "Праграма хавае запыт на дазвол, таму ваш адказ немагчыма спраўдзіць у Наладах." "Дазволіць праграме %1$s паказваць зрэзы праграмы %2$s?" "- Можа счытваць інфармацыю з праграмы %1$s" @@ -860,4 +863,11 @@ "Дазволіць праграме %1$s паказваць зрэзы з усіх праграм" "Дазволіць" "Адмовіць" + "Націсніце, каб уключыць рэжым эканоміі зараду" + "Уключаць аўтаматычна пры ўзроўні зараду акумулятара %d%%" + "Не, дзякуй" + "Уключаны рэжым эканоміі зараду" + "Калі ўзровень зараду акумулятара знізіцца да %d%%, аўтаматычна ўключыцца рэжым эканоміі энергіі." + "Налады" + "Зразумела" diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 26d6b4a371b9d8ba4f60396b92d16ef0e9d119b4..2b3157df172ae623ae1b22970b33ab4fe8d45940 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -33,7 +33,6 @@ "В момента" "Известия" "Батерията е изтощена" - "Батерията е изтощена – включете режима за запазването й" "Остава/т %s" "Остава/т %s – още около %s въз основа на използването" "Остава/т %s – още около %s" @@ -73,11 +72,10 @@ "Екранна снимка" "Екранната снимка се запазва..." "Екранната снимка се запазва..." - "Екранната снимка се запазва" "Екранната снимка е запазена" "Докоснете, за да видите екранната снимка" - "Екранната снимка не можа да бъде направена" - "При запазването на екранната снимка възникна проблем" + "Не можа да се запази екранна снимка" + "Опитайте да направите екранна снимка отново" "Екранната снимка не може да се запази поради ограничено място в хранилището" "Правенето на екранни снимки не е разрешено от приложението или организацията ви" "Опции за пренос на файлове чрез USB" @@ -273,8 +271,7 @@ "Витрина с десерти" "Скрийнсейвър" "Ethernet" - - + "За още опции докоснете и задръжте иконите" "Не безпокойте" "Само с приоритет" "Само будилници" @@ -349,7 +346,7 @@ "Ще се вкл. по залез" "До изгрев" "Ще се включи в %s" - "До %s" + "До %s" "КБП" "КБП е деактивирана" "КБП е активирана" @@ -433,7 +430,8 @@ "%s ще започне да заснема всичко, което се показва на екрана ви." "Да не се показва отново" "Изчистване на всички" - "Режимът „Не безпокойте“ скрива известията" + "Управление на известията" + "Режимът „Не безпокойте“ скрива известията" "Стартиране сега" "Няма известия" "Възможно е потребителският профил да се наблюдава" @@ -539,7 +537,8 @@ "%1$s. Докоснете, за да зададете вибриране." "%1$s. Докоснете, за да заглушите звука." "Контроли за силата на звука – %s" - "При обаждания и известия устройството ще звъни" + + "Изходяща мултимедия" "Изходящи телефонни обаждания" "Няма намерени устройства" @@ -626,6 +625,7 @@ "%2$s от %1$s" "контроли за известията" "опции за отлагане на известията" + "Отлагане" "ОТМЯНА" "Отложено за %1$s" @@ -689,6 +689,8 @@ "Батерия" "Часовник" "Слушалки" + + "Слушалките (без микрофон) са свързани" "Слушалките са свързани" "Икономия на данни" @@ -812,6 +814,7 @@ "Екранни снимки" "Общи съобщения" "Хранилище" + "Съвети" "Мигновени приложения" "За мигновените приложения не се изисква инсталиране." "Информация за приложението" @@ -839,4 +842,11 @@ "Разрешаване на %1$s да показва части от което и да е приложение" "Разрешаване" "Отказ" + "Докоснете, за да активирате автоматичния режим за запазване на батерията" + "Автоматично включване при %d%% заряд на батерията" + "Не, благодаря" + "Включен е автоматичен режим за запазване на батерията" + "Режимът за запазване на батерията ще се включи автоматично, след като нивото й премине под %d%%." + "Настройки" + "Разбрах" diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index 41987a082919686efd2a99dab2581b8ed588ac1c..c12e0694b51009f1946d7ec30c414a1b254118ca 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -33,7 +33,6 @@ "চলতে-থাকা" "বিজ্ঞপ্তিগুলি" "ব্যাটারি কম" - "চার্জ কম। ব্যাটারি সেভার চালু করুন" "%s অবশিষ্ট আছে" "%s বাকি আছে, বর্তমান ব্যবহারের ভিত্তিতে আর %s চলবে" "%s বাকি আছে, আর %s চলবে" @@ -73,11 +72,12 @@ "স্ক্রিনশট নিন" "স্ক্রিনশট সেভ করা হচ্ছে..." "স্ক্রিনশট সেভ করা হচ্ছে..." - "স্ক্রিনশট সেভ করা হচ্ছে" "স্ক্রিনশট সেভ করা হয়েছে" "স্ক্রিনশটটি দেখতে ট্যাপ করুন" - "স্ক্রিনশট নেওয়া যায়নি" - "স্ক্রিনশট সেভ করার সময় সমস্যা হয়েছে" + + + + "বেশি জায়গা নেই তাই স্ক্রিনশটটি সেভ করা যাবে না৷" "এই অ্যাপ বা আপনার প্রতিষ্ঠান স্ক্রিনশট নেওয়ার অনুমতি দেয়নি" "USB ফাইল স্থানান্তরের বিকল্পগুলি" @@ -273,8 +273,7 @@ "ডেজার্ট কেস" "স্ক্রিন সেভার" "ইথারনেট" - - + "আরও বিকল্পের জন্য আইকনগুলি টাচ করে ধরে থাকুন" "বিরক্ত করবেন না" "শুধুমাত্র অগ্রাধিকার" "শুধুমাত্র অ্যালার্মগুলি" @@ -349,7 +348,8 @@ "সূর্যাস্তে চালু হবে" "সূর্যোদয় পর্যন্ত" "%s এ চালু হবে" - "%s পর্যন্ত" + + "NFC" "NFC অক্ষম করা আছে" "NFC সক্ষম করা আছে" @@ -433,7 +433,10 @@ "%s আপনার স্ক্রীনে দেখানো সব কিছু ক্যাপচার করা শুরু করবে।" "আর দেখাবেন না" "সবকিছু সাফ করুন" - "\'বিরক্ত করবেন না\' মোড চালু আছে, তাই বিজ্ঞপ্তি লুকিয়ে ফেলা হচ্ছে" + + + + "এখন শুরু করুন" "কোনো বিজ্ঞপ্তি নেই" "প্রোফাইল পর্যবেক্ষণ করা হতে পারে" @@ -539,7 +542,8 @@ "%1$s। ভাইব্রেট করতে ট্যাপ করুন।" "%1$s। নিঃশব্দ করতে ট্যাপ করুন।" "%s ভলিউম নিয়ন্ত্রণ" - "কল এবং বিজ্ঞপ্তি আসলে রিং হবে" + + "মিডিয়া আউটপুট" "ফোন কল আউটপুট" "কোনও ডিভাইস খুঁজে পাওয়া যায়নি" @@ -626,6 +630,8 @@ "%1$s %2$s" "বিজ্ঞপ্তির নিয়ন্ত্রণগুলি" "বিজ্ঞপ্তি মনে করিয়ে দেওয়ার বিকল্পগুলি" + + "পূর্বাবস্থায় ফিরুন" "%1$s পরে আবার মনে করানো হবে" @@ -689,6 +695,8 @@ "ব্যাটারি" "ঘড়ি" "হেডসেট" + + "হেডফোনগুলি সংযুক্ত হয়েছে" "হেডসেট সংযুক্ত হয়েছে" "ডেটা সেভার" @@ -723,11 +731,9 @@ "ডানদিকের কিকোড" "বাঁ দিকের আইকন" "ডানদিকের আইকন" - - + "টাইল যোগ করতে ট্যাপ করে টেনে আনুন" "সরানোর জন্য এখানে টেনে আনুন" - - + "অন্তত ৬টি টাইল রাখতে হবে" "সম্পাদনা করুন" "সময়" @@ -814,6 +820,8 @@ "স্ক্রীনশটস" "সাধারণ বার্তাগুলি" "স্টোরেজ" + + "ঝটপট অ্যাপ" "ঝটপট অ্যাপ ইনস্টল করার প্রয়োজন হয় না।" "অ্যাপের তথ্য" @@ -831,12 +839,9 @@ "বদলে দিন" "পটভূমিতে অ্যাপ চালু আছে" "ব্যাটারি এবং ডেটার ব্যবহারের বিশদ বিবরণের জন্য ট্যাপ করুন" - - - - - - + "মোবাইল ডেটা বন্ধ করবেন?" + "আপনি %s-এর মাধ্যমে ডেটা অথবা ইন্টারনেট অ্যাক্সেস করতে পারবেন না। শুধুমাত্র ওয়াই-ফাইয়ের মাধ্যমেই ইন্টারনেট অ্যাক্সেস করা যাবে।" + "আপনার পরিষেবা প্রদানকারী" "একটি অ্যাপ কোনও অনুমোদনের অনুরোধকে ঢেকে দিচ্ছে, তাই সেটিংস থেকে আপনার প্রতিক্রিয়া যাচাই করা যাচ্ছে না।" "%1$s অ্যাপটিকে %2$s এর অংশ দেখানোর অনুমতি দেবেন?" "- এটি %1$s এর তথ্য অ্যাক্সেস করতে পারবে" @@ -844,4 +849,18 @@ "%1$s অ্যাপটিকে যেকোনও অ্যাপের অংশ দেখাতে দিন" "অনুমতি দিন" "খারিজ করুন" + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index b99efc8f6f1b76f17a7d872889917350e4389423..f47fad06eb5b2c39b496b0788e3b487a4d0787b8 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -34,7 +34,6 @@ "U toku" "Obavještenja" "Baterija je skoro prazna" - "Baterija je skoro prazna. Uključite Uštedu baterije" "Preostalo %s" "Još %s. Preostalo je oko %s, na osnovu vašeg korištenja" "Još %s. Preostalo je oko %s" @@ -74,11 +73,10 @@ "Snimak ekrana" "Spašavanje snimka ekrana..." "Spašavanje snimka ekrana..." - "Snimak ekrana se pohranjuje" "Snimak ekrana je sačuvan" "Dodirnite za prikaz snimka ekrana" - "Pravljenje snimka ekrana nije uspjelo" - "Došlo je do problema prilikom čuvanja snimka ekrana" + "Nije moguće sačuvati snimak ekrana" + "Pokušajte ponovo snimiti ekran" "Snimak ekrana se ne može sačuvati zbog manjka prostora za pohranu" "Ova aplikacija ili vaša organizacija ne dozvoljavaju snimanje ekrana" "Opcije USB prijenosa fajlova" @@ -275,7 +273,7 @@ "Slika sa desertima" "Čuvar ekrana" "Ethernet" - "Dodirnite ikone i zadržite pritisak da biste vidjeli više opcija" + "Dodirnite i držite ikone za više opcija" "Ne ometaj" "Samo prioritetno" "Samo alarmi" @@ -351,7 +349,7 @@ "Uključuje se u suton" "Do svitanja" "Uključuje se u %s" - "Do %s" + "Do %s" "NFC" "NFC je onemogućen" "NFC je omogućen" @@ -435,7 +433,8 @@ "Aplikacija %s će početi snimati sve što se prikaže na ekranu." "Ne prikazuj opet" "Očisti sve" - "Način rada Ne ometaj sakriva obavještenja" + "Upravljajte obavještenjima" + "Način rada Ne ometaj sakriva obavještenja" "Pokreni odmah" "Nema obavještenja" "Profil može biti nadziran" @@ -543,7 +542,8 @@ "%1$s. Dodirnite da postavite vibraciju." "%1$s. Dodirnite da isključite zvuk." "Kontrole glasnoće za %s" - "Pozivi i obavještenja će zvoniti" + + "Izlaz za medijske fajlove" "Izlaz za telefonske pozive" "Nije pronađen nijedan uređaj" @@ -632,6 +632,7 @@ "%1$s %2$s" "kontrole obavještenja" "opcije za odgodu obavještenja" + "Odgodi" "OPOZOVI" "Odgođeno za %1$s" @@ -697,6 +698,8 @@ "Baterija" "Sat" "Slušalice s mikrofonom" + + "Slušalice su priključene" "Slušalice s mikrofonom su priključene" "Ušteda podataka" @@ -731,11 +734,9 @@ "Kôd tipke desno" "Ikona lijevo" "Ikona desno" - - + "Držite i prevucite da dodate polja" "Prevucite ovdje za uklanjanje" - - + "Trebate najmanje šest polja" "Uredi" "Vrijeme" @@ -822,6 +823,7 @@ "Snimci ekrana" "Opće poruke" "Pohrana" + "Savjeti" "Instant-aplikacije" "Za instant aplikacije nije potrebna instalacija" "Informacije o aplikaciji" @@ -839,12 +841,9 @@ "Zamijeni" "Aplikacije koje rade u pozadini" "Dodirnite za detalje o potrošnji baterije i prijenosa podataka" - - - - - - + "Isključiti prijenos podataka na mobilnoj mreži?" + "Nećete imati pristup podacima ili internetu preko mobilnog operatera %s. Internet će biti dostupan samo preko Wi-Fi mreže." + "vaš operater" "Postavke ne mogu potvrditi vaš odgovor jer aplikacija zaklanja zahtjev za odobrenje." "Dozvoliti aplikaciji %1$s prikazivanje isječaka aplikacije %2$s?" "- Može čitati informacije iz aplikacije %1$s" @@ -852,4 +851,11 @@ "Dozvoli aplikaciji %1$s prikazivanje isječaka iz svake aplikacije" "Dozvoli" "Odbij" + "Dodirnite da zakažete Uštedu baterije" + "Automatski uključite kada je baterija ispod %d%%" + "Ne, hvala" + "Zakazivanje Uštede baterije je uključeno" + "Kada je baterija ispod %d%%, Ušteda baterije se automatski uključuje." + "Postavke" + "Razumijem" diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index edd7944083d262b9ddb3db1a2aa933d579299b02..a08c559add7118af483c898c7df241d66172acfa 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -33,7 +33,6 @@ "Continu" "Notificacions" "Queda poca bateria" - "Queda poca bateria. Activa el mode d\'estalvi de bateria." "Queda un %s." "Queda un %s; temps restant aproximat segons l\'ús que en fas: %s" "Queda un %s; temps restant aproximat: %s" @@ -73,11 +72,12 @@ "Captura de pantalla" "S\'està desant captura de pantalla..." "S\'està desant la captura de pantalla..." - "S\'està desant la captura de pantalla" "S\'ha desat la captura de pantalla" "Toca per veure la captura de pantalla" - "No s\'ha pogut fer la captura de pantalla" - "S\'ha trobat un problema en desar la captura de pantalla" + + + + "La captura de pantalla no es pot desar perquè no hi ha prou espai d\'emmagatzematge" "L\'aplicació o la teva organització no permeten fer captures de pantalla" "Opcions transf. fitxers USB" @@ -234,8 +234,8 @@ "Llanterna activada" "Llanterna desactivada." "Llanterna activada." - "La inversió de color està desactivada." - "La inversió de color està activada." + "La inversió dels colors està desactivada." + "La inversió dels colors està activada." "El punt d\'accés mòbil està desactivat." "El punt d\'accés mòbil està activat." "S\'ha aturat l\'emissió de la pantalla." @@ -348,7 +348,8 @@ "A la posta de sol" "Fins a l\'alba" "S\'activarà a les %s" - "Fins a les %s" + + "NFC" "L\'NFC està desactivada" "L\'NFC està activada" @@ -432,7 +433,9 @@ "%s començarà a gravar tot el que es mostri a la pantalla." "No ho tornis a mostrar" "Esborra-ho tot" - "El mode No molestis està amagant notificacions" + + + "El mode No molestis està amagant notificacions" "Comença ara" "Cap notificació" "El perfil es pot supervisar" @@ -538,7 +541,8 @@ "%1$s. Toca per activar la vibració." "%1$s. Toca per silenciar." "Controls de volum %s" - "Les trucades i les notificacions sonaran" + + "Sortida de contingut multimèdia" "Sortida de trucades" "No s\'ha trobat cap dispositiu" @@ -625,6 +629,8 @@ "%1$s %2$s" "controls de notificació" "opcions per posposar la notificació" + + "DESFÉS" "S\'ha posposat %1$s" @@ -688,6 +694,8 @@ "Bateria" "Rellotge" "Auriculars" + + "Auriculars connectats" "Auriculars connectats" "Economitzador de dades" @@ -811,6 +819,7 @@ "Captures de pantalla" "Missatges generals" "Emmagatzematge" + "Suggeriments" "Aplicacions instantànies" "No cal instal·lar les aplicacions instantànies." "Informació de l\'aplicació" @@ -838,4 +847,11 @@ "Permet que %1$s mostri porcions de qualsevol aplicació" "Permet" "Denega" + "Toca per programar la funció Estalvi de bateria" + "Activa automàticament quan el nivell de bateria sigui del %d%%" + "No" + "S\'ha activat la programació de la funció Estalvi de bateria" + "La funció Estalvi de bateria s\'activarà automàticament quan el nivell de bateria sigui inferior al %d%%." + "Configuració" + "D\'acord" diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index 75043bce2da3b78f0dba63228d36e0e48c08bcbb..f76ae679f5f3a203afe6f6d990941b0f6663c756 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -35,14 +35,13 @@ "Probíhající" "Oznámení" "Baterie je slabá" - "Baterie je téměř vybitá, zapněte spořič baterie" "Zbývá %s" "Zbývá %s, při obvyklém využití asi %s" "Zbývá %s, asi %s" "Zbývá %s. Spořič baterie je zapnutý." - "Nabíjení pomocí rozhraní USB není podporováno.\nPoužívejte pouze nabíječku, která byla dodána se zařízením." - "Nabíjení přes USB není podporováno." - "Používejte pouze nabíječku, která je součástí balení." + "Nabíjení přes USB nefunguje. Používejte originální nabíječku, která byla dodána spolu se zařízením." + "Nabíjení přes USB nefunguje" + "Používejte originální nabíječku, která byla dodána spolu se zařízením." "Nastavení" "Zapnout spořič baterie?" "Zapnout" @@ -75,11 +74,10 @@ "Snímek obrazovky" "Ukládání snímku obrazovky..." "Ukládání snímku obrazovky..." - "Ukládání snímku obrazovky" "Snímek obrazovky byl uložen" "Klepnutím snímek obrazovky zobrazíte" - "Snímek obrazovky se nepodařilo zachytit" - "Při ukládání snímku obrazovky došlo k problému" + "Snímek obrazovky se nepodařilo uložit" + "Zkuste snímek pořídit znovu" "Snímek obrazovky kvůli nedostatku místa v úložišti nelze uložit" "Aplikace nebo organizace zakazuje pořizování snímků obrazovky" "Možnosti přenosu souborů pomocí rozhraní USB" @@ -105,8 +103,7 @@ "spustit fotoaparát" "Vybrat nové rozvržení úkolů" "Zrušit" - - + "Dotkněte se snímače otisků prstů" "Ikona otisku prstu" "Ikona aplikace" "Oblast pro zprávu nápovědy" @@ -150,28 +147,28 @@ "Vypnuto." "Připojeno." "Připojování." - "GPRS" - "1 X" - "HSPA" - "3G" - "3,5G" - "4G" - "4G+" - "LTE" - "LTE+" - "CDMA" - "Roaming" - "Edge" + "GPRS" + "HSPA" + "3G" + "3,5G" + "3,5G+" + "4G" + "4G+" + "LTE" + "LTE+" + "CDMA" + "Roaming" + "EDGE" "Wi-Fi" "Žádná SIM karta." "Mobilní data" "Mobilní data jsou zapnuta" - "Mobilní data jsou vypnuta" + "Mobilní data jsou vypnuta" "Sdílené připojení přes Bluetooth." "Režim Letadlo." "VPN je zapnuto." "Není vložena SIM karta" - "Probíhá změna sítě operátora." + "Probíhá změna sítě operátora" "Otevřít podrobnosti o baterii" "Stav baterie: %d procent." @@ -212,7 +209,7 @@ "Režim Letadlo je zapnutý." "Režim Letadlo je vypnutý." "Režim Letadlo je zapnutý." - "Stav Nerušit je zapnutý – pouze prioritní vyrušení." + "Režim Nerušit je zapnutý." "Je zapnut režim Nerušit – úplné ticho." "Nerušit, pouze budíky" "Nerušit." @@ -280,8 +277,7 @@ "Pult se sladkostmi" "Spořič obrazovky" "Ethernet" - - + "Podržením ikon zobrazíte další možnosti" "Nerušit" "Pouze prioritní" "Pouze budíky" @@ -294,6 +290,7 @@ "Zvuk" "Náhlavní souprava" "Vstup" + "Zapínání…" "Jas" "Automatické otáčení" "Automatické otočení obrazovky" @@ -318,7 +315,7 @@ "Wi-Fi vypnuta" "Wi-Fi je zapnutá" "Žádné sítě Wi-Fi nejsou k dispozici" - "Budík" + "Zapínání…" "Odeslat" "Odesílání" "Nepojmenované zařízení" @@ -335,7 +332,8 @@ "Připojování..." "Sdílené připojení" "Hotspot" - "Zapínání..." + "Zapínání…" + "Spořič dat je zapnutý" %d zařízení %d zařízení @@ -351,13 +349,12 @@ "Využito: %s" "Limit: %s" "Upozornění při %s" - "Pracovní profil" - "Oznámení a aplikace jsou vypnuty" + "Pracovní profil" "Noční režim" "Zapnout při soumraku" "Do svítání" "Zapnout v %s" - "Do %s" + "Do %s" "NFC" "NFC je vypnuto" "NFC je zapnuto" @@ -405,9 +402,9 @@ "Úplné\nticho" "Pouze\nprioritní" "Pouze\nbudíky" - "Nabíjení (plně nabito za %s)" - "Rychlé nabíjení (plně nabito za %s)" - "Pomalé nabíjení (plně nabito za %s)" + "%2$s • Nabíjení (plně nabito za %s)" + "%2$s • Rychlé nabíjení (plně nabito za %s)" + "%2$s • Pomalé nabíjení (plně nabito za %s)" "Přepnout uživatele" "Přepnout uživatele, aktuální uživatel: %s" "Aktuální uživatel %s" @@ -441,6 +438,8 @@ "Aplikace %s začne zaznamenávat vše, co je zobrazeno na obrazovce." "Tuto zprávu příště nezobrazovat" "Smazat vše" + "Spravovat oznámení" + "Režim Nerušit skrývá oznámení" "Spustit" "Žádná oznámení" "Profil může být monitorován" @@ -508,6 +507,7 @@ "Nastavit" "%1$s. %2$s" "Vypnout" + "Nastavení zvuku" "Rozbalit" "Sbalit" "Přepnout zařízení pro výstup" @@ -545,6 +545,8 @@ "%1$s. Klepnutím nastavíte vibrace." "%1$s. Klepnutím vypnete zvuk." "Ovládací prvky hlasitosti %s" + + "Výstup médií" "Výstup telefonního hovoru" "Nebyla nalezena žádná zařízení" @@ -600,12 +602,31 @@ "Rozšířené ovládací prvky oznámení umožňují nastavit úroveň důležitosti oznámení aplikace od 0 do 5. \n\n""Úroveň 5"" \n– Zobrazit na začátku seznamu oznámení \n– Povolit vyrušení na celou obrazovku \n– Vždy zobrazit náhled \n\n""Úroveň 4"" \n– Zabránit vyrušení na celou obrazovku \n– Vždy zobrazit náhled \n\n""Úroveň 3"" \n– Zabránit vyrušení na celou obrazovku \n– Nikdy nezobrazovat náhled \n\n""Úroveň 2"" \n– Zabránit vyrušení na celou obrazovku \n– Nikdy nezobrazovat náhled \n– Nikdy nevydávat žádný zvukový signál ani nevibrovat \n\n""Úroveň 1"" \n– Zabránit vyrušení na celou obrazovku \n– Nikdy nezobrazovat náhled \n– Nikdy nevydávat zvukový signál ani nevibrovat \n– Skrýt z obrazovky uzamčení a stavového řádku \n– Zobrazovat na konci seznamu oznámení \n\n"";Úroveň 0"" \n– Blokovat všechna oznámení z aplikace" "Oznámení" "Tato oznámení již nebudete dostávat" + "Tato oznámení budou minimalizována" "Tato oznámení obvykle odmítáte. \nChcete je nadále zobrazovat?" "Mají se tato oznámení nadále zobrazovat?" "Přestat zobrazovat oznámení" "Nadále zobrazovat" + "Minimalizovat" "Mají se oznámení z této aplikace nadále zobrazovat?" "Tato oznámení nelze deaktivovat" + "fotoaparát" + "mikrofon" + "zobrazení přes ostatní aplikace na obrazovce" + + Tato aplikace %1$s%2$s. + Tato aplikace %1$s%2$s. + Tato aplikace %1$s%2$s. + Tato aplikace %1$s. + + + používá položky %1$s%2$s + používá položky %1$s%2$s + používá položky %1$s%2$s + používá položku %1$s + + "Nastavení" + "OK" "Ovládací prvky oznámení aplikace %1$s byly otevřeny" "Ovládací prvky oznámení aplikace %1$s byly zavřeny" "Povolit oznámení z tohoto kanálu" @@ -616,6 +637,7 @@ "%2$s aplikace %1$s" "Nastavení oznámení" "Možnosti odložení oznámení" + "Odložit" "VRÁTIT ZPĚT" "Odloženo o %1$s" @@ -683,6 +705,8 @@ "Baterie" "Hodiny" "Sluchátka" + + "Sluchátka připojena" "Sluchátka připojena" "Spořič dat" @@ -717,8 +741,9 @@ "Klávesa vpravo" "Ikona vlevo" "Ikona vpravo" - "Dlaždice přidáte přetažením" + "Dlaždice přidáte podržením a přetažením" "Přetažením sem dlaždice odstraníte" + "Potřebujete minimálně šest dlaždic" "Upravit" "Čas" @@ -762,7 +787,7 @@ "Zavřít rychlé nastavení." "Budík je nastaven." "Jste přihlášeni jako %s." - "Nejste připojeni k internetu." + "Nejste připojeni k internetu" "Otevřít podrobnosti." "Otevřít nastavení aplikace %s." "Upravit pořadí nastavení." @@ -805,11 +830,13 @@ "Snímky obrazovek" "Všeobecné zprávy" "Úložiště" + "Tipy" "Okamžité aplikace" "Okamžité aplikace není třeba instalovat." "O aplikaci" "Přejít do prohlížeče" "Mobilní data" + "%s%s" "Wi-Fi je vypnuta" "Bluetooth je vypnuto" "Režim Nerušit je vypnut" @@ -821,7 +848,9 @@ "Nahradit" "Aplikace běžící na pozadí" "Klepnutím zobrazíte podrobnosti o využití baterie a dat" - "Vypnout mobilní data?" + "Vypnout mobilní data?" + "Prostřednictvím %s nebudete moci používat data ani internet. Internet bude dostupný pouze přes Wi-Fi." + "vašeho operátora" "Žádost o oprávnění je blokována jinou aplikací. Nastavení proto vaši odpověď nemůže ověřit." "Povolit aplikaci %1$s zobrazovat ukázky z aplikace %2$s?" "– Může číst informace z aplikace %1$s" @@ -829,4 +858,11 @@ "Povolit aplikaci %1$s zobrazovat ukázky z libovolné aplikace" "Povolit" "Zamítnout" + "Klepnutím naplánujete aktivování spořiče baterie" + "Aktivovat automaticky, když baterie klesne pod %d %%" + "Ne, díky" + "Plánované aktivování spořiče baterie je zapnuté" + "Spořič baterie se automaticky aktivuje, jakmile baterie klesne pod %d %%." + "Nastavení" + "Rozumím" diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index 40c089c4e2086abbcdd4d2dd27913d024ade9b4d..131163e55d5e9cc4d19daf49094ed6790ac078e8 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -33,7 +33,6 @@ "I gang" "Underretninger" "Batteriniveauet er lavt" - "Batteriniveauet er lavt – aktivér Batterisparefunktion" "%s tilbage" "Der er %s tilbage eller ca. %s, alt efter hvordan du bruger enheden" "%s tilbage eller ca. %s" @@ -73,11 +72,12 @@ "Screenshot" "Gemmer screenshot..." "Gemmer screenshot..." - "Screenshottet gemmes" "Screenshottet blev gemt" "Tryk for at se dit screenshot" - "Screenshottet kunne ikke tages" - "Der opstod et problem, da screenshottet skulle gemmes" + + + + "Screenshottet kan ikke gemmes, fordi der er begrænset lagerplads" "Appen eller din organisation tillader ikke, at du tager screenshots" "Muligheder for USB-filoverførsel" @@ -348,7 +348,8 @@ "Tænd ved solnedgang" "Indtil solopgang" "Tænd kl. %s" - "Indtil kl. %s" + + "NFC" "NFC er deaktiveret" "NFC er aktiveret" @@ -432,7 +433,9 @@ "%s vil begynde at optage alt, hvad der vises på din skærm." "Vis ikke igen" "Ryd alt" - "Forstyr ikke skjuler underretninger" + + + "Forstyr ikke skjuler underretninger" "Start nu" "Ingen underretninger" "Profilen kan overvåges" @@ -538,7 +541,8 @@ "%1$s. Tryk for at aktivere vibration." "%1$s. Tryk for at slå lyden fra." "%s lydstyrkeknapper" - "Der afspilles lyd ved opkald og underretninger" + + "Medieafspilning" "Udgang til telefonopkald" "Der blev ikke fundet nogen enheder" @@ -625,6 +629,8 @@ "%1$s %2$s" "kontrolelementer til underretninger" "Indstillinger for udsættelse" + + "FORTRYD" "Udsat i %1$s" @@ -688,6 +694,8 @@ "Batteri" "Ur" "Headset" + + "Hovedtelefoner er tilsluttet" "Headset er forbundet" "Datasparefunktion" @@ -722,11 +730,9 @@ "Højre tastekode" "Venstre ikon" "Højre ikon" - - + "Tilføj felter ved at holde dem nede og trække" "Træk herhen for at fjerne" - - + "Du skal bruge mindst seks felter" "Rediger" "Tid" @@ -813,6 +819,7 @@ "Screenshots" "Generelle meddelelser" "Lagerplads" + "Tips" "Instant Apps" "Instant apps kræver ingen installation." "Appinfo" @@ -830,12 +837,9 @@ "Erstat" "Apps, der kører i baggrunden" "Tryk for at se oplysninger om batteri- og dataforbrug" - - - - - - + "Vil du deaktivere mobildata?" + "Du vil ikke have data- eller internetadgang via %s. Der vil kunne være adgang til internettet via Wi-Fi." + "dit mobilselskab" "Indstillinger kan ikke bekræfte dit svar, da en app dækker for en anmodning om tilladelse." "Vil du give %1$s tilladelse til at vise eksempler fra %2$s?" "- Den kan læse oplysninger fra %1$s" @@ -843,4 +847,11 @@ "Tillad, at %1$s viser eksempler fra enhver app" "Tillad" "Afvis" + "Tryk for at fastsætte en tidsplan for batterisparefunktionen" + "Aktivér automatisk, når batteriniveauet er på %d %%" + "Nej tak" + "Tidsplanen for batterisparefunktionen er aktiveret" + "Batterisparefunktionen aktiveres automatisk, når batteriniveauet når under %d %%." + "Indstillinger" + "OK" diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 685495a393f94509d656bffba5ec116bf24a82af..3a03c411fce9dabeaf9ad5b454215126440f1cba 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -33,7 +33,6 @@ "Aktuell" "Benachrichtigungen" "Akku ist schwach" - "Akku ist schwach. Energiesparmodus aktivieren." "%s verbleibend" "%s ausstehend; noch ca. %s, basierend auf deiner Nutzung" "%s ausstehend; noch ca. %s" @@ -73,11 +72,12 @@ "Screenshot" "Screenshot wird gespeichert..." "Screenshot wird gespeichert..." - "Screenshot wird gespeichert" "Screenshot gespeichert" "Tippe, um deinen Screenshot anzusehen" - "Screenshot konnte nicht aufgenommen werden" - "Beim Speichern des Screenshots ist ein Problem aufgetreten" + + + + "Speichern des Screenshots aufgrund von zu wenig Speicher nicht möglich" "Die App oder deine Organisation lässt das Erstellen von Screenshots nicht zu" "USB-Dateiübertragungsoptionen" @@ -277,8 +277,7 @@ "Dessertbehälter" "Bildschirmschoner" "Ethernet" - - + "Halte die Symbole gedrückt, um weitere Optionen zu sehen" "Nicht stören" "Nur wichtige Unterbrechungen" "Nur Wecker" @@ -353,7 +352,8 @@ "An bei Sonnenuntergang" "Bis Sonnenaufgang" "An um %s" - "Bis %s" + + "NFC" "NFC ist deaktiviert" "NFC ist aktiviert" @@ -437,7 +437,9 @@ "%s nimmt alle auf deinem Bildschirm angezeigten Aktivitäten auf." "Nicht erneut anzeigen" "Alle löschen" - "Mit \"Bitte nicht stören\" werden Benachrichtigungen ausgeblendet" + + + "Benachrichtigungen werden durch \"Bitte nicht stören\" ausgeblendet" "Jetzt starten" "Keine Benachrichtigungen" "Profil wird möglicherweise überwacht." @@ -543,7 +545,8 @@ "%1$s. Zum Aktivieren der Vibration tippen." "%1$s. Zum Stummschalten tippen." "Lautstärkeregler von %s" - "Anrufe und Benachrichtigungen per Klingelton" + + "Medienausgabe" "Telefonanrufausgabe" "Keine Geräte gefunden" @@ -630,6 +633,8 @@ "%2$s%1$s" "Benachrichtigungseinstellungen" "Optionen für spätere Erinnerung bei Benachrichtigungen" + + "RÜCKGÄNGIG" "Erinnerung in %1$s" @@ -693,6 +698,8 @@ "Akku" "Uhr" "Headset" + + "Mit Kopfhörer verbunden" "Mit Headset verbunden" "Datenverbrauch reduzieren" @@ -727,11 +734,9 @@ "Rechter Keycode" "Linkes Symbol" "Rechtes Symbol" - - + "Halten und ziehen, um Kacheln hinzuzufügen" "Zum Entfernen hierher ziehen" - - + "Du brauchst mindestens sechs Kacheln" "Bearbeiten" "Uhrzeit" @@ -818,6 +823,7 @@ "Screenshots" "Nachrichten" "Speicher" + "Hinweise" "Instant-Apps" "Bei Instant-Apps ist keine vorherige Installation erforderlich." "App-Informationen" @@ -835,12 +841,9 @@ "Ersetzen" "Apps, die im Hintergrund ausgeführt werden" "Für Details zur Akku- und Datennutzung tippen" - - - - - - + "Mobile Daten deaktivieren?" + "Du kannst dann nicht mehr über %s auf Daten und das Internet zugreifen. Das Internet ist nur noch über WLAN verfügbar." + "deinen Mobilfunkanbieter" "Deine Eingabe wird von \"Einstellungen\" nicht erkannt, weil die Berechtigungsanfrage von einer App verdeckt wird." "%1$s erlauben, Teile von %2$s anzuzeigen?" "– Darf Informationen aus %1$s lesen" @@ -848,4 +851,11 @@ "%1$s darf Teile aus jeder beliebigen App anzeigen" "Zulassen" "Ablehnen" + "Tippen zum Planen des Energiesparmodus" + "Automatisch aktivieren bei einem Akkustand von %d%%" + "Nein danke" + "Geplanter Energiesparmodus aktiviert" + "Der Energiesparmodus wird bei einem Akkustand von %d%% automatisch aktiviert." + "Einstellungen" + "OK" diff --git a/packages/SystemUI/res/values-de/strings_tv.xml b/packages/SystemUI/res/values-de/strings_tv.xml index adae2592e069b7182898ddbcc99b8deb788382ea..68598135db6c080e397759fb317eac3951c9a4a4 100644 --- a/packages/SystemUI/res/values-de/strings_tv.xml +++ b/packages/SystemUI/res/values-de/strings_tv.xml @@ -20,7 +20,7 @@ "Bild im Bild" - "(Kein Programmtitel)" + "(Kein Sendungsname gefunden)" "PIP schließen" "Vollbild" diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index bdb5aa919a18e2b1103d2fe02b228ce979a50e3f..b7823b320fdac1430c820209d01a22faeac34053 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -33,7 +33,6 @@ "Εν εξελίξει" "Ειδοποιήσεις" "Χαμηλή στάθμη μπαταρίας" - "Χαμηλή στάθμη μπαταρίας. Ενεργοποιήστε την Εξοικονόμηση μπαταρίας" "Απομένουν %s" "Απομένει %s, περίπου %s με βάση τη χρήση σας" "Απομένει %s, περίπου %s" @@ -73,11 +72,10 @@ "Στιγμιότυπο οθόνης" "Αποθήκ. στιγμιότυπου οθόνης..." "Αποθήκευση στιγμιότυπου οθόνης..." - "Γίνεται αποθήκευση του στιγμιότυπου οθόνης" "Το στιγμιότυπο οθόνης αποθηκεύτηκε" "Πατήστε για να δείτε το στιγμιότυπο οθόνης που δημιουργήσατε" - "Αδύνατη η λήψη του στιγμιότυπου οθόνης." - "Παρουσιάστηκε πρόβλημα κατά την αποθήκευση του στιγμιότυπου οθόνης" + "Μη δυνατή αποθήκευση του στιγμιότυπου οθόνης" + "Δοκιμάστε να κάνετε ξανά λήψη του στιγμιότυπου οθόνης" "Αδύνατη η αποθήκευση του στιγμιότυπου οθόνης λόγω περιορισμένου αποθηκευτικού χώρου" "Η λήψη στιγμιότυπων οθόνης δεν επιτρέπεται από την εφαρμογή ή τον οργανισμό σας" "Επιλογές μεταφοράς αρχείων μέσω USB" @@ -273,8 +271,7 @@ "Επιδόρπιο" "Προφύλαξη οθόνης" "Ethernet" - - + "Αγγίξτε παρατεταμένα τα εικονίδια, για να δείτε περισσότερες επιλογές" "Μην ενοχλείτε" "Μόνο προτεραιότητας" "Μόνο ειδοποιήσεις" @@ -349,7 +346,7 @@ "Κατά τη δύση" "Μέχρι την ανατολή" "Ενεργοποίηση στις %s" - "Έως τις %s" + "Έως τις %s" "NFC" "Το NFC είναι απενεργοποιημένο" "Το NFC είναι ενεργοποιημένο" @@ -433,7 +430,8 @@ "Θα ξεκινήσει η καταγραφή του περιεχομένου που εμφανίζεται στην οθόνη σας από την εφαρμογή %s." "Να μην εμφανιστεί ξανά" "Διαγραφή όλων" - "Η λειτουργία \"Μην ενοχλείτε\" αποκρύπτει ειδοποιήσεις" + "Διαχείριση ειδοποιήσεων" + "Η λειτουργία \"Μην ενοχλείτε\" αποκρύπτει ειδοποιήσεις" "Έναρξη τώρα" "Δεν υπάρχουν ειδοποιήσεις" "Το προφίλ ενδέχεται να παρακολουθείται" @@ -539,7 +537,8 @@ "%1$s. Πατήστε για να ενεργοποιήσετε τη δόνηση." "%1$s. Πατήστε για σίγαση." "%s στοιχεία ελέγχου έντασης ήχου" - "Θα υπάρχει ηχητική ειδοποίηση για κλήσεις και ειδοποιήσεις" + + "Έξοδος μέσων" "Έξοδος τηλεφωνικής κλήσης" "Δεν βρέθηκαν συσκευές" @@ -625,7 +624,8 @@ "Αναίρεση" "%1$s %2$s" "στοιχεία ελέγχου ειδοποιήσεων" - "επιλογές αφύπνισης ειδοποιήσεων" + "επιλογές αναβολής ειδοποιήσεων" + "Αναβολή αφύπνισης" "ΑΝΑΙΡΕΣΗ" "Σε αναβολή για %1$s" @@ -689,6 +689,8 @@ "Μπαταρία" "Ρολόι" "Ακουστικά" + + "Τα ακουστικά συνδέθηκαν" "Τα ακουστικά συνδέθηκαν" "Εξοικονόμηση δεδομένων" @@ -812,6 +814,7 @@ "Στιγμιότυπα οθόνης" "Γενικά μηνύματα" "Αποθηκευτικός χώρος" + "Συμβουλές" "Instant Εφαρμογές" "Οι Instant Εφαρμογές δεν απαιτούν εγκατάσταση." "Πληροφορίες εφαρμογής" @@ -839,4 +842,11 @@ "Να επιτρέπεται στην εφαρμογή %1$s να εμφανίζει τμήματα από οποιαδήποτε εφαρμογή" "Επιτρέπεται" "Δεν επιτρέπεται" + "Πατήστε για προγραμματισμό της Εξοικονόμησης μπαταρίας" + "Αυτόματη ενεργοποίηση όταν η στάθμη της μπαταρίας είναι στο %d%%" + "Όχι, ευχαριστώ" + "Το χρονοδιάγραμμα της Εξοικονόμησης μπαταρίας ενεργοποιήθηκε" + "Η Εξοικονόμηση μπαταρίας θα ενεργοποιηθεί αυτόματα μόλις η στάθμη της μπαταρίας φτάσει κάτω από %d%%." + "Ρυθμίσεις" + "Το κατάλαβα" diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index c7ddc3e1ba97e5891e4e041b80437c1de0586314..d329fbc5246e3f5c9612e9aa5407c086a5b10297 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -33,7 +33,6 @@ "Ongoing" "Notifications" "Battery is low" - "Battery is low. Turn on Battery Saver" "%s remaining" "%s remaining, about %s left based on your usage" "%s remaining, about %s left" @@ -73,11 +72,10 @@ "Screenshot" "Saving screenshot…" "Saving screenshot…" - "Screenshot is being saved" "Screenshot saved" "Tap to view your screenshot" - "Couldn\'t capture screenshot" - "Problem encountered while saving screenshot" + "Couldn\'t save screenshot" + "Try taking screenshot again" "Can\'t save screenshot due to limited storage space" "Taking screenshots isn\'t allowed by the app or your organisation" "USB file transfer options" @@ -348,7 +346,7 @@ "On at sunset" "Until sunrise" "On at %s" - "Until %s" + "Until %s" "NFC" "NFC is disabled" "NFC is enabled" @@ -432,7 +430,8 @@ "%s will start capturing everything that\'s displayed on your screen." "Don\'t show again" "Clear all" - "Do not disturb is hiding notifications" + "Manage notifications" + "Do Not Disturb is hiding notifications" "Start now" "No notifications" "Profile may be monitored" @@ -538,7 +537,8 @@ "%1$s. Tap to set to vibrate." "%1$s. Tap to mute." "%s volume controls" - "Calls and notifications will ring" + + "Media output" "Phone call output" "No devices found" @@ -625,6 +625,7 @@ "%1$s %2$s" "notification controls" "notification snooze options" + "Snooze" "UNDO" "Snoozed for %1$s" @@ -688,6 +689,8 @@ "Battery" "Clock" "Headset" + + "Headphones connected" "Headset connected" "Data Saver" @@ -811,6 +814,7 @@ "Screenshots" "General Messages" "Storage" + "Hints" "Instant Apps" "Instant apps don\'t require installation." "App info" @@ -838,4 +842,11 @@ "Allow %1$s to show slices from any app" "Allow" "Deny" + "Tap to schedule Battery Saver" + "Turn on automatically when battery is at %d%%" + "No thanks" + "Battery Saver schedule turned on" + "Battery Saver will turn on automatically once battery goes below %d%%." + "Settings" + "OK" diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml index 36aa511fa93942ab55c04a66411641ca8c3557e5..3ba2cffc725541f7ec129d546c36eee64e56cad4 100644 --- a/packages/SystemUI/res/values-en-rCA/strings.xml +++ b/packages/SystemUI/res/values-en-rCA/strings.xml @@ -74,10 +74,8 @@ "Saving screenshot…" "Screenshot saved" "Tap to view your screenshot" - - - - + "Couldn\'t save screenshot" + "Try taking screenshot again" "Can\'t save screenshot due to limited storage space" "Taking screenshots isn\'t allowed by the app or your organisation" "USB file transfer options" @@ -348,8 +346,7 @@ "On at sunset" "Until sunrise" "On at %s" - - + "Until %s" "NFC" "NFC is disabled" "NFC is enabled" @@ -433,9 +430,8 @@ "%s will start capturing everything that\'s displayed on your screen." "Don\'t show again" "Clear all" - - - "Do not disturb is hiding notifications" + "Manage notifications" + "Do Not Disturb is hiding notifications" "Start now" "No notifications" "Profile may be monitored" @@ -541,7 +537,8 @@ "%1$s. Tap to set to vibrate." "%1$s. Tap to mute." "%s volume controls" - "Calls and notifications will ring" + + "Media output" "Phone call output" "No devices found" @@ -628,8 +625,7 @@ "%1$s %2$s" "notification controls" "notification snooze options" - - + "Snooze" "UNDO" "Snoozed for %1$s" @@ -693,6 +689,8 @@ "Battery" "Clock" "Headset" + + "Headphones connected" "Headset connected" "Data Saver" @@ -816,8 +814,7 @@ "Screenshots" "General Messages" "Storage" - - + "Hints" "Instant Apps" "Instant apps don\'t require installation." "App info" @@ -845,18 +842,11 @@ "Allow %1$s to show slices from any app" "Allow" "Deny" - - - - - - - - - - - - - - + "Tap to schedule Battery Saver" + "Turn on automatically when battery is at %d%%" + "No thanks" + "Battery Saver schedule turned on" + "Battery Saver will turn on automatically once battery goes below %d%%." + "Settings" + "OK" diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index c7ddc3e1ba97e5891e4e041b80437c1de0586314..d329fbc5246e3f5c9612e9aa5407c086a5b10297 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -33,7 +33,6 @@ "Ongoing" "Notifications" "Battery is low" - "Battery is low. Turn on Battery Saver" "%s remaining" "%s remaining, about %s left based on your usage" "%s remaining, about %s left" @@ -73,11 +72,10 @@ "Screenshot" "Saving screenshot…" "Saving screenshot…" - "Screenshot is being saved" "Screenshot saved" "Tap to view your screenshot" - "Couldn\'t capture screenshot" - "Problem encountered while saving screenshot" + "Couldn\'t save screenshot" + "Try taking screenshot again" "Can\'t save screenshot due to limited storage space" "Taking screenshots isn\'t allowed by the app or your organisation" "USB file transfer options" @@ -348,7 +346,7 @@ "On at sunset" "Until sunrise" "On at %s" - "Until %s" + "Until %s" "NFC" "NFC is disabled" "NFC is enabled" @@ -432,7 +430,8 @@ "%s will start capturing everything that\'s displayed on your screen." "Don\'t show again" "Clear all" - "Do not disturb is hiding notifications" + "Manage notifications" + "Do Not Disturb is hiding notifications" "Start now" "No notifications" "Profile may be monitored" @@ -538,7 +537,8 @@ "%1$s. Tap to set to vibrate." "%1$s. Tap to mute." "%s volume controls" - "Calls and notifications will ring" + + "Media output" "Phone call output" "No devices found" @@ -625,6 +625,7 @@ "%1$s %2$s" "notification controls" "notification snooze options" + "Snooze" "UNDO" "Snoozed for %1$s" @@ -688,6 +689,8 @@ "Battery" "Clock" "Headset" + + "Headphones connected" "Headset connected" "Data Saver" @@ -811,6 +814,7 @@ "Screenshots" "General Messages" "Storage" + "Hints" "Instant Apps" "Instant apps don\'t require installation." "App info" @@ -838,4 +842,11 @@ "Allow %1$s to show slices from any app" "Allow" "Deny" + "Tap to schedule Battery Saver" + "Turn on automatically when battery is at %d%%" + "No thanks" + "Battery Saver schedule turned on" + "Battery Saver will turn on automatically once battery goes below %d%%." + "Settings" + "OK" diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index c7ddc3e1ba97e5891e4e041b80437c1de0586314..d329fbc5246e3f5c9612e9aa5407c086a5b10297 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -33,7 +33,6 @@ "Ongoing" "Notifications" "Battery is low" - "Battery is low. Turn on Battery Saver" "%s remaining" "%s remaining, about %s left based on your usage" "%s remaining, about %s left" @@ -73,11 +72,10 @@ "Screenshot" "Saving screenshot…" "Saving screenshot…" - "Screenshot is being saved" "Screenshot saved" "Tap to view your screenshot" - "Couldn\'t capture screenshot" - "Problem encountered while saving screenshot" + "Couldn\'t save screenshot" + "Try taking screenshot again" "Can\'t save screenshot due to limited storage space" "Taking screenshots isn\'t allowed by the app or your organisation" "USB file transfer options" @@ -348,7 +346,7 @@ "On at sunset" "Until sunrise" "On at %s" - "Until %s" + "Until %s" "NFC" "NFC is disabled" "NFC is enabled" @@ -432,7 +430,8 @@ "%s will start capturing everything that\'s displayed on your screen." "Don\'t show again" "Clear all" - "Do not disturb is hiding notifications" + "Manage notifications" + "Do Not Disturb is hiding notifications" "Start now" "No notifications" "Profile may be monitored" @@ -538,7 +537,8 @@ "%1$s. Tap to set to vibrate." "%1$s. Tap to mute." "%s volume controls" - "Calls and notifications will ring" + + "Media output" "Phone call output" "No devices found" @@ -625,6 +625,7 @@ "%1$s %2$s" "notification controls" "notification snooze options" + "Snooze" "UNDO" "Snoozed for %1$s" @@ -688,6 +689,8 @@ "Battery" "Clock" "Headset" + + "Headphones connected" "Headset connected" "Data Saver" @@ -811,6 +814,7 @@ "Screenshots" "General Messages" "Storage" + "Hints" "Instant Apps" "Instant apps don\'t require installation." "App info" @@ -838,4 +842,11 @@ "Allow %1$s to show slices from any app" "Allow" "Deny" + "Tap to schedule Battery Saver" + "Turn on automatically when battery is at %d%%" + "No thanks" + "Battery Saver schedule turned on" + "Battery Saver will turn on automatically once battery goes below %d%%." + "Settings" + "OK" diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml index cfb90338188acabac1aad2ebaa5a410632e611b7..11e6b34720852f5ac0937478c6548e93addfde6e 100644 --- a/packages/SystemUI/res/values-en-rXC/strings.xml +++ b/packages/SystemUI/res/values-en-rXC/strings.xml @@ -431,7 +431,7 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‏‎‎‎‏‎‏‎‏‏‎‏‎‎‎‏‎‎‏‎‎‎‎‏‏‏‎‏‏‏‎‎‏‏‏‏‎‎‎‎‎‎‎‎‎‎‎Don\'t show again‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‏‏‎‎‏‎‎‏‏‎‎‎‎‎‎‏‏‏‏‎‏‎‎‏‎‏‎‏‎‏‏‏‏‎‏‎‎‎‎‏‎‎‎‎‏‎‏‎‏‏‎‎‎Clear all‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‏‎‏‏‎‏‏‏‎‏‏‎‏‎‏‎‎‏‏‎‏‎‎‎‏‎‎‏‎‎‎‎‏‏‎‎‎‎‏‎Manage notifications‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‏‎‎‏‎‎‏‏‏‎‏‎‎‎‎‎‎‎‏‏‎‎‎‎‏‎‎‏‎‏‏‏‎‎‏‏‎‎‎‎‏‏‎‎‎‎‏‏‎Do Not disturb is hiding notifications‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‏‏‎‏‏‎‎‎‏‎‎‏‎‎‏‎‏‏‎‎‏‏‎‎‎‏‏‏‎‎‎‏‏‎‏‏‎‎Do Not Disturb is hiding notifications‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‎‏‏‏‎‏‎‎‏‎‏‏‎‎‎‎‏‎‏‎‏‏‏‎‎‏‎‏‎‎‎‎‎‎‎‎‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‏‎‎Start now‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‎‎‏‏‏‎‏‎‎‏‏‏‏‎‎‏‏‎‏‏‎‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎‎‏‏‎‏‏‎‎‎‎‎‎‏‏‎‏‎‏‏‏‎‏‎‎No notifications‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‎‏‏‏‎‏‎‎‎‏‎‎‏‎‎‎‏‎‏‏‏‏‏‎‎‏‏‎‏‎‎‎‏‎‏‎Profile may be monitored‎‏‎‎‏‎" @@ -537,7 +537,8 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‏‏‏‏‏‎‎‎‎‎‎‎‏‏‎‎‏‏‎‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‎‏‏‎‏‎‏‏‎‏‎‎‎‏‎‏‎%1$s. Tap to set to vibrate.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‏‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎‎‎‎‎‎‏‎‎‏‏‏‎‎‏‏‎‏‎‎‏‏‎‏‎‎‎‏‏‎‎%1$s. Tap to mute.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‎‏‏‏‎‏‏‏‎‏‏‎‎‎‏‏‏‏‎‎‏‎‏‎‎‎‏‏‏‏‏‎‏‎‎‏‏‏‎‏‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‎‎‎%s volume controls‎‏‎‎‏‎" - "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‎‏‎‏‏‎‎‎‏‎‏‎‏‎‏‎‎‎‎‎‏‎‏‏‎‏‏‏‎‎‏‏‏‏‎‎‏‏‎‏‏‎‎‎‎‏‎‏‎‎‏‎‎Calls and notifications will ring‎‏‎‎‏‎" + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‏‎‏‎‎‎‏‎‎‎‎‏‏‏‏‎‎‏‎‏‎‎‏‎‎‎‎‎‏‏‎‎‎‏‏‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‎‎‏‎‎Media output‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‏‏‎‏‏‎‏‏‏‎‏‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‎‎‎‏‏‏‏‏‏‎‎‏‏‎‎‏‎‏‏‎‎‏‎‎‎‏‎Phone call output‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‎‏‎‎‎‎‎‏‏‏‎‏‎‎‏‎‎‎‏‏‏‎‎‏‎‏‎‎‎‏‏‏‎‎‎‎‎‎‎‏‏‎No devices found‎‏‎‎‏‎" @@ -688,6 +689,8 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‏‎‏‎‎‎‎‎‏‎‎‏‏‎‎‎‎‏‏‏‎‏‎Battery‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‏‎‏‎‏‏‎‎‏‏‏‏‏‎‏‏‏‎‎‏‏‏‎‎‏‏‏‎‏‎‎‏‏‏‎‏‎‏‎‏‎‎‏‎‎‎‎‏‏‏‎‎‎‏‎Clock‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‏‎‏‏‎‎‏‏‎‎‏‎‎‎‏‎‎‏‎‎‏‎‏‏‎‎‎‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎‎‏‏‏‏‎‎‏‎‎‏‎Headset‎‏‎‎‏‎" + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‎‏‏‎‏‏‏‏‎‎‏‏‎‏‎‎‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‏‎‏‏‏‏‎‎‏‎‎‏‏‏‎‏‎‏‎Headphones connected‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‎‏‎‏‎‎‏‏‏‎‎‏‎‏‏‎‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‎‏‏‎‏‏‏‏‏‎‏‎‏‏‎‎‏‎‎Headset connected‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‏‎‏‎‎‏‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‎‏‎‏‎‏‎‏‎‎‏‎‏‎‎Data Saver‎‏‎‎‏‎" @@ -811,8 +814,7 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‎‎‎‎‎‏‏‏‏‎‎‏‏‏‏‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‏‏‎‏‏‎‎‎‏‏‏‎‎‏‎‏‎‏‎‎Screenshots‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‏‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‎‎‏‏‏‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎General Messages‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‏‏‎‏‎‎‎‏‏‎‏‏‏‎‎‏‎‎‎‎‏‏‏‏‎‏‎‏‎‏‎‏‎‎‎‎‏‏‎‎‎‎‎‏‏‏‎‎‎‏‎‎‎‏‎Storage‎‏‎‎‏‎" - - + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‎‏‎‎‏‎‎‏‏‏‏‎‎‏‏‏‎‎‎‏‏‏‏‎‏‏‎‎‎‎‏‎‎‎‏‎‏‏‎‎‎‏‎Hints‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‏‏‎‏‎‎‏‏‏‏‎‏‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‎‎‏‎‏‏‏‎‎‎‏‏‏‏‏‎‏‎‏‏‎Instant Apps‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‎‎‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‎‎‏‎‎‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‏‎‏‏‎‎‎‏‎‎‎‏‎‎‎Instant apps don\'t require installation.‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‎‎‏‎‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‏‎‏‎‎‏‏‏‎‎‎‏‏‏‏‎‎‎‎‏‎‎‎‎‎‎‏‏‎‎‎‎‎App info‎‏‎‎‏‎" @@ -840,18 +842,11 @@ "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‏‎‏‏‏‏‏‎‏‏‎‏‎‎‏‏‎‎‏‎‏‏‎‎‎‎‎‎‏‏‎‏‎‏‏‎‏‎‏‎‎‎Allow ‎‏‎‎‏‏‎%1$s‎‏‎‎‏‏‏‎ to show slices from any app‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‎‎‎‎‏‏‏‏‎‏‎‎‎‏‏‏‎‎‎‎‏‎‏‎‏‏‎‏‎‏‏‎‎‎‏‎‏‏‎‎‎‎‏‏‏‏‏‎‎‎‎‏‎‎‏‎‏‎‏‎Allow‎‏‎‎‏‎" "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‏‎‎‎‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎‏‎‎‏‏‎‏‎‏‏‏‏‎‏‏‏‎‏‎‎‏‎‏‎‎‏‏‏‎Deny‎‏‎‎‏‎" - - - - - - - - - - - - - - + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‏‏‏‎‎‎‏‎‎‎‎‎‎‏‎‏‎‎‏‏‎‎‎‎‏‎‎‏‎‏‏‎‎‎‏‏‏‏‎‏‎‎‏‏‎‎‎‎‏‎‎‎Tap to schedule Battery Saver‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‏‏‏‏‎‎‎‏‎‎‏‎‏‏‎‎‏‎‏‎‎‎‎‏‎‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‏‎‎‏‎‏‏‎‎‏‎‎‎‎‎‎‎‏‎Turn on automatically when battery is at ‎‏‎‎‏‏‎%d‎‏‎‎‏‏‏‎%%‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‏‏‎‏‏‏‎‏‎‎‎‎‎‎‎‎‎‏‎‎‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‎‎No thanks‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‎‏‏‎‎‏‎‎‏‏‏‏‎‎‏‎‏‎‏‎‏‏‏‎‎‏‎‎‏‏‎‎‎‎‎‏‏‎‏‏‎‎‏‏‎‎‎‎‏‏‏‏‏‎‎Battery Saver schedule turned on‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‎‎‏‏‎‎‎‎‏‎‎‎‏‏‏‎‎‏‏‎‎‏‎‎‎‎‏‏‎‎‎‎‎‏‏‎‎‏‎‏‏‎‎‏‎‏‏‏‏‏‎‏‎‎‎‏‏‎‏‎‏‏‎Battery Saver will turn on automatically once battery goes below ‎‏‎‎‏‏‎%d‎‏‎‎‏‏‏‎%%.‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‏‏‎‏‏‎‏‏‏‏‎‎‎‏‎‏‏‏‏‏‎‎‏‏‎‎‏‎‎‎‎‏‎Settings‎‏‎‎‏‎" + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‎‏‎‏‎‏‏‏‏‏‎‎‏‎‏‎‏‎‏‎‏‏‎‏‏‏‎‎‎‏‏‎‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‎‏‎‏‎‏‎‎‎‎‏‎‎Got it‎‏‎‎‏‎" diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 4cc3dbfb85c2c90d6a346d6e4489253e814b40d4..644eb308b12a13e6748a60e25ab304888917e174 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -33,7 +33,6 @@ "Continuo" "Notificaciones" "Batería baja" - "Queda poca batería. Activa el Ahorro de batería" "Queda un %s de batería." "Batería: %s (tiempo restante aproximado según tu uso: %s)" "Batería: %s (tiempo restante aproximado: %s)" @@ -73,11 +72,12 @@ "Captura de pantalla" "Guardando captura de pantalla" "Guardando la captura de pantalla..." - "Se está guardando la captura de pantalla" "Se guardó la captura de pantalla" "Presiona para ver la captura de pantalla" - "No se pudo tomar la captura de pantalla" - "Se produjo un error al guardar la captura de pantalla" + + + + "No se puede guardar la captura de pantalla debido a que no hay suficiente espacio de almacenamiento" "La app o tu organización no permiten las capturas de pantalla" "Opciones de transferencia de archivos por USB" @@ -275,8 +275,7 @@ "Caja para postres" "Protector pantalla" "Ethernet" - - + "Mantén presionados los íconos para ver más opciones" "No molestar" "Solo prioridad" "Solo alarmas" @@ -351,7 +350,8 @@ "Al atardecer" "Hasta el amanecer" "A la(s) %s" - "Hasta la(s) %s" + + "NFC" "La tecnología NFC está inhabilitada" "La tecnología NFC está habilitada" @@ -435,7 +435,9 @@ "%s comenzará la captura de todo lo que se muestre en la pantalla." "No volver a mostrar" "Borrar todo" - "El modo No interrumpir oculta las notificaciones" + + + "No interrumpir oculta las notificaciones" "Comenzar ahora" "No hay notificaciones" "Es posible que se supervise el perfil." @@ -541,7 +543,8 @@ "%1$s. Presiona para establecer el modo vibración." "%1$s. Presiona para silenciar." "Controles de volumen %s" - "Sonarán las llamadas y notificaciones" + + "Salida multimedia" "Salida de llamada telefónica" "No se encontraron dispositivos" @@ -628,6 +631,8 @@ "%2$s de %1$s" "controles de notificación" "opciones para posponer notificaciones" + + "DESHACER" "Posponer %1$s" @@ -691,6 +696,8 @@ "Batería" "Reloj" "Auriculares" + + "Auriculares conectados" "Auriculares conectados" "Reducir datos" @@ -725,11 +732,9 @@ "Clave de código derecho" "Ícono izquierdo" "Ícono derecho" - - + "Mantén presionado para agregar mosaicos" "Arrastra aquí para quitar" - - + "Necesitas al menos 6 mosaicos" "Editar" "Hora" @@ -816,6 +821,7 @@ "Capturas de pantalla" "Mensajes generales" "Almacenamiento" + "Sugerencias" "Apps instantáneas" "Las Apps instantáneas no requieren instalación." "Información de apps" @@ -833,12 +839,9 @@ "Reemplazar" "Apps que se ejecutan en segundo plano" "Presiona para obtener información sobre el uso de datos y de la batería" - - - - - - + "¿Deseas desactivar los datos móviles?" + "No tendrás acceso a datos ni Internet de %s. Internet solo estará disponible mediante Wi-Fi." + "tu proveedor" "Como una app está bloqueando una solicitud de permiso, Configuración no puede verificar tu respuesta." "¿Permitir que %1$s muestre fragmentos de %2$s?" "- Puede leer información sobre %1$s" @@ -846,4 +849,11 @@ "Permitir que %1$s muestre fragmentos de cualquier app" "Permitir" "Rechazar" + "Presiona para programar el Ahorro de batería" + "Activar automáticamente cuando quede %d%% de batería" + "No, gracias" + "Se activó la programación del Ahorro de batería" + "El Ahorro de batería se activará automáticamente cuando quede menos de %d%% de batería." + "Configuración" + "Entendido" diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index ef4d35a8e8b09d05e60355ad4310feab877aef13..8eb35e6339c5c33e5e793fa39084d126d70e29b0 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -33,7 +33,6 @@ "Entrante" "Notificaciones" "Batería baja" - "Queda poca batería. Activa la función Ahorro de batería" "Queda un %s de batería" "Queda un %s (tiempo restante aproximado según tu uso: %s)" "Queda un %s (tiempo restante aproximado: %s)" @@ -73,11 +72,12 @@ "Captura de pantalla" "Guardando captura..." "Guardando captura..." - "La captura de pantalla se está guardando" "Se ha guardado la captura de pantalla" "Toca para ver la captura de pantalla" - "No se ha podido guardar la captura de pantalla" - "No se ha podido guardar la captura de pantalla" + + + + "No se puede guardar la captura de pantalla porque no hay espacio de almacenamiento suficiente" "La aplicación o tu organización no permiten realizar capturas de pantalla" "Opciones de transferencia de archivos por USB" @@ -350,7 +350,8 @@ "Al atardecer" "Hasta el amanecer" "Hora: %s" - "Hasta: %s" + + "NFC" "La conexión NFC está inhabilitada" "La conexión NFC está habilitada" @@ -434,7 +435,9 @@ "%s empezará a capturar todo lo que aparezca en la pantalla." "No volver a mostrar" "Borrar todo" - "El modo No molestar oculta las notificaciones" + + + "El modo No molestar oculta las notificaciones" "Iniciar ahora" "No hay notificaciones" "Es posible que se supervise el perfil" @@ -540,7 +543,8 @@ "%1$s. Toca para activar la vibración." "%1$s. Toca para silenciar." "Controles de volumen %s" - "Las llamadas y las notificaciones sonarán" + + "Salida multimedia" "Salida de llamadas" "No se ha podido encontrar ningún dispositivo" @@ -627,6 +631,8 @@ "%2$s de %1$s" "Controles de las notificaciones" "Opciones para posponer las notificaciones" + + "DESHACER" "Volverá a mostrarse en %1$s" @@ -690,6 +696,8 @@ "Batería" "Reloj" "Auriculares" + + "Auriculares conectados" "Auriculares conectados" "Ahorro de datos" @@ -813,6 +821,7 @@ "Capturas de pantalla" "Mensajes generales" "Almacenamiento" + "Sugerencias" "Aplicaciones Instantáneas" "No es necesario instalar las Aplicaciones Instantáneas." "Información de la aplicación" @@ -840,4 +849,11 @@ "Permitir que %1$s muestre fragmentos de cualquier aplicación" "Permitir" "Denegar" + "Tocar para programar el modo Ahorro de batería" + "Activar automáticamente cuando quede un %d %% de batería" + "No, gracias" + "Se ha activado la programación del modo Ahorro de batería" + "El modo Ahorro de batería se activará automáticamente cuando quede menos de un %d %% de batería." + "Ajustes" + "Entendido" diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index 07f0a5ba30a3e60a701eb1db34b475742d38773e..1013c4a601cc9d7aa6bb864e408b7a7083da9d3a 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -33,7 +33,6 @@ "Jätkuv" "Märguanded" "Aku hakkab tühjaks saama" - "Aku hakkab tühjaks saama. Lülitage sisse akusäästja" "Jäänud on %s" "%s on alles, teie kasutuse põhjal on jäänud umbes %s" "%s on alles, umbes %s on jäänud" @@ -73,11 +72,12 @@ "Ekraanipilt" "Kuvatõmmise salvestamine ..." "Kuvatõmmise salvestamine ..." - "Ekraanipilti salvestatakse" "Ekraanipilt salvestati" "Puudutage ekraanipildi vaatamiseks" - "Ekraanipilti ei saanud jäädvustada" - "Ekraanipildi salvestamisel ilmnes probleem" + + + + "Piiratud salvestusruumi tõttu ei saa ekraanipilti salvestada" "Rakendus või teie organisatsioon ei luba ekraanipilte jäädvustada" "USB-failiedastuse valikud" @@ -275,8 +275,7 @@ "Maiustusekorv" "Ekraanisäästja" "Ethernet" - - + "Lisavalikute nägemiseks vajutage pikalt ikoone" "Mitte segada" "Ainult prioriteetsed" "Ainult äratused" @@ -351,7 +350,8 @@ "Sissel. päikeselooj." "Kuni päikesetõusuni" "Sisselülitam. kell %s" - "Kuni %s" + + "NFC" "NFC on keelatud" "NFC on lubatud" @@ -435,7 +435,9 @@ "%s hakkab jäädvustama kõike, mida ekraanil kuvatakse." "Ära kuva uuesti" "Tühjenda kõik" - "Režiim Mitte segada peidab märguandeid" + + + "Režiim Mitte segada peidab märguandeid" "Alusta kohe" "Märguandeid pole" "Profiili võidakse jälgida" @@ -541,7 +543,8 @@ "%1$s. Puudutage vibreerimise määramiseks." "%1$s. Puudutage vaigistamiseks." "Helitugevuse juhtnupud: %s" - "Kõnede ja märguannete puhul kõlab helin" + + "Meediaväljund" "Telefonikõne väljund" "Seadmeid ei leitud" @@ -628,6 +631,8 @@ "%1$s, %2$s" "märguannete juhtnupud" "märguannete edasilükkamise valikud" + + "VÕTA TAGASI" "Edasi lükatud %1$s" @@ -691,6 +696,8 @@ "Aku" "Kell" "Peakomplekt" + + "Kõrvaklapid on ühendatud" "Peakomplekt on ühendatud" "Andmeside mahu säästja" @@ -814,6 +821,7 @@ "Ekraanipildid" "Üldised sõnumid" "Salvestusruum" + "Vihjed" "Installimata avatavad rakendused" "Installimata avatavaid rakendusi pole vaja installida." "Rakenduse teave" @@ -841,4 +849,11 @@ "Luba rakendus %1$s, et kuvada lõike mis tahes rakendusest" "Luba" "Keela" + "Puudutage akusäästja ajastamiseks" + "Lülita automaatselt sisse, kui aku tase langeb alla %d%%" + "Tänan, ei" + "Automaatne akusäästja on sisse lülitatud" + "Kui aku tase langeb alla %d%%, lülitub akusäästja automaatselt sisse." + "Seaded" + "Selge" diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index 0c7bd4e0344a5a50e2131ea54ad79182a48a3a0c..dc9ba53712984c7c22a2eeb821c4232377f71c16 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -33,7 +33,6 @@ "Abian" "Jakinarazpenak" "Bateria agortzen ari da" - "Bateria gutxi gelditzen da. Aktibatu Bateria-aurrezlea." "%s gelditzen da" "%s gelditzen da; %s inguru gelditzen dira, erabileraren arabera" "%s gelditzen da; %s inguru gelditzen dira" @@ -64,7 +63,7 @@ "Ireki %1$s %2$s konektatzen den guztietan" "Ireki %1$s %2$s konektatzen den guztietan" "USB arazketa onartu?" - "Ordenagailuaren RSA gakoaren hatz-marka hau da:\n%1$s" + "Ordenagailuaren RSA gakoaren erreferentzia-gako digitala hau da:\n%1$s" "Onartu beti ordenagailu honetatik" "Ez da onartzen USB arazketa" "Gailu honetan saioa hasita duen erabiltzaileak ezin du aktibatu USB arazketa. Eginbide hori erabiltzeko, aldatu erabiltzaile nagusira." @@ -73,11 +72,12 @@ "Pantaila-argazkia" "Pantaila-argazkia gordetzen…" "Pantaila-argazkia gordetzen…" - "Pantaila-argazkia gordetzen ari da" "Gorde da pantaila-argazkia" "Sakatu pantaila-argazkia ikusteko" - "Ezin izan da atera pantaila-argazkia" - "Arazo bat izan da pantaila-argazkia gordetzean" + + + + "Ezin da gorde pantaila-argazkia ez delako gelditzen tokirik" "Aplikazioak edo erakundeak ez du onartzen pantaila-argazkiak ateratzea" "USB fitxategiak transferitzeko aukerak" @@ -275,8 +275,7 @@ "Postreen kutxa" "Pantaila-babeslea" "Ethernet" - - + "Aukera gehiago ikusteko, eduki sakatuta ikonoak" "Ez molestatu" "Lehentasunezkoak soilik" "Alarmak soilik" @@ -351,7 +350,8 @@ "Ilunabarrean" "Ilunabarrera arte" "Aktibatze-ordua: %s" - "%s arte" + + "NFC" "Desgaituta dago NFC" "Gaituta dago NFC" @@ -435,7 +435,9 @@ "%s aplikazioak pantailan bistaratzen den guztia grabatuko du." "Ez erakutsi berriro" "Garbitu guztiak" - "\"Ez molestatu\" modua jakinarazpenak ezkutatzen ari da" + + + "\"Ez molestatu\" modua jakinarazpenak ezkutatzen ari da" "Hasi" "Ez dago jakinarazpenik" "Baliteke profila kontrolatuta egotea" @@ -541,7 +543,8 @@ "%1$s. Sakatu hau dardara ezartzeko." "%1$s. Sakatu hau audioa desaktibatzeko." "%s gailuaren bolumena kontrolatzeko aukerak" - "Tonua joko da deiak eta jakinarazpenak jasotzean" + + "Multimedia-irteera" "Telefono-deiaren irteera" "Ez da aurkitu gailurik" @@ -628,6 +631,8 @@ "%1$s %2$s" "jakinarazpena kontrolatzeko aukerak" "jakinarazpena atzeratzeko aukerak" + + "DESEGIN" "%1$sz atzeratu da" @@ -691,6 +696,8 @@ "Bateria" "Erlojua" "Mikrofonodun entzungailua" + + "Aurikularrak konektatu dira" "Mikrofonodun entzungailua konektatu da" "Datu-aurrezlea" @@ -814,6 +821,7 @@ "Pantaila-argazkiak" "Mezu orokorrak" "Memoria" + "Aholkuak" "Zuzeneko aplikazioak" "Zuzeneko aplikazioak ez dira instalatu behar." "Aplikazioari buruzko informazioa" @@ -832,7 +840,7 @@ "Aplikazioak exekutatzen ari dira atzeko planoan" "Sakatu bateria eta datuen erabilerari buruzko xehetasunak ikusteko" "Datu-konexioa desaktibatu nahi duzu?" - "%s erabilita ezingo dituzu erabili datuak edo Internet. Wi-Fi sare batera soilik konektatu ahal izango duzu Internetera." + "%s erabilita ezingo dituzu erabili datuak edo Internet. Wi-Fi sare baten bidez soilik konektatu ahal izango zara Internetera." "Uneko operadorea" "Aplikazio bat baimen-eskaera oztopatzen ari denez, ezarpenek ezin dute egiaztatu erantzuna." "%1$s aplikazioari %2$s aplikazioaren zatiak erakustea baimendu nahi diozu?" @@ -841,4 +849,11 @@ "Baimendu %1$s aplikazioari edozein aplikazioren zatiak erakustea" "Baimendu" "Ukatu" + "Sakatu bateria-aurrezlea noiz aktibatu antolatzeko" + "Aktibatu automatikoki bateriaren %% %d gelditzen denean" + "Ez" + "Bateria-aurrezle aktibatu da" + "Bateria-aurrezlea automatikoki aktibatuko da bateriaren %% %d gelditzen denean." + "Ezarpenak" + "Ados" diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 9dcdf68b259e83bb02fb6b698fec5ac7c7c98d7d..a52c347446e03d971764f0f9b6c4734efd063484 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -33,14 +33,13 @@ "در حال انجام" "اعلان‌ها" "شارژ باتری کم است" - "شارژ باتری کم است. «بهینه‌سازی باتری» را روشن کنید" "%s باقی مانده است" "%s باقی مانده، براساس میزان مصرف شما حدود %s باقی مانده است" "%s باقی مانده، حدود %s باقی مانده است" "%s باقی مانده است. بهینه‌سازی باتری روشن است." - "‏شارژ USB پشتیبانی نمی‌شود.\nفقط از شارژر ارائه شده استفاده کنید." - "‏شارژ با USB پشتیبانی نمی‌شود." - "فقط از شارژر ارائه شده استفاده کنید." + "‏ازطریق USB شارژ نمی‌شود. از شارژر ارائه‌شده با دستگاه استفاده کنید." + "‏ازطریق USB شارژ نمی‌شود" + "از شارژر ارائه‌شده با دستگاه استفاده کنید" "تنظیمات" "بهینه‌سازی باتری روشن شود؟" "روشن کردن" @@ -73,11 +72,10 @@ "عکس صفحه‌نمایش" "در حال ذخیره عکس صفحه‌نمایش..." "در حال ذخیره عکس صفحه‌نمایش..." - "عکس صفحه‌نمایش درحال ذخیره شدن است" "عکس صفحه‌نمایش ذخیره شد" "برای مشاهده عکس صفحه‌نمایشتان ضربه بزنید" - "عکس صفحه‌نمایش گرفته نشد" - "هنگام ذخیره کردن عکس صفحه‌نمایش مشکلی پیش آمد" + "عکس صفحه‌نمایش ذخیره نشد" + "دوباره عکس صفحه‌نمایش بگیرید" "به دلیل محدود بودن فضای ذخیره‌سازی نمی‌توان عکس صفحه‌نمایش را ذخیره کرد" "برنامه یا سازمان شما اجازه نمی‌دهند عکس صفحه‌نمایش بگیرید." "‏گزینه‌های انتقال فایل USB" @@ -103,8 +101,7 @@ "باز کردن دوربین" "انتخاب طرح‌بندی جدید کار" "لغو" - - + "حسگر اثر انگشت را لمس کنید" "نماد اثر انگشت" "نماد برنامه" "بخش پیام راهنما" @@ -148,28 +145,28 @@ "خاموش." "متصل." "در حال مرتبط‌ شدن." - "GPRS" - "1 X" - "HSPA" - "3G" - "3.5G" - "4G" - "4G+‎" - "LTE" - "LTE+‎" - "CDMA" - "رومینگ" - "Edge" + "GPRS" + "HSPA" + "3G" + "3.5G" + "3.5G+‎" + "4G" + "4G+‎" + "LTE" + "LTE+‎" + "CDMA" + "رومینگ" + "EDGE" "Wi-Fi" "بدون سیم کارت." "داده‌ تلفن همراه" "داده تلفن همراه روشن" - "داده تلفن همراه خاموش" + "داده تلفن همراه خاموش است" "اتصال اینترنت با بلوتوث تلفن همراه." "حالت هواپیما." "‏VPN روشن است." "سیم‌کارتی موجود نیست." - "تغییر شبکه شرکت مخابراتی." + "تغییر شبکه شرکت مخابراتی" "باز کردن جزئیات باتری" "باتری %d درصد." "در حال شارژ باتری، %d درصد" @@ -208,7 +205,7 @@ "حالت هواپیما روشن است." "حالت هواپیما خاموش شد." "حالت هواپیما روشن شد." - "«مزاحم نشوید» روشن است، فقط اولویت‌دار." + "«مزاحم نشوید» روشن است." "حالت «مزاحم نشوید» روشن است، سکوت کامل." "حالت «مزاحم نشوید» روشن است، فقط هشدارها." "مزاحم نشوید." @@ -274,8 +271,7 @@ "ویترین دسر" "محافظ صفحه" "اترنت" - - + "برای گزینه‌های بیشتر، نمادها را لمس کنید و نگه‌دارید" "مزاحم نشوید" "فقط اولویت‌دار" "فقط هشدارها" @@ -288,6 +284,7 @@ "صوت" "هدست" "ورودی" + "روشن کردن…" "روشنایی" "چرخش خودکار" "چرخش خودکار صفحه‌نمایش" @@ -312,7 +309,7 @@ "‏Wi-Fi خاموش است" "‏Wi-Fi روشن" "‏هیچ شبکه Wi-Fi موجود نیست" - "هشدار" + "روشن کردن…" "فرستادن" "در حال فرستادن" "دستگاه بدون نام" @@ -329,7 +326,8 @@ "در حال اتصال..." "اتصال به اینترنت با تلفن همراه" "نقطه اتصال" - "درحال روشن کردن…" + "روشن کردن…" + "صرفه‌جویی داده روشن است" ‏%d دستگاه ‏%d دستگاه @@ -343,13 +341,12 @@ "%s استفاده شده" "%s محدودیت" "هشدار %s" - "نمایه کاری" - "اعلان‌ها و برنامه‌ها خاموش است" + "نمایه کاری" "نور شب" "غروب روشن می‌شود" "تا طلوع" "ساعت %s روشن می‌شود" - "تا %s" + "تا %s" "NFC" "‏NFC غیرفعال است" "‏NFC فعال است" @@ -397,9 +394,9 @@ "سکوت\nکامل" "فقط\nاولویت‌دار" "فقط\nهشدارها" - "در حال شارژ (%s تا شارژ کامل)" - "در حال شارژ سریع (%s تا شارژ کامل)" - "در حال شارژ آهسته (%s تا شارژ کامل)" + "%2$s • درحال شارژ شدن (%s تا شارژ کامل)" + "%2$s • درحال شارژ سریع (%s تا شارژ کامل)" + "%2$s • درحال شارژ آهسته (%s تا شارژ کامل)" "تغییر کاربر" "تعویض کاربر، کاربر کنونی %s" "کاربر کنونی %s" @@ -433,6 +430,8 @@ "%s شروع به ضبط هر چیزی می‌کند که در صفحه‌نمایش شما نمایش داده می‌شود." "دوباره نشان داده نشود" "پاک کردن همه موارد" + "مدیریت اعلان‌ها" + "«مزاحم نشوید» اعلان‌ها را پنهان می‌کند" "اکنون شروع شود" "اعلانی موجود نیست" "شاید نمایه کنترل شود" @@ -500,6 +499,7 @@ "راه‌اندازی" "%1$s. ‏%2$s" "اکنون خاموش کنید" + "تنظیمات صدا" "بزرگ کردن" "کوچک کردن" "تغییر دستگاه خروجی" @@ -537,6 +537,8 @@ "‏%1$s. برای تنظیم روی لرزش، ضربه بزنید." "‏%1$s. برای بی‌صدا کردن ضربه بزنید." "‏%s کنترل‌های میزان صدا" + + "خروجی رسانه" "خروجی تماس تلفنی" "دستگاهی پیدا نشد" @@ -592,12 +594,27 @@ "با کنترل‌های قدرتمند اعلان می‌توانید سطح اهمیت اعلان‌های هر برنامه را از ۰ تا ۵ تعیین کنید. \n\n""سطح ۵"" \n- در صدر فهرست اعلان‌ها نشان داده می‌شود \n- وقفه برای نمایش تمام‌صفحه مجاز است \n- همیشه اجمالی نشان داده می‌شود \n\n""سطح ۴"" \n- وقفه برای نمایش تمام‌صفحه مجاز نیست \n- همیشه اجمالی نشان داده می‌شود \n\n""سطح ۳"" \n- وقفه برای نمایش تمام‌صفحه مجاز نیست \n- هیچ‌وقت اجمالی نشان داده نمی‌شود \n\n""سطح ۲"" \n- وقفه برای نمایش تمام‌صفحه مجاز نیست \n- هیچ‌وقت اجمالی نشان داده نمی‌شود \n- هیچ‌وقت صدا و لرزش ایجاد نمی‌کند \n\n""سطح ۱"" \n- نمایش تمام صفحه مجاز نیست \n- هیچ‌وقت اجمالی نشان داده نمی‌شود \n- هیچ‌وقت صدا یا لرزش ایجاد نمی‌کند \n- در قفل صفحه و نوار وضعیت پنهان است \n- در پایین فهرست اعلان‌ها نشان داده می‌شود \n\n""سطح ۰"" \n- همه اعلان‌های این برنامه مسدود است" "اعلان‌ها" "دیگر این اعلان‌ها را نخواهید دید" + "این اعلان‌ها کوچک خواهد شد" "معمولاً این اعلان‌ها را رد می‌کنید. \nهمچنان نشان داده شود؟" "نمایش این اعلان‌ها ادامه یابد؟" "توقف اعلان‌ها" "همچنان نشان داده شود" + "کوچک کردن" "نمایش اعلان از این برنامه ادامه یابد؟" "نمی‌توان این اعلان‌ها را خاموش کرد" + "دوربین" + "میکروفون" + "نمایش روی برنامه‌های دیگر در صفحه‌نمایش" + + این برنامه %1$s و %2$s است. + این برنامه %1$s و %2$s است. + + + با استفاده از %1$s و %2$s + با استفاده از %1$s و %2$s + + "تنظیمات" + "تأیید" "کنترل‌های اعلان برای %1$s باز شد" "کنترل‌های اعلان برای %1$s بسته شد" "مجاز کردن اعلان‌های این کانال" @@ -608,6 +625,7 @@ "%1$s %2$s" "کنترل‌های اعلان" "گزینه‌های تعویق اعلان" + "تعویق" "واگرد" "%1$s به تعویق افتاد" @@ -671,6 +689,8 @@ "باتری" "ساعت" "هدست" + + "هدفون وصل شد" "هدست وصل شد" "صرفه‌جویی داده" @@ -705,8 +725,9 @@ "کدکلید راست" "نماد چپ" "نماد راست" - "برای افزودن کاشی، بکشید" + "نگه‌داشتن و کشیدن برای افزودن کاشی" "برای حذف، به اینجا بکشید" + "حداقل به ۶ کاشی نیاز دارید" "ویرایش" "زمان" @@ -750,7 +771,7 @@ "بستن تنظیمات سریع." "تنظیم زنگ ساعت." "با %s به سیستم وارد شده‌اید" - "عدم اتصال به اینترنت." + "عدم اتصال به اینترنت" "باز کردن جزئیات." "باز کردن تنظیمات %s." "ویرایش ترتیب تنظیمات." @@ -793,11 +814,13 @@ "عکس‌های صفحه‌نمایش" "پیام‌های عمومی" "فضای ذخیره‌سازی" + "نکات" "برنامه‌های فوری" "برنامه‌های فوری نیاز به نصب ندارند." "اطلاعات برنامه" "رفتن به مرورگر" "داده تلفن همراه" + "%s%s" "‏Wi-Fi خاموش است" "بلوتوث خاموش است" "«مزاحم نشوید» خاموش است" @@ -809,7 +832,9 @@ "جایگزین کردن" "برنامه‌هایی که در پس‌زمینه اجرا می‌شوند" "برای جزئیات مربوط به مصرف باتری و داده، ضربه بزنید" - "داده شبکه تلفن همراه خاموش شود؟" + "داده تلفن همراه خاموش شود؟" + "‏نمی‌توانید ازطریق %s به داده یا اینترنت دسترسی داشته باشید. اینترنت فقط ازطریق Wi-Fi دردسترس خواهد بود." + "شرکت مخابراتی شما" "چون برنامه‌ای درحال ایجاد تداخل در درخواست مجوز است، «تنظیمات» نمی‌تواند پاسخ شما را تأیید کند." "به %1$s اجازه داده شود تکه‌های %2$s را نشان دهد؟" "- می‌تواند اطلاعات %1$s را بخواند" @@ -817,4 +842,11 @@ "به %1$s اجازه داده شود تکه‌هایی از برنامه‌ها نشان دهد" "مجاز" "رد کردن" + "برای زمان‌بندی «بهینه‌سازی باتری» ضربه بزنید" + "وقتی شارژ باتری به %d%% رسید، به‌طور خودکار روشن شود" + "نه متشکرم" + "زمان‌بندی «بهینه‌سازی باتری» روشن شد" + "وقتی شارژ باتری به زیر %d%% برسد، «بهینه‌سازی باتری» به‌طور خودکار روشن می‌شود." + "تنظیمات" + "متوجه شدم" diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 6bf02b1c4b775697ab70fe5f187e08aaeb7b18e2..477a9e72c09818426f87f17c55462cee1898f907 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -33,7 +33,6 @@ "Käynnissä olevat" "Ilmoitukset" "Akku on vähissä" - "Akku on vähissä, ota virransäästö käyttöön" "%s jäljellä" "%s käytettävissä, noin %s jäljellä käytön perusteella" "%s käytettävissä, noin %s jäljellä" @@ -73,11 +72,12 @@ "Kuvakaappaus" "Tallennetaan kuvakaappausta..." "Tallennetaan kuvakaappausta..." - "Kuvakaappausta tallennetaan" "Kuvakaappaus tallennettu" "Napauta katsoaksesi kuvakaappausta" - "Kuvakaappauksen tallennus epäonnistui" - "Kuvakaappausta tallennettaessa tapahtui virhe" + + + + "Kuvakaappauksen tallennus epäonnistui, sillä tallennustilaa ei ole riittävästi" "Sovellus tai organisaatio ei salli kuvakaappauksien tallentamista." "USB-tiedostonsiirtoasetukset" @@ -273,8 +273,7 @@ "Jälkiruokavitriini" "Näytönsäästäjä" "Ethernet" - - + "Katso lisää vaihtoehtoja koskettamalla kuvakkeita pitkään" "Älä häiritse" "Vain tärkeät" "Vain herätykset" @@ -349,7 +348,8 @@ "Auringon laskiessa" "Auringonnousuun" "Käyttöön klo %s" - "%s saakka" + + "NFC" "NFC on poistettu käytöstä" "NFC on käytössä" @@ -433,7 +433,9 @@ "%s alkaa tallentaa kaiken näytölläsi näkyvän." "Älä näytä uudelleen" "Poista kaikki" - "Älä häiritse ‑tila piilottaa ilmoitukset." + + + "Älä häiritse ‑tila piilottaa ilmoitukset" "Aloita nyt" "Ei ilmoituksia" "Profiilia saatetaan valvoa" @@ -539,7 +541,8 @@ "%1$s. Siirry värinätilaan napauttamalla." "%1$s. Mykistä napauttamalla." "Äänenvoimakkuuden säädin: %s" - "Puhelut ja ilmoitukset soivat" + + "Median äänentoisto" "Puhelun äänentoisto" "Laitteita ei löytynyt" @@ -626,6 +629,8 @@ "%1$s %2$s" "Ilmoitusten hallinta" "Ilmoitusten torkkuasetukset" + + "KUMOA" "Torkku: %1$s" @@ -689,6 +694,8 @@ "Akku" "Kello" "Kuulokemikrofoni" + + "Kuulokkeet liitetty" "Kuulokemikrofoni liitetty" "Data Saver" @@ -812,6 +819,7 @@ "Kuvakaappaukset" "Yleiset viestit" "Tallennustila" + "Vihjeet" "Instant Apps" "Pikasovelluksia ei tarvitse asentaa." "Sovelluksen tiedot" @@ -839,4 +847,11 @@ "Salli sovelluksen %1$s näyttää osia mistä tahansa sovelluksesta" "Salli" "Estä" + "Ajoita virransäästö napauttamalla" + "Käynnistä automaattisesti, kun akun lataustaso on %d %%." + "Ei kiitos" + "Virransäästön ajoitus otettu käyttöön" + "Virransäästö käynnistyy automaattisesti, kun akun lataustaso on alle %d %%." + "Asetukset" + "Selvä" diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 7ceb7ee180436599e5b649e8c978c2997845e2ef..0353868334d41fd0495b0ced44170dd7202644db 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -33,14 +33,13 @@ "En cours" "Notifications" "Pile faible" - "La pile est faible. Activez le mode Économie d\'énergie." "%s restants" "Il reste %s, environ %s en fonction de votre usage" "Il reste %s, environ %s" "%s restants. La fonction Économie d\'énergie est activée." - "Chargement USB non compatible.\nVous devez utiliser le chargeur fourni." - "Le chargement par USB n\'est pas pris en charge." - "Utilisez uniquement le chargeur fourni." + "Impossible de charger l\'appareil par USB. Servez-vous du chargeur fourni avec celui-ci." + "Impossible de charger l\'appareil par USB" + "Servez-vous du chargeur fourni avec votre appareil" "Paramètres" "Activer la fonction Économie d\'énergie?" "Activer" @@ -73,11 +72,12 @@ "Capture d\'écran" "Enregistrement capture écran…" "Enregistrement capture écran…" - "Enregistrement de la capture d\'écran en cours…" "Capture d\'écran enregistrée" "Touchez pour afficher votre capture d\'écran" - "Impossible de réaliser une capture d\'écran" - "Une erreur s\'est produite lors de l\'enregistrement de la capture d\'écran" + + + + "Impossible d\'enregistrer la capture d\'écran, car l\'espace de stockage est limité" "L\'application ou votre organisation n\'autorise pas les saisies d\'écran" "Options transfert fichiers USB" @@ -103,8 +103,7 @@ "Ouvrir l\'appareil photo" "Sélectionner un nouveau format de tâche" "Annuler" - - + "Touchez le capteur d\'empreintes digitales" "Icône d\'empreinte digitale" "Icône de l\'application" "Zone de message d\'aide" @@ -148,28 +147,28 @@ "Désactivé" "Connecté" "Connexion." - "GPRS" - "1x" - "3G+" - "3G" - "3G+" - "4G" - "4G+" - "LTE" - "LTE+" - "CDMA" - "Itinérance" - "EDGE" + "GPRS" + "HSPA" + "3G" + "3.5G" + "3.5G+" + "4G" + "4G+" + "LTE" + "LTE+" + "CDMA" + "Itinérance" + "EDGE" "Wi-Fi" "Aucune carte SIM" "Données cellulaires" "Données cellulaires activées" - "Données cellulaires désactivées" + "Données cellulaires désactivées" "Partage de connexion Bluetooth" "Mode Avion" "RPV activé." "Aucune carte SIM." - "Modification du réseau du fournisseur de services" + "Changer de réseau de fournisseur de services" "Ouvrir les détails de la pile" "Pile : %d pour cent" @@ -210,7 +209,7 @@ "Mode Avion : activé" "Le mode Avion est désactivé." "Le mode Avion est activé." - "Mode « Ne pas déranger » activé, interruptions prioritaires uniquement." + "Le mode Ne pas déranger est activé." "Mode « Ne pas déranger » activé, aucune interruption" "Mode « Ne pas déranger » activé, alarmes uniquement." "Ne pas déranger." @@ -276,8 +275,7 @@ "Vitrine des desserts" "Écran de veille" "Ethernet" - - + "Maintenez le doigt sur les icônes pour afficher plus d\'options" "Ne pas déranger" "Prioritaires seulement" "Alarmes seulement" @@ -290,6 +288,7 @@ "Audio" "Écouteurs" "Entrée" + "Activation en cours…" "Luminosité" "Rotation automatique" "Rotation automatique de l\'écran" @@ -314,7 +313,7 @@ "Wi-Fi désactivé" "Wi-Fi activé" "Aucun réseau Wi-Fi à proximité" - "Alarme" + "Activation en cours…" "Diffuser" "Diffusion" "Appareil sans nom" @@ -331,7 +330,8 @@ "Connexion en cours…" "Partage de connexion" "Point d\'accès sans fil" - "Activation en cours…" + "Activation en cours…" + "Écon. données activée" %d appareil %d appareils @@ -345,13 +345,13 @@ "Quantité de données utilisées :%s" "Limite : %s" "Avertissement : %s" - "Profil professionnel" - "Les notifications et les applications sont désactivées" + "Profil professionnel" "Éclairage nocturne" "Au coucher du soleil" "Jusqu\'au lev. soleil" "Actif à %s" - "Jusqu\'à %s" + + "NFC" "NFC désactivée" "NFC activée" @@ -399,9 +399,9 @@ "Aucune\ninterruption" "Priorités\nuniquement" "Alarmes\nuniquement" - "Charge en cours... (chargée à 100 %% dans %s)" - "Charge rapide en cours... (chargé dans %s)" - "Charge lente en cours... (chargé dans %s)" + "En recharge : %2$s (%s jusqu\'à charge complète)" + "En recharge rapide : %2$s (%s jusqu\'à ch. comp.)" + "En recharge lente : %2$s (%s jusqu\'à ch. comp.)" "Changer d\'utilisateur" "Changer d\'utilisateur (utilisateur actuel %s)" "Utilisateur actuel : %s" @@ -435,6 +435,10 @@ "%s commencer à enregistrer tout ce qui s\'affiche sur votre écran." "Ne plus afficher" "Tout effacer" + + + + "Commencer" "Aucune notification" "le profil peut être contrôlé" @@ -502,6 +506,7 @@ "Configurer" "%1$s. %2$s" "Désactiver maintenant" + "Paramètres sonores" "Développer" "Réduire" "Changer d\'appareil de sortie" @@ -539,6 +544,8 @@ "%1$s. Touchez pour activer les vibrations." "%1$s. Touchez pour couper le son." "Commandes de volume de %s" + + "Sortie multimédia" "Sortie d\'appel téléphonique" "Aucun appareil trouvé" @@ -594,12 +601,27 @@ "Avec les réglages avancés des notifications, vous pouvez définir un degré d\'importance de 0 à 5 pour les notifications d\'une application. \n\n""Niveau 5"" \n- Afficher dans le haut de la liste des notifications \n- Autoriser les interruptions en mode plein écran \n- Toujours afficher les aperçus \n\n""Niveau 4"" \n- Empêcher les interruptions en mode plein écran \n- Toujours afficher les aperçus \n\n""Niveau 3"" \n- Empêcher les interruptions en mode plein écran \n- Ne jamais afficher les aperçus \n\n""Niveau 2"" \n- Empêcher les interruptions en mode plein écran \n- Ne jamais afficher les aperçus \n- Ne pas autoriser les sons et les vibrations \n\n""Niveau 1"" \n- Empêcher les interruptions en mode plein écran \n- Ne jamais afficher les aperçus \n- Ne pas autoriser les sons et les vibrations \n- Masquer de l\'écran de verrouillage et de la barre d\'état status bar \n- Afficher dans le bas de la liste des notifications \n\n""Level 0"" \n- Bloquer toutes les notifications de l\'application" "Notifications" "Vous ne verrez plus ces notifications" + "Ces notifications seront réduites" "Vous ignorez habituellement ces notifications. \nSouhaitez-vous continuer à les afficher?" "Continuer à afficher ces notifications?" "Arrêter les notifications" "Continuer à afficher" + "Réduire" "Continuer à afficher les notifications de cette application?" "Ces notifications ne peuvent pas être désactivées" + "l\'appareil photo" + "le microphone" + "superpose du contenu par-dessus d\'autres applications à l\'écran" + + Cette application %1$s et %2$s. + Cette application %1$s et %2$s. + + + utilise %1$s et %2$s + utilise %1$s et %2$s + + "Paramètres" + "OK" "Les paramètres des notifications pour %1$s sont ouverts" "Les paramètres des notifications pour %1$s sont fermés" "Autoriser les notifications de cette chaîne" @@ -610,6 +632,8 @@ "%1$s %2$s" "paramètres des notifications" "options de répétition des notifications" + + "ANNULER" "Reporté pour %1$s" @@ -673,6 +697,8 @@ "Pile" "Horloge" "Écouteurs" + + "Écouteurs connectés" "Écouteurs connectés" "Économiseur de données" @@ -707,8 +733,9 @@ "Code de touche droit" "Icône à gauche" "Icône droite" - "Faites glisser des tuiles pour les ajouter" + "Maint. doigt sur écran, puis glissez-le pour aj. des tuiles" "Faites glisser les tuiles ici pour les supprimer" + "Vous avez besoin d\'au moins six tuiles" "Modifier" "Heure" @@ -752,7 +779,7 @@ "Fermer les réglages rapides." "Alarme activée." "Connecté comme %s" - "Aucune connexion à Internet." + "Aucune connexion Internet" "Ouvrir les détails." "Ouvrir les paramètres %s." "Modifier l\'ordre des paramètres." @@ -795,11 +822,14 @@ "Saisies d\'écran" "Messages généraux" "Stockage" + + "Applications instantanées" "Les applications instantanées ne nécessitent pas d\'installation." "Détails de l\'application" "Ouvrir le navigateur" "Données cellulaires" + "%s : %s" "Le Wi-Fi est désactivé" "Le Bluetooth est désactivé" "Le mode Ne pas déranger est désactivé" @@ -811,7 +841,9 @@ "Remplacer" "Applications qui fonctionnent en arrière-plan" "Touchez pour afficher des détails sur l\'utilisation de la pile et des données" - "Désactiver les données cellulaires?" + "Désactiver les données cellulaires?" + "Vous n\'aurez pas accès aux données ni à Internet avec %s. Vous ne pourrez accéder à Internet que par Wi-Fi." + "votre fournisseur de services" "Une application obscurcit une demande d\'autorisation, alors Paramètres ne peut pas vérifier votre réponse." "Autoriser %1$s à afficher %2$s tranches?" "- Il peut lire de l\'information de %1$s" @@ -819,4 +851,18 @@ "Autoriser %1$s à afficher des tranches de n\'importe quelle application" "Autoriser" "Refuser" + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 287e0b4e5f95fdf11e32f0d46e01c1a8f03506ca..cf032ba685305181a4bccd55ecfd6b5a6343b828 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -399,9 +399,9 @@ "Aucune\ninterruption" "Priorité\nuniquement" "Alarmes\nuniquement" - "%2$s • Rechargement… (rechargé à 100 % dans %s)" - "%2$s • Rechargement rapide… (à 100 % dans %s)" - "%2$s • Rechargement lent… (à 100 % dans %s)" + "%2$s • Rechargement… (rechargé à 100 %% dans %s)" + "%2$s • Rechargement rapide… (à 100 %% dans %s)" + "%2$s • Rechargement lent… (à 100 %% dans %s)" "Changer d\'utilisateur" "Changer d\'utilisateur (utilisateur actuel : %s)" "Utilisateur actuel : %s" @@ -437,7 +437,7 @@ "Tout effacer" - "Le mode Ne pas déranger masque les notifications" + "Le mode Ne pas déranger masque les notifications" "Commencer" "Aucune notification" "Le profil peut être contrôlé." @@ -543,7 +543,8 @@ "%1$s. Appuyez pour mettre en mode vibreur." "%1$s. Appuyez pour ignorer." "Commandes de volume %s" - "Sonnerie pour les appels et les notifications" + + "Sortie multimédia" "Sortie de l\'appel téléphonique" "Aucun appareil détecté" @@ -695,6 +696,8 @@ "Batterie" "Horloge" "Casque" + + "Casque connecté" "Casque connecté" "Économiseur de données" @@ -818,8 +821,7 @@ "Captures d\'écran" "Nouveaux messages" "Espace de stockage" - - + "Astuces" "Applis instantanées" "Les applis instantanées ne nécessitent pas d\'installation." "Infos sur l\'appli" @@ -847,18 +849,11 @@ "Autoriser %1$s à afficher des éléments de n\'importe quelle application" "Autoriser" "Refuser" - - - - - - - - - - - - - - + "Appuyez ici pour planifier l\'activation de l\'économiseur de batterie" + "Activer automatiquement lorsque l\'autonomie de la batterie atteint %d %%" + "Non, merci" + "Programmation de l\'économiseur de batterie activée" + "L\'économiseur de batterie s\'active automatiquement lorsque l\'autonomie de la batterie est inférieure à %d %%." + "Paramètres" + "OK" diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index f22f794177f12f8ea0f12deed78dda12983d24a2..5e5184f60e21f71b4cb3dcddfbc5078e4e48b95b 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -33,7 +33,6 @@ "En curso" "Notificacións" "Queda pouca batería" - "Queda pouca batería. Activa a función Aforro de batería" "%s restante" "Queda un %s, é dicir, aproximadamente %s en función do uso que fas" "Queda un %s, é dicir, aproximadamente %s" @@ -73,11 +72,10 @@ "Captura de pantalla" "Gardando captura de pantalla…" "Gardando captura de pantalla…" - "Estase gardando a captura de pantalla" "Gardouse a captura de pantalla" "Toca para ver a captura de pantalla" - "Non se puido facer a captura de pantalla" - "Produciuse un problema ao gardar a captura de pantalla" + "Non se puido gardar a captura de pantalla" + "Volve tentar crear unha captura de pantalla" "Non se puido gardar a captura de pantalla porque o espazo de almacenamento é limitado" "A aplicación ou a túa organización non permite realizar capturas de pantalla" "Opcións de transferencia USB" @@ -275,8 +273,7 @@ "Caixa de sobremesa" "Protector pantalla" "Ethernet" - - + "Mantén premidas as iconas para ver máis opcións" "Non molestar" "Só prioridade" "Só alarmas" @@ -351,7 +348,7 @@ "Activación ao solpor" "Ata o amencer" "Activación (%s)" - "Ata: %s" + "Ata: %s" "NFC" "A opción NFC está desactivada" "A opción NFC está activada" @@ -435,7 +432,8 @@ "%s comezará a capturar todo o que apareza na túa pantalla." "Non mostrar outra vez" "Eliminar todas" - "O modo Non molestar está ocultando as notificacións" + "Xestionar notificacións" + "O modo Non molestar está ocultando as notificacións" "Iniciar agora" "Non hai notificacións" "O perfil pódese supervisar" @@ -541,7 +539,8 @@ "%1$s. Toca para establecer a vibración." "%1$s. Toca para silenciar." "Controis de volume de %s" - "Soarán as chamadas e as notificacións" + + "Saída multimedia" "Saída de chamadas telefónicas" "Non se atopou ningún dispositivo" @@ -628,6 +627,7 @@ "%2$s de %1$s" "controis de notificacións" "opcións para adiar notificacións" + "Adiar" "DESFACER" "Adiouse %1$s" @@ -691,6 +691,8 @@ "Batería" "Reloxo" "Auriculares" + + "Conectáronse os auriculares" "Conectáronse os auriculares" "Economizador de datos" @@ -814,6 +816,7 @@ "Capturas de pantalla" "Mensaxes xerais" "Almacenamento" + "Consellos" "Aplicacións instantáneas" "As aplicacións instantáneas non precisan instalación." "Info. da aplicación" @@ -841,4 +844,11 @@ "Permitir que a aplicación %1$s mostre partes de calquera aplicación" "Permitir" "Denegar" + "Tocar para programar a función Aforro de batería" + "Actívase automaticamente cando a batería está ao %d %%" + "Non, grazas" + "Activouse o programa da función Aforro de batería" + "Activarase automaticamente a función Aforro de batería en canto o nivel de carga sexa inferior ao %d %%." + "Configuración" + "De acordo" diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index 4392caf774e084ce388dec7abac53c610c885f98..967ed180079c5c400d40fc316ae0da25f87cfaff 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -33,7 +33,6 @@ "ચાલુ" "નોટિફિકેશનો" "બૅટરી ઓછી છે" - "બૅટરી ઓછી છે. બૅટરી સેવર ચાલુ કરો" "%s બાકી" "%s બાકી, તમારા વપરાશના આધારે લગભગ %s બાકી છે" "%s બાકી, લગભગ %s બાકી" @@ -73,11 +72,12 @@ "સ્ક્રીનશૉટ" "સ્ક્રીનશોટ સાચવી રહ્યું છે…" "સ્ક્રીનશોટ સાચવી રહ્યું છે…" - "સ્ક્રીનશૉટ સાચવવામાં આવી રહ્યો છે" "સ્ક્રીનશૉટ સાચવ્યો" "તમારા સ્ક્રીનશૉટને જોવા માટે ટૅપ કરો" - "સ્ક્રીનશૉટ કૅપ્ચર કરી શકાયો નથી" - "સ્ક્રીનશૉટ સાચવવામાં સમસ્યા આવી" + + + + "મર્યાદિત સ્ટોરેજ સ્પેસને કારણે સ્ક્રીનશૉટ સાચવી શકાતો નથી" "ઍપ્લિકેશન કે તમારી સંસ્થા દ્વારા સ્ક્રીનશૉટ લેવાની મંજૂરી નથી" "USB ફાઇલ ટ્રાન્સફર વિકલ્પો" @@ -273,8 +273,7 @@ "ડેઝર્ટ કેસ" "સ્ક્રીન સેવર" "ઇથરનેટ" - - + "વધુ વિકલ્પો માટે આઇકનને સ્પર્શ કરી રાખો" "ખલેલ પાડશો નહીં" "ફક્ત પ્રાધાન્યતા" "ફક્ત એલાર્મ્સ" @@ -349,7 +348,8 @@ "સૂર્યાસ્ત વખતે" "સૂર્યોદય સુધી" "%s વાગ્યે" - "%s સુધી" + + "NFC" "NFC અક્ષમ કરેલ છે" "NFC સક્ષમ કરેલ છે" @@ -433,7 +433,10 @@ "%s તમારી સ્ક્રીન પર જે પ્રદર્શિત થાય છે તે દરેક વસ્તુને કેપ્ચર કરવાનું પ્રારંભ કરશે." "ફરીથી બતાવશો નહીં" "બધુ સાફ કરો" - "ખલેલ પાડશો નહીં નોટિફિકેશન છુપાવી રહ્યું છે" + + + + "હવે પ્રારંભ કરો" "કોઈ સૂચનાઓ નથી" "પ્રોફાઇલ મૉનિટર કરી શકાય છે" @@ -539,7 +542,8 @@ "%1$s. કંપન પર સેટ કરવા માટે ટૅપ કરો." "%1$s. મ્યૂટ કરવા માટે ટૅપ કરો." "%s વૉલ્યૂમ નિયંત્રણો" - "કૉલ અને નોટિફિકેશન માટે રિંગ વાગશે" + + "મીડિયાનું આઉટપુટ" "ફોન કૉલનો આઉટપુટ" "કોઈ ઉપકરણો મળ્યા નથી" @@ -626,6 +630,8 @@ "%1$s %2$s" "સૂચના નિયંત્રણો" "સૂચના સ્નૂઝ કરવાના વિકલ્પો" + + "પૂર્વવત્ કરો" "%1$s માટે સ્નૂઝ કરો" @@ -689,6 +695,8 @@ "બૅટરી" "ઘડિયાળ" "હૅડસેટ" + + "હેડફોન કનેક્ટ કર્યાં" "હૅડસેટ કનેક્ટ કર્યો" "ડેટા સેવર" @@ -723,11 +731,9 @@ "જમણો કીકોડ" "ડાબું આઇકન" "જમણું આઇકન" - - + "ટાઇલ ઉમેરવા માટે તેના પર આંગળી દબાવીને ખેંચો" "દૂર કરવા માટે અહીં ખેંચો" - - + "તમને ઓછામાં ઓછી 6 ટાઇલની જરૂર છે" "સંપાદિત કરો" "સમય" @@ -814,6 +820,8 @@ "સ્ક્રીનશૉટ" "સામાન્ય સંદેશા" "સ્ટોરેજ" + + "ઝટપટ ઍપ્લિકેશનો" "ઝટપટ ઍપ્લિકેશનો માટે ઇન્સ્ટૉલેશનની જરૂર નથી." "ઍપ્લિકેશન માહિતી" @@ -831,12 +839,9 @@ "બદલો" "પૃષ્ઠભૂમિમાં ચાલી રહેલ ઍપ્લિકેશનો" "બૅટરી અને ડેટા વપરાશ વિશેની વિગતો માટે ટૅપ કરો" - - - - - - + "મોબાઇલ ડેટા બંધ કરીએ?" + "તમને %s મારફતે ડેટા અથવા ઇન્ટરનેટનો ઍક્સેસ મળશે નહીં. ઇન્ટરનેટ માત્ર વાઇ-ફાઇ દ્વારા ઉપલબ્ધ થશે." + "તમારા કૅરિઅર" "એક ઍપ પરવાનગી વિનંતીને અસ્પષ્ટ કરતી હોવાને કારણે, સેટિંગ્સ તમારા પ્રતિસાદને ચકાસી શકતી નથી." "%1$sને %2$s સ્લાઇસ બતાવવાની મંજૂરી આપીએ?" "- મારાથી %1$sની માહિતી વાંચી શકાતી નથી" @@ -844,4 +849,18 @@ "%1$sને કોઈપણ ઍપના સ્લાઇસ બતાવવાની મંજૂરી આપો" "મંજૂરી આપો" "નકારો" + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index e1fefe64c82ed461d7b7bbc79c2f1fd367dc90ad..6498cb37d531b968dd2fdbbe9fa4eadd0c76758a 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -33,7 +33,6 @@ "ऑनगोइंग" "सूचनाएं" "बैटरी कम है" - "बैटरी कम बची है. बैटरी सेवर चालू करें" "%s शेष" "%s बची है, आपके इस्तेमाल करने के तरीके के हिसाब से बैटरी लगभग %s चलेगी" "%s बची है, बैटरी लगभग %s चलेगी" @@ -73,11 +72,12 @@ "स्क्रीनशॉट" "स्क्रीनशॉट सहेजा जा रहा है..." "स्क्रीनशॉट सहेजा जा रहा है..." - "स्क्रीनशॉट सेव किया जा रहा है" "स्क्रीनशॉट सेव किया गया" "अपना स्क्रीनशॉट देखने के लिए टैप करें" - "स्क्रीनशॉट नहीं लिया जा सका" - "स्क्रीनशॉट सेव करते समय एक समस्या आई" + + + + "मेमोरी कम होने की वजह से स्क्रीनशॉट सेव नहीं किया जा सका" "ऐप्लिकेशन या आपका संगठन स्क्रीनशॉट लेने की अनुमति नहीं देता" "USB फ़ाइल स्थानांतरण विकल्प" @@ -273,8 +273,7 @@ "मिठाई का डिब्बा" "स्क्रीन सेवर" "ईथरनेट" - - + "ज़्यादा विकल्प देखने के लिए आइकॉन को दबाकर रखें" "परेशान ना करें" "सिर्फ़ प्राथमिकता" "सिर्फ़ अलार्म" @@ -349,7 +348,8 @@ "शाम को चालू की जाएगी" "सुबह तक चालू रहेगी" "%s पर चालू की जाएगी" - "%s तक" + + "NFC" "NFC बंद है" "NFC चालू है" @@ -433,7 +433,10 @@ "%s आपके स्क्रीन पर दिखाई देने वाली हर सामग्री को कैप्चर करना शुरू कर देगी." "फिर से न दिखाएं" "सभी साफ़ करें" - "परेशान न करें सुविधा की वजह से सूचनाएं नहीं दिखाई जा रही हैं" + + + + "अब शुरू करें" "कोई सूचना नहीं मिली" "प्रोफ़ाइल को मॉनीटर किया जा सकता है" @@ -539,7 +542,8 @@ "%1$s. कंपन (वाइब्रेशन) पर सेट करने के लिए छूएं." "%1$s. म्यूट करने के लिए टैप करें." "%s की आवाज़ कम या ज़्यादा करने की सुविधा" - "कॉल अाैर सूचनाओं के लिए डिवाइस की घंटी बजेगी" + + "मीडिया आउटपुट" "फ़ोन कॉल का आउटपुट" "कोई डिवाइस नहीं मि‍ला" @@ -626,6 +630,8 @@ "%1$s %2$s" "सूचना नियंत्रण" "सूचना को स्नूज़ (थोड़ी देर के लिए चुप करना) करने के विकल्प" + + "पहले जैसा करें" "%1$s के लिए याद दिलाया गया" @@ -689,6 +695,8 @@ "बैटरी" "घड़ी" "हेडसेट" + + "हेडफ़ोन कनेक्‍ट किए गए" "हेडसेट कनेक्‍ट किया गया" "डेटा बचाने की सेटिंग" @@ -723,11 +731,9 @@ "दायां कुंजी कोड" "बायां आइकॉन" "दायां आइकॉन" - - + "टाइल जोड़ने के लिए दबाएं और खींचें" "हटाने के लिए यहां खींचें और छोड़ें" - - + "आपके पास कम से कम 6 टाइल होनी चाहिए" "बदलाव करें" "समय" @@ -814,6 +820,8 @@ "स्‍क्रीनशॉट" "सामान्य संदेश" "जगह" + + "झटपट ऐप्स" "झटपट ऐप्स के लिए इंस्टॉलेशन ज़रूरी नहीं है." "ऐप की जानकारी" @@ -831,12 +839,9 @@ "बदलें" "बैकग्राउंड में चल रहे ऐप्लिकेशन" "बैटरी और डेटा खर्च की जानकारी के लिए छूएं" - - - - - - + "मोबाइल डेटा बंद करना चाहते हैं?" + "आप %s के ज़रिए डेटा या इंटरनेट इस्तेमाल नहीं कर पाएंगे. इंटरनेट सिर्फ़ वाई-फ़ाई का इस्तेमाल करके चलेगा." + "आपको मोबाइल और इंटरनेट सेवा देने वाली कंपनी" "ऐप की वजह से मंज़ूरी के अनुरोध को समझने में दिक्कत हो रही है, इसलिए सेटिंग से आपके जवाब की पुष्टि नहीं हो पा रही है." "%1$s को %2$s के हिस्से (स्लाइस) दिखाने की मंज़ूरी दें?" "- यह %1$s से सूचना पढ़ सकता है" @@ -844,4 +849,18 @@ "%1$s को किसी भी ऐप्लिकेशन के हिस्से (स्लाइस) दिखाने की मंज़ूरी दें" "मंज़ूरी दें" "नामंज़ूर करें" + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index 2c7e33c734de88082a9a55afe28596d40833cb5c..c0dad6b4b3bac02b8096c5f68312a46afdf9c308 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -34,7 +34,6 @@ "U tijeku" "Obavijesti" "Niska razina baterije" - "Baterija je skoro prazna. Uključite Štednju baterije" "Preostalo %s" "Preostalo je %s, još otprilike %s na temelju vaše upotrebe" "Preostalo je %s, još otprilike %s" @@ -74,11 +73,12 @@ "Snimka zaslona" "Spremanje snimke zaslona..." "Spremanje snimke zaslona..." - "Spremanje snimke zaslona" "Snimka zaslona spremljena" "Dodirnite da biste vidjeli snimku zaslona" - "Nije bilo moguće snimiti zaslon" - "Prilikom spremanja snimke zaslona pojavio se problem" + + + + "Zaslon nije snimljen zbog ograničenog prostora za pohranu" "Aplikacija ili vaša organizacija ne dopuštaju snimanje zaslona" "Opcije USB prijenosa datoteka" @@ -351,7 +351,8 @@ "Uključuje se u suton" "Do izlaska sunca" "Uključuje se u %s" - "Do %s" + + "NFC" "NFC je onemogućen" "NFC je omogućen" @@ -435,7 +436,9 @@ "Aplikacija %s počet će snimati sve što se prikazuje na zaslonu." "Ne prikazuj ponovo" "Izbriši sve" - "Način Ne uznemiravaj sakriva obavijesti" + + + "Način Ne uznemiravaj sakriva obavijesti" "Započni sad" "Nema obavijesti" "Profil se možda nadzire" @@ -541,7 +544,8 @@ "%1$s. Dodirnite da biste postavili na vibraciju." "%1$s. Dodirnite da biste isključili zvuk." "Kontrole glasnoće – %s" - "Čut će se zvučni signal poziva i obavijesti" + + "Medijski izlaz" "Izlaz telefonskih poziva" "Nije pronađen nijedan uređaj" @@ -630,6 +634,8 @@ "%2$s za aplikaciju %1$s" "kontrole obavijesti" "opcije odgode obavijesti" + + "PONIŠTI" "Odgođeno %1$s" @@ -695,6 +701,8 @@ "Baterija" "Sat" "Slušalice" + + "Slušalice su povezane" "Slušalice su povezane" "Štednja podatkovnog prometa" @@ -729,11 +737,9 @@ "Desni kôd tipke" "Lijeva ikona" "Desna ikona" - - + "Zadržite i povucite za dodavanje pločica" "Povucite ovdje za uklanjanje" - - + "Potrebno je barem 6 pločica" "Uredi" "Vrijeme" @@ -820,6 +826,7 @@ "Snimke zaslona" "Općenite poruke" "Pohrana" + "Savjeti" "Instant aplikacije" "Instant aplikacije nije potrebno instalirati." "Informacije o aplikaciji" @@ -837,12 +844,9 @@ "Zamijeni" "Izvođenje aplikacija u pozadini" "Dodirnite da biste vidjeli pojedinosti o potrošnji baterije i podatkovnom prometu" - - - - - - + "Želite li isključiti mobilne podatke?" + "Nećete imati pristup mobilnim podacima ili internetu putem operatera %s. Internet će biti dostupan samo putem Wi-Fi-ja." + "vaš mobilni operater" "Budući da aplikacija prekriva zahtjev za dopuštenje, Postavke ne mogu potvrditi vaš odgovor." "Želite li dopustiti aplikaciji %1$s da prikazuje isječke aplikacije %2$s?" "– može čitati informacije aplikacije %1$s" @@ -850,4 +854,11 @@ "Dopusti aplikaciji %1$s da prikazuje isječke iz bilo koje aplikacije" "Dopusti" "Odbij" + "Dodirnite za zakazivanje štednje baterije" + "Uključuje se automatski kada je razina baterije na %d%%" + "Ne, hvala" + "Uključen je raspored štednje baterije" + "Štednja baterije uključit će se automatski kad razina baterije padne ispod %d%%." + "Postavke" + "Shvaćam" diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index c937c3ad2822894368d3c94abf9329e5c77b2cdf..6766e4c9a7e5c8892f4d672f89ab2373b2b18e73 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -33,7 +33,6 @@ "Folyamatban van" "Értesítések" "Alacsony az energiaszint" - "Az akkumulátor szintje alacsony. Kapcsolja be az akkumulátorkímélő módot." "%s maradt" "%s maradt, körülbelül %s van hátra a használat alapján" "%s maradt, körülbelül %s van hátra" @@ -73,11 +72,12 @@ "Képernyőkép" "Képernyőkép mentése..." "Képernyőkép mentése..." - "Képernyőkép mentése…" "A képernyőkép mentése sikerült" "Koppintson a képernyőkép megtekintéséhez" - "Nem sikerült rögzíteni a képernyőképet" - "Hiba történt a képernyőkép mentése során" + + + + "Nem menthet képernyőképet, mert kevés a tárhely" "Az alkalmazás vagy az Ön szervezete nem engedélyezi képernyőkép készítését" "USB-fájlátvitel beállításai" @@ -273,8 +273,7 @@ "Dessert Case" "Képernyővédő" "Ethernet" - - + "Tartsa lenyomva az ikonokat a további lehetőségek megjelenítéséhez" "Ne zavarjanak" "Csak prioritásos" "Csak ébresztések" @@ -349,7 +348,8 @@ "Be: naplemente" "Napfelkeltéig" "Bekapcsolás: %s" - "Eddig: %s" + + "NFC" "Az NFC ki van kapcsolva" "Az NFC be van kapcsolva" @@ -433,7 +433,9 @@ "A(z) %s alkalmazás rögzíteni fog mindent, ami megjelenik a képernyőn." "Ne jelenjen meg többé" "Az összes törlése" - "A Ne zavarjanak mód elrejti az értesítéseket" + + + "A Ne zavarjanak mód elrejti az értesítéseket" "Indítás most" "Nincs értesítés" "Profilját felügyelhetik" @@ -539,7 +541,8 @@ "%1$s. Koppintson a rezgés beállításához." "%1$s. Koppintson a némításhoz." "%s hangerőszabályzók" - "A hívások és az értesítések hangjelzést adnak" + + "Médiakimenet" "Telefonhívás-kimenet" "Nem találhatók eszközök" @@ -626,6 +629,8 @@ "%1$s%2$s" "értesítésvezérlők" "értesítések halasztási beállításai" + + "VISSZAVONÁS" "Elhalasztva: %1$s" @@ -689,6 +694,8 @@ "Akkumulátor" "Óra" "Headset" + + "Fejhallgató csatlakoztatva" "Headset csatlakoztatva" "Adatforgalom-csökkentő" @@ -812,6 +819,7 @@ "Képernyőképek" "Általános üzenetek" "Tárhely" + "Tippek" "Azonnali alkalmazások" "Az azonnali alkalmazásokat nem kell telepíteni." "Alkalmazásinformáció" @@ -839,4 +847,11 @@ "Engedélyezi a(z) %1$s alkalmazásnak, hogy bármely alkalmazásból részletet jelenítsen meg" "Engedélyezés" "Elutasítás" + "Koppintson az akkumulátorkímélő mód ütemezéséhez" + "Automatikus bekapcsolás, ha az akkumulátor töltöttsége %d%%" + "Nem" + "Akkumulátorkímélő mód ütemezése bekapcsolva" + "Az akkumulátorkímélő mód automatikusan bekapcsol, ha az akkumulátor töltöttsége %d%% alá esik." + "Beállítások" + "Értem" diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index 0ea2d68de21468b36f9e076bd324e59ed865c840..7037215ac52d6eb85a8c4779f21c3580d2413311 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -33,17 +33,13 @@ "Ընթացիկ" "Ծանուցումներ" "Մարտկոցի լիցքը սպառվում է" - "Մարտկոցի լիցքը սպառվում է։ Միացրեք մարտկոցի տնտեսումը։" "Մնաց %s" "Մարտկոցի լիցքը՝ %s, մնացել է մոտ %s՝ օգտագործման եղանակից կախված" "Մարտկոցի լիցքը՝ %s, մնացել է մոտ %s" "Մնացել է %s: Մարտկոցի տնտեսումը միացված է:" - - - - - - + "Հնարավոր չէ լիցքավորել USB-ի միջոցով: Օգտագործեք սարքի լիցքավորիչը:" + "Սարքը հնարավոր չէ լիցքավորել USB-ի միջոցով" + "Օգտագործեք սարքի լիցքավորիչը" "Կարգավորումներ" "Միացնե՞լ մարտկոցի տնտեսումը" "Միացնել" @@ -76,11 +72,12 @@ "Էկրանի պատկեր" "Էկրանի պատկերը պահվում է…" "Էկրանի պատկերը պահվում է..." - "Էկրանի պատկերը պահվում է" "Էկրանի պատկերը պահվեց" "Հպեք՝ էկրանի պատկերը տեսնելու համար" - "Չհաջողվեց պահել էկրանի պատկերը" - "Չհաջողվեց պահել էկրանի պատկերը" + + + + "Չհաջողվեց պահել էկրանի պատկերը անբավարար հիշողության պատճառով" "Հավելվածը կամ ձեր կազմակերպությունը չի թույլատրում էկրանի պատկերի ստացումը" "USB ֆայլերի փոխանցման ընտրանքներ" @@ -151,7 +148,6 @@ "Միացված է:" "Միանում է:" "GPRS" - "1 X" "HSPA" "3G" "3.5G" @@ -211,8 +207,7 @@ "Ինքնաթիռի ռեժիմը միացված է:" "Ինքնաթիռի ռեժիմն անջատվեց:" "Ինքնաթիռի ռեժիմը միացավ:" - - + "«Չանհանգստացնել» ռեժիմը միացված է:" "Չանհանգստացնել՝ ընդհանուր լուռ վիճակը:" "Չանհանգստացնել՝ միայն զարթուցիչ" "Չանհանգստացնել:" @@ -278,7 +273,7 @@ "Dessert Case" "Էկրանապահ" "Ethernet" - "Լրացուցիչ կարգավորումները բացելու համար սեղմեք և պահեք այս պատկերակները" + "Լրացուցիչ կարգավորումները բացելու համար հպեք և պահեք պատկերակները" "Չանհանգստացնել" "Միայն կարևոր ծանուցումների դեպքում" "Միայն զարթուցիչ" @@ -353,7 +348,8 @@ "Կմիացվի մայրամուտին" "Մինչև լուսաբաց" "Կմիացվի ժամը %s-ին" - "Մինչև %s" + + "NFC" "NFC-ն անջատված է" "NFC-ն միացված է" @@ -437,8 +433,9 @@ "%s ծրագիրը կսկսի հավաքել այն ամենն ինչ ցուցադրվում է ձեր էկրանին:" "Այլևս ցույց չտալ" "Մաքրել բոլորը" - + + "«Չանհանգստացնել» ռեժիմում ծանուցումները թաքցվում են" "Սկսել հիմա" "Ծանուցումներ չկան" "Պրոֆիլը կարող է վերահսկվել" @@ -544,9 +541,8 @@ "%1$s։ Հպեք՝ թրթռոցը միացնելու համար։" "%1$s։ Հպեք՝ ձայնը անջատելու համար։" "Ձայնի ուժգնության կառավարներ` %s" - "Զանգերի և ծանուցումների համար թրթռոցը միացված է" - "Զանգերի և ծանուցումների համար ձայնն անջատած է" - "Զանգերի և ծանուցումների համար ձայնը միացված է" + + "Մեդիա արտածում" "Հեռախոսազանգի հնչեցում" "Սարքեր չեն գտնվել" @@ -633,6 +629,8 @@ "%1$s %2$s" "ծանուցման կառավարներ" "ծանուցման հետաձգման ընտրանքներ" + + "ՀԵՏԱՐԿԵԼ" "Հետաձգվել է %1$sով" @@ -696,6 +694,8 @@ "Մարտկոց" "Ժամացույց" "Ականջակալ" + + "Ականջակալը կապակցված է" "Ականջակալը կապակցված է" "Թրաֆիկի տնտեսում" @@ -730,8 +730,9 @@ "Աջ ստեղնային կոդ" "Ձախ պատկերակ" "Աջ պատկերակ" - "Քաշեք՝ սալիկներ ավելացնելու համար" + "Պահեք և քաշեք՝ սալիկներ ավելացնելու համար" "Քաշեք այստեղ՝ հեռացնելու համար" + "Հարկավոր է առնվազն 6 սալիկ" "Փոփոխել" "Ժամ" @@ -818,6 +819,7 @@ "Էկրանի պատկերներ" "Ընդհանուր հաղորդագրություններ" "Տարածք" + "Հուշումներ" "Ակնթարթային հավելվածներ" "Ակնթարթային հավելվածները տեղադրում չեն պահանջում։" "Հավելվածի տվյալներ" @@ -835,7 +837,9 @@ "Փոխարինել" "Ֆոնային ռեժիմում աշխատող հավելվածներ" "Հպեք՝ մարտկոցի և թրաֆիկի մանրամասները տեսնելու համար" - "Անջատե՞լ բջջային ինտերնետը։" + "Անջատե՞լ բջջային ինտերնետը" + "%s օպերատորի բջջային ինտերնետը հասանելի չի լինի: Համացանցից կարող եք օգտվել միայն Wi-Fi-ի միջոցով:" + "Ձեր" "Քանի որ ներածումն արգելափակված է ինչ-որ հավելվածի կողմից, Կարգավորումները չեն կարող հաստատել ձեր պատասխանը:" "Թույլատրե՞լ %1$s հավելվածին ցուցադրել հատվածներ %2$s հավելվածից" "- Կարող է կարդալ տեղեկություններ %1$s հավելվածից" @@ -843,4 +847,11 @@ "Թույլատրել %1$s հավելվածին ցուցադրել հատվածներ ցանկացած հավելվածից" "Թույլատրել" "Մերժել" + "Հպեք՝ մարտկոցի տնտեսման ռեժիմը կարգավորելու համար" + "Ավտոմատ միացնել, երբ մարտկոցի լիցքը դառնա %d%%" + "Ոչ" + "Մարտկոցի տնտեսման ռեժիմին ավտոմատ անցումը միացված է" + "Մարտկոցի տնտեսման ռեժիմն ավտոմատ կմիանա, երբ մարտկոցի լիցքը %d%%-ից պակասի:" + "Կարգավորումներ" + "Եղավ" diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index ac378196fa615a72481763fa1ebfb581187385f9..d497c5c8ef734fcad50728af53a9cf5d9e9fdf50 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -33,7 +33,6 @@ "Berkelanjutan" "Notifikasi" "Baterai lemah" - "Baterai hampir habis. Aktifkan Penghemat Baterai" "Tersisa %s" "Sisa %s, kira-kira %s lagi berdasarkan penggunaan Anda" "Sisa %s, kira-kira %s lagi" @@ -73,11 +72,10 @@ "Screenshot" "Menyimpan screenshot..." "Menyimpan screenshot..." - "Screenshot sedang disimpan" "Screenshot disimpan" "Tap untuk melihat screenshot" - "Tidak dapat mengambil screenshot" - "Terjadi masalah saat menyimpan screenshot" + "Tidak dapat menyimpan screenshot" + "Coba ambil screenshot lagi" "Tidak dapat menyimpan screenshot karena ruang penyimpanan terbatas" "Mengambil screenshot tidak diizinkan oleh aplikasi atau organisasi" "Opsi transfer file USB" @@ -273,8 +271,7 @@ "Etalase Hidangan Penutup" "Screen saver" "Ethernet" - - + "Tap lama ikon untuk opsi lainnya" "Jangan ganggu" "Hanya untuk prioritas" "Hanya alarm" @@ -349,7 +346,7 @@ "Aktif saat matahari terbenam" "Sampai matahari terbit" "Aktif pada %s" - "Sampai %s" + "Hingga %s" "NFC" "NFC dinonaktifkan" "NFC diaktifkan" @@ -433,7 +430,8 @@ "%s akan mulai menangkap apa saja yang ditampilkan pada layar Anda." "Jangan tampilkan lagi" "Hapus semua" - "Mode Jangan Ganggu menyembunyikan notifikasi" + "Kelola notifikasi" + "Mode Jangan Ganggu menyembunyikan notifikasi" "Mulai sekarang" "Tidak ada pemberitahuan" "Profil dapat dipantau" @@ -539,7 +537,8 @@ "%1$s. Tap untuk menyetel agar bergetar." "%1$s. Tap untuk menonaktifkan." "%s kontrol volume" - "Panggilan dan notifikasi akan berdering" + + "Keluaran media" "Keluaran panggilan telepon" "Perangkat tidak ditemukan" @@ -626,6 +625,7 @@ "%1$s %2$s" "kontrol notifikasi" "opsi tunda notifikasi" + "Tunda" "URUNGKAN" "Ditunda selama %1$s" @@ -689,6 +689,8 @@ "Baterai" "Jam" "Headset" + + "Headphone terhubung" "Headset terhubung" "Penghemat Kuota Internet" @@ -812,6 +814,7 @@ "Screenshot" "Pesan Umum" "Penyimpanan" + "Petunjuk" "Aplikasi Instan" "Aplikasi instan tidak perlu diinstal." "Info aplikasi" @@ -839,4 +842,11 @@ "Izinkan %1$s menampilkan potongan dari aplikasi apa pun" "Izinkan" "Tolak" + "Tap untuk menjadwalkan Penghemat Baterai" + "Aktifkan otomatis jika baterai tinggal %d%%" + "Tidak, terima kasih" + "Jadwal Penghemat Baterai diaktifkan" + "Penghemat Baterai akan aktif otomatis jika baterai kurang dari %d%%." + "Setelan" + "OK" diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index b86417cb6689c503563a6936b69013f94839de05..8fdb4e7474d8d4554a573002dcd19825b6698b7d 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -33,17 +33,13 @@ "Áframhaldandi" "Tilkynningar" "Rafhlaðan er að tæmast" - "Lítil hleðsla er á rafhlöðunni. Kveiktu á rafhlöðusparnaði" "%s eftir" "%s eftir, um það bil %s eftir miðað við notkun" "%s eftir, um það bil %s eftir" "%s eftir. Kveikt er á rafhlöðusparnaði." - - - - - - + "Ekki er hægt að hlaða í gegnum USB. Notaðu hleðslutækið sem fylgdi tækinu þínu." + "Ekki er hægt að hlaða í gegnum USB" + "Notaðu hleðslutækið sem fylgdi tækinu þínu" "Stillingar" "Kveikja á rafhlöðusparnaði?" "Kveikja" @@ -76,11 +72,12 @@ "Skjámynd" "Vistar skjámynd…" "Vistar skjámynd…" - "Vistar skjámynd" "Skjámynd vistuð" "Ýttu til skoða skjámyndina" - "Ekki tókst að taka skjámynd" - "Vandamál kom upp við að vista skjámynd" + + + + "Ekki tókst að vista skjámynd vegna takmarkaðs geymslupláss" "Forritið eða fyrirtækið þitt leyfir ekki skjámyndatöku" "Valkostir USB-skráaflutnings" @@ -151,7 +148,6 @@ "Tenging virk." "Tengist." "GPRS" - "1 X" "HSPA" "3G" "3.5G" @@ -211,8 +207,7 @@ "Kveikt á flugstillingu." "Slökkt á flugstillingu." "Kveikt á flugstillingu." - - + "Kveikt á „Ónáðið ekki“." "Kveikt á „Ónáðið ekki“, algjör þögn." "Kveikt á „Ónáðið ekki“, aðeins vekjarar." "Ónáðið ekki." @@ -278,7 +273,7 @@ "Eftirréttaborð" "Skjávari" "Ethernet" - "Haltu þessum táknum inni til að sjá fleiri valkosti" + "Haltu táknum inni til að sjá fleiri valkosti" "Ónáðið ekki" "Aðeins forgangur" "Aðeins vekjarar" @@ -353,7 +348,8 @@ "Kveikt við sólsetur" "Til sólarupprásar" "Kveikt klukkan %s" - "Til klukkan %s" + + "NFC" "Slökkt á NFC" "Kveikt á NFC" @@ -437,8 +433,9 @@ "%s mun fanga allt sem birtist á skjánum." "Ekki sýna þetta aftur" "Hreinsa allt" - + + "„Ónáðið ekki“ felur tilkynningar" "Byrja núna" "Engar tilkynningar" "Hugsanlega er fylgst með þessu sniði" @@ -544,9 +541,8 @@ "%1$s. Ýttu til að stilla á titring." "%1$s. Ýttu til að þagga." "%s stýringar á hljóstyrk" - "Titringur er virkur fyrir símtöl og tilkynningar" - "Slökkt verður á hljóði símtala og tilkynninga" - "Símtöl og tilkynningar heyrast" + + "Margmiðlunarúttak" "Úttak símtals" "Engin tæki fundust" @@ -633,6 +629,8 @@ "%1$s %2$s" "tilkynningastýringar" "þöggunarstillingar tilkynninga" + + "AFTURKALLA" "Þaggað í %1$s" @@ -696,6 +694,8 @@ "Rafhlaða" "Klukka" "Höfuðtól" + + "Heyrnartól tengd" "Höfuðtól tengt" "Gagnasparnaður" @@ -730,8 +730,9 @@ "Lykiltákn til hægri" "Tákn til vinstri" "Tákn til hægri" - "Dragðu til að bæta við reitum" + "Haltu inni og dragðu til að bæta við reitum" "Dragðu hingað til að fjarlægja" + "Reitirnir mega ekki vera færri en sex" "Breyta" "Tími" @@ -818,6 +819,7 @@ "Skjámyndir" "Almenn skilaboð" "Geymslurými" + "Vísbendingar" "Skyndiforrit" "Skyndiforrit þurfa ekki uppsetningu." "Forritsupplýsingar" @@ -835,7 +837,9 @@ "Skipta út" "Forrit sem keyra í bakgrunni" "Ýttu til að fá upplýsingar um rafhlöðu- og gagnanotkun" - "Slökkva á farsímagögnum?" + "Viltu slökkva á farsímagögnum?" + "Þú munt ekki hafa aðgang að gögnum eða internetinu í gegnum %s. Aðeins verður hægt að tengjast internetinu með Wi-Fi." + "símafyrirtækið þitt" "Stillingar geta ekki staðfest svarið þitt vegna þess að forrit er að fela heimildarbeiðni." "Viltu leyfa %1$s að sýna sneiðar úr %2$s?" "- Það getur lesið upplýsingar úr %1$s" @@ -843,4 +847,11 @@ "Leyfa %1$s að sýna sneiðar úr hvaða forriti sem er" "Leyfa" "Hafna" + "Pikka til að stilla rafhlöðusparnað" + "Kveikja sjálfkrafa þegar hleðsla rafhlöðunnar er %d%%" + "Nei, takk" + "Kveikt á rafhlöðusparnaði" + "Sjálfkrafa verður kveikt á rafhlöðusparnaði þegar hleðsla rafhlöðunnar fer niður fyrir %d%%." + "Stillingar" + "Ég skil" diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index 7fa89f2989479eecdbea9d6341515a3aee61e0cb..67f6942037fa5e1bb414b3f078defbe954e46867 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -33,7 +33,6 @@ "In corso" "Notifiche" "Poca batteria" - "Batteria quasi scarica. Attiva Risparmio energetico" "%s rimanente" "%s restante. Tempo rimanente in base al tuo utilizzo: %s circa" "%s restante. Tempo rimanente: %s circa" @@ -73,11 +72,12 @@ "Screenshot" "Salvataggio screenshot..." "Salvataggio screenshot..." - "Salvataggio screenshot…" "Screenshot salvato" "Tocca per visualizzare lo screenshot" - "Impossibile acquisire lo screenshot" - "Si è verificato un problema durante il salvataggio dello screenshot" + + + + "Impossibile salvare lo screenshot a causa dello spazio di archiviazione limitato" "L\'acquisizione di screenshot non è consentita dall\'app o dall\'organizzazione" "Opzioni trasferimento file USB" @@ -350,7 +350,8 @@ "Attivata al tramonto" "Fino all\'alba" "Attivata alle ore %s" - "Fino alle ore %s" + + "NFC" "NFC non attiva" "NFC attiva" @@ -434,7 +435,9 @@ "%s inizierà ad acquisire tutto ciò che è visualizzato sul tuo schermo." "Non mostrare più" "Cancella tutto" - "La modalità Non disturbare nasconde le notifiche" + + + "La modalità Non disturbare nasconde le notifiche" "Avvia adesso" "Nessuna notifica" "Il profilo potrebbe essere monitorato" @@ -540,7 +543,8 @@ "%1$s. Tocca per attivare la vibrazione." "%1$s. Tocca per disattivare l\'audio." "Controlli del volume %s" - "L\'audio di chiamate e notifiche sarà attivo" + + "Uscita contenuti multimediali" "Uscita telefonate" "Nessun dispositivo trovato" @@ -627,6 +631,8 @@ "%1$s %2$s" "gestione delle notifiche" "opzioni di posticipazione notifiche" + + "ANNULLA" "Posticipato di %1$s" @@ -690,6 +696,8 @@ "Batteria" "Orologio" "Auricolare" + + "Cuffie collegate" "Auricolare collegato" "Risparmio dati" @@ -813,6 +821,7 @@ "Screenshot" "Messaggi generali" "Spazio di archiviazione" + "Suggerimenti" "App istantanee" "Le app istantanee non richiedono l\'installazione." "Informazioni app" @@ -840,4 +849,11 @@ "Consenti all\'app %1$s di mostrare porzioni di qualsiasi app" "Consenti" "Nega" + "Tocca per programmare il Risparmio energetico" + "Attiva automaticamente quando la batteria arriva al %d%%" + "No grazie" + "Pianificazione del Risparmio energetico attivata" + "Il Risparmio energetico verrà attivato automaticamente quando la carica della batteria sarà inferiore a %d%%." + "Impostazioni" + "OK" diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index 8ea575dccaa875bc98443f22e7833c97769561b9..5973b43790090be284969c36e3e154ae74698582 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -35,17 +35,13 @@ "מתמשך" "הודעות" "עוצמת הסוללה נמוכה" - "הסוללה חלשה: כדאי להפעיל את מצב החיסכון בסוללה" "נותרו %s" "נותרו %s, נשארו בערך %s על סמך השימוש במכשיר" "נותרו %s, נשארו בערך %s" "נותרו %s. הופעלה תכונת החיסכון בסוללה." - - - - - - + "‏לא ניתן לטעון באמצעות USB. ניתן להשתמש במטען שצורף למכשיר שלך." + "‏לא ניתן לטעון באמצעות USB" + "שימוש במטען שסופק עם המכשיר" "הגדרות" "להפעיל את תכונת החיסכון בסוללה?" "הפעל" @@ -78,11 +74,12 @@ "צילום מסך" "שומר צילום מסך..." "שומר צילום מסך..." - "מתבצעת שמירה של צילום המסך" "צילום המסך נשמר" "אפשר להקיש כדי להציג את צילום המסך" - "לא ניתן היה לבצע צילום מסך" - "התגלתה בעיה בשמירת צילום המסך" + + + + "לא היה מספיק מקום לשמור את צילום המסך" "האפליקציה או הארגון שלך אינם מתירים ליצור צילומי מסך" "‏אפשרויות העברת קבצים ב-USB" @@ -153,7 +150,6 @@ "מחובר." "מתחבר." "GPRS" - "‎1 X" "HSPA" "3G" "3.5G" @@ -213,8 +209,7 @@ "מצב טיסה מופעל." "מצב טיסה נכבה." "מצב טיסה הופעל." - - + "מצב \'נא לא להפריע\' פועל." "\'נא לא להפריע\' פועל. שקט מוחלט." "\'נא לא להפריע\' הופעל. התראות בלבד." "נא לא להפריע." @@ -282,7 +277,7 @@ "מזנון קינוחים" "שומר מסך" "Ethernet" - "יש להקיש על הסמלים ולהחזיק אותם להצגת אפשרויות נוספות" + "יש ללחוץ על הסמלים לחיצה ארוכה כדי לראות אפשרויות נוספות" "נא לא להפריע" "עדיפות בלבד" "התראות בלבד" @@ -359,7 +354,8 @@ "מופעל בשקיעה" "עד הזריחה" "מופעל בשעה %s" - "עד %s" + + "NFC" "‏NFC מושבת" "‏NFC מופעל" @@ -443,7 +439,9 @@ "%s יתחיל להקליט את כל התוכן המוצג במסך שלך." "אל תציג שוב" "נקה הכל" - + + + "התחל כעת" "אין הודעות" @@ -550,9 +548,8 @@ "‏%1$s. הקש כדי להעביר למצב רטט." "‏%1$s. הקש כדי להשתיק." "‏בקרי עוצמת שמע של %s" - "שיחות והודעות ירטטו" - "שיחות והודעות יושתקו" - "שיחות והודעות ישמיעו צלצול" + + "פלט מדיה" "פלט שיחת טלפון" "לא נמצאו מכשירים" @@ -643,6 +640,8 @@ "%1$s %2$s" "בקרת הודעות" "אפשרויות של דחיית הודעות לטיפול בהמשך" + + "ביטול" "נדחה לטיפול בעוד %1$s" @@ -710,6 +709,8 @@ "סוללה" "שעון" "אוזניות" + + "אוזניות מחוברות" "אוזניות מחוברות" "‏חוסך הנתונים (Data Saver)" @@ -744,8 +745,9 @@ "קוד מפתח ימני" "סמל שמאלי" "סמל ימני" - "ניתן לגרור כדי להוסיף או להסיר משבצות" + "יש ללחוץ ולגרור כדי להוסיף אריחים" "גרור לכאן כדי להסיר" + "יש צורך בשישה אריחים לכל הפחות" "עריכה" "שעה" @@ -832,6 +834,8 @@ "צילומי מסך" "הודעות כלליות" "אחסון" + + "אפליקציות אינסטנט" "אפליקציות אינסטנט לא דורשות התקנה." "פרטי אפליקציה" @@ -849,7 +853,9 @@ "החלף" "אפליקציות שפועלות ברקע" "הקש לקבלת פרטים על צריכה של נתונים וסוללה" - "לכבות את חבילת הגלישה?" + "לכבות את חבילת הגלישה?" + "‏לא תהיה לך גישה לנתונים או לאינטרנט באמצעות %s. אינטרנט יהיה זמין רק באמצעות Wi-Fi." + "הספק שלך" "יש אפליקציה שמסתירה את בקשת ההרשאה, ולכן להגדרות אין אפשרות לאמת את התשובה." "האם לאפשר ל-%1$s להציג חלקים מ-%2$s?" "- תהיה לה אפשרות לקרוא מידע מ-%1$s" @@ -857,4 +863,18 @@ "יש לאשר ל-%1$s להראות חלקים מכל אפליציה שהיא" "אני רוצה לאשר" "אני לא מרשה" + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index e8b4c8d30344f6432fb74c2307af65c4a362c65d..b9629722878f9e652137167889ebcd63abdf9cd9 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -33,7 +33,6 @@ "実行中" "通知" "電池残量が少なくなっています" - "電池残量が少なくなっています。バッテリー セーバーを ON にしてください" "残量が%sです" "残量 %s、約 %s(使用状況に基づく)" "残量 %s、約 %s" @@ -73,11 +72,12 @@ "スクリーンショット" "スクリーンショットを保存中..." "スクリーンショットを保存しています..." - "スクリーンショットを保存しています" "スクリーンショットを保存しました" "タップするとスクリーンショットが表示されます" - "スクリーンショットを撮影できませんでした" - "スクリーンショットの保存中に問題が発生しました" + + + + "空き容量が足りないため、スクリーンショットを保存できません" "スクリーンショットの作成はアプリまたは組織で許可されていません" "USBファイル転送オプション" @@ -275,8 +275,7 @@ "デザートケース" "スクリーン セーバー" "イーサネット" - - + "アイコンを押し続けると、その他の項目が表示されます" "マナーモード" "優先する通知のみ" "アラームのみ" @@ -351,7 +350,8 @@ "日の入りに ON" "日の出まで" "%s に ON" - "%s まで" + + "NFC" "NFC は無効です" "NFC は有効です" @@ -435,7 +435,9 @@ "%sで、画面に表示されているコンテンツのキャプチャを開始します。" "次回から表示しない" "すべて消去" - "マナーモードでは通知が非表示になります" + + + "マナーモードでは通知が非表示になります" "今すぐ開始" "通知はありません" "プロファイルが監視されている可能性があります" @@ -541,7 +543,8 @@ "%1$s。タップしてバイブレーションに設定します。" "%1$s。タップしてミュートします。" "%s の音量調節" - "着信音と通知音が鳴ります" + + "メディア出力" "通話の出力" "デバイスが見つかりません" @@ -628,6 +631,8 @@ "%1$s %2$s" "通知管理" "通知スヌーズ設定" + + "元に戻す" "スヌーズ: %1$s" @@ -691,6 +696,8 @@ "電池" "時計" "ヘッドセット" + + "ヘッドホンを接続しました" "ヘッドセットを接続しました" "データセーバー" @@ -814,6 +821,7 @@ "スクリーンショット" "一般メッセージ" "ストレージ" + "ヒント" "Instant Apps" "Instant Apps はインストールせずに利用できます。" "アプリ情報" @@ -841,4 +849,11 @@ "すべてのアプリのスライスを表示することを「%1$s」に許可する" "許可" "拒否" + "タップしてバッテリー セーバーのスケジュールを設定" + "電池が %d%% になったら自動的に ON にする" + "いいえ" + "バッテリー セーバーのスケジュール設定 ON" + "電池が %d%% を下回ると、バッテリー セーバーが自動的に ON になります。" + "設定" + "OK" diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index d3e48dfb20cacb1e32b2361a61a65f7da9f81d28..f198fdfa9444715f5a8fb5e83a975b4a19dae329 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -33,7 +33,6 @@ "მიმდინარე" "შეტყობინებები" "ბატარეა იწურება" - "ბატარეა იწურება. ჩართეთ ბატარეის დამზოგი" "დარჩენილია %s" "დარჩენილია %s, რაც დაახლოებით %s არის, მოხმარების გათვალისწინებით" "დარჩენილია %s, რაც დაახლოებით %s არის" @@ -73,11 +72,12 @@ "ეკრანის ანაბეჭდი" "სკრინშოტის შენახვა…" "ეკრანის სურათის შენახვა…" - "ეკრანის ანაბეჭდი შენახულია" "ეკრანის ანაბეჭდი შენახულია" "შეეხეთ ეკრანის ანაბეჭდის სანახავად" - "ვერ მოხერხდა ეკრანის ანაბეჭდის გადაღება" - "ეკრანის ანაბეჭდის შენახვისას წარმოიქმნა პრობლემა" + + + + "ეკრანის ანაბეჭდის შენახვა ვერ მოხერხდა შეზღუდული მეხსიერების გამო" "ეკრანის ანაბეჭდების შექმნა არ არის ნებადართული აპის ან თქვენი ორგანიზაციის მიერ" "USB ფაილის ტრანსფერის პარამეტრები" @@ -273,8 +273,7 @@ "სადესერტო ყუთი" "ეკრანმზოგი" "ეთერნეტი" - - + "ხანგრძლივად შეეხეთ ხატულებს დამატებითი ვარიანტებისთვის" "არ შემაწუხოთ" "მხოლოდ პრიორიტეტული" "მხოლოდ გაფრთხილებები" @@ -349,7 +348,8 @@ "ჩაირთოს მზის ჩასვლისას" "მზის ამოსვლამდე" "ჩაირთოს %s-ზე" - "%s-მდე" + + "NFC" "NFC გათიშულია" "NFC ჩართულია" @@ -433,7 +433,9 @@ "%s დაიწყებს იმ ყველაფრის აღბეჭდვას, რაც თქვენს ეკრანზე ჩანს." "აღარ მაჩვენო" "ყველას გასუფთავება" - "„არ შემაწუხოთ“ რეჟიმი მალავს შეტყობინებებს" + + + "„არ შემაწუხოთ“ რეჟიმი მალავს შეტყობინებებს" "დაწყება ახლავე" "შეტყობინებები არ არის." "შესაძლოა პროფილზე ხორციელდებოდეს მონიტორინგი" @@ -539,7 +541,8 @@ "%1$s. შეეხეთ ვიბრაციაზე დასაყენებლად." "%1$s. შეეხეთ დასადუმებლად." "%s-ის ხმის მართვის საშუალებები" - "ზარები და შეტყობინებები ხმის თანხლებით იქნება" + + "მედია გამომავალი" "სატელეფონო ზარის გამომავალი სიგნალი" "მოწყობილობები ვერ მოიძებნა" @@ -626,6 +629,8 @@ "%1$s %2$s" "შეტყობინებების მართვის საშუალებები" "შეტყობინებების ჩაჩუმების ვარიანტები" + + "მოქმედების გაუქმება" "ჩაჩუმებული იქნება %1$s" @@ -689,6 +694,8 @@ "ბატარეა" "საათი" "ყურსაცვამი" + + "ყურსასმენები დაკავშირებულია" "ყურსაცვამი დაკავშირებულია" "მონაცემთა დამზოგველი" @@ -812,6 +819,7 @@ "ეკრანის ანაბეჭდები" "ზოგადი შეტყობინებები" "მეხსიერება" + "მინიშნებები" "მყისიერი აპები" "მყისიერი აპები ინსტალაციას არ საჭიროებს." "აპის შესახებ" @@ -839,4 +847,11 @@ "%1$s-ისთვის ფრაგმენტების ნებისმიერი აპიდან ჩვენების ნების დართვა" "დაშვება" "უარყოფა" + "შეეხეთ ბატარეის დამზოგის დასაგეგმად" + "ავტომატურად ჩაირთოს, როცა ბატარეა %d%%-ზეა" + "არა, გმადლობთ" + "ბატარეის დამზოგის განრიგი ჩართულია" + "ბატარეის დამზოგი ავტომატურად ჩაირთვება, როცა ბატარეა ჩამოსცდება %d%%-ს." + "პარამეტრები" + "გასაგებია" diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index e77109c1782484010920a05dc1e8fc96e0854db2..54ccf3c76243f128be0e1d168369d74d56af4b34 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -33,7 +33,6 @@ "Ағымдағы" "Хабарлар" "Батарея заряды төмен" - "Батарея заряды аз. \"Battery Saver\" функциясын қосыңыз" "%s қалды" "Пайдалану барысына байланысты %s заряд, шамамен %s қалды" "%s заряд, шамамен %s қалды" @@ -73,11 +72,12 @@ "Скриншот" "Скриншотты сақтауда…" "Скриншотты сақтауда…" - "Скриншот сақталуда" "Скриншот сақталды" "Скриншотты көру үшін түртіңіз" - "Скриншот жасалмады" - "Скриншотты сақтау кезінде ақау болды" + + + + "Жадтағы шектеулі бос орынға байланысты скриншот сақталмайды" "Қолданба немесе ұйым скриншоттар түсіруге рұқсат етпейді" "USB файлын жіберу опциялары" @@ -273,8 +273,7 @@ "Десерт жағдайы" "Экранды сақтау режимі" "Этернет" - - + "Басқа опцияларды көру үшін белгішелерді түртіп ұстап тұрыңыз" "Мазаламау" "Маңыздылары ғана" "Тек дабылдар" @@ -349,7 +348,8 @@ "Күн батқанда қосу" "Күн шыққанға дейін" "Қосылу уақыты: %s" - "%s дейін" + + "NFC" "NFC өшірулі" "NFC қосулы" @@ -433,7 +433,9 @@ "%s экранда көрсетілгеннің барлығын түсіре бастайды." "Қайта көрсетпеу" "Барлығын тазалау" - "\"Мазаламау\" режимі хабарландыруларды жасырады" + + + "\"Мазаламау\" режимі хабарландыруларды жасыруда" "Қазір бастау" "Хабарландырулар жоқ" "Профиль бақылануы мүмкін" @@ -539,7 +541,8 @@ "%1$s. Діріл режимін орнату үшін түртіңіз." "%1$s. Дыбысын өшіру үшін түртіңіз." "Дыбысты басқару элементтері: %s" - "Қоңыраулар мен хабарландырулардың дыбыстық сигналы болады" + + "Meдиа шығысы" "Телефон қоңырау шығысы" "Ешқандай құрылғы табылмады" @@ -626,6 +629,8 @@ "%1$s %2$s" "хабарландыруларды басқару элементтері" "хабарландыруды кідірту опциялары" + + "КЕРІ ҚАЙТАРУ" "%1$s кідіртілді" @@ -689,6 +694,8 @@ "Батарея" "Сағат" "Құлақаспап жинағы" + + "Құлақаспап қосылды" "Құлақаспап жинағы қосылды" "Трафикті үнемдеу" @@ -812,6 +819,7 @@ "Скриншоттар" "Жалпы хабарлар" "Жад" + "Кеңестер" "Instant Apps" "Лездік қолданбаларды орнатудың қажеті жоқ." "Қолданба ақпараты" @@ -839,4 +847,11 @@ "%1$s қолданбасына кез келген қолданбаның үзіндісін көрсетуге рұқсат беру" "Рұқсат беру" "Тыйым салу" + "Түймені түртіп, Battery Saver функциясын реттеңіз" + "Батарея заряды %d%% болғанда, автоматты түрде қосу" + "Жоқ, рақмет" + "Battery Saver кестесі қосылды" + "Батарея заряды %d%% деңгейінен төмендегенде, Battery Saver автоматты түрде қосылады." + "Параметрлер" + "Түсінікті" diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index a85fcf7010387377185757d3d6884c64da4ecf63..a886e3288eb7dbb9f6f5991004d131839092fef8 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -33,7 +33,6 @@ "បន្ត" "ការ​ជូន​ដំណឹង" "ជិត​អស់​ថ្ម​ហើយ" - "កម្រិត​ថ្ម​នៅ​សល់​តិច។ សូមបើក​កម្មវិធីសន្សំថ្ម" "នៅ​សល់ %s" "នៅសល់ %s អាច​ប្រើ​បាន​ប្រហែល %s ទៀត​ផ្អែកលើ​ការប្រើប្រាស់​របស់អ្នក" "នៅសល់ %s អាច​ប្រើ​បាន​ប្រហែល %s ទៀត" @@ -73,11 +72,10 @@ "រូបថតអេក្រង់" "កំពុង​រក្សាទុក​រូបថត​អេក្រង់…" "កំពុង​រក្សាទុក​រូបថត​អេក្រង់..." - "​កំពុង​​រក្សាទុករូបថត​អេក្រង់" "បានរក្សាទុក​រូបថតអេក្រង់" "ចុច​ដើម្បីមើល​រូបថតអេក្រង់​របស់អ្នក" - "មិន​អាច​​ថត​រូប​អេក្រង់​​បាន​ទេ" - "បានជួប​បញ្ហា​ពេល​កំពុង​​រក្សាទុក​រូបថតអេក្រង់" + "មិន​អាច​រក្សាទុក​រូបថត​អេក្រង់បានទេ" + "សាកល្បង​ថតរូបថត​អេក្រង់​ម្តងទៀត" "មិនអាច​រក្សាទុក​រូបថតអេក្រង់​បានទេ ​ដោយសារ​ទំហំផ្ទុក​មានកម្រិតទាប" "ការថត​រូបអេក្រង់​មិនត្រូវ​បាន​អនុញ្ញាត​ដោយ​កម្មវិធី​នេះ ឬ​ស្ថាប័ន​របស់អ្នក" "ជម្រើស​ផ្ទេរ​ឯកសារ​តាម​យូអេសប៊ី" @@ -273,8 +271,7 @@ "ករណី Dessert" "ធាតុរក្សាអេក្រង់" "អ៊ីសឺរណិត" - - + "ចុច​​រូបតំណាងឱ្យ​ជាប់​សម្រាប់​ជម្រើស​បន្ថែម" "កុំរំខាន" "អាទិភាពប៉ុណ្ណោះ" "សំឡេងរោទ៍ប៉ុណ្ណោះ" @@ -349,7 +346,7 @@ "បើក​នៅពេល​ថ្ងៃលិច" "រហូត​ដល់​ពេល​ថ្ងៃរះ" "បើក​នៅម៉ោង %s" - "រហូតដល់​ម៉ោង %s" + "រហូតដល់​ម៉ោង %s" "NFC" "បាន​បិទ NFC" "បាន​បើក NFC" @@ -433,7 +430,8 @@ "%s នឹង​ចាប់ផ្ដើម​ចាប់​យក​អ្វីៗ​គ្រប់យ៉ាង​ដែល​បង្ហាញ​លើ​អេក្រង់​របស់​អ្នក។" "កុំ​បង្ហាញ​ម្ដងទៀត" "សម្អាត​ទាំងអស់" - "មុខងារ​កុំរំខាន​កំពុងលាក់​ការជូនដំណឹង" + "គ្រប់គ្រងការជូនដំណឹង" + "មុខងារ​កុំរំខាន​កំពុងលាក់​ការជូនដំណឹង" "ចាប់ផ្ដើម​ឥឡូវ" "គ្មាន​ការ​ជូនដំណឹង" "ប្រវត្តិរូបអាចត្រូវបានតាមដាន" @@ -539,7 +537,8 @@ "%1$s ។ ចុច​ដើម្បី​កំណត់​ឲ្យ​ញ័រ។" "%1$s ។ ចុច​ដើម្បី​បិទ​សំឡេង។" "%s របារ​បញ្ជា​កម្រិត​សំឡេង" - "ការហៅ​ទូរសព្ទ និងការជូន​ដំណឹងនឹងរោទ៍" + + "លទ្ធផល​មេឌៀ" "លទ្ធផល​នៃ​ការ​ហៅ​ទូរសព្ទ" "រកមិន​ឃើញ​ឧបករណ៍​ទេ" @@ -626,6 +625,7 @@ "%1$s %2$s" "ការគ្រប់គ្រង​ការជូន​ដំណឹង" "ជម្រើស​ផ្អាកការ​ជូនដំណឹង" + "ផ្អាក" "មិន​ធ្វើវិញ" "បាន​ផ្អាក​រយៈពេល %1$s" @@ -689,6 +689,8 @@ "ថ្ម" "នាឡិកា" "កាស" + + "បានភ្ជាប់កាស" "បានភ្ជាប់កាស" "កម្មវិធីសន្សំសំចៃទិន្នន័យ" @@ -812,6 +814,7 @@ "រូបថត​អេក្រង់" "សារ​ទូទៅ" "ទំហំផ្ទុក" + "ការ​សម្រួល" "កម្មវិធី​ប្រើ​ភ្លាមៗ" "កម្មវិធី​ប្រើ​ភ្លាមៗ​មិន​តម្រូវ​ឲ្យ​មានការ​ដំឡើង​ទេ។" "ព័ត៌មាន​កម្មវិធី" @@ -839,4 +842,11 @@ "អនុញ្ញាត​ឱ្យ %1$s បង្ហាញ​ស្ថិតិ​ប្រើប្រាស់​ពី​កម្មវិធី​នានា" "អនុញ្ញាត" "បដិសេធ" + "ចុច​ដើម្បី​កំណត់​កាលវិភាគ​កម្មវិធី​សន្សំ​ថ្ម" + "បើក​ដោយ​ស្វ័យ​ប្រវត្តិ​ នៅ​ពេល​ដែល​ថ្ម​នៅ​ត្រឹម %d%%" + "ទេ អរគុណ" + "កាលវិភាគ​កម្មវិធី​សន្សំ​ថ្ម​បាន​បើក​ហើយ" + "កម្មវិធី​សន្សំ​ថ្ម​នឹង​បើក​ដោយ​ស្វ័យ​ប្រវត្តិ​ បន្ទាប់​ពី​ថ្ម​នៅ​សល់​តិច​ជាង %d%% ។" + "ការកំណត់" + "យល់ហើយ" diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index fc807c417feb09fd48bce036cacab2a31db831f3..76343c3459d3067b6b388d59dcc8a6bae3c1463e 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -33,7 +33,6 @@ "ಚಾಲ್ತಿಯಲ್ಲಿರುವ" "ಅಧಿಸೂಚನೆಗಳು" "ಬ್ಯಾಟರಿ ಕಡಿಮೆ ಇದೆ" - "ಬ್ಯಾಟರಿ ಕಡಿಮೆ ಇದೆ. ಬ್ಯಾಟರಿ ಸೇವರ್ ಆನ್ ಮಾಡಿ" "%s ಉಳಿದಿದೆ" "%s ಬಾಕಿ ಉಳಿದಿದೆ, ನಿಮ್ಮ ಬಳಕೆಯ ಆಧಾರದ ಮೇಲೆ %s ಉಳಿದಿದೆ" "%s ಬಾಕಿ ಉಳಿದಿದೆ, %s ಉಳಿದಿದೆ" @@ -73,11 +72,10 @@ "ಸ್ಕ್ರೀನ್‌ಶಾಟ್" "ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ಉಳಿಸಲಾಗುತ್ತಿದೆ…" "ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ಉಳಿಸಲಾಗುತ್ತಿದೆ…" - "ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ಉಳಿಸಲಾಗುತ್ತಿದೆ" "ಸ್ಕ್ರೀನ್‌ಶಾಟ್‌ ಅನ್ನು ಉಳಿಸಲಾಗಿದೆ" "ನಿಮ್ಮ ಸ್ಕ್ರೀನ್‌ಶಾಟ್‌ ವೀಕ್ಷಿಸಲು ಟ್ಯಾಪ್ ಮಾಡಿ" - "ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ಸೆರೆಹಿಡಿಯಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ" - "ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ಉಳಿಸುವಲ್ಲಿ ಸಮಸ್ಯೆ ಎದುರಾಗಿದೆ" + "ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ಅನ್ನು ಉಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ" + "ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ಅನ್ನು ಪುನಃ ತೆಗೆದುಕೊಳ್ಳಲು ಪ್ರಯತ್ನಿಸಿ" "ಪರಿಮಿತ ಸಂಗ್ರಹಣೆ ಸ್ಥಳದ ಕಾರಣದಿಂದಾಗಿ ಸ್ಕ್ರೀನ್‌ಶಾಟ್ ಉಳಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ" "ಅಪ್ಲಿಕೇಶನ್ ಅಥವಾ ಸಂಸ್ಥೆಯು ಸ್ಕ್ರೀನ್‌ಶಾಟ್‌ಗಳನ್ನು ತೆಗೆಯುವುದನ್ನು ಅನುಮತಿಸುವುದಿಲ್ಲ" "USB ಫೈಲ್ ವರ್ಗಾವಣೆ ಆಯ್ಕೆಗಳು" @@ -273,8 +271,7 @@ "ಡೆಸರ್ಟ್ ಕೇಸ್" "ಸ್ಕ್ರೀನ್ ಸೇವರ್" "ಇಥರ್ನೆಟ್" - - + "ಹೆಚ್ಚಿನ ಆಯ್ಕೆಗಳಿಗಾಗಿ ಐಕಾನ್‌ಗಳನ್ನು ಸ್ಪರ್ಶಿಸಿ ಮತ್ತು ಒತ್ತಿಹಿಡಿಯಿರಿ" "ಅಡಚಣೆ ಮಾಡಬೇಡಿ" "ಆದ್ಯತೆ ಮಾತ್ರ" "ಅಲಾರಮ್‌ಗಳು ಮಾತ್ರ" @@ -349,7 +346,7 @@ "ಸೂರ್ಯಾಸ್ತದಲ್ಲಿ" "ಸೂರ್ಯೋದಯದ ತನಕ" "%s ಸಮಯದಲ್ಲಿ" - "%s ವರೆಗೂ" + "%s ವರೆಗೂ" "NFC" "NFC ನಿಷ್ಕ್ರಿಯಗೊಂಡಿದೆ" "NFC ಸಕ್ರಿಯಗೊಂಡಿದೆ" @@ -433,7 +430,9 @@ "ನಿಮ್ಮ ಪರದೆಯ ಮೇಲೆ ಪ್ರದರ್ಶಿಸಲಾಗುವ ಎಲ್ಲವನ್ನೂ %s ಯು ಸೆರೆಹಿಡಿಯಲು ಪ್ರಾರಂಭಿಸುತ್ತದೆ." "ಮತ್ತೊಮ್ಮೆ ತೋರಿಸದಿರು" "ಎಲ್ಲವನ್ನೂ ತೆರವುಗೊಳಿಸು" - "\"ಅಡಚಣೆ ಮಾಡಬೇಡ\" ಮೋಡ್ ಅಧಿಸೂಚನೆಗಳನ್ನು ಮರೆಮಾಡುತ್ತಿದೆ" + "ಅಧಿಸೂಚನೆಗಳನ್ನು ನಿರ್ವಹಿಸಿ" + + "ಈಗ ಪ್ರಾರಂಭಿಸಿ" "ಯಾವುದೇ ಅಧಿಸೂಚನೆಗಳಿಲ್ಲ" "ಪ್ರೊಫೈಲ್ ಅನ್ನು ಪರಿವೀಕ್ಷಿಸಬಹುದಾಗಿದೆ" @@ -539,7 +538,8 @@ "%1$s. ವೈಬ್ರೇಟ್ ಮಾಡಲು ಹೊಂದಿಸುವುದಕ್ಕಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ." "%1$s. ಮ್ಯೂಟ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ." "%s ವಾಲ್ಯೂಮ್ ನಿಯಂತ್ರಕಗಳು" - "ಕರೆಗಳು ಮತ್ತು ಅಧಿಸೂಚನೆಗಳು ರಿಂಗ್ ಆಗುತ್ತವೆ" + + "ಮೀಡಿಯಾ ಔಟ್‌ಪುಟ್" "ಫೋನ್ ಕರೆ ಔಟ್‌ಪುಟ್" "ಯಾವ ಸಾಧನಗಳೂ ಕಂಡುಬಂದಿಲ್ಲ" @@ -626,6 +626,7 @@ "%1$s %2$s" "ಅಧಿಸೂಚನೆ ನಿಯಂತ್ರಣಗಳು" "ಅಧಿಸೂಚನೆ ಸ್ನೂಜ್ ಆಯ್ಕೆಗಳು" + "ಸ್ನೂಜ್" "ರದ್ದುಮಾಡಿ" "%1$s ಗೆ ಸ್ನೂಜ್ ಮಾಡಲಾಗಿದೆ" @@ -689,6 +690,8 @@ "ಬ್ಯಾಟರಿ" "ಗಡಿಯಾರ" "ಹೆಡ್‌ಸೆಟ್" + + "ಹೆಡ್‌ಫೋನ್ ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ" "ಹೆಡ್‌ಸೆಟ್ ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ" "ಡೇಟಾ ಸೇವರ್" @@ -723,11 +726,9 @@ "ಬಲ ಕೀಕೋಡ್" "ಎಡ ಐಕಾನ್" "ಬಲ ಐಕಾನ್" - - + "ಟೈಲ್‌ಗಳನ್ನು ಸೇರಿಸಲು ಹೋಲ್ಡ್‌ ಮಾಡಿ ಮತ್ತು ಡ್ರ್ಯಾಗ್‌ ಮಾಡಿ" "ತೆಗೆದುಹಾಕಲು ಇಲ್ಲಿ ಡ್ರ್ಯಾಗ್‌ ಮಾಡಿ" - - + "ನಿಮಗೆ ಕನಿಷ್ಠ 6 ಟೈಲ್‌ಗಳ ಅಗತ್ಯವಿದೆ" "ಎಡಿಟ್" "ಸಮಯ" @@ -814,6 +815,8 @@ "ಸ್ಕ್ರೀನ್‌ಶಾಟ್‌ಗಳು" "ಸಾಮಾನ್ಯ ಸಂದೇಶಗಳು" "ಸಂಗ್ರಹಣೆ" + + "ತತ್‌ಕ್ಷಣ ಆಪ್‌ಗಳು" "ತತ್‌ಕ್ಷಣ ಆಪ್‌ಗಳಿಗೆ ಸ್ಥಾಪನೆಯ ಅಗತ್ಯವಿಲ್ಲ." "ಅಪ್ಲಿಕೇಶನ್ ಮಾಹಿತಿ" @@ -831,12 +834,9 @@ "ಬದಲಿಸಿ" "ಅಪ್ಲಿಕೇಶನ್‌ಗಳು ಹಿನ್ನೆಲೆಯಲ್ಲಿ ರನ್ ಆಗುತ್ತಿವೆ" "ಬ್ಯಾಟರಿ,ಡೇಟಾ ಬಳಕೆಯ ವಿವರಗಳಿಗಾಗಿ ಟ್ಯಾಪ್ ಮಾಡಿ" - - - - - - + "ಮೊಬೈಲ್ ಡೇಟಾ ಆಫ್ ಮಾಡಬೇಕೆ?" + "ನೀವು %s ಮೂಲಕ ಡೇಟಾ ಅಥವಾ ಇಂಟರ್ನೆಟ್‌ಗೆ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿಲ್ಲ. ಇಂಟರ್ನೆಟ್ ವೈ-ಫೈ ಮೂಲಕ ಮಾತ್ರ ಲಭ್ಯವಿರುತ್ತದೆ." + "ನಿಮ್ಮ ವಾಹಕ" "ಅನುಮತಿ ವಿನಂತಿಯನ್ನು ಅಪ್ಲಿಕೇಶನ್ ಮರೆಮಾಚುತ್ತಿರುವ ಕಾರಣ, ಸೆಟ್ಟಿಂಗ್‌ಗಳಿಗೆ ನಿಮ್ಮ ಪ್ರತಿಕ್ರಿಯೆಯನ್ನು ಪರಿಶೀಲಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ." "%2$s ಸ್ಲೈಸ್‌ಗಳನ್ನು ತೋರಿಸಲು %1$s ಅನ್ನು ಅನುಮತಿಸುವುದೇ?" "- ಇದು %1$s ನಿಂದ ಮಾಹಿತಿಯನ್ನು ಓದಬಹುದು" @@ -844,4 +844,18 @@ "ಯಾವುದೇ ಅಪ್ಲಿಕೇಶನ್‌ನಿಂದ ಸ್ಲೈಸ್‌ಗಳನ್ನು ತೋರಿಸಲು %1$s ಅನ್ನು ಅನುಮತಿಸಿ" "ಅನುಮತಿಸಿ" "ನಿರಾಕರಿಸಿ" + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index 92bd640050cc788fc104b6864bbffb1ef1a5c878..d830f90f532dad1407b9b4f52416109feb9a676b 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -33,7 +33,6 @@ "진행 중" "알림" "배터리 부족" - "배터리가 부족합니다. 배터리 세이버를 사용 설정하세요" "%s 남았습니다." "%s 남음, 내 사용량을 기준으로 약 %s 남음" "%s 남음, 약 %s 남음" @@ -73,11 +72,12 @@ "스크린샷" "캡쳐화면 저장 중..." "캡쳐화면 저장 중..." - "스크린샷을 저장하는 중입니다" "스크린샷 저장됨" "스크린샷을 확인하려면 탭하세요" - "스크린샷을 캡쳐하지 못함" - "스크린샷을 저장하는 중 문제가 발생했습니다" + + + + "저장용량이 부족하여 스크린샷을 저장할 수 없습니다" "앱이나 조직에서 스크린샷 촬영을 허용하지 않습니다." "USB 파일 전송 옵션" @@ -275,8 +275,7 @@ "디저트 케이스" "화면 보호기" "이더넷" - - + "추가 옵션을 보려면 아이콘을 길게 터치하세요." "알림 일시중지" "중요 알림만" "알람만" @@ -351,7 +350,8 @@ "일몰에" "일출까지" "%s에" - "%s까지" + + "NFC" "NFC 사용 중지됨" "NFC 사용 설정됨" @@ -435,7 +435,9 @@ "%s에서 화면에 표시된 모든 것을 캡처하기 시작합니다." "다시 표시 안함" "모두 지우기" - "알림 일시중지 기능으로 알림 숨기는 중" + + + "알림 일시중지 기능으로 알림 숨기는 중" "시작하기" "알림 없음" "프로필이 모니터링될 수 있음" @@ -541,7 +543,8 @@ "%1$s. 탭하여 진동으로 설정하세요." "%1$s. 탭하여 음소거로 설정하세요." "%s 볼륨 컨트롤" - "전화 및 알림 소리가 울립니다." + + "미디어 출력" "전화 통화 출력" "기기를 찾을 수 없음" @@ -628,6 +631,8 @@ "%1$s %2$s" "알림 관리" "알림 일시 중지 옵션" + + "실행취소" "%1$s 동안 일시 중지됨" @@ -691,6 +696,8 @@ "배터리" "시계" "헤드셋" + + "헤드폰 연결됨" "헤드셋 연결됨" "데이터 절약 모드" @@ -814,6 +821,7 @@ "스크린샷" "일반 메시지" "저장공간" + "힌트" "인스턴트 앱" "인스턴트 앱은 설치가 필요하지 않습니다." "앱 정보" @@ -841,4 +849,15 @@ "%1$s에서 모든 앱의 슬라이스를 표시하도록 허용" "허용" "거부" + "탭하여 배터리 세이버 예약" + + + + "사용 안함" + "배터리 세이버 예약 사용 설정됨" + + + + "설정" + "확인" diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index a239b154b16445dda4f66683fdd125e660cebbd8..5cb4fd75d847a4105b14526f46c71d02a8c21195 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -33,7 +33,6 @@ "Учурдагы" "Эскертмелер" "Батареянын кубаты аз" - "Батарея аз калды. Батареяны үнөмдөгүчтү күйгүзүңүз" "%s калды" "%s калды, колдонушуңузга караганда болжол менен дагы %s бар" "%s калды, болжол менен дагы %s бар" @@ -73,11 +72,12 @@ "Скриншот" "Скриншот сакталууда…" "Скриншот сакталууда..." - "Скриншот сакталууда" "Скриншот сакталды" "Скриншотуңузду көрүү үчүн таптап коюңуз" - "Скриншот тартылбай жатат" - "Скриншотту сактоо учурунда көйгөй пайда болду" + + + + "Сактагычта бош орун аз болгондуктан скриншот сакталбай жатат" "Скриншот тартууга колдонмо же ишканаңыз тыюу салган." "USB менен файл өткөрүү мүмкүнчүлүктөрү" @@ -273,8 +273,7 @@ "Десерт себети" "Көшөгө" "Ethernet" - - + "Кошумча параметрлерди ачуу үчүн сүрөтчөлөрдү басып, кармап туруңуз" "Тынчымды алба" "Шашылыш эскертмелер гана" "Ойготкучтар гана" @@ -349,7 +348,8 @@ "Күн батканда күйөт" "Күн чыкканга чейин" "Саат %s күйөт" - "%s чейин" + + "NFC" "NFC өчүрүлгөн" "NFC иштетилген" @@ -433,7 +433,9 @@ "%s экранга чыккан нерсенин баарын сүрөткө тарта баштайт." "Экинчи көрсөтүлбөсүн" "Бардыгын тазалап салуу" - "\"Тынчымды алба\" режими эскертмелерди жашырууда" + + + "\"Тынчымды алба\" режими эскертмелерди жашырууда" "Азыр баштоо" "Эскертмелер жок" "Профилди көзөмөлдөсө болот" @@ -539,7 +541,8 @@ "%1$s. Дирилдөөгө коюу үчүн басыңыз." "%1$s. Үнүн өчүрүү үчүн басыңыз." "%s үндү башкаруу элементтери" - "Чалуулар менен эскертмелердин үнү чыгарылат" + + "Медиа түзмөк" "Телефон чалуу" "Түзмөктөр табылган жок" @@ -626,6 +629,8 @@ "%1$s %2$s" "эскертмелерди башкаруу каражаттары" "эскертмени тындыруу опциялары" + + "КАЙТАРУУ" "%1$s тындырылды" @@ -689,6 +694,8 @@ "Батарея" "Саат" "Гарнитура" + + "Гарнитуралар туташкан" "Гарнитура туташты" "Дайындарды үнөмдөгүч" @@ -812,6 +819,7 @@ "Скриншоттор" "Жалпы билдирүүлөр" "Сактагыч" + "Кеңештер" "Ыкчам ачылуучу колдонмолор" "Ыкчам ачылуучу колдонмолорду орнотуу талап кылынбайт." "Колдонмо тууралуу" @@ -839,4 +847,11 @@ "%1$s бардык колдонмолордун үлгүлөрүн көрсөтүүгө уруксат берүү" "Уруксат берүү" "Жок" + "Батареяны үнөмдөгүчтүн тартибин жөндөө үчүн басыңыз" + "Батареянын деңгээли %d%% жеткенде, автоматтык түрдө күйгүзүлсүн" + "Жок, рахмат" + "Батареяны үнөмдөгүчтүн тартиби күйгүзүлдү" + "Батареянын деңгээли %d%% төмөндөгөндө, Батареяны үнөмдөгүч режими автоматтык түрдө күйөт." + "Жөндөөлөр" + "Түшүндүм" diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index 572d3f45836bad0137d1e38ec5cc3ad31486549a..5f5ba00106971e955366097635e5378ea189b2eb 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -33,7 +33,6 @@ "ດຳເນີນຢູ່" "ການແຈ້ງເຕືອນ" "ແບັດເຕີຣີ​ເຫຼືອ​ໜ້ອຍ" - "ແບັດເຕີຣີເຫຼືອໜ້ອຍ. ກະລຸນາເປີດໃຊ້ຕົວປະຢັດແບັດເຕີຣີ" "ຍັງ​ເຫຼືອ %s" "ຍັງເຫຼືອ %s, ປະມານ %s ໂດຍອ້າງອີງຈາກການນຳໃຊ້ຂອງທ່ານ" "ຍັງເຫຼືອ %s, ປະມານ %s" @@ -73,11 +72,12 @@ "ພາບໜ້າຈໍ" "ກຳລັງບັນທຶກຮູບໜ້າຈໍ" "ກຳລັງບັນທຶກພາບໜ້າຈໍ..." - "ກຳລັງບັນທຶກພາບໜ້າຈໍ" "ບັນທຶກຮູບໜ້າຈໍໄວ້ແລ້ວ" "ແຕະເພື່ອເບິ່ງພາບຖ່າຍໜ້າຈໍຂອງທ່ານ" - "ບໍ່ສາມາດຖ່າຍຮູບໜ້າຈໍໄດ້" - "ເກີດບັນຫາໃນການບັນທຶກພາບໜ້າຈໍຂອງທ່ານ" + + + + "ບໍ່ສາມາດຖ່າຍຮູບໜ້າຈໍໄດ້ເນື່ອງຈາກພື້ນທີ່ຈັດເກັບຂໍ້ມູນມີຈຳກັດ" "ແອັບ ຫຼື ອົງກອນຂອງທ່ານບໍ່ອະນຸຍາດໃຫ້ຖ່າຍຮູບໜ້າຈໍ" "USB ໂຕເລືອກການຍ້າຍໄຟລ໌" @@ -273,8 +273,7 @@ "ກ່ອງຂອງຫວານ" "ພາບພັກໜ້າຈໍ" "Ethernet" - - + "ແຕະໄອຄອນຄ້າງໄວ້ເພື່ອເບິ່ງຕົວເລືອກເພີ່ມເຕີມ" "ຫ້າມ​ລົບ​ກວນ" "ບຸ​ລິ​ມະ​ສິດເທົ່າ​ນັ້ນ" "ໂມງ​ປຸກ​ເທົ່າ​ນັ້ນ" @@ -349,7 +348,8 @@ "ເປີດຕອນຕາເວັນຕົກ" "ຈົນກວ່າຕາເວັນຂຶ້ນ" "ເປີດຕອນ %s" - "ຈົນກວ່າຈະຮອດ %s" + + "NFC" "NFC is disabled" "NFC is enabled" @@ -433,7 +433,10 @@ "%s ​ຈະ​ເລີ່ມ​ບັນ​ທຶກ​ທຸກ​ຢ່າງ​ທີ່​ສະ​ແດງ​ຜົນ​ໃນ​ໜ້າ​ຈໍ​ທ່ານ." "ບໍ່​ຕ້ອງ​ສະ​ແດງ​ອີກ" "ລຶບລ້າງທັງໝົດ" - "ໂໝດຫ້າມລົບກວນຈະເຊື່ອງການແຈ້ງເຕືອນໄວ້" + + + + "ເລີ່ມດຽວນີ້" "ບໍ່ມີການແຈ້ງເຕືອນ" "ໂປຣ​ໄຟລ໌​ອາດ​ຖືກ​ເຝົ້າ​ຕິດ​ຕາມ​ຢູ່" @@ -539,7 +542,8 @@ "%1$s. ແຕະເພື່ອຕັ້ງເປັນສັ່ນເຕືອນ." "%1$s. ແຕະເພື່ອປິດສຽງ." "ການຄວບຄຸມສຽງ %s" - "ການໂທ ແລະ ການແຈ້ງເຕືອນຈະມີສຽງ" + + "ມີເດຍເອົ້າພຸດ" "ເອົ້າພຸດສາຍໂທອອກ" "ບໍ່ພົບອຸປະກອນ" @@ -626,6 +630,8 @@ "%1$s %2$s" "ການຄວບຄຸມການແຈ້ງເຕືອນ" "ຕົວເລືອກການເລື່ອນການແຈ້ງເຕືອນ" + + "ຍົກເລີກ" "ເລື່ອນໄປ %1$s ນາທີແລ້ວ" @@ -689,6 +695,8 @@ "ແບັດເຕີຣີ" "ໂມງ" "​ຊຸດ​ຫູ​ຟັງ" + + "ເຊື່ອມຕໍ່ຊຸດຫູຟັງແລ້ວ" "ເຊື່ອມ​ຕໍ່ຊຸດ​ຫູ​ຟັງແລ້ວ" "ຕົວປະຢັດຂໍ້ມູນ" @@ -812,6 +820,8 @@ "ຮູບຖ່າຍໜ້າຈໍ" "ຂໍ້ຄວາມທົ່ວໄປ" "ບ່ອນເກັບຂໍ້ມູນ" + + "ອິນສະແຕນແອັບ" "ອິນສະແຕນແອັບບໍ່ຈຳເປັນຕ້ອງມີການຕິດຕັ້ງ." "ຂໍ້ມູນແອັບ" @@ -839,4 +849,18 @@ "ອະນຸຍາດ %1$s ເພື່ອສະແດງສະໄລ້ຈາກແອັບ" "ອະນຸຍາດ" "ປະຕິເສດ" + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index fb73956b7695956450ac6b2b289051597ad5bec8..d7e08992419caf4fa9398cb266b0f01a87a5910a 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -35,17 +35,13 @@ "Vykstantys" "Pranešimai" "Akumuliatorius senka" - "Akumuliatorius senka. Įjunkite Akumuliatoriaus tausojimo priemonę" "Liko %s" "Liko: %s (atsižvelgiant į naudojimą liko maždaug %s)" "Liko: %s (liko maždaug %s)" "Liko %s. Akumuliatoriaus tausojimo priemonė įjungta." - - - - - - + "Negalima įkrauti naudojant USB. Naudokite originalų su įrenginiu pateiktą įkroviklį." + "Negalima įkrauti naudojant USB" + "Naudokite originalų su įrenginiu pateiktą įkroviklį" "Nustatymai" "Įjungti Akumuliatoriaus tausojimo priemonę?" "Įjungti" @@ -78,11 +74,10 @@ "Ekrano kopija" "Išsaugoma ekrano kopija..." "Išsaugoma ekrano kopija..." - "Ekrano kopija išsaugoma" "Ekrano kopija išsaugota" "Palieskite, kad peržiūrėtumėte ekrano kopiją" - "Nepavyko užfiksuoti ekrano kopijos" - "Išsaugant ekrano kopiją kilo problema" + "Ekrano kopijos išsaugoti nepavyko" + "Pabandykite padaryti ekrano kopiją dar kartą" "Negalima išsaugoti ekrano kopijos dėl ribotos saugyklos vietos" "Jūsų organizacijoje arba naudojant šią programą neleidžiama daryti ekrano kopijų" "USB failo perdavimo parinktys" @@ -153,7 +148,6 @@ "Prijungta." "Prisijungiama." "GPRS" - "1 X" "HSPA" "3G" "3.5G" @@ -213,8 +207,7 @@ "Lėktuvo režimas įjungtas." "Lėktuvo režimas išjungtas." "Lėktuvo režimas įjungtas." - - + "Netrukdymo režimas įjungtas." "Įjungta funkcija „Netrukdyti“, visiška tyla." "Funkcija „Netrukdyti“ įjungta. Leidžiami tik signalai." "Netrukdyti." @@ -282,7 +275,7 @@ "Desertų dėklas" "Ekrano užsklanda" "Eternetas" - "Paspauskite ir palaikykite piktogramas, kad būtų parodyta daugiau parinkčių" + "Palieskite ir palaikykite piktogramas, kad būtų parodyta daugiau parinkčių" "Netrukdyti" "Tik prioritetiniai įvykiai" "Tik signalai" @@ -359,7 +352,7 @@ "Per saulėlydį" "Iki saulėtekio" "%s" - "Iki %s" + "Iki %s" "ALR" "ALR išjungtas" "ALR įjungtas" @@ -443,7 +436,8 @@ "„%s“ pradės fiksuoti viską, kas rodoma jūsų ekrane." "Daugiau neberodyti" "Viską išvalyti" - + "Pranešimų tvarkymas" + "Pradėti dabar" "Nėra įspėjimų" @@ -550,9 +544,8 @@ "%1$s. Palieskite, kad nustatytumėte vibravimą." "%1$s. Palieskite, kad nutildytumėte." "Garsumo valdikliai: %s" - "Skambučiai ir pranešimai vibruos" - "Skambučiai ir pranešimai bus nutildyti" - "Skambučiai ir pranešimai skambės" + + "Medijos išvestis" "Telefono skambučių išvestis" "Įrenginių nerasta" @@ -643,6 +636,7 @@ "„%1$s%2$s" "pranešimų valdikliai" "pranešimų snaudimo parinktys" + "Snausti" "ANULIUOTI" "Nustatyta snausti %1$s" @@ -710,6 +704,8 @@ "Akumuliatorius" "Laikrodis" "Ausinės" + + "Ausinės prijungtos" "Ausinės prijungtos" "Duomenų taupymo priemonė" @@ -744,8 +740,9 @@ "Klavišo kodas dešinėje" "Piktograma kairėje" "Piktograma dešinėje" - "Nuvilkite, kad pridėtumėte išklotinės elementų" + "Jei norite pridėti išklotinių, laikykite nuspaudę ir vilkite" "Vilkite čia, jei norite pašalinti" + "Turi būti bent 6 išklotinės" "Redaguoti" "Laikas" @@ -832,6 +829,8 @@ "Ekrano kopijos" "Bendrieji pranešimai" "Saugykla" + + "Akimirksniu įkeliamos programėlės" "Akimirksniu įkeliamų programėlių nereikia įdiegti." "Programos informacija" @@ -849,7 +848,9 @@ "Pakeisti" "Programos, veikiančios fone" "Palieskite ir sužinokite išsamios informacijos apie akumuliatoriaus bei duomenų naudojimą" - "Išjungti mobiliojo ryšio duomenis?" + "Išjungti mobiliojo ryšio duomenis?" + "Naudodamiesi „%s“ paslaugomis neturėsite galimybės pasiekti duomenų arba interneto. Internetą galėsite naudoti tik prisijungę prie „Wi-Fi“." + "savo operatoriaus" "Kadangi programa užstoja leidimo užklausą, nustatymuose negalima patvirtinti jūsų atsakymo." "Leisti „%1$s“ rodyti „%2$s“ fragmentus?" "- Gali nuskaityti informaciją iš „%1$s“" @@ -857,4 +858,18 @@ "Leisti „%1$s“ rodyti bet kurios programos fragmentus" "Leisti" "Neleisti" + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index 95cb656a57d15d5912e191eea4d4d1668acc4a3d..d898ef6a07c086de0a485cd7ad2828c4377a9849 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -34,17 +34,13 @@ "Notiekošs" "Paziņojumi" "Zems akumulatora enerģijas līmenis" - "Akumulatora uzlādes līmenis ir zems. Ieslēdziet akumulatora jaudas taupīšanas režīmu." "Atlikuši %s" "Atlikušais laiks: %s — aptuveni %s (ņemot vērā lietojumu)" "Atlikušais laiks: %s — aptuveni %s" "Atlikuši %s. Ir ieslēgts akumulatora jaudas taupīšanas režīms." - - - - - - + "Nevar veikt uzlādi, izmantojot USB. Izmantojiet ierīces komplektācijā iekļauto uzlādes ierīci." + "Nevar veikt uzlādi, izmantojot USB" + "Izmantojiet ierīces komplektācijā iekļauto uzlādes ierīci" "Iestatījumi" "Vai ieslēgt akumulatora jaudas taupīšanas režīmu?" "Ieslēgt" @@ -77,11 +73,10 @@ "Ekrānuzņēmums" "Saglabā ekrānuzņēmumu…" "Notiek ekrānuzņēmuma saglabāšana..." - "Notiek ekrānuzņēmuma saglabāšana." "Ekrānuzņēmums saglabāts" "Pieskarieties, lai skatītu ekrānuzņēmumu." - "Nevarēja uzņemt ekrānuzņēmumu" - "Saglabājot ekrānuzņēmumu, radās problēma." + "Ekrānuzņēmumu neizdevās saglabāt." + "Mēģiniet izveidot jaunu ekrānuzņēmumu." "Nevar saglabāt ekrānuzņēmumu, jo krātuvē nepietiek vietas." "Lietotne vai jūsu organizācija neatļauj veikt ekrānuzņēmumus." "USB failu pārsūtīšanas opcijas" @@ -152,7 +147,6 @@ "Savienojums ir izveidots." "Notiek savienojuma izveide..." "GPRS" - "1 X" "HSPA" "3G" "3,5G" @@ -212,8 +206,7 @@ "Lidojuma režīms ir ieslēgts." "Lidojuma režīms ir izslēgts." "Lidojuma režīms ir ieslēgts." - - + "Režīms “Netraucēt” ir ieslēgts." "Ieslēgts režīms “Netraucēt”, pilnīgs klusums." "Ieslēgts režīms “Netraucēt”, atļauti tikai signāli." "Netraucēt." @@ -280,7 +273,7 @@ "Saldo ēdienu stends" "Ekrānsaudzētājs" "Tīkls Ethernet" - "Nospiediet uz ikonām un turiet, lai skatītu papildiespējas" + "Lai skatītu papildiespējas, pieskarieties ikonām un turiet tās." "Netraucēt" "Tikai prioritārie" "Tikai signāli" @@ -356,7 +349,7 @@ "Saulrietā" "Līdz saullēktam" "Plkst. %s" - "Līdz plkst. %s" + "Līdz %s" "NFC" "NFC ir atspējoti" "NFC ir iespējoti" @@ -440,8 +433,8 @@ "%s sāks uzņemt visu, kas tiks rādīts jūsu ekrānā." "Vairs nerādīt" "Dzēst visu" - - + "Pārvaldīt paziņojumus" + "Režīmā “Netraucēt” paziņojumi tiek paslēpti" "Sākt tūlīt" "Nav paziņojumu" "Profilu var pārraudzīt" @@ -547,9 +540,8 @@ "%1$s. Pieskarieties, lai iestatītu vibrozvanu." "%1$s. Pieskarieties, lai izslēgtu skaņu." "%s skaļuma vadīklas" - "Zvaniem un paziņojumiem tiks aktivizēta vibrācija." - "Zvanu un paziņojumu signāla skaņa būs izslēgta." - "Tiks atskaņots zvanu un paziņojumu signāls." + + "Multivides izvade" "Tālruņa zvana izvade" "Nav atrasta neviena ierīce" @@ -638,6 +630,7 @@ "%1$s %2$s" "paziņojumu vadīklas" "paziņojumu atlikšanas opcijas" + "Atlikt" "ATSAUKT" "Atlikts: %1$s" @@ -703,6 +696,8 @@ "Akumulators" "Pulkstenis" "Austiņas" + + "Austiņas ir pievienotas" "Austiņas ar mikrofonu ir pievienotas" "Datu lietojuma samazinātājs" @@ -737,8 +732,9 @@ "Taustiņu kods labajā pusē" "Ikona kreisajā pusē" "Ikona labajā pusē" - "Velciet elementus, lai tos pievienotu" + "Lai pievienotu elementus, pieturiet tos un velciet" "Lai noņemtu vienumus, velciet tos šeit." + "Nepieciešami vismaz 6 elementi" "Rediģēt" "Laiks" @@ -825,6 +821,7 @@ "Ekrānuzņēmumi" "Vispārīgi ziņojumi" "Krātuve" + "Padomi" "Tūlītējās lietotnes" "Tūlītējām lietotnēm nav nepieciešama instalēšana." "Lietotnes informācija" @@ -842,7 +839,9 @@ "Aizstāt" "Lietotnes, kas darbojas fonā" "Pieskarieties, lai skatītu detalizētu informāciju par akumulatora un datu lietojumu" - "Vai izslēgt mobilos datus?" + "Vai izslēgt mobilos datus?" + "Izmantojot mobilo sakaru operatora %s pakalpojumus, nevarēsiet piekļūt datiem vai internetam. Internetam varēsiet piekļūt, tikai izmantojot Wi-Fi savienojumu." + "jūsu mobilo sakaru operators" "Lietotne Iestatījumi nevar verificēt jūsu atbildi, jo cita lietotne aizsedz atļaujas pieprasījumu." "Vai atļaut lietotnei %1$s rādīt lietotnes %2$s sadaļas?" "- Var lasīt informāciju no lietotnes %1$s" @@ -850,4 +849,15 @@ "Atļaut lietotnei %1$s rādīt sadaļas no jebkuras lietotnes" "Atļaut" "Neatļaut" + "Pieskarieties, lai iestatītu akumulatora jaudas taupīšanas režīma grafiku" + + + + "Nē, paldies" + "Ieslēgts akumulatora enerģijas taupīšanas režīma grafiks" + + + + "Iestatījumi" + "Labi" diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index eaf7b02ac5af04d813d0b313aeea264e69726d11..ad6cb883987038537a367298df6b2f6be26d628c 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -33,7 +33,6 @@ "Во тек" "Известувања" "Батеријата е слаба" - "Батеријата е слаба. Вклучете го штедачот на батерија" "Преостануваат %s" "Преостануваат %s, уште околу %s според користењето" "Преостануваат %s, уште околу %s" @@ -73,11 +72,10 @@ "Слика од екранот" "Сликата на екранот се зачувува..." "Сликата на екранот се зачувува..." - "Сликата од екранот се зачувува" "Сликата од екранот е зачувана" "Допрете за да ја видите сликата од екранот" - "Сликата од екранот не можеше да се сними" - "Проблем при зачувувањето слика од екранот" + "Не можеше да се зачува слика од екранот" + "Повторно обидете се да направите слика од екранот" "Сликата од екранот не може да се зачува поради ограничена меморија" "Апликацијата или вашата организација не дозволува снимање слики од екранот" "Пренос на датотека со USB" @@ -273,8 +271,7 @@ "Dessert Case" "Заштитник на екран" "Етернет" - - + "Допрете ги и задржете ги иконите за повеќе опции" "Не вознемирувај" "Само приоритетно" "Само аларми" @@ -349,7 +346,7 @@ "Вклуч. на зајдисонце" "До изгрејсонце" "Ќе се вклучи во %s" - "До %s" + "До %s" "NFC" "NFC е оневозможено" "NFC е овозможено" @@ -433,7 +430,8 @@ "%s ќе започне да презема сѐ што се прикажува на вашиот екран." "Не покажувај повторно" "Исчисти сè" - "„Не вознемирувај“ ги крие известувањата" + "Управувајте со известувањата" + "„Не вознемирувај“ ги крие известувањата" "Започни сега" "Нема известувања" "Профилот можеби се следи" @@ -539,7 +537,8 @@ "%1$s. Допрете за да се постави на вибрации." "%1$s. Допрете за да се исклучи звукот." "Контроли на јачината на звукот за %s" - "Повиците и известувањата ќе ѕвонат" + + "Излез за аудиовизуелни содржини" "Излез за телефонски повик" "Не се најдени уреди" @@ -626,6 +625,7 @@ "%1$s %2$s" "контроли за известувањето" "опции за одложување на известувањето" + "Одложете" "ВРАТИ" "Одложено за %1$s" @@ -689,6 +689,8 @@ "Батерија" "Часовник" "Слушалки" + + "Слушалките се поврзани" "Слушалките се поврзани" "Штедач на интернет" @@ -812,6 +814,7 @@ "Слики од екранот" "Општи пораки" "Капацитет" + "Совети" "Инстант апликации" "Инстант апликациите нема потреба да се инсталираат." "Информации за апликација" @@ -839,4 +842,11 @@ "Дозволете %1$s да прикажува делови од која било апликација" "Дозволи" "Одбиј" + "Допрете за да закажете „Штедач на батерија“" + "Вклучи автоматски кога батеријата е на %d %%" + "Не, фала" + "Распоредот за „Штедач на батерија“ е вклучен" + "Штедачот на батерија ќе се вклучи автоматски кога батеријата ќе падне под %d %%." + "Поставки" + "Сфатив" diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index 76b68be277665eb9b7bc7628e76279b184f37c33..aa6eecb7c9d7d1a3641a34d85f055234bcab3532 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -33,7 +33,6 @@ "നടന്നുകൊണ്ടിരിക്കുന്നവ" "അറിയിപ്പുകൾ" "ബാറ്ററി കുറവാണ്" - "ബാറ്ററി ചാർജ് കുറവാണ്. ബാറ്ററി ലാഭിക്കൽ ഓണാക്കുക" "%s ശേഷിക്കുന്നു" "%s അവശേഷിക്കുന്നു, ഉപയോഗം അടിസ്ഥാനമാക്കി ഏകദേശം %s ശേഷിക്കുന്നു" "%s അവശേഷിക്കുന്നു, ഏകദേശം %s ശേഷിക്കുന്നു" @@ -73,11 +72,10 @@ "സ്‌ക്രീൻഷോട്ട്" "സ്‌ക്രീൻഷോട്ട് സംരക്ഷിക്കുന്നു..." "സ്‌ക്രീൻഷോട്ട് സംരക്ഷിക്കുന്നു..." - "സ്‌ക്രീൻഷോട്ട് സംരക്ഷിക്കുന്നു" "സ്‌ക്രീൻഷോട്ട് സംരക്ഷിച്ചു" "സ്‌ക്രീൻഷോട്ട് കാണാൻ ടാപ്പ് ചെയ്യുക" - "സ്‌ക്രീൻഷോട്ട് എടുക്കാനായില്ല" - "സ്‌ക്രീൻഷോട്ട് സംരക്ഷിമ്പോൾ പ്രശ്നം നേരിട്ടു" + "സ്‌ക്രീൻഷോട്ട് സംരക്ഷിക്കാനായില്ല" + "സ്‌ക്രീൻഷോട്ട് എടുക്കാൻ വീണ്ടും ശ്രമിക്കുക" "സ്‌റ്റോറേജ് ഇടം പരിമിതമായതിനാൽ സ്‌ക്രീൻഷോട്ട് സംരക്ഷിക്കാനാകുന്നില്ല" "സ്ക്രീൻഷോട്ടുകൾ എടുക്കുന്നത് ആപ്പോ നിങ്ങളുടെ സ്ഥാപനമോ അനുവദിക്കുന്നില്ല" "USB ഫയൽ കൈമാറൽ ഓപ്‌ഷനുകൾ" @@ -273,8 +271,7 @@ "ഡെസേർട്ട് കെയ്സ്" "സ്ക്രീൻ സേവർ" "ഇതർനെറ്റ്" - - + "കൂടുതൽ ഓപ്ഷനുകൾക്കായി ഐക്കണുകൾ സ്‌പർശിച്ച് പിടിക്കുക" "ശല്ല്യപ്പെടുത്തരുത്" "മുൻഗണന മാത്രം" "അലാറങ്ങൾ മാത്രം" @@ -349,7 +346,7 @@ "സൂര്യാസ്‌തമയത്തിന്" "സൂര്യോദയം വരെ" "%s-ന്" - "%s വരെ" + "%s വരെ" "NFC" "NFC പ്രവർത്തനരഹിതമാക്കി" "NFC പ്രവർത്തനക്ഷമമാക്കി" @@ -433,7 +430,9 @@ "നിങ്ങളുടെ സ്ക്രീനിൽ പ്രദർശിപ്പിച്ചിരിക്കുന്ന എല്ലാ കാര്യങ്ങളും %s ക്യാപ്‌ചർ ചെയ്യുന്നത് ആരംഭിക്കും." "വീണ്ടും കാണിക്കരുത്" "എല്ലാം മായ്‌ക്കുക" - "അറിയിപ്പുകളെ \'ശല്യപ്പെടുത്തരുത്\' അദൃശ്യമാക്കുന്നു" + "അറിയിപ്പുകൾ മാനേജ് ചെയ്യുക" + + "ഇപ്പോൾ ആരംഭിക്കുക" "അറിയിപ്പുകൾ ഒന്നുമില്ല" "പ്രൊഫൈൽ നിരീക്ഷിക്കപ്പെടാം" @@ -539,7 +538,8 @@ "%1$s വൈബ്രേറ്റിലേക്ക് സജ്ജമാക്കുന്നതിന് ടാപ്പുചെയ്യുക." "%1$s മ്യൂട്ടുചെയ്യുന്നതിന് ടാപ്പുചെയ്യുക." "%s ശബ്‌ദ നിയന്ത്രണങ്ങൾ" - "കോളുകളും അറിയിപ്പുകളും റിംഗ് ചെയ്യും" + + "മീഡിയ ഔട്ട്പുട്ട്" "ഫോൺ കോൾ ഔട്ട്പുട്ട്" "ഉപകരണങ്ങളൊന്നും കണ്ടെത്തിയില്ല" @@ -626,6 +626,7 @@ "%1$s %2$s" "അറിയിപ്പ് നിയന്ത്രണങ്ങൾ" "അറിയിപ്പ് സ്‌നൂസ് ഓപ്ഷനുകൾ" + "സ്‌നൂസ് ചെയ്യുക" "പഴയപടിയാക്കുക" "%1$s സമയത്തേക്ക് സ്‌നൂസ് ‌ചെയ്‌തു" @@ -689,6 +690,8 @@ "ബാറ്ററി" "ക്ലോക്ക്" "ഹെഡ്‌സെറ്റ്" + + "ഹെഡ്ഫോണുകൾ കണക്റ്റുചെയ്തു" "ഹെഡ്‌സെറ്റ് കണക്‌റ്റുചെയ്‌തു" "ഡാറ്റ സേവർ" @@ -723,11 +726,9 @@ "വലതുവശത്തെ കീകോഡ്" "ഇടതുവശത്തെ ചിഹ്നം" "വലതുവശത്തെ ചിഹ്നം" - - + "ടൈലുകൾ ചേർക്കാൻ പിടിച്ച് ഇഴയ്‌ക്കുക" "നീക്കംചെയ്യുന്നതിന് ഇവിടെ വലിച്ചിടുക" - - + "നിങ്ങൾക്ക് ചുരുങ്ങിയത് 6 ടൈലുകൾ വേണം" "എഡിറ്റുചെയ്യുക" "സമയം" @@ -814,6 +815,8 @@ "സ്‌ക്രീൻഷോട്ടുകൾ" "പൊതുവായ സന്ദേശങ്ങൾ" "സ്റ്റോറേജ്" + + "ഇൻസ്റ്റന്റ് ആപ്പ്" "ഇൻസ്‌റ്റ‌ന്റ് ആപ്പിന് ഇൻസ്‌റ്റലേഷൻ ആവശ്യമില്ല." "ആപ്പ് വിവരം" @@ -831,12 +834,9 @@ "മാറ്റിസ്ഥാപിക്കുക" "ആപ്പുകൾ പശ്ചാത്തലത്തിൽ റൺ ചെയ്യുന്നു" "ബാറ്ററി, ഡാറ്റ ഉപയോഗം എന്നിവയുടെ വിശദാംശങ്ങളറിയാൻ ടാപ്പുചെയ്യുക" - - - - - - + "മൊബൈൽ ഡാറ്റ ഓഫാക്കണോ?" + "നിങ്ങൾക്ക് ഡാറ്റയിലേക്കുള്ള ആക്‌സസ് ഇല്ല അല്ലെങ്കിൽ %s മുഖേനയുള്ള ഇന്റർനെറ്റില്ല. വൈഫൈ മുഖേനയുള്ള ഇന്റർനെറ്റ് മാത്രമേ ഉണ്ടായിരിക്കൂ." + "നിങ്ങളുടെ കാരിയർ" "അനുമതി അഭ്യർത്ഥനയെ ഒരു ആപ്പ് മറയ്‌ക്കുന്നതിനാൽ, ക്രമീകരണത്തിന് നിങ്ങളുടെ പ്രതികരണം പരിശോധിച്ചുറപ്പിക്കാനാകില്ല." "%2$s സ്ലൈസുകൾ കാണിക്കാൻ %1$s-നെ അനുവദിക്കണോ?" "- ഇതിന് %1$s-ൽ നിന്ന് വിവരങ്ങൾ വായിക്കാനാകും" @@ -844,4 +844,18 @@ "ഏത് ആപ്പിൽ നിന്നും സ്ലൈസുകൾ കാണിക്കാൻ %1$s-നെ അനുവദിക്കുക" "അനുവദിക്കുക" "നിരസിക്കുക" + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index 151e34a0c62b94a480d1d4a753c5223b9d824c59..ffc18f08ff5b0f62835b9277045f7ca6fa37404f 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -31,7 +31,6 @@ "Гарсан" "Мэдэгдэл" "Батерей дуусаж байна" - "Батерей бага байна. Тэжээл хэмнэгчийг асаана уу" "%s үлдсэн" "%s үлдсэн байна. Таны хэрэглээнд тулгуурлан ойролцоогоор %s-н хугацаа үлдсэн" "%s үлдсэн байна. Ойролцоогоор %s-н хугацаа үлдсэн" @@ -71,11 +70,12 @@ "Дэлгэцийн зураг дарах" "Дэлгэцийн агшинг хадгалж байна…" "Дэлгэцийн агшинг хадгалж байна…" - "Дэлгэцээс дарсан зургийг хадгалж байна" "Дэлгэцээс дарсан зургийг хадгалсан" "Дэлгэцээс дарсан зургийг харах бол товшино уу" - "Дэлгэцийн зургийг дарж чадсангүй" - "Дэлгэцээс дарсан зургийг хадгалахад алдаа гарлаа" + + + + "Сангийн багтаамж бага байгаа тул дэлгэцээс дарсан зургийг хадгалах боломжгүй байна" "Таны апп, байгууллагад дэлгэцийн зураг авахыг зөвшөөрдөггүй" "USB файл шилжүүлэх сонголт" @@ -271,8 +271,7 @@ "Амттаны хайрцаг" "Дэлгэц амраагч" "Этернет" - - + "Бусад сонголтыг харахын тулд дүрс тэмдгийг удаан дарна уу" "Бүү саад бол" "Зөвхөн чухал зүйлс" "Зөвхөн сэрүүлэг" @@ -347,7 +346,8 @@ "Нар жаргах үед" "Нар мандах хүртэл" "%s-д" - "%s хүртэл" + + "NFC" "NFC-г цуцалсан" "NFC-г идэвхжүүлсэн" @@ -431,7 +431,9 @@ "%s таны дэлгэц дээр гаргасан бүх зүйлийн зургийг авч эхэлнэ." "Дахиж үл харуулах" "Бүгдийг арилгах" - "Бүү саад бол горим мэдэгдлийг нууж байна" + + + "Бүү саад бол горим мэдэгдлийг нууж байна" "Одоо эхлүүлэх" "Мэдэгдэл байхгүй" "Профайлыг хянаж байж болзошгүй" @@ -537,7 +539,8 @@ "%1$s. Чичиргээнд тохируулахын тулд товшино уу." "%1$s. Дууг хаахын тулд товшино уу." "%s түвшний хяналт" - "Дуудлага болон мэдэгдэл дуугарна" + + "Медиа гаралт" "Утасны дуудлагын гаралт" "Төхөөрөмж олдсонгүй" @@ -624,6 +627,8 @@ "%1$s %2$s" "мэдэгдлийн удирдлага" "мэдэгдэл түр хойшлуулагчийн сонголт" + + "БУЦААХ" "%1$s-д түр хойшлуулсан" @@ -687,6 +692,8 @@ "Зай" "Цаг" "Чихэвч" + + "Чихэвч холбогдсон" "Чихэвч холбогдсон" "Өгөгдөл хамгаалагч" @@ -810,6 +817,7 @@ "Дэлгэцийн зураг дарах" "Энгийн зурвас" "Хадгалах сан" + "Заавар" "Шуурхай апп" "Шуурхай аппыг суулгах шаардлагагүй." "Апп-н мэдээлэл" @@ -837,4 +845,11 @@ "%1$s-д дурын аппаас хэсэг харуулахыг зөвшөөрөх" "Зөвшөөрөх" "Татгалзах" + "Тэжээл хэмнэгч онцлогийг хуваарилахын тулд товших" + "Батерей %d%% болох үед автоматаар асаах" + "Үгүй, баярлалаа" + "Тэжээл хэмнэгч онцлогийн хуваарийг асаасан" + "Батерей %d%%-с бага болсон үед Тэжээл хэмнэгч онцлог автоматаар асна." + "Тохиргоо" + "Ойлголоо" diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index 46be6952168b489cc334cf6376132a070e2fac64..13030ff7490f1c501734ecc8a234f94df6e05ced 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -33,7 +33,6 @@ "सुरु असलेले" "सूचना" "बॅटरी कमी आहे" - "बॅटरी कमी आहे. बॅटरी सेव्हर चालू करा" "%s शिल्लक" "%s बाकी, तुमच्या वापरावर आधारित सुमारे %s शिल्लक" "%s बाकी, सुमारे %s शिल्लक" @@ -73,11 +72,12 @@ "स्क्रीनशॉट" "स्क्रीनशॉट जतन करत आहे…" "स्क्रीनशॉट जतन करत आहे…" - "स्क्रीनशॉट सेव्ह केला जात आहे" "स्क्रीनशॉट सेव्ह केला" "तुमचा स्क्रीनशॉट पाहण्यासाठी टॅप करा" - "स्क्रीनशॉट कॅप्चर करता आला नाही" - "स्क्रीनशॉट सेव्ह करताना समस्या आली" + + + + "मर्यादित स्टोरेज जागेमुळे स्क्रीनशॉट सेव्ह करू शकत नाही" "अ‍ॅप किंवा आपल्या संस्थेद्वारे स्क्रीनशॉट घेण्याची अनुमती नाही" "USB फाईल स्थानांतरण पर्याय" @@ -273,8 +273,7 @@ "मिष्ठान्न प्रकरण" "स्क्रीन सेव्हर" "इथरनेट" - - + "अधिक पर्यायांसाठी आयकनला स्पर्श करा आणि धरून ठेवा" "व्यत्यय आणू नका" "केवळ प्राधान्य" "केवळ अलार्म" @@ -349,7 +348,8 @@ "संध्याकाळी चालू असते" "सूर्योदयापर्यंत" "%s वाजता चालू" - "%s पर्यंत" + + "NFC" "NFC अक्षम केले आहे" "NFC सक्षम केले आहे" @@ -433,7 +433,10 @@ "%s आपल्‍या स्‍क्रीनवर प्रदर्शित होणारी प्रत्‍येक गोष्‍ट कॅप्‍चर करणे प्रारंभ करेल." "पुन्हा दर्शवू नका" "सर्व साफ करा" - "व्यत्यय आणू नका सूचना लपवत आहे" + + + + "आता सुरू करा" "सूचना नाहीत" "प्रोफाईलचे परीक्षण केले जाऊ शकते" @@ -539,7 +542,8 @@ "%1$s. कंपन सेट करण्यासाठी टॅप करा." "%1$s. नि:शब्द करण्यासाठी टॅप करा." "%s व्हॉल्यूम नियंत्रण" - "कॉल अन्नि सूचना रिंग करा" + + "मीडिया आउटपुट" "फोन कॉल आउटपुट" "कोणतीही डिव्हाइस सापडली नाहीत" @@ -626,6 +630,8 @@ "%1$s %2$s" "सूचना नियंत्रणे" "सूचना स्नूझ पर्याय" + + "पूर्ववत करा" "%1$s साठी स्नूझ करा" @@ -689,6 +695,8 @@ "बॅटरी" "घड्याळ" "हेडसेट" + + "हेडफोन कनेक्ट केले" "हेडसेट कनेक्ट केला" "डेटा बचतकर्ता" @@ -723,11 +731,9 @@ "उजवा कीकोड" "डावे आयकन" "उजवे आयकन" - - + "टाइल जोडण्यासाठी धरून ठेवा आणि ड्रॅग करा" "काढण्यासाठी येथे ड्रॅग करा" - - + "तुम्हाला किमान ६ टाइलची गरज आहे" "संपादित करा" "वेळ" @@ -814,6 +820,8 @@ "स्क्रीनशॉट" "सर्वसाधारण संदेश" "संचय" + + "इन्सटंट अ‍ॅप्स" "इन्सटंट अॅप्सना स्थापनेची आवश्यकता नसते." "अॅप माहिती" @@ -831,12 +839,9 @@ "पुनर्स्थित करा" "अॅप्‍स बॅकग्राउंडमध्‍ये चालू आहेत" "बॅटरी आणि डेटा वापराच्‍या तपशीलांसाठी टॅप करा" - - - - - - + "मोबाइल डेटा बंद करायचा?" + "तुम्हाला %s मधून डेटा किंवा इंटरनेटचा अॅक्सेस नसेल. इंटरनेट फक्त वाय-फाय मार्फत उपलब्ध असेल." + "तुमचा वाहक" "अ‍ॅप परवानगी विनंती अस्पष्‍ट करत असल्‍याने, सेटिंग्ज तुमचा प्रतिसाद पडताळू शकत नाहीत." "%1$s ला %2$s चे तुकडे दाखवण्याची अनुमती द्यायची का?" "- ते %1$s ची माहिती वाचू शकते" @@ -844,4 +849,18 @@ "%1$s ला कुठल्याही अ‍ॅपमधील तुकडे दाखवण्याची अनुमती द्या" "अनुमती द्या" "नकार द्या" + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index 319d71db87cafbd960e8b6c87814ad989015bb74..2b5c04930e5e21f1595024c0403a29bbaedaa02f 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -33,7 +33,6 @@ "Sedang berlangsung" "Pemberitahuan" "Bateri lemah" - "Bateri lemah. Hidupkan Penjimat Bateri" "%s yang tinggal" "Tinggal %s, kira-kira %s lagi berdasarkan penggunaan anda" "Tinggal %s, kira-kira %s lagi" @@ -73,11 +72,12 @@ "Tangkapan skrin" "Menyimpan tangkapan skrin..." "Menyimpan tangkapan skrin..." - "Tangkapan skrin sedang disimpan" "Tangkapan skrin disimpan" "Ketik untuk melihat tangkapan skrin anda" - "Tidak dapat menangkap tangkapan skrin" - "Masalah berlaku semasa menyimpan tangkapan skrin" + + + + "Tidak dapat menyimpan tangkapan skrin kerana ruang storan terhad" "Pengambilan tangkapan skrin tidak dibenarkan oleh apl atau organisasi anda" "Pilihan pemindahan fail USB" @@ -273,8 +273,7 @@ "Bekas Pencuci Mulut" "Penyelamat skrin" "Ethernet" - - + "Sentuh & tahan ikon untuk mendapatkan pilihan lanjut" "Jangan ganggu" "Keutamaan sahaja" "Penggera sahaja" @@ -349,7 +348,8 @@ "Dihidupkan pd senja" "Hingga matahari terbit" "Dihidupkan pada %s" - "Hingga %s" + + "NFC" "NFC dilumpuhkan" "NFC didayakan" @@ -433,7 +433,9 @@ "%s akan mula mengabadikan semua yang dipaparkan pada skrin anda.." "Jangan tunjukkan lagi" "Kosongkan semua" - "Jangan Ganggu menyembunyikan pemberitahuan" + + + "Jangan Ganggu menyembunyikan pemberitahuan" "Mulakan sekarang" "Tiada pemberitahuan" "Profil mungkin dipantau" @@ -539,7 +541,8 @@ "%1$s. Ketik untuk menetapkan pada getar." "%1$s. Ketik untuk meredam." "%s kawalan kelantangan" - "Panggilan dan pemberitahuan akan berdering" + + "Output media" "Output panggilan telefon" "Tiada peranti ditemui" @@ -626,6 +629,8 @@ "%1$s %2$s" "kawalan pemberitahuan" "pilihan tunda pemberitahuan" + + "BUAT ASAL" "Ditunda selama %1$s" @@ -689,6 +694,8 @@ "Bateri" "Jam" "Set Kepala" + + "Fon kepala disambungkan" "Set kepala disambungkan" "Penjimat Data" @@ -812,6 +819,7 @@ "Tangkapan skrin" "Mesej Am" "Storan" + "Pembayang" "Apl Segera" "Apl segera tidak memerlukan pemasangan." "Maklumat apl" @@ -839,4 +847,11 @@ "Benarkan %1$s menunjukkan hirisan daripada mana-mana apl" "Benarkan" "Tolak" + "Ketik untuk menjadualkan Penjimat Bateri" + "Hidupkan secara automatik apabila kuasa bateri adalah pada %d%%" + "Tidak perlu" + "Jadual Penjimat Bateri dihidupkan" + "Penjimat Bateri akan dihidupkan secara automatik setelah kuasa bateri kurang daripada %d%%." + "Tetapan" + "OK" diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index aca84898b9840905adc85f38dad910ed12eb0568..6080a99a75347ea8f4df7f0993e180846dd613a6 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -33,7 +33,6 @@ "လက်ရှိအသုံးပြုမှု" "အကြောင်းကြားချက်များ။" "ဘက်ထရီ အားနည်းနေ" - "ဘက်ထရီ အားနည်းနေပါပြီ။ ဘက်ထရီအားထိန်းကို ဖွင့်ပါ" "%s ကျန်ရှိနေ" "%s ကျန်သည်၊ သင့်အသုံးပြုမှုအရ %s ခန့် ကျန်ပါသည်" "%s ကျန်သည်၊ %s ခန့် ကျန်ပါသည်" @@ -73,11 +72,10 @@ "ဖန်သားပြင်ဓာတ်ပုံ" "ဖန်သားပြင်ဓါတ်ပုံသိမ်းစဉ်.." "ဖန်သားပြင်ဓါတ်ပုံရိုက်ခြင်းအား သိမ်းဆည်းပါမည်" - "ဖန်သားပြင်ဓာတ်ပုံကို သိမ်းနေသည်" "ဖန်သားပြင်ဓာတ်ပုံကို သိမ်းပြီးပါပြီ" "ဖန်သားပြင်ဓာတ်ပုံကို ကြည့်ရန် တို့ပါ" - "ဖန်သားပြင်ဓာတ်ပုံ ရိုက်၍မရပါ" - "ဖန်သားပြင်ဓာတ်ပုံကို သိမ်းရာတွင် ပြဿနာရှိနေသည်" + "မျက်နှာပြင်ပုံကို သိမ်း၍မရပါ" + "မျက်နှာပြင်ပုံကို ထပ်ရိုက်ကြည့်ပါ" "သိုလှောင်ခန်းနေရာ အကန့်အသတ်ရှိသောကြောင့် ဖန်သားပြင်ဓာတ်ပုံကို သိမ်းဆည်း၍မရပါ" "ဖန်သားပြင်ဓာတ်ပုံရိုက်ကူးခြင်းကို ဤအက်ပ် သို့မဟုတ် သင်၏အဖွဲ့အစည်းက ခွင့်မပြုပါ" "USB ဖိုင်ပြောင်း ရွေးမှုများ" @@ -348,7 +346,7 @@ "နေဝင်ချိန်၌ ဖွင့်ရန်" "နေထွက်ချိန် အထိ" "%s တွင် ဖွင့်ရန်" - "%s အထိ" + "%s အထိ" "NFC" "NFC ကို ပိတ်ထားသည်" "NFC ကို ဖွင့်ထားသည်" @@ -432,7 +430,8 @@ "%s က သင်၏ မျက်နှာပြင် ပေါ်မှာ ပြသထားသည့် အရာတိုင်းကို စတင် ဖမ်းယူမည်။" "နောက်ထပ် မပြပါနှင့်" "အားလုံး ဖယ်ရှားရန်" - "\'မနှောင့်ယှက်ရ\' က အကြောင်းကြားချက်များကို ဖျောက်ထားသည်" + "အကြောင်းကြားချက်များကို စီမံရန်" + "\'မနှောင့်ယှက်ရ\' က အကြောင်းကြားချက်များကို ဖျောက်ထားသည်" "ယခု စတင်ပါ" "အကြောင်းကြားချက်များ မရှိ" "ပရိုဖိုင်ကို စောင့်ကြပ်နိုင်သည်" @@ -538,7 +537,8 @@ "%1$s။ တုန်ခါခြင်းသို့ သတ်မှတ်ရန်တို့ပါ။" "%1$s။ အသံတိတ်ရန် တို့ပါ။" "%s အသံအတိုးအလျှော့ ခလုတ်များ" - "ခေါ်ဆိုမှုများနှင့် အကြောင်းကြားချက်များ အသံမြည်ပါမည်" + + "မီဒီယာ အထွက်" "ဖုန်းလိုင်း အထွက်" "မည်သည့် စက်ပစ္စည်းမျှ မတွေ့ပါ" @@ -625,6 +625,7 @@ "%1$s %2$s" "အကြောင်းကြားချက် ထိန်းချုပ်မှုများ" "အကြောင်းကြားချက်များကို ဆိုင်းငံ့ရန် ရွေးချယ်စရာများ" + "ဆိုင်းထားရန်" "တစ်ဆင့် နောက်ပြန်ပြန်ပါ" "%1$s ဆိုင်းငံ့ရန်" @@ -688,6 +689,8 @@ "ဘက်ထရီ" "နာရီ" "မိုက်ခွက်ပါနားကြပ်" + + "နားကြပ်တပ်ဆင်ပြီးပါပြီ" "မိုက်ခွက်ပါနားကြပ်တပ်ဆင်ပြီးပါပြီ" "ဒေတာချွေတာမှု" @@ -811,6 +814,7 @@ "မျက်နှာပြင်ဓာတ်ပုံများ" "အထွေထွေ မက်ဆေ့ဂျ်များ" "သိုလှောင်မှုများ" + "အရိပ်အမြွက်များ" "Instant Apps" "ချက်ခြင်းသုံးအက်ပ်များကို ထည့်သွင်းစရာမလိုပါ။" "အက်ပ်အချက်အလက်" @@ -838,4 +842,11 @@ "မည်သည့်အက်ပ်မဆိုမှ အချပ်များ ပြသရန်အတွက် %1$s ကို ခွင့်ပြုရန်" "ခွင့်ပြုရန်" "ငြင်းပယ်ရန်" + "\'ဘက်ထရီ အားထိန်း\' အချိန်သတ်မှတ်ရန် အတွက် တို့ပါ" + "ဘက်ထရီ %d%% ရောက်သည့်အခါ အလိုအလျောက် ဖွင့်ပါ" + "မလိုပါ" + "\'ဘက်ထရီ အားထိန်း\' အစီအစဉ် ဖွင့်ထားသည်" + "ဘက်ထရီ %d%% အောက် နည်းသွားသည်နှင့် \'ဘက်ထရီ အားထိန်း\' အလိုအလျောက် ဖွင့်ပါမည်။" + "ဆက်တင်များ" + "ရပါပြီ" diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index 131d668e83cff3d239b24d764e57c59ab6dec1af..7654b06d1c687a18f8a03cde1609f9ae25696602 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -33,7 +33,6 @@ "Aktiviteter" "Varsler" "Batterikapasiteten er lav" - "Du har lite batteri. Slå på batterisparing" "%s gjenstår" "%s gjenstår, omtrent %s igjen basert på bruken din" "%s gjenstår, omtrent %s igjen" @@ -73,11 +72,12 @@ "Skjermdump" "Lagrer skjermdumpen …" "Lagrer skjermdumpen …" - "Skjermdumpen lagres" "Skjermdumpen er lagret" "Trykk for å se skjermdumpen" - "Kan ikke lagre skjermdumpen" - "Det oppsto et problem under lagring av skjermdumpen" + + + + "Kan ikke lagre skjermdumpen på grunn av begrenset lagringsplass" "Appen eller organisasjonen din tillater ikke at du tar skjermdumper" "Altern. for USB-filoverføring" @@ -273,8 +273,7 @@ "Dessertmonter" "Skjermsparer" "Ethernet" - - + "Trykk og hold på ikonene for å se flere alternativer" "«Ikke forstyrr»" "Bare prioritet" "Bare alarmer" @@ -349,7 +348,8 @@ "På ved solnedgang" "Til soloppgang" "På kl. %s" - "Til %s" + + "NFC" "NFC er slått av" "NFC er slått på" @@ -433,7 +433,9 @@ "%s tar opp alt som vies på skjermen din." "Ikke vis igjen" "Fjern alt" - "«Ikke forstyrr» skjuler varsler" + + + "«Ikke forstyrr» skjuler varsler" "Start nå" "Ingen varsler" "Profilen kan overvåkes" @@ -539,7 +541,8 @@ "%1$s. Trykk for å angi vibrasjon." "%1$s. Trykk for å slå av lyden." "%s volumkontroller" - "Anrop og varsler ringer" + + "Medieutdata" "Utgang for telefonsamtaler" "Fant ingen enheter" @@ -626,6 +629,8 @@ "%1$s %2$s" "varselinnstillinger" "slumrealternativer for varsler" + + "ANGRE" "Slumrer i %1$s" @@ -689,6 +694,8 @@ "Batteri" "Klokke" "Hodetelefoner" + + "Øretelefoner er tilkoblet" "Hodetelefoner er tilkoblet" "Datasparing" @@ -812,6 +819,7 @@ "Skjermdumper" "Generelle meldinger" "Lagring" + "Hint" "Instant Apps" "Du trenger ikke å installere instant-apper." "Info om appen" @@ -839,4 +847,11 @@ "Tillat at %1$s viser utsnitt fra alle apper" "Tillat" "Avvis" + "Trykk for å planlegge batterisparing" + "Slå på automatisk når batteriet er på %d %%" + "Nei takk" + "Tidsplan for batterisparing er slått på" + "Batterisparing slås på automatisk når batteriet er lavere enn %d %%." + "Innstillinger" + "Greit" diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index cc5eb4bbc321d85076262b3b1b9a58fbc4b08b4c..e30d8c39e3b819950fc302e01c1d3083e6c08ae6 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -33,7 +33,6 @@ "चलिरहेको" "सूचनाहरू" "ब्याट्री कम छ" - "ब्याट्रीको स्तर न्यून छ। ब्याट्री सेभर सक्रिय गर्नुहोस्" "%s बाँकी" "%s बाँकी, तपाईंको प्रयोगका आधारमा करिब %s बाँकी छ" "%s बाँकी, करिब %s बाँकी छ" @@ -73,11 +72,10 @@ "स्क्रिनसट" "स्क्रिनसट बचत गर्दै…" "स्क्रिनसट बचत गर्दै…" - "स्क्रिनसट सुरक्षित गरिँदै छ" "स्क्रिनसट सुरक्षित गरियो" "आफ्नो स्क्रिनसट हेर्न ट्याप गर्नुहोस्" - "स्क्रिनसट खिच्न सकिएन" - "स्क्रिनसट सुरक्षित गर्ने क्रममा समस्या आइपर्‍यो" + "स्क्रिनसट सुरक्षित गर्न सकिएन" + "स्क्रिनसट फेरि लिएर हेर्नुहोस्" "भण्डारण ठाउँ सीमित भएका कारण स्क्रिनसट सुरक्षित गर्न सकिएन" "उक्त अनुप्रयोग वा तपाईंको संगठनले स्क्रिनसटहरू लिन दिँदैन" "USB फाइल सार्ने विकल्पहरू" @@ -273,8 +271,7 @@ "Dessert Case" "स्क्रिन सेभर" "Ethernet" - - + "थप विकल्पहरूका लागि आइकनहरूमा छोइराख्नुहोस्" "बाधा नपुर्याउँनुहोस्" "प्राथमिकता मात्र" "अलार्महरू मात्र" @@ -349,7 +346,7 @@ "सूर्यास्तमा सक्रिय" "सूर्योदयसम्म" "%s मा सक्रिय" - "%s सम्म" + "%s सम्म" "NFC" "NFC लाई असक्षम पारिएको छ" "NFC लाई सक्षम पारिएको छ" @@ -433,7 +430,9 @@ "%s ले आफ्नो स्क्रीनमा प्रदर्शित हुने सबै खिच्न शुरू गर्नेछ।" "फेरि नदेखाउनुहोस्" "सबै हटाउनुहोस्" - "बाधा नपुर्‍याउनुहोस् मोडले सूचनाहरू लुकाइरहेको छ" + "सूचनाहरू व्यवस्थापन गर्नुहोस्" + + "अहिले सुरु गर्नुहोस्" "कुनै सूचनाहरू छैनन्" "प्रोफाइल अनुगमन हुन सक्छ" @@ -539,7 +538,8 @@ "%1$s। कम्पन मोडमा सेट गर्न ट्याप गर्नुहोस्।" "%1$s। म्यूट गर्न ट्याप गर्नुहोस्।" "%s भोल्युमका नियन्त्रणहरू" - "कल तथा सूचनाहरू आउँदा घन्टी बज्ने छ" + + "मिडियाको आउटपुट" "फोन कलको आउटपुट" "कुनै पनि यन्त्र भेटिएन" @@ -626,6 +626,7 @@ "%1$s %2$s" "सूचना सम्बन्धी नियन्त्रणहरू" "सूचना स्नुज गर्ने विकल्पहरू" + "स्नुज गर्नुहोस्" "अनडू गर्नुहोस्" "%1$s का लागि स्नुज गरियो" @@ -689,6 +690,8 @@ "ब्याट्री" "घडी" "हेडसेट" + + "हेडफोनहरू जडान गरियो" "हेडसेट जडान गरियो" "डेटा सेभर" @@ -723,11 +726,9 @@ "दायाँतिरको किकोड" "बायाँतिर देखाउने आइकन" "दायाँतिरको आइकन" - - + "टाइलहरू थप्न होल्ड गरी ड्र्याग गर्नुहोस्" "हटाउनका लागि यहाँ तान्नुहोस्" - - + "तपाईंलाई कम्तीमा ६ वटा टाइलहरू चाहिन्छ" "सम्पादन गर्नुहोस्" "समय" @@ -814,6 +815,8 @@ "स्क्रिनशटहरू" "सामान्य सन्देशहरू" "भण्डारण" + + "तात्कालिक अनुप्रयोगहरू" "तात्कालिक अनुप्रयोगहरूलाई स्थापना गर्नु पर्दैन|" "अनुप्रयोगका बारे जानकारी" @@ -831,12 +834,9 @@ "प्रतिस्थापन गर्नुहोस्" "पृष्ठभूमिमा चल्ने अनुप्रयोगहरू" "ब्याट्री र डेटाका प्रयोग सम्बन्धी विवरणहरूका लागि ट्याप गर्नुहोस्" - - - - - - + "मोबाइल डेटा निष्क्रिय पार्ने हो?" + "तपाईंको %s मार्फत डेटा वा इन्टरनेटमाथि पहुँच हुने छैन। Wi-Fi मार्फत मात्र इन्टरनेट उपलब्ध हुने छ।" + "तपाईंको सेवा प्रदायक" "कुनै अनुप्रयोगको कारणले अनुमतिसम्बन्धी अनुरोध बुझ्न गाह्रो भइरहेकोले सेटिङहरूले तपाईंको प्रतिक्रिया प्रमाणित गर्न सक्दैनन्।" "%1$s लाई %2$s का स्लाइसहरू देखाउन अनुमति दिने हो?" "- यसले %1$s बाट जानकारी पढ्न सक्छ" @@ -844,4 +844,18 @@ "अन्य अनुप्रयोगबाट %1$s मा स्लाइसहरू देखाउन अनुमति दिनुहोस्" "अनुमति दिनुहोस्" "अस्वीकार गर्नु…" + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index 6cbdfae518b9259080cb7c9c24be7dec442cea7b..6d74cc6198311bd1696c3311041f91fd741d166d 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -33,7 +33,6 @@ "Actief" "Meldingen" "Batterij is bijna leeg" - "De batterij is bijna leeg. Schakel Batterijbesparing in." "%s resterend" "%s resterend, nog ongeveer %s over op basis van je gebruik" "%s resterend, nog ongeveer %s over" @@ -73,11 +72,12 @@ "Screenshot" "Screenshot opslaan..." "Screenshot opslaan..." - "Screenshot wordt opgeslagen" "Screenshot opgeslagen" "Tik om je screenshot te bekijken" - "Kan geen screenshot maken" - "Er is een probleem opgetreden bij het opslaan van het screenshot" + + + + "Kan screenshot niet opslaan vanwege beperkte opslagruimte" "Het maken van screenshots wordt niet toegestaan door de app of je organisatie" "Opties voor USB-bestandsoverdracht" @@ -348,7 +348,8 @@ "Aan bij zonsondergang" "Tot zonsopgang" "Aan om %s" - "Tot %s" + + "NFC" "NFC is uitgeschakeld" "NFC is ingeschakeld" @@ -432,7 +433,9 @@ "%s gaat alles vastleggen dat wordt weergegeven op je scherm." "Niet opnieuw weergeven" "Alles wissen" - "\'Niet storen\' verbergt meldingen" + + + "\'Niet storen\' verbergt meldingen" "Nu starten" "Geen meldingen" "Profiel kan worden gecontroleerd" @@ -538,7 +541,8 @@ "%1$s. Tik om in te stellen op trillen." "%1$s. Tik om te dempen." "%s-volumeknoppen" - "Beltoon gaat over bij oproepen en meldingen" + + "Media-uitvoer" "Uitvoer van telefoongesprek" "Geen apparaten gevonden" @@ -625,6 +629,8 @@ "%1$s %2$s" "beheeropties voor meldingen" "snooze-opties voor meldingen" + + "ONGEDAAN MAKEN" "Snoozefunctie %1$s actief" @@ -688,6 +694,8 @@ "Batterij" "Klok" "Headset" + + "Hoofdtelefoon aangesloten" "Headset aangesloten" "Databesparing" @@ -811,6 +819,7 @@ "Screenshots" "Algemene berichten" "Opslag" + "Hints" "Instant-apps" "Instant-apps hoeven niet te worden geïnstalleerd." "App-info" @@ -838,4 +847,11 @@ "%1$s toestaan om segmenten van apps weer te geven" "Toestaan" "Weigeren" + "Tikken om Batterijbesparing in te schakelen" + "Automatisch inschakelen wanneer de batterijstatus %d%% is" + "Nee" + "Batterijbesparing is ingeschakeld" + "Batterijbesparing wordt automatisch ingeschakeld wanneer de batterijstatus lager is dan %d%%." + "Instellingen" + "OK" diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index a1e41f32345e553d9b549994268b3271b21253f9..e25f0b1d6415797882db726743afa6b734c98f58 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -34,17 +34,12 @@ "ବିଜ୍ଞପ୍ତି" "ବ୍ୟାଟେରୀ କମ୍‍ ଅଛି" "%s ବାକି ଅଛି" - - - - + "%s ବଳକା ଅଛି, ଆପଣଙ୍କ ବ୍ୟବହାର ଅନୁସାରେ ବ୍ୟାଟେରୀ ପାଖାପାଖି %s ସମୟ ଚାଲିବ" + "%s ବଳକା ଅଛି, %s ସମୟ ଚାଲିପାରେ" "%s ବାକି ଅଛି। ବ୍ୟାଟେରୀ ସେଭର୍‌ ଅନ୍‍ ଅଛି।" - - - - - - + "USB ଦ୍ଵାରା ଚାର୍ଜ କରିହେବନାହିଁ। ଆପଣଙ୍କ ଡିଭାଇସ୍ ପାଇଁ ଥିବା ଚାର୍ଜର୍‌କୁ ବ୍ୟବହାର କରନ୍ତୁ।" + "USB ଦ୍ଵାରା ଚାର୍ଜ କରିହେବନାହିଁ" + "ଆପଣଙ୍କ ଡିଭାଇସ୍ ପାଇଁ ଥିବା ଚାର୍ଜର୍‌କୁ ବ୍ୟବହାର କରନ୍ତୁ" "ସେଟିଙ୍ଗ" "ବ୍ୟାଟେରୀ ସେଭର୍‌ ଅନ୍ କରିବେ?" "ଅନ୍‌ କରନ୍ତୁ" @@ -74,20 +69,16 @@ "ସମ୍ପ୍ରତି ସାଇନ୍‍-ଇନ୍‍ କରିଥିବା ୟୁଜର୍‍ ଜଣକ ଏହି ଡିଭାଇସରେ USB ଡିବଗିଙ୍ଗ ଅନ୍‍ କରିପାରିବେ ନାହିଁ। ଏହି ବୈଶିଷ୍ଟ୍ୟ ବ୍ୟବହାର କରିବାକୁ, ପ୍ରାଥମିକ ୟୁଜର୍‍ରେ ସାଇନ୍‍-ଇନ୍‍ କରନ୍ତୁ।" "ସ୍କ୍ରୀନ ଭରିବା ପାଇଁ ଜୁମ୍ କରନ୍ତୁ" "ସ୍କ୍ରୀନ୍‌କୁ ଭରିବା ପାଇଁ ଟାଣନ୍ତୁ" - - + "ସ୍କ୍ରୀନଶଟ୍‌" "ସ୍କ୍ରୀନଶଟ୍‍ ସେଭ୍‍ କରାଯାଉଛି…" "ସ୍କ୍ରୀନଶଟ୍‍ ସେଭ୍‍ କରାଯାଉଛି…" - - - - + "ସ୍କ୍ରୀନଶଟ୍ ସେଭ୍ ହୋଇଛି" + "ସ୍କ୍ରୀନଶଟ୍‍ ଦେଖିବା ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ" - - + "ସୀମିତ ଷ୍ଟୋରେଜ୍‍ ସ୍ପେସ୍‍ ହେତୁ ସ୍କ୍ରୀନଶଟ୍‍ ସେଭ୍‍ ହୋଇପାରିବ ନାହିଁ" "ଆପ୍‍ କିମ୍ବା ସଂସ୍ଥା ଦ୍ୱାରା ସ୍କ୍ରୀନଶଟ୍‍ ନେବାକୁ ଅନୁମତି ଦିଆଯାଇ ନାହିଁ" "USB ଫାଇଲ୍‌ ଟ୍ରାନ୍ସଫର୍‌ର ବିକଳ୍ପ" "ଏକ ମିଡିଆ ପ୍ଲେୟାର୍‍ (MTP) ଭାବରେ ଭର୍ତ୍ତି କରନ୍ତୁ" @@ -97,8 +88,7 @@ "ହୋମ୍" "ମେନୁ" "ଆକ୍ସେସିବିଲିଟୀ" - - + "ସ୍କ୍ରୀନ୍‌କୁ ଘୁରାନ୍ତୁ" "ସଂକ୍ଷିପ୍ତ ବିବରଣୀ" "ସର୍ଚ୍ଚ କରନ୍ତୁ" "କ୍ୟାମେରା" @@ -113,14 +103,10 @@ "କ୍ୟାମେରା ଖୋଲନ୍ତୁ" "ନୂଆ ଟାସ୍କ ଲେଆଉଟ୍‍ ଚୟନ କରନ୍ତୁ" "କ୍ୟାନ୍ସଲ୍‍ କରନ୍ତୁ" - - - - - - - - + "ଆଙ୍ଗୁଠି ଚିହ୍ନ ସେନସର୍‌କୁ ଛୁଅଁନ୍ତୁ" + "ଆଙ୍ଗୁଠି ଚିହ୍ନ ଆଇକନ୍" + "ଆପ୍ଲିକେଶନ୍‌ ଆଇକନ୍‌" + "ହେଲ୍ପ ମେସେଜ୍ କ୍ଷେତ୍ର" "କମ୍ପାଟିବିଲିଟୀ ଜୁମ୍ ବଟନ୍।" "ଜୁମ୍ କରି ସ୍କ୍ରୀନ୍‌କୁ ଛୋଟରୁ ବଡ଼ କରନ୍ତୁ।" "ବ୍ଲୁ-ଟୁଥ୍‌ ସଂଯୋଗ କରାଯାଇଛି।" @@ -161,42 +147,28 @@ "ଅଫ୍।" "ସଂଯୁକ୍ତ।" "ସଂଯୋଗ କରୁଛି।" - - - - - - - - - - - - - - - - - - - - - - - - + "GPRS" + "HSPA" + "3G" + "3.5G" + "4G+" + "4G" + "4G+" + "LTE" + "LTE+" + "CDMA" + "ରୋମିଙ୍ଗ" + "EDGE" "ୱାଇ-ଫାଇ" "କୌଣସି SIM ନାହିଁ।" "ମୋବାଇଲ୍‌ ଡାଟା" "ମୋବାଇଲ୍‌ ଡାଟା ଅନ୍‍" - - + "ମୋବାଇଲ୍‌ ଡାଟା ଅଫ୍ ଅଛି" "ବ୍ଲୁ-ଟୁଥ୍‍ ଟିଥରିଙ୍ଗ" "ଏରୋପ୍ଲେନ୍‍ ମୋଡ୍‌।" "VPN ଅନ୍‍।" "କୌଣସି SIM କାର୍ଡ ନାହିଁ।" - - + "କେରିଅର୍‍ ନେଟ୍‌ୱର୍କ ବଦଳୁଛି" "ବ୍ୟାଟେରୀ ବିବରଣୀ ଖୋଲନ୍ତୁ" "ବ୍ୟାଟେରୀ %d ଶତକଡ଼ା ଅଛି।" "ବ୍ୟାଟେରୀ ଚାର୍ଜ ହେଉଛି, %d ଶତକଡ଼ା।" @@ -235,8 +207,7 @@ "ଏୟାର୍‌ପ୍ଲେନ୍‌ ମୋଡ୍‌ ଅନ୍ ଅଛି।" "ଏୟାର୍‌ପ୍ଲେନ୍‌ ମୋଡ୍‌କୁ ବନ୍ଦ କରାଯାଇଛି।" "ଏୟାର୍‌ପ୍ଲେନ୍‌ ମୋଡ୍‌କୁ ଚାଲୁ କରାଯାଇଛି।" - - + "\"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ଅନ୍ ଅଛି।" "\"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ଅନ୍ ଅଛି, ସମ୍ପୂର୍ଣ୍ଣ ନୀରବ।" "\"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ଅନ୍ ଅଛି, କେବଳ ଆଲାର୍ମ।" "ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ।" @@ -302,8 +273,7 @@ "ଡେଜର୍ଟ କେସ୍‌" "ସ୍କ୍ରୀନ୍‌ ସେଭର୍‌" "ଇଥରନେଟ୍‌" - - + "ଅଧିକ ବିକଳ୍ପ ପାଇଁ ଆଇକନ୍‌କୁ ସ୍ପର୍ଶ କରି ଧରିରଖନ୍ତୁ" "\"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\"" "କେବଳ ପ୍ରାଥମିକତା" "କେବଳ ଆଲାର୍ମ" @@ -312,16 +282,11 @@ "ବ୍ଲୁ-ଟୁଥ୍‌ (%dଟି ଡିଭାଇସ୍‌)" "ବ୍ଲୁ-ଟୁଥ୍‌ ଅଫ୍" "ପେୟାର୍‍ ହୋଇଥିବା କୌଣସି ଡିଭାଇସ୍ ଉପଲବ୍ଧ ନାହିଁ" - - - - - - - - - - + "%s ବ୍ୟାଟେରୀ" + "ଅଡିଓ" + "ହେଡସେଟ୍‍" + "ଇନପୁଟ୍" + "ଅନ୍ ହେଉଛି…" "ଉଜ୍ଜ୍ୱଳତା" "ସ୍ୱତଃ-ଘୂର୍ଣ୍ଣନ" "ସ୍କ୍ରୀନ୍‍କୁ ଅଟୋ-ରୋଟେଟ୍‌ କରନ୍ତୁ" @@ -346,8 +311,7 @@ "ୱାଇ-ଫାଇ ଅଫ୍‍" "ୱାଇ-ଫାଇ ଅନ୍‍ ଅଛି" "କୌଣସି ୱାଇ-ଫାଇ ନେଟ୍‌ୱର୍କ ଉପଲବ୍ଧ ନାହିଁ" - - + "ଅନ୍ ହେଉଛି…" "କାଷ୍ଟ" "କାଷ୍ଟିଙ୍ଗ" "ନାମହୀନ ଡିଭାଇସ୍‍" @@ -364,11 +328,12 @@ "ସଂଯୋଗ କରୁଛି..." "ଟିଥରିଙ୍ଗ" "ହଟସ୍ପଟ୍‌" - - - - - + "ଅନ୍ ହେଉଛି…" + "ଡାଟା ସେଭର୍‌ ଅନ୍‌ ଅଛି" + + %d ଡିଭାଇସ୍‌ଗୁଡ଼ିକ + %d ଡିଭାଇସ୍ + "ବିଜ୍ଞପ୍ତି" "ଫ୍ଲାଶ୍‍ଲାଇଟ" "ମୋବାଇଲ୍‌ ଡାଟା" @@ -378,15 +343,11 @@ "%s ବ୍ୟବହାର କରାଯାଇଛି" "%s ସୀମା" "%s ଚେତାବନୀ" - - + "ୱର୍କ ପ୍ରୋଫାଇଲ୍‌" "ରାତି ଆଲୋକ" - - - - - - + "ସୂର୍ଯ୍ୟାସ୍ତ ବେଳେ ଅନ୍ ହେବ" + "ସୂର୍ଯ୍ୟୋଦୟ ପର୍ଯ୍ୟନ୍ତ" + "%sରେ ଅନ୍ ହେବ" "NFC" @@ -436,12 +397,9 @@ "ସମ୍ପୂର୍ଣ୍ଣ\nନୀରବ" "କେବଳ\nପ୍ରାଥମିକତା" "କେବଳ\nଆଲାର୍ମ" - - - - - - + "%2$s • ଚାର୍ଜ ହେଉଛି (ପୂର୍ଣ୍ଣ ହେବା ପାଇଁ %s ବଳକା ଅଛି)" + "%2$s • ଶୀଘ୍ର ଚାର୍ଜ ହେଉଛି (ପୂର୍ଣ୍ଣ ହେବା ପାଇଁ %s ବଳକା ଅଛି)" + "%2$s • ଧୀରେ ଚାର୍ଜ ହେଉଛି (ପୂର୍ଣ୍ଣ ହେବା ପାଇଁ %s ବଳକା ଅଛି)" "ୟୁଜର୍‍ ବଦଳାନ୍ତୁ" "ୟୁଜର୍‍ ବଦଳାନ୍ତୁ, ବର୍ତ୍ତମାନର ୟୁଜର୍‍ ହେଉଛନ୍ତି %s" "ବର୍ତ୍ତମାନର ୟୁଜର୍‍ ହେଉଛନ୍ତି %s" @@ -477,7 +435,7 @@ "ସମସ୍ତ ଖାଲି କରନ୍ତୁ" - + "ବର୍ତ୍ତମାନ ଆରମ୍ଭ କରନ୍ତୁ" "କୌଣସି ବିଜ୍ଞପ୍ତି ନାହିଁ" @@ -546,29 +504,21 @@ "ସେଟ୍ ଅପ୍ କରନ୍ତୁ" "%1$s. %2$s" "ବର୍ତ୍ତମାନ ଅଫ୍‍ କରନ୍ତୁ" - - + "ସାଉଣ୍ଡ ସେଟିଙ୍ଗ" "ବଢ଼ାନ୍ତୁ" "ଛୋଟ କରନ୍ତୁ" - - + "ଆଉଟପୁଟ୍ ଡିଭାଇସ୍‌କୁ ଯାଆନ୍ତୁ" "ସ୍କ୍ରିନକୁ ପିନ୍‌ କରାଯାଇଛି" "ଆପଣ ଅନପିନ୍‍ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ଏହା ଦେଖାଉଥିବ। ଅନପିନ୍‍ କରିବାକୁ ସ୍ପର୍ଶ କରି ଧରିରଖନ୍ତୁ ଓ ଦେଖନ୍ତୁ।" - - + "ଆପଣ ଅନପିନ୍‍ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ଏହା ଦେଖାଉଥିବ। ଅନପିନ୍‍ କରିବା ପାଇଁ ହୋମ୍ ଓ ବ୍ୟାକ୍ ବଟନ୍‌କୁ ଧରିରଖନ୍ତୁ।" "ଆପଣ ଅନପିନ୍‍ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ଏହା ଦେଖାଉଥିବ। ଅନପିନ୍‍ କରିବାକୁ ସ୍ପର୍ଶ କରନ୍ତୁ ଏବଂ ଓଭରଭ୍ୟୁକୁ ଧରିରଖନ୍ତୁ।" - - - - - - + "ଆପଣ ଅନପିନ୍‍ ନକରିବା ପର୍ଯ୍ୟନ୍ତ ଏହା ଦେଖାଉଥିବ। ଅନପିନ୍‍ କରିବା ପର୍ଯ୍ୟନ୍ତ ହୋମ୍‌କୁ ଦାବିଧରନ୍ତୁ।" + "ଏହି ସ୍କ୍ରୀନ୍‍‍କୁ ଅନପିନ୍‍ କରିବା ପାଇଁ, ବ୍ୟାକ୍ ଏବଂ ଓଭରଭ୍ୟୁ ବଟନ୍‍‌କୁ ଦାବିଧରନ୍ତୁ" + "ଏହି ସ୍କ୍ରୀନ୍‍‍କୁ ଅନପିନ୍‍ କରିବା ପାଇଁ, ବ୍ୟାକ୍ ଏବଂ ହୋମ୍ ବଟନ୍‍‌କୁ ଦାବିଧରନ୍ତୁ" "ବୁଝିଲି" "ନାହିଁ, ଥାଉ" - - - - + "ସ୍କ୍ରୀନ୍‌କୁ ପିନ୍‌ କରାଗଲା" + "ସ୍କ୍ରୀନ୍‌ ଅନପିନ୍ ହୋଇଗଲା" "%1$s ଲୁଚାନ୍ତୁ?" "ଆଗକୁ ଆପଣ ଯେତେବେଳେ ଏହି ସେଟିଙ୍ଗକୁ ଚାଲୁ କରିବେ, ଏହା ପୁଣି ଦେଖାଦେବ।" "ଲୁଚାନ୍ତୁ" @@ -591,9 +541,8 @@ "%1$s। ମ୍ୟୁଟ୍‍ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ। ଆକ୍ସେସିବିଲିଟୀ ସର୍ଭିସ୍‌ ମ୍ୟୁଟ୍‍ କରାଯାଇପାରେ।" "%1$s। ଭାଇବ୍ରେଟରେ ସେଟ୍‍ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ।" "%1$s। ମ୍ୟୁଟ୍‍ କରିବାକୁ ଟାପ୍‍ କରନ୍ତୁ।" - - - + "%s ଭଲ୍ୟୁମ୍ ନିୟନ୍ତ୍ରଣ" + "ମିଡିଆ ଆଉଟପୁଟ୍‍" "ଫୋନ୍‍ କଲ୍‍ ଆଉଟପୁଟ୍‍" @@ -649,45 +598,35 @@ "ଅଫ୍" "ପାୱାର୍‍ ବିଜ୍ଞପ୍ତି କଣ୍ଟ୍ରୋଲ୍‌ରେ, ଆପଣ ଏକ ଆପ୍‍ ବିଜ୍ଞପ୍ତି ପାଇଁ 0 ରୁ 5 ଗୁରୁତ୍ୱ ସ୍ତର ସେଟ୍‍ କରିହେବେ। \n\n""ସ୍ତର 5"" \n- ବିଜ୍ଞପ୍ତି ତାଲିକାର ଶୀର୍ଷରେ ଦେଖାନ୍ତୁ \n- ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନରେ ବାଧା ଦେବାକୁ ଅନୁମତି ଦିଅନ୍ତୁ \n- ସର୍ବଦା ପିକ୍‍ କରନ୍ତୁ \n\n""ସ୍ତର 4"" \n- ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନରେ ବାଧା ଦେବା ବ୍ଲକ୍‌ କରନ୍ତୁ \n- ସର୍ବଦା ପିକ୍‍ କରନ୍ତୁ \n\n""ସ୍ତର 3"" \n- ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନରେ ବାଧା ଦେବା ବ୍ଲକ୍‌ କରନ୍ତୁ \n- କଦାପି ପିକ୍‍ କରନ୍ତୁ ନାହିଁ \n\n""ସ୍ତର 2"" \n- ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନରେ ବାଧା ଦେବା ବ୍ଲକ୍‌ କରନ୍ତୁ \n- କଦାପି ପିକ୍‍ କରନ୍ତୁ ନାହିଁ \n- କଦାପି ସାଉଣ୍ଡ ଓ ଭାଇବ୍ରେଟ୍‍ କରନ୍ତୁ ନାହିଁ \n\n""ସ୍ତର 1"" \n- ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନରେ ବାଧା ଦେବା ବ୍ଲକ୍‌ କରନ୍ତୁ \n- କଦାପି ପିକ୍‍ କରନ୍ତୁ ନାହିଁ \n- କଦାପି ସାଉଣ୍ଡ ଓ ଭାଇବ୍ରେଟ୍‍ କରନ୍ତୁ ନାହିଁ \n- ଲକ୍‍ ସ୍କ୍ରୀନ୍‍ ଓ ଷ୍ଟାଟସ୍‍ ବାର୍‌ରୁ ଲୁଚାନ୍ତୁ \n- ବିଜ୍ଞପ୍ତି ତାଲିକାର ନିମ୍ନରେ ଦେଖାନ୍ତୁ \n\n""ସ୍ତର 0"" \n- ଆପରୁ ସମସ୍ତ ବିଜ୍ଞପ୍ତି ବ୍ଲକ୍‌ କରନ୍ତୁ" "ବିଜ୍ଞପ୍ତି" - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + "ଏହି ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ଆପଣ ଆଉ ଦେଖିବାକୁ ପାଇବେନାହିଁ।" + "ଏହି ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ମିନିମାଇଜ୍ ହୋଇଯିବ" + "ସାଧାରଣତଃ ଆପଣ ଏହି ବିଜ୍ଞପ୍ତିକୁ ଖାରଜ କରିଦିଅନ୍ତି। \n ସେଗୁଡ଼ିକୁ ଦେଖାଇବା ଜାରି ରଖିବେ?" + "ଏହି ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଦେଖାଇବା ଜାରି ରଖିବେ?" + "ବିଜ୍ଞପ୍ତିକୁ ଦେଖାଇବା ବନ୍ଦ କରନ୍ତୁ" + "ଦେଖାଇବା ଜାରି ରଖନ୍ତୁ" + "ଛୋଟ କରନ୍ତୁ" + "ଏହି ଆପ୍‌ରୁ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକୁ ଦେଖାଇବା ଜାରି ରଖିବେ?" + "ଏହି ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ବନ୍ଦ କରିହେବ ନାହିଁ" + "କ୍ୟାମେରା" + "ମାଇକ୍ରୋଫୋନ୍" + "ଆପଣଙ୍କ ସ୍କ୍ରୀନ୍ ଉପରେ ଥିବା ଅନ୍ୟ ଆପ୍‌ ଉପରେ ଦେଖାଦେବ" + + ଏହି ଆପ୍ %1$s%2$s + ଏହି ଆପ୍ %1$s + + + , %1$s%2$sକୁ ବ୍ୟବହାର କରୁଛି + , %1$sକୁ ବ୍ୟବହାର କରୁଛି + + "ସେଟିଙ୍ଗ" + "ଠିକ୍‌ ଅଛି" "%1$s ପାଇଁ ବିଜ୍ଞପ୍ତି ନିୟନ୍ତ୍ରଣ ଖୋଲା ଯାଇଛି" "%1$s ପାଇଁ ବିଜ୍ଞପ୍ତି ନିୟନ୍ତ୍ରଣ ବନ୍ଦ ହୋଇଛି" "ଏହି ଚ୍ୟାନେଲରୁ ବିଜ୍ଞପ୍ତିକୁ ଅନୁମତି ଦିଅନ୍ତୁ" "ଅଧିକ ସେଟିଙ୍ଗ" - - + "କଷ୍ଟମାଇଜ୍‌ କରନ୍ତୁ" "ହୋଇଗଲା" - - + "ପୂର୍ବସ୍ଥାନକୁ ଫେରାଇଆଣନ୍ତୁ" "%1$s %2$s" "ବିଜ୍ଞପ୍ତି ନିୟନ୍ତ୍ରଣ" "ବିଜ୍ଞପ୍ତି ସ୍ନୁଜ୍‍ ବିକଳ୍ପ" @@ -756,6 +695,8 @@ "ବ୍ୟାଟେରୀ" "ଘଣ୍ଟା" "ହେଡସେଟ୍‍" + + "ହେଡଫୋନ୍‍ ସଂଯୁକ୍ତ" "ହେଡସେଟ୍‍ ସଂଯୁକ୍ତ" "ଡାଟା ସେଭର୍‍" @@ -768,7 +709,12 @@ "ସମ୍ପୂର୍ଣ୍ଣ ବାମ ବଟନ୍‍ ପ୍ରକାର" "ସମ୍ପୂର୍ଣ୍ଣ ଡାହାଣ ବଟନ୍‍ ପ୍ରକାର" "(ଡିଫଲ୍ଟ)" - + + "କ୍ଲିପ୍‌ବୋର୍ଡ" + "କୀ\'କୋଡ୍‍" + "ଘୁରାଇବା ସୁନିଶ୍ଚିତ କରନ୍ତୁ, କୀ’ବୋର୍ଡର ଭାଷା ପରିବର୍ତ୍ତନ ସୁବିଧା" + "କିଛିନୁହେଁ" + "ସାମାନ୍ୟ" "କମ୍ପାକ୍ଟ" @@ -785,11 +731,9 @@ "ଡାହାଣ କୀ\'କୋଡ୍‍" "ବାମ ଆଇକନ୍‍" "ଡାହାଣ ଆଇକନ୍" - - + "ଟାଇଲ୍ ଯୋଡ଼ିବା ପାଇଁ ଦାବିଧରି ଟାଣନ୍ତୁ" "ବାହାର କରିବାକୁ ଏଠାକୁ ଡ୍ରାଗ୍‍ କରନ୍ତୁ" - - + "ଆପଣଙ୍କର ଅତିକମରେ 6ଟି ଟାଇଲ୍ ଆବଶ୍ୟକ" "ଏଡିଟ୍‌ କରନ୍ତୁ" "ସମୟ" @@ -833,8 +777,7 @@ "ଦ୍ରୁତ ସେଟିଙ୍ଗ ବନ୍ଦ କରନ୍ତୁ।" "ଆଲାର୍ମ ସେଟ୍‍।" "%s ଭାବରେ ସାଇନ୍‌ ଇନ୍‌ କରିଛନ୍ତି" - - + "କୌଣସି ଇଣ୍ଟରନେଟ୍‌ କନେକ୍ସନ୍ ନାହିଁ" "ବିବରଣୀ ଖୋଲନ୍ତୁ" "%s ସେଟିଙ୍ଗ ଖୋଲନ୍ତୁ।" "ସେଟିଙ୍ଗର କ୍ରମ ସଂଶୋଧନ କରନ୍ତୁ।" @@ -884,8 +827,7 @@ "ଆପ୍‍ ସୂଚନା" "ବ୍ରାଉଜର୍‌କୁ ଯାଆନ୍ତୁ" "ମୋବାଇଲ୍‌ ଡାଟା" - - + "%s%s" "ୱାଇ-ଫାଇ ଅଫ୍‍ ଅଛି" "ବ୍ଲୁ-ଟୁଥ୍‌ ଅଫ୍ ଅଛି" "\"ବିରକ୍ତ କରନ୍ତୁ ନାହିଁ\" ଅଫ୍‍ ଅଛି" @@ -897,25 +839,16 @@ "ବଦଳାନ୍ତୁ" "ବ୍ୟାକଗ୍ରାଉଣ୍ଡରେ ଆପ୍‍ ଚାଲୁଛି" "ବ୍ୟାଟେରୀ ଏବଂ ଡାଟା ବ୍ୟବହାର ଉପରେ ବିବରଣୀ ପାଇଁ ଟାପ୍‍ କରନ୍ତୁ" - - - - - - + "ମୋବାଇଲ୍‌ ଡାଟା ବନ୍ଦ କରିବେ?" + "%s ଦ୍ଵାରା ଆପଣଙ୍କର ଡାଟା କିମ୍ବା ଇଣ୍ଟରନେଟ୍‌କୁ ଆକ୍ସେସ୍ ନାହିଁ। ଇଣ୍ଟରନେଟ୍‌ କେବଳ ୱାଇ-ଫାଇ ମାଧ୍ୟମରେ ଉପଲବ୍ଧ ହେବ।" + "ଆପଣଙ୍କ କେରିଅର୍" "ଗୋଟିଏ ଆପ୍‍ ଏକ ଅନୁମତି ଅନୁରୋଧକୁ ଦେଖିବାରେ ବାଧା ଦେଉଥିବାରୁ, ସେଟିଙ୍ଗ ଆପଣଙ୍କ ଉତ୍ତରକୁ ଯାଞ୍ଚ କରିପାରିବ ନାହିଁ।" - - - - - - - - - - - - + "%2$s ସ୍ଲାଇସ୍‌କୁ ଦେଖାଇବା ପାଇଁ %1$sକୁ ଅନୁମତି ଦେବେ?" + "- ଏହା %1$sରୁ ସୂଚନାକୁ ପଢ଼ିପାରିବ" + "- ଏହା %1$s ଭିତରେ କାମ କରିପାରିବ" + "ଯେକୌଣସି ଆପ୍‌ରେ ସ୍ଲାଇସ୍‌କୁ ଦେଖାଇବା ପାଇଁ %1$sକୁ ଅନୁମତି ଦିଅନ୍ତୁ" + "ଅନୁମତି ଦିଅନ୍ତୁ" + "ଅସ୍ଵୀକାର କରନ୍ତୁ" diff --git a/packages/SystemUI/res/values-or/strings_car.xml b/packages/SystemUI/res/values-or/strings_car.xml new file mode 100644 index 0000000000000000000000000000000000000000..9235b9bbc54119d272523f549808664c2280cfa9 --- /dev/null +++ b/packages/SystemUI/res/values-or/strings_car.xml @@ -0,0 +1,24 @@ + + + + + "ଅଜଣା" + "ଗାଡ଼ି ଚଲାଇବା ଆରମ୍ଭ କରନ୍ତୁ" + diff --git a/packages/SystemUI/res/values-or/strings_tv.xml b/packages/SystemUI/res/values-or/strings_tv.xml index 2048deff9b6894daf7d64b503e160dff96f111f8..2174dc9a8050da9a1dfe2821958567c98268c76b 100644 --- a/packages/SystemUI/res/values-or/strings_tv.xml +++ b/packages/SystemUI/res/values-or/strings_tv.xml @@ -19,11 +19,8 @@ - - - - - - + "ଛବି-ଭିତରେ-ଛବି" + "(କୌଣସି ଟାଇଟଲ୍‍ ପ୍ରୋଗ୍ରାମ୍‍ ନାହିଁ)" + "PIP ବନ୍ଦ କରନ୍ତୁ" "ପୂର୍ଣ୍ଣ ସ୍କ୍ରୀନ୍‍" diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index 58f441bad4f8b1ff36585639c36bb3b2780fb783..3489132bfae444ba3bf6f1412722838ef405ebda 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -33,7 +33,6 @@ "ਜਾਰੀ" "ਸੂਚਨਾਵਾਂ" "ਬੈਟਰੀ ਘੱਟ ਹੈ" - "ਬੈਟਰੀ ਘੱਟ ਹੈ। ਬੈਟਰੀ ਸੇਵਰ ਚਾਲੂ ਕਰੋ" "%s ਬਾਕੀ" "%s ਬਾਕੀ, ਤੁਹਾਡੀ ਵਰਤੋਂ ਦੇ ਆਧਾਰ \'ਤੇ ਲਗਭਗ %s ਬਾਕੀ" "%s ਬਾਕੀ, ਲਗਭਗ %s ਬਾਕੀ" @@ -73,11 +72,12 @@ "ਸਕ੍ਰੀਨਸ਼ਾਟ" "ਸਕ੍ਰੀਨਸ਼ਾਟ ਸੁਰੱਖਿਅਤ ਕਰ ਰਿਹਾ ਹੈ…" "ਸਕ੍ਰੀਨਸ਼ਾਟ ਸੁਰੱਖਿਅਤ ਕਰ ਰਿਹਾ ਹੈ…" - "ਸਕ੍ਰੀਨਸ਼ਾਟ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ" "ਸਕ੍ਰੀਨਸ਼ਾਟ ਰੱਖਿਅਤ ਕੀਤਾ ਗਿਆ" "ਆਪਣਾ ਸਕ੍ਰੀਨਸ਼ਾਟ ਦੇਖਣ ਲਈ ਟੈਪ ਕਰੋ" - "ਸਕ੍ਰੀਨਸ਼ਾਟ ਕੈਪਚਰ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ" - "ਸਕ੍ਰੀਨਸ਼ਾਟ ਰੱਖਿਅਤ ਕਰਨ ਦੌਰਾਨ ਸਮੱਸਿਆ ਆਈ" + + + + "ਸੀਮਿਤ ਸਟੋਰੇਜ ਹੋਣ ਕਾਰਨ ਸਕ੍ਰੀਨਸ਼ਾਟ ਰੱਖਿਅਤ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਦਾ" "ਐਪ ਜਾਂ ਤੁਹਾਡੀ ਸੰਸਥਾ ਵੱਲੋਂ ਸਕ੍ਰੀਨਸ਼ਾਟ ਲੈਣ ਦੀ ਇਜਾਜ਼ਤ ਨਹੀਂ ਦਿੱਤੀ ਗਈ ਹੈ" "USB ਫਾਈਲ ਟ੍ਰਾਂਸਫਰ ਚੋਣਾਂ" @@ -273,8 +273,7 @@ "ਡੈਜ਼ਰਟ ਕੇਸ" "ਸਕ੍ਰੀਨ ਸੇਵਰ" "ਈਥਰਨੈਟ" - - + "ਹੋਰ ਵਿਕਲਪਾਂ ਲਈ ਪ੍ਰਤੀਕ ਨੂੰ ਸਪੱਰਸ਼ ਕਰਕੇ ਦਬਾਈ ਰੱਖੋ" "ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ" "ਕੇਵਲ ਤਰਜੀਹੀ" "ਕੇਵਲ ਅਲਾਰਮ" @@ -349,7 +348,8 @@ "ਸੂਰਜ ਛਿਪਣ \'ਤੇ ਚਾਲੂ" "ਸੂਰਜ ਚੜ੍ਹਨ ਤੱਕ" "%s ਵਜੇ ਚਾਲੂ" - "%s ਤੱਕ" + + "NFC" "NFC ਨੂੰ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ" "NFC ਨੂੰ ਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ" @@ -433,7 +433,10 @@ "%s ਉਹ ਸਭ ਕੁਝ ਕੈਪਚਰ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰ ਦੇਵੇਗਾ, ਜੋ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ ਤੇ ਡਿਸਪਲੇ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।" "ਦੁਬਾਰਾ ਨਾ ਦਿਖਾਓ" "ਸਭ ਕਲੀਅਰ ਕਰੋ" - "\'ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ\' ਮੋਡ ਸੂਚਨਾਵਾਂ ਨੂੰ ਲੁਕਾ ਰਿਹਾ ਹੈ" + + + + "ਹੁਣ ਚਾਲੂ ਕਰੋ" "ਕੋਈ ਸੂਚਨਾਵਾਂ ਨਹੀਂ" "ਪ੍ਰੋਫਾਈਲ ਦਾ ਨਿਰੀਖਣ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ" @@ -539,7 +542,8 @@ "%1$s। ਥਰਥਰਾਹਟ \'ਤੇ ਸੈੱਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।" "%1$s। ਮਿਊਟ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।" "%s ਵੌਲਿਊਮ ਕੰਟਰੋਲ" - "ਕਾਲਾਂ ਅਤੇ ਸੂਚਨਾਵਾਂ ਲਈ ਘੰਟੀ ਵੱਜੇਗੀ" + + "ਮੀਡੀਆ ਆਊਟਪੁੱਟ" "ਫ਼ੋਨ ਕਾਲ ਆਊਟਪੁੱਟ" "ਕੋਈ ਡੀਵਾਈਸ ਨਹੀਂ ਮਿਲੇ" @@ -626,6 +630,8 @@ "%1$s %2$s" "ਸੂਚਨਾ ਕੰਟਰੋਲ" "ਸੂਚਨਾ ਸਨੂਜ਼ ਵਿਕਲਪ" + + "ਅਣਕੀਤਾ ਕਰੋ" "%1$s ਲਈ ਸਨੂਜ਼ ਕੀਤਾ ਗਿਆ" @@ -689,6 +695,8 @@ "ਬੈਟਰੀ" "ਘੜੀ" "ਹੈੱਡਸੈੱਟ" + + "ਹੈੱਡਫ਼ੋਨ ਨੂੰ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ" "ਹੈੱਡਸੈੱਟ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ" "ਡਾਟਾ ਸੇਵਰ" @@ -723,11 +731,9 @@ "ਸੱਜਾ ਕੀ-ਕੋਡ" "ਖੱਬਾ ਪ੍ਰਤੀਕ" "ਸੱਜਾ ਪ੍ਰਤੀਕ" - - + "ਟਾਇਲਾਂ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਫੜ੍ਹ ਕੇ ਰੱਖੋ ਅਤੇ ਘਸੀਟੋ" "ਹਟਾਉਣ ਲਈ ਇੱਥੇ ਘਸੀਟੋ" - - + "ਤੁਹਾਨੂੰ ਘੱਟੋ-ਘੱਟ 6 ਟਾਇਲਾਂ ਦੀ ਲੋੜ ਪਵੇਗੀ" "ਸੰਪਾਦਨ ਕਰੋ" "ਸਮਾਂ" @@ -814,6 +820,8 @@ "ਸਕ੍ਰੀਨਸ਼ਾਟ" "ਆਮ ਸੁਨੇਹੇ" "ਸਟੋਰੇਜ" + + "ਤਤਕਾਲ ਐਪਾਂ" "ਤਤਕਾਲ ਐਪਾਂ ਨੂੰ ਸਥਾਪਨਾ ਦੀ ਲੋੜ ਨਹੀਂ ਹੈ।" "ਐਪ ਜਾਣਕਾਰੀ" @@ -831,12 +839,9 @@ "ਬਦਲੋ" "ਬੈਕਗ੍ਰਾਊਂਡ ਵਿੱਚ ਚੱਲ ਰਹੀਆਂ ਐਪਾਂ" "ਬੈਟਰੀ ਅਤੇ ਡਾਟਾ ਵਰਤੋਂ ਸਬੰਧੀ ਵੇਰਵਿਆਂ ਲਈ ਟੈਪ ਕਰੋ" - - - - - - + "ਕੀ ਮੋਬਾਈਲ ਡਾਟਾ ਬੰਦ ਕਰਨਾ ਹੈ?" + "ਤੁਸੀਂ %s ਰਾਹੀਂ ਡਾਟੇ ਜਾਂ ਇੰਟਰਨੈੱਟ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕਰ ਸਕੋਗੇ। ਇੰਟਰਨੈੱਟ ਸਿਰਫ਼ ਵਾਈ-ਫਾਈ ਰਾਹੀਂ ਉਪਲਬਧ ਹੋਵੇਗਾ।" + "ਤੁਹਾਡਾ ਕੈਰੀਅਰ" "ਕਿਸੇ ਐਪ ਵੱਲੋਂ ਇਜਾਜ਼ਤ ਬੇਨਤੀ ਨੂੰ ਢਕੇ ਜਾਣ ਕਾਰਨ ਸੈਟਿੰਗਾਂ ਤੁਹਾਡੇ ਜਵਾਬ ਦੀ ਪੁਸ਼ਟੀ ਨਹੀਂ ਕਰ ਸਕਦੀਆਂ।" "ਕੀ %1$s ਨੂੰ %2$s ਦੇ ਹਿੱਸੇ ਦਿਖਾਉਣ ਦੇਣੇ ਹਨ?" "- ਇਹ %1$s ਵਿੱਚੋਂ ਜਾਣਕਾਰੀ ਪੜ੍ਹ ਸਕਦਾ ਹੈ" @@ -844,4 +849,18 @@ "%1$s ਨੂੰ ਕਿਸੇ ਵੀ ਐਪ ਵਿੱਚੋਂ ਹਿੱਸੇ ਦਿਖਾਉਣ ਦਿਓ" "ਕਰਨ ਦਿਓ" "ਅਸਵੀਕਾਰ ਕਰੋ" + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index 79d9d6aaabb4bb3a45960f841fdb419f644961ca..f1767a22be8b3866880c88462f2b6f6ac5e281f6 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -35,7 +35,6 @@ "Bieżące" "Powiadomienia" "Niski poziom baterii" - "Niski poziom naładowania baterii. Włącz Oszczędzanie baterii" "Pozostało %s" "Pozostało %s, jeszcze około %s (na podstawie Twojego sposobu korzystania)" "Pozostało %s, jeszcze około %s" @@ -75,11 +74,12 @@ "Zrzut ekranu" "Zapisywanie zrzutu ekranu..." "Zapisywanie zrzutu ekranu..." - "Zapisywanie zrzutu ekranu" "Zrzut ekranu został zapisany" "Kliknij, by zobaczyć zrzut ekranu" - "Nie udało się wykonać zrzutu ekranu" - "Podczas zapisywania zrzutu ekranu wystąpił błąd" + + + + "Nie można zapisać zrzutu ekranu, bo brakuje miejsca w pamięci" "Nie możesz wykonać zrzutu ekranu, bo nie zezwala na to aplikacja lub Twoja organizacja." "USB – opcje przesyłania plików" @@ -354,7 +354,8 @@ "Włącz o zachodzie" "Do wschodu słońca" "Włącz o %s" - "Do %s" + + "Komunikacja NFC" "Komunikacja NFC jest wyłączona" "Komunikacja NFC jest włączona" @@ -438,7 +439,9 @@ "%s będzie zapisywać wszystko, co wyświetli się na ekranie." "Nie pokazuj ponownie" "Ukryj wszystkie" - "W trybie Nie przeszkadzać powiadomienia są ukrywane" + + + "W trybie Nie przeszkadzać powiadomienia są ukrywane" "Rozpocznij teraz" "Brak powiadomień" "Profil może być monitorowany" @@ -544,7 +547,8 @@ "%1$s. Kliknij, by włączyć wibracje." "%1$s. Kliknij, by wyciszyć." "Sterowanie głośnością: %s" - "Dzwonek przy połączeniach i powiadomieniach" + + "Wyjście multimediów" "Wyjście dla połączeń telefonicznych" "Nie znaleziono urządzeń" @@ -635,6 +639,8 @@ "%1$s %2$s" "sterowanie powiadomieniami" "opcje odkładania powiadomień" + + "COFNIJ" "Odłożono na %1$s" @@ -702,6 +708,8 @@ "Bateria" "Zegar" "Zestaw słuchawkowy" + + "Słuchawki są podłączone" "Zestaw słuchawkowy jest podłączony" "Oszczędzanie danych" @@ -736,11 +744,9 @@ "Prawy klawisz" "Lewa ikona" "Prawa ikona" - - + "Przytrzymaj i przeciągnij, by dodać kafelki" "Przeciągnij tutaj, by usunąć" - - + "Potrzebnych jest co najmniej sześć kafelków" "Edytuj" "Godzina" @@ -827,6 +833,7 @@ "Zrzuty ekranu" "Wiadomości" "Pamięć wewnętrzna" + "Wskazówki" "Aplikacje błyskawiczne" "Aplikacji błyskawicznych nie trzeba instalować." "O aplikacji" @@ -844,12 +851,9 @@ "Zastąp" "Aplikacje działające w tle" "Kliknij, by wyświetlić szczegóły wykorzystania baterii i użycia danych" - - - - - - + "Wyłączyć mobilną transmisję danych?" + "Nie będziesz mieć dostępu do transmisji danych ani internetu przez operatora %s. Internet będzie dostępny tylko przez Wi-Fi." + "Twój operator" "Aplikacja Ustawienia nie może zweryfikować Twojej odpowiedzi, ponieważ inna aplikacja zasłania prośbę o udzielenie uprawnień." "Zezwolić aplikacji %1$s na pokazywanie wycinków z aplikacji %2$s?" "- Może odczytywać informacje z aplikacji %1$s" @@ -857,4 +861,11 @@ "Zezwalaj aplikacji %1$s na pokazywanie wycinków z dowolnych aplikacji" "Zezwól" "Odmów" + "Kliknij, by zaplanować działanie oszczędzania baterii" + "Włącz automatycznie, gdy poziom naładowania baterii wynosi %d%%" + "Nie" + "Harmonogram oszczędzania baterii jest aktywny" + "Oszczędzanie baterii włączy się automatycznie, gdy poziom naładowania baterii spadnie poniżej %d%%." + "Ustawienia" + "OK" diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index c52de5a6cfe96ded98d5ab32f2aee18a118b46e3..b01e1550e76b2f8adc8dc208d4cfa505b33c64fa 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -74,10 +74,8 @@ "Salvando captura de tela..." "Captura de tela salva" "Toque para ver sua captura de tela" - - - - + "Falha ao salvar a captura de tela" + "Tente fazer a captura de tela novamente" "Não é possível salvar a captura de tela, porque não há espaço suficiente" "O app ou a organização não permitem capturas de tela" "Opções transf. arq. por USB" @@ -350,8 +348,7 @@ "Ativ. ao pôr do sol" "Até o nascer do sol" "Ativado às %s" - - + "Até %s" "NFC" "A NFC está desativada" "A NFC está ativada" @@ -435,9 +432,8 @@ "%s começará a capturar tudo o que for exibido na tela." "Não mostrar novamente" "Limpar tudo" - - - "O modo \"Não perturbe\" está ocultando as notificações" + "Gerenciar notificações" + "O modo \"Não perturbe\" está ocultando as notificações" "Iniciar agora" "Sem notificações" "O perfil pode ser monitorado" @@ -543,7 +539,8 @@ "%1$s. Toque para configurar para vibrar." "%1$s. Toque para silenciar." "Controles de volume %s" - "Chamadas e notificações emitirão um toque" + + "Saída de mídia" "Saída de chamada telefônica" "Nenhum dispositivo foi encontrado" @@ -630,8 +627,7 @@ "%2$s do %1$s" "controles de notificação" "opções de adiamento de notificação" - - + "Adiar" "DESFAZER" "Adiada para %1$s" @@ -695,6 +691,8 @@ "Bateria" "Relógio" "Fone de ouvido" + + "Fones de ouvido conectados" "Fone de ouvido conectado" "Economia de dados" @@ -818,8 +816,7 @@ "Capturas de tela" "Mensagens gerais" "Armazenamento" - - + "Dicas" "Instant Apps" "Os Instant Apps não requerem instalação." "Informações do app" @@ -847,18 +844,11 @@ "Permitir que %1$s mostre partes de qualquer app" "Permitir" "Negar" - - - - - - - - - - - - - - + "Toque para programar o recurso \"Economia de bateria\"" + "Ativar automaticamente quando a bateria estiver em %d%%" + "Não" + "Programação do recurso \"Economia de bateria\" ativada" + "O recurso \"Economia de bateria\" será ativado automaticamente depois que a bateria ficar abaixo de %d%%." + "Configurações" + "Ok" diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index d2adb24dbec49b84478be0bba5decc254a181ff3..8653c1159954b9cc646c09bf9a0351d8585ef7bc 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -33,7 +33,6 @@ "Em curso" "Notificações" "Bateria fraca" - "A bateria está fraca. Ativar a Poupança de dados" "%s restante" "%s restante. Cerca de %s restante(s) com base na sua utilização." "%s restante. Cerca de %s restante(s)." @@ -73,11 +72,10 @@ "Captura de ecrã" "A guardar captura de ecrã..." "A guardar captura de ecrã..." - "A guardar a captura de ecrã…" "Captura de ecrã guardada" "Toque para ver a captura de ecrã." - "Não foi possível obter a captura de ecrã." - "Foi encontrado um problema ao guardar a captura de ecrã." + "Não foi possível gravar a captura de ecrã" + "Experimente voltar a efetuar a captura de ecrã." "Não é possível guardar a captura de ecrã devido a espaço de armazenamento limitado." "A aplicação ou a sua entidade não permitem tirar capturas de ecrã" "Opções de transm. de fich. USB" @@ -348,7 +346,7 @@ "Ativ. ao pôr-do-sol" "Até ao nascer do sol" "Ativada à(s) %s" - "Até à(s) %s" + "Até à(s) %s" "NFC" "O NFC está desativado" "O NFC está ativado" @@ -432,7 +430,8 @@ "O(a) %s vai começar a captar tudo o que é apresentado no ecrã." "Não mostrar de novo" "Limpar tudo" - "O modo Não incomodar está a ocultar as notificações." + "Gerir notificações" + "O modo Não incomodar está a ocultar as notificações." "Começar agora" "Sem notificações" "O perfil pode ser monitorizado" @@ -538,7 +537,8 @@ "%1$s. Toque para ativar a vibração." "%1$s. Toque para desativar o som." "Controlos de volume de %s" - "As chamadas e as notificações tocam." + + "Saída de som multimédia" "Saída de som de chamada telefónica" "Nenhum dispositivo encontrado." @@ -625,6 +625,7 @@ "%2$s do %1$s" "controlos de notificação" "opções de suspensão de notificações" + "Suspender" "ANULAR" "Suspensa por %1$s" @@ -688,6 +689,8 @@ "Bateria" "Relógio" "Ausc. com microfone integrado" + + "Auscultadores ligados" "Auscultadores com microfone integrado ligados" "Poupança de dados" @@ -811,6 +814,7 @@ "Capturas de ecrã" "Mensagens gerais" "Armazenamento" + "Sugestões" "Aplicações instantâneas" "As Aplicações instantâneas não requerem instalação." "Informações da aplicação" @@ -838,4 +842,11 @@ "Permitir que a aplicação %1$s mostre partes de qualquer aplicação" "Permitir" "Recusar" + "Tocar para agendar a Poupança de bateria" + "Ative automaticamente quando o nível de bateria estiver a %d%%." + "Não, obrigado" + "Poupança de bateria agendada ativada" + "A Poupança de bateria é ativada automaticamente quando o nível de bateria está abaixo de %d%%." + "Definições" + "Compreendi" diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 080f7e464188331481fd3c921b8e4c7ca3511985..b01e1550e76b2f8adc8dc208d4cfa505b33c64fa 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -33,7 +33,6 @@ "Em andamento" "Notificações" "Bateria fraca" - "A bateria está com pouca carga. Ative a Economia de bateria" "%s restantes" "%s restante(s), cerca de %s com base no seu uso" "%s restante(s), cerca de %s" @@ -73,11 +72,10 @@ "Captura de tela" "Salvando captura de tela..." "Salvando captura de tela..." - "A captura de tela está sendo salva" "Captura de tela salva" "Toque para ver sua captura de tela" - "Não foi possível fazer a captura de tela" - "Problema encontrado ao salvar captura de tela" + "Falha ao salvar a captura de tela" + "Tente fazer a captura de tela novamente" "Não é possível salvar a captura de tela, porque não há espaço suficiente" "O app ou a organização não permitem capturas de tela" "Opções transf. arq. por USB" @@ -275,8 +273,7 @@ "Mostruário de sobremesas" "Protetor de tela" "Ethernet" - - + "Toque nos ícones e mantenha-os pressionados para ver mais opções" "Não perturbe" "Somente prioridade" "Somente alarmes" @@ -351,7 +348,7 @@ "Ativ. ao pôr do sol" "Até o nascer do sol" "Ativado às %s" - "Até %s" + "Até %s" "NFC" "A NFC está desativada" "A NFC está ativada" @@ -435,7 +432,8 @@ "%s começará a capturar tudo o que for exibido na tela." "Não mostrar novamente" "Limpar tudo" - "O modo \"Não perturbe\" está ocultando as notificações" + "Gerenciar notificações" + "O modo \"Não perturbe\" está ocultando as notificações" "Iniciar agora" "Sem notificações" "O perfil pode ser monitorado" @@ -541,7 +539,8 @@ "%1$s. Toque para configurar para vibrar." "%1$s. Toque para silenciar." "Controles de volume %s" - "Chamadas e notificações emitirão um toque" + + "Saída de mídia" "Saída de chamada telefônica" "Nenhum dispositivo foi encontrado" @@ -628,6 +627,7 @@ "%2$s do %1$s" "controles de notificação" "opções de adiamento de notificação" + "Adiar" "DESFAZER" "Adiada para %1$s" @@ -691,6 +691,8 @@ "Bateria" "Relógio" "Fone de ouvido" + + "Fones de ouvido conectados" "Fone de ouvido conectado" "Economia de dados" @@ -725,11 +727,9 @@ "Código de tecla à direita" "Ícone à esquerda" "Ícone à direita" - - + "Mantenha pressionado e arraste para adicionar blocos" "Arraste aqui para remover" - - + "É preciso haver pelo menos seis blocos" "Editar" "Horas" @@ -816,6 +816,7 @@ "Capturas de tela" "Mensagens gerais" "Armazenamento" + "Dicas" "Instant Apps" "Os Instant Apps não requerem instalação." "Informações do app" @@ -833,12 +834,9 @@ "Substituir" "Apps sendo executados em segundo plano" "Tocar para ver detalhes sobre a bateria e o uso de dados" - - - - - - + "Desativar os dados móveis?" + "Você não terá acesso a dados ou à Internet por meio da operadora %s. A Internet só estará disponível via Wi-Fi." + "sua operadora" "Como um app está ocultando uma solicitação de permissão, as configurações não podem verificar sua resposta." "Permitir que %1$s mostre partes do app %2$s?" "- Pode ler informações do app %1$s" @@ -846,4 +844,11 @@ "Permitir que %1$s mostre partes de qualquer app" "Permitir" "Negar" + "Toque para programar o recurso \"Economia de bateria\"" + "Ativar automaticamente quando a bateria estiver em %d%%" + "Não" + "Programação do recurso \"Economia de bateria\" ativada" + "O recurso \"Economia de bateria\" será ativado automaticamente depois que a bateria ficar abaixo de %d%%." + "Configurações" + "Ok" diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 08f27f1d087f7c30f06467de36edc65d71b5be16..24bcd97659c58ed23faee2ce519863409dc1fc3c 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -34,7 +34,6 @@ "În desfășurare" "Notificări" "Bateria este aproape descărcată" - "Bateria este aproape descărcată. Activați Economisirea bateriei." "Procent rămas din baterie: %s" "Procent rămas din baterie %s, în baza utilizării, timp aproximativ rămas %s" "Procent rămas din baterie %s, timp aproximativ rămas %s" @@ -74,11 +73,10 @@ "Captură de ecran" "Se salv. captura de ecran..." "Se salvează captura de ecran..." - "Captura de ecran este în curs de salvare" "Captură de ecran salvată" "Atingeți pentru a vedea captura de ecran" - "Captura de ecran nu a putut fi realizată" - "Problemă întâmpinată la salvarea capturii de ecran" + "Nu s-a putut salva captura de ecran" + "Încercați să faceți din nou o captură de ecran" "Captura de ecran nu poate fi salvată din cauza spațiului de stocare limitat" "Crearea capturilor de ecran nu este permisă de aplicație sau de organizația dvs." "Opțiuni pentru transferul de fișiere prin USB" @@ -277,8 +275,7 @@ "Vitrina cu dulciuri" "Economizor de ecran" "Ethernet" - - + "Atingeți lung pictogramele pentru mai multe opțiuni" "Nu deranja" "Numai cu prioritate" "Numai alarme" @@ -354,7 +351,7 @@ "Activată la apus" "Până la răsărit" "Activată la %s" - "Până la %s" + "Până la %s" "NFC" "Serviciul NFC este dezactivat" "Serviciul NFC este activat" @@ -438,7 +435,8 @@ "%s va începe să captureze tot ceea ce se afișează pe ecran." "Nu se mai afișează" "Ștergeți toate notificările" - "Funcția Nu deranja ascunde notificările" + "Gestionați notificările" + "Funcția Nu deranja ascunde notificările" "Începeți acum" "Nicio notificare" "Profilul poate fi monitorizat" @@ -544,7 +542,8 @@ "%1$s. Atingeți pentru a seta pe vibrații." "%1$s. Atingeți pentru a dezactiva sunetul." "Comenzi de volum pentru %s" - "Apelurile și notificările vor suna" + + "Ieșire media" "Ieșire apel telefonic" "Nu s-a găsit niciun dispozitiv" @@ -633,6 +632,7 @@ "%1$s %2$s" "comenzile notificării" "opțiuni de amânare a notificării" + "Amânați" "ANULAȚI" "Amânată %1$s" @@ -698,6 +698,8 @@ "Baterie" "Ceas" "Set căști-microfon" + + "Căștile sunt conectate" "Setul căști-microfon este conectat" "Economizor de date" @@ -821,6 +823,7 @@ "Capturi de ecran" "Mesaje generale" "Stocare" + "Indicii" "Aplicații instantanee" "Aplicațiile instantanee nu necesită instalare." "Informații despre aplicație" @@ -848,4 +851,11 @@ "Permiteți %1$s să afișeze porțiuni din orice aplicație" "Permiteți" "Refuzați" + "Atingeți pentru a programa Economisirea energiei" + "Activați automat când bateria este la %d%%" + "Nu, mulțumesc" + "S-a activat programarea pentru Economisirea bateriei" + "Economisirea bateriei se va activa automat imediat ce bateria scade sub %d%%." + "Setări" + "OK" diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index b34144a78f0412b8212f9ee95d4ed72aa7d1f74e..8b21901c80ea5f1fe7ecdf225968bb725263db1a 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -35,17 +35,13 @@ "Текущие" "Уведомления" "Батарея почти разряжена" - "Батарея почти разряжена. Включите режим энергосбережения." "Осталось: %s" "Заряд батареи – %s, осталось примерно %s при текущем уровне использования." "Заряд батареи – %s, осталось примерно %s." "Уровень заряда батареи: %s. Включен режим энергосбережения." - - - - - - + "Невозможно выполнить зарядку через USB. Используйте зарядное устройство из комплекта." + "Невозможно выполнить зарядку через USB" + "Используйте зарядное устройство из комплекта." "Настройки" "Включить режим энергосбережения?" "Включить" @@ -78,11 +74,10 @@ "Скриншот" "Сохранение..." "Сохранение..." - "Сохранение…" "Скриншот сохранен" "Нажмите, чтобы увидеть скриншот." - "Ошибка при сохранении скриншота" - "Не удалось сохранить скриншот." + "Не удалось сохранить скриншот" + "Попробуйте сделать скриншот снова." "Не удалось сохранить скриншот: недостаточно места." "Не удалось сделать скриншот: нет разрешения от приложения или организации." "Параметры передачи через USB" @@ -153,7 +148,6 @@ "Подключено" "Соединение." "GPRS" - "1X" "HSPA" "3G" "3,5G" @@ -215,8 +209,7 @@ "Режим полета включен." "Режим полета отключен." "Режим полета включен." - - + "Режим \"Не беспокоить\" включен" "Не беспокоить, полная тишина." "Не беспокоить – только будильник." "Не беспокоить." @@ -284,7 +277,7 @@ "Коробка со сладостями" "Заставка" "Ethernet" - "Чтобы открыть другие параметры, нажмите на значок и удерживайте его." + "Чтобы открыть другие параметры, нажмите на значок и удерживайте его" "Не беспокоить" "Только важные" "Только будильник" @@ -361,7 +354,7 @@ "Включить на закате" "До рассвета" "Включить в %s" - "До %s" + "До %s" "Модуль NFC" "Модуль NFC отключен" "Модуль NFC включен" @@ -445,8 +438,8 @@ "Приложение %s получит доступ к изображению на экране устройства." "Больше не показывать" "Очистить все" - - + "Настроить уведомления" + "В режиме \"Не беспокоить\" уведомления не приходят" "Начать" "Нет уведомлений" "Действия в профиле могут отслеживаться" @@ -552,9 +545,8 @@ "%1$s. Нажмите, чтобы включить вибрацию." "%1$s. Нажмите, чтобы выключить звук." "%s: регулировка громкости" - "Для звонков и уведомлений включен вибросигнал." - "Для звонков и уведомлений отключен звук." - "Для звонков и уведомлений включен звук." + + "Выход мультимедиа" "Выход телефонных вызовов" "Устройств не найдено" @@ -645,6 +637,7 @@ "%1$s: %2$s" "настройки уведомлений" "параметры отсрочки уведомлений" + "Отложить" "ОТМЕНИТЬ" "Отложено на %1$s" @@ -712,6 +705,8 @@ "Батарея" "Часы" "Гарнитура" + + "Наушники подключены" "Гарнитура подключена" "Экономия трафика" @@ -746,8 +741,9 @@ "Код клавиши \"Вправо\"" "Значок \"Влево\"" "Значок \"Вправо\"" - "Перетащите нужные элементы" + "Перетащите нужные элементы" "Чтобы удалить, перетащите сюда" + "Должно остаться не менее 6 элементов" "Изменить" "Время" @@ -834,6 +830,7 @@ "Скриншоты" "Сообщения" "Хранилище" + "Подсказки" "Приложения с мгновенным запуском" "Приложения с мгновенным запуском не требуется устанавливать." "О приложении" @@ -851,7 +848,9 @@ "Заменить" "Приложения, работающие в фоновом режиме" "Нажмите, чтобы проверить энергопотребление и трафик" - "Отключить мобильный Интернет?" + "Отключить мобильный Интернет?" + "У вас не будет доступа к данным и Интернету через оператора \"%s\". Вы сможете установить интернет-соединение только по сети Wi-Fi." + "ваш оператор" "Невозможно принять ваше согласие, поскольку запрос скрыт другим приложением." "Разрешить приложению \"%1$s\" показывать фрагменты приложения \"%2$s\"?" "– Ему станут доступны данные из приложения \"%1$s\"." @@ -859,4 +858,15 @@ "Разрешить приложению \"%1$s\" показывать фрагменты других приложений" "Да" "Нет" + "Нажмите, чтобы настроить режим энергосбережения" + + + + "Отмена" + "Автоматический переход в режим энергосбережения включен" + + + + "Открыть настройки" + "ОК" diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index 74082e87a99c311193762c650a8bee3c8134e254..63b14d774ea9f329be5a87acc1c197000da88ef1 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -33,7 +33,6 @@ "දැනට පවතින" "දැනුම්දීම්" "බැටරිය අඩුය" - "බැටරිය අඩුයි. බැටරි සුරැකුම ක්‍රියාත්මක කරන්න" "%s ඉතිරිව තිබේ" "%s ඉතිරිව ඇත, ඔබගේ භාවිතය මත පදනම්ව %s පමණ" "%s ඉතිරිව ඇත, %s පමණ ඇත" @@ -73,11 +72,12 @@ "තිර රුව" "තිර රුව සුරකිමින්…" "තිර රුව සුරැකෙමින් පවතී…" - "තිර රුව සුරකිමින් පවතී" "තිර රුව සුරකින ලදී" "ඔබගේ තිර රුව බැලීමට තට්ටු කරන්න" - "තිර රුව ග්‍රහණය කිරීමට නොහැකි විය" - "තිර රුව සුරකින අතරතුර ගැටලුවක් ඇති විය" + + + + "සීමිත ගබඩා ඉඩ නිසා තිර රුව සුරැකිය නොහැකිය" "තිර රූ ගැනීමට යෙදුම හෝ ඔබගේ සංවිධානය ඉඩ නොදේ" "USB ගොනු හුවමාරු විකල්ප" @@ -273,8 +273,7 @@ "අතුරුපස අවස්තාව" "තිර සුරැකුම" "ඊතර නෙට්" - - + "තවත් විකල්ප සඳහා නිරූපක ස්පර්ශ කර අල්ලාගෙන සිටින්න" "බාධා නොකරන්න" "ප්‍රමුඛතාව පමණයි" "එලාම පමණි" @@ -349,7 +348,8 @@ "හිරු බැසීමේදී ක්‍රි." "හිරු නගින තෙක්" "%sට ක්‍රියාත්මකයි" - "%s තෙක්" + + "NFC" "NFC අබලයි" "NFC සබලයි" @@ -433,7 +433,9 @@ "ඔබගේ තීරයේ දර්ශනය වන සෑම දෙයම %s ලබාගැනීම ආරම්භ කරන ලදි." "නැවත නොපෙන්වන්න" "සියල්ල හිස් කරන්න" - "බාධා නොකරන්න දැනුම්දීම් සඟවමින්" + + + "බාධා නොකරන්න දැනුම්දීම් සඟවමින්" "දැන් අරඹන්න" "දැනුම්දීම් නැත" "ඇතැම් විට පැතිකඩ නිරීක්ෂණය කරන ලදි" @@ -539,7 +541,8 @@ "%1$s. කම්පනය කිරීමට සකස් කිරීමට තට්ටු කරන්න." "%1$s. නිහඬ කිරීමට තට්ටු කරන්න." "හඬ පරිමා පාලන %s" - "ඇමතුම් සහ දැනුම්දීම් නාද වනු ඇත" + + "මාධ්‍ය ප්‍රතිදානය" "දුරකථන ඇමතුම් ප්‍රතිදානය" "උපාංග හමු නොවිණි" @@ -626,6 +629,8 @@ "%1$s %2$s" "දැනුම්දීම් පාලන" "දැනුම්දීම් මදක් නතර කිරීමේ විකල්ප" + + "අස් කරන්න" "%1$sක් මදක් නතර කරන ලදී" @@ -689,6 +694,8 @@ "බැටරිය" "ඔරලෝසුව" "හෙඩ්සෙට්" + + "හෙඩ්ෆෝන් සම්බන්ධ කළ" "හෙඩ්සෙට් සම්බන්ධ කළ" "දත්ත සුරැකුම" @@ -812,6 +819,7 @@ "තිර රු" "පොදු පණිවිඩ" "ගබඩාව" + "ඉඟි" "ක්ෂණික යෙදුම්" "ක්ෂණික යෙදුම් ස්ථාපනය කිරීම අවශ්‍ය නොවේ." "යෙදුම් තොරතුරු" @@ -839,4 +847,11 @@ "ඕනෑම යෙදුමකින් කොටස් පෙන්වීමට %1$s හට ඉඩ දෙන්න" "ඉඩ දෙන්න" "ප්‍රතික්ෂේප කර." + "බැටරි සුරැකුම කාලසටහන්ගත කිරීමට තට්ටු කරන්න" + "බැටරිය %d%% වූ විට ස්වයංක්‍රියව ක්‍රියාත්මක කරන්න" + "එපා ස්තූතියි" + "බැටරි සුරැකුම් කාලසටහන ක්‍රියාත්මකයි" + "බැටරිය %d%%ට වඩා අඩු වූ පසු බැටරි සුරැකුම ස්වයංක්‍රියව ක්‍රියාත්මක කරනු ඇත." + "සැකසීම්" + "තේරුණා" diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 9b5fc1ffff1ab82c0668df729c97a80d24bf7b3f..d2e9d3cb897275456bbdb649ba0fd661e167ea6d 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -35,7 +35,6 @@ "Prebiehajúce" "Upozornenia" "Batéria je takmer vybitá" - "Batéria je takmer vybitá. Zapnite Šetrič batérie." "Zostáva %s" "Zostáva %s, približne %s v závislosti od intenzity využitia" "Zostáva %s, približne %s" @@ -75,11 +74,10 @@ "Snímka obrazovky" "Prebieha ukladanie snímky obrazovky..." "Prebieha ukladanie snímky obrazovky..." - "Ukladá sa snímka obrazovky" "Snímka obrazovky bola uložená" "Klepnutím zobrazíte snímku obrazovky" - "Snímku obrazovky sa nepodarilo zachytiť" - "Pri ukladaní snímky obrazovky sa vyskytol problém" + "Snímku obrazovky sa nepodarilo uložiť" + "Skúste snímku urobiť znova" "Snímka obrazovky sa nedá uložiť z dôvodu nedostatku miesta v úložisku" "Vytváranie snímok obrazovky je zakázané aplikáciou alebo vašou organizáciou" "Možnosti prenosu súborov USB" @@ -279,8 +277,7 @@ "Pult s dezertami" "Šetrič obrazovky" "Ethernet" - - + "Pridržaním ikon zobrazíte ďalšie možnosti" "Nerušiť" "Iba prioritné" "Iba budíky" @@ -357,7 +354,7 @@ "Zapne sa pri západe slnka" "Do východu slnka" "Zapne sa o %s" - "Do %s" + "Do %s" "NFC" "NFC je deaktivované" "NFC je aktivované" @@ -441,7 +438,8 @@ "Aplikácia %s začne zaznamenávať všetok obsah zobrazený na vašej obrazovke." "Nabudúce nezobrazovať" "Vymazať všetko" - "Režim Nerušiť skrýva upozornenia" + "Spravovať upozornenia" + "Režim Nerušiť skrýva upozornenia" "Spustiť" "Žiadne upozornenia" "Profil môže byť monitorovaný" @@ -547,7 +545,8 @@ "%1$s. Klepnutím nastavíte vibrovanie." "%1$s. Klepnutím vypnete zvuk." "Ovládacie prvky hlasitosti %s" - "Hovory a upozornenia budú vyzváňať" + + "Výstup médií" "Výstup telefonického hovoru" "Nenašli sa žiadne zariadenia" @@ -638,6 +637,7 @@ "%1$s %2$s" "ovládacie prvky pre upozornenia" "možnosti stlmenia upozornení" + "Stlmiť" "SPÄŤ" "Stlmené na %1$s" @@ -705,6 +705,8 @@ "Batéria" "Hodiny" "Náhlavná súprava" + + "Slúchadlá pripojené" "Náhlavná súprava pripojená" "Šetrič dát" @@ -828,6 +830,7 @@ "Snímky obrazovky" "Všeobecné správy" "Úložisko" + "Tipy" "Okamžité aplikácie" "Okamžité aplikácie nevyžadujú inštaláciu." "Info o aplikácii" @@ -855,4 +858,11 @@ "Povoliť aplikácii %1$s zobrazovať rezy z ľubovoľnej aplikácie" "Povoliť" "Zamietnuť" + "Klepnutím naplánujete aktivovanie Šetriča batérie" + "Zapnúť automaticky, keď batéria klesne pod %d %%" + "Nie, vďaka" + "Plánované aktivovanie Šetriča batérie bolo zapnuté" + "Keď batéria klesne pod %d %%, automaticky sa aktivujte Šetrič batérie." + "Nastavenia" + "Dobre" diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index e515e4772cc89950e41c1c138208c2fd3f0b1113..b983d96e4a9b85f2d22441bfcaef90bd87d9a476 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -35,7 +35,6 @@ "Trenutno" "Obvestila" "Akumulator je skoraj izpraznjen" - "Akumulator je skoraj izpraznjen. Vklopite varčevanje z energijo akumulatorja" "Še %s" "Še %s, glede na način uporabe imate na voljo še približno %s" "Še %s, na voljo imate še približno %s" @@ -75,11 +74,10 @@ "Posnetek zaslona" "Shranjev. posnetka zaslona ..." "Shranjevanje posnetka zaslona ..." - "Shranjevanje posnetka zaslona" "Posnetek zaslona je shranjen" "Dotaknite se, če si želite ogledati posnetek zaslona" - "Posnetka zaslona ni bilo mogoče shraniti" - "Pri shranjevanju posnetka zaslona je prišlo do težave" + "Posnetka zaslona ni bilo mogoče shraniti" + "Poskusite znova ustvariti posnetek zaslona" "Shranjevanje posnetka zaslona ni mogoče zaradi omejenega prostora za shranjevanje" "Aplikacija ali vaša organizacija ne dovoljuje posnetkov zaslona" "Možnosti prenosa datotek prek USB-ja" @@ -279,8 +277,7 @@ "Vitrina za sladice" "Ohranjeval. zaslona" "Ethernet" - - + "Pridržite ikone, če si želite ogledati več možnosti" "Ne moti" "Samo prednostno" "Samo alarmi" @@ -357,7 +354,7 @@ "Ob sončnem zahodu" "Do sončnega vzhoda" "Vklop ob %s" - "Do %s" + "Do %s" "NFC" "Tehnologija NFC je onemogočena" "Tehnologija NFC je omogočena" @@ -441,7 +438,8 @@ "Aplikacija %s bo začela zajemati vse, kar je prikazano na zaslonu." "Tega ne prikaži več" "Izbriši vse" - "Način »ne moti« skriva obvestila" + "Upravljanje obvestil" + "Način »ne moti« skriva obvestila" "Začni zdaj" "Ni obvestil" "Profil je morda nadziran" @@ -547,7 +545,8 @@ "%1$s. Dotaknite se, če želite nastaviti vibriranje." "%1$s. Dotaknite se, če želite izklopiti zvok." "Kontrolniki glasnosti za %s" - "Zvonjenje bo vklopljeno za klice in obvestila" + + "Izhod predstavnosti" "Izhod telefonskih klicev" "Ni naprav" @@ -638,6 +637,7 @@ "%1$s %2$s" "kontrolniki obvestil" "možnosti preložitve obvestil" + "Preloži" "RAZVELJAVI" "Preloženo za %1$s" @@ -705,6 +705,8 @@ "Akumulator" "Ura" "Slušalke z mikrofonom" + + "Slušalke priključene" "Slušalke z mikrofonom priključene" "Varčevanje s podatki" @@ -828,6 +830,7 @@ "Posnetki zaslona" "Splošna sporočila" "Shramba" + "Namigi" "Nenamestljive aplikacije" "Nenamestljivih aplikacij ni treba namestiti." "Podatki o aplikaciji" @@ -855,4 +858,15 @@ "Dovoli, da aplikacija %1$s prikaže izreze iz poljubne aplikacije" "Dovoli" "Zavrni" + "Dotaknite se za načrtovanje varčevanja z energijo akumulatorja" + + + + "Ne, hvala" + "Urnik varčevanja z energijo akumulatorja je vklopljen" + + + + "Nastavitve" + "V redu" diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index ce3ef8013c7c430f77d3c9b0f5f9b0f77d51d113..5519a278887f2f496bdf78ef0c0c87d0367b9632 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -33,7 +33,6 @@ "Në vazhdim" "Njoftimet" "Niveli i baterisë është i ulët" - "Niveli i baterisë është i ulët. Aktivizo \"Kursyesin e baterisë\"" "Ka mbetur edhe %s" "%s të mbetura, rreth %s të mbetura bazuar në përdorimin tënd" "%s të mbetura, rreth %s të mbetura" @@ -73,11 +72,10 @@ "Pamja e ekranit" "Po ruan pamjen e ekranit..." "Po ruan pamjen e ekranit…" - "Pamja e ekranit po ruhet" "Pamja e ekranit u ruajt" "Trokit për të parë pamjen e ekranit" - "Pamja e ekranit nuk mund të regjistrohej" - "U ndesh një problem gjatë ruajtjes së pamjes së ekranit" + "Pamja e ekranit nuk mund të ruhej" + "Provo ta nxjerrësh përsëri pamjen e ekranit" "Pamja e ekranit nuk mund të ruhet për shkak të hapësirës ruajtëse të kufizuar" "Nxjerrja e pamjeve të ekranit nuk lejohet nga aplikacioni ose organizata jote." "Opsionet e transferimit të dosjeve të USB-së" @@ -273,8 +271,7 @@ "\"Kutia e ëmbëlsirës\"" "Mbrojtësi i ekranit" "Eternet" - - + "Trokit dhe mbaj prekur ikonat për më shumë opsione" "Mos shqetëso" "Vetëm me prioritet" "Vetëm alarmet" @@ -349,7 +346,7 @@ "Në perëndim të diellit" "Deri në lindje të diellit" "Aktive në %s" - "Deri në %s" + "Deri në %s" "NFC" "NFC është çaktivizuar" "NFC është aktivizuar" @@ -433,7 +430,8 @@ "%s do të fillojë të regjistrojë çdo gjë që shfaqet në ekran." "Mos e shfaq sërish" "Pastroji të gjitha" - "Modaliteti \"Mos shqetëso\" po fsheh njoftimet" + "Menaxho njoftimet" + "Modaliteti \"Mos shqetëso\" po fsheh njoftimet" "Fillo tani" "Asnjë njoftim" "Profili mund të monitorohet" @@ -539,7 +537,8 @@ "%1$s. Trokit për ta vendosur në dridhje." "%1$s. Trokit për ta çaktivizuar." "Kontrollet e volumit %s" - "Do të bjerë zilja për telefonatat dhe njoftimet" + + "Dalja e pajisjes" "Dalja e telefonatës" "Nuk u gjet asnjë pajisje" @@ -626,6 +625,7 @@ "%1$s %2$s" "kontrollet e njoftimit" "opsionet e shtyrjes së njoftimit" + "Shty alarmin" "ZHBËJ" "U shty për %1$s" @@ -689,6 +689,8 @@ "Bateria" "Ora" "Kufjet me mikrofon" + + "Kufjet u lidhën" "Kufjet me mikrofon u lidhën" "Kursyesi i të dhënave" @@ -812,6 +814,7 @@ "Pamjet e ekranit" "Mesazhe të përgjithshme" "Hapësira ruajtëse" + "Sugjerimet" "Aplikacionet e çastit" "Aplikacionet e çastit nuk kërkojnë instalim." "Informacioni mbi aplikacionin" @@ -839,4 +842,11 @@ "Lejo %1$s për të shfaqur pjesë nga çdo aplikacion" "Lejo" "Refuzo" + "Trokit për të planifikuar \"Kursyesin e baterisë\"" + "Aktivizo automatikisht kur bateria është në %d%%" + "Jo" + "Planifikimi i \"Kursyesit të baterisë\" është aktivizuar" + "\"Kursyesi i baterisë\" do të aktivizohet automatikisht kur bateria të jetë nën %d%%." + "Cilësimet" + "E kuptova" diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index 8e36119f36492833d3fd4cdc71195b00bd684926..dd358504c9b1093ef82800f9ed271a39df0150f3 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -34,17 +34,13 @@ "Текуће" "Обавештења" "Ниво напуњености батерије је низак" - "Батерија је скоро празна. Укључите Уштеду батерије" "Још %s" "Још %s, на основу коришћења остало је око %s" "Још %s, остало је око %s" "Још %s. Уштеда батерије је укључена." - - - - - - + "Пуњење преко USB-а није успело. Користите пуњач који сте добили уз уређај." + "Пуњење преко USB-а није успело" + "Користите пуњач који сте добили уз уређај" "Подешавања" "Желите ли да укључите Уштеду батерије?" "Укључи" @@ -77,11 +73,10 @@ "Снимак екрана" "Чување снимка екрана..." "Чување снимка екрана..." - "Снимак екрана се чува" "Снимак екрана је сачуван" "Додирните да бисте видели снимак екрана" - "Не можете да направите снимак екрана" - "Дошло је до проблема при чувању снимка екрана" + "Чување снимка екрана није успело" + "Пробајте да поново направите снимак екрана" "Чување снимка екрана није успело због ограниченог меморијског простора" "Апликација или организација не дозвољавају прављење снимака екрана" "Опције USB преноса датотека" @@ -152,7 +147,6 @@ "Повезано је." "Повезивање." "GPRS" - "1 X" "HSPA" "3G" "3.5G" @@ -212,8 +206,7 @@ "Режим рада у авиону је укључен." "Режим рада у авиону је искључен." "Режим рада у авиону је укључен." - - + "Режим Не узнемиравај је укључен." "Подешавање Не узнемиравај је укључено, потпуна тишина." "Подешавање Не узнемиравај је укључено, само аларми." "Не узнемиравај." @@ -280,7 +273,7 @@ "Витрина са посластицама" "Чувар екрана" "Етернет" - "Притисните и задржите иконе за још опција" + "Додирните и задржите иконе за још опција" "Не узнемиравај" "Само приоритетни прекиди" "Само аларми" @@ -356,7 +349,7 @@ "Укључује се по заласку сунца" "До изласка сунца" "Укључује се у %s" - "До %s" + "До %s" "NFC" "NFC је онемогућен" "NFC је омогућен" @@ -440,8 +433,8 @@ "%s ће почети да снима све што се приказује на екрану." "Не приказуј поново" "Обриши све" - - + "Управљајте обавештењима" + "Режим Не узнемиравај крије обавештења" "Започни одмах" "Нема обавештења" "Профил се можда надгледа" @@ -547,9 +540,8 @@ "%1$s. Додирните да бисте подесили на вибрацију." "%1$s. Додирните да бисте искључили звук." "Контроле за јачину звука за %s" - "Вибрација за позиве и обавештења је укључена" - "Мелодија звона за позиве и обавештење је искључена" - "Мелодија звона за позиве и обавештења је укључена" + + "Излаз медија" "Излаз за телефонски позив" "Није пронађен ниједан уређај" @@ -638,6 +630,7 @@ "%1$s %2$s" "контроле обавештења" "опције за одлагање обавештења" + "Одложи" "ОПОЗОВИ" "Одложено је за %1$s" @@ -703,6 +696,8 @@ "Батерија" "Сат" "Наглавне слушалице" + + "Слушалице су повезане" "Наглавне слушалице су повезане" "Уштеда података" @@ -737,8 +732,9 @@ "Десно дугме за кôд тастера" "Лева икона" "Десна икона" - "Превуците да бисте додали плочице" + "Задржите и превуците да бисте додали плочице" "Превуците овде да бисте уклонили" + "Треба да изаберете најмање 6 плочица" "Измени" "Време" @@ -825,6 +821,7 @@ "Снимци екрана" "Опште поруке" "Меморијски простор" + "Савети" "Инстант апликације" "Инстант апликације не захтевају инсталацију." "Информације о апликацији" @@ -842,7 +839,9 @@ "Замени" "Апликације покренуте у позадини" "Додирните за детаље о батерији и потрошњи података" - "Желите да онемогућите мобилне податке?" + "Желите ли да искључите мобилне податке?" + "Нећете имати приступ подацима или интернету преко мобилног оператера %s. Интернет ће бити доступан само преко Wi-Fi везе." + "мобилни оператер" "Подешавања не могу да верификују ваш одговор јер апликација скрива захтев за дозволу." "Желите ли да дозволите апликацији %1$s да приказује исечке из апликације %2$s?" "– Може да чита податке из апликације %1$s" @@ -850,4 +849,11 @@ "Дозволите апликацији %1$s да приказује исечке из било које апликације" "Дозволи" "Одбиј" + "Додирните да бисте направили распоред за уштеду батерије" + "Укључује се аутоматски када је батерија на %d%%" + "Не, хвала" + "Распоред за уштеду батерије је укључен" + "Уштеда батерије ће се аутоматски укључивати када батерија падне испод %d%%." + "Подешавања" + "Важи" diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index bf08031a16b0e9b04e1faa7f06c03775f1d1abf1..e1fb706c4b0b244a57c92ab61fb8dd33bd2a1498 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -33,7 +33,6 @@ "Pågående" "Aviseringar" "Lågt batteri" - "Batterinivån är låg. Aktivera batterisparläge" "%s kvar" "%s återstår, cirka %s kvar utifrån din användning" "%s återstår, cirka %s kvar" @@ -73,11 +72,12 @@ "Skärmdump" "Skärmdumpen sparas ..." "Skärmdumpen sparas ..." - "Skärmdumpen sparas" "Skärmdumpen har sparats" "Visa skärmdumpen genom att trycka här" - "Det gick inte att ta en skärmdump" - "Det gick inte att spara skärmdumpen" + + + + "Det går inte att spara skärmdumpen eftersom lagringsutrymmet inte räcker" "Appen eller organisationen tillåter inte att du tar skärmdumpar" "Överföringsalternativ" @@ -348,7 +348,8 @@ "På från solnedgången" "Till soluppgången" "På från %s" - "Till %s" + + "NFC" "NFC är inaktiverat" "NFC är aktiverat" @@ -432,7 +433,9 @@ "%s tar en bild av allt som visas på skärmen." "Visa inte igen" "Rensa alla" - "Aviseringar döljs av Stör ej" + + + "Aviseringar döljs av Stör ej" "Starta nu" "Inga aviseringar" "Det kan hända att profilen övervakas" @@ -538,7 +541,8 @@ "%1$s. Tryck här om du vill aktivera vibrationsläget." "%1$s. Tryck här om du vill stänga av ljudet." "Volymkontroller för %s" - "Ljudet sätts på för samtal och aviseringar" + + "Medieuppspelning" "Utdata för samtal" "Inga enheter hittades" @@ -625,6 +629,8 @@ "%1$s %2$s" "inställningar för aviseringar" "alternativ för att snooza aviseringar" + + "ÅNGRA" "Snoozad i %1$s" @@ -688,6 +694,8 @@ "Batteri" "Klocka" "Headset" + + "Hörlurar anslutna" "Headset anslutet" "Databesparing" @@ -811,6 +819,7 @@ "Skärmdumpar" "Allmänna meddelanden" "Lagring" + "Tips" "Snabbappar" "Snabbappar behöver inte installeras." "Info om appen" @@ -838,4 +847,11 @@ "Tillåt att bitar av vilken app som helst visas i %1$s" "Tillåt" "Neka" + "Tryck för att skapa ett schema för batterisparläget" + "Aktivera automatiskt när batterinivån är på %d %%" + "Nej tack" + "Schema för Batterisparläge aktiverat" + "Batterisparläget aktiveras automatiskt när batterinivån är under %d %%." + "Inställningar" + "OK" diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 4cfa448c7863c8648d4e30fac1ad095ad951168a..570234eff62b470e730ceffc18488ba94284c481 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -33,7 +33,6 @@ "Inaendelea" "Arifa" "Betri inaisha" - "Chaji imepungua. Washa Kiokoa Betri" "Imebakisha %s" "Imesalia %s, itadumu takribani %s kulingana na jinsi unavyotumia" "Imesalia %s, itadumu takribani %s" @@ -73,11 +72,10 @@ "Picha ya skrini" "Inahifadhi picha ya skrini..." "Inahifadhi picha ya skrini..." - "Inahifadhi picha ya skrini" "Imehifadhi picha ya skrini" "Gusa ili utazame picha ya skrini uliyohifadhi" - "Imeshindwa kupiga picha ya skrini" - "Hitilafu imetokea wakati wa kuhifadhi picha ya skrini" + "Imeshindwa kuhifadhi picha ya skrini" + "Jaribu kupiga picha ya skrini tena" "Imeshindwa kuhifadhi picha ya skrini kwa sababu nafasi haitoshi" "Programu au shirika lako halikuruhusu kupiga picha za skrini" "Machaguo ya uhamisho wa faili la USB" @@ -273,8 +271,7 @@ "Sanduku la Vitindamlo" "Taswira ya skrini" "Ethernet" - - + "Gusa na ushikilie aikoni ili upate chaguo zaidi" "Usinisumbue" "Kipaumbele tu" "Kengele pekee" @@ -349,7 +346,7 @@ "Itawashwa machweo" "Hadi macheo" "Itawashwa saa %s" - "Hadi %s" + "Hadi %s" "NFC" "NFC imezimwa" "NFC imewashwa" @@ -433,7 +430,8 @@ "%s itaanza kupiga picha kila kitu kinachoonyeshwa kwenye skrini yako." "Usionyeshe tena" "Futa zote" - "Kipengele cha Usinisumbue kinaficha arifa" + "Dhibiti arifa" + "Kipengele cha Usinisumbue kinaficha arifa" "Anza sasa" "Hakuna arifa" "Huenda wasifu ukafuatiliwa" @@ -539,7 +537,8 @@ "%1$s. Gusa ili uweke mtetemo." "%1$s. Gusa ili usitishe." "Vidhibiti %s vya sauti" - "Itatoa mlio arifa ikitumwa au simu ikipigwa" + + "Vifaa vya kutoa maudhui" "Vifaa vya kutoa sauti ya simu" "Hakuna vifaa vilivyopatikana" @@ -626,6 +625,7 @@ "%1$s %2$s" "vidhibiti vya arifa" "chaguo za kuahirisha arifa" + "Ahirisha" "TENDUA" "Imeahirishwa kwa %1$s" @@ -689,6 +689,8 @@ "Betri" "Saa" "Vifaa vya sauti" + + "Imeunganisha spika za masikioni" "Imeunganisha vifaa vya sauti" "Kiokoa Data" @@ -812,6 +814,7 @@ "Picha za skrini" "Ujumbe wa Jumla" "Hifadhi" + "Vidokezo" "Programu Zinazofunguka Papo Hapo" "Huhitaji kusakinisha programu zinazofunguka papo hapo." "Maelezo ya programu" @@ -839,4 +842,11 @@ "Ruhusu %1$s ionyeshe vipengee kutoka programu yoyote" "Ruhusu" "Kataa" + "Gusa ili uratibu wakati wa kuwasha Kiokoa Betri" + "Weka kiokoa betri kiwake kiotomatiki wakati chaji ya betri imefika %d%%" + "Hapana, asante" + "Imewasha Kiokoa Betri kilichoratibiwa" + "Kiokoa Betri kitawaka kiotomatiki baada ya chaji ya betri kufika chini ya %d%%." + "Mipangilio" + "Nimeelewa" diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index 39bba21506c3463b34f97a6d3e213e4a80b71e0a..419c288f778f791375379601ae3d98201d7060ad 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -33,7 +33,6 @@ "செயலில் இருக்கும்" "அறிவிப்புகள்" "பேட்டரி குறைவு" - "பேட்டரி குறைவாக உள்ளது. பேட்டரி சேமிப்பானை ஆன் செய்யவும்" "%s உள்ளது" "%s பேட்டரி மீதமுள்ளது. உங்கள் உபயோகத்தைப் பொறுத்து, இதைச் சுமார் %s மணி நேரத்திற்குப் பயன்படுத்தலாம்" "%s மீதமுள்ளது, இதைச் சுமார் %s மணி நேரத்திற்குப் பயன்படுத்தலாம்" @@ -73,11 +72,12 @@ "ஸ்கிரீன் ஷாட்" "ஸ்க்ரீன் ஷாட்டைச் சேமிக்கிறது…" "ஸ்க்ரீன் ஷாட்டைச் சேமிக்கிறது…" - "ஸ்கிரீன் ஷாட் சேமிக்கப்படுகிறது" "ஸ்கிரீன் ஷாட் சேமிக்கப்பட்டது" "ஸ்கிரீன்ஷாட்டைப் பார்க்க, தட்டவும்" - "ஸ்கிரீன் ஷாட் எடுக்க முடியவில்லை" - "ஸ்கிரீன்ஷாட்டைச் சேமிப்பதில் சிக்கல் ஏற்பட்டது" + + + + "போதுமான சேமிப்பிடம் இல்லாததால் ஸ்கிரீன்ஷாட்டைச் சேமிக்க முடியவில்லை" "ஸ்கிரீன் ஷாட்டுகளை எடுப்பதை, பயன்பாடு அல்லது உங்கள் நிறுவனம் அனுமதிக்கவில்லை" "USB கோப்பு இடமாற்ற விருப்பங்கள்" @@ -273,8 +273,7 @@ "இனிப்பு வடிவங்கள்" "ஸ்கிரீன் சேவர்" "ஈதர்நெட்" - - + "மேலும் விருப்பங்களைக் காண, ஐகான்களைத் தொட்டுப் பிடிக்கவும்" "தொந்தரவு செய்யாதே" "முதன்மை மட்டும்" "அலாரங்கள் மட்டும்" @@ -349,7 +348,8 @@ "மாலையில் ஆன் செய்" "சூரிய உதயம் வரை" "%sக்கு ஆன் செய்" - "%s மணி வரை" + + "NFC" "NFC முடக்கப்பட்டது" "NFC இயக்கப்பட்டது" @@ -433,7 +433,10 @@ "திரையில் காட்டப்படும் அனைத்தையும் %s படமெடுக்கும்." "மீண்டும் காட்டாதே" "எல்லாவற்றையும் அழி" - "\'தொந்தரவு செய்ய வேண்டாம்\' பயன்முறையானது அறிவிப்புகளைக் காட்டாமல் மறைக்கிறது" + + + + "இப்போது தொடங்கு" "அறிவிப்புகள் இல்லை" "சுயவிவரம் கண்காணிக்கப்படலாம்" @@ -539,7 +542,8 @@ "%1$s. அதிர்விற்கு அமைக்க, தட்டவும்." "%1$s. ஒலியடக்க, தட்டவும்." "%s ஒலியளவுக் கட்டுப்பாடுகள்" - "அழைப்புகள் மற்றும் அறிவிப்புகளுக்கு ஒலியெழுப்பும்" + + "மீடியா வெளியீடு" "ஃபோன் அழைப்பு வெளியீடு" "சாதனங்கள் எதுவும் இல்லை" @@ -626,6 +630,8 @@ "%1$s %2$s" "அறிவிப்புக் கட்டுப்பாடுகள்" "அறிவிப்பை உறக்கநிலையாக்கும் விருப்பங்கள்" + + "செயல்தவிர்" "உறக்கநிலையில் வைத்திருந்த நேரம்: %1$s" @@ -689,6 +695,8 @@ "பேட்டரி" "கடிகாரம்" "ஹெட்செட்" + + "ஹெட்ஃபோன்கள் இணைக்கப்பட்டன" "ஹெட்செட் இணைக்கப்பட்டது" "டேட்டா சேமிப்பான்" @@ -723,11 +731,9 @@ "வலப்புற விசைக்குறியீடு" "இடப்புற ஐகான்" "வலப்புற ஐகான்" - - + "கட்டங்களைச் சேர்க்க, அவற்றைப் பிடித்து இழுக்கவும்" "அகற்ற, இங்கே இழுக்கவும்" - - + "குறைந்தது 6 கட்டங்கள் தேவை" "மாற்று" "நேரம்" @@ -814,6 +820,8 @@ "ஸ்கிரீன் ஷாட்டுகள்" "பொதுச் செய்திகள்" "சேமிப்பிடம்" + + "இன்ஸ்டண்ட் பயன்பாடுகள்" "இன்ஸ்டண்ட் பயன்பாடுகளுக்கு நிறுவல் தேவையில்லை." "ஆப்ஸ் தகவல்" @@ -831,12 +839,9 @@ "மாற்று" "பின்னணியில் இயங்கும் பயன்பாடுகள்" "பேட்டரி மற்றும் தரவு உபயோக விவரங்களைக் காண, தட்டவும்" - - - - - - + "மொபைல் டேட்டாவை ஆஃப் செய்யவா?" + "%s மொபைல் நிறுவனத்தின் மூலம் டேட்டா அல்லது இணையத்தை உங்களால் பயன்படுத்த முடியாது. வைஃபை வழியாக மட்டுமே இணையத்தைப் பயன்படுத்த முடியும்." + "உங்கள் மொபைல் நிறுவனம்" "அனுமதிக் கோரிக்கையைப் பயன்பாடு மறைப்பதால், அமைப்புகளால் உங்கள் பதிலைச் சரிபார்க்க முடியாது." "%1$s பயன்பாட்டை, %2$s பயன்பாட்டின் விழிப்பூட்டல்களைக் காண்பிக்க அனுமதிக்கவா?" "- இது, %1$s பயன்பாட்டிலிருந்து தகவலைப் படிக்கும்" @@ -844,4 +849,18 @@ "எல்லா பயன்பாட்டிலிருந்தும் விழிப்பூட்டல்களைக் காண்பிக்க, %1$s பயன்பாட்டை அனுமதி" "அனுமதி" "நிராகரி" + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index 5c9fec6663a3f96b327d766263236e9617ba56db..5f71c991a2324019c7bcd17687767a7162fb4e74 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -33,7 +33,6 @@ "కొనసాగుతున్నవి" "నోటిఫికేషన్‌లు" "బ్యాటరీ తక్కువగా ఉంది" - "బ్యాటరీ తక్కువగా ఉంది. బ్యాటరీ సేవర్‌ని ఆన్ చేయండి" "%s మిగిలి ఉంది" "%s మిగిలి ఉంది, మీ ఉపయోగం ఆధారంగా దాదాపు %s ఉండవచ్చు" "%s మిగిలి ఉంది, దాదాపు %s ఉండవచ్చు" @@ -73,11 +72,10 @@ "స్క్రీన్‌షాట్" "స్క్రీన్‌షాట్‌ను సేవ్ చేస్తోంది…" "స్క్రీన్‌షాట్‌ను సేవ్ చేస్తోంది…" - "స్క్రీన్‌షాట్ సేవ్ చేయబడుతోంది" "స్క్రీన్‌షాట్ సేవ్ చేయబడింది" "మీ స్క్రీన్‌షాట్‌ను వీక్షించడానికి నొక్కండి" - "స్క్రీన్‌షాట్‌ను క్యాప్చర్ చేయడం సాధ్యపడలేదు" - "స్క్రీన్‌షాట్‌ని సేవ్ చేస్తున్నప్పుడు సమస్య ఏర్పడింది" + "స్క్రీన్‌షాట్‌ని సేవ్ చేయడం సాధ్యం కాలేదు" + "స్క్రీన్‌షాట్ తీయడానికి మళ్లీ ప్రయత్నించండి" "నిల్వ స్థలం పరిమితంగా ఉన్న కారణంగా స్క్రీన్‌షాట్‌ను సేవ్ చేయడం సాధ్యపడదు" "స్క్రీన్‌షాట్‌లు తీయడానికి యాప్ లేదా మీ సంస్థ అనుమతించలేదు" "USB ఫైల్ బదిలీ ఎంపికలు" @@ -273,8 +271,7 @@ "డెజర్ట్ కేస్" "స్క్రీన్ సేవర్" "ఈథర్‌నెట్" - - + "మరిన్ని ఎంపికల కోసం చిహ్నాలను నొక్కి, పట్టుకోండి" "అంతరాయం కలిగించవద్దు" "ప్రాధాన్యత మాత్రమే" "అలారాలు మాత్రమే" @@ -349,7 +346,7 @@ "సూర్యాస్తమయానికి" "సూర్యోదయం వరకు" "%sకి" - "%s వరకు" + "%s వరకు" "NFC" "NFC నిలిపివేయబడింది" "NFC ప్రారంభించబడింది" @@ -433,7 +430,9 @@ "%s మీ స్క్రీన్‌పై కనిపించే ప్రతిదాన్ని క్యాప్చర్ చేయడం ప్రారంభిస్తుంది." "మళ్లీ చూపవద్దు" "అన్నీ క్లియర్ చేయండి" - "అంతరాయం కలిగించవద్దు నోటిఫికేషన్‌లను దాస్తుంది" + "నోటిఫికేషన్‌లను నిర్వహించండి" + + "ఇప్పుడే ప్రారంభించు" "నోటిఫికేషన్‌లు లేవు" "ప్రొఫైల్‌ని పర్యవేక్షించవచ్చు" @@ -539,7 +538,8 @@ "%1$s. వైబ్రేట్ అయ్యేలా సెట్ చేయడం కోసం నొక్కండి." "%1$s. మ్యూట్ చేయడానికి నొక్కండి." "%s వాల్యూమ్ నియంత్రణలు" - "కాల్‌లు మరియు నోటిఫికేషన్‌లు రింగ్ అవుతాయి" + + "మీడియా అవుట్‌పుట్" "ఫోన్ కాల్ అవుట్‌పుట్" "పరికరాలు ఏవీ కనుగొనబడలేదు" @@ -626,6 +626,7 @@ "%1$s %2$s" "నోటిఫికేషన్ నియంత్రణలు" "నోటిఫికేషన్ తాత్కాలిక ఆపివేత ఎంపికలు" + "తాత్కాలికంగా ఆపివేయి" "చర్య రద్దు చేయి" "%1$s వరకు తాత్కాలికంగా ఆపివేయబడింది" @@ -689,6 +690,8 @@ "బ్యాటరీ" "గడియారం" "హెడ్‌సెట్" + + "హెడ్‌ఫోన్‌లు కనెక్ట్ చేయబడ్డాయి" "హెడ్‌సెట్ కనెక్ట్ చేయబడింది" "డేటా సేవర్" @@ -723,11 +726,9 @@ "కుడివైపు ఉన్న కీకోడ్" "ఎడమ వైపు చిహ్నం" "కుడివైపు ఉన్న చిహ్నం" - - + "టైల్‌లను జోడించడం కోసం పట్టుకుని, లాగండి" "తీసివేయడానికి ఇక్కడికి లాగండి" - - + "మీ వద్ద కనీసం 6 టైల్‌లు ఉండాలి" "సవరించు" "సమయం" @@ -814,6 +815,8 @@ "స్క్రీన్‌షాట్‌లు" "సాధారణ సందేశాలు" "నిల్వ" + + "తక్షణ అనువర్తనాలు" "తక్షణ అనువర్తనాలకు ఇన్‌స్టాలేషన్ అవసరం లేదు." "యాప్ సమాచారం" @@ -831,12 +834,9 @@ "భర్తీ చేయి" "నేపథ్యంలో అమలు అవుతున్న ఆప్‌లు" "బ్యాటరీ మరియు డేటా వినియోగ వివరాల కోసం నొక్కండి" - - - - - - + "మొబైల్ డేటాని ఆఫ్ చేయాలా?" + "మీకు %s ద్వారా డేటా లేదా ఇంటర్నెట్‌కు యాక్సెస్ ఉండదు. Wi-Fi ద్వారా మాత్రమే ఇంటర్నెట్ అందుబాటులో ఉంటుంది." + "మీ క్యారియర్" "అనుమతి అభ్యర్థనకు ఒక యాప్ అడ్డు తగులుతున్నందున సెట్టింగ్‌లు మీ ప్రతిస్పందనను ధృవీకరించలేకపోయాయి." "%2$s స్లైస్‌లను చూపించడానికి %1$sని అనుమతించండి?" "- ఇది %1$s నుండి సమాచారాన్ని చదువుతుంది" @@ -844,4 +844,18 @@ "ఏ యాప్ నుండి అయినా స్లైస్‌లను చూపించడానికి %1$sని అనుమతించండి" "అనుమతించు" "తిరస్కరించు" + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index d3aa42665ab2ad6ebc21932e6aa9318789a83349..6794a091f40f14aa445e8f4db89269d7eb0e3407 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -33,7 +33,6 @@ "ดำเนินอยู่" "การแจ้งเตือน" "แบตเตอรี่เหลือน้อย" - "แบตเตอรี่เหลือน้อย โปรดเปิดโหมดประหยัดแบตเตอรี่" "เหลืออีก %s" "เหลือ %s หรืออีกราว %s ขึ้นอยู่กับการใช้งานของคุณ" "เหลือ %s หรืออีกราว %s" @@ -73,11 +72,10 @@ "ภาพหน้าจอ" "กำลังบันทึกภาพหน้าจอ..." "กำลังบันทึกภาพหน้าจอ..." - "กำลังบันทึกภาพหน้าจอ" "บันทึกภาพหน้าจอแล้ว" "แตะเพื่อดูภาพหน้าจอ" - "จับภาพหน้าจอไม่ได้" - "พบปัญหาขณะบันทึกภาพหน้าจอ" + "บันทึกภาพหน้าจอไม่ได้" + "ลองถ่ายภาพหน้าจออีกครั้ง" "บันทึกภาพหน้าจอไม่ได้เนื่องจากพื้นที่เก็บข้อมูลมีจำกัด" "แอปหรือองค์กรของคุณไม่อนุญาตให้จับภาพหน้าจอ" "ตัวเลือกการถ่ายโอนไฟล์ USB" @@ -273,8 +271,7 @@ "ชั้นแสดงของหวาน" "โปรแกรมรักษาหน้าจอ" "อีเทอร์เน็ต" - - + "แตะไอคอนค้างไว้เพื่อดูตัวเลือกอื่นๆ" "ห้ามรบกวน" "เฉพาะเรื่องสำคัญ" "เฉพาะปลุกเท่านั้น" @@ -349,7 +346,7 @@ "เปิดตอนพระอาทิตย์ตก" "จนพระอาทิตย์ขึ้น" "เปิดเวลา %s" - "จนถึง %s" + "จนถึง %s" "NFC" "NFC ถูกปิดใช้งาน" "เปิดใช้งาน NFC แล้ว" @@ -433,7 +430,8 @@ "%s จะเริ่มจับภาพทุกอย่างที่แสดงบนหน้าจอ" "ไม่ต้องแสดงข้อความนี้อีก" "ล้างทั้งหมด" - "โหมดห้ามรบกวนซ่อนการแจ้งเตือนอยู่" + "จัดการการแจ้งเตือน" + "โหมดห้ามรบกวนซ่อนการแจ้งเตือนอยู่" "เริ่มเลย" "ไม่มีการแจ้งเตือน" "อาจมีการตรวจสอบโปรไฟล์" @@ -539,7 +537,8 @@ "%1$s แตะเพื่อตั้งค่าให้สั่น" "%1$s แตะเพื่อปิดเสียง" "ตัวควบคุมระดับเสียง %s" - "สายเรียกเข้าและการแจ้งเตือนจะส่งเสียง" + + "เอาต์พุตสื่อ" "เอาต์พุตการโทรออก" "ไม่พบอุปกรณ์" @@ -626,6 +625,7 @@ "%1$s %2$s" "ส่วนควบคุมการแจ้งเตือน" "ตัวเลือกการปิดเสียงแจ้งเตือนชั่วคราว" + "ปิดเสียงเตือนชั่วคราว" "เลิกทำ" "ปิดเสียงเตือนชั่วคราวไว้เป็นเวลา %1$s" @@ -689,6 +689,8 @@ "แบตเตอรี่" "นาฬิกา" "ชุดหูฟัง" + + "เชื่อมต่อหูฟังแล้ว" "เชื่อมต่อชุดหูฟังแล้ว" "โปรแกรมประหยัดอินเทอร์เน็ต" @@ -812,6 +814,7 @@ "ภาพหน้าจอ" "ข้อความทั่วไป" "พื้นที่เก็บข้อมูล" + "คำแนะนำ" "Instant App" "Instant Apps ไม่ต้องใช้การติดตั้ง" "ข้อมูลแอป" @@ -839,4 +842,11 @@ "อนุญาตให้ %1$s แสดงส่วนต่างๆ จากแอปใดก็ได้" "อนุญาต" "ปฏิเสธ" + "แตะเพื่อตั้งเวลาโหมดประหยัดแบตเตอรี่" + "เปิดโดยอัตโนมัติเมื่อแบตเตอรี่เหลือ %d%%" + "ไม่เป็นไร" + "เปิดใช้กำหนดเวลาโหมดประหยัดแบตเตอรี่อยู่" + "โหมดประหยัดแบตเตอรี่จะเปิดโดยอัตโนมัติเมื่อแบตเตอรี่เหลือไม่ถึง %d%%" + "การตั้งค่า" + "รับทราบ" diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index ea73df8ec2c32d632d5baed1f86a8fc4d531b7a7..f812956721e39886eb4730005d6c14f86d8ec352 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -33,17 +33,13 @@ "Nagpapatuloy" "Mga Notification" "Mahina na ang baterya" - "Paubos na ang baterya. I-on ang Pangtipid sa Baterya" "%s na lang ang natitira" "%s na lang ang natitira, humigit-kumulang %s ang natitira batay sa iyong paggamit" "%s na lang ang natitira, humigit-kumulang %s ang natitira" "%s na lang ang natitira. Naka-on ang Pangtipid sa Baterya." - - - - - - + "Hindi makapag-charge sa pamamagitan ng USB. Gamitin ang charger na kasama ng iyong device." + "Hindi makapag-charge sa pamamagitan ng USB" + "Gamitin ang charger na kasama ng iyong device" "Mga Setting" "I-on ang Pangtipid sa Baterya?" "I-on" @@ -76,11 +72,10 @@ "Screenshot" "Sine-save ang screenshot…" "Sine-save ang screenshot…" - "Sine-save ang screenshot" "Na-save ang screenshot" "I-tap upang tingnan ang iyong screenshot" - "Hindi makunan ng screenshot" - "Nagkaproblema habang sine-save ang screenshot" + "Hindi ma-save ang screenshot" + "Subukang kumuhang muli ng screenshot" "Hindi ma-save ang screenshot dahil sa limitadong espasyo ng storage" "Hindi pinahihintulutan ng app o ng iyong organisasyon ang pagkuha ng mga screenshot" "Opsyon paglipat ng USB file" @@ -151,7 +146,6 @@ "Nakakonekta." "Kumokonekta." "GPRS" - "1 X" "HSPA" "3G" "3.5G" @@ -211,8 +205,7 @@ "Naka-on ang Airplane mode." "Na-off ang Airplane mode." "Na-on ang Airplane mode." - - + "Naka-on ang huwag istorbohin." "Naka-on ang huwag gambalain, ganap na katahimikan." "Naka-on ang huwag istorbohin, mga alarm lang." "Huwag istorbohin." @@ -278,7 +271,7 @@ "Dessert Case" "Screen saver" "Ethernet" - "Pindutin nang matagal ang mga icon para sa higit pang opsyon" + "Pindutin nang matagal ang mga icon para sa higit pang opsyon" "Huwag istorbohin" "Priyoridad lang" "Mga alarm lang" @@ -353,7 +346,7 @@ "Mao-on sa sunset" "Hanggang mag-umaga" "Mao-on sa ganap na %s" - "Hanggang %s" + "Hanggang %s" "NFC" "Naka-disable ang NFC" "Naka-enable ang NFC" @@ -437,8 +430,8 @@ "Sisimulan ng i-capture ng %s ang lahat ng ipinapakita sa iyong screen." "Huwag ipakitang muli" "I-clear lahat" - - + "Pamahalaan ang mga notification" + "Itinatago ng Huwag Istorbohin ang mga notification" "Magsimula ngayon" "Walang mga notification" "Maaaring subaybayan ang profile" @@ -544,9 +537,8 @@ "%1$s. I-tap upang itakda na mag-vibrate." "%1$s. I-tap upang i-mute." "Mga kontrol ng volume ng %s" - "Magva-vibrate ang mga tawag at notification" - "Mamu-mute ang mga tawag at notification" - "Magri-ring ang mga tawag at notification" + + "Output ng media" "Output ng tawag sa telepono" "Walang nakitang device" @@ -633,6 +625,7 @@ "%1$s %2$s" "mga kontrol ng notification" "mga opsyon sa pag-snooze ng notification" + "I-snooze" "I-UNDO" "Na-snooze ng %1$s" @@ -696,6 +689,8 @@ "Baterya" "Orasan" "Headset" + + "Nakakonekta ang mga headphone" "Nakakonekta ang headset" "Data Saver" @@ -730,8 +725,9 @@ "Kanang keycode" "Icon ng kaliwa" "Icon ng kanan" - "Mag-drag upang magdagdag ng mga tile" + "Pindutin nang matagal at i-drag para magdagdag ng mga tile" "I-drag dito upang alisin" + "Kailangan mo ng hindi bababa sa 6 na tile" "I-edit" "Oras" @@ -818,6 +814,7 @@ "Mga Screenshot" "Mga Pangkalahatang Mensahe" "Storage" + "Mga Hint" "Instant Apps" "Hindi kailangang i-install ang mga instant na app." "Impormasyon ng app" @@ -835,7 +832,9 @@ "Palitan" "Tumatakbo ang mga app sa background" "I-tap para sa mga detalye tungkol sa paggamit ng baterya at data" - "I-off ang mobile data?" + "I-off ang mobile data?" + "Hindi ka magkaka-access sa data o internet sa pamamagitan ng %s. Available lang ang internet sa pamamagitan ng Wi-Fi." + "ang iyong carrier" "Hindi ma-verify ng Mga Setting ang iyong tugon dahil may app na tumatakip sa isang kahilingan sa pagpapahintulot." "Payagan ang %1$s na ipakita ang mga slice ng %2$s?" "- Nakakabasa ito ng impormasyon mula sa %1$s" @@ -843,4 +842,11 @@ "Payagan ang %1$s na ipakita ang mga slice mula sa anumang app" "Payagan" "Tanggihan" + "I-tap para iiskedyul ang Pangtipid sa Baterya" + "Awtomatikong i-on kapag %d%% na ang baterya" + "Hindi, salamat na lang" + "Na-on ang iskedyul ng Pangtipid sa Baterya" + "Awtomatikong mao-on ang Pangtipid sa Baterya kapag mas mababa na sa %d%% ang baterya." + "Mga Setting" + "OK" diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index 6c86cf4c0ad53124af30edc6cb43d216f43eaba3..06d0500867a5de95cdb2396b38ee17e7bfb23773 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -33,7 +33,6 @@ "Sürüyor" "Bildirimler" "Pil gücü düşük" - "Pil az. Pil Tasarrufu\'nu açın" "%s kaldı" "%s kaldı (kullanımınıza göre yaklaşık %s)" "%s (yaklaşık %s) kaldı" @@ -73,11 +72,10 @@ "Ekran görüntüsü" "Ekran görüntüsü kaydediliyor..." "Ekran görüntüsü kaydediliyor..." - "Ekran görüntüsü kaydediliyor" "Ekran görüntüsü kaydedildi" "Ekran görüntünüzü görmek için dokunun" - "Ekran görüntüsü alınamadı" - "Ekran görüntüsü kaydedilirken sorun oluştu" + "Ekran görüntüsü kaydedilemedi" + "Tekrar ekran görüntüsü almayı deneyin" "Depolama alanı sınırlı olduğundan ekran görüntüsü kaydedilemiyor" "Uygulama veya kuruluşunuz, ekran görüntüsü alınmasına izin vermiyor." "USB dosya aktarım seçenekleri" @@ -273,8 +271,7 @@ "Tatlı Kutusu" "Ekran koruyucu" "Ethernet" - - + "Daha fazla seçenek için simgelere dokunun ve basılı tutun" "Rahatsız etmeyin" "Yalnızca öncelikliler" "Yalnızca alarmlar" @@ -349,7 +346,7 @@ "Gün batımı açılacak" "Gün doğumuna kadar" "Şu saatte açılacak: %s" - "Şu saate kadar: %s" + "Şu saate kadar: %s" "NFC" "NFC devre dışı" "NFC etkin" @@ -433,7 +430,8 @@ "%s, ekranınızda görüntülenen her şeyi kaydetmeye başlayacak." "Bir daha gösterme" "Tümünü temizle" - "Rahatsız Etmeyin ayarı bildirimleri gizliyor" + "Bildirimleri yönet" + "Rahatsız Etmeyin ayarı bildirimleri gizliyor" "Şimdi başlat" "Bildirim yok" "Profil izlenebilir" @@ -539,7 +537,8 @@ "%1$s. Titreşime ayarlamak için dokunun." "%1$s. Sesi kapatmak için dokunun." "%s ses denetimleri" - "Çağrılar ve bildirimler zili çaldıracak" + + "Medya çıkışı" "Telefon çağrısı çıkışı" "Cihaz bulunamadı" @@ -626,6 +625,7 @@ "%1$s %2$s" "Bildirim kontrolleri" "bildirim erteleme seçenekleri" + "Ertele" "GERİ AL" "%1$s süreyle ertelendi" @@ -689,6 +689,8 @@ "Pil" "Saat" "Mikrofonlu kulaklık" + + "Mikrofonlu kulaklık bağlı" "Mikrofonlu kulaklık bağlı" "Veri Tasarrufu" @@ -812,6 +814,7 @@ "Ekran görüntüleri" "Genel Mesajlar" "Depolama alanı" + "İpuçları" "Hazır Uygulamalar" "Hazır uygulamaların yüklenmesi gerekmez." "Uygulama bilgileri" @@ -839,4 +842,11 @@ "%1$s uygulamasının tüm uygulamalardan dilimleri göstermesine izin ver" "İzin ver" "Reddet" + "Pil Tasarrufunu programlamak için dokunun" + "Pil %%%d düzeyinin altına düştüğünde otomatik olarak aç" + "Hayır, teşekkürler" + "Pil Tasarruf programı açık" + "Pil %%%d düzeyinin altına düştüğünde Pil Tasarrufu otomatik olarak açılacaktır." + "Ayarlar" + "Anladım" diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index 59957fea147792bd64fc861f12e57fe221ef439f..0be01d625de9b4b60c029725123f30ddc8928061 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -35,7 +35,6 @@ "Поточні" "Сповіщення" "Низький рівень заряду акумулятора" - "Акумулятор майже розрядився. Увімкніть режим економії заряду акумулятора" "Залишилося %s" "На основі використання залишилося %s – близько %s" "Залишилося %s – близько %s" @@ -75,11 +74,10 @@ "Знімок екрана" "Збереження знімка екрана..." "Збереження знімка екрана..." - "Знімок екрана зберігається" "Знімок екрана збережено" "Торкніться, щоб переглянути знімок екрана" - "Не вдалося зробити знімок екрана" - "Не вдалося зберегти знімок екрана" + "Не вдалося зберегти знімок екрана" + "Спробуйте зробити знімок екрана ще раз" "Не вдалося зберегти знімок екрана через обмежений обсяг пам’яті" "Додаток або адміністратор вашої організації не дозволяють робити знімки екрана" "Парам.передав.файлів через USB" @@ -356,7 +354,7 @@ "Вмикається ввечері" "До сходу сонця" "Вмикається о %s" - "До %s" + "До %s" "NFC" "NFC вимкнено" "NFC ввімкнено" @@ -440,7 +438,8 @@ "%s отримає доступ до всіх даних, які відображаються на вашому екрані." "Більше не показувати" "Очистити все" - "У режимі \"Не турбувати\" сповіщення ховаються" + "Керувати сповіщеннями" + "У режимі \"Не турбувати\" сповіщення ховаються" "Почати зараз" "Сповіщень немає" "Профіль може відстежуватись" @@ -546,7 +545,8 @@ "%1$s. Торкніться, щоб налаштувати вібросигнал." "%1$s. Торкніться, щоб вимкнути звук." "Регуляторів гучності: %s" - "Звуковий сигнал для викликів і сповіщень увімкнено" + + "Вивід медіа-вмісту" "Вивід телефонного виклику" "Пристроїв не знайдено" @@ -637,6 +637,7 @@ "%1$s %2$s" "елементи керування сповіщеннями" "параметри відкладення сповіщень" + "Відкласти" "ВІДМІНИТИ" "Відкладено на %1$s" @@ -704,6 +705,8 @@ "Акумулятор" "Годинник" "Гарнітура" + + "Навушники під’єднано" "Гарнітуру під’єднано" "Заощадження трафіку" @@ -738,11 +741,9 @@ "Код клавіші праворуч" "Значок ліворуч" "Значок праворуч" - - + "Натисніть і перетягніть, щоб додати фрагменти" "Перетягніть сюди, щоб видалити" - - + "Потрібно принаймні 6 фрагментів" "Редагувати" "Час" @@ -829,6 +830,7 @@ "Знімки екрана" "Загальні повідомлення" "Пам’ять" + "Поради" "Додатки з миттєвим запуском" "Додатки з миттєвим запуском не потрібно встановлювати." "Про додаток" @@ -846,12 +848,9 @@ "Замінити" "Додатки, які працюють у фоновому режимі" "Торкніться, щоб перевірити використання акумулятора й трафік" - - - - - - + "Вимкнути мобільне передавання даних?" + "Ви не матимете доступу до даних чи Інтернету через оператора %s. Інтернет буде доступний лише через Wi-Fi." + "ваш оператор" "Не вдається підтвердити вашу відповідь у налаштуваннях, оскільки інший додаток заступає запит на дозвіл." "Дозволити додатку %1$s показувати фрагменти додатка %2$s?" "- Має доступ до інформації з додатка %1$s" @@ -859,4 +858,11 @@ "Дозволити додатку %1$s показувати фрагменти будь-якого додатка" "Дозволити" "Відмовити" + "Торкніться, щоб увімкнути автоматичний режим економії заряду акумулятора" + "Вмикати автоматично, коли рівень знижується до %d%%" + "Ні, дякую" + "Автоматичний режим економії заряду акумулятора ввімкнено" + "Режим економії заряду акумулятора вмикатиметься автоматично, коли рівень нижчий за %d%%." + "Налаштування" + "OK" diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index 73d5f48a0cef15d45504eb903bdcf59681ea64a9..dede8782047cc32ae8ee8201b7d5e62af091a825 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -33,7 +33,6 @@ "جاری" "اطلاعات" "بیٹری کم ہے" - "بیٹری کم ہے۔ بیٹری سیور آن کریں" "%s باقی ہے" "%s باقی، آپ کے استعمال کی بنیاد پر تقریباً %s باقی ہے" "%s باقی، تقریباً %s باقی ہے" @@ -73,11 +72,12 @@ "اسکرین شاٹ" "اسکرین شاٹ محفوظ ہو رہا ہے…" "اسکرین شاٹ محفوظ ہو رہا ہے…" - "اسکرین شاٹ محفوظ کیا جا رہا ہے" "اسکرین شاٹ محفوظ ہو گیا" "اپنا اسکرین شاٹ دیکھنے کیلئے تھپتھپائیں" - "اسکرین شاٹ کیپچر نہیں ہو سکا" - "اسکرین شاٹ محفوظ کرتے وقت مسئلہ پیش آ گیا" + + + + "اسٹوریج کی محدود جگہ کی وجہ سے اسکرین شاٹ کو محفوظ نہیں کیا جا سکتا" "ایپ یا آپ کی تنظیم کی جانب سے اسکرین شاٹس لینے کی اجازت نہیں ہے" "‏USB فائل منتقل کرنیکے اختیارات" @@ -273,8 +273,7 @@ "ڈیزرٹ کیس" "اسکرین سیور" "ایتھرنیٹ" - - + "مزید اختیارات کے لیے آئیکنز کو ٹچ کریں اور دبائیں رکھیں" "ڈسٹرب نہ کریں" "صرف ترجیحی" "صرف الارمز" @@ -349,7 +348,8 @@ "غروب آفتاب کے وقت آن ہوگی" "طلوع آفتاب تک" "آن ہوگی بوقت %s" - "%s بجے تک" + + "NFC" "‏NFC غیر فعال ہے" "‏NFC فعال ہے" @@ -433,7 +433,10 @@ "%s آپ کی اسکرین پر ڈسپلے ہونے والی ہر چیز کو کیپچر کرنا شروع کر دیگی۔" "دوبارہ نہ دکھائیں" "سبھی کو صاف کریں" - "\'ڈسٹرب نہ کریں\' اطلاعات کو چھپا رہی ہے" + + + + "ابھی شروع کریں" "کوئی اطلاعات نہیں ہیں" "پروفائل کو مانیٹر کیا جا سکتا ہے" @@ -539,7 +542,8 @@ "‏‎%1$s۔ ارتعاش پر سیٹ کرنے کیلئے تھپتھپائیں۔" "‏‎%1$s۔ خاموش کرنے کیلئے تھپتھپائیں۔" "‏‎%s والیوم کے کنٹرولز" - "کالز اور اطلاعات کی گھنٹی بجے گی" + + "میڈیا آؤٹ پٹ" "فون کال کا آؤٹ پٹ" "کوئی آلہ نہیں ملا" @@ -626,6 +630,8 @@ "%1$s %2$s" "اطلاع کے کنٹرولز" "اطلاع اسنوز کرنے کے اختیارات" + + "کالعدم کریں" "%1$s کیلئے اسنوز کیا گیا" @@ -689,6 +695,8 @@ "بیٹری" "گھڑی" "ہیڈ سیٹ" + + "ہیڈ فونز منسلک ہیں" "ہیڈ سیٹ منسلک ہے" "ڈیٹا سیور" @@ -723,11 +731,9 @@ "دائيں جانب کا کی کوڈ" "بائیں جانب کا آئیکن" "دائيں جانب کا آئيکن" - - + "ٹائلز شامل کرنے کے لئے پکڑ کر گھسیٹیں" "ہٹانے کیلئے یہاں گھسیٹیں؟" - - + "آپ کو کم از کم 6 ٹائلز کی ضرورت ہے" "ترمیم کریں" "وقت" @@ -814,6 +820,8 @@ "اسکرین شاٹس" "عمومی پیغامات" "اسٹوریج" + + "فوری ایپس" "فوری ایپس کو انسٹالیشن کی ضرورت نہیں ہے۔" "ایپ کی معلومات" @@ -831,12 +839,9 @@ "بدلیں" "ایپس پس منظر میں چل رہی ہیں" "بیٹری اور ڈیٹا استعمال کے بارے میں تفصیلات کے لیے تھپتھپائیں" - - - - - - + "موبائل ڈیٹا آف کریں؟" + "‏آپ کو %s کے ذریعے ڈیٹا یا انٹرنیٹ تک رسائی حاصل نہیں ہوگی۔ انٹرنیٹ صرف Wi-Fi کے ذریعے دستیاب ہوگا۔" + "آپ کا کریئر" "چونکہ ایک ایپ اجازت کی درخواست کو مبہم کر رہی ہے، لہذا ترتیبات آپ کے جواب کی توثیق نہیں کر سکتی ہیں۔" "%1$s کو %2$s کے سلائسز دکھانے کی اجازت دیں؟" "- یہ %1$s کی معلومات پڑھ سکتا ہے" @@ -844,4 +849,18 @@ "%1$s کو کسی بھی ایپ سے سلائسز دکھانے کی اجازت دیں" "اجازت دیں" "مسترد کریں" + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index 66b1af04f83ed02d55c579f8454ec1a9f92a3454..a923151e4a952940267ba511086c6c07e026d4c9 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -33,7 +33,6 @@ "Hali bajarilmagan" "Eslatmalar" "Batareya quvvati kam qoldi" - "Batareya quvvati kam qoldi. Quvvat tejash rejimini yoqing." "%s qoldi" "%s (joriy holatda taxminan %s qoldi)" "%s (taxminan %s qoldi)" @@ -73,11 +72,12 @@ "Skrinshot" "Skrinshot saqlanmoqda…" "Skrinshot saqlanmoqda…" - "Skrinshot saqlanmoqda" "Skrinshot saqlandi" "Skrinshotni ochish uchun bosing" - "Skrinshot saqlanmadi" - "Skrinshotni saqlashda muammo yuz berdi" + + + + "Xotirada joy kamligi uchun skrinshot saqlanmadi" "Ilova yoki tashkilotingiz skrinshot olishni taqiqlagan" "USB fayl ko‘chirish moslamalari" @@ -105,7 +105,7 @@ "Bekor qilish" "Barmoq izi skaneriga tegining" "Barmoq izi belgisi" - "Ilova ikonkasi" + "Ilova belgisi" "Yordam xabari" "Kattalashtirish tugmasi mosligi." "Kattaroq ekran uchun kichikroqni kattalashtirish." @@ -350,7 +350,8 @@ "Kunbotarda yoqish" "Quyosh chiqqunicha" "%s da yoqish" - "%s gacha" + + "NFC" "NFC o‘chiq" "NFC yoniq" @@ -434,7 +435,9 @@ "%s ilovasi qurilma ekranidagi har qanday tasvirni ko‘rishni boshlaydi." "Boshqa ko‘rsatilmasin" "Hammasini tozalash" - "Bezovta qilinmasin rejimi bildirishnomalarni berkitmoqda" + + + "Bezovta qilinmasin rejimi bildirishnomalarni berkitmoqda" "Boshlash" "Bildirishnomalar yo‘q" "Profil kuzatilishi mumkin" @@ -540,7 +543,8 @@ "%1$s. Tebranishni yoqish uchun ustiga bosing." "%1$s. Ovozsiz qilish uchun ustiga bosing." "%s tovush balandligi tugmalari" - "Chaqiruvlar va bildirishnomalar jiringlaydi" + + "Media chiqishi" "Telefon chaqiruvlari" "Hech qanday qurilma topilmadi" @@ -627,6 +631,8 @@ "%1$s %2$s" "bildirishnoma sozlamalari" "bildirishnomalarni kechiktirish parametrlari" + + "BEKOR QILISH" "%1$s muddatga kechiktirildi" @@ -690,6 +696,8 @@ "Batareya" "Soat" "Audio moslama" + + "Quloqchinlar ulandi" "Audio moslama ulandi" "Trafik tejash" @@ -813,6 +821,7 @@ "Skrinshotlar" "Umumiy xabarlar" "Xotira" + "Maslahatlar" "Darhol ochiladigan ilovalar" "Darhol ochiladigan ilovalarni o‘rnatish shart emas." "Ilova haqida" @@ -840,4 +849,11 @@ "%1$s ilovasiga boshqa ilovalardan fragmentlarni ko‘rsatishga ruxsat berish" "Ruxsat" "Rad etish" + "Quvvat tejash rejimini rejalashtirish uchun bosing" + "Batareya quvvati %d%% bo‘lganda avtomatik yoqish" + "Kerak emas" + "Quvvat tejash rejimi jadvali yoqildi" + "Batareya quvvati %d%% bo‘lganda, quvvat tejash rejimi avtomatik ravishda yoqiladi." + "Sozlamalar" + "OK" diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index 7fac87ad5010c4a93d73c209f3195b762a186931..97a36dd6ab98f7e7e3d15e8bc311d2bd2ddf3799 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -33,7 +33,6 @@ "Đang diễn ra" "Thông báo" "Pin yếu" - "Pin yếu. Bật Trình tiết kiệm pin" "Còn lại %s" "Còn lại %s, còn khoảng %s dựa trên mức sử dụng của bạn" "Còn lại %s, còn khoảng %s" @@ -73,11 +72,12 @@ "Ảnh chụp màn hình" "Đang lưu ảnh chụp màn hình..." "Đang lưu ảnh chụp màn hình..." - "Đang lưu ảnh chụp màn hình" "Đã lưu ảnh chụp màn hình" "Nhấn để xem ảnh chụp màn hình của bạn" - "Không thể chụp ảnh màn hình" - "Đã xảy ra sự cố khi lưu ảnh chụp màn hình" + + + + "Không thể lưu ảnh chụp màn hình do giới hạn dung lượng bộ nhớ" "Ứng dụng hoặc tổ chức của bạn không cho phép chụp ảnh màn hình" "Tùy chọn truyền tệp USB" @@ -273,8 +273,7 @@ "Tủ trưng bày bánh ngọt" "Trình bảo vệ m.hình" "Ethernet" - - + "Chạm và giữ các biểu tượng để xem thêm tùy chọn khác" "Không làm phiền" "Chỉ ưu tiên" "Chỉ báo thức" @@ -349,7 +348,8 @@ "Bật khi trời tối" "Cho đến khi trời sáng" "Bật vào lúc %s" - "Cho đến %s" + + "NFC" "NFC đã được tắt" "NFC đã được bật" @@ -433,7 +433,9 @@ "%s sẽ bắt đầu chụp mọi thứ hiển thị trên màn hình." "Không hiển thị lại" "Xóa tất cả" - "Chế độ Không làm phiền sẽ ẩn thông báo" + + + "Chế độ Không làm phiền đang ẩn thông báo" "Bắt đầu ngay" "Không có thông báo nào" "Hồ sơ có thể được giám sát" @@ -539,7 +541,8 @@ "%1$s. Nhấn để đặt chế độ rung." "%1$s. Nhấn để tắt tiếng." "Điều khiển âm lượng %s" - "Cuộc gọi và thông báo sẽ đổ chuông" + + "Đầu ra phương tiện" "Đầu ra cuộc gọi điệnt thoại" "Không tìm thấy thiết bị nào" @@ -626,6 +629,8 @@ "%1$s %2$s" "điều khiển thông báo" "Tùy chọn báo lại thông báo" + + "HOÀN TÁC" "Báo lại sau %1$s" @@ -689,6 +694,8 @@ "Pin" "Đồng hồ" "Tai nghe" + + "Đã kết nối tai nghe" "Đã kết nối tai nghe" "Trình tiết kiệm dữ liệu" @@ -812,6 +819,7 @@ "Ảnh chụp màn hình" "Thông báo chung" "Bộ nhớ" + "Gợi ý" "Ứng dụng tức thì" "Ứng dụng tức thì không yêu cầu cài đặt." "Thông tin ứng dụng" @@ -839,4 +847,11 @@ "Cho phép %1$s hiển thị các lát từ mọi ứng dụng" "Cho phép" "Từ chối" + "Nhấn để lên lịch Trình tiết kiệm pin" + "Tự động bật khi pin ở mức %d%%" + "Không, cảm ơn" + "Đã bật Trình tiết kiệm pin được lên lịch" + "Trình tiết kiệm pin sẽ tự động bật khi mức pin thấp hơn %d%%." + "Cài đặt" + "OK" diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index b0d08d49cc4496d3812c9b829db4c99ea9971013..b5f7088b7c7233e3d45dca8a5bef56f72675deae 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -33,17 +33,13 @@ "正在进行的" "通知" "电池电量偏低" - "电池电量不足,请开启省电模式" "剩余%s" "剩余电量:%s;根据您的使用情况,大约还可使用 %s" "剩余电量:%s;大约还可使用 %s" "剩余 %s。省电模式已开启。" - - - - - - + "无法通过 USB 充电。请使用设备随附的充电器。" + "无法通过 USB 充电" + "使用设备随附的充电器" "设置" "要开启省电模式吗?" "开启" @@ -76,11 +72,12 @@ "屏幕截图" "正在保存屏幕截图..." "正在保存屏幕截图..." - "正在保存屏幕截图" "已保存屏幕截图" "点按即可查看您的屏幕截图" - "无法抓取屏幕截图" - "保存屏幕截图时出现问题" + + + + "由于存储空间有限,无法保存屏幕截图" "此应用或您所在的单位不允许进行屏幕截图" "USB文件传输选项" @@ -151,7 +148,6 @@ "已连接。" "正在连接。" "GPRS" - "1 X" "HSPA" "3G" "3.5G" @@ -211,8 +207,7 @@ "飞行模式开启。" "飞行模式已关闭。" "飞行模式已开启。" - - + "“勿扰”模式已开启。" "勿扰模式已开启,阻止全部通知。" "勿扰模式已开启,仅限闹钟。" "勿扰。" @@ -278,7 +273,7 @@ "甜品盒" "屏保" "有线网络" - "按住相应图标即可查看更多选项" + "触摸并按住相应图标即可查看更多选项" "勿扰" "仅限优先事项" "仅限闹钟" @@ -353,7 +348,8 @@ "在日落时开启" "在日出时关闭" "在%s 开启" - "在%s 关闭" + + "NFC" "NFC 已停用" "NFC 已启用" @@ -365,7 +361,7 @@ "无法启动%s。" "%s已在安全模式下停用。" "全部清除" - "在此处拖动即可使用分屏功能" + "拖动到此处即可使用分屏功能" "水平分割" "垂直分割" "自定义分割" @@ -437,7 +433,9 @@ "%s将开始截取您的屏幕上显示的所有内容。" "不再显示" "全部清除" - + + + "立即开始" "没有通知" @@ -544,9 +542,8 @@ "%1$s。点按即可设为振动。" "%1$s。点按即可设为静音。" "%s音量控件" - "有来电和通知时会振动" - "有来电和通知时会静音" - "有来电和通知时会响铃" + + "媒体输出" "通话输出" "未找到任何设备" @@ -633,6 +630,8 @@ "%1$s%2$s" "通知设置" "通知延后选项" + + "撤消" "已延后 %1$s" @@ -696,6 +695,8 @@ "电池" "时钟" "耳机" + + "已连接到耳机" "已连接到耳机" "流量节省程序" @@ -730,8 +731,9 @@ "向右键码" "向左图标" "向右图标" - "拖动即可添加图块" + "按住并拖动即可添加图块" "拖动到此处即可移除" + "您至少需要 6 个图块" "修改" "时间" @@ -818,6 +820,8 @@ "屏幕截图" "常规消息" "存储空间" + + "免安装应用" "免安装应用无需安装就能使用。" "应用信息" @@ -835,7 +839,9 @@ "替换" "在后台运行的应用" "点按即可详细了解电量和流量消耗情况" - "要关闭移动数据网络吗?" + "要关闭移动数据网络吗?" + "您将无法通过%s获取移动数据访问权限或连接到互联网。您只能通过 WLAN 连接到互联网。" + "您的运营商" "由于某个应用遮挡了权限请求界面,因此“设置”应用无法验证您的回应。" "要允许“%1$s”显示“%2$s”图块吗?" "- 可以读取“%1$s”中的信息" @@ -843,4 +849,18 @@ "允许“%1$s”显示任何应用的图块" "允许" "拒绝" + + + + + + + + + + + + + + diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index 8218aac22c5d658ac33e17111448aea9cad5603b..338f6ab0911c7ad0f46f66b2aad5068fa48b37b9 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -33,7 +33,6 @@ "持續進行" "通知" "電量低" - "電量不足。請開啟省電模式" "剩餘 %s" "電量剩餘 %s,根據您的使用情況,剩餘時間大約 %s" "電量剩餘 %s,剩餘時間大約 %s" @@ -73,11 +72,10 @@ "擷取螢幕畫面" "正在儲存螢幕擷取畫面..." "正在儲存螢幕擷取畫面..." - "正在儲存螢幕擷取畫面" "螢幕擷取畫面已儲存" "輕按即可查看螢幕擷取畫面" - "無法擷取螢幕畫面" - "儲存螢幕擷取畫面時發生問題" + "無法儲存螢幕擷取畫面" + "請再次嘗試拍攝螢幕擷取畫面" "由於儲存空間有限,因此無法儲存螢幕擷取畫面" "應用程式或您的機構不允許擷取螢幕畫面" "USB 檔案傳輸選項" @@ -275,8 +273,7 @@ "Dessert Case" "螢幕保護程式" "以太網" - - + "按住圖示即可查看更多選項" "請勿騷擾" "只限優先" "只限鬧鐘" @@ -351,7 +348,7 @@ "在日落時開啟" "在日出時關閉" "在%s開啟" - "在%s關閉" + "結束時間:%s" "NFC" "NFC 已停用" "NFC 已啟用" @@ -435,7 +432,8 @@ "%s 將開始擷取您的螢幕上顯示的內容。" "不用再顯示" "全部清除" - "「請勿騷擾」模式目前隱藏通知" + "管理通知" + "「請勿騷擾」模式目前隱藏通知" "立即開始" "沒有通知" "個人檔案可能受到監控" @@ -541,7 +539,8 @@ "%1$s。輕按即可設為震動。" "%1$s。輕按即可設為靜音。" "%s音量控制項" - "有來電和通知時會發出鈴聲" + + "媒體輸出" "通話輸出" "找不到裝置" @@ -628,6 +627,7 @@ "%1$s %2$s" "通知控制項" "通知延後選項" + "延後" "復原" "已延後 %1$s" @@ -691,6 +691,8 @@ "電池" "時鐘" "耳機" + + "已連接至耳機" "已連接至耳機" "數據節省模式" @@ -814,6 +816,7 @@ "螢幕擷取畫面" "一般訊息" "儲存空間" + "提示" "即時應用程式" "即時應用程式無需安裝即可使用。" "應用程式資料" @@ -841,4 +844,11 @@ "允許「%1$s」顯示任何應用程式的快訊" "允許" "拒絕" + "輕按即可預定省電模式自動開啟時間" + "在電量為 %d%% 時自動開啟" + "不用了,謝謝" + "已預定省電模式開啟時間" + "省電模式將會在電量低於 %d%% 時自動開啟。" + "設定" + "知道了" diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index aadb50b51ea1c40993b767cf74ac29ae44bb5e89..ad6b52e6ffea6bf67f9476a40a56ff359daeacc1 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -33,7 +33,6 @@ "進行中" "通知" "電池電力不足" - "電池電量偏低,請開啟節約耗電量模式" "僅剩 %s" "電力剩餘 %s,根據你的使用情形,剩餘時間大約還有 %s" "電力剩餘 %s,剩餘時間大約還有 %s" @@ -73,11 +72,10 @@ "擷取螢幕畫面" "正在儲存螢幕擷取畫面…" "正在儲存螢幕擷取畫面…" - "正在儲存螢幕擷取畫面" "螢幕擷取畫面已儲存" "輕觸即可查看螢幕擷取畫面" - "無法擷取螢幕畫面" - "儲存螢幕擷取畫面時發生問題" + "無法儲存螢幕擷取畫面" + "請再次嘗試拍攝螢幕擷取畫面" "由於儲存空間有限,因此無法儲存螢幕擷取畫面" "這個應用程式或貴機構不允許擷取螢幕畫面" "USB 檔案傳輸選項" @@ -273,8 +271,7 @@ "Dessert Case" "螢幕保護程式" "乙太網路" - - + "按住圖示即可查看更多選項" "零打擾" "僅限優先通知" "僅限鬧鐘" @@ -349,7 +346,7 @@ "於日落時開啟" "於日出時關閉" "開啟時間:%s" - "關閉時間:%s" + "結束時間:%s" "NFC" "NFC 已停用" "NFC 已啟用" @@ -433,7 +430,8 @@ "%s 將開始擷取你的螢幕上顯示的內容。" "不要再顯示" "全部清除" - "「零打擾」模式正在隱藏通知" + "管理通知" + "「零打擾」模式正在隱藏通知" "立即開始" "沒有通知" "設定檔可能會受到監控" @@ -539,7 +537,8 @@ "%1$s。輕觸即可設為震動。" "%1$s。輕觸即可設為靜音。" "「%s」音量控制項" - "有來電和通知時會響鈴" + + "媒體輸出" "通話輸出" "找不到裝置" @@ -626,6 +625,7 @@ "%1$s %2$s" "通知控制項" "通知延後選項" + "延後" "復原" "已延後 %1$s" @@ -689,6 +689,8 @@ "電池" "時鐘" "耳機" + + "已與耳機連線" "已與耳機連線" "數據節省模式" @@ -812,6 +814,7 @@ "螢幕擷取畫面" "一般訊息" "儲存空間" + "提示" "免安裝應用程式" "免安裝應用程式不必安裝就能使用。" "應用程式資訊" @@ -839,4 +842,11 @@ "允許「%1$s」顯示任何應用程式的區塊" "允許" "拒絕" + "輕觸即可排定節約耗電量模式自動開啟的情況" + "在電量 %d%% 時自動開啟" + "不用了,謝謝" + "已按照排定開啟節約耗電量模式" + "節約耗電量模式會在電量低於 %d%% 時自動開啟。" + "設定" + "我知道了" diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index 346a134bbba0546af7bdd3ce60af584faf28824d..0319d1203cad5e44538c3dc432b1bf7e61f8ca84 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -33,7 +33,6 @@ "Okuqhubekayo" "Izaziso" "Ibhethri liphansi" - "Ibhethri liphansi. Vula isilondolozi sebhethri" "%s okusele" "%s okusele, cishe u-%s osele ngokusukela ekusebenziseni kwakho" "%s okusele, cishe u-%s osele" @@ -73,11 +72,10 @@ "Isithombe-skrini" "Ilondoloz umfanekiso weskrini..." "Ilondoloz umfanekiso weskrini..." - "Umfanekiso weskrini uyalondolozwa" "Isithombe-skrini silondoloziwe" "Thepha ukuze ubuke isithombe-skrini sakho" - "Yehlulekile ukuthwebula umfanekiso weskrini" - "Inkinga ivelile ngenkathi ilondoloza isithombe sikrini" + "Ayikwazanga ukulondoloza isithombe-skrini" + "Zama ukuthatha isithombe-skrini futhi" "Ayikwazi ukulondoloza isithombe-skrini ngenxa yesikhala sesitoreji esikhawulelwe" "Ukuthatha izithombe-skrini akuvunyelwe uhlelo lokusebenza noma inhlangano yakho" "Okukhethwa kokudluliswa kwefayela ye-USB" @@ -348,7 +346,7 @@ "Kuvulwe ekushoneni kwelanga" "Kuze kube sekuphumeni kwelanga" "Kuvulwe ngo-%s" - "Kuze kube ngu-%s" + "Kuze kube ngu-%s" "I-NFC" "I-NFC ikhutshaziwe" "I-NFC inikwe amandla" @@ -432,7 +430,8 @@ "%s izoqala ukuthwebula yonke into eboniswa kusikrini sakho." "Ungabonisi futhi" "Sula konke" - "Ukungaphazamisi kufihle izaziso" + "Phatha izaziso" + "Ukungaphazamisi kufihle izaziso" "Qala manje" "Azikho izaziso" "Iphrofayela ingaqashwa" @@ -538,7 +537,8 @@ "%1$s. Thepha ukuze usethele ekudlidlizeni." "%1$s. Thepha ukuze uthulise." "%s izilawuli zevolomu" - "Amakholi nezaziso zizokhala" + + "Okukhiphayo kwemidiya" "Okukhiphayo kwekholi yefoni" "Awekho amadivayisi atholiwe" @@ -625,6 +625,7 @@ "%1$s %2$s" "izilawuli zesaziso" "izinketho zokusnuza zesaziso" + "Snuza" "HLEHLISA" "Kusnuzwe u-%1$s" @@ -688,6 +689,8 @@ "Ibhethri" "Iwashi" "Ama-earphone" + + "Amahedfoni axhunyiwe" "Ama-earphone axhunyiwe" "Iseva yedatha" @@ -722,11 +725,9 @@ "Ikhodi yokhiye yangakwesokudla" "Isithonjana esingakwesokunxele" "Isithonjana sangakwesokudla" - - + "Bamba uphinde uhudule ukuze ungeze amathayela" "Hudulela lapha ukuze ususe" - - + "Udinga okungenani amathayela angu-6" "Hlela" "Isikhathi" @@ -813,6 +814,7 @@ "Izithombe-skrini" "Imilayezo ejwayelekile" "Isitoreji" + "Ukubonisa" "Izinhlelo zokusebenza ezisheshayo" "Izinhlelo zokusebenza ezisheshayo azidingi ukufakwa." "Ulwazi lohlelo lokusebenza" @@ -830,12 +832,9 @@ "Buyisela" "Izinhlelo zokusebenza zisebenza ngasemuva" "Thepha ngemininingwane ekusetshenzisweni kwebhethri nedatha" - - - - - - + "Vala idatha yeselula?" + "Ngeke ube nokufinyelela kudatha noma ku-inthanethi nge-%s. I-inthanethi izotholakala kuphela nge-Wi-Fi." + "inkampani yakho yenethiwekhi" "Ngoba uhlelo lokusebenza lusitha isicelo semvume, Izilungiselelo azikwazi ukuqinisekisa impendulo yakho." "Vumela i-%1$s ukuthi ibonise izingcezu ze-%2$s?" "- Ingafunda ulwazi kusukela ku-%1$s" @@ -843,4 +842,11 @@ "Vumela i-%1$s ukuthi ikubonise izingcezu kusukela kunoma iluphi uhlelo lokusebenza" "Vumela" "Yenqaba" + "Thepha ukuze ushejuli isilondolozi sebhethri" + "Ukuze uvule ngokuzenzakalelayo uma ibhethri liku-%d%%" + "Cha ngiyabonga" + "Ishejuli yesilondolozi sebhethri ivuliwe" + "Isilondolozi sebhethri sizovuleka ngokuzenzakalelayo uma ibhethri lifika ngaphansi kuka-%d%%." + "Izilungiselelo" + "Ngiyezwa" diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index 91c872495c9db6d6e2cb2b8ed65e806ae9a5f2dc..84ca657f3da5d3051cb613f14026c50099471025 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -270,13 +270,15 @@ @dimen/notification_panel_width + 8dp + 8dp 64dp - 108dp + 116dp 252dp @@ -286,7 +288,7 @@ 4dp - 22dp + 14dp -2dp @@ -294,6 +296,8 @@ 16dp + 9dp + 0x31 @@ -313,8 +317,10 @@ 25dp 106dp + 9dp 18dp 24dp + 12dp 18dp 48dp @@ -734,8 +740,6 @@ 2dp 6dp - 8dp - 4dp diff --git a/packages/SystemUI/res/values/dimens_car.xml b/packages/SystemUI/res/values/dimens_car.xml index 5679dd2f1fb0d6081f894f231590ea42f6a3beaa..6caed61f11a760544db6b01ac88e9c587d6da3fd 100644 --- a/packages/SystemUI/res/values/dimens_car.xml +++ b/packages/SystemUI/res/values/dimens_car.xml @@ -32,6 +32,8 @@ 64dp 760dp + 96dp + 96dp 12dp 24dp diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 419e9d28fa4e3a6be00bd2bb47464f10c97ffa20..4074042d36156d368b286b9a8429c2612b2ec507 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -1350,7 +1350,7 @@ %s volume controls - Calls and notifications will ring + Calls and notifications will ring (%1$s) Media output Phone call output @@ -1748,6 +1748,10 @@ Headset + + Open settings + Headphones connected diff --git a/packages/SystemUI/src/com/android/systemui/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/OverviewProxyService.java index 816c598daf4fe76ff2b02566aba69a83ad958f4e..8cff56df1730330283bc175665a18b2ee8a7cdd1 100644 --- a/packages/SystemUI/src/com/android/systemui/OverviewProxyService.java +++ b/packages/SystemUI/src/com/android/systemui/OverviewProxyService.java @@ -228,9 +228,14 @@ public class OverviewProxyService implements CallbackController= CHARGE_CYCLE_PERCENT_RESET + && mTimeRemaining > SIX_HOURS_MILLIS) { + mLowWarningShownThisChargeCycle = false; + mSevereWarningShownThisChargeCycle = false; + } } } @@ -277,13 +283,15 @@ public class PowerUI extends SystemUI { mTimeRemaining, isPowerSaver, mBatteryStatus)) { mWarnings.showLowBatteryWarning(playSound); - // mark if we've already shown a warning this cycle. This will prevent the time based - // trigger from spamming users since the time remaining can vary based on current - // device usage. - if (mTimeRemaining < mEnhancedEstimates.getSevereWarningThreshold()) { - mSevereWarningShownThisChargeCycle = true; - } else { - mLowWarningShownThisChargeCycle = true; + // mark if we've already shown a warning this cycle. This will prevent the notification + // trigger from spamming users by only showing low/critical warnings once per cycle + if (hybridEnabled) { + if (mTimeRemaining < mEnhancedEstimates.getSevereWarningThreshold() + || mBatteryLevel < mLowBatteryReminderLevels[1]) { + mSevereWarningShownThisChargeCycle = true; + } else { + mLowWarningShownThisChargeCycle = true; + } } } else if (shouldDismissLowBatteryWarning(plugged, oldBucket, bucket, mTimeRemaining, isPowerSaver)) { @@ -295,12 +303,16 @@ public class PowerUI extends SystemUI { @VisibleForTesting boolean shouldShowLowBatteryWarning(boolean plugged, boolean oldPlugged, int oldBucket, - int bucket, long timeRemaining, boolean isPowerSaver, int mBatteryStatus) { + int bucket, long timeRemaining, boolean isPowerSaver, int batteryStatus) { + if (mEnhancedEstimates.isHybridNotificationEnabled()) { + // triggering logic when enhanced estimate is available + return isEnhancedTrigger(plugged, timeRemaining, isPowerSaver, batteryStatus); + } + // legacy triggering logic return !plugged && !isPowerSaver - && (((bucket < oldBucket || oldPlugged) && bucket < 0) - || isTimeBasedTrigger(timeRemaining)) - && mBatteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN; + && (((bucket < oldBucket || oldPlugged) && bucket < 0)) + && batteryStatus != BatteryManager.BATTERY_STATUS_UNKNOWN; } @VisibleForTesting @@ -315,19 +327,23 @@ public class PowerUI extends SystemUI { || hybridWouldDismiss)); } - private boolean isTimeBasedTrigger(long timeRemaining) { - if (!mEnhancedEstimates.isHybridNotificationEnabled()) { + private boolean isEnhancedTrigger(boolean plugged, long timeRemaining, boolean isPowerSaver, + int batteryStatus) { + if (plugged || isPowerSaver || batteryStatus == BatteryManager.BATTERY_STATUS_UNKNOWN) { return false; } - - // Only show the time based warning once per charge cycle - final boolean canShowWarning = timeRemaining < mEnhancedEstimates.getLowWarningThreshold() - && !mLowWarningShownThisChargeCycle; - - // Only show the severe time based warning once per charge cycle - final boolean canShowSevereWarning = - timeRemaining < mEnhancedEstimates.getSevereWarningThreshold() - && !mSevereWarningShownThisChargeCycle; + int warnLevel = mLowBatteryReminderLevels[0]; + int critLevel = mLowBatteryReminderLevels[1]; + + // Only show the low warning once per charge cycle + final boolean canShowWarning = !mLowWarningShownThisChargeCycle + && (timeRemaining < mEnhancedEstimates.getLowWarningThreshold() + || mBatteryLevel <= warnLevel); + + // Only show the severe warning once per charge cycle + final boolean canShowSevereWarning = !mSevereWarningShownThisChargeCycle + && (timeRemaining < mEnhancedEstimates.getSevereWarningThreshold() + || mBatteryLevel <= critLevel); return canShowWarning || canShowSevereWarning; } diff --git a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java index 892395222d1fbf51408fac381ef0e889ae5c7d28..c548cf6a6519a1a133bc7c80902bf93b5e9b3280 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/PagedTileLayout.java @@ -167,6 +167,13 @@ public class PagedTileLayout extends ViewPager implements QSTileLayout { } } + @Override + public void setExpansion(float expansion) { + for (TileRecord tr : mTiles) { + tr.tileView.setExpansion(expansion); + } + } + public void setPageListener(PageListener listener) { mPageListener = listener; } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java index 29f3c43a1fa4eb6c686fceea43c9c09ab446873e..018a6356042942810c97f5c38f193c6ca1cf6e8d 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSFragment.java @@ -291,6 +291,7 @@ public class QSFragment extends Fragment implements QS { mHeader.setExpansion(mKeyguardShowing, expansion, panelTranslationY); mFooter.setExpansion(mKeyguardShowing ? 1 : expansion); mQSPanel.getQsTileRevealController().setExpansion(expansion); + mQSPanel.getTileLayout().setExpansion(expansion); mQSPanel.setTranslationY(translationScaleY * heightDiff); mQSDetail.setFullyExpanded(fullyExpanded); @@ -359,7 +360,6 @@ public class QSFragment extends Fragment implements QS { // The customize state changed, so our height changed. mContainer.updateExpansion(); mQSPanel.setVisibility(!mQSCustomizer.isCustomizing() ? View.VISIBLE : View.INVISIBLE); - mHeader.setVisibility(!mQSCustomizer.isCustomizing() ? View.VISIBLE : View.INVISIBLE); mFooter.setVisibility(!mQSCustomizer.isCustomizing() ? View.VISIBLE : View.INVISIBLE); // Let the panel know the position changed and it needs to update where notifications // and whatnot are. diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java index 61e3065fd4a363947cd912335c847c5271c1476d..6368a6b3278771e66a155be33a587545ed752604 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java @@ -616,5 +616,7 @@ public class QSPanel extends LinearLayout implements Tunable, Callback, Brightne boolean updateResources(); void setListening(boolean listening); + + default void setExpansion(float expansion) {} } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java index 0ac8b9ccef7e4a844572e3c058a6840158afc469..df65d1fb82cdf5c0d11cd9576bf6f9a5ba39881c 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java @@ -47,7 +47,6 @@ import com.android.systemui.BatteryMeterView; import com.android.systemui.Dependency; import com.android.systemui.Prefs; import com.android.systemui.R; -import com.android.systemui.R.id; import com.android.systemui.SysUiServiceProvider; import com.android.systemui.plugins.ActivityStarter; import com.android.systemui.qs.QSDetail.Callback; @@ -161,7 +160,6 @@ public class QuickStatusBarHeader extends RelativeLayout implements CommandQueue // Set light text on the header icons because they will always be on a black background applyDarkness(R.id.clock, tintArea, 0, DarkIconDispatcher.DEFAULT_ICON_TINT); - applyDarkness(id.signal_cluster, tintArea, intensity, colorForeground); // Set the correct tint for the status icons so they contrast mIconManager.setTint(fillColor); diff --git a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java index 1cb89c472dbb6b5fef59efcebbe8068be60fb5c5..64e7a6353485c2747b277fd818f1ee5865dd5610 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java +++ b/packages/SystemUI/src/com/android/systemui/qs/TileLayout.java @@ -23,6 +23,7 @@ public class TileLayout extends ViewGroup implements QSTileLayout { protected int mCellHeight; protected int mCellMarginHorizontal; protected int mCellMarginVertical; + protected int mSidePadding; protected final ArrayList mRecords = new ArrayList<>(); private int mCellMarginTop; @@ -80,6 +81,7 @@ public class TileLayout extends ViewGroup implements QSTileLayout { mCellMarginHorizontal = res.getDimensionPixelSize(R.dimen.qs_tile_margin_horizontal); mCellMarginVertical= res.getDimensionPixelSize(R.dimen.qs_tile_margin_vertical); mCellMarginTop = res.getDimensionPixelSize(R.dimen.qs_tile_margin_top); + mSidePadding = res.getDimensionPixelOffset(R.dimen.qs_tile_layout_margin_side); if (mColumns != columns) { mColumns = columns; requestLayout(); @@ -93,7 +95,7 @@ public class TileLayout extends ViewGroup implements QSTileLayout { final int numTiles = mRecords.size(); final int width = MeasureSpec.getSize(widthMeasureSpec); final int numRows = (numTiles + mColumns - 1) / mColumns; - mCellWidth = (width - (mCellMarginHorizontal * (mColumns + 1))) / mColumns; + mCellWidth = (width - mSidePadding * 2 - (mCellMarginHorizontal * mColumns)) / mColumns; // Measure each QS tile. View previousView = this; diff --git a/packages/SystemUI/src/com/android/systemui/qs/car/CarStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/car/CarStatusBarHeader.java index ec183769c76308eee8e0d5fab7bbd47bc8f7067d..31c455d880d63676d41d6f96c710e2adca4ff544 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/car/CarStatusBarHeader.java +++ b/packages/SystemUI/src/com/android/systemui/qs/car/CarStatusBarHeader.java @@ -44,7 +44,6 @@ public class CarStatusBarHeader extends LinearLayout { float intensity = colorForeground == Color.WHITE ? 0f : 1f; Rect tintArea = new Rect(0, 0, 0, 0); - applyDarkness(R.id.signal_cluster, tintArea, intensity, colorForeground); applyDarkness(R.id.battery, tintArea, intensity, colorForeground); applyDarkness(R.id.clock, tintArea, intensity, colorForeground); diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java index a3d6c6cff28329fd1cf40c0124c48c4908c3f02d..4aa83d0d5f159b9c464f9a33952ffe687813c7ce 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java @@ -20,6 +20,7 @@ import android.animation.Animator.AnimatorListener; import android.animation.AnimatorListenerAdapter; import android.content.Context; import android.content.res.Configuration; +import android.graphics.Point; import android.os.Bundle; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.GridLayoutManager; @@ -37,6 +38,7 @@ import android.widget.Toolbar.OnMenuItemClickListener; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto; +import com.android.settingslib.Utils; import com.android.systemui.Dependency; import com.android.systemui.R; import com.android.systemui.plugins.qs.QS; @@ -81,10 +83,9 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene public QSCustomizer(Context context, AttributeSet attrs) { super(new ContextThemeWrapper(context, R.style.edit_theme), attrs); - mClipper = new QSDetailClipper(this); LayoutInflater.from(getContext()).inflate(R.layout.qs_customize_panel_content, this); - + mClipper = new QSDetailClipper(findViewById(R.id.customize_container)); mToolbar = findViewById(com.android.internal.R.id.action_bar); TypedValue value = new TypedValue(); mContext.getTheme().resolveAttribute(android.R.attr.homeAsUpIndicator, value, true); @@ -100,7 +101,10 @@ public class QSCustomizer extends LinearLayout implements OnMenuItemClickListene mToolbar.getMenu().add(Menu.NONE, MENU_RESET, 0, mContext.getString(com.android.internal.R.string.reset)); mToolbar.setTitle(R.string.qs_edit); - + int accentColor = Utils.getColorAttr(context, android.R.attr.colorAccent); + mToolbar.setTitleTextColor(accentColor); + mToolbar.getNavigationIcon().setTint(accentColor); + mToolbar.getOverflowIcon().setTint(accentColor); mRecyclerView = findViewById(android.R.id.list); mTileAdapter = new TileAdapter(getContext()); mTileQueryHelper = new TileQueryHelper(context, mTileAdapter); diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java index 943a17644b55b171bee7538421afb95a08e1409a..6f664d7debc08ac8c77699b509b1c9513aa85400 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java +++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileServices.java @@ -102,7 +102,9 @@ public class TileServices extends IQSService.Stub { mTokenMap.remove(service.getToken()); mTiles.remove(tile.getComponent()); final String slot = tile.getComponent().getClassName(); - mMainHandler.post(() -> mHost.getIconController().removeIcon(slot)); + // TileServices doesn't know how to add more than 1 icon per slot, so remove all + mMainHandler.post(() -> mHost.getIconController() + .removeAllIconsForSlot(slot)); } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java index a9defc8b75a04684cd4e7c91b70823a5772b4625..09d928fd36575ec79f2813cca66d9f1e09241615 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileBaseView.java @@ -194,6 +194,7 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView { setClickable(state.state != Tile.STATE_UNAVAILABLE); mIcon.setIcon(state); setContentDescription(state.contentDescription); + mAccessibilityClass = state.expandedAccessibilityClassName; if (state instanceof QSTile.BooleanState) { boolean newState = ((BooleanState) state).value; @@ -269,6 +270,10 @@ public class QSTileBaseView extends com.android.systemui.plugins.qs.QSTileView { info.setText(label); info.setChecked(b); info.setCheckable(true); + info.addAction( + new AccessibilityNodeInfo.AccessibilityAction( + AccessibilityNodeInfo.AccessibilityAction.ACTION_LONG_CLICK.getId(), + getResources().getString(R.string.accessibility_long_click_tile))); } } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileView.java b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileView.java index 3cb4c71fc98c78ba52dfaf6905460086210d0713..d21b06f02f16662f37ecf816a4673c113e04b7fc 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tileimpl/QSTileView.java @@ -32,12 +32,10 @@ import com.android.systemui.R; import com.android.systemui.plugins.qs.QSIconView; import com.android.systemui.plugins.qs.QSTile; - import java.util.Objects; /** View that represents a standard quick settings tile. **/ public class QSTileView extends QSTileBaseView { - private static final int DEFAULT_MAX_LINES = 2; private static final boolean DUAL_TARGET_ALLOWED = false; private View mDivider; protected TextView mLabel; @@ -87,22 +85,17 @@ public class QSTileView extends QSTileBaseView { mLabelContainer.setClipChildren(false); mLabelContainer.setClipToPadding(false); mLabel = mLabelContainer.findViewById(R.id.tile_label); - mLabel.setSelected(true); // Allow marquee to work. mPadLock = mLabelContainer.findViewById(R.id.restricted_padlock); mDivider = mLabelContainer.findViewById(R.id.underline); mExpandIndicator = mLabelContainer.findViewById(R.id.expand_indicator); mExpandSpace = mLabelContainer.findViewById(R.id.expand_space); mSecondLine = mLabelContainer.findViewById(R.id.app_label); mSecondLine.setAlpha(.6f); - mSecondLine.setSelected(true); // Allow marquee to work. addView(mLabelContainer); } @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { - if (mLabel.getMaxLines() != DEFAULT_MAX_LINES) { - mLabel.setMaxLines(DEFAULT_MAX_LINES); - } super.onMeasure(widthMeasureSpec, heightMeasureSpec); // Remeasure view if the secondary label text will be cut off. @@ -113,6 +106,15 @@ public class QSTileView extends QSTileBaseView { } } + @Override + public void setExpansion(float expansion) { + // Start the marquee when fully expanded and stop when fully collapsed. Leave as is for + // other expansion ratios since there is no way way to pause the marquee. + boolean selected = expansion == 1f ? true : expansion == 0f ? false : mLabel.isSelected(); + mLabel.setSelected(selected); + mSecondLine.setSelected(selected); + } + @Override protected void handleStateChanged(QSTile.State state) { super.handleStateChanged(state); diff --git a/packages/SystemUI/src/com/android/systemui/recents/Recents.java b/packages/SystemUI/src/com/android/systemui/recents/Recents.java index 674ccd8c347100439f04cc744ddbf3dd92642a3e..0f85c5b37f653213cd1f26c1954e6be296bed6b2 100644 --- a/packages/SystemUI/src/com/android/systemui/recents/Recents.java +++ b/packages/SystemUI/src/com/android/systemui/recents/Recents.java @@ -492,6 +492,13 @@ public class Recents extends SystemUI } } mDraggingInRecentsCurrentUser = currentUser; + + if (mOverviewProxyService.getProxy() != null) { + // The overview service is handling split screen, so just skip the wait for the + // first draw and notify the divider to start animating now + EventBus.getDefault().post(new RecentsDrawnEvent()); + } + return true; } else { EventBus.getDefault().send(new ShowUserToastEvent( diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java index 03b263d2ae95408925de4eeba80f412990a651cc..3ece2f9581000d5b9dd10c13e2fac683455fb24c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java @@ -16,7 +16,6 @@ package com.android.systemui.statusbar; -import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_NEGATIVE; import static com.android.systemui.statusbar.notification.ActivityLaunchAnimator.ExpandAnimationParameters; import static com.android.systemui.statusbar.notification.NotificationInflater.InflationCallback; @@ -25,7 +24,10 @@ import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.animation.ValueAnimator.AnimatorUpdateListener; import android.annotation.Nullable; +import android.app.NotificationChannel; import android.content.Context; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Path; @@ -39,6 +41,7 @@ import android.service.notification.StatusBarNotification; import android.util.ArraySet; import android.util.AttributeSet; import android.util.FloatProperty; +import android.util.Log; import android.util.MathUtils; import android.util.Property; import android.view.KeyEvent; @@ -90,12 +93,17 @@ import java.util.List; import java.util.function.BooleanSupplier; import java.util.function.Consumer; +/** + * View representing a notification item - this can be either the individual child notification or + * the group summary (which contains 1 or more child notifications). + */ public class ExpandableNotificationRow extends ActivatableNotificationView implements PluginListener { private static final int DEFAULT_DIVIDER_ALPHA = 0x29; private static final int COLORED_DIVIDER_ALPHA = 0x7B; private static final int MENU_VIEW_INDEX = 0; + private static final String TAG = "ExpandableNotifRow"; public interface LayoutListener { public void onLayout(); @@ -166,6 +174,8 @@ public class ExpandableNotificationRow extends ActivatableNotificationView private NotificationGuts mGuts; private NotificationData.Entry mEntry; private StatusBarNotification mStatusBarNotification; + private PackageManager mCachedPackageManager; + private PackageInfo mCachedPackageInfo; private String mAppName; private boolean mIsHeadsUp; private boolean mLastChronometerRunning = true; @@ -372,6 +382,53 @@ public class ExpandableNotificationRow extends ActivatableNotificationView mEntry = entry; mStatusBarNotification = entry.notification; mNotificationInflater.inflateNotificationViews(); + + perhapsCachePackageInfo(); + } + + /** + * Caches the package manager and info objects which are expensive to obtain. + */ + private void perhapsCachePackageInfo() { + if (mCachedPackageInfo == null) { + mCachedPackageManager = StatusBar.getPackageManagerForUser( + mContext, mStatusBarNotification.getUser().getIdentifier()); + try { + mCachedPackageInfo = mCachedPackageManager.getPackageInfo( + mStatusBarNotification.getPackageName(), PackageManager.GET_SIGNATURES); + } catch (PackageManager.NameNotFoundException e) { + Log.e(TAG, "perhapsCachePackageInfo: Could not find package info"); + } + } + } + + /** + * Returns whether this row is considered non-blockable (e.g. it's a non-blockable system notif, + * covers multiple channels, or is in a whitelist). + */ + public boolean getIsNonblockable() { + boolean isNonblockable; + + isNonblockable = Dependency.get(NotificationBlockingHelperManager.class) + .isNonblockablePackage(mStatusBarNotification.getPackageName()); + + // Only bother with going through the children if the row is still blockable based on the + // number of unique channels. + if (!isNonblockable) { + isNonblockable = getNumUniqueChannels() > 1; + } + + // Only bother with IPC if the package is still blockable. + if (!isNonblockable && mCachedPackageManager != null && mCachedPackageInfo != null) { + if (com.android.settingslib.Utils.isSystemPackage( + mContext.getResources(), mCachedPackageManager, mCachedPackageInfo)) { + if (mEntry.channel != null + && !mEntry.channel.isBlockableSystem()) { + isNonblockable = true; + } + } + } + return isNonblockable; } public void onNotificationUpdated() { @@ -2019,6 +2076,32 @@ public class ExpandableNotificationRow extends ActivatableNotificationView updateChildrenVisibility(); applyChildrenRoundness(); } + /** + * Returns the number of channels covered by the notification row (including its children if + * it's a summary notification). + */ + public int getNumUniqueChannels() { + ArraySet channels = new ArraySet<>(); + + channels.add(mEntry.channel); + + // If this is a summary, then add in the children notification channels for the + // same user and pkg. + if (mIsSummaryWithChildren) { + final List childrenRows = getNotificationChildren(); + final int numChildren = childrenRows.size(); + for (int i = 0; i < numChildren; i++) { + final ExpandableNotificationRow childRow = childrenRows.get(i); + final NotificationChannel childChannel = childRow.getEntry().channel; + final StatusBarNotification childSbn = childRow.getStatusBarNotification(); + if (childSbn.getUser().equals(mStatusBarNotification.getUser()) && + childSbn.getPackageName().equals(mStatusBarNotification.getPackageName())) { + channels.add(childChannel); + } + } + } + return channels.size(); + } public void updateChildrenHeaderAppearance() { if (mIsSummaryWithChildren) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NeutralGoodDrawable.java b/packages/SystemUI/src/com/android/systemui/statusbar/NeutralGoodDrawable.java new file mode 100644 index 0000000000000000000000000000000000000000..cdb0514a26862d55ac2f1bdcba9cbf14600ef0b4 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NeutralGoodDrawable.java @@ -0,0 +1,78 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar; + +import android.content.Context; +import android.content.res.Resources.Theme; +import android.graphics.Canvas; +import android.graphics.ColorFilter; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.graphics.drawable.LayerDrawable; +import android.view.ContextThemeWrapper; +import android.view.Gravity; +import com.android.settingslib.Utils; +import com.android.systemui.R; + +/** + * NeutralGoodDrawable implements a drawable that will load 2 underlying drawable resources, one + * with each the DualToneDarkTheme and DualToneLightTheme, choosing which one based on what + * DarkIconDispatcher tells us about darkness + */ +public class NeutralGoodDrawable extends LayerDrawable { + + public static NeutralGoodDrawable create(Context context, int resId) { + int dualToneLightTheme = Utils.getThemeAttr(context, R.attr.lightIconTheme); + int dualToneDarkTheme = Utils.getThemeAttr(context, R.attr.darkIconTheme); + ContextThemeWrapper light = new ContextThemeWrapper(context, dualToneLightTheme); + ContextThemeWrapper dark = new ContextThemeWrapper(context, dualToneDarkTheme); + + return create(light, dark, resId); + } + + /** + * For the on-the-go young entrepreneurial who wants to cache contexts + * @param light - a context using the R.attr.lightIconTheme + * @param dark - a context using the R.attr.darkIconTheme + * @param resId - the resId for our drawable + */ + public static NeutralGoodDrawable create(Context light, Context dark, int resId) { + return new NeutralGoodDrawable( + new Drawable[] { + light.getDrawable(resId).mutate(), + dark.getDrawable(resId).mutate() }); + } + + protected NeutralGoodDrawable(Drawable []drawables) { + super(drawables); + + for (int i = 0; i < drawables.length; i++) { + setLayerGravity(i, Gravity.CENTER); + } + + mutate(); + setDarkIntensity(0); + } + + public void setDarkIntensity(float intensity) { + + getDrawable(0).setAlpha((int) ((1 - intensity) * 255f)); + getDrawable(1).setAlpha((int) (intensity * 255f)); + + invalidateSelf(); + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBlockingHelperManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBlockingHelperManager.java index c9c1bc6fdc394870453c4d0e0ff13731907b8301..20e5f86ee097c4c1bb5a7e5715d68bf0473133b8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBlockingHelperManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationBlockingHelperManager.java @@ -17,11 +17,19 @@ package com.android.systemui.statusbar; import android.content.Context; +import android.content.pm.PackageManager; +import android.os.UserHandle; +import android.service.notification.StatusBarNotification; import android.support.annotation.VisibleForTesting; import android.util.Log; import com.android.systemui.Dependency; import com.android.systemui.plugins.statusbar.NotificationMenuRowPlugin; +import com.android.systemui.statusbar.phone.StatusBar; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; import static android.service.notification.NotificationListenerService.Ranking.USER_SENTIMENT_NEGATIVE; @@ -37,6 +45,7 @@ public class NotificationBlockingHelperManager { private final Context mContext; /** Row that the blocking helper will be shown in (via {@link NotificationGuts}. */ private ExpandableNotificationRow mBlockingHelperRow; + private Set mNonBlockablePkgs; /** * Whether the notification shade/stack is expanded - used to determine blocking helper @@ -46,6 +55,9 @@ public class NotificationBlockingHelperManager { public NotificationBlockingHelperManager(Context context) { mContext = context; + mNonBlockablePkgs = new HashSet<>(); + Collections.addAll(mNonBlockablePkgs, mContext.getResources().getStringArray( + com.android.internal.R.array.config_nonBlockableNotificationPackages)); } /** @@ -59,15 +71,14 @@ public class NotificationBlockingHelperManager { */ boolean perhapsShowBlockingHelper( ExpandableNotificationRow row, NotificationMenuRowPlugin menuRow) { - int numChildren = row.getNumberOfNotificationChildren(); - // We only show the blocking helper if: - // - The dismissed row is a valid group (>1 or 0 children) or the only child in the group + // - User sentiment is negative (DEBUG flag can bypass) // - The notification shade is fully expanded (guarantees we're not touching a HUN). - // - User sentiment is negative - if (DEBUG - || row.getEntry().userSentiment == USER_SENTIMENT_NEGATIVE + // - The row is blockable (i.e. not non-blockable) + // - The dismissed row is a valid group (>1 or 0 children) or the only child in the group + if ((row.getEntry().userSentiment == USER_SENTIMENT_NEGATIVE || DEBUG) && mIsShadeExpanded + && !row.getIsNonblockable() && (!row.isChildInGroup() || row.isOnlyChildInGroup())) { // Dismiss any current blocking helper before continuing forward (only one can be shown // at a given time). @@ -125,6 +136,13 @@ public class NotificationBlockingHelperManager { mIsShadeExpanded = expandedHeight > 0.0f; } + /** + * Returns whether the given package name is in the list of non-blockable packages. + */ + public boolean isNonblockablePackage(String packageName) { + return mNonBlockablePkgs.contains(packageName); + } + @VisibleForTesting boolean isBlockingHelperRowNull() { return mBlockingHelperRow == null; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java index 402d9fddc8250db36174def84554599bfa31f7c6..4b6ab64ab6249c0081f9a09db508ac29e26aae04 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java @@ -18,25 +18,21 @@ package com.android.systemui.statusbar; import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_AMBIENT; import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_FULL_SCREEN_INTENT; -import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_LIGHTS; import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_NOTIFICATION_LIST; import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_PEEK; import static android.app.NotificationManager.Policy.SUPPRESSED_EFFECT_STATUS_BAR; +import android.Manifest; import android.app.AppGlobals; -import android.app.AppOpsManager; import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; +import android.content.Context; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; -import android.content.Context; import android.graphics.drawable.Icon; -import android.os.AsyncTask; -import android.os.Bundle; import android.os.RemoteException; import android.os.SystemClock; -import android.service.notification.NotificationListenerService; import android.service.notification.NotificationListenerService.Ranking; import android.service.notification.NotificationListenerService.RankingMap; import android.service.notification.SnoozeCriterion; @@ -46,10 +42,8 @@ import android.util.ArraySet; import android.view.View; import android.widget.ImageView; import android.widget.RemoteViews; -import android.Manifest; import com.android.internal.annotations.VisibleForTesting; -import com.android.internal.messages.nano.SystemMessageProto; import com.android.internal.statusbar.StatusBarIcon; import com.android.internal.util.NotificationColorUtil; import com.android.systemui.Dependency; @@ -454,47 +448,44 @@ public class NotificationData { return Ranking.VISIBILITY_NO_OVERRIDE; } - public boolean shouldSuppressFullScreenIntent(String key) { - if (mRankingMap != null) { - getRanking(key, mTmpRanking); - return (mTmpRanking.getSuppressedVisualEffects() - & SUPPRESSED_EFFECT_FULL_SCREEN_INTENT) != 0; - } - return false; + public boolean shouldSuppressFullScreenIntent(StatusBarNotification sbn) { + return shouldSuppressVisualEffect(sbn, SUPPRESSED_EFFECT_FULL_SCREEN_INTENT); } - public boolean shouldSuppressPeek(String key) { - if (mRankingMap != null) { - getRanking(key, mTmpRanking); - return (mTmpRanking.getSuppressedVisualEffects() - & SUPPRESSED_EFFECT_PEEK) != 0; - } - return false; + public boolean shouldSuppressPeek(StatusBarNotification sbn) { + return shouldSuppressVisualEffect(sbn, SUPPRESSED_EFFECT_PEEK); } - public boolean shouldSuppressStatusBar(String key) { - if (mRankingMap != null) { - getRanking(key, mTmpRanking); - return (mTmpRanking.getSuppressedVisualEffects() - & SUPPRESSED_EFFECT_STATUS_BAR) != 0; - } - return false; + public boolean shouldSuppressStatusBar(StatusBarNotification sbn) { + return shouldSuppressVisualEffect(sbn, SUPPRESSED_EFFECT_STATUS_BAR); + } + + public boolean shouldSuppressAmbient(StatusBarNotification sbn) { + return shouldSuppressVisualEffect(sbn, SUPPRESSED_EFFECT_AMBIENT); + } + + public boolean shouldSuppressNotificationList(StatusBarNotification sbn) { + return shouldSuppressVisualEffect(sbn, SUPPRESSED_EFFECT_NOTIFICATION_LIST); } - public boolean shouldSuppressAmbient(String key) { + private boolean shouldSuppressVisualEffect(StatusBarNotification sbn, int effect) { + if (isExemptFromDndVisualSuppression(sbn)) { + return false; + } + String key = sbn.getKey(); if (mRankingMap != null) { getRanking(key, mTmpRanking); - return (mTmpRanking.getSuppressedVisualEffects() - & SUPPRESSED_EFFECT_AMBIENT) != 0; + return (mTmpRanking.getSuppressedVisualEffects() & effect) != 0; } return false; } - public boolean shouldSuppressNotificationList(String key) { - if (mRankingMap != null) { - getRanking(key, mTmpRanking); - return (mTmpRanking.getSuppressedVisualEffects() - & SUPPRESSED_EFFECT_NOTIFICATION_LIST) != 0; + protected boolean isExemptFromDndVisualSuppression(StatusBarNotification sbn) { + if ((sbn.getNotification().flags & Notification.FLAG_FOREGROUND_SERVICE) != 0) { + return true; + } + if (sbn.getNotification().isMediaNotification()) { + return true; } return false; } @@ -620,11 +611,11 @@ public class NotificationData { return true; } - if (mEnvironment.isDozing() && shouldSuppressAmbient(sbn.getKey())) { + if (mEnvironment.isDozing() && shouldSuppressAmbient(sbn)) { return true; } - if (!mEnvironment.isDozing() && shouldSuppressNotificationList(sbn.getKey())) { + if (!mEnvironment.isDozing() && shouldSuppressNotificationList(sbn)) { return true; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationEntryManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationEntryManager.java index 7a7cc99eb44d0b2dc9edc3e77331ad9bcc3420da..45df4505fac2bbbe2dbd9c39d6f6fc298286fa7d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationEntryManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationEntryManager.java @@ -299,12 +299,12 @@ public class NotificationEntryManager implements Dumpable, NotificationInflater. updateNotifications(); } - private boolean shouldSuppressFullScreenIntent(String key) { + private boolean shouldSuppressFullScreenIntent(StatusBarNotification sbn) { if (mPresenter.isDeviceInVrMode()) { return true; } - return mNotificationData.shouldSuppressFullScreenIntent(key); + return mNotificationData.shouldSuppressFullScreenIntent(sbn); } private void inflateViews(NotificationData.Entry entry, ViewGroup parent) { @@ -690,7 +690,7 @@ public class NotificationEntryManager implements Dumpable, NotificationInflater. NotificationData.Entry shadeEntry = createNotificationViews(notification); boolean isHeadsUped = shouldPeek(shadeEntry); if (!isHeadsUped && notification.getNotification().fullScreenIntent != null) { - if (shouldSuppressFullScreenIntent(key)) { + if (shouldSuppressFullScreenIntent(notification)) { if (DEBUG) { Log.d(TAG, "No Fullscreen intent: suppressed by DND: " + key); } @@ -846,13 +846,13 @@ public class NotificationEntryManager implements Dumpable, NotificationInflater. return false; } - if (!mPresenter.isDozing() && mNotificationData.shouldSuppressPeek(sbn.getKey())) { + if (!mPresenter.isDozing() && mNotificationData.shouldSuppressPeek(sbn)) { if (DEBUG) Log.d(TAG, "No peeking: suppressed by DND: " + sbn.getKey()); return false; } // Peeking triggers an ambient display pulse, so disable peek is ambient is active - if (mPresenter.isDozing() && mNotificationData.shouldSuppressAmbient(sbn.getKey())) { + if (mPresenter.isDozing() && mNotificationData.shouldSuppressAmbient(sbn)) { if (DEBUG) Log.d(TAG, "No peeking: suppressed by DND: " + sbn.getKey()); return false; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGutsManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGutsManager.java index 75204d9513fec634759dfb572fade49b035671a4..dff5f3814f68d1959ae947c05942bf92eba7314c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGutsManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationGutsManager.java @@ -65,7 +65,6 @@ public class NotificationGutsManager implements Dumpable { private static final String EXTRA_FRAGMENT_ARG_KEY = ":settings:fragment_args_key"; private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class); - private final Set mNonBlockablePkgs; private final Context mContext; private final AccessibilityManager mAccessibilityManager; @@ -87,10 +86,6 @@ public class NotificationGutsManager implements Dumpable { mContext = context; Resources res = context.getResources(); - mNonBlockablePkgs = new HashSet<>(); - Collections.addAll(mNonBlockablePkgs, res.getStringArray( - com.android.internal.R.array.config_nonBlockableNotificationPackages)); - mAccessibilityManager = (AccessibilityManager) mContext.getSystemService(Context.ACCESSIBILITY_SERVICE); } @@ -279,12 +274,12 @@ public class NotificationGutsManager implements Dumpable { iNotificationManager, packageName, row.getEntry().channel, - getNumNotificationChannels(row, packageName, userHandle), + row.getNumUniqueChannels(), sbn, mCheckSaveListener, onSettingsClick, onAppSettingsClick, - mNonBlockablePkgs, + row.getIsNonblockable(), isForBlockingHelper, row.getEntry().userSentiment == USER_SENTIMENT_NEGATIVE); } catch (RemoteException e) { @@ -292,34 +287,6 @@ public class NotificationGutsManager implements Dumpable { } } - /** - * @return the number of channels covered by the notification row (including its children if - * it's a summary notification). - */ - private int getNumNotificationChannels( - ExpandableNotificationRow row, String packageName, UserHandle userHandle) { - ArraySet channels = new ArraySet<>(); - - channels.add(row.getEntry().channel); - - // If this is a summary, then add in the children notification channels for the - // same user and pkg. - if (row.isSummaryWithChildren()) { - final List childrenRows = row.getNotificationChildren(); - final int numChildren = childrenRows.size(); - for (int i = 0; i < numChildren; i++) { - final ExpandableNotificationRow childRow = childrenRows.get(i); - final NotificationChannel childChannel = childRow.getEntry().channel; - final StatusBarNotification childSbn = childRow.getStatusBarNotification(); - if (childSbn.getUser().equals(userHandle) && - childSbn.getPackageName().equals(packageName)) { - channels.add(childChannel); - } - } - } - return channels.size(); - } - /** * Closes guts or notification menus that might be visible and saves any changes. * diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java index 82ad74e26f0c6b147053f633aebac0b1502d0a74..a93be00ba080ffdd204e4c4e0567de0c7534a3fe 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationInfo.java @@ -31,7 +31,6 @@ import android.content.Context; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; -import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; @@ -49,13 +48,11 @@ import android.widget.TextView; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.settingslib.Utils; import com.android.systemui.Dependency; import com.android.systemui.Interpolators; import com.android.systemui.R; import java.util.List; -import java.util.Set; /** * The guts of a notification revealed when performing a long press. @@ -74,7 +71,7 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G private int mStartingUserImportance; private int mChosenImportance; private boolean mIsSingleDefaultChannel; - private boolean mNonblockable; + private boolean mIsNonblockable; private StatusBarNotification mSbn; private AnimatorSet mExpandAnimation; private boolean mIsForeground; @@ -128,10 +125,10 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G final CheckSaveListener checkSaveListener, final OnSettingsClickListener onSettingsClick, final OnAppSettingsClickListener onAppSettingsClick, - final Set nonBlockablePkgs) + boolean isNonblockable) throws RemoteException { bindNotification(pm, iNotificationManager, pkg, notificationChannel, numChannels, sbn, - checkSaveListener, onSettingsClick, onAppSettingsClick, nonBlockablePkgs, + checkSaveListener, onSettingsClick, onAppSettingsClick, isNonblockable, false /* isBlockingHelper */, false /* isUserSentimentNegative */); } @@ -146,7 +143,7 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G CheckSaveListener checkSaveListener, OnSettingsClickListener onSettingsClick, OnAppSettingsClickListener onAppSettingsClick, - Set nonBlockablePkgs, + boolean isNonblockable, boolean isForBlockingHelper, boolean isUserSentimentNegative) throws RemoteException { @@ -162,6 +159,7 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G mSingleNotificationChannel = notificationChannel; mStartingUserImportance = mChosenImportance = mSingleNotificationChannel.getImportance(); mNegativeUserSentiment = isUserSentimentNegative; + mIsNonblockable = isNonblockable; mIsForeground = (mSbn.getNotification().flags & Notification.FLAG_FOREGROUND_SERVICE) != 0; mIsForBlockingHelper = isForBlockingHelper; @@ -179,22 +177,6 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G && numTotalChannels == 1; } - try { - final PackageInfo pkgInfo = pm.getPackageInfo(pkg, PackageManager.GET_SIGNATURES); - if (Utils.isSystemPackage(getResources(), pm, pkgInfo)) { - if (mSingleNotificationChannel != null - && !mSingleNotificationChannel.isBlockableSystem()) { - mNonblockable = true; - } - } - } catch (PackageManager.NameNotFoundException e) { - // unlikely. - } - if (nonBlockablePkgs != null) { - mNonblockable |= nonBlockablePkgs.contains(pkg); - } - mNonblockable |= (mNumNotificationChannels > 1); - bindHeader(); bindPrompt(); bindButtons(); @@ -261,7 +243,7 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G private void bindPrompt() { final TextView blockPrompt = findViewById(R.id.block_prompt); bindName(); - if (mNonblockable) { + if (mIsNonblockable) { blockPrompt.setText(R.string.notification_unblockable_desc); } else { if (mNegativeUserSentiment) { @@ -288,7 +270,7 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G } private void saveImportance() { - if (mNonblockable) { + if (mIsNonblockable) { return; } MetricsLogger.action(mContext, MetricsEvent.ACTION_SAVE_IMPORTANCE, @@ -314,7 +296,7 @@ public class NotificationInfo extends LinearLayout implements NotificationGuts.G keep.setOnClickListener(mOnKeepShowing); minimize.setOnClickListener(mOnStopMinNotifications); - if (mNonblockable) { + if (mIsNonblockable) { keep.setText(R.string.notification_done); block.setVisibility(GONE); minimize.setVisibility(GONE); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconContainer.java new file mode 100644 index 0000000000000000000000000000000000000000..56f78f4192757713c224ad05d87659a20d060f3a --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconContainer.java @@ -0,0 +1,33 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar; + +import com.android.internal.statusbar.StatusBarIcon; +import java.util.ArrayList; +import java.util.List; + +/** + * Holds an array of {@link com.android.internal.statusbar.StatusBarIcon}s and draws them + * in a linear layout + */ +public class StatusBarIconContainer { + private final List mIcons = new ArrayList<>(); + + public StatusBarIconContainer(List icons) { + mIcons.addAll(icons); + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java index 603902a4507d36dc8e0935c5264ebf5abd3bf32e..bd6bd12a5e9bef0de638f92cc020ca7766553320 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java @@ -16,6 +16,8 @@ package com.android.systemui.statusbar; +import static com.android.systemui.statusbar.policy.DarkIconDispatcher.getTint; + import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; @@ -23,6 +25,7 @@ import android.animation.ValueAnimator; import android.app.Notification; import android.content.Context; import android.content.pm.ApplicationInfo; +import android.content.res.ColorStateList; import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Canvas; @@ -56,7 +59,7 @@ import com.android.systemui.statusbar.notification.NotificationUtils; import java.text.NumberFormat; import java.util.Arrays; -public class StatusBarIconView extends AnimatedImageView { +public class StatusBarIconView extends AnimatedImageView implements StatusIconDisplayable { public static final int NO_COLOR = 0; /** @@ -867,6 +870,21 @@ public class StatusBarIconView extends AnimatedImageView { mOnDismissListener = onDismissListener; } + @Override + public void onDarkChanged(Rect area, float darkIntensity, int tint) { + setImageTintList(ColorStateList.valueOf(getTint(area, this, tint))); + } + + @Override + public boolean isIconVisible() { + return mIcon != null && mIcon.visible; + } + + @Override + public boolean isIconBlocked() { + return mBlocked; + } + public interface OnVisibilityChangedListener { void onVisibilityChanged(int newVisibility); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java new file mode 100644 index 0000000000000000000000000000000000000000..b7620f30d742e2c2f9886967cc6a63420c03d9fb --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarMobileView.java @@ -0,0 +1,207 @@ +/* + * 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.systemui.statusbar; + +import static com.android.systemui.statusbar.policy.DarkIconDispatcher.getTint; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.graphics.Color; +import android.graphics.Rect; +import android.util.AttributeSet; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; + +import com.android.internal.annotations.VisibleForTesting; +import com.android.keyguard.AlphaOptimizedLinearLayout; +import com.android.settingslib.graph.SignalDrawable; +import com.android.systemui.R; +import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState; +import com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver; + +public class StatusBarMobileView extends AlphaOptimizedLinearLayout implements DarkReceiver, + StatusIconDisplayable { + private static final String TAG = "StatusBarMobileView"; + + private String mSlot; + private MobileIconState mState; + private SignalDrawable mMobileDrawable; + private View mInoutContainer; + private ImageView mIn; + private ImageView mOut; + private ImageView mMobile, mMobileType, mMobileRoaming; + private View mMobileRoamingSpace; + + public static StatusBarMobileView fromContext(Context context) { + LayoutInflater inflater = LayoutInflater.from(context); + + return (StatusBarMobileView) + inflater.inflate(R.layout.status_bar_mobile_signal_group, null); + } + + public StatusBarMobileView(Context context) { + super(context); + } + + public StatusBarMobileView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public StatusBarMobileView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public StatusBarMobileView(Context context, AttributeSet attrs, int defStyleAttr, + int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + + init(); + } + + private void init() { + mMobile = findViewById(R.id.mobile_signal); + mMobileType = findViewById(R.id.mobile_type); + mMobileRoaming = findViewById(R.id.mobile_roaming); + mMobileRoamingSpace = findViewById(R.id.mobile_roaming_space); + mIn = findViewById(R.id.mobile_in); + mOut = findViewById(R.id.mobile_out); + mInoutContainer = findViewById(R.id.inout_container); + + mMobileDrawable = new SignalDrawable(getContext()); + mMobile.setImageDrawable(mMobileDrawable); + } + + public void applyMobileState(MobileIconState state) { + if (state == null) { + setVisibility(View.GONE); + mState = null; + return; + } + + if (mState == null) { + mState = state; + initViewState(); + return; + } + + if (!mState.equals(state)) { + updateState(state); + } + } + + private void initViewState() { + setContentDescription(mState.contentDescription); + if (!mState.visible) { + setVisibility(View.GONE); + } else { + setVisibility(View.VISIBLE); + } + mMobileDrawable.setLevel(mState.strengthId); + if (mState.typeId > 0) { + mMobileType.setContentDescription(mState.typeContentDescription); + mMobileType.setImageResource(mState.typeId); + mMobileType.setVisibility(View.VISIBLE); + } else { + mMobileType.setVisibility(View.GONE); + } + + mMobileRoaming.setVisibility(mState.roaming ? View.VISIBLE : View.GONE); + mMobileRoamingSpace.setVisibility(mState.roaming ? View.VISIBLE : View.GONE); + mIn.setVisibility(mState.activityIn ? View.VISIBLE : View.GONE); + mOut.setVisibility(mState.activityIn ? View.VISIBLE : View.GONE); + mInoutContainer.setVisibility((mState.activityIn || mState.activityOut) + ? View.VISIBLE : View.GONE); + } + + private void updateState(MobileIconState state) { + setContentDescription(state.contentDescription); + if (mState.visible != state.visible) { + setVisibility(state.visible ? View.VISIBLE : View.GONE); + } + if (mState.strengthId != state.strengthId) { + mMobileDrawable.setLevel(state.strengthId); + } + if (mState.typeId != state.typeId && state.typeId != 0) { + mMobileType.setContentDescription(state.typeContentDescription); + mMobileType.setImageResource(state.typeId); + mMobileType.setVisibility(View.VISIBLE); + } else { + mMobileType.setVisibility(View.GONE); + } + + mMobileRoaming.setVisibility(state.roaming ? View.VISIBLE : View.GONE); + mMobileRoamingSpace.setVisibility(state.roaming ? View.VISIBLE : View.GONE); + mIn.setVisibility(state.activityIn ? View.VISIBLE : View.GONE); + mOut.setVisibility(state.activityIn ? View.VISIBLE : View.GONE); + mInoutContainer.setVisibility((state.activityIn || state.activityOut) + ? View.VISIBLE : View.GONE); + + mState = state; + } + + @Override + public void onDarkChanged(Rect area, float darkIntensity, int tint) { + mMobileDrawable.setDarkIntensity(darkIntensity); + ColorStateList color = ColorStateList.valueOf(getTint(area, this, tint)); + mIn.setImageTintList(color); + mOut.setImageTintList(color); + mMobileType.setImageTintList(color); + mMobileRoaming.setImageTintList(color); + } + + @Override + public String getSlot() { + return mSlot; + } + + public void setSlot(String slot) { + mSlot = slot; + } + + @Override + public void setStaticDrawableColor(int color) { + ColorStateList list = ColorStateList.valueOf(color); + float intensity = color == Color.WHITE ? 0 : 1; + mMobileDrawable.setDarkIntensity(intensity); + + mIn.setImageTintList(list); + mOut.setImageTintList(list); + mMobileType.setImageTintList(list); + mMobileRoaming.setImageTintList(list); + } + + @Override + public boolean isIconVisible() { + return mState.visible; + } + + @VisibleForTesting + public MobileIconState getState() { + return mState; + } + + @Override + public String toString() { + return "StatusBarMobileView(slot=" + mSlot + " state=" + mState + ")"; + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWifiView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWifiView.java new file mode 100644 index 0000000000000000000000000000000000000000..afd373ed6321ec1aa2636ffe83211664bdf6bb20 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarWifiView.java @@ -0,0 +1,192 @@ +/* + * 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.systemui.statusbar; + +import static com.android.systemui.statusbar.policy.DarkIconDispatcher.getTint; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; +import android.util.AttributeSet; +import android.view.ContextThemeWrapper; +import android.view.LayoutInflater; +import android.view.View; +import android.widget.ImageView; + +import com.android.keyguard.AlphaOptimizedLinearLayout; +import com.android.settingslib.Utils; +import com.android.systemui.R; +import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState; +import com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver; + +/** + * Start small: StatusBarWifiView will be able to layout from a WifiIconState + */ +public class StatusBarWifiView extends AlphaOptimizedLinearLayout implements DarkReceiver, + StatusIconDisplayable { + private static final String TAG = "StatusBarWifiView"; + + private ImageView mWifiIcon; + private ImageView mIn; + private ImageView mOut; + private View mInoutContainer; + private View mSignalSpacer; + private View mAirplaneSpacer; + private WifiIconState mState; + private String mSlot; + private float mDarkIntensity = 0; + + private ContextThemeWrapper mDarkContext; + private ContextThemeWrapper mLightContext; + + public static StatusBarWifiView fromContext(Context context) { + LayoutInflater inflater = LayoutInflater.from(context); + return (StatusBarWifiView) inflater.inflate(R.layout.status_bar_wifi_group, null); + } + + public StatusBarWifiView(Context context) { + super(context); + } + + public StatusBarWifiView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public StatusBarWifiView(Context context, AttributeSet attrs, int defStyleAttr) { + super(context, attrs, defStyleAttr); + } + + public StatusBarWifiView(Context context, AttributeSet attrs, int defStyleAttr, + int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + init(); + } + + public void setSlot(String slot) { + mSlot = slot; + } + + @Override + public void setStaticDrawableColor(int color) { + ColorStateList list = ColorStateList.valueOf(color); + mWifiIcon.setImageTintList(list); + mIn.setImageTintList(list); + mOut.setImageTintList(list); + } + + @Override + public String getSlot() { + return mSlot; + } + + @Override + public boolean isIconVisible() { + return mState != null && mState.visible; + } + + private void init() { + int dualToneLightTheme = Utils.getThemeAttr(mContext, R.attr.lightIconTheme); + int dualToneDarkTheme = Utils.getThemeAttr(mContext, R.attr.darkIconTheme); + mLightContext = new ContextThemeWrapper(mContext, dualToneLightTheme); + mDarkContext = new ContextThemeWrapper(mContext, dualToneDarkTheme); + + mWifiIcon = findViewById(R.id.wifi_signal); + mIn = findViewById(R.id.wifi_in); + mOut = findViewById(R.id.wifi_out); + mSignalSpacer = findViewById(R.id.wifi_signal_spacer); + mAirplaneSpacer = findViewById(R.id.wifi_airplane_spacer); + mInoutContainer = findViewById(R.id.inout_container); + } + + public void applyWifiState(WifiIconState state) { + if (state == null) { + setVisibility(View.GONE); + mState = null; + return; + } + + if (mState == null) { + mState = state; + initViewState(); + } + + if (!mState.equals(state)) { + updateState(state); + } + } + + private void updateState(WifiIconState state) { + if (mState.resId != state.resId && state.resId >= 0) { + NeutralGoodDrawable drawable = NeutralGoodDrawable + .create(mLightContext, mDarkContext, state.resId); + drawable.setDarkIntensity(mDarkIntensity); + mWifiIcon.setImageDrawable(drawable); + } + + mIn.setVisibility(state.activityIn ? View.VISIBLE : View.GONE); + mOut.setVisibility(state.activityOut ? View.VISIBLE : View.GONE); + mInoutContainer.setVisibility( + (state.activityIn || state.activityOut) ? View.VISIBLE : View.GONE); + mAirplaneSpacer.setVisibility(state.airplaneSpacerVisible ? View.VISIBLE : View.GONE); + mSignalSpacer.setVisibility(state.signalSpacerVisible ? View.VISIBLE : View.GONE); + if (mState.visible != state.visible) { + setVisibility(state.visible ? View.VISIBLE : View.GONE); + } + + mState = state; + } + + private void initViewState() { + if (mState.resId >= 0) { + NeutralGoodDrawable drawable = NeutralGoodDrawable.create( + mLightContext, mDarkContext, mState.resId); + drawable.setDarkIntensity(mDarkIntensity); + mWifiIcon.setImageDrawable(drawable); + } + + mIn.setVisibility(mState.activityIn ? View.VISIBLE : View.GONE); + mOut.setVisibility(mState.activityOut ? View.VISIBLE : View.GONE); + mInoutContainer.setVisibility( + (mState.activityIn || mState.activityOut) ? View.VISIBLE : View.GONE); + mAirplaneSpacer.setVisibility(mState.airplaneSpacerVisible ? View.VISIBLE : View.GONE); + mSignalSpacer.setVisibility(mState.signalSpacerVisible ? View.VISIBLE : View.GONE); + setVisibility(mState.visible ? View.VISIBLE : View.GONE); + } + + @Override + public void onDarkChanged(Rect area, float darkIntensity, int tint) { + mDarkIntensity = darkIntensity; + Drawable d = mWifiIcon.getDrawable(); + if (d instanceof NeutralGoodDrawable) { + ((NeutralGoodDrawable)d).setDarkIntensity(darkIntensity); + } + mIn.setImageTintList(ColorStateList.valueOf(getTint(area, this, tint))); + mOut.setImageTintList(ColorStateList.valueOf(getTint(area, this, tint))); + } + + + @Override + public String toString() { + return "StatusBarWifiView(slot=" + mSlot + " state=" + mState + ")"; + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusIconDisplayable.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusIconDisplayable.java new file mode 100644 index 0000000000000000000000000000000000000000..ccab0d6fa44b81202961f8b2dfbe04347eb60d98 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusIconDisplayable.java @@ -0,0 +1,29 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar; + +import com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver; + +public interface StatusIconDisplayable extends DarkReceiver { + String getSlot(); + void setStaticDrawableColor(int color); + boolean isIconVisible(); + default boolean isIconBlocked() { + return false; + } +} + diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarFacetButtonController.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarFacetButtonController.java index 284113624cc14f9abb64493e900346fb99fe30bf..b7d501e7f745e2cec98353bbec7000622b9b6244 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarFacetButtonController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarFacetButtonController.java @@ -46,6 +46,12 @@ public class CarFacetButtonController { } } + public void removeAll() { + mButtonsByCategory.clear(); + mButtonsByPackage.clear(); + mSelectedFacetButton = null; + } + /** * This will unselect the currently selected CarFacetButton and determine which one should be * selected next. It does this by reading the properties on the CarFacetButton and seeing if diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java index a95d0a4dc7b8732e51bc2b6b07db807bc0efbfe3..3530e0b84664e09c6037f10445e807998aae3b2c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/CarStatusBar.java @@ -45,6 +45,7 @@ import com.android.systemui.statusbar.car.hvac.HvacController; import com.android.systemui.statusbar.phone.CollapsedStatusBarFragment; import com.android.systemui.statusbar.phone.StatusBar; import com.android.systemui.statusbar.policy.BatteryController; +import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.UserSwitcherController; import java.io.FileDescriptor; @@ -80,12 +81,16 @@ public class CarStatusBar extends StatusBar implements private boolean mShowRight; private boolean mShowBottom; private CarFacetButtonController mCarFacetButtonController; + private ActivityManagerWrapper mActivityManagerWrapper; + private DeviceProvisionedController mDeviceProvisionedController; + private boolean mDeviceIsProvisioned = true; @Override public void start() { super.start(); mTaskStackListener = new TaskStackListenerImpl(); - ActivityManagerWrapper.getInstance().registerTaskStackListener(mTaskStackListener); + mActivityManagerWrapper = ActivityManagerWrapper.getInstance(); + mActivityManagerWrapper.registerTaskStackListener(mTaskStackListener); mStackScroller.setScrollingEnabled(true); @@ -96,12 +101,54 @@ public class CarStatusBar extends StatusBar implements Log.d(TAG, "Connecting to HVAC service"); Dependency.get(HvacController.class).connectToCarService(); } + mCarFacetButtonController = Dependency.get(CarFacetButtonController.class); + mDeviceProvisionedController = Dependency.get(DeviceProvisionedController.class); + mDeviceIsProvisioned = mDeviceProvisionedController.isDeviceProvisioned(); + if (!mDeviceIsProvisioned) { + mDeviceProvisionedController.addCallback( + new DeviceProvisionedController.DeviceProvisionedListener() { + @Override + public void onDeviceProvisionedChanged() { + mDeviceIsProvisioned = + mDeviceProvisionedController.isDeviceProvisioned(); + restartNavBars(); + } + }); + } + } + + /** + * Remove all content from navbars and rebuild them. Used to allow for different nav bars + * before and after the device is provisioned + */ + private void restartNavBars() { + mCarFacetButtonController.removeAll(); + if (ENABLE_HVAC_CONNECTION) { + Dependency.get(HvacController.class).removeAllComponents(); + } + if (mNavigationBarWindow != null) { + mNavigationBarWindow.removeAllViews(); + mNavigationBarView = null; + } + + if (mLeftNavigationBarWindow != null) { + mLeftNavigationBarWindow.removeAllViews(); + mLeftNavigationBarView = null; + } + + if (mRightNavigationBarWindow != null) { + mRightNavigationBarWindow.removeAllViews(); + mRightNavigationBarView = null; + } + buildNavBarContent(); } + @Override public void destroy() { mCarBatteryController.stopListening(); mConnectedDeviceSignalController.stopListening(); + mActivityManagerWrapper.unregisterTaskStackListener(mTaskStackListener); if (mNavigationBarWindow != null) { mWindowManager.removeViewImmediate(mNavigationBarWindow); @@ -117,10 +164,10 @@ public class CarStatusBar extends StatusBar implements mWindowManager.removeViewImmediate(mRightNavigationBarWindow); mRightNavigationBarView = null; } - super.destroy(); } + @Override protected void makeStatusBarView() { super.makeStatusBarView(); @@ -167,129 +214,132 @@ public class CarStatusBar extends StatusBar implements @Override protected void createNavigationBar() { - mCarFacetButtonController = Dependency.get(CarFacetButtonController.class); - if (mNavigationBarView != null) { - return; - } - mShowBottom = mContext.getResources().getBoolean(R.bool.config_enableBottomNavigationBar); + mShowLeft = mContext.getResources().getBoolean(R.bool.config_enableLeftNavigationBar); + mShowRight = mContext.getResources().getBoolean(R.bool.config_enableRightNavigationBar); + + buildNavBarWindows(); + buildNavBarContent(); + attachNavBarWindows(); + } + + private void buildNavBarContent() { if (mShowBottom) { - buildBottomBar(); + buildBottomBar((mDeviceIsProvisioned) ? R.layout.car_navigation_bar : + R.layout.car_navigation_bar_unprovisioned); } - int widthForSides = mContext.getResources().getDimensionPixelSize( - R.dimen.navigation_bar_height_car_mode); + if (mShowLeft) { + buildLeft((mDeviceIsProvisioned) ? R.layout.car_left_navigation_bar : + R.layout.car_left_navigation_bar_unprovisioned); + } + if (mShowRight) { + buildRight((mDeviceIsProvisioned) ? R.layout.car_right_navigation_bar : + R.layout.car_right_navigation_bar_unprovisioned); + } + } - mShowLeft = mContext.getResources().getBoolean(R.bool.config_enableLeftNavigationBar); + private void buildNavBarWindows() { + if (mShowBottom) { + mNavigationBarWindow = (ViewGroup) View.inflate(mContext, + R.layout.navigation_bar_window, null); + } if (mShowLeft) { - buildLeft(widthForSides); + mLeftNavigationBarWindow = (ViewGroup) View.inflate(mContext, + R.layout.navigation_bar_window, null); + } + if (mShowRight) { + mRightNavigationBarWindow = (ViewGroup) View.inflate(mContext, + R.layout.navigation_bar_window, null); } - mShowRight = mContext.getResources().getBoolean(R.bool.config_enableRightNavigationBar); + } + + private void attachNavBarWindows() { + if (mShowBottom) { + WindowManager.LayoutParams lp = new WindowManager.LayoutParams( + LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, + WindowManager.LayoutParams.TYPE_NAVIGATION_BAR, + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE + | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL + | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH + | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH, + PixelFormat.TRANSLUCENT); + lp.setTitle("CarNavigationBar"); + lp.windowAnimations = 0; + mWindowManager.addView(mNavigationBarWindow, lp); + } + if (mShowLeft) { + int width = mContext.getResources().getDimensionPixelSize( + R.dimen.car_left_navigation_bar_width); + WindowManager.LayoutParams leftlp = new WindowManager.LayoutParams( + width, LayoutParams.MATCH_PARENT, + WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL, + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE + | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL + | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH + | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH, + PixelFormat.TRANSLUCENT); + leftlp.setTitle("LeftCarNavigationBar"); + leftlp.windowAnimations = 0; + leftlp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_IS_SCREEN_DECOR; + leftlp.gravity = Gravity.LEFT; + mWindowManager.addView(mLeftNavigationBarWindow, leftlp); + } if (mShowRight) { - buildRight(widthForSides); + int width = mContext.getResources().getDimensionPixelSize( + R.dimen.car_right_navigation_bar_width); + WindowManager.LayoutParams rightlp = new WindowManager.LayoutParams( + width, LayoutParams.MATCH_PARENT, + WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL, + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE + | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL + | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH + | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH, + PixelFormat.TRANSLUCENT); + rightlp.setTitle("RightCarNavigationBar"); + rightlp.windowAnimations = 0; + rightlp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_IS_SCREEN_DECOR; + rightlp.gravity = Gravity.RIGHT; + mWindowManager.addView(mRightNavigationBarWindow, rightlp); } } - - private void buildBottomBar() { + private void buildBottomBar(int layout) { // SystemUI requires that the navigation bar view have a parent. Since the regular // StatusBar inflates navigation_bar_window as this parent view, use the same view for the // CarNavigationBarView. - mNavigationBarWindow = (ViewGroup) View.inflate(mContext, - R.layout.navigation_bar_window, null); - if (mNavigationBarWindow == null) { - Log.e(TAG, "CarStatusBar failed inflate for R.layout.navigation_bar_window"); - } - - - View.inflate(mContext, R.layout.car_navigation_bar, mNavigationBarWindow); + View.inflate(mContext, layout, mNavigationBarWindow); mNavigationBarView = (CarNavigationBarView) mNavigationBarWindow.getChildAt(0); if (mNavigationBarView == null) { Log.e(TAG, "CarStatusBar failed inflate for R.layout.car_navigation_bar"); throw new RuntimeException("Unable to build botom nav bar due to missing layout"); } mNavigationBarView.setStatusBar(this); - - - WindowManager.LayoutParams lp = new WindowManager.LayoutParams( - LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, - WindowManager.LayoutParams.TYPE_NAVIGATION_BAR, - WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE - | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL - | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH - | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH, - PixelFormat.TRANSLUCENT); - lp.setTitle("CarNavigationBar"); - lp.windowAnimations = 0; - - - mWindowManager.addView(mNavigationBarWindow, lp); } - private void buildLeft(int widthForSides) { - mLeftNavigationBarWindow = (ViewGroup) View.inflate(mContext, - R.layout.navigation_bar_window, null); - if (mLeftNavigationBarWindow == null) { - Log.e(TAG, "CarStatusBar failed inflate for R.layout.navigation_bar_window"); - } - - View.inflate(mContext, R.layout.car_left_navigation_bar, mLeftNavigationBarWindow); + private void buildLeft(int layout) { + View.inflate(mContext, layout, mLeftNavigationBarWindow); mLeftNavigationBarView = (CarNavigationBarView) mLeftNavigationBarWindow.getChildAt(0); if (mLeftNavigationBarView == null) { Log.e(TAG, "CarStatusBar failed inflate for R.layout.car_navigation_bar"); throw new RuntimeException("Unable to build left nav bar due to missing layout"); } mLeftNavigationBarView.setStatusBar(this); - - WindowManager.LayoutParams leftlp = new WindowManager.LayoutParams( - widthForSides, LayoutParams.MATCH_PARENT, - WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL, - WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE - | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL - | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH - | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH, - PixelFormat.TRANSLUCENT); - leftlp.setTitle("LeftCarNavigationBar"); - leftlp.windowAnimations = 0; - leftlp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_IS_SCREEN_DECOR; - leftlp.gravity = Gravity.LEFT; - mWindowManager.addView(mLeftNavigationBarWindow, leftlp); } - private void buildRight(int widthForSides) { - mRightNavigationBarWindow = (ViewGroup) View.inflate(mContext, - R.layout.navigation_bar_window, null); - if (mRightNavigationBarWindow == null) { - Log.e(TAG, "CarStatusBar failed inflate for R.layout.navigation_bar_window"); - } - - View.inflate(mContext, R.layout.car_right_navigation_bar, mRightNavigationBarWindow); + private void buildRight(int layout) { + View.inflate(mContext, layout, mRightNavigationBarWindow); mRightNavigationBarView = (CarNavigationBarView) mRightNavigationBarWindow.getChildAt(0); if (mRightNavigationBarView == null) { Log.e(TAG, "CarStatusBar failed inflate for R.layout.car_navigation_bar"); throw new RuntimeException("Unable to build right nav bar due to missing layout"); } - mRightNavigationBarView.setStatusBar(this); - - WindowManager.LayoutParams rightlp = new WindowManager.LayoutParams( - widthForSides, LayoutParams.MATCH_PARENT, - WindowManager.LayoutParams.TYPE_NAVIGATION_BAR_PANEL, - WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE - | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL - | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH - | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH, - PixelFormat.TRANSLUCENT); - rightlp.setTitle("RightCarNavigationBar"); - rightlp.windowAnimations = 0; - rightlp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_IS_SCREEN_DECOR; - rightlp.gravity = Gravity.RIGHT; - mWindowManager.addView(mRightNavigationBarWindow, rightlp); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/car/hvac/HvacController.java b/packages/SystemUI/src/com/android/systemui/statusbar/car/hvac/HvacController.java index 23bf88796da39b00261b5e55fd39ff3159ed69d1..7d283d9fde9da8b433e30fcfcd2db7cd9cac98b4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/car/hvac/HvacController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/car/hvac/HvacController.java @@ -175,6 +175,14 @@ public class HvacController { } }; + /** + * Removes all registered components. This is useful if you need to rebuild the UI since + * components self register. + */ + public void removeAllComponents() { + mTempComponents.clear(); + } + /** * Key for storing {@link TemperatureView}s in a hash map */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java index f42473d4cddfbbf8b9ca30c1fd206192d3aeed68..75b31c5a1eddb68e3b349ea5cf5bb85e7b2b9899 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java @@ -17,8 +17,6 @@ package com.android.systemui.statusbar.phone; import static android.app.StatusBarManager.DISABLE_NOTIFICATION_ICONS; import static android.app.StatusBarManager.DISABLE_SYSTEM_INFO; -import static com.android.systemui.statusbar.phone.StatusBar.reinflateSignalCluster; - import android.annotation.Nullable; import android.app.Fragment; import android.app.StatusBarManager; @@ -34,7 +32,6 @@ import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.SysUiServiceProvider; import com.android.systemui.statusbar.CommandQueue; -import com.android.systemui.statusbar.SignalClusterView; import com.android.systemui.statusbar.phone.StatusBarIconController.DarkIconManager; import com.android.systemui.statusbar.policy.DarkIconDispatcher; import com.android.systemui.statusbar.policy.EncryptionHelper; @@ -63,7 +60,6 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue private int mDisabled1; private StatusBar mStatusBarComponent; private DarkIconManager mDarkIconManager; - private SignalClusterView mSignalClusterView; private View mOperatorNameFrame; private SignalCallback mSignalCallback = new SignalCallback() { @@ -99,9 +95,6 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue Dependency.get(StatusBarIconController.class).addIconGroup(mDarkIconManager); mSystemIconArea = mStatusBar.findViewById(R.id.system_icon_area); mClockView = mStatusBar.findViewById(R.id.clock); - mSignalClusterView = mStatusBar.findViewById(R.id.signal_cluster); - Dependency.get(DarkIconDispatcher.class).addDarkReceiver(mSignalClusterView); - // Default to showing until we know otherwise. showSystemIconArea(false); initEmergencyCryptkeeperText(); initOperatorName(); @@ -128,7 +121,6 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue @Override public void onDestroyView() { super.onDestroyView(); - Dependency.get(DarkIconDispatcher.class).removeDarkReceiver(mSignalClusterView); Dependency.get(StatusBarIconController.class).removeIconGroup(mDarkIconManager); if (mNetworkController.hasEmergencyCryptKeeperText()) { mNetworkController.removeCallback(mSignalCallback); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DarkIconDispatcherImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DarkIconDispatcherImpl.java index 3f9ae80231490b7ee4b2ead81f67ae71ced1ab72..80c4eb043d24dfe767c228d1bcb8b1da1838d671 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DarkIconDispatcherImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DarkIconDispatcherImpl.java @@ -69,7 +69,7 @@ public class DarkIconDispatcherImpl implements DarkIconDispatcher { mReceivers.remove(object); } - public void applyDark(ImageView object) { + public void applyDark(DarkReceiver object) { mReceivers.get(object).onDarkChanged(mTintArea, mDarkIntensity, mIconTint); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java index edfd02bdfb2629d87e440f62319b3c1bdb682e71..48540b1116095095966714912709b9a3c8d25195 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DemoStatusIcons.java @@ -20,25 +20,33 @@ import android.graphics.Rect; import android.graphics.drawable.Icon; import android.os.Bundle; import android.os.UserHandle; +import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.widget.LinearLayout; import com.android.internal.statusbar.StatusBarIcon; -import com.android.settingslib.Utils; import com.android.systemui.DemoMode; import com.android.systemui.R; +import com.android.systemui.statusbar.StatusIconDisplayable; import com.android.systemui.statusbar.StatusBarIconView; +import com.android.systemui.statusbar.StatusBarMobileView; +import com.android.systemui.statusbar.StatusBarWifiView; +import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState; +import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState; import com.android.systemui.statusbar.policy.DarkIconDispatcher; import com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver; -import com.android.systemui.statusbar.policy.LocationControllerImpl; -import com.android.systemui.util.leak.LeakDetector; +import java.util.ArrayList; public class DemoStatusIcons extends StatusIconContainer implements DemoMode, DarkReceiver { + private static final String TAG = "DemoStatusIcons"; + private final LinearLayout mStatusIcons; + private final ArrayList mMobileViews = new ArrayList<>(); private final int mIconSize; + private StatusBarWifiView mWifiView; private boolean mDemoMode; private int mColor; @@ -56,6 +64,7 @@ public class DemoStatusIcons extends StatusIconContainer implements DemoMode, Da } public void remove() { + mMobileViews.clear(); ((ViewGroup) getParent()).removeView(this); } @@ -66,7 +75,7 @@ public class DemoStatusIcons extends StatusIconContainer implements DemoMode, Da private void updateColors() { for (int i = 0; i < getChildCount(); i++) { - StatusBarIconView child = (StatusBarIconView) getChildAt(i); + StatusIconDisplayable child = (StatusIconDisplayable) getChildAt(i); child.setStaticDrawableColor(mColor); } } @@ -145,6 +154,7 @@ public class DemoStatusIcons extends StatusIconContainer implements DemoMode, Da } } + /// Can only be used to update non-signal related slots private void updateSlot(String slot, String iconPkg, int iconId) { if (!mDemoMode) return; if (iconPkg == null) { @@ -152,7 +162,11 @@ public class DemoStatusIcons extends StatusIconContainer implements DemoMode, Da } int removeIndex = -1; for (int i = 0; i < getChildCount(); i++) { - StatusBarIconView v = (StatusBarIconView) getChildAt(i); + View child = getChildAt(i); + if (!(child instanceof StatusBarIconView)) { + continue; + } + StatusBarIconView v = (StatusBarIconView) child; if (slot.equals(v.getTag())) { if (iconId == 0) { removeIndex = i; @@ -182,8 +196,101 @@ public class DemoStatusIcons extends StatusIconContainer implements DemoMode, Da addView(v, 0, new LinearLayout.LayoutParams(mIconSize, mIconSize)); } + public void addDemoWifiView(WifiIconState state) { + Log.d(TAG, "addDemoWifiView: "); + StatusBarWifiView view = StatusBarWifiView.fromContext(mContext); + view.setSlot(state.slot); + + int viewIndex = getChildCount(); + // If we have mobile views, put wifi before them + for (int i = 0; i < getChildCount(); i++) { + View child = getChildAt(i); + if (child instanceof StatusBarMobileView) { + viewIndex = i; + break; + } + } + + mWifiView = view; + mWifiView.applyWifiState(state); + mWifiView.setStaticDrawableColor(mColor); + addView(view, viewIndex); + } + + public void updateWifiState(WifiIconState state) { + Log.d(TAG, "updateWifiState: "); + if (mWifiView == null) { + addDemoWifiView(state); + } else { + mWifiView.applyWifiState(state); + } + } + + public void addMobileView(MobileIconState state) { + Log.d(TAG, "addMobileView: "); + StatusBarMobileView view = StatusBarMobileView.fromContext(mContext); + + view.setSlot(state.slot); + view.applyMobileState(state); + view.setStaticDrawableColor(mColor); + + // mobile always goes at the end + mMobileViews.add(view); + addView(view, getChildCount()); + } + + public void updateMobileState(MobileIconState state) { + Log.d(TAG, "updateMobileState: "); + // If the view for this subId exists already, use it + for (int i = 0; i < mMobileViews.size(); i++) { + StatusBarMobileView view = mMobileViews.get(i); + if (view.getState().subId == state.subId) { + view.applyMobileState(state); + return; + } + } + + // Else we have to add it + addMobileView(state); + } + + public void onRemoveIcon(StatusIconDisplayable view) { + if (view.getSlot().equals("wifi")) { + removeView(mWifiView); + mWifiView = null; + } else { + StatusBarMobileView mobileView = matchingMobileView(view); + if (mobileView != null) { + removeView(mobileView); + mMobileViews.remove(mobileView); + } + } + } + + private StatusBarMobileView matchingMobileView(StatusIconDisplayable otherView) { + if (!(otherView instanceof StatusBarMobileView)) { + return null; + } + + StatusBarMobileView v = (StatusBarMobileView) otherView; + for (StatusBarMobileView view : mMobileViews) { + if (view.getState().subId == v.getState().subId) { + return view; + } + } + + return null; + } + @Override public void onDarkChanged(Rect area, float darkIntensity, int tint) { setColor(DarkIconDispatcher.getTint(area, mStatusIcons, tint)); + + if (mWifiView != null) { + mWifiView.onDarkChanged(area, darkIntensity, tint); + } + for (StatusBarMobileView view : mMobileViews) { + view.onDarkChanged(area, darkIntensity, tint); + } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java index fcd4e8f3669f5ee54b843546cf591994146e9f8a..df2b817101ab219304812b4fd558202bb4dda31c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java @@ -334,6 +334,20 @@ public class KeyguardBouncer { return mKeyguardView != null && mKeyguardView.hasDismissActions(); } + public int getTop() { + if (mKeyguardView == null) { + return 0; + } + + int top = mKeyguardView.getTop(); + // The password view has an extra top padding that should be ignored. + if (mKeyguardView.getCurrentSecurityMode() == SecurityMode.Password) { + View messageArea = mKeyguardView.findViewById(R.id.keyguard_message_area); + top += messageArea.getTop(); + } + return top; + } + protected void ensureView() { // Removal of the view might be deferred to reduce unlock latency, // in this case we need to force the removal, otherwise we'll diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java index 19e829592f79df6fce18a7865d963a02278d8e4e..3d7067d1d799ca2eac2bf684dcaed484c0fbc06b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java @@ -113,6 +113,11 @@ public class KeyguardClockPositionAlgorithm { */ private boolean mTracking; + /** + * Distance in pixels between the top of the screen and the first view of the bouncer. + */ + private int mBouncerTop; + /** * Refreshes the dimension values. */ @@ -129,7 +134,7 @@ public class KeyguardClockPositionAlgorithm { public void setup(int minTopMargin, int maxShadeBottom, int notificationStackHeight, float expandedHeight, float maxPanelHeight, int parentHeight, int keyguardStatusHeight, - float dark, boolean secure, boolean tracking) { + float dark, boolean secure, boolean tracking, int bouncerTop) { mMinTopMargin = minTopMargin + mContainerTopPadding; mMaxShadeBottom = maxShadeBottom; mNotificationStackHeight = notificationStackHeight; @@ -140,6 +145,7 @@ public class KeyguardClockPositionAlgorithm { mDarkAmount = dark; mCurrentlySecure = secure; mTracking = tracking; + mBouncerTop = bouncerTop; } public void run(Result result) { @@ -189,8 +195,10 @@ public class KeyguardClockPositionAlgorithm { private int getClockY() { // Dark: Align the bottom edge of the clock at about half of the screen: final float clockYDark = getMaxClockY() + burnInPreventionOffsetY(); - float clockYRegular = getExpandedClockPosition(); - float clockYTarget = mCurrentlySecure ? mMinTopMargin : -mKeyguardStatusHeight; + final float clockYRegular = getExpandedClockPosition(); + final boolean hasEnoughSpace = mMinTopMargin + mKeyguardStatusHeight < mBouncerTop; + float clockYTarget = mCurrentlySecure && hasEnoughSpace ? + mMinTopMargin : -mKeyguardStatusHeight; // Move clock up while collapsing the shade float shadeExpansion = mExpandedHeight / mMaxPanelHeight; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java index 994c0abcf70ba0c53be82dd310acb8a86385be47..b81780962f08d668b9da45922d38fa13de454502 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java @@ -207,7 +207,6 @@ public class KeyguardStatusBarView extends RelativeLayout @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { updateLayoutConsideringCutout(); - setSignalClusterLayoutWidth(); super.onMeasure(widthMeasureSpec, heightMeasureSpec); } @@ -296,17 +295,6 @@ public class KeyguardStatusBarView extends RelativeLayout return true; } - //TODO: Something is setting signal_cluster to MATCH_PARENT. Why? - private void setSignalClusterLayoutWidth() { - View signalCluster = findViewById(R.id.signal_cluster); - if (signalCluster == null) { - return; - } - - LinearLayout.LayoutParams lp = (LinearLayout.LayoutParams) signalCluster.getLayoutParams(); - lp.width = LinearLayout.LayoutParams.WRAP_CONTENT; - } - public void setListening(boolean listening) { if (listening == mBatteryListening) { return; @@ -459,7 +447,6 @@ public class KeyguardStatusBarView extends RelativeLayout mIconManager.setTint(iconColor); Rect tintArea = new Rect(0, 0, 0, 0); - applyDarkness(R.id.signal_cluster, tintArea, intensity, iconColor); applyDarkness(R.id.battery, tintArea, intensity, iconColor); applyDarkness(R.id.clock, tintArea, intensity, iconColor); // Reload user avatar diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java index 9063dea584b11397378e3a854a370f2109227e8e..b6a11f71f2511079e32121bf8bb5001f5eb2f32f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationIconAreaController.java @@ -150,7 +150,7 @@ public class NotificationIconAreaController implements DarkReceiver { // showAmbient == show in shade but not shelf if (!showAmbient && mEntryManager.getNotificationData().shouldSuppressStatusBar( - entry.key)) { + entry.notification)) { return false; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java index cccda90c20a8b13fbbdf16be34d6f725abb6b9dc..27ca0d11ee28345865d863f8e8de73eaaefad3ff 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -160,6 +160,7 @@ public class NotificationPanelView extends PanelView implements protected int mQsMinExpansionHeight; protected int mQsMaxExpansionHeight; private int mQsPeekHeight; + private int mBouncerTop; private boolean mStackScrollerOverscrolling; private boolean mQsExpansionFromOverscroll; private float mLastOverscroll; @@ -476,7 +477,8 @@ public class NotificationPanelView extends PanelView implements mKeyguardStatusView.getHeight(), mDarkAmount, mStatusBar.isKeyguardCurrentlySecure(), - mTracking); + mTracking, + mBouncerTop); mClockPositionAlgorithm.run(mClockPositionResult); if (animate || mClockAnimator != null) { startClockAnimation(mClockPositionResult.clockX, mClockPositionResult.clockY); @@ -550,6 +552,11 @@ public class NotificationPanelView extends PanelView implements return count; } + public void setBouncerTop(int bouncerTop) { + mBouncerTop = bouncerTop; + positionClockAndNotifications(); + } + private void startClockAnimation(int x, int y) { if (mClockAnimationTargetX == x && mClockAnimationTargetY == y) { return; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java index 33c3ee9b7cba24b13c0629c7805cf437f2b43f07..3e7b0d9f62d03a550064d5c911545873655c6cd2 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java @@ -297,7 +297,7 @@ public class PhoneStatusBarPolicy implements Callback, Callbacks, mIconController.setIcon(mSlotLocation, LOCATION_STATUS_ICON_ID, mContext.getString(R.string.accessibility_location_active)); } else { - mIconController.removeIcon(mSlotLocation); + mIconController.removeAllIconsForSlot(mSlotLocation); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java index fb1addfeb1c36dc9cf4663b1a46562520a735739..12bdfc674f048e129b493648055dd09fa4dde7cd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarTransitions.java @@ -32,7 +32,7 @@ public final class PhoneStatusBarTransitions extends BarTransitions { private final PhoneStatusBarView mView; private final float mIconAlphaWhenOpaque; - private View mLeftSide, mStatusIcons, mSignalCluster, mBattery, mClock; + private View mLeftSide, mStatusIcons, mBattery, mClock; private Animator mCurrentAnimation; public PhoneStatusBarTransitions(PhoneStatusBarView view) { @@ -45,7 +45,6 @@ public final class PhoneStatusBarTransitions extends BarTransitions { public void init() { mLeftSide = mView.findViewById(R.id.notification_icon_area); mStatusIcons = mView.findViewById(R.id.statusIcons); - mSignalCluster = mView.findViewById(R.id.signal_cluster); mBattery = mView.findViewById(R.id.battery); mClock = mView.findViewById(R.id.clock); applyModeBackground(-1, getMode(), false /*animate*/); @@ -90,7 +89,6 @@ public final class PhoneStatusBarTransitions extends BarTransitions { anims.playTogether( animateTransitionTo(mLeftSide, newAlpha), animateTransitionTo(mStatusIcons, newAlpha), - animateTransitionTo(mSignalCluster, newAlpha), animateTransitionTo(mBattery, newAlphaBC), animateTransitionTo(mClock, newAlphaBC) ); @@ -102,7 +100,6 @@ public final class PhoneStatusBarTransitions extends BarTransitions { } else { mLeftSide.setAlpha(newAlpha); mStatusIcons.setAlpha(newAlpha); - mSignalCluster.setAlpha(newAlpha); mBattery.setAlpha(newAlphaBC); mClock.setAlpha(newAlphaBC); } 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 c03ecb30622612ba1d6dc6f4e56dc687404a1334..750d2a5b3d502871324176ba443b1454cc04fd12 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -348,6 +348,7 @@ public class StatusBar extends SystemUI implements DemoMode, protected boolean mBouncerShowing; private PhoneStatusBarPolicy mIconPolicy; + private StatusBarSignalPolicy mSignalPolicy; private VolumeComponent mVolumeComponent; private BrightnessMirrorController mBrightnessMirrorController; @@ -562,7 +563,7 @@ public class StatusBar extends SystemUI implements DemoMode, }; private KeyguardUserSwitcher mKeyguardUserSwitcher; - private UserSwitcherController mUserSwitcherController; + protected UserSwitcherController mUserSwitcherController; private NetworkController mNetworkController; private KeyguardMonitorImpl mKeyguardMonitor = (KeyguardMonitorImpl) Dependency.get(KeyguardMonitor.class); @@ -588,7 +589,7 @@ public class StatusBar extends SystemUI implements DemoMode, } }; private boolean mNoAnimationOnNextBarModeChange; - private FalsingManager mFalsingManager; + protected FalsingManager mFalsingManager; private final KeyguardUpdateMonitorCallback mUpdateCallback = new KeyguardUpdateMonitorCallback() { @@ -747,6 +748,7 @@ public class StatusBar extends SystemUI implements DemoMode, // Lastly, call to the icon policy to install/update all the icons. mIconPolicy = new PhoneStatusBarPolicy(mContext, mIconController); + mSignalPolicy = new StatusBarSignalPolicy(mContext, mIconController); mUnlockMethodCache = UnlockMethodCache.getInstance(mContext); mUnlockMethodCache.addListener(this); @@ -1131,7 +1133,6 @@ public class StatusBar extends SystemUI implements DemoMode, } protected void reevaluateStyles() { - inflateSignalClusters(); inflateFooterView(); updateFooter(); inflateEmptyShadeView(); @@ -1145,36 +1146,6 @@ public class StatusBar extends SystemUI implements DemoMode, } } - private void inflateSignalClusters() { - if (mKeyguardStatusBar != null) reinflateSignalCluster(mKeyguardStatusBar); - } - - public static SignalClusterView reinflateSignalCluster(View view) { - Context context = view.getContext(); - SignalClusterView signalCluster = view.findViewById(R.id.signal_cluster); - if (signalCluster != null) { - ViewParent parent = signalCluster.getParent(); - if (parent instanceof ViewGroup) { - ViewGroup viewParent = (ViewGroup) parent; - int index = viewParent.indexOfChild(signalCluster); - viewParent.removeView(signalCluster); - SignalClusterView newCluster = (SignalClusterView) LayoutInflater.from(context) - .inflate(R.layout.signal_cluster_view, viewParent, false); - ViewGroup.MarginLayoutParams layoutParams = - (ViewGroup.MarginLayoutParams) viewParent.getLayoutParams(); - layoutParams.setMarginsRelative( - context.getResources().getDimensionPixelSize( - R.dimen.signal_cluster_margin_start), - 0, 0, 0); - newCluster.setLayoutParams(layoutParams); - viewParent.addView(newCluster, index); - return newCluster; - } - return signalCluster; - } - return null; - } - private void inflateEmptyShadeView() { if (mStackScroller == null) { return; @@ -3448,6 +3419,13 @@ public class StatusBar extends SystemUI implements DemoMode, return updateIsKeyguard(); } + /** + * @return True if StatusBar state is FULLSCREEN_USER_SWITCHER. + */ + public boolean isFullScreenUserSwitcherState() { + return mState == StatusBarState.FULLSCREEN_USER_SWITCHER; + } + private boolean updateIsKeyguard() { boolean wakeAndUnlocking = mFingerprintUnlockController.getMode() == FingerprintUnlockController.MODE_WAKE_AND_UNLOCK; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java index 956bebb6ca41327c2d2458a6c175264674a76fab..94e004bd1b47d3ad40281154f275c6189d5571ad 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconController.java @@ -16,12 +16,16 @@ package com.android.systemui.statusbar.phone; import static android.app.StatusBarManager.DISABLE2_SYSTEM_ICONS; import static android.app.StatusBarManager.DISABLE_NONE; +import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_ICON; +import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_MOBILE; +import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_WIFI; import android.content.Context; import android.os.Bundle; import android.support.annotation.VisibleForTesting; import android.text.TextUtils; import android.util.ArraySet; +import android.util.Log; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; @@ -33,19 +37,39 @@ import com.android.internal.statusbar.StatusBarIcon; import com.android.systemui.DemoMode; import com.android.systemui.Dependency; import com.android.systemui.R; +import com.android.systemui.statusbar.StatusIconDisplayable; import com.android.systemui.statusbar.StatusBarIconView; +import com.android.systemui.statusbar.StatusBarMobileView; +import com.android.systemui.statusbar.StatusBarWifiView; +import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState; +import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState; import com.android.systemui.statusbar.policy.DarkIconDispatcher; +import com.android.systemui.statusbar.policy.DarkIconDispatcher.DarkReceiver; import com.android.systemui.util.Utils.DisableStateTracker; +import java.util.List; public interface StatusBarIconController { + /** + * When an icon is added with TAG_PRIMARY, it will be treated as the primary icon + * in that slot and not added as a sub slot. + */ + public static final int TAG_PRIMARY = 0; + public void addIconGroup(IconManager iconManager); public void removeIconGroup(IconManager iconManager); public void setExternalIcon(String slot); public void setIcon(String slot, int resourceId, CharSequence contentDescription); public void setIcon(String slot, StatusBarIcon icon); - public void setIconVisibility(String slotTty, boolean b); - public void removeIcon(String slot); + public void setSignalIcon(String slot, WifiIconState state); + public void setMobileIcons(String slot, List states); + public void setIconVisibility(String slot, boolean b); + /** + * If you don't know what to pass for `tag`, either remove all icons for slot, or use + * TAG_PRIMARY to refer to the first icon at a given slot. + */ + public void removeIcon(String slot, int tag); + public void removeAllIconsForSlot(String slot); public static final String ICON_BLACKLIST = "icon_blacklist"; @@ -79,9 +103,9 @@ public interface StatusBarIconController { @Override protected void onIconAdded(int index, String slot, boolean blocked, - StatusBarIcon icon) { - StatusBarIconView v = addIcon(index, slot, blocked, icon); - mDarkIconDispatcher.addDarkReceiver(v); + StatusBarIconHolder holder) { + StatusIconDisplayable view = addHolder(index, slot, blocked, holder); + mDarkIconDispatcher.addDarkReceiver((DarkReceiver) view); } @Override @@ -95,21 +119,21 @@ public interface StatusBarIconController { @Override protected void destroy() { for (int i = 0; i < mGroup.getChildCount(); i++) { - mDarkIconDispatcher.removeDarkReceiver((ImageView) mGroup.getChildAt(i)); + mDarkIconDispatcher.removeDarkReceiver((DarkReceiver) mGroup.getChildAt(i)); } mGroup.removeAllViews(); } @Override protected void onRemoveIcon(int viewIndex) { - mDarkIconDispatcher.removeDarkReceiver((ImageView) mGroup.getChildAt(viewIndex)); + mDarkIconDispatcher.removeDarkReceiver((DarkReceiver) mGroup.getChildAt(viewIndex)); super.onRemoveIcon(viewIndex); } @Override public void onSetIcon(int viewIndex, StatusBarIcon icon) { super.onSetIcon(viewIndex, icon); - mDarkIconDispatcher.applyDark((ImageView) mGroup.getChildAt(viewIndex)); + mDarkIconDispatcher.applyDark((DarkReceiver) mGroup.getChildAt(viewIndex)); } @Override @@ -135,17 +159,18 @@ public interface StatusBarIconController { } @Override - protected void onIconAdded(int index, String slot, boolean blocked, StatusBarIcon icon) { - StatusBarIconView v = addIcon(index, slot, blocked, icon); - v.setStaticDrawableColor(mColor); + protected void onIconAdded(int index, String slot, boolean blocked, + StatusBarIconHolder holder) { + StatusIconDisplayable view = addHolder(index, slot, blocked, holder); + view.setStaticDrawableColor(mColor); } public void setTint(int color) { mColor = color; for (int i = 0; i < mGroup.getChildCount(); i++) { View child = mGroup.getChildAt(i); - if (child instanceof StatusBarIconView) { - StatusBarIconView icon = (StatusBarIconView) child; + if (child instanceof StatusIconDisplayable) { + StatusIconDisplayable icon = (StatusIconDisplayable) child; icon.setStaticDrawableColor(mColor); } } @@ -171,6 +196,7 @@ public interface StatusBarIconController { // Enables SystemUI demo mode to take effect in this group protected boolean mDemoable = true; + private boolean mIsInDemoMode; protected DemoStatusIcons mDemoStatusIcons; public IconManager(ViewGroup group) { @@ -205,10 +231,27 @@ public interface StatusBarIconController { } protected void onIconAdded(int index, String slot, boolean blocked, - StatusBarIcon icon) { - addIcon(index, slot, blocked, icon); + StatusBarIconHolder holder) { + addHolder(index, slot, blocked, holder); + } + + protected StatusIconDisplayable addHolder(int index, String slot, boolean blocked, + StatusBarIconHolder holder) { + switch (holder.getType()) { + case TYPE_ICON: + return addIcon(index, slot, blocked, holder.getIcon()); + + case TYPE_WIFI: + return addSignalIcon(index, slot, holder.getWifiState()); + + case TYPE_MOBILE: + return addMobileIcon(index, slot, holder.getMobileState()); + } + + return null; } + @VisibleForTesting protected StatusBarIconView addIcon(int index, String slot, boolean blocked, StatusBarIcon icon) { StatusBarIconView view = onCreateStatusBarIconView(slot, blocked); @@ -218,10 +261,45 @@ public interface StatusBarIconController { } @VisibleForTesting - protected StatusBarIconView onCreateStatusBarIconView(String slot, boolean blocked) { + protected StatusBarWifiView addSignalIcon(int index, String slot, WifiIconState state) { + StatusBarWifiView view = onCreateStatusBarWifiView(slot); + view.applyWifiState(state); + mGroup.addView(view, index, onCreateLayoutParams()); + + if (mIsInDemoMode) { + mDemoStatusIcons.addDemoWifiView(state); + } + return view; + } + + @VisibleForTesting + protected StatusBarMobileView addMobileIcon(int index, String slot, MobileIconState state) { + StatusBarMobileView view = onCreateStatusBarMobileView(slot); + view.applyMobileState(state); + mGroup.addView(view, index, onCreateLayoutParams()); + + if (mIsInDemoMode) { + mDemoStatusIcons.addMobileView(state); + } + return view; + } + + private StatusBarIconView onCreateStatusBarIconView(String slot, boolean blocked) { return new StatusBarIconView(mContext, slot, null, blocked); } + private StatusBarWifiView onCreateStatusBarWifiView(String slot) { + StatusBarWifiView view = StatusBarWifiView.fromContext(mContext); + view.setSlot(slot); + return view; + } + + private StatusBarMobileView onCreateStatusBarMobileView(String slot) { + StatusBarMobileView view = StatusBarMobileView.fromContext(mContext); + view.setSlot(slot); + return view; + } + protected LinearLayout.LayoutParams onCreateLayoutParams() { return new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, mIconSize); } @@ -256,6 +334,9 @@ public interface StatusBarIconController { } protected void onRemoveIcon(int viewIndex) { + if (mIsInDemoMode) { + mDemoStatusIcons.onRemoveIcon((StatusIconDisplayable) mGroup.getChildAt(viewIndex)); + } mGroup.removeViewAt(viewIndex); } @@ -264,17 +345,59 @@ public interface StatusBarIconController { view.set(icon); } + public void onSetIconHolder(int viewIndex, StatusBarIconHolder holder) { + switch (holder.getType()) { + case TYPE_ICON: + onSetIcon(viewIndex, holder.getIcon()); + return; + case TYPE_WIFI: + onSetSignalIcon(viewIndex, holder.getWifiState()); + return; + + case TYPE_MOBILE: + onSetMobileIcon(viewIndex, holder.getMobileState()); + default: + break; + } + } + + public void onSetSignalIcon(int viewIndex, WifiIconState state) { + StatusBarWifiView wifiView = (StatusBarWifiView) mGroup.getChildAt(viewIndex); + if (wifiView != null) { + wifiView.applyWifiState(state); + } + + if (mIsInDemoMode) { + mDemoStatusIcons.updateWifiState(state); + } + } + + public void onSetMobileIcon(int viewIndex, MobileIconState state) { + StatusBarMobileView view = (StatusBarMobileView) mGroup.getChildAt(viewIndex); + if (view != null) { + view.applyMobileState(state); + } + + if (mIsInDemoMode) { + mDemoStatusIcons.updateMobileState(state); + } + } + @Override public void dispatchDemoCommand(String command, Bundle args) { if (!mDemoable) { return; } - if (mDemoStatusIcons != null && command.equals(COMMAND_EXIT)) { - mDemoStatusIcons.dispatchDemoCommand(command, args); - exitDemoMode(); + if (command.equals(COMMAND_EXIT)) { + if (mDemoStatusIcons != null) { + mDemoStatusIcons.dispatchDemoCommand(command, args); + exitDemoMode(); + } + mIsInDemoMode = false; } else { if (mDemoStatusIcons == null) { + mIsInDemoMode = true; mDemoStatusIcons = createDemoStatusIcons(); } mDemoStatusIcons.dispatchDemoCommand(command, args); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java index 8f5e705ff2a44a5f437e6b106d5980de6c925e1d..510af03e6f283e7b8a8df9e910fa7b0cb8d0354f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconControllerImpl.java @@ -16,13 +16,14 @@ package com.android.systemui.statusbar.phone; +import android.annotation.NonNull; import android.content.Context; import android.graphics.drawable.Icon; import android.os.Bundle; import android.os.UserHandle; +import android.util.ArrayMap; import android.util.ArraySet; import android.view.ViewGroup; -import android.widget.LinearLayout; import com.android.internal.statusbar.StatusBarIcon; import com.android.systemui.Dependency; @@ -30,7 +31,9 @@ import com.android.systemui.Dumpable; import com.android.systemui.R; import com.android.systemui.SysUiServiceProvider; import com.android.systemui.statusbar.CommandQueue; -import com.android.systemui.statusbar.StatusBarIconView; +import com.android.systemui.statusbar.StatusIconDisplayable; +import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState; +import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState; import com.android.systemui.statusbar.policy.ConfigurationController; import com.android.systemui.statusbar.policy.ConfigurationController.ConfigurationListener; import com.android.systemui.statusbar.policy.IconLogger; @@ -40,8 +43,9 @@ import com.android.systemui.tuner.TunerService.Tunable; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; +import java.util.List; -import static com.android.systemui.statusbar.phone.CollapsedStatusBarFragment.STATUS_BAR_ICON_MANAGER_TAG; +import static com.android.systemui.statusbar.phone.StatusBarIconController.TAG_PRIMARY; /** * Receives the callbacks from CommandQueue related to icons and tracks the state of @@ -50,20 +54,25 @@ import static com.android.systemui.statusbar.phone.CollapsedStatusBarFragment.ST */ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tunable, ConfigurationListener, Dumpable, CommandQueue.Callbacks, StatusBarIconController { + private static final String TAG = "StatusBarIconController"; private final ArrayList mIconGroups = new ArrayList<>(); private final ArraySet mIconBlacklist = new ArraySet<>(); private final IconLogger mIconLogger = Dependency.get(IconLogger.class); + // Points to light or dark context depending on the... context? private Context mContext; - private DemoStatusIcons mDemoStatusIcons; - private IconManager mStatusBarIconManager; + private Context mLightContext; + private Context mDarkContext; + + private boolean mIsDark = false; public StatusBarIconControllerImpl(Context context) { super(context.getResources().getStringArray( com.android.internal.R.array.config_statusBarIcons)); Dependency.get(ConfigurationController.class).addCallback(this); + mContext = context; loadDimens(); @@ -76,12 +85,16 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu @Override public void addIconGroup(IconManager group) { mIconGroups.add(group); - for (int i = 0; i < mIcons.size(); i++) { - StatusBarIcon icon = mIcons.get(i); - if (icon != null) { - String slot = mSlots.get(i); - boolean blocked = mIconBlacklist.contains(slot); - group.onIconAdded(getViewIndex(getSlotIndex(slot)), slot, blocked, icon); + List allSlots = getSlots(); + for (int i = 0; i < allSlots.size(); i++) { + Slot slot = allSlots.get(i); + List holders = slot.getHolderList(); + boolean blocked = mIconBlacklist.contains(slot.getName()); + + for (StatusBarIconHolder holder : holders) { + int tag = holder.getTag(); + int viewIndex = getViewIndex(getSlotIndex(slot.getName()), holder.getTag()); + group.onIconAdded(viewIndex, slot.getName(), blocked, holder); } } } @@ -99,104 +112,209 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu } mIconBlacklist.clear(); mIconBlacklist.addAll(StatusBarIconController.getIconBlacklist(newValue)); - ArrayList current = new ArrayList<>(mIcons); - ArrayList currentSlots = new ArrayList<>(mSlots); + ArrayList currentSlots = getSlots(); + ArrayMap> slotsToReAdd = new ArrayMap<>(); + + // This is a little hacky... Peel off all of the holders on all of the slots + // but keep them around so they can be re-added + // Remove all the icons. - for (int i = current.size() - 1; i >= 0; i--) { - removeIcon(currentSlots.get(i)); + for (int i = currentSlots.size() - 1; i >= 0; i--) { + Slot s = currentSlots.get(i); + slotsToReAdd.put(s, s.getHolderList()); + removeAllIconsForSlot(s.getName()); } + // Add them all back - for (int i = 0; i < current.size(); i++) { - setIcon(currentSlots.get(i), current.get(i)); + for (int i = 0; i < currentSlots.size(); i++) { + Slot item = currentSlots.get(i); + List iconsForSlot = slotsToReAdd.get(item); + if (iconsForSlot == null) continue; + for (StatusBarIconHolder holder : iconsForSlot) { + setIcon(getSlotIndex(item.getName()), holder); + } } } private void loadDimens() { } - private void addSystemIcon(int index, StatusBarIcon icon) { - String slot = getSlot(index); - int viewIndex = getViewIndex(index); + private void addSystemIcon(int index, StatusBarIconHolder holder) { + String slot = getSlotName(index); + int viewIndex = getViewIndex(index, holder.getTag()); boolean blocked = mIconBlacklist.contains(slot); - mIconLogger.onIconVisibility(getSlot(index), icon.visible); - mIconGroups.forEach(l -> l.onIconAdded(viewIndex, slot, blocked, icon)); + mIconLogger.onIconVisibility(getSlotName(index), holder.isVisible()); + mIconGroups.forEach(l -> l.onIconAdded(viewIndex, slot, blocked, holder)); } @Override public void setIcon(String slot, int resourceId, CharSequence contentDescription) { int index = getSlotIndex(slot); - StatusBarIcon icon = getIcon(index); - if (icon == null) { - icon = new StatusBarIcon(UserHandle.SYSTEM, mContext.getPackageName(), - Icon.createWithResource(mContext, resourceId), 0, 0, contentDescription); - setIcon(slot, icon); + StatusBarIconHolder holder = getIcon(index, 0); + if (holder == null) { + StatusBarIcon icon = new StatusBarIcon(UserHandle.SYSTEM, mContext.getPackageName(), + Icon.createWithResource( + mContext, resourceId), 0, 0, contentDescription); + holder = StatusBarIconHolder.fromIcon(icon); + setIcon(index, holder); } else { - icon.icon = Icon.createWithResource(mContext, resourceId); - icon.contentDescription = contentDescription; - handleSet(index, icon); + holder.getIcon().icon = Icon.createWithResource(mContext, resourceId); + holder.getIcon().contentDescription = contentDescription; + handleSet(index, holder); + } + } + + /** + * Signal icons need to be handled differently, because they can be + * composite views + */ + @Override + public void setSignalIcon(String slot, WifiIconState state) { + + int index = getSlotIndex(slot); + + if (state == null) { + removeIcon(index, 0); + return; + } + + StatusBarIconHolder holder = getIcon(index, 0); + if (holder == null) { + holder = StatusBarIconHolder.fromWifiIconState(state); + setIcon(index, holder); + } else { + holder.setWifiState(state); + handleSet(index, holder); + } + } + + /** + * Accept a list of MobileIconStates, which all live in the same slot(?!), and then are sorted + * by subId. Don't worry this definitely makes sense and works. + * @param slot da slot + * @param iconStates All of the mobile icon states + */ + @Override + public void setMobileIcons(String slot, List iconStates) { + Slot mobileSlot = getSlot(slot); + int slotIndex = getSlotIndex(slot); + + for (MobileIconState state : iconStates) { + StatusBarIconHolder holder = mobileSlot.getHolderForTag(state.subId); + if (holder == null) { + holder = StatusBarIconHolder.fromMobileIconState(state); + setIcon(slotIndex, holder); + } else { + holder.setMobileState(state); + handleSet(slotIndex, holder); + } } } @Override public void setExternalIcon(String slot) { - int viewIndex = getViewIndex(getSlotIndex(slot)); + int viewIndex = getViewIndex(getSlotIndex(slot), 0); int height = mContext.getResources().getDimensionPixelSize( R.dimen.status_bar_icon_drawing_size); mIconGroups.forEach(l -> l.onIconExternal(viewIndex, height)); } + //TODO: remove this (used in command queue and for 3rd party tiles?) @Override public void setIcon(String slot, StatusBarIcon icon) { setIcon(getSlotIndex(slot), icon); } + /** + * For backwards compatibility, in the event that someone gives us a slot and a status bar icon + */ + private void setIcon(int index, StatusBarIcon icon) { + if (icon == null) { + removeAllIconsForSlot(getSlotName(index)); + return; + } + + StatusBarIconHolder holder = StatusBarIconHolder.fromIcon(icon); + setIcon(index, holder); + } + @Override - public void removeIcon(String slot) { - int index = getSlotIndex(slot); - removeIcon(index); + public void setIcon(int index, @NonNull StatusBarIconHolder holder) { + boolean isNew = getIcon(index, holder.getTag()) == null; + super.setIcon(index, holder); + + if (isNew) { + addSystemIcon(index, holder); + } else { + handleSet(index, holder); + } } public void setIconVisibility(String slot, boolean visibility) { int index = getSlotIndex(slot); - StatusBarIcon icon = getIcon(index); - if (icon == null || icon.visible == visibility) { + StatusBarIconHolder holder = getIcon(index, 0); + if (holder == null || holder.isVisible() == visibility) { return; } - icon.visible = visibility; - handleSet(index, icon); + + holder.setVisible(visibility); + handleSet(index, holder); + } + + public void removeIcon(String slot) { + removeAllIconsForSlot(slot); + } + + @Override + public void removeIcon(String slot, int tag) { + removeIcon(getSlotIndex(slot), tag); } @Override - public void removeIcon(int index) { - if (getIcon(index) == null) { + public void removeAllIconsForSlot(String slotName) { + Slot slot = getSlot(slotName); + if (!slot.hasIconsInSlot()) { return; } - mIconLogger.onIconHidden(getSlot(index)); - super.removeIcon(index); - int viewIndex = getViewIndex(index); - mIconGroups.forEach(l -> l.onRemoveIcon(viewIndex)); + + mIconLogger.onIconHidden(slotName); + + int slotIndex = getSlotIndex(slotName); + List iconsToRemove = slot.getHolderList(); + for (StatusBarIconHolder holder : iconsToRemove) { + int viewIndex = getViewIndex(slotIndex, holder.getTag()); + slot.removeForTag(holder.getTag()); + mIconGroups.forEach(l -> l.onRemoveIcon(viewIndex)); + } } @Override - public void setIcon(int index, StatusBarIcon icon) { - if (icon == null) { - removeIcon(index); + public void removeIcon(int index, int tag) { + if (getIcon(index, tag) == null) { return; } - boolean isNew = getIcon(index) == null; - super.setIcon(index, icon); - if (isNew) { - addSystemIcon(index, icon); - } else { - handleSet(index, icon); - } + mIconLogger.onIconHidden(getSlotName(index)); + super.removeIcon(index, tag); + int viewIndex = getViewIndex(index, 0); + mIconGroups.forEach(l -> l.onRemoveIcon(viewIndex)); } - private void handleSet(int index, StatusBarIcon icon) { - int viewIndex = getViewIndex(index); - mIconLogger.onIconVisibility(getSlot(index), icon.visible); - mIconGroups.forEach(l -> l.onSetIcon(viewIndex, icon)); + private void handleSet(int index, StatusBarIconHolder holder) { + int viewIndex = getViewIndex(index, holder.getTag()); + mIconLogger.onIconVisibility(getSlotName(index), holder.isVisible()); + mIconGroups.forEach(l -> l.onSetIconHolder(viewIndex, holder)); + } + + /** + * For mobile essentially (an array of holders in one slot) + */ + private void handleSet(int slotIndex, List holders) { + for (StatusBarIconHolder holder : holders) { + int viewIndex = getViewIndex(slotIndex, holder.getTag()); + mIconLogger.onIconVisibility(getSlotName(slotIndex), holder.isVisible()); + mIconGroups.forEach(l -> l.onSetIconHolder(viewIndex, holder)); + } } @Override @@ -208,7 +326,7 @@ public class StatusBarIconControllerImpl extends StatusBarIconList implements Tu int N = group.getChildCount(); pw.println(" icon views: " + N); for (int i = 0; i < N; i++) { - StatusBarIconView ic = (StatusBarIconView) group.getChildAt(i); + StatusIconDisplayable ic = (StatusIconDisplayable) group.getChildAt(i); pw.println(" [" + i + "] icon=" + ic); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java new file mode 100644 index 0000000000000000000000000000000000000000..e854dd0cd737a4c3ec1b0c85c12909ac505bc72b --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconHolder.java @@ -0,0 +1,131 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.phone; + +import android.annotation.Nullable; +import android.content.Context; +import android.graphics.drawable.Icon; +import android.os.UserHandle; +import com.android.internal.statusbar.StatusBarIcon; +import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState; +import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState; + +/** + * Wraps {@link com.android.internal.statusbar.StatusBarIcon} so we can still have a uniform list + */ +public class StatusBarIconHolder { + public static final int TYPE_ICON = 0; + public static final int TYPE_WIFI = 1; + public static final int TYPE_MOBILE = 2; + + private StatusBarIcon mIcon; + private WifiIconState mWifiState; + private MobileIconState mMobileState; + private int mType = TYPE_ICON; + private int mTag = 0; + private boolean mVisible = true; + + public static StatusBarIconHolder fromIcon(StatusBarIcon icon) { + StatusBarIconHolder wrapper = new StatusBarIconHolder(); + wrapper.mIcon = icon; + + return wrapper; + } + + public static StatusBarIconHolder fromResId(Context context, int resId, + CharSequence contentDescription) { + StatusBarIconHolder holder = new StatusBarIconHolder(); + holder.mIcon = new StatusBarIcon(UserHandle.SYSTEM, context.getPackageName(), + Icon.createWithResource( context, resId), 0, 0, contentDescription); + return holder; + } + + public static StatusBarIconHolder fromWifiIconState(WifiIconState state) { + StatusBarIconHolder holder = new StatusBarIconHolder(); + holder.mWifiState = state; + holder.mType = TYPE_WIFI; + return holder; + } + + public static StatusBarIconHolder fromMobileIconState(MobileIconState state) { + StatusBarIconHolder holder = new StatusBarIconHolder(); + holder.mMobileState = state; + holder.mType = TYPE_MOBILE; + holder.mTag = state.subId; + return holder; + } + + public int getType() { + return mType; + } + + @Nullable + public StatusBarIcon getIcon() { + return mIcon; + } + + @Nullable + public WifiIconState getWifiState() { + return mWifiState; + } + + public void setWifiState(WifiIconState state) { + mWifiState = state; + } + + @Nullable + public MobileIconState getMobileState() { + return mMobileState; + } + + public void setMobileState(MobileIconState state) { + mMobileState = state; + } + + public boolean isVisible() { + switch (mType) { + case TYPE_ICON: + return mIcon.visible; + case TYPE_WIFI: + return mWifiState.visible; + case TYPE_MOBILE: + return mMobileState.visible; + + default: return true; + } + } + + public void setVisible(boolean visible) { + switch (mType) { + case TYPE_ICON: + mIcon.visible = visible; + break; + + case TYPE_WIFI: + mWifiState.visible = visible; + break; + + case TYPE_MOBILE: + mMobileState.visible = visible; + break; + } + } + + public int getTag() { + return mTag; + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java index 1aa3a4312f8d0f8d00f27d3898eed07adf9aef43..c773170a2756135f1c0ce9af2177671539b4043e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarIconList.java @@ -16,64 +16,78 @@ package com.android.systemui.statusbar.phone; +import android.annotation.NonNull; +import android.annotation.Nullable; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.statusbar.StatusBarIcon; - import java.io.PrintWriter; import java.util.ArrayList; +import java.util.List; + +import static com.android.systemui.statusbar.phone.StatusBarIconController.TAG_PRIMARY; public class StatusBarIconList { - protected ArrayList mSlots = new ArrayList<>(); - protected ArrayList mIcons = new ArrayList<>(); + private ArrayList mSlots = new ArrayList<>(); public StatusBarIconList(String[] slots) { final int N = slots.length; for (int i=0; i < N; i++) { - mSlots.add(slots[i]); - mIcons.add(null); + mSlots.add(new Slot(slots[i], null)); } } public int getSlotIndex(String slot) { final int N = mSlots.size(); for (int i=0; i getSlots() { + return new ArrayList<>(mSlots); + } + + protected Slot getSlot(String name) { + return mSlots.get(getSlotIndex(name)); + } + public int size() { return mSlots.size(); } - public void setIcon(int index, StatusBarIcon icon) { - mIcons.set(index, icon); + public void setIcon(int index, @NonNull StatusBarIconHolder holder) { + mSlots.get(index).addHolder(holder); } - public void removeIcon(int index) { - mIcons.set(index, null); + public void removeIcon(int index, int tag) { + mSlots.get(index).removeForTag(tag); } - public String getSlot(int index) { - return mSlots.get(index); + public String getSlotName(int index) { + return mSlots.get(index).getName(); } - public StatusBarIcon getIcon(int index) { - return mIcons.get(index); + public StatusBarIconHolder getIcon(int index, int tag) { + return mSlots.get(index).getHolderForTag(tag); } - public int getViewIndex(int index) { + public int getViewIndex(int slotIndex, int tag) { int count = 0; - for (int i = 0; i < index; i++) { - if (mIcons.get(i) != null) { - count++; + for (int i = 0; i < slotIndex; i++) { + Slot item = mSlots.get(i); + if (item.hasIconsInSlot()) { + count += item.numberOfIcons(); } } - return count; + + Slot viewItem = mSlots.get(slotIndex); + return count + viewItem.viewIndexOffsetForTag(tag); } public void dump(PrintWriter pw) { @@ -81,7 +95,163 @@ public class StatusBarIconList { final int N = mSlots.size(); pw.println(" icon slots: " + N); for (int i=0; i mSubSlots; + + public Slot(String name, StatusBarIconHolder iconHolder) { + mName = name; + mHolder = iconHolder; + } + + public String getName() { + return mName; + } + + @Nullable + public StatusBarIconHolder getHolderForTag(int tag) { + if (tag == TAG_PRIMARY) { + return mHolder; + } + + if (mSubSlots != null) { + for (StatusBarIconHolder holder : mSubSlots) { + if (holder.getTag() == tag) { + return holder; + } + } + } + + return null; + } + + public void addHolder(StatusBarIconHolder holder) { + int tag = holder.getTag(); + if (tag == TAG_PRIMARY) { + mHolder = holder; + } else { + setSubSlot(holder, tag); + } + } + + public void removeForTag(int tag) { + if (tag == TAG_PRIMARY) { + mHolder = null; + } else { + int index = getIndexForTag(tag); + if (index != -1) { + mSubSlots.remove(index); + } + } + } + + @VisibleForTesting + public void clear() { + mHolder = null; + if (mSubSlots != null) { + mSubSlots = null; + } + } + + private void setSubSlot(StatusBarIconHolder holder, int tag) { + if (mSubSlots == null) { + mSubSlots = new ArrayList<>(); + mSubSlots.add(holder); + return; + } + + if (getIndexForTag(tag) != -1) { + // Holder exists for tag; no-op + return; + } + + // These holders get added to the end. Confused yet? + mSubSlots.add(holder); + } + + private int getIndexForTag(int tag) { + for (int i = 0; i < mSubSlots.size(); i++) { + StatusBarIconHolder h = mSubSlots.get(i); + if (h.getTag() == tag) { + return i; + } + } + + return -1; + } + + public boolean hasIconsInSlot() { + if (mHolder != null) return true; + if (mSubSlots == null) return false; + + return mSubSlots.size() > 0; + } + + public int numberOfIcons() { + int num = mHolder == null ? 0 : 1; + if (mSubSlots == null) return num; + + return num + mSubSlots.size(); + } + + /** + * View index is backwards from regular index + * @param tag the tag of the holder being viewed + * @return (1 + mSubSlots.size() - indexOfTag) + */ + public int viewIndexOffsetForTag(int tag) { + if (mSubSlots == null) { + return 0; + } + + int subSlots = mSubSlots.size(); + if (tag == TAG_PRIMARY) { + return subSlots; + } + + return subSlots - getIndexForTag(tag) - 1; + } + + public List getHolderList() { + ArrayList holders = new ArrayList<>(); + if (mHolder != null) { + holders.add(mHolder); + } + + if (mSubSlots != null) { + holders.addAll(mSubSlots); + } + + return holders; + } + + @Override + public String toString() { + return String.format("(%s) %s", mName, subSlotsString()); + } + + private String subSlotsString() { + if (mSubSlots == null) { + return ""; + } + + return "" + mSubSlots.size() + " subSlots"; } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java index 5975608238245f453af3fed0ea3c305c3197344f..6b6ea10bfa637ec6244f959d5a80a44344fa18bf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -135,26 +135,34 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb mFingerprintUnlockController = fingerprintUnlockController; mBouncer = SystemUIFactory.getInstance().createKeyguardBouncer(mContext, mViewMediatorCallback, mLockPatternUtils, container, dismissCallbackRegistry); + mContainer.addOnLayoutChangeListener(this::onContainerLayout); mNotificationPanelView = notificationPanelView; notificationPanelView.setExpansionListener(this::onPanelExpansionChanged); } + private void onContainerLayout(View v, int left, int top, int right, int bottom, + int oldLeft, int oldTop, int oldRight, int oldBottom) { + mNotificationPanelView.setBouncerTop(mBouncer.getTop()); + } + private void onPanelExpansionChanged(float expansion, boolean tracking) { // We don't want to translate the bounce when: // • Keyguard is occluded, because we're in a FLAG_SHOW_WHEN_LOCKED activity and need to // conserve the original animation. // • The user quickly taps on the display and we show "swipe up to unlock." // • Keyguard will be dismissed by an action. a.k.a: FLAG_DISMISS_KEYGUARD_ACTIVITY + // • Full-screen user switcher is displayed. final boolean noLongerTracking = mLastTracking != tracking && !tracking; if (mOccluded || mNotificationPanelView.isUnlockHintRunning() - || mBouncer.willDismissWithAction()) { + || mBouncer.willDismissWithAction() + || mStatusBar.isFullScreenUserSwitcherState()) { mBouncer.setExpansion(0); } else if (mShowing && mStatusBar.isKeyguardCurrentlySecure() && !mDozing) { mBouncer.setExpansion(expansion); if (expansion == 1) { mBouncer.onFullyHidden(); } else if (!mBouncer.isShowing() && !mBouncer.isAnimatingAway()) { - mBouncer.show(false /* resetSecuritySelection */, false /* notifyFalsing */); + mBouncer.show(false /* resetSecuritySelection */, false /* animated */); } else if (noLongerTracking) { // Notify that falsing manager should stop its session when user stops touching, // even before the animation ends, to guarantee that we're not recording sensitive diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java new file mode 100644 index 0000000000000000000000000000000000000000..c5a3a0d33cd328396ea4abfe8081f3e199e8a7d2 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java @@ -0,0 +1,420 @@ +/* + * 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.systemui.statusbar.phone; + +import android.content.Context; +import android.content.res.ColorStateList; +import android.graphics.Rect; +import android.os.Handler; +import android.os.Looper; +import android.telephony.SubscriptionInfo; +import android.util.ArraySet; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.accessibility.AccessibilityEvent; +import android.widget.ImageView; +import com.android.settingslib.graph.SignalDrawable; +import com.android.systemui.Dependency; +import com.android.systemui.R; +import com.android.systemui.statusbar.phone.StatusBarIconController; +import com.android.systemui.statusbar.policy.DarkIconDispatcher; +import com.android.systemui.statusbar.policy.NetworkController; +import com.android.systemui.statusbar.policy.NetworkController.IconState; +import com.android.systemui.statusbar.policy.NetworkControllerImpl; +import com.android.systemui.statusbar.policy.SecurityController; +import com.android.systemui.tuner.TunerService.Tunable; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; + + +public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallback, + SecurityController.SecurityControllerCallback, Tunable { + private static final String TAG = "StatusBarSignalPolicy"; + + private final String mSlotAirplane; + private final String mSlotMobile; + private final String mSlotWifi; + private final String mSlotEthernet; + private final String mSlotVpn; + + private final Context mContext; + private final StatusBarIconController mIconController; + private final NetworkController mNetworkController; + private final SecurityController mSecurityController; + private final Handler mHandler = Handler.getMain(); + + private boolean mBlockAirplane; + private boolean mBlockMobile; + private boolean mBlockWifi; + private boolean mBlockEthernet; + private boolean mActivityEnabled; + private boolean mForceBlockWifi; + + // Track as little state as possible, and only for padding purposes + private boolean mIsAirplaneMode = false; + private boolean mWifiVisible = false; + + private ArrayList mMobileStates = new ArrayList(); + private WifiIconState mWifiIconState = new WifiIconState(); + + public StatusBarSignalPolicy(Context context, StatusBarIconController iconController) { + mContext = context; + + mSlotAirplane = mContext.getString(com.android.internal.R.string.status_bar_airplane); + mSlotMobile = mContext.getString(com.android.internal.R.string.status_bar_mobile); + mSlotWifi = mContext.getString(com.android.internal.R.string.status_bar_wifi); + mSlotEthernet = mContext.getString(com.android.internal.R.string.status_bar_ethernet); + mSlotVpn = mContext.getString(com.android.internal.R.string.status_bar_vpn); + + mIconController = iconController; + mNetworkController = Dependency.get(NetworkController.class); + mSecurityController = Dependency.get(SecurityController.class); + + mNetworkController.addCallback(this); + mSecurityController.addCallback(this); + } + + public void destroy() { + mNetworkController.removeCallback(this); + mSecurityController.removeCallback(this); + } + + private void updateVpn() { + boolean vpnVisible = mSecurityController.isVpnEnabled(); + int vpnIconId = currentVpnIconId(mSecurityController.isVpnBranded()); + + mIconController.setIcon(mSlotVpn, vpnIconId, null); + mIconController.setIconVisibility(mSlotVpn, vpnVisible); + } + + private int currentVpnIconId(boolean isBranded) { + return isBranded ? R.drawable.stat_sys_branded_vpn : R.drawable.stat_sys_vpn_ic; + } + + private void updateActivityEnabled() { + mActivityEnabled = mContext.getResources().getBoolean(R.bool.config_showActivity); + } + + /** + * From SecurityController + */ + @Override + public void onStateChanged() { + mHandler.post(this::updateVpn); + } + + @Override + public void onTuningChanged(String key, String newValue) { + if (!StatusBarIconController.ICON_BLACKLIST.equals(key)) { + return; + } + ArraySet blockList = StatusBarIconController.getIconBlacklist(newValue); + boolean blockAirplane = blockList.contains(mSlotAirplane); + boolean blockMobile = blockList.contains(mSlotMobile); + boolean blockWifi = blockList.contains(mSlotWifi); + boolean blockEthernet = blockList.contains(mSlotEthernet); + + if (blockAirplane != mBlockAirplane || blockMobile != mBlockMobile + || blockEthernet != mBlockEthernet || blockWifi != mBlockWifi) { + mBlockAirplane = blockAirplane; + mBlockMobile = blockMobile; + mBlockEthernet = blockEthernet; + mBlockWifi = blockWifi || mForceBlockWifi; + // Re-register to get new callbacks. + mNetworkController.removeCallback(this); + } + } + + @Override + public void setWifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon, + boolean activityIn, boolean activityOut, String description, boolean isTransient, + String statusLabel) { + + boolean visible = statusIcon.visible && !mBlockWifi; + boolean in = activityIn && mActivityEnabled && visible; + boolean out = activityOut && mActivityEnabled && visible; + + mWifiIconState.visible = visible; + mWifiIconState.resId = statusIcon.icon; + mWifiIconState.activityIn = in; + mWifiIconState.activityOut = out; + mWifiIconState.slot = mSlotWifi; + mWifiIconState.airplaneSpacerVisible = mIsAirplaneMode; + mWifiIconState.contentDescription = statusIcon.contentDescription; + + if (mWifiIconState.visible && mWifiIconState.resId > 0) { + mIconController.setSignalIcon(mSlotWifi, mWifiIconState.copy()); + mIconController.setIconVisibility(mSlotWifi, true); + } else { + mIconController.setIconVisibility(mSlotWifi, false); + } + } + + @Override + public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType, + int qsType, boolean activityIn, boolean activityOut, String typeContentDescription, + String description, boolean isWide, int subId, boolean roaming) { + MobileIconState state = getState(subId); + if (state == null) { + return; + } + + state.visible = statusIcon.visible && !mBlockMobile; + state.strengthId = statusIcon.icon; + state.typeId = statusType; + state.contentDescription = statusIcon.contentDescription; + state.typeContentDescription = typeContentDescription; + state.roaming = roaming; + state.activityIn = activityIn && mActivityEnabled; + state.activityOut = activityOut && mActivityEnabled; + + // Always send a copy to maintain value type semantics + mIconController.setMobileIcons(mSlotMobile, MobileIconState.copyStates(mMobileStates)); + } + + private MobileIconState getState(int subId) { + for (MobileIconState state : mMobileStates) { + if (state.subId == subId) { + return state; + } + } + Log.e(TAG, "Unexpected subscription " + subId); + return null; + } + + + /** + * It is expected that a call to setSubs will be immediately followed by setMobileDataIndicators + * so we don't have to update the icon manager at this point, just remove the old ones + * @param subs list of mobile subscriptions, displayed as mobile data indicators (max 8) + */ + @Override + public void setSubs(List subs) { + if (hasCorrectSubs(subs)) { + return; + } + + mIconController.removeAllIconsForSlot(mSlotMobile); + mMobileStates.clear(); + final int n = subs.size(); + for (int i = 0; i < n; i++) { + mMobileStates.add(new MobileIconState(subs.get(i).getSubscriptionId())); + } + } + + private boolean hasCorrectSubs(List subs) { + final int N = subs.size(); + if (N != mMobileStates.size()) { + return false; + } + for (int i = 0; i < N; i++) { + if (mMobileStates.get(i).subId != subs.get(i).getSubscriptionId()) { + return false; + } + } + return true; + } + + @Override + public void setNoSims(boolean show, boolean simDetected) { + // Noop yay! + } + + + @Override + public void setEthernetIndicators(IconState state) { + boolean visible = state.visible && !mBlockEthernet; + int resId = state.icon; + String description = state.contentDescription; + + if (resId > 0) { + mIconController.setIcon(mSlotEthernet, resId, description); + mIconController.setIconVisibility(mSlotEthernet, true); + } else { + mIconController.setIconVisibility(mSlotEthernet, false); + } + } + + @Override + public void setIsAirplaneMode(IconState icon) { + mIsAirplaneMode = icon.visible && !mBlockAirplane; + int resId = icon.icon; + String description = icon.contentDescription; + + if (mIsAirplaneMode && resId > 0) { + mIconController.setIcon(mSlotAirplane, resId, description); + mIconController.setIconVisibility(mSlotAirplane, true); + } else { + mIconController.setIconVisibility(mSlotAirplane, false); + } + } + + @Override + public void setMobileDataEnabled(boolean enabled) { + // Don't care. + } + + private static abstract class SignalIconState { + public boolean visible; + public boolean activityOut; + public boolean activityIn; + public String slot; + public String contentDescription; + + @Override + public boolean equals(Object o) { + // Skipping reference equality bc this should be more of a value type + if (o == null || getClass() != o.getClass()) { + return false; + } + SignalIconState that = (SignalIconState) o; + return visible == that.visible && + activityOut == that.activityOut && + activityIn == that.activityIn && + Objects.equals(contentDescription, that.contentDescription) && + Objects.equals(slot, that.slot); + } + + @Override + public int hashCode() { + return Objects.hash(visible, activityOut, slot); + } + + protected void copyTo(SignalIconState other) { + other.visible = visible; + other.activityIn = activityIn; + other.activityOut = activityOut; + other.slot = slot; + other.contentDescription = contentDescription; + } + } + + public static class WifiIconState extends SignalIconState{ + public int resId; + public boolean airplaneSpacerVisible; + public boolean signalSpacerVisible; + + @Override + public boolean equals(Object o) { + // Skipping reference equality bc this should be more of a value type + if (o == null || getClass() != o.getClass()) { + return false; + } + if (!super.equals(o)) { + return false; + } + WifiIconState that = (WifiIconState) o; + return resId == that.resId && + airplaneSpacerVisible == that.airplaneSpacerVisible && + signalSpacerVisible == that.signalSpacerVisible; + } + + public void copyTo(WifiIconState other) { + super.copyTo(other); + other.resId = resId; + other.airplaneSpacerVisible = airplaneSpacerVisible; + other.signalSpacerVisible = signalSpacerVisible; + } + + public WifiIconState copy() { + WifiIconState newState = new WifiIconState(); + copyTo(newState); + return newState; + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), + resId, airplaneSpacerVisible, signalSpacerVisible); + } + + @Override public String toString() { + return "WifiIconState(resId=" + resId + ", visible=" + visible + ")"; + } + } + + /** + * A little different. This one delegates to SignalDrawable instead of a specific resId + */ + public static class MobileIconState extends SignalIconState { + public int subId; + public int strengthId; + public int typeId; + public boolean roaming; + public boolean needsLeadingPadding; + public String typeContentDescription; + + private MobileIconState(int subId) { + super(); + this.subId = subId; + } + + @Override + public boolean equals(Object o) { + if (o == null || getClass() != o.getClass()) { + return false; + } + if (!super.equals(o)) { + return false; + } + MobileIconState that = (MobileIconState) o; + return subId == that.subId && + strengthId == that.strengthId && + typeId == that.typeId && + roaming == that.roaming && + needsLeadingPadding == that.needsLeadingPadding && + Objects.equals(typeContentDescription, that.typeContentDescription); + } + + @Override + public int hashCode() { + + return Objects + .hash(super.hashCode(), subId, strengthId, typeId, roaming, needsLeadingPadding, + typeContentDescription); + } + + public void copyTo(MobileIconState other) { + super.copyTo(other); + other.subId = subId; + other.strengthId = strengthId; + other.typeId = typeId; + other.roaming = roaming; + other.needsLeadingPadding = needsLeadingPadding; + other.typeContentDescription = typeContentDescription; + } + + private static List copyStates(List inStates) { + ArrayList outStates = new ArrayList<>(); + for (MobileIconState state : inStates) { + MobileIconState copy = new MobileIconState(state.subId); + state.copyTo(copy); + outStates.add(copy); + } + + return outStates; + } + + @Override public String toString() { + return "MobileIconState(subId=" + subId + ", strengthId=" + strengthId + ", roaming=" + + roaming + ", visible=" + visible + ")"; + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java index dab28d65a5a9a7a42f5078642467b9284a5ab32c..255e10e2680d357f12218df4dddbe05fc0955728 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusIconContainer.java @@ -18,13 +18,13 @@ package com.android.systemui.statusbar.phone; import android.annotation.Nullable; import android.content.Context; -import android.util.ArrayMap; import android.util.AttributeSet; +import android.util.Log; import android.view.View; import com.android.keyguard.AlphaOptimizedLinearLayout; import com.android.systemui.R; -import com.android.systemui.statusbar.StatusBarIconView; +import com.android.systemui.statusbar.StatusIconDisplayable; import com.android.systemui.statusbar.stack.ViewState; /** @@ -97,7 +97,7 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout { * Layout is happening from end -> start */ private void calculateIconTranslations() { - float width = getWidth(); + float width = getWidth() - getPaddingEnd(); float translationX = width; float contentStart = getPaddingStart(); int childCount = getChildCount(); @@ -109,18 +109,22 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout { //TODO: Dots for (int i = childCount - 1; i >= 0; i--) { View child = getChildAt(i); - if (!(child instanceof StatusBarIconView)) { + if (!(child instanceof StatusIconDisplayable)) { + if (DEBUG) Log.d(TAG, "skipping child (wrong type)"); continue; } + StatusIconDisplayable iconView = (StatusIconDisplayable) child; + ViewState childState = getViewStateFromChild(child); if (childState == null ) { + if (DEBUG) Log.d(TAG, "skipping child (" + iconView.getSlot() + ") no ViewState"); continue; } - // Rely on StatusBarIcon for truth about visibility - if (!((StatusBarIconView) child).getStatusBarIcon().visible) { + if (!iconView.isIconVisible() || iconView.isIconBlocked()) { childState.hidden = true; + if (DEBUG) Log.d(TAG, "skipping child (" + iconView.getSlot() + ") not visible"); continue; } @@ -175,8 +179,8 @@ public class StatusIconContainer extends AlphaOptimizedLinearLayout { vs.initFrom(child); vs.alpha = 1.0f; - if (child instanceof StatusBarIconView) { - vs.hidden = !((StatusBarIconView)child).getStatusBarIcon().visible; + if (child instanceof StatusIconDisplayable) { + vs.hidden = !((StatusIconDisplayable)child).isIconVisible(); } else { vs.hidden = false; } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java index fcf084b293270c77fe1e5860712ab8da60a39c47..94db95a6f33c58ec389cedade47aea3b10a579af 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java @@ -279,6 +279,9 @@ public class BluetoothControllerImpl implements BluetoothController, BluetoothCa @Override public void onActiveDeviceChanged(CachedBluetoothDevice activeDevice, int bluetoothProfile) {} + @Override + public void onProfileAudioStateChanged(int bluetoothProfile, int state) {} + private ActuallyCachedState getCachedState(CachedBluetoothDevice device) { ActuallyCachedState state = mCachedState.get(device); if (state == null) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DarkIconDispatcher.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DarkIconDispatcher.java index 58944c6ad571e20894ceb672f67a5c484bec65aa..945ed761c2b4f7afaa963cf9b3e3fe3f94c178e7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DarkIconDispatcher.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DarkIconDispatcher.java @@ -35,7 +35,7 @@ public interface DarkIconDispatcher { // Used to reapply darkness on an object, must have previously been added through // addDarkReceiver. - void applyDark(ImageView object); + void applyDark(DarkReceiver object); int DEFAULT_ICON_TINT = Color.WHITE; Rect sTmpRect = new Rect(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java index 4533aa5e2f76f850455e97eac1256528a8fcdbc6..4c100cdb99ffd23bc49a1269031c09aaaaa65ede 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java @@ -54,6 +54,7 @@ import com.android.systemui.R; import com.android.systemui.settings.CurrentUserTracker; import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceProvisionedListener; +import com.android.systemui.statusbar.policy.MobileSignalController.MobileState; import java.io.FileDescriptor; import java.io.PrintWriter; import java.util.ArrayList; @@ -848,6 +849,11 @@ public class NetworkControllerImpl extends BroadcastReceiver subs.add(addSignalController(i, i)); } mCallbackHandler.setSubs(subs); + for (int i = 0; i < mMobileSignalControllers.size(); i++) { + int key = mMobileSignalControllers.keyAt(i); + MobileSignalController controller = mMobileSignalControllers.get(key); + controller.notifyListeners(); + } } } String nosim = args.getString("nosim"); diff --git a/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java b/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java index 7ffca173be86f1e1c0be69d931b0731ebdd2443a..d52746599aa176c145f87306f875718443703785 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java +++ b/packages/SystemUI/src/com/android/systemui/usb/StorageNotification.java @@ -323,10 +323,10 @@ public class StorageNotification extends SystemUI { if (notif != null) { mNotificationManager.notifyAsUser(vol.getId(), SystemMessage.NOTE_STORAGE_PUBLIC, - notif, UserHandle.ALL); + notif, UserHandle.of(vol.getMountUserId())); } else { mNotificationManager.cancelAsUser(vol.getId(), SystemMessage.NOTE_STORAGE_PUBLIC, - UserHandle.ALL); + UserHandle.of(vol.getMountUserId())); } } diff --git a/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java b/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java index 1cbdfe81869d744bb778808b3f51dbca44ce425c..7a9cdfd85645f3f2aea96ad848cead71b3be9947 100644 --- a/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java +++ b/packages/SystemUI/src/com/android/systemui/util/NotificationChannels.java @@ -39,8 +39,7 @@ public class NotificationChannels extends SystemUI { public static String BATTERY = "BAT"; public static String HINTS = "HNT"; - @VisibleForTesting - static void createAll(Context context) { + public static void createAll(Context context) { final NotificationManager nm = context.getSystemService(NotificationManager.class); final NotificationChannel batteryChannel = new NotificationChannel(BATTERY, context.getString(R.string.notification_channel_battery), diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java index ee6748eee2f8013f860234235e90566bc589627f..a97effd3a023225311de59d1528fff15247b04e4 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java @@ -16,6 +16,8 @@ package com.android.systemui.volume; +import static android.media.AudioManager.RINGER_MODE_NORMAL; + import android.app.NotificationManager; import android.content.BroadcastReceiver; import android.content.ComponentName; @@ -29,6 +31,7 @@ import android.database.ContentObserver; import android.media.AudioAttributes; import android.media.AudioManager; import android.media.AudioSystem; +import android.media.IAudioService; import android.media.IVolumeController; import android.media.VolumePolicy; import android.media.session.MediaController.PlaybackInfo; @@ -39,6 +42,7 @@ import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import android.os.RemoteException; +import android.os.ServiceManager; import android.os.VibrationEffect; import android.os.Vibrator; import android.provider.Settings; @@ -73,9 +77,11 @@ import java.util.Objects; public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpable { private static final String TAG = Util.logTag(VolumeDialogControllerImpl.class); + + private static final int TOUCH_FEEDBACK_TIMEOUT_MS = 1000; private static final int DYNAMIC_STREAM_START_INDEX = 100; private static final int VIBRATE_HINT_DURATION = 50; - private static final AudioAttributes SONFICIATION_VIBRATION_ATTRIBUTES = + private static final AudioAttributes SONIFICIATION_VIBRATION_ATTRIBUTES = new AudioAttributes.Builder() .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) @@ -100,6 +106,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa private final W mWorker; private final Context mContext; private AudioManager mAudio; + private IAudioService mAudioService; protected StatusBar mStatusBar; private final NotificationManager mNoMan; private final SettingObserver mObserver; @@ -113,6 +120,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa private boolean mShowA11yStream; private boolean mShowVolumeDialog; private boolean mShowSafetyWarning; + private long mLastToggledRingerOn; private final NotificationManager mNotificationManager; private boolean mDestroyed; @@ -140,6 +148,8 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa mReceiver.init(); mVibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE); mHasVibrator = mVibrator != null && mVibrator.hasVibrator(); + mAudioService = IAudioService.Stub.asInterface( + ServiceManager.getService(Context.AUDIO_SERVICE)); updateStatusBar(); boolean accessibilityVolumeStreamActive = context.getSystemService( @@ -300,10 +310,24 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa mShowSafetyWarning = safetyWarning; } - public void vibrate() { + @Override + public void scheduleTouchFeedback() { + mLastToggledRingerOn = System.currentTimeMillis(); + } + + private void playTouchFeedback() { + if (System.currentTimeMillis() - mLastToggledRingerOn < TOUCH_FEEDBACK_TIMEOUT_MS) { + try { + mAudioService.playSoundEffect(AudioManager.FX_KEYPRESS_STANDARD); + } catch (RemoteException e) { + // ignore + } + } + } + + public void vibrate(VibrationEffect effect) { if (mHasVibrator) { - mVibrator.vibrate(VibrationEffect.createOneShot(VIBRATE_HINT_DURATION, - VibrationEffect.DEFAULT_AMPLITUDE), SONFICIATION_VIBRATION_ATTRIBUTES); + mVibrator.vibrate(effect, SONIFICIATION_VIBRATION_ATTRIBUTES); } } @@ -425,7 +449,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa for (int stream : STREAMS.keySet()) { updateStreamLevelW(stream, getAudioManagerStreamVolume(stream)); streamStateW(stream).levelMin = getAudioManagerStreamMinVolume(stream); - streamStateW(stream).levelMax = getAudioManagerStreamMaxVolume(stream); + streamStateW(stream).levelMax = Math.max(1, getAudioManagerStreamMaxVolume(stream)); updateStreamMuteW(stream, mAudio.isStreamMute(stream)); final StreamState ss = streamStateW(stream); ss.muteSupported = mAudio.isStreamAffectedByMute(stream); @@ -556,6 +580,11 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa if (rm == mState.ringerModeInternal) return false; mState.ringerModeInternal = rm; Events.writeEvent(mContext, Events.EVENT_INTERNAL_RINGER_MODE_CHANGED, rm); + + if (mState.ringerModeInternal == RINGER_MODE_NORMAL) { + playTouchFeedback(); + } + return true; } diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java index 71c7f80ef6594ff6992412a37c5f64fc804a98dc..6f71e55b0d3cddd190b638172cef4532d5af00b3 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogImpl.java @@ -22,6 +22,10 @@ import static android.media.AudioManager.RINGER_MODE_NORMAL; import static android.media.AudioManager.RINGER_MODE_SILENT; import static android.media.AudioManager.RINGER_MODE_VIBRATE; import static android.media.AudioManager.STREAM_ACCESSIBILITY; +import static android.media.AudioManager.STREAM_ALARM; +import static android.media.AudioManager.STREAM_MUSIC; +import static android.media.AudioManager.STREAM_RING; +import static android.media.AudioManager.STREAM_VOICE_CALL; import static android.view.View.GONE; import static android.view.View.VISIBLE; @@ -41,13 +45,17 @@ import android.content.res.Resources; import android.graphics.Color; import android.graphics.PixelFormat; import android.graphics.drawable.ColorDrawable; +import android.media.AudioAttributes; import android.media.AudioManager; import android.media.AudioSystem; +import android.media.MediaPlayer; import android.os.Debug; import android.os.Handler; import android.os.Looper; import android.os.Message; import android.os.SystemClock; +import android.os.VibrationEffect; +import android.os.Vibrator; import android.provider.Settings; import android.provider.Settings.Global; import android.text.InputFilter; @@ -126,6 +134,7 @@ public class VolumeDialogImpl implements VolumeDialog { private final Accessibility mAccessibility = new Accessibility(); private final ColorStateList mActiveSliderTint; private final ColorStateList mInactiveSliderTint; + private final Vibrator mVibrator; private boolean mShowing; private boolean mShowA11yStream; @@ -146,6 +155,7 @@ public class VolumeDialogImpl implements VolumeDialog { mActiveSliderTint = ColorStateList.valueOf(Utils.getColorAccent(mContext)); mInactiveSliderTint = loadColorStateList(R.color.volume_slider_inactive); mDeviceProvisionedController = Dependency.get(DeviceProvisionedController.class); + mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); } public void init(int windowType, Callback callback) { @@ -203,6 +213,9 @@ public class VolumeDialogImpl implements VolumeDialog { .setInterpolator(new SystemUIInterpolators.LogDecelerateInterpolator()) .withEndAction(() -> { mWindow.getDecorView().requestAccessibilityFocus(); + if (!Prefs.getBoolean(mContext, Prefs.Key.TOUCHED_RINGER_TOGGLE, true)) { + mRingerIcon.postOnAnimationDelayed(mSinglePress, 1500); + } }) .start(); }); @@ -223,12 +236,16 @@ public class VolumeDialogImpl implements VolumeDialog { mSettingsIcon = mDialog.findViewById(R.id.settings); if (mRows.isEmpty()) { + if (!AudioSystem.isSingleVolume(mContext)) { + addRow(STREAM_ACCESSIBILITY, R.drawable.ic_volume_accessibility, + R.drawable.ic_volume_accessibility, true, false); + } addRow(AudioManager.STREAM_MUSIC, R.drawable.ic_volume_media, R.drawable.ic_volume_media_mute, true, true); if (!AudioSystem.isSingleVolume(mContext)) { addRow(AudioManager.STREAM_RING, R.drawable.ic_volume_ringer, R.drawable.ic_volume_ringer_mute, true, false); - addRow(AudioManager.STREAM_ALARM, + addRow(STREAM_ALARM, R.drawable.ic_volume_alarm, R.drawable.ic_volume_alarm_mute, true, false); addRow(AudioManager.STREAM_VOICE_CALL, R.drawable.ic_volume_voice, R.drawable.ic_volume_voice, false, false); @@ -236,8 +253,6 @@ public class VolumeDialogImpl implements VolumeDialog { R.drawable.ic_volume_bt_sco, R.drawable.ic_volume_bt_sco, false, false); addRow(AudioManager.STREAM_SYSTEM, R.drawable.ic_volume_system, R.drawable.ic_volume_system_mute, false, false); - addRow(STREAM_ACCESSIBILITY, R.drawable.ic_volume_accessibility, - R.drawable.ic_volume_accessibility, true, false); } } else { addExistingRows(); @@ -287,11 +302,11 @@ public class VolumeDialogImpl implements VolumeDialog { if (D.BUG) Slog.d(TAG, "Adding row for stream " + stream); VolumeRow row = new VolumeRow(); initRow(row, stream, iconRes, iconMuteRes, important, defaultStream); - int rowSize; - if (mShowA11yStream && dynamic && (rowSize = mRows.size()) > 1) { - // A11y Stream should be the first in the list, so it's shown to start of other rows - mDialogRowsView.addView(row.view, 0); - mRows.add(rowSize - 2, row); + if (dynamic && mRows.size() > 2) { + // Dynamic Streams should be the first in the list, so they're shown to start of + // everything except a11y + mDialogRowsView.addView(row.view, 1); + mRows.add(1, row); } else { mDialogRowsView.addView(row.view); mRows.add(row); @@ -315,6 +330,11 @@ public class VolumeDialogImpl implements VolumeDialog { return row; } } + for (VolumeRow row : mRows) { + if (row.stream == STREAM_MUSIC) { + return row; + } + } return mRows.get(0); } @@ -414,6 +434,7 @@ public class VolumeDialogImpl implements VolumeDialog { mRingerIcon.setOnClickListener(v -> { Events.writeEvent(mContext, Events.EVENT_ICON_CLICK, AudioManager.STREAM_RING, mRingerIcon.getTag()); + Prefs.putBoolean(mContext, Prefs.Key.TOUCHED_RINGER_TOGGLE, true); final StreamState ss = mState.states.get(AudioManager.STREAM_RING); if (ss == null) { return; @@ -424,7 +445,6 @@ public class VolumeDialogImpl implements VolumeDialog { final boolean hasVibrator = mController.hasVibrator(); if (mState.ringerModeInternal == AudioManager.RINGER_MODE_NORMAL) { if (hasVibrator) { - mController.vibrate(); newRingerMode = AudioManager.RINGER_MODE_VIBRATE; } else { newRingerMode = AudioManager.RINGER_MODE_SILENT; @@ -438,30 +458,56 @@ public class VolumeDialogImpl implements VolumeDialog { } } updateRingerH(); - + provideTouchFeedbackH(newRingerMode); mController.setRingerMode(newRingerMode, false); maybeShowToastH(newRingerMode); }); updateRingerH(); } + + private void provideTouchFeedbackH(int newRingerMode) { + VibrationEffect effect = null; + switch (newRingerMode) { + case RINGER_MODE_NORMAL: + mController.scheduleTouchFeedback(); + break; + case RINGER_MODE_SILENT: + effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK); + break; + case RINGER_MODE_VIBRATE: + default: + effect = VibrationEffect.get(VibrationEffect.EFFECT_DOUBLE_CLICK); + } + if (effect != null) { + mController.vibrate(effect); + } + } + private void maybeShowToastH(int newRingerMode) { int seenToastCount = Prefs.getInt(mContext, Prefs.Key.SEEN_RINGER_GUIDANCE_COUNT, 0); if (seenToastCount > VolumePrefs.SHOW_RINGER_TOAST_COUNT) { return; } - int toastText; + CharSequence toastText = null; switch (newRingerMode) { case RINGER_MODE_NORMAL: - toastText = R.string.volume_dialog_ringer_guidance_ring; + final StreamState ss = mState.states.get(AudioManager.STREAM_RING); + if (ss != null) { + toastText = mContext.getString( + R.string.volume_dialog_ringer_guidance_ring, + Utils.formatPercentage(ss.level, ss.levelMax)); + } break; case RINGER_MODE_SILENT: - toastText = com.android.internal.R.string.volume_dialog_ringer_guidance_silent; + toastText = mContext.getString( + com.android.internal.R.string.volume_dialog_ringer_guidance_silent); break; case RINGER_MODE_VIBRATE: default: - toastText = com.android.internal.R.string.volume_dialog_ringer_guidance_vibrate; + toastText = mContext.getString( + com.android.internal.R.string.volume_dialog_ringer_guidance_vibrate); } Toast.makeText(mContext, toastText, Toast.LENGTH_SHORT).show(); @@ -538,7 +584,7 @@ public class VolumeDialogImpl implements VolumeDialog { } private boolean shouldBeVisibleH(VolumeRow row, VolumeRow activeRow) { - boolean isActive = row == activeRow; + boolean isActive = row.stream == activeRow.stream; if (row.stream == AudioSystem.STREAM_ACCESSIBILITY) { return mShowA11yStream; } @@ -550,7 +596,18 @@ public class VolumeDialogImpl implements VolumeDialog { return true; } - return row.defaultStream || isActive; + if (isActive) { + return true; + } + + if (row.defaultStream) { + return activeRow.stream == STREAM_RING + || activeRow.stream == STREAM_ALARM + || activeRow.stream == STREAM_VOICE_CALL + || activeRow.stream == STREAM_ACCESSIBILITY; + } + + return false; } private void updateRowsH(final VolumeRow activeRow) { @@ -670,7 +727,8 @@ public class VolumeDialogImpl implements VolumeDialog { if (mActiveStream != state.activeStream) { mPrevActiveStream = mActiveStream; mActiveStream = state.activeStream; - updateRowsH(getActiveRow()); + VolumeRow activeRow = getActiveRow(); + updateRowsH(activeRow); rescheduleTimeoutH(); } for (VolumeRow row : mRows) { @@ -696,7 +754,7 @@ public class VolumeDialogImpl implements VolumeDialog { final boolean isA11yStream = row.stream == STREAM_ACCESSIBILITY; final boolean isRingStream = row.stream == AudioManager.STREAM_RING; final boolean isSystemStream = row.stream == AudioManager.STREAM_SYSTEM; - final boolean isAlarmStream = row.stream == AudioManager.STREAM_ALARM; + final boolean isAlarmStream = row.stream == STREAM_ALARM; final boolean isMusicStream = row.stream == AudioManager.STREAM_MUSIC; final boolean isRingVibrate = isRingStream && mState.ringerModeInternal == AudioManager.RINGER_MODE_VIBRATE; @@ -921,6 +979,21 @@ public class VolumeDialogImpl implements VolumeDialog { } } + private Runnable mSinglePress = new Runnable() { + @Override + public void run() { + mRingerIcon.setPressed(true); + mRingerIcon.postOnAnimationDelayed(mSingleUnpress, 200); + } + }; + + private Runnable mSingleUnpress = new Runnable() { + @Override + public void run() { + mRingerIcon.setPressed(false); + } + }; + private final VolumeDialogController.Callbacks mControllerCallbackH = new VolumeDialogController.Callbacks() { @Override diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumePrefs.java b/packages/SystemUI/src/com/android/systemui/volume/VolumePrefs.java index 173400f5e31afbdebdd374e3e4bd866bd0c12928..434327cd491c83fa334bdd229601bb1250186570 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumePrefs.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumePrefs.java @@ -43,7 +43,7 @@ public class VolumePrefs { public static final String PREF_ADJUST_ALARMS = "pref_adjust_alarms"; public static final String PREF_ADJUST_NOTIFICATION = "pref_adjust_notification"; - public static final int SHOW_RINGER_TOAST_COUNT = 9; + public static final int SHOW_RINGER_TOAST_COUNT = 12; public static final boolean DEFAULT_SHOW_HEADERS = true; public static final boolean DEFAULT_ENABLE_AUTOMUTE = true; diff --git a/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java b/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java index 4b455baee56bf5856bf459b46ac8a93b55e69e25..149f2de06be47b310f3924ed95bbd21d8146763c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/power/PowerUITest.java @@ -58,6 +58,7 @@ public class PowerUITest extends SysuiTestCase { public static final int BELOW_WARNING_BUCKET = -1; public static final long BELOW_HYBRID_THRESHOLD = TimeUnit.HOURS.toMillis(2); public static final long ABOVE_HYBRID_THRESHOLD = TimeUnit.HOURS.toMillis(4); + private static final long ABOVE_CHARGE_CYCLE_THRESHOLD = Duration.ofHours(8).toMillis(); private HardwarePropertiesManager mHardProps; private WarningsUI mMockWarnings; private PowerUI mPowerUI; @@ -198,6 +199,7 @@ public class PowerUITest extends SysuiTestCase { when(mEnhancedEstimates.isHybridNotificationEnabled()).thenReturn(true); when(mEnhancedEstimates.getLowWarningThreshold()).thenReturn(PowerUI.THREE_HOURS_IN_MILLIS); when(mEnhancedEstimates.getSevereWarningThreshold()).thenReturn(ONE_HOUR_MILLIS); + mPowerUI.mBatteryLevel = 10; mPowerUI.start(); // unplugged device that would show the non-hybrid notification and the hybrid @@ -213,6 +215,7 @@ public class PowerUITest extends SysuiTestCase { when(mEnhancedEstimates.isHybridNotificationEnabled()).thenReturn(true); when(mEnhancedEstimates.getLowWarningThreshold()).thenReturn(PowerUI.THREE_HOURS_IN_MILLIS); when(mEnhancedEstimates.getSevereWarningThreshold()).thenReturn(ONE_HOUR_MILLIS); + mPowerUI.mBatteryLevel = 10; mPowerUI.start(); // unplugged device that would show the non-hybrid but not the hybrid @@ -254,13 +257,14 @@ public class PowerUITest extends SysuiTestCase { } @Test - public void testShouldShowLowBatteryWarning_deviceBatteryStatusUnkown_returnsNoShow() { + public void testShouldShowLowBatteryWarning_deviceBatteryStatusUnknown_returnsNoShow() { when(mEnhancedEstimates.isHybridNotificationEnabled()).thenReturn(true); when(mEnhancedEstimates.getLowWarningThreshold()).thenReturn(PowerUI.THREE_HOURS_IN_MILLIS); when(mEnhancedEstimates.getSevereWarningThreshold()).thenReturn(ONE_HOUR_MILLIS); mPowerUI.start(); - // Unknown battery status device that would show the neither due + // Unknown battery status device that would show the neither due to the battery status being + // unknown boolean shouldShow = mPowerUI.shouldShowLowBatteryWarning(UNPLUGGED, UNPLUGGED, ABOVE_WARNING_BUCKET, BELOW_WARNING_BUCKET, BELOW_HYBRID_THRESHOLD, @@ -295,6 +299,9 @@ public class PowerUITest extends SysuiTestCase { mPowerUI.maybeShowBatteryWarning(UNPLUGGED, UNPLUGGED, ABOVE_WARNING_BUCKET, ABOVE_WARNING_BUCKET); + + // reduce battery level to handle time based trigger -> level trigger interactions + mPowerUI.mBatteryLevel = 10; boolean shouldShow = mPowerUI.shouldShowLowBatteryWarning(UNPLUGGED, UNPLUGGED, ABOVE_WARNING_BUCKET, ABOVE_WARNING_BUCKET, BELOW_HYBRID_THRESHOLD, diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/ExpandableNotificationRowTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/ExpandableNotificationRowTest.java index 23a34051bd7a641a653c363ab3b1f5cc3e19e593..ab042d4ce491ba822e2b7722bb756867e4dbe095 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/ExpandableNotificationRowTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/ExpandableNotificationRowTest.java @@ -16,6 +16,8 @@ package com.android.systemui.statusbar; +import static android.app.NotificationManager.IMPORTANCE_DEFAULT; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; @@ -29,6 +31,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.app.AppOpsManager; +import android.app.NotificationChannel; import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; import android.util.ArraySet; @@ -50,6 +53,7 @@ import org.mockito.Spy; import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; +import java.util.List; import java.util.function.Consumer; @SmallTest @@ -274,4 +278,24 @@ public class ExpandableNotificationRowTest extends SysuiTestCase { mGroupRow.setBlockingHelperShowing(false); assertFalse(mGroupRow.isBlockingHelperShowing()); } + + @Test + public void testGetNumUniqueChildren_defaultChannel() { + assertEquals(1, mGroupRow.getNumUniqueChannels()); + } + + @Test + public void testGetNumUniqueChildren_multiChannel() { + List childRows = + mGroupRow.getChildrenContainer().getNotificationChildren(); + // Give each child a unique channel id/name. + int i = 0; + for (ExpandableNotificationRow childRow : childRows) { + childRow.getEntry().channel = + new NotificationChannel("id" + i, "dinnertime" + i, IMPORTANCE_DEFAULT); + i++; + } + + assertEquals(3, mGroupRow.getNumUniqueChannels()); + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationBlockingHelperManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationBlockingHelperManagerTest.java index 64f34e009e7fc743c14dd4f244a643ca0201dd59..78cceeb3ff5331ff312375a28091645602eac607 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationBlockingHelperManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationBlockingHelperManagerTest.java @@ -87,7 +87,7 @@ public class NotificationBlockingHelperManagerTest extends SysuiTestCase { @Test public void testDismissCurrentBlockingHelper_withDetachedBlockingHelperRow() throws Exception { - ExpandableNotificationRow row = spy(mHelper.createRow()); + ExpandableNotificationRow row = spy(createBlockableRowSpy()); row.setBlockingHelperShowing(true); when(row.isAttachedToWindow()).thenReturn(false); mBlockingHelperManager.setBlockingHelperRowForTest(row); @@ -100,7 +100,7 @@ public class NotificationBlockingHelperManagerTest extends SysuiTestCase { @Test public void testDismissCurrentBlockingHelper_withAttachedBlockingHelperRow() throws Exception { - ExpandableNotificationRow row = spy(mHelper.createRow()); + ExpandableNotificationRow row = spy(createBlockableRowSpy()); row.setBlockingHelperShowing(true); when(row.isAttachedToWindow()).thenReturn(true); mBlockingHelperManager.setBlockingHelperRowForTest(row); @@ -113,7 +113,7 @@ public class NotificationBlockingHelperManagerTest extends SysuiTestCase { @Test public void testPerhapsShowBlockingHelper_shown() throws Exception { - ExpandableNotificationRow row = mHelper.createRow(); + ExpandableNotificationRow row = createBlockableRowSpy(); row.getEntry().userSentiment = USER_SENTIMENT_NEGATIVE; mBlockingHelperManager.setNotificationShadeExpanded(1f); @@ -125,7 +125,7 @@ public class NotificationBlockingHelperManagerTest extends SysuiTestCase { @Test public void testPerhapsShowBlockingHelper_shownForLargeGroup() throws Exception { - ExpandableNotificationRow groupRow = mHelper.createGroup(10); + ExpandableNotificationRow groupRow = createBlockableGroupRowSpy(10); groupRow.getEntry().userSentiment = USER_SENTIMENT_NEGATIVE; mBlockingHelperManager.setNotificationShadeExpanded(1f); @@ -137,7 +137,7 @@ public class NotificationBlockingHelperManagerTest extends SysuiTestCase { @Test public void testPerhapsShowBlockingHelper_shownForOnlyChildNotification() throws Exception { - ExpandableNotificationRow groupRow = mHelper.createGroup(1); + ExpandableNotificationRow groupRow = createBlockableGroupRowSpy(1); // Explicitly get the children container & call getViewAtPosition on it instead of the row // as other factors such as view expansion may cause us to get the parent row back instead // of the child row. @@ -152,7 +152,7 @@ public class NotificationBlockingHelperManagerTest extends SysuiTestCase { @Test public void testPerhapsShowBlockingHelper_notShownDueToNeutralUserSentiment() throws Exception { - ExpandableNotificationRow row = mHelper.createRow(); + ExpandableNotificationRow row = createBlockableRowSpy(); row.getEntry().userSentiment = USER_SENTIMENT_NEUTRAL; mBlockingHelperManager.setNotificationShadeExpanded(1f); @@ -162,7 +162,7 @@ public class NotificationBlockingHelperManagerTest extends SysuiTestCase { @Test public void testPerhapsShowBlockingHelper_notShownDueToPositiveUserSentiment() throws Exception { - ExpandableNotificationRow row = mHelper.createRow(); + ExpandableNotificationRow row = createBlockableRowSpy(); row.getEntry().userSentiment = USER_SENTIMENT_POSITIVE; mBlockingHelperManager.setNotificationShadeExpanded(1f); @@ -171,7 +171,7 @@ public class NotificationBlockingHelperManagerTest extends SysuiTestCase { @Test public void testPerhapsShowBlockingHelper_notShownDueToShadeVisibility() throws Exception { - ExpandableNotificationRow row = mHelper.createRow(); + ExpandableNotificationRow row = createBlockableRowSpy(); row.getEntry().userSentiment = USER_SENTIMENT_NEGATIVE; // Hide the shade mBlockingHelperManager.setNotificationShadeExpanded(0f); @@ -179,10 +179,20 @@ public class NotificationBlockingHelperManagerTest extends SysuiTestCase { assertFalse(mBlockingHelperManager.perhapsShowBlockingHelper(row, mMenuRow)); } + @Test + public void testPerhapsShowBlockingHelper_notShownDueToNonblockability() throws Exception { + ExpandableNotificationRow row = createBlockableRowSpy(); + when(row.getIsNonblockable()).thenReturn(true); + row.getEntry().userSentiment = USER_SENTIMENT_NEGATIVE; + mBlockingHelperManager.setNotificationShadeExpanded(1f); + + assertFalse(mBlockingHelperManager.perhapsShowBlockingHelper(row, mMenuRow)); + } + @Test public void testPerhapsShowBlockingHelper_notShownAsNotificationIsInMultipleChildGroup() throws Exception { - ExpandableNotificationRow groupRow = mHelper.createGroup(2); + ExpandableNotificationRow groupRow = createBlockableGroupRowSpy(2); // Explicitly get the children container & call getViewAtPosition on it instead of the row // as other factors such as view expansion may cause us to get the parent row back instead // of the child row. @@ -195,7 +205,7 @@ public class NotificationBlockingHelperManagerTest extends SysuiTestCase { @Test public void testBlockingHelperShowAndDismiss() throws Exception{ - ExpandableNotificationRow row = spy(mHelper.createRow()); + ExpandableNotificationRow row = spy(createBlockableRowSpy()); row.getEntry().userSentiment = USER_SENTIMENT_NEGATIVE; when(row.isAttachedToWindow()).thenReturn(true); mBlockingHelperManager.setNotificationShadeExpanded(1f); @@ -211,4 +221,18 @@ public class NotificationBlockingHelperManagerTest extends SysuiTestCase { verify(mEntryManager).updateNotifications(); } + + private ExpandableNotificationRow createBlockableRowSpy() throws Exception { + ExpandableNotificationRow row = spy(mHelper.createRow()); + when(row.getIsNonblockable()).thenReturn(false); + return row; + } + + private ExpandableNotificationRow createBlockableGroupRowSpy(int numChildren) throws Exception { + ExpandableNotificationRow row = spy(mHelper.createGroup(numChildren)); + when(row.getIsNonblockable()).thenReturn(false); + return row; + } + + } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationDataTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationDataTest.java index c43702119e91fb8802c87f6a9d482c94dfb73b28..5e27fde0444188e3bc44b9a5b53ba8290aea30a0 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationDataTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationDataTest.java @@ -35,6 +35,7 @@ import android.app.Notification; import android.app.NotificationChannel; import android.content.pm.IPackageManager; import android.content.pm.PackageManager; +import android.media.session.MediaSession; import android.os.Bundle; import android.service.notification.NotificationListenerService; import android.service.notification.StatusBarNotification; @@ -61,6 +62,7 @@ public class NotificationDataTest extends SysuiTestCase { private static final int UID_NORMAL = 123; private static final int UID_ALLOW_DURING_SETUP = 456; private static final String TEST_HIDDEN_NOTIFICATION_KEY = "testHiddenNotificationKey"; + private static final String TEST_EXEMPT_DND_VISUAL_SUPPRESSION_KEY = "exempt"; private final StatusBarNotification mMockStatusBarNotification = mock(StatusBarNotification.class); @@ -275,6 +277,7 @@ public class NotificationDataTest extends SysuiTestCase { @Test public void testShouldFilterHiddenNotifications() { + initStatusBarNotification(false); // setup when(mFsc.isSystemAlertWarningNeeded(anyInt(), anyString())).thenReturn(false); when(mFsc.isSystemAlertNotification(any())).thenReturn(false); @@ -289,6 +292,33 @@ public class NotificationDataTest extends SysuiTestCase { assertFalse(mNotificationData.shouldFilterOut(mMockStatusBarNotification)); } + @Test + public void testIsExemptFromDndVisualSuppression_foreground() { + initStatusBarNotification(false); + when(mMockStatusBarNotification.getKey()).thenReturn( + TEST_EXEMPT_DND_VISUAL_SUPPRESSION_KEY); + Notification n = mMockStatusBarNotification.getNotification(); + n.flags = Notification.FLAG_FOREGROUND_SERVICE; + + assertTrue(mNotificationData.isExemptFromDndVisualSuppression(mMockStatusBarNotification)); + assertFalse(mNotificationData.shouldSuppressAmbient(mMockStatusBarNotification)); + } + + @Test + public void testIsExemptFromDndVisualSuppression_media() { + initStatusBarNotification(false); + when(mMockStatusBarNotification.getKey()).thenReturn( + TEST_EXEMPT_DND_VISUAL_SUPPRESSION_KEY); + Notification n = mMockStatusBarNotification.getNotification(); + Notification.Builder nb = Notification.Builder.recoverBuilder(mContext, n); + nb.setStyle(new Notification.MediaStyle().setMediaSession(mock(MediaSession.Token.class))); + n = nb.build(); + when(mMockStatusBarNotification.getNotification()).thenReturn(n); + + assertTrue(mNotificationData.isExemptFromDndVisualSuppression(mMockStatusBarNotification)); + assertFalse(mNotificationData.shouldSuppressAmbient(mMockStatusBarNotification)); + } + private void initStatusBarNotification(boolean allowDuringSetup) { Bundle bundle = new Bundle(); bundle.putBoolean(Notification.EXTRA_ALLOW_DURING_SETUP, allowDuringSetup); @@ -318,6 +348,13 @@ public class NotificationDataTest extends SysuiTestCase { outRanking.getImportance(), outRanking.getImportanceExplanation(), outRanking.getOverrideGroupKey(), outRanking.getChannel(), null, null, outRanking.canShowBadge(), outRanking.getUserSentiment(), true); + } else if (key.equals(TEST_EXEMPT_DND_VISUAL_SUPPRESSION_KEY)) { + outRanking.populate(key, outRanking.getRank(), + outRanking.matchesInterruptionFilter(), + outRanking.getVisibilityOverride(), 255, + outRanking.getImportance(), outRanking.getImportanceExplanation(), + outRanking.getOverrideGroupKey(), outRanking.getChannel(), null, null, + outRanking.canShowBadge(), outRanking.getUserSentiment(), true); } else { outRanking.populate(key, outRanking.getRank(), outRanking.matchesInterruptionFilter(), diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationGutsManagerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationGutsManagerTest.java index 21f6750c0cdb2689a3713df17526bbbd9d47b185..0ef2d051e4aa4ce9f284baf79f7a02c5d2657552 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationGutsManagerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationGutsManagerTest.java @@ -268,9 +268,10 @@ public class NotificationGutsManagerTest extends SysuiTestCase { @Test public void testInitializeNotificationInfoView_showBlockingHelper() throws Exception { NotificationInfo notificationInfoView = mock(NotificationInfo.class); - ExpandableNotificationRow row = mHelper.createRow(); + ExpandableNotificationRow row = spy(mHelper.createRow()); row.setBlockingHelperShowing(true); row.getEntry().userSentiment = USER_SENTIMENT_NEGATIVE; + when(row.getIsNonblockable()).thenReturn(false); StatusBarNotification statusBarNotification = row.getStatusBarNotification(); mGutsManager.initializeNotificationInfo(row, notificationInfoView); @@ -285,7 +286,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase { any(NotificationInfo.CheckSaveListener.class), any(NotificationInfo.OnSettingsClickListener.class), any(NotificationInfo.OnAppSettingsClickListener.class), - any(), + eq(false), eq(true) /* isForBlockingHelper */, eq(true) /* isUserSentimentNegative */); } @@ -293,9 +294,10 @@ public class NotificationGutsManagerTest extends SysuiTestCase { @Test public void testInitializeNotificationInfoView_dontShowBlockingHelper() throws Exception { NotificationInfo notificationInfoView = mock(NotificationInfo.class); - ExpandableNotificationRow row = mHelper.createRow(); + ExpandableNotificationRow row = spy(mHelper.createRow()); row.setBlockingHelperShowing(false); row.getEntry().userSentiment = USER_SENTIMENT_NEGATIVE; + when(row.getIsNonblockable()).thenReturn(false); StatusBarNotification statusBarNotification = row.getStatusBarNotification(); mGutsManager.initializeNotificationInfo(row, notificationInfoView); @@ -310,7 +312,7 @@ public class NotificationGutsManagerTest extends SysuiTestCase { any(NotificationInfo.CheckSaveListener.class), any(NotificationInfo.OnSettingsClickListener.class), any(NotificationInfo.OnAppSettingsClickListener.class), - any(), + eq(false), eq(false) /* isForBlockingHelper */, eq(true) /* isUserSentimentNegative */); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java index c2cb5b9940ebbcee936e36f5b33f50a0eb2bd9ca..d86e947cdfccd784611b77f91356f3698d8b586f 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/NotificationInfoTest.java @@ -76,7 +76,6 @@ import org.mockito.junit.MockitoJUnit; import org.mockito.junit.MockitoRule; import java.util.ArrayList; -import java.util.Collections; import java.util.List; import java.util.concurrent.CountDownLatch; @@ -87,6 +86,7 @@ public class NotificationInfoTest extends SysuiTestCase { private static final String TEST_PACKAGE_NAME = "test_package"; private static final String TEST_SYSTEM_PACKAGE_NAME = PRINT_SPOOLER_PACKAGE_NAME; private static final int TEST_UID = 1; + private static final int MULTIPLE_CHANNEL_COUNT = 2; private static final String TEST_CHANNEL = "test_channel"; private static final String TEST_CHANNEL_NAME = "TEST CHANNEL NAME"; @@ -157,7 +157,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testBindNotification_SetsTextApplicationName() throws Exception { when(mMockPackageManager.getApplicationLabel(any())).thenReturn("App Name"); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); final TextView textView = mNotificationInfo.findViewById(R.id.pkgname); assertTrue(textView.getText().toString().contains("App Name")); assertEquals(VISIBLE, mNotificationInfo.findViewById(R.id.header).getVisibility()); @@ -169,7 +169,7 @@ public class NotificationInfoTest extends SysuiTestCase { when(mMockPackageManager.getApplicationIcon(any(ApplicationInfo.class))) .thenReturn(iconDrawable); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); final ImageView iconView = mNotificationInfo.findViewById(R.id.pkgicon); assertEquals(iconDrawable, iconView.getDrawable()); } @@ -177,7 +177,7 @@ public class NotificationInfoTest extends SysuiTestCase { @Test public void testBindNotification_GroupNameHiddenIfNoGroup() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); final TextView groupNameView = mNotificationInfo.findViewById(R.id.group_name); assertEquals(GONE, groupNameView.getVisibility()); final TextView groupDividerView = mNotificationInfo.findViewById(R.id.pkg_group_divider); @@ -193,7 +193,7 @@ public class NotificationInfoTest extends SysuiTestCase { eq("test_group_id"), eq(TEST_PACKAGE_NAME), eq(TEST_UID))) .thenReturn(notificationChannelGroup); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); final TextView groupNameView = mNotificationInfo.findViewById(R.id.group_name); assertEquals(View.VISIBLE, groupNameView.getVisibility()); assertEquals("Test Group Name", groupNameView.getText()); @@ -204,7 +204,7 @@ public class NotificationInfoTest extends SysuiTestCase { @Test public void testBindNotification_SetsTextChannelName() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); final TextView textView = mNotificationInfo.findViewById(R.id.channel_name); assertEquals(TEST_CHANNEL_NAME, textView.getText()); } @@ -212,7 +212,7 @@ public class NotificationInfoTest extends SysuiTestCase { @Test public void testBindNotification_DefaultChannelDoesNotUseChannelName() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mDefaultNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mDefaultNotificationChannel, 1, mSbn, null, null, null, false); final TextView textView = mNotificationInfo.findViewById(R.id.channel_name); assertEquals(GONE, textView.getVisibility()); } @@ -224,7 +224,7 @@ public class NotificationInfoTest extends SysuiTestCase { when(mMockINotificationManager.getNumNotificationChannelsForPackage( eq(TEST_PACKAGE_NAME), eq(TEST_UID), anyBoolean())).thenReturn(10); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mDefaultNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mDefaultNotificationChannel, 1, mSbn, null, null, null, false); final TextView textView = mNotificationInfo.findViewById(R.id.channel_name); assertEquals(VISIBLE, textView.getVisibility()); } @@ -232,8 +232,7 @@ public class NotificationInfoTest extends SysuiTestCase { @Test public void testBindNotification_UnblockablePackageUsesChannelName() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, - Collections.singleton(TEST_PACKAGE_NAME)); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true); final TextView textView = mNotificationInfo.findViewById(R.id.channel_name); assertEquals(VISIBLE, textView.getVisibility()); } @@ -241,7 +240,7 @@ public class NotificationInfoTest extends SysuiTestCase { @Test public void testBindNotification_BlockButton() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); final View block = mNotificationInfo.findViewById(R.id.block); final View minimize = mNotificationInfo.findViewById(R.id.minimize); assertEquals(VISIBLE, block.getVisibility()); @@ -252,7 +251,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testBindNotification_MinButton() throws Exception { mSbn.getNotification().flags = Notification.FLAG_FOREGROUND_SERVICE; mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); final View block = mNotificationInfo.findViewById(R.id.block); final View minimize = mNotificationInfo.findViewById(R.id.minimize); assertEquals(GONE, block.getVisibility()); @@ -267,7 +266,7 @@ public class NotificationInfoTest extends SysuiTestCase { (View v, NotificationChannel c, int appUid) -> { assertEquals(mNotificationChannel, c); latch.countDown(); - }, null, null); + }, null, false); final View settingsButton = mNotificationInfo.findViewById(R.id.info); settingsButton.performClick(); @@ -278,7 +277,7 @@ public class NotificationInfoTest extends SysuiTestCase { @Test public void testBindNotification_SettingsButtonInvisibleWhenNoClickListener() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); final View settingsButton = mNotificationInfo.findViewById(R.id.info); assertTrue(settingsButton.getVisibility() != View.VISIBLE); } @@ -286,11 +285,11 @@ public class NotificationInfoTest extends SysuiTestCase { @Test public void testBindNotification_SettingsButtonReappearsAfterSecondBind() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, (View v, NotificationChannel c, int appUid) -> { - }, null, null); + }, null, false); final View settingsButton = mNotificationInfo.findViewById(R.id.info); assertEquals(View.VISIBLE, settingsButton.getVisibility()); } @@ -299,11 +298,11 @@ public class NotificationInfoTest extends SysuiTestCase { public void testOnClickListenerPassesNullChannelForBundle() throws Exception { final CountDownLatch latch = new CountDownLatch(1); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 2, mSbn, null, + TEST_PACKAGE_NAME, mNotificationChannel, MULTIPLE_CHANNEL_COUNT, mSbn, null, (View v, NotificationChannel c, int appUid) -> { assertEquals(null, c); latch.countDown(); - }, null, null); + }, null, true); mNotificationInfo.findViewById(R.id.info).performClick(); // Verify that listener was triggered. @@ -315,7 +314,8 @@ public class NotificationInfoTest extends SysuiTestCase { public void testBindNotification_ChannelNameInvisibleWhenBundleFromDifferentChannels() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 2, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, MULTIPLE_CHANNEL_COUNT, mSbn, null, null, + null, true); final TextView channelNameView = mNotificationInfo.findViewById(R.id.channel_name); assertEquals(GONE, channelNameView.getVisibility()); @@ -325,7 +325,8 @@ public class NotificationInfoTest extends SysuiTestCase { @UiThreadTest public void testStopInvisibleIfBundleFromDifferentChannels() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 2, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, MULTIPLE_CHANNEL_COUNT, mSbn, null, null, + null, true); final TextView blockView = mNotificationInfo.findViewById(R.id.block); assertEquals(GONE, blockView.getVisibility()); } @@ -333,8 +334,8 @@ public class NotificationInfoTest extends SysuiTestCase { @Test public void testbindNotification_BlockingHelper() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, - null, null, false, true); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false, false, + true); final TextView view = mNotificationInfo.findViewById(R.id.block_prompt); assertEquals(View.VISIBLE, view.getVisibility()); assertEquals(mContext.getString(R.string.inline_blocking_helper), view.getText()); @@ -343,8 +344,7 @@ public class NotificationInfoTest extends SysuiTestCase { @Test public void testbindNotification_UnblockableTextVisibleWhenAppUnblockable() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, - null, Collections.singleton(TEST_PACKAGE_NAME)); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true); final TextView view = mNotificationInfo.findViewById(R.id.block_prompt); assertEquals(View.VISIBLE, view.getVisibility()); assertEquals(mContext.getString(R.string.notification_unblockable_desc), @@ -354,7 +354,7 @@ public class NotificationInfoTest extends SysuiTestCase { @Test public void testBindNotification_DoesNotUpdateNotificationChannel() throws Exception { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); verify(mMockINotificationManager, never()).updateNotificationChannelForPackage( anyString(), eq(TEST_UID), any()); } @@ -363,7 +363,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testDoesNotUpdateNotificationChannelAfterImportanceChanged() throws Exception { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); mNotificationInfo.findViewById(R.id.block).performClick(); verify(mMockINotificationManager, never()).updateNotificationChannelForPackage( @@ -375,7 +375,7 @@ public class NotificationInfoTest extends SysuiTestCase { throws Exception { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); mNotificationInfo.findViewById(R.id.minimize).performClick(); verify(mMockINotificationManager, never()).updateNotificationChannelForPackage( @@ -387,7 +387,7 @@ public class NotificationInfoTest extends SysuiTestCase { throws Exception { int originalImportance = mNotificationChannel.getImportance(); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); mNotificationInfo.handleCloseControls(true, false); verify(mMockINotificationManager, times(1)).updateNotificationChannelForPackage( @@ -400,7 +400,7 @@ public class NotificationInfoTest extends SysuiTestCase { throws Exception { mNotificationChannel.setImportance(IMPORTANCE_UNSPECIFIED); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); mNotificationInfo.handleCloseControls(true, false); verify(mMockINotificationManager, times(1)).updateNotificationChannelForPackage( @@ -420,7 +420,7 @@ public class NotificationInfoTest extends SysuiTestCase { null /* checkSaveListener */, null /* onSettingsClick */, null /* onAppSettingsClick */, - null /* nonBlockablePkgs */, + false /* isNonblockable */, true /* isForBlockingHelper */, false /* isUserSentimentNegative */); @@ -433,8 +433,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testNonBlockableAppDoesNotBecomeBlocked() throws Exception { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, - null, Collections.singleton(TEST_PACKAGE_NAME)); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); verify(mMockINotificationManager, never()).updateNotificationChannelForPackage( @@ -445,7 +444,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testBlockChangedCallsUpdateNotificationChannel() throws Exception { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); @@ -464,8 +463,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testNonBlockableAppDoesNotBecomeMin() throws Exception { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, - null, Collections.singleton(TEST_PACKAGE_NAME)); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true); mNotificationInfo.findViewById(R.id.minimize).performClick(); waitForUndoButton(); verify(mMockINotificationManager, never()).updateNotificationChannelForPackage( @@ -477,7 +475,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationChannel.setImportance(IMPORTANCE_LOW); mSbn.getNotification().flags = Notification.FLAG_FOREGROUND_SERVICE; mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); mNotificationInfo.findViewById(R.id.minimize).performClick(); waitForUndoButton(); @@ -496,7 +494,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testKeepUpdatesNotificationChannel() throws Exception { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); mNotificationInfo.handleCloseControls(true, false); @@ -512,7 +510,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testBlockUndoDoesNotBlockNotificationChannel() throws Exception { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); @@ -532,7 +530,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testMinUndoDoesNotMinNotificationChannel() throws Exception { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, false); mNotificationInfo.findViewById(R.id.minimize).performClick(); waitForUndoButton(); @@ -552,8 +550,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testCloseControlsDoesNotUpdateiMinIfSaveIsFalse() throws Exception { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, - Collections.singleton(TEST_PACKAGE_NAME)); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true); mNotificationInfo.findViewById(R.id.minimize).performClick(); waitForUndoButton(); @@ -566,8 +563,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testCloseControlsDoesNotUpdateIfSaveIsFalse() throws Exception { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, - Collections.singleton(TEST_PACKAGE_NAME)); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); @@ -582,7 +578,7 @@ public class NotificationInfoTest extends SysuiTestCase { mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, (Runnable saveImportance, StatusBarNotification sbn) -> { - }, null, null, Collections.singleton(TEST_PACKAGE_NAME)); + }, null, null, true); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); @@ -598,7 +594,7 @@ public class NotificationInfoTest extends SysuiTestCase { TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, (Runnable saveImportance, StatusBarNotification sbn) -> { saveImportance.run(); - }, null, null, null); + }, null, null, false); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); @@ -628,7 +624,7 @@ public class NotificationInfoTest extends SysuiTestCase { TEST_PACKAGE_NAME, mNotificationChannel, 1, sbn, null, null, (View v, Intent intent) -> { latch.countDown(); - }, null); + }, false); final TextView settingsLink = mNotificationInfo.findViewById(R.id.app_settings); assertEquals(View.VISIBLE, settingsLink.getVisibility()); settingsLink.performClick(); @@ -653,10 +649,10 @@ public class NotificationInfoTest extends SysuiTestCase { 0, null, 0, 0, n, UserHandle.CURRENT, null, 0); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 2, sbn, null, null, + TEST_PACKAGE_NAME, mNotificationChannel, MULTIPLE_CHANNEL_COUNT, sbn, null, null, (View v, Intent intent) -> { latch.countDown(); - }, null); + }, false); final TextView settingsLink = mNotificationInfo.findViewById(R.id.app_settings); assertEquals(View.VISIBLE, settingsLink.getVisibility()); settingsLink.performClick(); @@ -674,7 +670,8 @@ public class NotificationInfoTest extends SysuiTestCase { 0, null, 0, 0, n, UserHandle.CURRENT, null, 0); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 2, sbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, MULTIPLE_CHANNEL_COUNT, sbn, null, null, + null, false); final TextView settingsLink = mNotificationInfo.findViewById(R.id.app_settings); assertEquals(GONE, settingsLink.getVisibility()); } @@ -694,7 +691,7 @@ public class NotificationInfoTest extends SysuiTestCase { 0, null, 0, 0, n, UserHandle.CURRENT, null, 0); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, sbn, null, null, null, null); + TEST_PACKAGE_NAME, mNotificationChannel, 1, sbn, null, null, null, false); final TextView settingsLink = mNotificationInfo.findViewById(R.id.app_settings); assertEquals(GONE, settingsLink.getVisibility()); } @@ -710,8 +707,7 @@ public class NotificationInfoTest extends SysuiTestCase { mSbn.getNotification().flags = Notification.FLAG_FOREGROUND_SERVICE; mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, - Collections.singleton(TEST_PACKAGE_NAME)); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true); mNotificationInfo.findViewById(R.id.minimize).performClick(); waitForUndoButton(); @@ -723,8 +719,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testUndoText_block() throws Exception { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, - Collections.singleton(TEST_PACKAGE_NAME)); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); @@ -736,8 +731,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testNoHeaderOnConfirmation() throws Exception { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, - Collections.singleton(TEST_PACKAGE_NAME)); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); @@ -748,8 +742,7 @@ public class NotificationInfoTest extends SysuiTestCase { public void testHeaderOnUndo() throws Exception { mNotificationChannel.setImportance(IMPORTANCE_LOW); mNotificationInfo.bindNotification(mMockPackageManager, mMockINotificationManager, - TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, - Collections.singleton(TEST_PACKAGE_NAME)); + TEST_PACKAGE_NAME, mNotificationChannel, 1, mSbn, null, null, null, true); mNotificationInfo.findViewById(R.id.block).performClick(); waitForUndoButton(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconListTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconListTest.java index 2792d8c458650c2d5a465437eeabc85cd1caff71..07ac11b82e8c10789b6c4fe53f91c726217659bc 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconListTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/StatusBarIconListTest.java @@ -1,17 +1,23 @@ package com.android.systemui.statusbar; +import static com.android.systemui.statusbar.phone.StatusBarIconController.TAG_PRIMARY; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNull; +import static junit.framework.Assert.assertTrue; import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; import android.support.test.runner.AndroidJUnit4; import android.test.suitebuilder.annotation.SmallTest; -import com.android.internal.statusbar.StatusBarIcon; import com.android.systemui.SysuiTestCase; +import com.android.systemui.statusbar.phone.StatusBarIconHolder; import com.android.systemui.statusbar.phone.StatusBarIconList; +import com.android.systemui.statusbar.phone.StatusBarIconList.Slot; +import java.util.ArrayList; +import java.util.List; import org.junit.Test; import org.junit.runner.RunWith; @@ -41,45 +47,125 @@ public class StatusBarIconListTest extends SysuiTestCase { @Test public void testAddSlotSlidesIcons() { StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS); - StatusBarIcon sbIcon = mock(StatusBarIcon.class); - statusBarIconList.setIcon(0, sbIcon); + StatusBarIconHolder sbHolder = mock(StatusBarIconHolder.class); + statusBarIconList.setIcon(0, sbHolder); statusBarIconList.getSlotIndex("zzz"); // new content added in front - assertNull(statusBarIconList.getIcon(0)); - assertEquals(sbIcon, statusBarIconList.getIcon(1)); + assertNull(statusBarIconList.getIcon(0, TAG_PRIMARY)); + assertEquals(sbHolder, statusBarIconList.getIcon(1, TAG_PRIMARY)); } @Test public void testGetAndSetIcon() { StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS); - StatusBarIcon sbIconA = mock(StatusBarIcon.class); - StatusBarIcon sbIconB = mock(StatusBarIcon.class); - statusBarIconList.setIcon(0, sbIconA); - statusBarIconList.setIcon(1, sbIconB); - assertEquals(sbIconA, statusBarIconList.getIcon(0)); - assertEquals(sbIconB, statusBarIconList.getIcon(1)); - assertNull(statusBarIconList.getIcon(2)); // icon not set + StatusBarIconHolder sbHolderA = mock(StatusBarIconHolder.class); + StatusBarIconHolder sbHolderB = mock(StatusBarIconHolder.class); + statusBarIconList.setIcon(0, sbHolderA); + statusBarIconList.setIcon(1, sbHolderB); + assertEquals(sbHolderA, statusBarIconList.getIcon(0, TAG_PRIMARY)); + assertEquals(sbHolderB, statusBarIconList.getIcon(1, TAG_PRIMARY)); + assertNull(statusBarIconList.getIcon(2, TAG_PRIMARY)); // icon not set } @Test public void testRemoveIcon() { StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS); - StatusBarIcon sbIconA = mock(StatusBarIcon.class); - StatusBarIcon sbIconB = mock(StatusBarIcon.class); - statusBarIconList.setIcon(0, sbIconA); - statusBarIconList.setIcon(1, sbIconB); - statusBarIconList.removeIcon(0); - assertNull(statusBarIconList.getIcon(0)); // icon not set + StatusBarIconHolder sbHolderA = mock(StatusBarIconHolder.class); + StatusBarIconHolder sbHolderB = mock(StatusBarIconHolder.class); + statusBarIconList.setIcon(0, sbHolderA); + statusBarIconList.setIcon(1, sbHolderB); + statusBarIconList.removeIcon(0, TAG_PRIMARY); + assertNull(statusBarIconList.getIcon(0, TAG_PRIMARY)); // icon not set } @Test - public void testGetViewIndex() { + public void testGetViewIndex_NoMultiples() { StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS); - StatusBarIcon sbIcon = mock(StatusBarIcon.class); - statusBarIconList.setIcon(2, sbIcon); - assertEquals(0, statusBarIconList.getViewIndex(2)); // Icon for item 2 is 0th child view. - statusBarIconList.setIcon(0, sbIcon); - assertEquals(0, statusBarIconList.getViewIndex(0)); // Icon for item 0 is 0th child view, - assertEquals(1, statusBarIconList.getViewIndex(2)); // and item 2 is now 1st child view. + StatusBarIconHolder sbHolder = mock(StatusBarIconHolder.class); + statusBarIconList.setIcon(2, sbHolder); + // Icon for item 2 is 0th child view. + assertEquals(0, statusBarIconList.getViewIndex(2, TAG_PRIMARY)); + statusBarIconList.setIcon(0, sbHolder); + // Icon for item 0 is 0th child view, + assertEquals(0, statusBarIconList.getViewIndex(0, TAG_PRIMARY)); + // and item 2 is now 1st child view. + assertEquals(1, statusBarIconList.getViewIndex(2, TAG_PRIMARY)); } + @Test + public void testGetViewIndex_MultipleIconsPerSlot() { + StatusBarIconList statusBarIconList = new StatusBarIconList(STATUS_BAR_SLOTS); + StatusBarIconHolder sbHolder = mock(StatusBarIconHolder.class); + + statusBarIconList.setIcon(2, sbHolder); // item 2, one icon 0th child + + // All of these can be added to the same slot + // no tag bc it defaults to 0 + StatusBarIconHolder sbHolder2 = mock(StatusBarIconHolder.class); + StatusBarIconHolder sbHolder3 = mock(StatusBarIconHolder.class); + int sb3Tag = 1; + when(sbHolder3.getTag()).thenReturn(sb3Tag); + StatusBarIconHolder sbHolder4 = mock(StatusBarIconHolder.class); + int sb4Tag = 2; + when(sbHolder4.getTag()).thenReturn(sb4Tag); + + // Put a holder at slot 1, verify that it is first + statusBarIconList.setIcon(1, sbHolder2); + assertEquals(0, statusBarIconList.getViewIndex(1, TAG_PRIMARY)); + + // Put another holder at slot 1, verify it's index 0 and the rest come after + statusBarIconList.setIcon(1, sbHolder3); + assertEquals(0, statusBarIconList.getViewIndex(1, sb3Tag)); + assertEquals(1, statusBarIconList.getViewIndex(1, TAG_PRIMARY)); + // First icon should be at the end + assertEquals(2, statusBarIconList.getViewIndex(2, TAG_PRIMARY)); + + // Put another one in there just for good measure + statusBarIconList.setIcon(1, sbHolder4); + assertEquals(0, statusBarIconList.getViewIndex(1, sb4Tag)); + assertEquals(1, statusBarIconList.getViewIndex(1, sb3Tag)); + assertEquals(2, statusBarIconList.getViewIndex(1, TAG_PRIMARY)); + assertEquals(3, statusBarIconList.getViewIndex(2, TAG_PRIMARY)); + } + + /** + * StatusBarIconList.Slot tests + */ + + @Test + public void testSlot_OrderIsPreserved() { + Slot testSlot = new Slot("test_name", null); + + // no tag bc it defaults to 0 + StatusBarIconHolder sbHolder1 = mock(StatusBarIconHolder.class); + StatusBarIconHolder sbHolder2 = mock(StatusBarIconHolder.class); + int sb2Tag = 1; + when(sbHolder2.getTag()).thenReturn(sb2Tag); + StatusBarIconHolder sbHolder3 = mock(StatusBarIconHolder.class); + int sb3Tag = 2; + when(sbHolder3.getTag()).thenReturn(sb3Tag); + + ArrayList expected = new ArrayList<>(); + expected.add(sbHolder1); + expected.add(sbHolder2); + expected.add(sbHolder3); + + + // Add 3 icons in the same slot, and verify that the list we get is equal to what we gave + for (StatusBarIconHolder holder : expected) { + testSlot.addHolder(holder); + } + assertTrue(listsEqual(expected, testSlot.getHolderList())); + } + + private boolean listsEqual(List list1, List list2) { + if (list1.size() != list2.size()) return false; + + for (int i = 0; i < list1.size(); i++) { + if (!list1.get(i).equals(list2.get(i))) { + return false; + } + } + + return true; + } } \ No newline at end of file diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java index 5db77925b25ef656eaad1c0516f12834e31f3753..72b0156d25f9dc6de0c2ce39fadcdbf5d1a734ae 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/StatusBarIconControllerTest.java @@ -14,10 +14,17 @@ package com.android.systemui.statusbar.phone; +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertTrue; + +import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_ICON; +import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_MOBILE; +import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_WIFI; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.verify; +import android.graphics.Rect; import android.support.test.filters.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper.RunWithLooper; @@ -25,9 +32,14 @@ import android.view.ViewGroup; import android.widget.LinearLayout; import com.android.internal.statusbar.StatusBarIcon; +import com.android.systemui.statusbar.StatusIconDisplayable; import com.android.systemui.statusbar.StatusBarIconView; +import com.android.systemui.statusbar.StatusBarMobileView; +import com.android.systemui.statusbar.StatusBarWifiView; import com.android.systemui.statusbar.phone.StatusBarIconController.DarkIconManager; import com.android.systemui.statusbar.phone.StatusBarIconController.IconManager; +import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState; +import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState; import com.android.systemui.statusbar.policy.DarkIconDispatcher; import com.android.systemui.utils.leaks.LeakCheckedTest; @@ -50,50 +62,119 @@ public class StatusBarIconControllerTest extends LeakCheckedTest { public void testSetCalledOnAdd_IconManager() { LinearLayout layout = new LinearLayout(mContext); TestIconManager manager = new TestIconManager(layout); - StatusBarIcon icon = mock(StatusBarIcon.class); - - manager.onIconAdded(0, "test_slot", false, icon); - verify(manager.mMock).set(eq(icon)); + testCallOnAdd_forManager(manager); } @Test public void testSetCalledOnAdd_DarkIconManager() { LinearLayout layout = new LinearLayout(mContext); TestDarkIconManager manager = new TestDarkIconManager(layout); - StatusBarIcon icon = mock(StatusBarIcon.class); + testCallOnAdd_forManager(manager); + } + + + private void testCallOnAdd_forManager(T manager) { + StatusBarIconHolder holder = holderForType(TYPE_ICON); + manager.onIconAdded(0, "test_slot", false, holder); + assertTrue("Expected StatusBarIconView", + (manager.getViewAt(0) instanceof StatusBarIconView)); - manager.onIconAdded(0, "test_slot", false, icon); - verify(manager.mMock).set(eq(icon)); + holder = holderForType(TYPE_WIFI); + manager.onIconAdded(1, "test_wifi", false, holder); + assertTrue(manager.getViewAt(1) instanceof StatusBarWifiView); + + holder = holderForType(TYPE_MOBILE); + manager.onIconAdded(2, "test_mobile", false, holder); + assertTrue(manager.getViewAt(2) instanceof StatusBarMobileView); } - private static class TestDarkIconManager extends DarkIconManager { + private StatusBarIconHolder holderForType(int type) { + switch (type) { + case TYPE_MOBILE: + return StatusBarIconHolder.fromMobileIconState(mock(MobileIconState.class)); + + case TYPE_WIFI: + return StatusBarIconHolder.fromWifiIconState(mock(WifiIconState.class)); - private final StatusBarIconView mMock; + case TYPE_ICON: + default: + return StatusBarIconHolder.fromIcon(mock(StatusBarIcon.class)); + } + } + + private static class TestDarkIconManager extends DarkIconManager + implements TestableIconManager { public TestDarkIconManager(LinearLayout group) { super(group); - mMock = mock(StatusBarIconView.class); } @Override - protected StatusBarIconView onCreateStatusBarIconView(String slot, boolean blocked) { - return mMock; + public StatusIconDisplayable getViewAt(int index) { + return (StatusIconDisplayable) mGroup.getChildAt(index); } - } - private static class TestIconManager extends IconManager { + @Override + protected StatusBarIconView addIcon(int index, String slot, boolean blocked, + StatusBarIcon icon) { + StatusBarIconView mock = mock(StatusBarIconView.class); + mGroup.addView(mock, index); + + return mock; + } - private final StatusBarIconView mMock; + @Override + protected StatusBarWifiView addSignalIcon(int index, String slot, WifiIconState state) { + StatusBarWifiView mock = mock(StatusBarWifiView.class); + mGroup.addView(mock, index); + return mock; + } + @Override + protected StatusBarMobileView addMobileIcon(int index, String slot, MobileIconState state) { + StatusBarMobileView mock = mock(StatusBarMobileView.class); + mGroup.addView(mock, index); + + return mock; + } + } + + private static class TestIconManager extends IconManager implements TestableIconManager { public TestIconManager(ViewGroup group) { super(group); - mMock = mock(StatusBarIconView.class); } @Override - protected StatusBarIconView onCreateStatusBarIconView(String slot, boolean blocked) { - return mMock; + public StatusIconDisplayable getViewAt(int index) { + return (StatusIconDisplayable) mGroup.getChildAt(index); + } + + @Override + protected StatusBarIconView addIcon(int index, String slot, boolean blocked, + StatusBarIcon icon) { + StatusBarIconView mock = mock(StatusBarIconView.class); + mGroup.addView(mock, index); + + return mock; + } + + @Override + protected StatusBarWifiView addSignalIcon(int index, String slot, WifiIconState state) { + StatusBarWifiView mock = mock(StatusBarWifiView.class); + mGroup.addView(mock, index); + return mock; + } + + @Override + protected StatusBarMobileView addMobileIcon(int index, String slot, MobileIconState state) { + StatusBarMobileView mock = mock(StatusBarMobileView.class); + mGroup.addView(mock, index); + + return mock; } } + private interface TestableIconManager { + StatusIconDisplayable getViewAt(int index); + } } 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 4a66bb7deca062cff5d065563a445562f8ed4da3..b31a2dc1af04ea54452be64f398b45a9b4235603 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 @@ -41,6 +41,7 @@ import android.app.Notification; import android.app.StatusBarManager; import android.app.trust.TrustManager; import android.content.Context; +import android.content.pm.UserInfo; import android.hardware.fingerprint.FingerprintManager; import android.metrics.LogMaker; import android.os.Binder; @@ -71,6 +72,7 @@ import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.assist.AssistManager; import com.android.systemui.keyguard.KeyguardViewMediator; +import com.android.systemui.classifier.FalsingManager; import com.android.systemui.keyguard.WakefulnessLifecycle; import com.android.systemui.recents.misc.SystemServicesProxy; import com.android.systemui.statusbar.ActivatableNotificationView; @@ -91,6 +93,7 @@ import com.android.systemui.statusbar.NotificationLogger; import com.android.systemui.statusbar.NotificationMediaManager; import com.android.systemui.statusbar.NotificationPresenter; import com.android.systemui.statusbar.NotificationRemoteInputManager; +import com.android.systemui.statusbar.NotificationShelf; import com.android.systemui.statusbar.NotificationViewHierarchyManager; import com.android.systemui.statusbar.StatusBarState; import com.android.systemui.statusbar.notification.ActivityLaunchAnimator; @@ -98,6 +101,7 @@ import com.android.systemui.statusbar.notification.VisualStabilityManager; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.KeyguardMonitor; import com.android.systemui.statusbar.policy.KeyguardMonitorImpl; +import com.android.systemui.statusbar.policy.UserSwitcherController; import com.android.systemui.statusbar.stack.NotificationStackScrollLayout; import org.junit.Before; @@ -134,6 +138,7 @@ public class StatusBarTest extends SysuiTestCase { @Mock private VisualStabilityManager mVisualStabilityManager; @Mock private NotificationListener mNotificationListener; @Mock private KeyguardViewMediator mKeyguardViewMediator; + @Mock private NotificationLockscreenUserManager mLockscreenUserManager; private TestableStatusBar mStatusBar; private FakeMetricsLogger mMetricsLogger; @@ -146,9 +151,7 @@ public class StatusBarTest extends SysuiTestCase { MockitoAnnotations.initMocks(this); mDependency.injectMockDependency(AssistManager.class); mDependency.injectMockDependency(DeviceProvisionedController.class); - mDependency.injectMockDependency(NotificationGroupManager.class); mDependency.injectMockDependency(NotificationGutsManager.class); - mDependency.injectMockDependency(NotificationRemoteInputManager.class); mDependency.injectMockDependency(NotificationMediaManager.class); mDependency.injectMockDependency(ForegroundServiceController.class); mDependency.injectTestDependency(NotificationViewHierarchyManager.class, @@ -202,7 +205,12 @@ public class StatusBarTest extends SysuiTestCase { mPowerManager, mNotificationPanelView, mBarService, mNotificationListener, mNotificationLogger, mVisualStabilityManager, mViewHierarchyManager, mEntryManager, mScrimController, mFingerprintUnlockController, - mock(ActivityLaunchAnimator.class), mKeyguardViewMediator); + mock(ActivityLaunchAnimator.class), mKeyguardViewMediator, + mock(NotificationRemoteInputManager.class), mock(NotificationGroupManager.class), + mock(FalsingManager.class), mock(StatusBarWindowManager.class), + mock(NotificationIconAreaController.class), mock(DozeScrimController.class), + mock(NotificationShelf.class), mLockscreenUserManager, + mock(CommandQueue.class)); mStatusBar.mContext = mContext; mStatusBar.mComponents = mContext.getComponents(); mEntryManager.setUpForTest(mStatusBar, mStackScroller, mStatusBar, mHeadsUpManager, @@ -529,11 +537,7 @@ public class StatusBarTest extends SysuiTestCase { @Test @RunWithLooper(setAsMainLooper = true) public void testUpdateKeyguardState_DoesNotCrash() { - mStatusBar.mStatusBarWindow = mock(StatusBarWindowView.class); mStatusBar.mState = StatusBarState.KEYGUARD; - mStatusBar.mDozeScrimController = mock(DozeScrimController.class); - mStatusBar.mNotificationIconAreaController = mock(NotificationIconAreaController.class); - mStatusBar.mLockscreenUserManager = mock(NotificationLockscreenUserManager.class); when(mStatusBar.mLockscreenUserManager.getCurrentProfiles()).thenReturn( new SparseArray<>()); mStatusBar.updateKeyguardState(false, false); @@ -541,9 +545,6 @@ public class StatusBarTest extends SysuiTestCase { @Test public void testFingerprintNotification_UpdatesScrims() { - mStatusBar.mStatusBarWindowManager = mock(StatusBarWindowManager.class); - mStatusBar.mDozeScrimController = mock(DozeScrimController.class); - mStatusBar.mNotificationIconAreaController = mock(NotificationIconAreaController.class); mStatusBar.notifyFpAuthModeChanged(); verify(mScrimController).transitionTo(any(), any()); } @@ -629,6 +630,32 @@ public class StatusBarTest extends SysuiTestCase { verify(mStackScroller).changeViewPosition(any(FooterView.class), eq(-1 /* end */)); } + @Test + public void testSetState_changesIsFullScreenUserSwitcherState() { + mStatusBar.setBarStateForTest(StatusBarState.KEYGUARD); + assertFalse(mStatusBar.isFullScreenUserSwitcherState()); + + mStatusBar.setBarStateForTest(StatusBarState.FULLSCREEN_USER_SWITCHER); + assertTrue(mStatusBar.isFullScreenUserSwitcherState()); + } + + @Test + public void testShowKeyguardImplementation_setsState() { + when(mLockscreenUserManager.getCurrentProfiles()).thenReturn(new SparseArray<>()); + + mStatusBar.setBarStateForTest(StatusBarState.SHADE); + + // By default, showKeyguardImpl sets state to KEYGUARD. + mStatusBar.showKeyguardImpl(); + assertTrue(mStatusBar.mState == StatusBarState.KEYGUARD); + + // If useFullscreenUserSwitcher is true, state is set to FULLSCREEN_USER_SWITCHER. + mStatusBar.mUserSwitcherController = mock(UserSwitcherController.class); + when(mStatusBar.mUserSwitcherController.useFullscreenUserSwitcher()).thenReturn(true); + mStatusBar.showKeyguardImpl(); + assertTrue(mStatusBar.mState == StatusBarState.FULLSCREEN_USER_SWITCHER); + } + static class TestableStatusBar extends StatusBar { public TestableStatusBar(StatusBarKeyguardViewManager man, UnlockMethodCache unlock, KeyguardIndicationController key, @@ -640,7 +667,16 @@ public class StatusBarTest extends SysuiTestCase { NotificationViewHierarchyManager viewHierarchyManager, TestableNotificationEntryManager entryManager, ScrimController scrimController, FingerprintUnlockController fingerprintUnlockController, - ActivityLaunchAnimator launchAnimator, KeyguardViewMediator keyguardViewMediator) { + ActivityLaunchAnimator launchAnimator, KeyguardViewMediator keyguardViewMediator, + NotificationRemoteInputManager notificationRemoteInputManager, + NotificationGroupManager notificationGroupManager, + FalsingManager falsingManager, + StatusBarWindowManager statusBarWindowManager, + NotificationIconAreaController notificationIconAreaController, + DozeScrimController dozeScrimController, + NotificationShelf notificationShelf, + NotificationLockscreenUserManager notificationLockscreenUserManager, + CommandQueue commandQueue) { mStatusBarKeyguardViewManager = man; mUnlockMethodCache = unlock; mKeyguardIndicationController = key; @@ -660,6 +696,15 @@ public class StatusBarTest extends SysuiTestCase { mActivityLaunchAnimator = launchAnimator; mKeyguardViewMediator = keyguardViewMediator; mClearAllEnabled = true; + mRemoteInputManager = notificationRemoteInputManager; + mGroupManager = notificationGroupManager; + mFalsingManager = falsingManager; + mStatusBarWindowManager = statusBarWindowManager; + mNotificationIconAreaController = notificationIconAreaController; + mDozeScrimController = dozeScrimController; + mNotificationShelf = notificationShelf; + mLockscreenUserManager = notificationLockscreenUserManager; + mCommandQueue = commandQueue; } private WakefulnessLifecycle createAwakeWakefulnessLifecycle() { diff --git a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java index 6b501af95097d462ee4c9060ec89b9d46bfc5a69..8e34685cceece66ec7d733615c962d2a961eae3a 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java +++ b/packages/SystemUI/tests/src/com/android/systemui/utils/leaks/FakeStatusBarIconController.java @@ -19,6 +19,9 @@ import android.testing.LeakCheck; import com.android.internal.statusbar.StatusBarIcon; import com.android.systemui.statusbar.phone.StatusBarIconController; import com.android.systemui.statusbar.phone.StatusBarIconController.IconManager; +import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.MobileIconState; +import com.android.systemui.statusbar.phone.StatusBarSignalPolicy.WifiIconState; +import java.util.List; public class FakeStatusBarIconController extends BaseLeakChecker implements StatusBarIconController { @@ -53,12 +56,23 @@ public class FakeStatusBarIconController extends BaseLeakChecker } @Override - public void setIconVisibility(String slotTty, boolean b) { + public void setSignalIcon(String slot, WifiIconState state) { + } + + @Override + public void setMobileIcons(String slot, List states) { + } + @Override + public void setIconVisibility(String slotTty, boolean b) { } @Override - public void removeIcon(String slot) { + public void removeIcon(String slot, int tag) { + } + @Override + public void removeAllIconsForSlot(String slot) { } + } diff --git a/packages/VpnDialogs/res/values-de/strings.xml b/packages/VpnDialogs/res/values-de/strings.xml index b1cebf84b77d5b4e3ed49dca734937de1abdc1f6..d901104759c48ecfc705630302aaa1071b117c97 100644 --- a/packages/VpnDialogs/res/values-de/strings.xml +++ b/packages/VpnDialogs/res/values-de/strings.xml @@ -17,7 +17,7 @@ "Verbindungsanfrage" - "%s möchte eine VPN-Verbindung herstellen, über die der Netzwerkverkehr überwacht werden kann. Lasse die Verbindung nur zu, wenn die App vertrauenswürdig ist. <br /> <br /> <img src=vpn_icon /> wird oben am Display angezeigt, wenn VPN aktiv ist." + "%s möchte eine VPN-Verbindung herstellen, über die der Netzwerkverkehr überwacht werden kann. Lass die Verbindung nur zu, wenn die App vertrauenswürdig ist. <br /> <br /> <img src=vpn_icon /> wird oben am Display angezeigt, wenn VPN aktiv ist." "VPN ist verbunden" "Sitzung:" "Dauer:" diff --git a/packages/VpnDialogs/res/values-in/strings.xml b/packages/VpnDialogs/res/values-in/strings.xml index 386c24a73a36161bdf973ff9021d6770716457af..18ef372a8cda0f79a7a121f05f271ab0e4ab7639 100644 --- a/packages/VpnDialogs/res/values-in/strings.xml +++ b/packages/VpnDialogs/res/values-in/strings.xml @@ -17,7 +17,7 @@ "Permintaan sambungan" - "%s ingin menyiapkan sambungan VPN yang memungkinkannya memantau lalu-lintas jaringan. Terima hanya jika Anda memercayai sumber. <br /> <br /> <img src=vpn_icon /> muncul di bagian atas layar Anda saat VPN aktif." + "%s ingin menyiapkan sambungan VPN yang memungkinkannya memantau traffic jaringan. Terima hanya jika Anda memercayai sumber. <br /> <br /> <img src=vpn_icon /> muncul di bagian atas layar Anda saat VPN aktif." "VPN tersambung" "Sesi:" "Durasi:" diff --git a/packages/VpnDialogs/res/values-ja/strings.xml b/packages/VpnDialogs/res/values-ja/strings.xml index 9dbf38bf6e7d317913497db27b1d8d6c36fb3f02..8480692e9dd36a7c935e22113b72b681421c757a 100644 --- a/packages/VpnDialogs/res/values-ja/strings.xml +++ b/packages/VpnDialogs/res/values-ja/strings.xml @@ -17,7 +17,7 @@ "接続リクエスト" - "%sがネットワークトラフィックを監視するためVPN接続をセットアップしようとしています。ソースを信頼できる場合にのみ許可してください。<br /> <br /> VPNがアクティブになると画面の上部に<img src=vpn_icon />が表示されます。" + "%s がネットワーク トラフィックを監視するため VPN 接続をセットアップしようとしています。信頼できるソースである場合にのみ許可してください。<br /> <br /> VPN がアクティブになると画面の上部に <img src=vpn_icon /> が表示されます。" "VPN接続済み" "セッション:" "期間:" diff --git a/packages/VpnDialogs/res/values-or/strings.xml b/packages/VpnDialogs/res/values-or/strings.xml index 93f56ba59a589a811923718b454d4d78938cf03e..f1122ebd438655cea386734e461670f6b3fe6ac1 100644 --- a/packages/VpnDialogs/res/values-or/strings.xml +++ b/packages/VpnDialogs/res/values-or/strings.xml @@ -24,20 +24,13 @@ "ପଠାଯାଇଛି:" "ପ୍ରାପ୍ତ ହୋଇଛି:" "%1$s ବାଇଟ୍ସ %2$s ପ୍ୟାକେଟ୍ସ" - - - - - - - - - - + "ସର୍ବଦା-ଅନ୍‍ ଥିବା VPN ସହ କନେକ୍ଟ କରିପାରିବ ନାହିଁ" + "%1$s ସବୁ ସମୟରେ କନେକ୍ଟ ହୋଇ ରହିବା ପାଇଁ ସେଟଅପ୍‍ କରାଯାଇଛି। ଆପଣଙ୍କ ଫୋନ୍‍, %1$s ସହ କନେକ୍ଟ ନହେବା ପର୍ଯ୍ୟନ୍ତ ଏକ ପବ୍ଲିକ୍‍ ନେଟ୍‌ୱର୍କ ବ୍ୟବହାର କରିବ।" + "%1$s ସବୁ ସମୟରେ କନେକ୍ଟ ହୋଇରହିବାକୁ ସେଟଅପ୍‍ କରାଯାଇଛି, କିନ୍ତୁ ଏହା ବର୍ତ୍ତମାନ କନେକ୍ଟ କରିପାରୁ ନାହିଁ। VPN ପୁଣି କନେକ୍ଟ ନହେବା ପର୍ଯ୍ୟନ୍ତ ଆପଣଙ୍କର କୌଣସି କନେକ୍ସନ୍‌ ରହିବନାହିଁ।" + " " + "VPN ସେଟିଙ୍ଗ ବଦଳାନ୍ତୁ" "କନଫିଗର୍‍ କରନ୍ତୁ" "ବିଚ୍ଛିନ୍ନ କରନ୍ତୁ" - - - - + "ଆପ୍‌ ଖୋଲନ୍ତୁ" + "ଖାରଜ କରନ୍ତୁ" diff --git a/packages/VpnDialogs/res/values-zh-rCN/strings.xml b/packages/VpnDialogs/res/values-zh-rCN/strings.xml index 0bd62ce0282e50f79838abaeeb42562203477c0d..734fa800de236a060360d9e8a527c00414f74d9a 100644 --- a/packages/VpnDialogs/res/values-zh-rCN/strings.xml +++ b/packages/VpnDialogs/res/values-zh-rCN/strings.xml @@ -17,7 +17,7 @@ "网络连接请求" - "%s想要设置一个 VPN 连接,以允许其监控网络流量。除非您信任该来源,否则请勿接受此请求。启用 VPN 时,您的屏幕顶部会显示 <img src=vpn_icon /> 图标。" + "%s 想要设置一个 VPN 连接,以允许其监控网络流量。除非您信任该来源,否则请勿接受此请求。启用 VPN 时,您的屏幕顶部会显示 <img src=vpn_icon /> 图标。" "已连接VPN" "会话:" "时长:" diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-am/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-am/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b6c4de109c08c47cda42c3d50b22ca7b2bb13c0b --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-am/strings.xml @@ -0,0 +1,21 @@ + + + + + "የማዕዘን ማሳያ ቅርጽ" + diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ar/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ar/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..9517eb2805e01b87521a001c6dbad1b0d7635e33 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ar/strings.xml @@ -0,0 +1,21 @@ + + + + + "صورة مقطوعة لشاشة جانبية" + diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-as/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-as/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..1ba9d7a082a95da624ef1656c010bbbf41c8ca44 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-as/strings.xml @@ -0,0 +1,21 @@ + + + + + "কৌণিক ডিছপ্লে কাটআউট" + diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-b+sr+Latn/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-b+sr+Latn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..41dfd3adb3661b262c3d965022bd684109237314 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-b+sr+Latn/strings.xml @@ -0,0 +1,21 @@ + + + + + "Izrezana slika u uglu ekrana" + diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-cs/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-cs/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..fd439957136bff024156075d940016616926e0ec --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-cs/strings.xml @@ -0,0 +1,21 @@ + + + + + "Rohový výřez displeje" + diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fa/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fa/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..bfbaa5c379ca411bfb0578df115539fcc2fb74da --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fa/strings.xml @@ -0,0 +1,21 @@ + + + + + "نمایشگر با گوشه‌های بریده" + diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fr-rCA/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fr-rCA/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4110d51866590df44573484126f8599e7dd5e8a8 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-fr-rCA/strings.xml @@ -0,0 +1,21 @@ + + + + + "Découpe d\'écran en coin" + diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hy/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hy/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..656ae24ad5895f7ea4d5f9a2d814fca70c36c1e5 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-hy/strings.xml @@ -0,0 +1,21 @@ + + + + + "Էկրանի անկյունի կտրվածք" + diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-is/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-is/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..755360f64c73183a93a82007743d75090ed3322a --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-is/strings.xml @@ -0,0 +1,21 @@ + + + + + "Hornskjáskurður" + diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-iw/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-iw/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..bfb4797a7dd8e72d9c0c133e9ab6e4faec68ce51 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-iw/strings.xml @@ -0,0 +1,21 @@ + + + + + "חיתוך פינות התצוגה" + diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lt/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lt/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e4b01ba900e484fa6796a5f24c6fded6ca3d81ef --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lt/strings.xml @@ -0,0 +1,21 @@ + + + + + "Kampinė ekrano išpjova" + diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lv/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lv/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3087b637f1bdb857e8aa8701c7621275c6e715fd --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-lv/strings.xml @@ -0,0 +1,21 @@ + + + + + "Stūra ekrāna izgriezums" + diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-or/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..620d36faf4873fcd27f9fd0b618968a981369080 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-or/strings.xml @@ -0,0 +1,21 @@ + + + + + "କର୍ନର୍ ଡିସ୍‌ପ୍ଲେ କଟଆଉଟ୍" + diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ru/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ru/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..fa8fefb513606d1d988c42e8fedb471a9c69c7de --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-ru/strings.xml @@ -0,0 +1,21 @@ + + + + + "Сделать вырез в углу экрана" + diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sr/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4c5701a3e03862109a9fd328d28d403adaaf964d --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-sr/strings.xml @@ -0,0 +1,21 @@ + + + + + "Изрезана слика у углу екрана" + diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-tl/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-tl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3d4552e8664c8ab910072dd543caa74237d4ce8a --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-tl/strings.xml @@ -0,0 +1,21 @@ + + + + + "Display cutout sa sulok" + diff --git a/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zh-rCN/strings.xml b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4cb357bbf15c6cb28b16e40ddb6e9dccf63a5712 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationCornerOverlay/res/values-zh-rCN/strings.xml @@ -0,0 +1,21 @@ + + + + + "边角显示屏凹口" + diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-as/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-as/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0b93c40e2969ba951337c476bcbf0b706dee991f --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-as/strings.xml @@ -0,0 +1,21 @@ + + + + + "দ্বৈত ডিছপ্লে কাটআউট" + diff --git a/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-or/strings.xml b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..1a5d8010b80701e89b4fcf5b5573b8a22c69dd42 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationDoubleOverlay/res/values-or/strings.xml @@ -0,0 +1,21 @@ + + + + + "ଡବଲ୍ ଡିସ୍‌ପ୍ଲେ କଟଆଉଟ୍" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-af/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-af/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..98b43037aed9504bab3e4f9939135b89a96d6a0d --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-af/strings.xml @@ -0,0 +1,23 @@ + + + + + "Uitsnede vir smal vertoonskerm" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-am/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-am/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..2fc0dbe0a38167ac039d81070fb10a704415a221 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-am/strings.xml @@ -0,0 +1,23 @@ + + + + + "የጠባብ ማሳያ ቅርጽ" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ar/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ar/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..aae2adafa27efe372650e3d707d6798cc59132cc --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ar/strings.xml @@ -0,0 +1,23 @@ + + + + + "صورة مقطوعة لشاشة ضيقة" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-as/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-as/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..181bcbf82ec8e9240fb186f6b2a9bba69799f3f4 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-as/strings.xml @@ -0,0 +1,23 @@ + + + + + "ঠেক ডিছপ্লে কাটআউট" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-az/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-az/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5b856b3d4ae22c604c15d759446f5ede527b004 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-az/strings.xml @@ -0,0 +1,23 @@ + + + + + "Dar ekran profili" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-b+sr+Latn/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-b+sr+Latn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0a9aaafa3b14d01e03efba240b4413b3629d0b7e --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-b+sr+Latn/strings.xml @@ -0,0 +1,23 @@ + + + + + "Izrezana slika za uske ekrane" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-be/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-be/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..189f1ccdc290dd24827015db49a7a7f0c30eda8e --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-be/strings.xml @@ -0,0 +1,23 @@ + + + + + "Зрабіць выраз на экране больш вузкім" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bg/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bg/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..d2367101729c1c0f26025e5cb50988a9bfb48acd --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bg/strings.xml @@ -0,0 +1,23 @@ + + + + + "Тесен прорез на екрана" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bn/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..301d686cae1ab17e7147b4c985587ef36f6df35b --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bn/strings.xml @@ -0,0 +1,23 @@ + + + + + "ন্যারো ডিসপ্লে কাট-আউট" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bs/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bs/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..8ceaac5787a4526688a562a9c6243b7292170250 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-bs/strings.xml @@ -0,0 +1,23 @@ + + + + + "Uski urez ekrana" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ca/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ca/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ab9061e620571717444cdac6739f997547a87b78 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ca/strings.xml @@ -0,0 +1,23 @@ + + + + + "Retall de pantalla estret" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-cs/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-cs/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..440a2f08740dc4735becc3b7ac4e2c5002ceea80 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-cs/strings.xml @@ -0,0 +1,23 @@ + + + + + "Úzký výřez displeje" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-da/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-da/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4372d56b420ecb094368c1a8109dcbb8d8f5b158 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-da/strings.xml @@ -0,0 +1,23 @@ + + + + + "Smal udskæring på skærmen" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-de/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-de/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..a92a24a72e47c1818402289bc6a4c78caedf5d3b --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-de/strings.xml @@ -0,0 +1,23 @@ + + + + + "Schmaler Display-Ausschnitt" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-el/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-el/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..69adde331ec8ebe05aed648626d0f35d95996861 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-el/strings.xml @@ -0,0 +1,23 @@ + + + + + "Διακοπή στενής οθόνης" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rAU/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rAU/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..bf2624ffaa052a2f613234a46521debe8d6528f9 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rAU/strings.xml @@ -0,0 +1,23 @@ + + + + + "Narrow display cutout" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rCA/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rCA/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..bf2624ffaa052a2f613234a46521debe8d6528f9 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rCA/strings.xml @@ -0,0 +1,23 @@ + + + + + "Narrow display cutout" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rGB/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rGB/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..bf2624ffaa052a2f613234a46521debe8d6528f9 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rGB/strings.xml @@ -0,0 +1,23 @@ + + + + + "Narrow display cutout" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rIN/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rIN/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..bf2624ffaa052a2f613234a46521debe8d6528f9 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rIN/strings.xml @@ -0,0 +1,23 @@ + + + + + "Narrow display cutout" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rXC/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rXC/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..7ba124fbd100a15145a174b3c1ad23e57556b972 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-en-rXC/strings.xml @@ -0,0 +1,23 @@ + + + + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‎‎‎‎‏‎‏‏‏‎‏‎‎‏‎‏‏‏‎‎‏‎‏‎‏‎‏‏‏‏‏‎‏‏‎Narrow display cutout‎‏‎‎‏‎" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-es-rUS/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-es-rUS/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f1d3348f690d09fb7d892f39791c680407c743e6 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-es-rUS/strings.xml @@ -0,0 +1,23 @@ + + + + + "Recorte de pantalla estrecho" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-es/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-es/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..a17a32c9d735b1289c02ccc7122ad4bf870d6607 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-es/strings.xml @@ -0,0 +1,23 @@ + + + + + "Recorte estrecho de la pantalla" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-et/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-et/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..367b2219ab2f84c047cb47c0b6e72a53a4281196 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-et/strings.xml @@ -0,0 +1,23 @@ + + + + + "Kitsas ekraani väljalõige" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-eu/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-eu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0fd9d9bfc237e1661750774f0898d4eebb921811 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-eu/strings.xml @@ -0,0 +1,23 @@ + + + + + "Pantailaren mozketa estua" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fa/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fa/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..43bfb2e8f76e39a69c0ff03e387a0a9e6f3bbb0b --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fa/strings.xml @@ -0,0 +1,23 @@ + + + + + "نمایشگری با لبه باریک" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fi/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fi/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..540fbaebe795e6d644af1fd4c00c3f3cf6f989c3 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fi/strings.xml @@ -0,0 +1,23 @@ + + + + + "Kapea aukko näytössä" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fr-rCA/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fr-rCA/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..d78f8b89d9ec50cdb112b723b7a50bd56e30ed8a --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fr-rCA/strings.xml @@ -0,0 +1,23 @@ + + + + + "Découpe d\'affichage étroit" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fr/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4ee1b4f575763f4ca5256ef3097e868e3b9fc39b --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-fr/strings.xml @@ -0,0 +1,23 @@ + + + + + "Encoche pour écran étroit" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-gl/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-gl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..9d01afddd3f5fd14d72ceb523ef782c301e08fdb --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-gl/strings.xml @@ -0,0 +1,23 @@ + + + + + "Recorte de pantalla estreito" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-gu/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-gu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..7d9987e81576dc160e76cedafd9e2f03904f621a --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-gu/strings.xml @@ -0,0 +1,23 @@ + + + + + "સાંકડું ડિસ્પ્લે કટઆઉટ" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hi/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hi/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..32d61396adfdfc63137c48f06372c9c9dc90fd3b --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hi/strings.xml @@ -0,0 +1,23 @@ + + + + + "कम जगह वाला डिसप्ले कटआउट" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hr/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..00eca5bf135e02141cbeab595baed2707bf52a20 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hr/strings.xml @@ -0,0 +1,23 @@ + + + + + "Obrezana slika za uske zaslone" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hu/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..bfd29448d0b6a06b8360bcb2bb504dc154e9c1f7 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hu/strings.xml @@ -0,0 +1,23 @@ + + + + + "Keskeny képernyőkivágás" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hy/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hy/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..2afecc87999990b47fb331b9bc4b2dc5abc8430c --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-hy/strings.xml @@ -0,0 +1,23 @@ + + + + + "Էկրանի նեղ կտրվածք" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-in/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-in/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..7728ab637a23b06ee0000135b7e7b3898120ca3a --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-in/strings.xml @@ -0,0 +1,23 @@ + + + + + "Potongan tampilan sempit" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-is/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-is/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3d86080c88c6a829bd8cde918146137c1af89c77 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-is/strings.xml @@ -0,0 +1,23 @@ + + + + + "Mjór skjáskurður" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-it/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-it/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..419c12be06ff474361907a0541aa93a410cb42d3 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-it/strings.xml @@ -0,0 +1,23 @@ + + + + + "Ritaglio display stretto" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-iw/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-iw/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ffde4930e79bcf248430c67922634b73f8bf0379 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-iw/strings.xml @@ -0,0 +1,23 @@ + + + + + "חיתוך תצוגה צר" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ja/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ja/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..2b6a89754029fc0a104a787d9bf2ec3f2a4b55a5 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ja/strings.xml @@ -0,0 +1,23 @@ + + + + + "幅狭のディスプレイ カットアウト" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ka/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ka/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e52a32f633213f091c2ec64c203fe248a24fe73e --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ka/strings.xml @@ -0,0 +1,23 @@ + + + + + "ეკრანის ვიწრო ამოჭრა" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-kk/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-kk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ee0d72deac2dd43f198a7cbf5e99d39eb9ffc8a9 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-kk/strings.xml @@ -0,0 +1,23 @@ + + + + + "Жіңішке экран ойығы" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-km/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-km/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c1faaa3c0084edb1ab08fffee498084de51f6c72 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-km/strings.xml @@ -0,0 +1,23 @@ + + + + + "ស្នាមចោះ​ផ្ទាំងអេក្រង់​តូច" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-kn/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-kn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b356b314cbc87170ef240cb1947336a4b12979b2 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-kn/strings.xml @@ -0,0 +1,23 @@ + + + + + "ಕಿರಿದಾದ ಪ್ರದರ್ಶನ ಕಟೌಟ್" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ko/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ko/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..7175d5265c444a846582337cbc80b74eacb1df94 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ko/strings.xml @@ -0,0 +1,23 @@ + + + + + "좁은 디스플레이 컷아웃" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ky/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ky/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..97308ca56bc51b575a979187bbf5477fbe82265a --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ky/strings.xml @@ -0,0 +1,23 @@ + + + + + "Ичке дисплей кесиндиси" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lo/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lo/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..6a0251bc75fef8d3246bfe2c44ef563884b9ac88 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lo/strings.xml @@ -0,0 +1,23 @@ + + + + + "ກ່ອງຂໍ້ຄວາມສະແດງຜົນແບບແຄບ" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lt/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lt/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..cb8a54b66ba48c0b4f0df3a1b29e01b84622fb5c --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lt/strings.xml @@ -0,0 +1,23 @@ + + + + + "Siaura ekrano išpjova" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lv/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lv/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c87bc3f903c629f21c08e0c5379c4aa4a997c607 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-lv/strings.xml @@ -0,0 +1,23 @@ + + + + + "Šaurs ekrāna izgriezums" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mk/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..dd93e83691b13b4cce76e35549eb5b9f7ca74475 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mk/strings.xml @@ -0,0 +1,23 @@ + + + + + "Тесен исечок на екранот" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ml/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ml/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3e12f0542a00759b69ae98ba745ac310a80c2bbe --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ml/strings.xml @@ -0,0 +1,23 @@ + + + + + "ഇടുങ്ങിയ ഡി‌സ്‌പ്ലേ കട്ടൗട്ട്" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mn/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..087ed4ab83224af7efcc23ab17b1f6c4f6a020e2 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mn/strings.xml @@ -0,0 +1,23 @@ + + + + + "Дэлгэцийг нарийн болгож таслах" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mr/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..14a35da85a85703b49e94a284107f9e739363a6b --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-mr/strings.xml @@ -0,0 +1,23 @@ + + + + + "अरुंद डिस्प्ले कटआउट" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ms/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ms/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..20edbd7be03f6ff1fd5d66c4d4496e53c2a1ee43 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ms/strings.xml @@ -0,0 +1,23 @@ + + + + + "Potongan paparan sempit" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-my/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-my/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4f84f2c7d062561b8fcd6a545b73acfd1163178e --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-my/strings.xml @@ -0,0 +1,23 @@ + + + + + "ကျဉ်းမြောင်းသည့် မျက်နှာပြင် ဖြတ်ညှပ်ပြသမှု" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-nb/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-nb/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..300e988d20db525ae8a3e0ebd9163f05d7c8246e --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-nb/strings.xml @@ -0,0 +1,23 @@ + + + + + "Smalt skjermutklipp" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ne/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ne/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..902741411f4b08930f5e6331a0677e52247598d9 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ne/strings.xml @@ -0,0 +1,23 @@ + + + + + "साँघुरो प्रदर्शनसम्बन्धी कटआउट" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-nl/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-nl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b6f7f02c85858fb0fcb79089aa5b7d5fb6bce12f --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-nl/strings.xml @@ -0,0 +1,23 @@ + + + + + "Smalle display-cutout" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-or/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..031edf0e9c6ed07f7afc26d613a50b4535f6b894 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-or/strings.xml @@ -0,0 +1,23 @@ + + + + + "ସଙ୍କୀର୍ଣ୍ଣ ଡିସ୍‌ପ୍ଲେ କଟଆଉଟ୍" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pa/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pa/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ddc0b11f1156be4a4b11fca587e62c7333cb1cb8 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pa/strings.xml @@ -0,0 +1,23 @@ + + + + + "ਤੰਗ ਡਿਸਪਲੇ ਕੱਟਆਊਟ" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pl/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f3261de22125261a38b86d3c4e67aa9094417c61 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pl/strings.xml @@ -0,0 +1,23 @@ + + + + + "Wąskie wycięcie wyświetlacza" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt-rBR/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt-rBR/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3af25e85e70a5f5655f11a15415758de5fe0bc30 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt-rBR/strings.xml @@ -0,0 +1,23 @@ + + + + + "Corte da tela estreito" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt-rPT/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..257c974024db67f18c26cc86468178bf1af74efc --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt-rPT/strings.xml @@ -0,0 +1,23 @@ + + + + + "Ecrã estreito com recorte" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3af25e85e70a5f5655f11a15415758de5fe0bc30 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-pt/strings.xml @@ -0,0 +1,23 @@ + + + + + "Corte da tela estreito" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ro/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ro/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..26d544842f43158fd881821e18c212fbfd0c555e --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ro/strings.xml @@ -0,0 +1,23 @@ + + + + + "Decupare ecran îngustă" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ru/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ru/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0b8693c4374c2961363c28326e1324d83bec31e0 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ru/strings.xml @@ -0,0 +1,23 @@ + + + + + "Сделать вырез на экране уже" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-si/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-si/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0f4a8ff440cc6f00f2daf474828f9cb2a1d382be --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-si/strings.xml @@ -0,0 +1,23 @@ + + + + + "පටු සංදර්ශක කටවුට්" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sk/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4cda8d5aef20a69ed7cf58608bc7fcacae511d96 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sk/strings.xml @@ -0,0 +1,23 @@ + + + + + "Úzky výrez obrazovky" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sl/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..290df41cdaafe3746ce62db64cf9b478429ca19d --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sl/strings.xml @@ -0,0 +1,23 @@ + + + + + "Ozek izrez prikaza" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sq/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sq/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..be0a1e4ba184985013a2c85187b79038b54be0ee --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sq/strings.xml @@ -0,0 +1,23 @@ + + + + + "Prerje e ngushtë ekrani" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sr/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..d0710ac61c5d941e50ce14087280cb592ce91c93 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sr/strings.xml @@ -0,0 +1,23 @@ + + + + + "Изрезана слика за уске екране" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sv/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sv/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f8c4bc33b3abf94bc007dc550ad53f1d6fca41a3 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sv/strings.xml @@ -0,0 +1,23 @@ + + + + + "Smalt urklipp av skärm" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sw/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sw/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..1aa301434c61e089e89c15a41b055428d903ead2 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-sw/strings.xml @@ -0,0 +1,23 @@ + + + + + "Mwonekeno wenye pengo jembamba" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ta/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ta/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..8481f2914577cece5f49b062a08f272171f51db6 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ta/strings.xml @@ -0,0 +1,23 @@ + + + + + "குறுகிய கட்அவுட் காட்சி" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-te/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-te/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4e71bac95e3972b718341b1163a290884439897f --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-te/strings.xml @@ -0,0 +1,23 @@ + + + + + "సన్నని డిస్‌ప్లే కట్అవుట్‌" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-th/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-th/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4989e86e161cbbb15f130230252a160620a71970 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-th/strings.xml @@ -0,0 +1,23 @@ + + + + + "คัตเอาท์ดิสเพลย์แบบแคบ" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-tl/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-tl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3c88b3f570e92fde061ab9f4553821d199f7e55b --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-tl/strings.xml @@ -0,0 +1,23 @@ + + + + + "Manipis na display cutout" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-tr/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-tr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..d84b758717849c49b5375450779d5f080be9150e --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-tr/strings.xml @@ -0,0 +1,23 @@ + + + + + "Dar ekran kesimi" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-uk/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-uk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b5109dee013b36e14d2125c07b629af4464b36f0 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-uk/strings.xml @@ -0,0 +1,23 @@ + + + + + "Відключення вузького дисплея" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ur/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ur/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..5dba37206699dd8099b751046e1cba635a587b85 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-ur/strings.xml @@ -0,0 +1,23 @@ + + + + + "تنگ ڈسپلے کٹ آؤٹ" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-uz/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-uz/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..64bf6296bee6a7a2a397102265400b5889e95c4d --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-uz/strings.xml @@ -0,0 +1,23 @@ + + + + + "Ekrandagi kesimni qisqartirish" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-vi/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-vi/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0cf0602b438811d7ba073b3d4652c2f1d2ea45e3 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-vi/strings.xml @@ -0,0 +1,23 @@ + + + + + "Cắt hiển thị hẹp" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zh-rCN/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..211ea2fc1ad02edd376619622227311dff905b48 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zh-rCN/strings.xml @@ -0,0 +1,23 @@ + + + + + "窄型显示屏凹口" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zh-rHK/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zh-rHK/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c1878135b2e81a7265e1fc09356e669376c41728 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zh-rHK/strings.xml @@ -0,0 +1,23 @@ + + + + + "幼身顯示屏凹口" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zh-rTW/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zh-rTW/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..5799fed07bfe0b83ddc2a6bd83f2fd45716e61f4 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zh-rTW/strings.xml @@ -0,0 +1,23 @@ + + + + + "窄型螢幕凹口" + diff --git a/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zu/strings.xml b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..785ec6f0c95825bfe285cb968d8638e1ea3c33e9 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationNarrowOverlay/res/values-zu/strings.xml @@ -0,0 +1,23 @@ + + + + + "Ukusikwa kwesiboniso esimcingo" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-af/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-af/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e5613298f63fd4148c38e5800004f4163fde5222 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-af/strings.xml @@ -0,0 +1,21 @@ + + + + + "Uitsnede vir lang vertoonskerm" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-am/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-am/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..16a82a1ca90e7cc0de6afc16259709eb0b61fd32 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-am/strings.xml @@ -0,0 +1,21 @@ + + + + + "የረጅም ማሳያ ቅርጽ" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ar/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ar/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..06cab99b43464b420387f14501d49335ff0e202f --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ar/strings.xml @@ -0,0 +1,21 @@ + + + + + "صورة مقطوعة لشاشة طويلة" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-as/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-as/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..6adad3ddc25b5c4202666db9bfb187cbe2113855 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-as/strings.xml @@ -0,0 +1,21 @@ + + + + + "ওখ ডিছপ্লে কাটআউট" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-az/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-az/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..a14afc4805c8b773fb9415b50882cbc0b1886461 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-az/strings.xml @@ -0,0 +1,21 @@ + + + + + "Uzun ekran profili" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-b+sr+Latn/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-b+sr+Latn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..2212e820cb5a7a84ad45fb88fa5caa0519da1c59 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-b+sr+Latn/strings.xml @@ -0,0 +1,21 @@ + + + + + "Izrezana slika za visoke ekrane" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-be/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-be/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..53bb4874723bfee0e7b1c101f0595357bec85e9e --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-be/strings.xml @@ -0,0 +1,21 @@ + + + + + "Зрабіць выраз на экране больш высокім" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bg/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bg/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..a33cc3988827c00268de178c4871860efbf15c33 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bg/strings.xml @@ -0,0 +1,21 @@ + + + + + "Голям прорез на екрана" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bn/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..851376167b5ad930295fac11c6b9a0e872a5b441 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bn/strings.xml @@ -0,0 +1,21 @@ + + + + + "টল ডিসপ্লে কাট-আউট" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bs/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bs/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4f0ed6182f3694ded1b70f9456f3e0c79ea93368 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-bs/strings.xml @@ -0,0 +1,21 @@ + + + + + "Dugačak urez ekrana" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ca/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ca/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..d264e3426899fc41a55b2c3928629de9b4c9160c --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ca/strings.xml @@ -0,0 +1,21 @@ + + + + + "Retall de pantalla alt" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-cs/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-cs/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..fa5ceeebd608b994e91a711435bcc0885cc192a8 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-cs/strings.xml @@ -0,0 +1,21 @@ + + + + + "Vysoký výřez displeje" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-da/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-da/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..75e2d5d54a6850c4df51c7dd2f8ab8b9762033ae --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-da/strings.xml @@ -0,0 +1,21 @@ + + + + + "Stor udskæring på skærmen" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-de/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-de/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..6c65b16840e6832cbc5abdf4ee0a964523951c52 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-de/strings.xml @@ -0,0 +1,21 @@ + + + + + "Hoher Display-Ausschnitt" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-el/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-el/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..1167237b8f7655b7a08c95d8bb6a3fb462e140e6 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-el/strings.xml @@ -0,0 +1,21 @@ + + + + + "Διακοπή ψηλής οθόνης" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rAU/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rAU/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3a41cbe0091e7d28903fb2ed4cad5a9f2252a109 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rAU/strings.xml @@ -0,0 +1,21 @@ + + + + + "Tall display cutout" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rCA/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rCA/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3a41cbe0091e7d28903fb2ed4cad5a9f2252a109 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rCA/strings.xml @@ -0,0 +1,21 @@ + + + + + "Tall display cutout" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rGB/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rGB/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3a41cbe0091e7d28903fb2ed4cad5a9f2252a109 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rGB/strings.xml @@ -0,0 +1,21 @@ + + + + + "Tall display cutout" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rIN/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rIN/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3a41cbe0091e7d28903fb2ed4cad5a9f2252a109 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rIN/strings.xml @@ -0,0 +1,21 @@ + + + + + "Tall display cutout" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rXC/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rXC/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..db56bac9285389cec47617426cce900bc2349696 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-en-rXC/strings.xml @@ -0,0 +1,21 @@ + + + + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‏‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‎‏‏‏‏‎‎‏‎‎‏‏‎‏‏‎‎‏‏‎‏‏‎‎‏‎‎‎‎‏‎Tall display cutout‎‏‎‎‏‎" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-es-rUS/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-es-rUS/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3223601c47359dda5308319def25a0168b13dcb5 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-es-rUS/strings.xml @@ -0,0 +1,21 @@ + + + + + "Recorte de pantalla alto" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-es/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-es/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..1a73f18ed0da2dcf741042d471a20605bff87435 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-es/strings.xml @@ -0,0 +1,21 @@ + + + + + "Recorte alto de la pantalla" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-et/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-et/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ec8406993097bc3092ecf2f5e717c1901944801b --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-et/strings.xml @@ -0,0 +1,21 @@ + + + + + "Pikk ekraani väljalõige" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-eu/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-eu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..7445925ed53106550a1104503efd57cdcb33f307 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-eu/strings.xml @@ -0,0 +1,21 @@ + + + + + "Pantailaren mozketa altua" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fa/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fa/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..57990e86d1594e7522ee1275226ae93c8c9b7142 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fa/strings.xml @@ -0,0 +1,21 @@ + + + + + "نمایشگر با لبه بلند" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fi/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fi/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4add28046fd0336a57394a316809c9fa62056a16 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fi/strings.xml @@ -0,0 +1,21 @@ + + + + + "Korkea aukko näytössä" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fr-rCA/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fr-rCA/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..cf15b145c44645edef36962183c7d22fda3029a8 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fr-rCA/strings.xml @@ -0,0 +1,21 @@ + + + + + "Découpe d\'affichage haut" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fr/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5db3289fbb2b1c793fafe01262f025419cdb17a --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-fr/strings.xml @@ -0,0 +1,21 @@ + + + + + "Encoche pour écran haut" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-gl/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-gl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3223601c47359dda5308319def25a0168b13dcb5 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-gl/strings.xml @@ -0,0 +1,21 @@ + + + + + "Recorte de pantalla alto" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-gu/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-gu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..a9a1f4a0951cda6b44210d26b2e806c0b3616478 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-gu/strings.xml @@ -0,0 +1,21 @@ + + + + + "ઊંચું ડિસ્પ્લે કટઆઉટ" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hi/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hi/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..dbd3e84f8b13be56476a12086cf83be4eed179d6 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hi/strings.xml @@ -0,0 +1,21 @@ + + + + + "लंबा डिसप्ले कटआउट" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hr/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..34082f8b610add7cdd19aaab1beeaf9c8aa9716d --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hr/strings.xml @@ -0,0 +1,21 @@ + + + + + "Obrezana slika za visoke zaslone" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hu/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..7b871c560e1c58c5fbf30ba78523bb6f199fc323 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hu/strings.xml @@ -0,0 +1,21 @@ + + + + + "Magas képernyőkivágás" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hy/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hy/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ebff54c6a5f7e037f734af38773954aeb83f7fe1 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-hy/strings.xml @@ -0,0 +1,21 @@ + + + + + "Էկրանի բարձր կտրվածք" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-in/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-in/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..9740135a1e64d088b386c5d296a2f57525be0193 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-in/strings.xml @@ -0,0 +1,21 @@ + + + + + "Potongan tampilan tinggi" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-is/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-is/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f039cb9e63dc533b1ed5284c47387dd08169fc90 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-is/strings.xml @@ -0,0 +1,21 @@ + + + + + "Hár skjáskurður" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-it/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-it/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..af09afd69cf17de45a2ec9506e8fcac916e61fc0 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-it/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ritaglio display alto" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-iw/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-iw/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..faf3630ba29ed07327537466cb27a18cbfcbfed0 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-iw/strings.xml @@ -0,0 +1,21 @@ + + + + + "חיתוך תצוגה גבוה" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ja/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ja/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..86974bc82403cc1841c1e5eae11df31779999dff --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ja/strings.xml @@ -0,0 +1,21 @@ + + + + + "縦長のディスプレイ カットアウト" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ka/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ka/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f84faba73da9bb1d92be6365a229437fbc88cde7 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ka/strings.xml @@ -0,0 +1,21 @@ + + + + + "ეკრანის მაღალი ამოჭრა" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-kk/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-kk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..8747ff0628474fbd8c6821862e7279d42f05d161 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-kk/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ұзын экран ойығы" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-km/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-km/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..1741d586cf48ba42b7457634aeca804a239da95c --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-km/strings.xml @@ -0,0 +1,21 @@ + + + + + "ស្នាមចោះ​ផ្ទាំងអេក្រង់​ជ្រៅ" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-kn/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-kn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ce1beb424831350095467203c5c0ba218b79682a --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-kn/strings.xml @@ -0,0 +1,21 @@ + + + + + "ಎತ್ತರದ ಪ್ರದರ್ಶನ ಕಟೌಟ್" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ko/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ko/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c91015c6d95171428c5de3735f6ca71be3288251 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ko/strings.xml @@ -0,0 +1,21 @@ + + + + + "세로로 긴 디스플레이 컷아웃" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ky/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ky/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0fbf92032bd07531e6fed0783fb90a4a54b42c2d --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ky/strings.xml @@ -0,0 +1,21 @@ + + + + + "Узун дисплей кесиндиси" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lo/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lo/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f5ed0a8490ddddb5dc72c735c0a27fb5ac9a6abd --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lo/strings.xml @@ -0,0 +1,21 @@ + + + + + "ກ່ອງຂໍ້ຄວາມສະແດງຜົນແບບສູງ" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lt/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lt/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..9afa5bd8161f2a2c3cb18d5c84d444543f6aed87 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lt/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ilga ekrano išpjova" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lv/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lv/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ec80989df85541c02bc243790dd160f97cc7858f --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-lv/strings.xml @@ -0,0 +1,21 @@ + + + + + "Augsts ekrāna izgriezums" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mk/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b58b8ffefe33da4d3fd0b32c8575d11a2a7719ae --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mk/strings.xml @@ -0,0 +1,21 @@ + + + + + "Висок исечок на екранот" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ml/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ml/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..561ac16cdcd5e472aee5b36e92b5106e30e9e0fb --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ml/strings.xml @@ -0,0 +1,21 @@ + + + + + "ഉയരമുളള ഡി‌സ്‌പ്ലേ കട്ടൗട്ട്" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mn/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f45a11ca8e7481c4293f9d911b3ee6d1a777379b --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mn/strings.xml @@ -0,0 +1,21 @@ + + + + + "Дэлгэцийг өндөр болгож таслах" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mr/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..6f19f2780f1838da2f18a7cbe8a1de404f6d7914 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-mr/strings.xml @@ -0,0 +1,21 @@ + + + + + "उंच डिस्प्ले कटआउट" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ms/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ms/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..1847595c25bf4817ae175f44dc516779296d7916 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ms/strings.xml @@ -0,0 +1,21 @@ + + + + + "Potongan paparan tinggi" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-my/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-my/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..353d766cc518d8ec35c2bd11cf11fb297575c06c --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-my/strings.xml @@ -0,0 +1,21 @@ + + + + + "ရှည်လျားသည့် မျက်နှာပြင် ဖြတ်ညှပ်ပြသမှု" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-nb/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-nb/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ab1c4c690b269e41c6232e727b297ac6680d0a1d --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-nb/strings.xml @@ -0,0 +1,21 @@ + + + + + "Høyt skjermutklipp" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ne/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ne/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c969172d6dfa6eb70e52ee86735a0c78848a8800 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ne/strings.xml @@ -0,0 +1,21 @@ + + + + + "अग्लो प्रदर्शनसम्बन्धी कटआउट" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-nl/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-nl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..d7db4a9eba039f9b4fe2aec7e77d3e4265b86748 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-nl/strings.xml @@ -0,0 +1,21 @@ + + + + + "Grote display-cutout" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-or/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..2aba08b4fc85ab5d32cd26401f9dc6276d45e98c --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-or/strings.xml @@ -0,0 +1,21 @@ + + + + + "ଉଚ୍ଚ ଡିସ୍‌ପ୍ଲେ କଟଆଉଟ୍" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pa/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pa/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b10a5d06a28e56e1be2cea5e6927a3aae6cc53f5 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pa/strings.xml @@ -0,0 +1,21 @@ + + + + + "ਲੰਮਾ ਡਿਸਪਲੇ ਕੱਟਆਊਟ" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pl/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..561947ede8d26cc911203fca7ff61b0718e349a1 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pl/strings.xml @@ -0,0 +1,21 @@ + + + + + "Wysokie wycięcie wyświetlacza" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt-rBR/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt-rBR/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..893dd760255aa4941a1c9559110bb6e0238857c6 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt-rBR/strings.xml @@ -0,0 +1,21 @@ + + + + + "Corte da tela alto" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt-rPT/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..817dfec41562d8a5ada9860e57843793c6bfe415 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt-rPT/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ecrã grande com recorte" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..893dd760255aa4941a1c9559110bb6e0238857c6 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-pt/strings.xml @@ -0,0 +1,21 @@ + + + + + "Corte da tela alto" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ro/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ro/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..32d771c9060d6aa50321f68f3d424f26a594d9aa --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ro/strings.xml @@ -0,0 +1,21 @@ + + + + + "Decupare ecran înaltă" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ru/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ru/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ef1a690e363ab0d1a0d9c8c98f8165f5950d328c --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ru/strings.xml @@ -0,0 +1,21 @@ + + + + + "Сделать вырез на экране выше" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-si/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-si/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..6d34b5bd9808901ae9570c005f5cc790f65b04cd --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-si/strings.xml @@ -0,0 +1,21 @@ + + + + + "උස සංදර්ශක කටවුට්" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sk/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..553e08d3cc56a7e554b312fe32887186b69fe94e --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sk/strings.xml @@ -0,0 +1,21 @@ + + + + + "Vysoký výrez obrazovky" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sl/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..9ad38ca25153021eb028384a3dc2fa473c28bd9a --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sl/strings.xml @@ -0,0 +1,21 @@ + + + + + "Visok izrez prikaza" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sq/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sq/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ab6fd63f132c4c1b86bc42a201ebe01049f4dd16 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sq/strings.xml @@ -0,0 +1,21 @@ + + + + + "Prerje e lartë ekrani" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sr/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4f457f6d55f3e7608d0bf1e1b4215c6141a496d7 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sr/strings.xml @@ -0,0 +1,21 @@ + + + + + "Изрезана слика за високе екране" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sv/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sv/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..d0be3c3982cecbae63646885d1d808e82fa0c9ba --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sv/strings.xml @@ -0,0 +1,21 @@ + + + + + "Avlångt urklipp av skärm" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sw/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sw/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..463a703a87f8dae03d9c49fd9a3505f7cc67494f --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-sw/strings.xml @@ -0,0 +1,21 @@ + + + + + "Mwonekeno wenye pengo ndefu" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ta/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ta/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..d7ccc7836a30c471a57cbc89fdeb2f549c7f5306 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ta/strings.xml @@ -0,0 +1,21 @@ + + + + + "உயரமான கட்அவுட் காட்சி" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-te/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-te/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..7de7e934c8e8e5be7d9fbb4d7761c537d5256ef5 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-te/strings.xml @@ -0,0 +1,21 @@ + + + + + "పొడవైన డిస్‌ప్లే కట్అవుట్‌" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-th/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-th/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ad6256ed01bebb6fe0acc6e67f8c776d90b9ab25 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-th/strings.xml @@ -0,0 +1,21 @@ + + + + + "คัตเอาท์ดิสเพลย์แบบสูง" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-tl/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-tl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e9568bec03447990a791a305fbc837d3c5f345fc --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-tl/strings.xml @@ -0,0 +1,21 @@ + + + + + "Mataas na display cutout" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-tr/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-tr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..1e75a40ac53e7843a7ff01e5f7041617b5523e05 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-tr/strings.xml @@ -0,0 +1,21 @@ + + + + + "Uzun ekran kesimi" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-uk/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-uk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..94a936917a7b3be08818f3c362b08b695c39f5a1 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-uk/strings.xml @@ -0,0 +1,21 @@ + + + + + "Відключення високого дисплея" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ur/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ur/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f45451cd62517c8595be29d4499d0301a3654d8d --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-ur/strings.xml @@ -0,0 +1,21 @@ + + + + + "لمبا ڈسپلے کٹ آؤٹ" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-uz/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-uz/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..6d097858900492d0a3e2f60ba6693e0e9d1fd129 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-uz/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ekrandagi kesimni balandroq qilish" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-vi/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-vi/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..650a30b55b03993f60c97da021e05baa4c921fa9 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-vi/strings.xml @@ -0,0 +1,21 @@ + + + + + "Cắt hiển thị cao" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zh-rCN/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4e4ff8999c15e828050cf66af37e49c8f86889c0 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zh-rCN/strings.xml @@ -0,0 +1,21 @@ + + + + + "长型显示屏凹口" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zh-rHK/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zh-rHK/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3aa87e07e4ea19448298d2993a2f07d5dccc36c4 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zh-rHK/strings.xml @@ -0,0 +1,21 @@ + + + + + "長身顯示屏凹口" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zh-rTW/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zh-rTW/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..cde32db340396fa54838a55510e9688c8b520980 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zh-rTW/strings.xml @@ -0,0 +1,21 @@ + + + + + "長型螢幕凹口" + diff --git a/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zu/strings.xml b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ff1b6339595776022a13150a74af826362242e47 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationTallOverlay/res/values-zu/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ukusikwa kwesiboniso esinde" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-af/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-af/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..eda1e7678c2d276071daa578dd9890b0fb1e20ca --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-af/strings.xml @@ -0,0 +1,21 @@ + + + + + "Uitsnede vir wye vertoonskerm" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-am/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-am/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c1345dc1b2904703d0129fbff47b5ae8616a025c --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-am/strings.xml @@ -0,0 +1,21 @@ + + + + + "የሰፊ ማሳያ ቅርጽ" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ar/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ar/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0a7bfac1d6e2f89e5e9425c5d04b5f75d79c889c --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ar/strings.xml @@ -0,0 +1,21 @@ + + + + + "صورة مقطوعة لشاشة عريضة" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-as/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-as/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..49373e4d55bde1366ef4c551f2896f8a45a27e4b --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-as/strings.xml @@ -0,0 +1,21 @@ + + + + + "বহল ডিছপ্লে কাটআউট" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-az/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-az/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3a78dfe66fc2156562c2738a35ac9a9ca89bc09d --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-az/strings.xml @@ -0,0 +1,21 @@ + + + + + "Geniş ekran profili" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-b+sr+Latn/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-b+sr+Latn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b67afb9ca1d85aa7098236309ba3c925724025ac --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-b+sr+Latn/strings.xml @@ -0,0 +1,21 @@ + + + + + "Izrezana slika za široke ekrane" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-be/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-be/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..a3a76f5c96a564aec1ab65688924f6110a8d01ee --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-be/strings.xml @@ -0,0 +1,21 @@ + + + + + "Зрабіць выраз на экране больш шырокім" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bg/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bg/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..d0cf01d75faf5d41c4b81cad028d3dc42baca5f8 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bg/strings.xml @@ -0,0 +1,21 @@ + + + + + "Широк прорез на екрана" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bn/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..9ef47395411894aa5d8875f080d9fd424d620714 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bn/strings.xml @@ -0,0 +1,21 @@ + + + + + "ওয়াইড ডিসপ্লে কাট-আউট" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bs/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bs/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0aaf27faf21eaaf552890ae02f53f98b50b0ce1c --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-bs/strings.xml @@ -0,0 +1,21 @@ + + + + + "Široki urez ekrana" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ca/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ca/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c9aa251720cad276012786f1d5455e56cf22f654 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ca/strings.xml @@ -0,0 +1,21 @@ + + + + + "Retall de pantalla ample" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-cs/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-cs/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..dcbb256e6c9f821dccaf5e1c6aea35230569ce4d --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-cs/strings.xml @@ -0,0 +1,21 @@ + + + + + "Široký výřez displeje" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-da/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-da/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b73b6ae502eac5a9b22a78227b8ec29a7b6ef4e4 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-da/strings.xml @@ -0,0 +1,21 @@ + + + + + "Bred udskæring på skærmen" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-de/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-de/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..20537dcd1be7bbe447fc7d5adbeeb5923fd2a419 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-de/strings.xml @@ -0,0 +1,21 @@ + + + + + "Breiter Display-Ausschnitt" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-el/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-el/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..04c5e3871ae28cdc2efdc191c8557591c5382762 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-el/strings.xml @@ -0,0 +1,21 @@ + + + + + "Διακοπή πλατιάς οθόνης" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rAU/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rAU/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..cc0e6c785318467c0d4956659606190ba893ee91 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rAU/strings.xml @@ -0,0 +1,21 @@ + + + + + "Wide display cutout" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rCA/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rCA/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..cc0e6c785318467c0d4956659606190ba893ee91 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rCA/strings.xml @@ -0,0 +1,21 @@ + + + + + "Wide display cutout" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rGB/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rGB/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..cc0e6c785318467c0d4956659606190ba893ee91 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rGB/strings.xml @@ -0,0 +1,21 @@ + + + + + "Wide display cutout" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rIN/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rIN/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..cc0e6c785318467c0d4956659606190ba893ee91 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rIN/strings.xml @@ -0,0 +1,21 @@ + + + + + "Wide display cutout" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rXC/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rXC/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..9310af8f1b24ae150063025b51b0122752438d78 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-en-rXC/strings.xml @@ -0,0 +1,21 @@ + + + + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‎‎‏‏‎‏‎‏‏‎‎‎‏‎‏‎‏‏‎‎‎‏‏‏‎‏‎‏‏‎‎‎‏‏‎‎‎‏‎‏‎‎‎‏‏‏‏‎‎‏‏‎Wide display cutout‎‏‎‎‏‎" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-es-rUS/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-es-rUS/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c88e12d9f1483e6092c132ff71fede85f790630c --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-es-rUS/strings.xml @@ -0,0 +1,21 @@ + + + + + "Recorte de pantalla ancho" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-es/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-es/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f63e42754f0db07fe843bd38cc1717d2354d6310 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-es/strings.xml @@ -0,0 +1,21 @@ + + + + + "Recorte ancho de la pantalla" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-et/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-et/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f3643a9165da46219b44be01b071d96184ee3be6 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-et/strings.xml @@ -0,0 +1,21 @@ + + + + + "Lai ekraani väljalõige" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-eu/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-eu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f13d7f69ddfc16e61c68024af505ecc4cfeb0f44 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-eu/strings.xml @@ -0,0 +1,21 @@ + + + + + "Pantailaren mozketa zabala" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fa/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fa/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..13cbe2fabfcd4dfae2e5fff9e515035c1fb9a698 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fa/strings.xml @@ -0,0 +1,21 @@ + + + + + "نمایشگر با لبه پهن" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fi/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fi/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..2568605f476c5027da2819addb8d9d9aaa0594a8 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fi/strings.xml @@ -0,0 +1,21 @@ + + + + + "Leveä aukko näytössä" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fr-rCA/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fr-rCA/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..92faa6c497ac4af064feff6aa5cd5e65b31d7b76 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fr-rCA/strings.xml @@ -0,0 +1,21 @@ + + + + + "Découpe d\'affichage large" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fr/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3e104bec748c78a1933482872d5b4724a397d6e6 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-fr/strings.xml @@ -0,0 +1,21 @@ + + + + + "Encoche pour écran large" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-gl/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-gl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..deafd408c4071f03a474f102dd2283b6c815a695 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-gl/strings.xml @@ -0,0 +1,21 @@ + + + + + "Recorte de pantalla amplo" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-gu/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-gu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..fc08278b195387c72e44286b106076d1118c7be6 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-gu/strings.xml @@ -0,0 +1,21 @@ + + + + + "પહોળું ડિસ્પ્લે કટઆઉટ" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hi/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hi/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..cdea4bbb88271a74e861a349a3a11de504fb5f14 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hi/strings.xml @@ -0,0 +1,21 @@ + + + + + "चौड़ा डिसप्ले कटआउट" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hr/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..fbb08586ede848066b3703e466ab9104b852a4b9 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hr/strings.xml @@ -0,0 +1,21 @@ + + + + + "Obrezana slika za široke zaslone" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hu/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b9a47293f04c6f25b2daea46e98ae99ac5aa8bc3 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hu/strings.xml @@ -0,0 +1,21 @@ + + + + + "Széles képernyőkivágás" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hy/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hy/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..cfe4dbf1af3a7aed3bd045d91bbda5fcf93a91b5 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-hy/strings.xml @@ -0,0 +1,21 @@ + + + + + "Էկրանի լայն կտրվածք" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-in/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-in/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..91440fc0acaffdbbe38cb4ed70ab213e01aaa849 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-in/strings.xml @@ -0,0 +1,21 @@ + + + + + "Potongan tampilan lebar" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-is/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-is/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..367219bda589eb3d6db9d070cb2524e4a8d06f01 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-is/strings.xml @@ -0,0 +1,21 @@ + + + + + "Breiður skjáskurður" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-it/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-it/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..5349c40731a5677d395f22b1543a00b5b58c0fb7 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-it/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ritaglio display largo" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-iw/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-iw/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..1a2fdd7164fff98266f11573c3a5c808786937f4 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-iw/strings.xml @@ -0,0 +1,21 @@ + + + + + "חיתוך תצוגה רחב" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ja/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ja/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f0fc0a23b1ff5f7d06a5d586f9a5ce679703e90f --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ja/strings.xml @@ -0,0 +1,21 @@ + + + + + "幅広のディスプレイ カットアウト" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ka/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ka/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..8a6b89f8861361655d1f3b088b560a2c4e49edc5 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ka/strings.xml @@ -0,0 +1,21 @@ + + + + + "ეკრანის ფართო ამოჭრა" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-kk/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-kk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f3124de5ec955afaf60f9ceb3c8bcb04fbb9103f --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-kk/strings.xml @@ -0,0 +1,21 @@ + + + + + "Жалпақ экран ойығы" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-km/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-km/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..6fc8643cee1746e058836b09d4c9c9defb1f8ff8 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-km/strings.xml @@ -0,0 +1,21 @@ + + + + + "ស្នាមចោះ​ផ្ទាំងអេក្រង់​ធំ" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-kn/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-kn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f95180d05ca24efbc1359fa1703ceaca7c097427 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-kn/strings.xml @@ -0,0 +1,21 @@ + + + + + "ವಿಶಾಲ ಪ್ರದರ್ಶನ ಕಟೌಟ್" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ko/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ko/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ea4f6388f8e11f70c2a691cdba36206a840fe92b --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ko/strings.xml @@ -0,0 +1,21 @@ + + + + + "넓은 디스플레이 컷아웃" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ky/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ky/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..735034ded661bc5b53d4a30178a89b11e473462e --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ky/strings.xml @@ -0,0 +1,21 @@ + + + + + "Жазы дисплей кесиндиси" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lo/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lo/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..8282319d3dd8ed3295933584cf72e03dd06d91c0 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lo/strings.xml @@ -0,0 +1,21 @@ + + + + + "ກ່ອງຂໍ້ຄວາມສະແດງຜົນແບບກວ້າງ" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lt/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lt/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..a46ae3d393a933f11d6d3d81edfb9daf734d1bbd --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lt/strings.xml @@ -0,0 +1,21 @@ + + + + + "Plati ekrano išpjova" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lv/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lv/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..9789d8c873f79f7bd7fd42ca8f5dfdd6f52d3b34 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-lv/strings.xml @@ -0,0 +1,21 @@ + + + + + "Plats ekrāna izgriezums" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mk/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..025c46e1b9475c9fd5b48ef4acbc18325d9f47d6 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mk/strings.xml @@ -0,0 +1,21 @@ + + + + + "Широк исечок на екранот" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ml/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ml/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..9a4756510ca60c9fef146f0bbc1334181143a6aa --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ml/strings.xml @@ -0,0 +1,21 @@ + + + + + "വിസ്‌തൃതമായ ഡി‌സ്‌പ്ലേ കട്ടൗട്ട്" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mn/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..a7d8b5a4fbe14aed72d3b3b7d7d8ccdf722e0469 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mn/strings.xml @@ -0,0 +1,21 @@ + + + + + "Дэлгэцийг өргөн болгож таслах" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mr/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..50542af8060f859fe224d1301d4096308a495f14 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-mr/strings.xml @@ -0,0 +1,21 @@ + + + + + "रुंद डिस्प्ले कटआउट" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ms/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ms/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ad702b7a1576eeba40ca48e0ed854c8e7e149230 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ms/strings.xml @@ -0,0 +1,21 @@ + + + + + "Potongan paparan lebar" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-my/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-my/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..94566da8d975062cb940450ca7a62b2fa4142724 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-my/strings.xml @@ -0,0 +1,21 @@ + + + + + "မြင်ကွင်းကျယ် မျက်နှာပြင် ဖြတ်ညှပ်ပြသမှု" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-nb/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-nb/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c84fc8b00933ef67e665be447186ce371e1554a9 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-nb/strings.xml @@ -0,0 +1,21 @@ + + + + + "Bredt skjermutklipp" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ne/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ne/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..718ca438f39314ee98a7d04b86eae44540b2346d --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ne/strings.xml @@ -0,0 +1,21 @@ + + + + + "फराकिलो प्रदर्शनसम्बन्धी कटआउट" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-nl/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-nl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b57cac726122c2973a0d2111042890471e933bdb --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-nl/strings.xml @@ -0,0 +1,21 @@ + + + + + "Brede display-cutout" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-or/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b146134c72ba7abc8e475ff95f815f2baef6a14d --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-or/strings.xml @@ -0,0 +1,21 @@ + + + + + "ଓସାରିଆ ଡିସ୍‌ପ୍ଲେ କଟଆଉଟ୍" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pa/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pa/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c86889ff4f4fc461234f122d1097fbf163bac270 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pa/strings.xml @@ -0,0 +1,21 @@ + + + + + "ਚੌੜਾ ਡਿਸਪਲੇ ਕੱਟਆਊਟ" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pl/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..082946fdad500c2192535835c356b69009278ad4 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pl/strings.xml @@ -0,0 +1,21 @@ + + + + + "Szerokie wycięcie wyświetlacza" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt-rBR/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt-rBR/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..16491f81ee450ca97fe67a63cf011b9045e4b477 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt-rBR/strings.xml @@ -0,0 +1,21 @@ + + + + + "Corte da tela largo" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt-rPT/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..03d36312b82652e0de1c00abb190e312f2e8a8ec --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt-rPT/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ecrã largo com recorte" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..16491f81ee450ca97fe67a63cf011b9045e4b477 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-pt/strings.xml @@ -0,0 +1,21 @@ + + + + + "Corte da tela largo" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ro/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ro/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..a1140a89c6a84673662a71929cbc06c31d71058c --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ro/strings.xml @@ -0,0 +1,21 @@ + + + + + "Decupare ecran lată" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ru/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ru/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f7d5ec607ec023c4f5a6e48a73e88130c5468efc --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ru/strings.xml @@ -0,0 +1,21 @@ + + + + + "Сделать вырез на экране шире" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-si/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-si/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..1be117bcbb9b908e16bdf92ae2287ec589f80bfb --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-si/strings.xml @@ -0,0 +1,21 @@ + + + + + "පුළුල් සංදර්ශක කටවුට්" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sk/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..059e58450e3507d68837ae4f1bbd0b7101d98fc7 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sk/strings.xml @@ -0,0 +1,21 @@ + + + + + "Široký výrez obrazovky" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sl/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..5c5b5a2565ab58d017cacce862456d180bc2a52a --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sl/strings.xml @@ -0,0 +1,21 @@ + + + + + "Širok izrez prikaza" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sq/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sq/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..76271acf4d5d6df19681c652e092a1f1bc20ded7 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sq/strings.xml @@ -0,0 +1,21 @@ + + + + + "Prerje e gjerë ekrani" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sr/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..66705124fb6809dbe44ef14f89b55ef767276f6c --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sr/strings.xml @@ -0,0 +1,21 @@ + + + + + "Изрезана слика за широке екране" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sv/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sv/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c624c052bd8e8b3fbfbfd2d2f93764da9a1625f5 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sv/strings.xml @@ -0,0 +1,21 @@ + + + + + "Brett urklipp av skärm" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sw/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sw/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0414e8ac35c68c1d3db0c59538ef5815e32e7437 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-sw/strings.xml @@ -0,0 +1,21 @@ + + + + + "Mwonekeno wenye pengo pana" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ta/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ta/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..122a8b216d71036e7631e10a6fdd4104a042e117 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ta/strings.xml @@ -0,0 +1,21 @@ + + + + + "அகலமான கட்அவுட் காட்சி" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-te/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-te/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..1a0a3bf61e0cb7e86496ad34d451fb4685ad1d6f --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-te/strings.xml @@ -0,0 +1,21 @@ + + + + + "వెడల్పైన డిస్‌ప్లే కట్అవుట్‌" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-th/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-th/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f91a7b6366734c55e08fcf6fa9bd3d71844424ba --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-th/strings.xml @@ -0,0 +1,21 @@ + + + + + "คัตเอาท์ดิสเพลย์แบบกว้าง" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-tl/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-tl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..2f82c4bb97579630f0d099acd4b560fb45f8e6c4 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-tl/strings.xml @@ -0,0 +1,21 @@ + + + + + "Malapad na display cutout" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-tr/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-tr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..01d77d581073d3fbaa1497b774e0759fbbaf37b6 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-tr/strings.xml @@ -0,0 +1,21 @@ + + + + + "Geniş ekran kesimi" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-uk/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-uk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..40b5c9d81e8db0b28e7175f5e681bc719166a65e --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-uk/strings.xml @@ -0,0 +1,21 @@ + + + + + "Відключення широкого дисплея" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ur/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ur/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3bed22a70e6ead895e4db6a0f53df7af2f1b417c --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-ur/strings.xml @@ -0,0 +1,21 @@ + + + + + "چوڑا ڈسپلے کٹ آؤٹ" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-uz/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-uz/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c67c8ca9974821c365ed5b95bd80167a2999543f --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-uz/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ekrandagi kesimni uzaytirish" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-vi/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-vi/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c811af0280f9149d7788cac6a0e7560a72cdbafc --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-vi/strings.xml @@ -0,0 +1,21 @@ + + + + + "Cắt hiển thị rộng" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zh-rCN/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..8aea67316e6f1e0057031a4d2038215d62f074ec --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zh-rCN/strings.xml @@ -0,0 +1,21 @@ + + + + + "宽型显示屏凹口" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zh-rHK/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zh-rHK/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..8a2313678073d62857b1b1d76498b1d0e998a675 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zh-rHK/strings.xml @@ -0,0 +1,21 @@ + + + + + "闊身顯示屏凹口" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zh-rTW/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zh-rTW/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..9d2921b69cf788be7d07d510a367d031da9243ff --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zh-rTW/strings.xml @@ -0,0 +1,21 @@ + + + + + "寬型螢幕凹口" + diff --git a/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zu/strings.xml b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4a9628196a6febafde0690d956230cc521f35b82 --- /dev/null +++ b/packages/overlays/DisplayCutoutEmulationWideOverlay/res/values-zu/strings.xml @@ -0,0 +1,21 @@ + + + + + "Ukusikwa kwesiboniso esibanzi" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-af/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-af/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..33c6982e007abd4b8c64deb9b8f7bc5719fffeb4 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-af/strings.xml @@ -0,0 +1,23 @@ + + + + + "Donker" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-am/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-am/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..59795695251be76b447ffcdd9f1dc379ad920aa2 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-am/strings.xml @@ -0,0 +1,23 @@ + + + + + "ጨለማ" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-ar/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-ar/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..7b20c01957aa2c54ebeb06e51e6ad45958656cea --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-ar/strings.xml @@ -0,0 +1,23 @@ + + + + + "داكن" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-as/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-as/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0910e7e753cb876b61348841b4639a7fb63cff9a --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-as/strings.xml @@ -0,0 +1,23 @@ + + + + + "গাঢ়" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-az/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-az/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..a9db75cdb5255e226f85082860957e6e7127abb2 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-az/strings.xml @@ -0,0 +1,23 @@ + + + + + "Qaranlıq" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-b+sr+Latn/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-b+sr+Latn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b63dcbcaa88e7c78de8b8a881532e9863cee1c79 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-b+sr+Latn/strings.xml @@ -0,0 +1,23 @@ + + + + + "Tamno" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-be/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-be/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..eb875b3e80359334170feac3988005cefbeb023f --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-be/strings.xml @@ -0,0 +1,23 @@ + + + + + "Цёмная" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-bg/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-bg/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..7b39462ffc25c1517763e1d3c4cc58aec95d523b --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-bg/strings.xml @@ -0,0 +1,23 @@ + + + + + "Тъмно" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-bn/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-bn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0910e7e753cb876b61348841b4639a7fb63cff9a --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-bn/strings.xml @@ -0,0 +1,23 @@ + + + + + "গাঢ়" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-bs/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-bs/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b63dcbcaa88e7c78de8b8a881532e9863cee1c79 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-bs/strings.xml @@ -0,0 +1,23 @@ + + + + + "Tamno" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-ca/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-ca/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..02ee2268bb831eb160477b35ca4eb3fbd592aab3 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-ca/strings.xml @@ -0,0 +1,23 @@ + + + + + "Fosc" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-cs/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-cs/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..5d11f07d9948859a2e3f9db919a4c6a29de6f19a --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-cs/strings.xml @@ -0,0 +1,23 @@ + + + + + "Tmavé" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-da/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-da/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..460ebe7739bc0b0bbbb3911dcd809c686c566162 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-da/strings.xml @@ -0,0 +1,23 @@ + + + + + "Mørk" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-de/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-de/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..4b54b8e1192083d293d1d92c8a517f42542bedc8 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-de/strings.xml @@ -0,0 +1,23 @@ + + + + + "Dunkel" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-el/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-el/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c58061dab3379cd07b89584661d1e7b97e382323 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-el/strings.xml @@ -0,0 +1,23 @@ + + + + + "Σκοτεινό" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-en-rAU/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-en-rAU/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..7c94a51ded3c0e654ba82e29c5123d65c556da66 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-en-rAU/strings.xml @@ -0,0 +1,23 @@ + + + + + "Dark" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-en-rCA/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-en-rCA/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..7c94a51ded3c0e654ba82e29c5123d65c556da66 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-en-rCA/strings.xml @@ -0,0 +1,23 @@ + + + + + "Dark" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-en-rGB/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-en-rGB/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..7c94a51ded3c0e654ba82e29c5123d65c556da66 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-en-rGB/strings.xml @@ -0,0 +1,23 @@ + + + + + "Dark" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-en-rIN/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-en-rIN/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..7c94a51ded3c0e654ba82e29c5123d65c556da66 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-en-rIN/strings.xml @@ -0,0 +1,23 @@ + + + + + "Dark" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-en-rXC/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-en-rXC/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..cbdd3d2030b4a6a41dc44d38f7a7c05de85b04c9 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-en-rXC/strings.xml @@ -0,0 +1,23 @@ + + + + + "‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‏‎‎‏‎‎‎‎‏‏‏‏‎‏‏‏‏‏‏‎‏‏‏‏‎‎‎‎‎‎‏‏‏‎‎‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‎‏‎‏‏‏‏‏‏‎‎Dark‎‏‎‎‏‎" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-es-rUS/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-es-rUS/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..2717f0f879c5ac546863bcded625c8ded05d19fc --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-es-rUS/strings.xml @@ -0,0 +1,23 @@ + + + + + "Oscuro" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-es/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-es/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..2717f0f879c5ac546863bcded625c8ded05d19fc --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-es/strings.xml @@ -0,0 +1,23 @@ + + + + + "Oscuro" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-et/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-et/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e0cce054fc07386272f7c5d7351026ed56b0da6d --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-et/strings.xml @@ -0,0 +1,23 @@ + + + + + "Tume" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-eu/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-eu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..44cee4cf9da49641789fdde5237bdc81affa90a4 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-eu/strings.xml @@ -0,0 +1,23 @@ + + + + + "Iluna" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-fa/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-fa/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..fdd1df54bfff425691b210a0de7c1adde94f8b21 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-fa/strings.xml @@ -0,0 +1,23 @@ + + + + + "تیره" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-fi/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-fi/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..237fe70ff91d6be2651d9b61af1c0f699529b7de --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-fi/strings.xml @@ -0,0 +1,23 @@ + + + + + "Tumma" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-fr-rCA/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-fr-rCA/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f92c2ef95af37de8989598e33b3e73bc89471664 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-fr-rCA/strings.xml @@ -0,0 +1,23 @@ + + + + + "Sombre" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-fr/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-fr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..eac51d3a4fbfee4c2e7eecfaa1f2a4f1a68b610e --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-fr/strings.xml @@ -0,0 +1,23 @@ + + + + + "Foncé" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-gl/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-gl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..300868f871e2e740ac267d84d5a6eb2ded692f05 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-gl/strings.xml @@ -0,0 +1,23 @@ + + + + + "Escuro" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-gu/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-gu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..6a4cd62ff26f2bd627178c818113f6dd9f6b2786 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-gu/strings.xml @@ -0,0 +1,23 @@ + + + + + "ઘેરી" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-hi/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-hi/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c5bc0e24ed5c96d5db52c843b687c6113f49ab90 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-hi/strings.xml @@ -0,0 +1,23 @@ + + + + + "गहरे रंग की थीम" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-hr/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-hr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b63dcbcaa88e7c78de8b8a881532e9863cee1c79 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-hr/strings.xml @@ -0,0 +1,23 @@ + + + + + "Tamno" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-hu/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-hu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..84a3ab87c72101ee3919fa1eb98128786f9d8ec7 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-hu/strings.xml @@ -0,0 +1,23 @@ + + + + + "Sötét" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-hy/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-hy/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..555cb647083ead6a30bba25474f4273b9bddb0ac --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-hy/strings.xml @@ -0,0 +1,23 @@ + + + + + "Մուգ" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-in/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-in/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..391451bc3afe5fe21279c8fc29e023901b45dd88 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-in/strings.xml @@ -0,0 +1,23 @@ + + + + + "Gelap" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-is/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-is/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f4d15311c951ec595c3fb9afb8f62dd147b7b03e --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-is/strings.xml @@ -0,0 +1,23 @@ + + + + + "Dökkt" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-it/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-it/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b59155bda97aafd3a763ab0f2433799219218c6f --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-it/strings.xml @@ -0,0 +1,23 @@ + + + + + "Scuro" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-iw/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-iw/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3ecf444fcbb0bc7911e0199b3ad511fecf22796d --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-iw/strings.xml @@ -0,0 +1,23 @@ + + + + + "כהה" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-ja/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-ja/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..3a2dba02f5019c49adc8bfbb3065f3b8ba3af19b --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-ja/strings.xml @@ -0,0 +1,23 @@ + + + + + "ダーク" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-ka/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-ka/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..36bf77e1c8a4ad48c12f2764d3e9e76f8ca180ed --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-ka/strings.xml @@ -0,0 +1,23 @@ + + + + + "მუქი" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-kk/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-kk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..913c0b18448d68c3f54865b45da41d9ba9c201a1 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-kk/strings.xml @@ -0,0 +1,23 @@ + + + + + "Қараңғы" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-km/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-km/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b56c4909fbc7a78eb52d0fbcf32013ef2b3d5532 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-km/strings.xml @@ -0,0 +1,23 @@ + + + + + "ងងឹត" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-kn/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-kn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e757116683874021213b8a6aa7045ce97e2d825c --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-kn/strings.xml @@ -0,0 +1,23 @@ + + + + + "ಕತ್ತಲೆ" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-ko/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-ko/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ca4ab1e283aef8c004657cde5570b573d12effc7 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-ko/strings.xml @@ -0,0 +1,23 @@ + + + + + "어두움" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-ky/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-ky/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e8e827972a04e66816c8950ea8e2587ddf3e94e6 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-ky/strings.xml @@ -0,0 +1,23 @@ + + + + + "Караңгы" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-lo/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-lo/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0434a413fb7fc359653715d9274a9a8b4d51f4bf --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-lo/strings.xml @@ -0,0 +1,23 @@ + + + + + "ມືດ" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-lt/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-lt/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..147779b850f4fc945e262fea4cd5409891768058 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-lt/strings.xml @@ -0,0 +1,23 @@ + + + + + "Tamsi" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-lv/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-lv/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..7a296ecda7f396ec37a5ffd97d96a30679b0ab68 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-lv/strings.xml @@ -0,0 +1,23 @@ + + + + + "Tumšs" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-mk/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-mk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..6be693af121967baab74b4343ed63d83fe4b0e19 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-mk/strings.xml @@ -0,0 +1,23 @@ + + + + + "Темна" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-ml/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-ml/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f8a24fa4af665442f2d353fe7b6f70a159e8b510 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-ml/strings.xml @@ -0,0 +1,23 @@ + + + + + "ഡാർക്ക്" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-mn/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-mn/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..e65d9c70c07df05a20a0cbfe909d6f1475a3b6fe --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-mn/strings.xml @@ -0,0 +1,23 @@ + + + + + "Бараан" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-mr/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-mr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..854af000ab0f7cda28221783ec877d907b78f200 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-mr/strings.xml @@ -0,0 +1,23 @@ + + + + + "गडद" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-ms/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-ms/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..391451bc3afe5fe21279c8fc29e023901b45dd88 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-ms/strings.xml @@ -0,0 +1,23 @@ + + + + + "Gelap" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-my/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-my/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..008e9c694a98faaa4cec8277aa0db91fcec83b6c --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-my/strings.xml @@ -0,0 +1,23 @@ + + + + + "မှောင်သော" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-nb/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-nb/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..460ebe7739bc0b0bbbb3911dcd809c686c566162 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-nb/strings.xml @@ -0,0 +1,23 @@ + + + + + "Mørk" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-ne/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-ne/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..8f2c5ba8973262faf1302ef32e7b5c1540b3f2e8 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-ne/strings.xml @@ -0,0 +1,23 @@ + + + + + "अँध्यारो" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-nl/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-nl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..33c6982e007abd4b8c64deb9b8f7bc5719fffeb4 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-nl/strings.xml @@ -0,0 +1,23 @@ + + + + + "Donker" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-or/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-or/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..d8045bd6de6ecdc25304b14ba5d6d3450ae85cb6 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-or/strings.xml @@ -0,0 +1,23 @@ + + + + + "ଗାଢ଼" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-pa/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-pa/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..71103030493a4595138a17ac39a1d136820da845 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-pa/strings.xml @@ -0,0 +1,23 @@ + + + + + "ਗੂੜ੍ਹਾ" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-pl/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-pl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..25ca20fe421d7527156bb858a88997286ea7beea --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-pl/strings.xml @@ -0,0 +1,23 @@ + + + + + "Ciemna" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-pt-rBR/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-pt-rBR/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..300868f871e2e740ac267d84d5a6eb2ded692f05 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-pt-rBR/strings.xml @@ -0,0 +1,23 @@ + + + + + "Escuro" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-pt-rPT/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-pt-rPT/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..300868f871e2e740ac267d84d5a6eb2ded692f05 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-pt-rPT/strings.xml @@ -0,0 +1,23 @@ + + + + + "Escuro" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-pt/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-pt/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..300868f871e2e740ac267d84d5a6eb2ded692f05 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-pt/strings.xml @@ -0,0 +1,23 @@ + + + + + "Escuro" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-ro/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-ro/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..de73f36e6b833c42106150ed1121d200f23ad431 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-ro/strings.xml @@ -0,0 +1,23 @@ + + + + + "Întunecată" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-ru/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-ru/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..b05e84454c68b76d014123c6536a40ce3207d1b3 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-ru/strings.xml @@ -0,0 +1,23 @@ + + + + + "Темный" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-si/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-si/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..f0f572502f5f7c779bce8596a66309927a60d5da --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-si/strings.xml @@ -0,0 +1,23 @@ + + + + + "අඳුරු" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-sk/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-sk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..5df68959b1a25ba791b7c98078f1a2cba7e8737f --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-sk/strings.xml @@ -0,0 +1,23 @@ + + + + + "Tmavý" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-sl/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-sl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..ad58250a117c78f994d633138a6a358cf6d5d789 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-sl/strings.xml @@ -0,0 +1,23 @@ + + + + + "Temno" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-sq/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-sq/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..0e1eae7064b64fba50e3dffbeeb30c6786d4ae8e --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-sq/strings.xml @@ -0,0 +1,23 @@ + + + + + "E errët" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-sr/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-sr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..1561ee298a2c766e452c91f70b6d18945ca8c3fb --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-sr/strings.xml @@ -0,0 +1,23 @@ + + + + + "Тамно" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-sv/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-sv/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..676de42dceb1fb50aa501d40ce93d94cc598d42f --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-sv/strings.xml @@ -0,0 +1,23 @@ + + + + + "Mörk" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-sw/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-sw/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..cc1f120adfc171fedce30e4eebfa3bea2221dac7 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-sw/strings.xml @@ -0,0 +1,23 @@ + + + + + "Nyeusi" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-ta/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-ta/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..af98172472d4f857d4c1cf6e3c45cb1b3254fb10 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-ta/strings.xml @@ -0,0 +1,23 @@ + + + + + "டார்க்" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-te/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-te/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..446455fe7dd88d257d3388777b7182ba7c97a63c --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-te/strings.xml @@ -0,0 +1,23 @@ + + + + + "ముదురు రంగు" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-th/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-th/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..9e3462b61e4bf88d12d3b3b6d9de2ec823073983 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-th/strings.xml @@ -0,0 +1,23 @@ + + + + + "เข้ม" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-tl/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-tl/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..5502d90a889cc3cca3ee1f7895ed77c3b8e62ed3 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-tl/strings.xml @@ -0,0 +1,23 @@ + + + + + "Madilim" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-tr/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-tr/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..368b398bcf1732f1fdcc1fa7336650d2b6d2d449 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-tr/strings.xml @@ -0,0 +1,23 @@ + + + + + "Koyu" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-uk/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-uk/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..6e67e455e95dc321023c3bdcc3e12a4bcdd104b6 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-uk/strings.xml @@ -0,0 +1,23 @@ + + + + + "Темна тема" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-ur/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-ur/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..1d5d6de407b3de7ee3ff02c8c79edaa294f68e5e --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-ur/strings.xml @@ -0,0 +1,23 @@ + + + + + "گہرا" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-uz/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-uz/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..957c28f8fb04064319ba6324172f8de645e4857a --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-uz/strings.xml @@ -0,0 +1,23 @@ + + + + + "Tungi" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-vi/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-vi/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..a45888955988a447ff1a3c1aaa12cc673eeb724b --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-vi/strings.xml @@ -0,0 +1,23 @@ + + + + + "Tối" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-zh-rCN/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-zh-rCN/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c9b43dcba4ea6278770bcf0b4c47937b3f5a6115 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-zh-rCN/strings.xml @@ -0,0 +1,23 @@ + + + + + "深色" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-zh-rHK/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-zh-rHK/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c9b43dcba4ea6278770bcf0b4c47937b3f5a6115 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-zh-rHK/strings.xml @@ -0,0 +1,23 @@ + + + + + "深色" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-zh-rTW/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-zh-rTW/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..c9b43dcba4ea6278770bcf0b4c47937b3f5a6115 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-zh-rTW/strings.xml @@ -0,0 +1,23 @@ + + + + + "深色" + diff --git a/packages/overlays/SysuiDarkThemeOverlay/res/values-zu/strings.xml b/packages/overlays/SysuiDarkThemeOverlay/res/values-zu/strings.xml new file mode 100644 index 0000000000000000000000000000000000000000..6d328da358a7b0f2befa32b6ff2974c24cfa6235 --- /dev/null +++ b/packages/overlays/SysuiDarkThemeOverlay/res/values-zu/strings.xml @@ -0,0 +1,23 @@ + + + + + "Emnyama" + diff --git a/proto/src/wifi.proto b/proto/src/wifi.proto index 9c74188d671edbdd9a6ed275d64c2b361d324098..934ad882a6359ea5d1260bfe6b6c97d544d7e831 100644 --- a/proto/src/wifi.proto +++ b/proto/src/wifi.proto @@ -249,12 +249,12 @@ message WifiLog { optional int32 num_wificond_crashes = 54; // Indicates the number of times an error was encountered in - // Wifi HAL when wifi was turned on. - optional int32 num_wifi_on_failure_due_to_hal = 55; + // Wifi HAL on |WifiNative.setupInterfaceForClientMode|. + optional int32 num_setup_client_interface_failure_due_to_hal = 55; // Indicates the number of times an error was encountered in - // Wificond when wifi was turned on. - optional int32 num_wifi_on_failure_due_to_wificond = 56; + // Wificond on |WifiNative.setupInterfaceForClientMode|. + optional int32 num_setup_client_interface_failure_due_to_wificond = 56; // Wi-Fi Aware metrics optional WifiAwareLog wifi_aware_log = 57; @@ -385,6 +385,43 @@ message WifiLog { // Histogram counting instances of scans with N many 802.11mc (RTT) supporting APs repeated NumConnectableNetworksBucket observed_80211mc_supporting_aps_in_scan_histogram = 95; + + // Total number of times supplicant crashed. + optional int32 num_supplicant_crashes = 96; + + // Total number of times hostapd crashed. + optional int32 num_hostapd_crashes = 97; + + // Indicates the number of times an error was encountered in + // supplicant on |WifiNative.setupInterfaceForClientMode|. + optional int32 num_setup_client_interface_failure_due_to_supplicant = 98; + + // Indicates the number of times an error was encountered in + // Wifi HAL on |WifiNative.setupInterfaceForSoftApMode|. + optional int32 num_setup_soft_ap_interface_failure_due_to_hal = 99; + + // Indicates the number of times an error was encountered in + // Wifi HAL on |WifiNative.setupInterfaceForSoftApMode|. + optional int32 num_setup_soft_ap_interface_failure_due_to_wificond = 100; + + // Indicates the number of times an error was encountered in + // Wifi HAL on |WifiNative.setupInterfaceForSoftApMode|. + optional int32 num_setup_soft_ap_interface_failure_due_to_hostapd = 101; + + // Indicates the number of times we got an interface down in client mode. + optional int32 num_client_interface_down = 102; + + // Indicates the number of times we got an interface down in softap mode. + optional int32 num_soft_ap_interface_down = 103; + + // Indicates the number of scan requests from external apps. + optional int32 num_external_app_oneshot_scan_requests = 104; + + // Indicates the number of times a scan request from an external foreground app was throttled. + optional int32 num_external_foreground_app_oneshot_scan_requests_throttled = 105; + + // Indicates the number of times a scan request from an external background app was throttled. + optional int32 num_external_background_app_oneshot_scan_requests_throttled = 106; } // Information that gets logged for every WiFi connection. diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 8941b49265845d3942e4c9142163445de05b5f62..de112f94f743c69094baa14adeff31eaa96200e6 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -853,11 +853,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub if (mSecurityPolicy.findA11yWindowInfoById(windowId) == null) { return null; } - IBinder token = mGlobalWindowTokens.get(windowId); - if (token != null) { - return token; - } - return getCurrentUserStateLocked().mWindowTokens.get(windowId); + return findWindowTokenLocked(windowId); } } @@ -2527,6 +2523,14 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub getInteractionBridge().clearAccessibilityFocusNotLocked(windowId); } + private IBinder findWindowTokenLocked(int windowId) { + IBinder token = mGlobalWindowTokens.get(windowId); + if (token != null) { + return token; + } + return getCurrentUserStateLocked().mWindowTokens.get(windowId); + } + private int findWindowIdLocked(IBinder token) { final int globalIndex = mGlobalWindowTokens.indexOfValue(token); if (globalIndex >= 0) { @@ -2986,7 +2990,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub // the accessibility layer reports which are windows // that a sighted user can touch. default: { - return isRetrievalAllowingWindow(event.getWindowId()); + return isRetrievalAllowingWindowLocked(event.getWindowId()); } } } @@ -3438,7 +3442,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub public boolean canGetAccessibilityNodeInfoLocked( AbstractAccessibilityServiceConnection service, int windowId) { - return canRetrieveWindowContentLocked(service) && isRetrievalAllowingWindow(windowId); + return canRetrieveWindowContentLocked(service) + && isRetrievalAllowingWindowLocked(windowId); } public boolean canRetrieveWindowsLocked(AbstractAccessibilityServiceConnection service) { @@ -3523,17 +3528,40 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub || userId == UserHandle.USER_CURRENT_OR_SELF); } - private boolean isRetrievalAllowingWindow(int windowId) { + private boolean isRetrievalAllowingWindowLocked(int windowId) { // The system gets to interact with any window it wants. if (Binder.getCallingUid() == Process.SYSTEM_UID) { return true; } + if (Binder.getCallingUid() == Process.SHELL_UID) { + if (!isShellAllowedToRetrieveWindowLocked(windowId)) { + return false; + } + } if (windowId == mActiveWindowId) { return true; } return findA11yWindowInfoById(windowId) != null; } + private boolean isShellAllowedToRetrieveWindowLocked(int windowId) { + long token = Binder.clearCallingIdentity(); + try { + IBinder windowToken = findWindowTokenLocked(windowId); + if (windowToken == null) { + return false; + } + int userId = mWindowManagerService.getWindowOwnerUserId(windowToken); + if (userId == UserHandle.USER_NULL) { + return false; + } + return !mUserManager.hasUserRestriction( + UserManager.DISALLOW_DEBUGGING_FEATURES, UserHandle.of(userId)); + } finally { + Binder.restoreCallingIdentity(token); + } + } + public AccessibilityWindowInfo findA11yWindowInfoById(int windowId) { return mA11yWindowInfoById.get(windowId); } diff --git a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java index d4ecd8b93859344107ecbec4c6ab81b88e31b5f4..3253f2e406921c2a4d6c70c27b0c6ca0802bea2d 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillManagerService.java +++ b/services/autofill/java/com/android/server/autofill/AutofillManagerService.java @@ -19,7 +19,6 @@ package com.android.server.autofill; import static android.Manifest.permission.MANAGE_AUTO_FILL; import static android.content.Context.AUTOFILL_MANAGER_SERVICE; -import static com.android.server.autofill.Helper.bundleToString; import static com.android.server.autofill.Helper.sDebug; import static com.android.server.autofill.Helper.sFullScreenMode; import static com.android.server.autofill.Helper.sPartitionMaxCount; @@ -193,8 +192,7 @@ public final class AutofillManagerService extends SystemService { if (disabledBefore == disabledNow) { // Nothing changed, do nothing. if (sDebug) { - Slog.d(TAG, "Autofill restriction did not change for user " + userId + ": " - + bundleToString(newRestrictions)); + Slog.d(TAG, "Autofill restriction did not change for user " + userId); return; } } diff --git a/services/autofill/java/com/android/server/autofill/Helper.java b/services/autofill/java/com/android/server/autofill/Helper.java index a202aafde53bee5f6f21a0cf25014def702089c8..78526f53cdde43b7d06b86e343ab5723d5627e5b 100644 --- a/services/autofill/java/com/android/server/autofill/Helper.java +++ b/services/autofill/java/com/android/server/autofill/Helper.java @@ -79,28 +79,6 @@ public final class Helper { throw new UnsupportedOperationException("contains static members only"); } - static void append(StringBuilder builder, Bundle bundle) { - if (bundle == null || !sVerbose) { - builder.append("null"); - return; - } - final Set keySet = bundle.keySet(); - builder.append("[Bundle with ").append(keySet.size()).append(" extras:"); - for (String key : keySet) { - final Object value = bundle.get(key); - builder.append(' ').append(key).append('='); - builder.append((value instanceof Object[]) - ? Arrays.toString((Objects[]) value) : value); - } - builder.append(']'); - } - - static String bundleToString(Bundle bundle) { - final StringBuilder builder = new StringBuilder(); - append(builder, bundle); - return builder.toString(); - } - @Nullable static AutofillId[] toArray(@Nullable ArraySet set) { if (set == null) return null; diff --git a/services/autofill/java/com/android/server/autofill/Session.java b/services/autofill/java/com/android/server/autofill/Session.java index 706fb1a72491161f532f5065693634d6efe7e19e..e14584f9070b1f572c7849bc54e2a90a67ecf8a5 100644 --- a/services/autofill/java/com/android/server/autofill/Session.java +++ b/services/autofill/java/com/android/server/autofill/Session.java @@ -2502,8 +2502,10 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState } pw.print(prefix); pw.print("mHasCallback: "); pw.println(mHasCallback); - pw.print(prefix); pw.print("mClientState: "); pw.println( - Helper.bundleToString(mClientState)); + if (mClientState != null) { + pw.print(prefix); pw.print("mClientState: "); pw.print(mClientState.getSize()); pw + .println(" bytes"); + } pw.print(prefix); pw.print("mCompatMode: "); pw.println(mCompatMode); pw.print(prefix); pw.print("mUrlBar: "); if (mUrlBar == null) { diff --git a/services/backup/java/com/android/server/backup/BackupAgentTimeoutParameters.java b/services/backup/java/com/android/server/backup/BackupAgentTimeoutParameters.java index 4de2c9b8e79f4af316c04aa9c444d7f4fbacd814..49fa1ccce5fe9cfd66aeb3a380f5a04e50a64a4d 100644 --- a/services/backup/java/com/android/server/backup/BackupAgentTimeoutParameters.java +++ b/services/backup/java/com/android/server/backup/BackupAgentTimeoutParameters.java @@ -21,6 +21,7 @@ import android.os.Handler; import android.provider.Settings; import android.util.KeyValueListParser; import android.util.KeyValueSettingObserver; +import android.util.Slog; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; @@ -31,6 +32,8 @@ import com.android.internal.annotations.VisibleForTesting; * are represented as a comma-delimited key value list. */ public class BackupAgentTimeoutParameters extends KeyValueSettingObserver { + private static final String TAG = "BackupAgentTimeout"; + @VisibleForTesting public static final String SETTING = Settings.Global.BACKUP_AGENT_TIMEOUT_PARAMETERS; @@ -120,30 +123,50 @@ public class BackupAgentTimeoutParameters extends KeyValueSettingObserver { public long getKvBackupAgentTimeoutMillis() { synchronized (mLock) { + if (BackupManagerService.DEBUG_SCHEDULING) { + Slog.v(TAG, "getKvBackupAgentTimeoutMillis(): " + mKvBackupAgentTimeoutMillis); + } return mKvBackupAgentTimeoutMillis; } } public long getFullBackupAgentTimeoutMillis() { synchronized (mLock) { + if (BackupManagerService.DEBUG_SCHEDULING) { + Slog.v(TAG, "getFullBackupAgentTimeoutMillis(): " + mFullBackupAgentTimeoutMillis); + } return mFullBackupAgentTimeoutMillis; } } public long getSharedBackupAgentTimeoutMillis() { synchronized (mLock) { + if (BackupManagerService.DEBUG_SCHEDULING) { + Slog.v( + TAG, + "getSharedBackupAgentTimeoutMillis(): " + mSharedBackupAgentTimeoutMillis); + } return mSharedBackupAgentTimeoutMillis; } } public long getRestoreAgentTimeoutMillis() { synchronized (mLock) { + if (BackupManagerService.DEBUG_SCHEDULING) { + Slog.v(TAG, "getRestoreAgentTimeoutMillis(): " + mRestoreAgentTimeoutMillis); + } return mRestoreAgentTimeoutMillis; } } public long getRestoreAgentFinishedTimeoutMillis() { synchronized (mLock) { + if (BackupManagerService.DEBUG_SCHEDULING) { + Slog.v( + TAG, + "getRestoreAgentFinishedTimeoutMillis(): " + + mRestoreAgentFinishedTimeoutMillis); + } return mRestoreAgentFinishedTimeoutMillis; } } diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java index d6f6c6cf1fc3a94466074ecd5fb8f227fad45c38..bd51af270dd86b3feb5a2fe1ad65021ea3cbb98c 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerService.java +++ b/services/backup/java/com/android/server/backup/BackupManagerService.java @@ -215,13 +215,6 @@ public class BackupManagerService implements BackupManagerServiceInterface { // Timeout interval for deciding that a bind or clear-data has taken too long private static final long TIMEOUT_INTERVAL = 10 * 1000; - // Timeout intervals for agent backup & restore operations - public static final long TIMEOUT_BACKUP_INTERVAL = 30 * 1000; - public static final long TIMEOUT_FULL_BACKUP_INTERVAL = 5 * 60 * 1000; - public static final long TIMEOUT_SHARED_BACKUP_INTERVAL = 30 * 60 * 1000; - public static final long TIMEOUT_RESTORE_INTERVAL = 60 * 1000; - public static final long TIMEOUT_RESTORE_FINISHED_INTERVAL = 30 * 1000; - // User confirmation timeout for a full backup/restore operation. It's this long in // order to give them time to enter the backup password. private static final long TIMEOUT_FULL_CONFIRMATION = 60 * 1000; @@ -232,6 +225,7 @@ public class BackupManagerService implements BackupManagerServiceInterface { private static final int BUSY_BACKOFF_FUZZ = 1000 * 60 * 60 * 2; // two hours private BackupManagerConstants mConstants; + private final BackupAgentTimeoutParameters mAgentTimeoutParameters; private Context mContext; private PackageManager mPackageManager; private IPackageManager mPackageManagerBinder; @@ -315,6 +309,10 @@ public class BackupManagerService implements BackupManagerServiceInterface { return mConstants; } + public BackupAgentTimeoutParameters getAgentTimeoutParameters() { + return mAgentTimeoutParameters; + } + public Context getContext() { return mContext; } @@ -799,6 +797,10 @@ public class BackupManagerService implements BackupManagerServiceInterface { mBackupManagerBinder = Trampoline.asInterface(parent.asBinder()); + mAgentTimeoutParameters = new + BackupAgentTimeoutParameters(Handler.getMain(), mContext.getContentResolver()); + mAgentTimeoutParameters.start(); + // spin up the backup/restore handler thread mBackupHandler = new BackupHandler(this, backupThread.getLooper()); @@ -3407,7 +3409,7 @@ public class BackupManagerService implements BackupManagerServiceInterface { } mActiveRestoreSession = new ActiveRestoreSession(this, packageName, transport); mBackupHandler.sendEmptyMessageDelayed(MSG_RESTORE_SESSION_TIMEOUT, - TIMEOUT_RESTORE_INTERVAL); + mAgentTimeoutParameters.getRestoreAgentTimeoutMillis()); } return mActiveRestoreSession; } diff --git a/services/backup/java/com/android/server/backup/BackupManagerServiceInterface.java b/services/backup/java/com/android/server/backup/BackupManagerServiceInterface.java index 7b021c64eaf8b4e25ec5f9d374c0e5910dbba223..aabe7f6118455554c01ac9cae67e5e3007f93ff2 100644 --- a/services/backup/java/com/android/server/backup/BackupManagerServiceInterface.java +++ b/services/backup/java/com/android/server/backup/BackupManagerServiceInterface.java @@ -191,4 +191,7 @@ public interface BackupManagerServiceInterface { void dump(FileDescriptor fd, PrintWriter pw, String[] args); IBackupManager getBackupManagerBinder(); + + // Gets access to the backup/restore agent timeout parameters. + BackupAgentTimeoutParameters getAgentTimeoutParameters(); } diff --git a/services/backup/java/com/android/server/backup/KeyValueAdbBackupEngine.java b/services/backup/java/com/android/server/backup/KeyValueAdbBackupEngine.java index 47558775d19e6ac78843829c972acb678ba338e4..7f0030a5064eba4c7ac1dfcc609da1bdae818dc2 100644 --- a/services/backup/java/com/android/server/backup/KeyValueAdbBackupEngine.java +++ b/services/backup/java/com/android/server/backup/KeyValueAdbBackupEngine.java @@ -4,8 +4,8 @@ import static android.os.ParcelFileDescriptor.MODE_CREATE; import static android.os.ParcelFileDescriptor.MODE_READ_ONLY; import static android.os.ParcelFileDescriptor.MODE_READ_WRITE; import static android.os.ParcelFileDescriptor.MODE_TRUNCATE; + import static com.android.server.backup.BackupManagerService.OP_TYPE_BACKUP_WAIT; -import static com.android.server.backup.BackupManagerService.TIMEOUT_BACKUP_INTERVAL; import android.app.ApplicationThreadConstants; import android.app.IBackupAgent; @@ -19,6 +19,7 @@ import android.os.RemoteException; import android.os.SELinux; import android.util.Slog; +import com.android.internal.util.Preconditions; import com.android.server.backup.utils.FullBackupUtils; import libcore.io.IoUtils; @@ -59,6 +60,7 @@ public class KeyValueAdbBackupEngine { private ParcelFileDescriptor mSavedState; private ParcelFileDescriptor mBackupData; private ParcelFileDescriptor mNewState; + private final BackupAgentTimeoutParameters mAgentTimeoutParameters; public KeyValueAdbBackupEngine(OutputStream output, PackageInfo packageInfo, BackupManagerServiceInterface backupManagerService, PackageManager packageManager, @@ -81,6 +83,9 @@ public class KeyValueAdbBackupEngine { pkg + BACKUP_KEY_VALUE_NEW_STATE_FILENAME_SUFFIX); mManifestFile = new File(mDataDir, BackupManagerService.BACKUP_MANIFEST_FILENAME); + mAgentTimeoutParameters = Preconditions.checkNotNull( + backupManagerService.getAgentTimeoutParameters(), + "Timeout parameters cannot be null"); } public void backupOnePackage() throws IOException { @@ -148,8 +153,9 @@ public class KeyValueAdbBackupEngine { // Return true on backup success, false otherwise private boolean invokeAgentForAdbBackup(String packageName, IBackupAgent agent) { int token = mBackupManagerService.generateRandomIntegerToken(); + long kvBackupAgentTimeoutMillis = mAgentTimeoutParameters.getKvBackupAgentTimeoutMillis(); try { - mBackupManagerService.prepareOperationTimeout(token, TIMEOUT_BACKUP_INTERVAL, null, + mBackupManagerService.prepareOperationTimeout(token, kvBackupAgentTimeoutMillis, null, OP_TYPE_BACKUP_WAIT); // Start backup and wait for BackupManagerService to get callback for success or timeout @@ -231,14 +237,14 @@ public class KeyValueAdbBackupEngine { } private void writeBackupData() throws IOException { - int token = mBackupManagerService.generateRandomIntegerToken(); + long kvBackupAgentTimeoutMillis = mAgentTimeoutParameters.getKvBackupAgentTimeoutMillis(); ParcelFileDescriptor[] pipes = null; try { pipes = ParcelFileDescriptor.createPipe(); - mBackupManagerService.prepareOperationTimeout(token, TIMEOUT_BACKUP_INTERVAL, null, + mBackupManagerService.prepareOperationTimeout(token, kvBackupAgentTimeoutMillis, null, OP_TYPE_BACKUP_WAIT); // We will have to create a runnable that will read the manifest and backup data we diff --git a/services/backup/java/com/android/server/backup/fullbackup/FullBackupEngine.java b/services/backup/java/com/android/server/backup/fullbackup/FullBackupEngine.java index 0582abac91d4d0eb3858e36f0e24428e2a2fb172..56946596eea316bfa3b1f005362a348d615baaef 100644 --- a/services/backup/java/com/android/server/backup/fullbackup/FullBackupEngine.java +++ b/services/backup/java/com/android/server/backup/fullbackup/FullBackupEngine.java @@ -25,9 +25,6 @@ import static com.android.server.backup.BackupManagerService.MORE_DEBUG; import static com.android.server.backup.BackupManagerService.OP_TYPE_BACKUP_WAIT; import static com.android.server.backup.BackupManagerService.SHARED_BACKUP_AGENT_PACKAGE; import static com.android.server.backup.BackupManagerService.TAG; -import static com.android.server.backup.BackupManagerService.TIMEOUT_FULL_BACKUP_INTERVAL; -import static com.android.server.backup.BackupManagerService - .TIMEOUT_SHARED_BACKUP_INTERVAL; import android.app.ApplicationThreadConstants; import android.app.IBackupAgent; @@ -44,9 +41,11 @@ import android.util.Log; import android.util.Slog; import android.util.StringBuilderPrinter; +import com.android.internal.util.Preconditions; import com.android.server.AppWidgetBackupBridge; -import com.android.server.backup.BackupRestoreTask; +import com.android.server.backup.BackupAgentTimeoutParameters; import com.android.server.backup.BackupManagerService; +import com.android.server.backup.BackupRestoreTask; import com.android.server.backup.utils.FullBackupUtils; import java.io.BufferedOutputStream; @@ -75,6 +74,7 @@ public class FullBackupEngine { private final long mQuota; private final int mOpToken; private final int mTransportFlags; + private final BackupAgentTimeoutParameters mAgentTimeoutParameters; class FullBackupRunner implements Runnable { @@ -137,8 +137,8 @@ public class FullBackupEngine { final boolean isSharedStorage = mPackage.packageName.equals(SHARED_BACKUP_AGENT_PACKAGE); final long timeout = isSharedStorage ? - TIMEOUT_SHARED_BACKUP_INTERVAL : - TIMEOUT_FULL_BACKUP_INTERVAL; + mAgentTimeoutParameters.getSharedBackupAgentTimeoutMillis() : + mAgentTimeoutParameters.getFullBackupAgentTimeoutMillis(); if (DEBUG) { Slog.d(TAG, "Calling doFullBackup() on " + mPackage.packageName); @@ -180,6 +180,9 @@ public class FullBackupEngine { mQuota = quota; mOpToken = opToken; mTransportFlags = transportFlags; + mAgentTimeoutParameters = Preconditions.checkNotNull( + backupManagerService.getAgentTimeoutParameters(), + "Timeout parameters cannot be null"); } public int preflightCheck() throws RemoteException { diff --git a/services/backup/java/com/android/server/backup/fullbackup/FullBackupObbConnection.java b/services/backup/java/com/android/server/backup/fullbackup/FullBackupObbConnection.java index 40b6967a729a0076d7b5df80c46dd26dcb448b09..bc7d9fc691dd5e2eb6d7046017d2505b83624513 100644 --- a/services/backup/java/com/android/server/backup/fullbackup/FullBackupObbConnection.java +++ b/services/backup/java/com/android/server/backup/fullbackup/FullBackupObbConnection.java @@ -19,7 +19,6 @@ package com.android.server.backup.fullbackup; import static com.android.server.backup.BackupManagerService.MORE_DEBUG; import static com.android.server.backup.BackupManagerService.OP_TYPE_BACKUP_WAIT; import static com.android.server.backup.BackupManagerService.TAG; -import static com.android.server.backup.BackupManagerService.TIMEOUT_FULL_BACKUP_INTERVAL; import android.app.backup.IBackupManager; import android.content.ComponentName; @@ -33,6 +32,8 @@ import android.os.UserHandle; import android.util.Slog; import com.android.internal.backup.IObbBackupService; +import com.android.internal.util.Preconditions; +import com.android.server.backup.BackupAgentTimeoutParameters; import com.android.server.backup.BackupManagerService; import com.android.server.backup.utils.FullBackupUtils; @@ -46,10 +47,14 @@ public class FullBackupObbConnection implements ServiceConnection { private BackupManagerService backupManagerService; volatile IObbBackupService mService; + private final BackupAgentTimeoutParameters mAgentTimeoutParameters; public FullBackupObbConnection(BackupManagerService backupManagerService) { this.backupManagerService = backupManagerService; mService = null; + mAgentTimeoutParameters = Preconditions.checkNotNull( + backupManagerService.getAgentTimeoutParameters(), + "Timeout parameters cannot be null"); } public void establish() { @@ -75,8 +80,10 @@ public class FullBackupObbConnection implements ServiceConnection { try { pipes = ParcelFileDescriptor.createPipe(); int token = backupManagerService.generateRandomIntegerToken(); + long fullBackupAgentTimeoutMillis = + mAgentTimeoutParameters.getFullBackupAgentTimeoutMillis(); backupManagerService.prepareOperationTimeout( - token, TIMEOUT_FULL_BACKUP_INTERVAL, null, OP_TYPE_BACKUP_WAIT); + token, fullBackupAgentTimeoutMillis, null, OP_TYPE_BACKUP_WAIT); mService.backupObbs(pkg.packageName, pipes[1], token, backupManagerService.getBackupManagerBinder()); FullBackupUtils.routeSocketDataToOutput(pipes[0], out); diff --git a/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java b/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java index 2c2dd8528cb11810a06ba979a4ed0c22fad0dd02..a40afc3cfa4db16378ce95fd23ccdf7ae5c30189 100644 --- a/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java +++ b/services/backup/java/com/android/server/backup/fullbackup/PerformFullTransportBackupTask.java @@ -22,7 +22,6 @@ import static com.android.server.backup.BackupManagerService.MORE_DEBUG; import static com.android.server.backup.BackupManagerService.OP_PENDING; import static com.android.server.backup.BackupManagerService.OP_TYPE_BACKUP; import static com.android.server.backup.BackupManagerService.OP_TYPE_BACKUP_WAIT; -import static com.android.server.backup.BackupManagerService.TIMEOUT_FULL_BACKUP_INTERVAL; import android.annotation.Nullable; import android.app.IBackupAgent; @@ -43,7 +42,9 @@ import android.util.Log; import android.util.Slog; import com.android.internal.backup.IBackupTransport; +import com.android.internal.util.Preconditions; import com.android.server.EventLogTags; +import com.android.server.backup.BackupAgentTimeoutParameters; import com.android.server.backup.BackupRestoreTask; import com.android.server.backup.FullBackupJob; import com.android.server.backup.BackupManagerService; @@ -146,6 +147,7 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba private volatile boolean mIsDoingBackup; private volatile boolean mCancelAll; private final int mCurrentOpToken; + private final BackupAgentTimeoutParameters mAgentTimeoutParameters; public PerformFullTransportBackupTask(BackupManagerService backupManagerService, TransportClient transportClient, @@ -167,6 +169,9 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba mUserInitiated = userInitiated; mCurrentOpToken = backupManagerService.generateRandomIntegerToken(); mBackupRunnerOpToken = backupManagerService.generateRandomIntegerToken(); + mAgentTimeoutParameters = Preconditions.checkNotNull( + backupManagerService.getAgentTimeoutParameters(), + "Timeout parameters cannot be null"); if (backupManagerService.isBackupOperationInProgress()) { if (DEBUG) { @@ -698,9 +703,11 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba @Override public int preflightFullBackup(PackageInfo pkg, IBackupAgent agent) { int result; + long fullBackupAgentTimeoutMillis = + mAgentTimeoutParameters.getFullBackupAgentTimeoutMillis(); try { backupManagerService.prepareOperationTimeout( - mCurrentOpToken, TIMEOUT_FULL_BACKUP_INTERVAL, this, OP_TYPE_BACKUP_WAIT); + mCurrentOpToken, fullBackupAgentTimeoutMillis, this, OP_TYPE_BACKUP_WAIT); backupManagerService.addBackupTrace("preflighting"); if (MORE_DEBUG) { Slog.d(TAG, "Preflighting full payload of " + pkg.packageName); @@ -713,7 +720,7 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba // timeout had been produced. In case of a real backstop timeout, mResult // will still contain the value it was constructed with, AGENT_ERROR, which // intentionaly falls into the "just report failure" code. - mLatch.await(TIMEOUT_FULL_BACKUP_INTERVAL, TimeUnit.MILLISECONDS); + mLatch.await(fullBackupAgentTimeoutMillis, TimeUnit.MILLISECONDS); long totalSize = mResult.get(); // If preflight timed out, mResult will contain error code as int. @@ -769,8 +776,10 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba @Override public long getExpectedSizeOrErrorCode() { + long fullBackupAgentTimeoutMillis = + mAgentTimeoutParameters.getFullBackupAgentTimeoutMillis(); try { - mLatch.await(TIMEOUT_FULL_BACKUP_INTERVAL, TimeUnit.MILLISECONDS); + mLatch.await(fullBackupAgentTimeoutMillis, TimeUnit.MILLISECONDS); return mResult.get(); } catch (InterruptedException e) { return BackupTransport.NO_MORE_DATA; @@ -863,8 +872,10 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba // If preflight succeeded, returns positive number - preflight size, // otherwise return negative error code. long getPreflightResultBlocking() { + long fullBackupAgentTimeoutMillis = + mAgentTimeoutParameters.getFullBackupAgentTimeoutMillis(); try { - mPreflightLatch.await(TIMEOUT_FULL_BACKUP_INTERVAL, TimeUnit.MILLISECONDS); + mPreflightLatch.await(fullBackupAgentTimeoutMillis, TimeUnit.MILLISECONDS); if (mIsCancelled) { return BackupManager.ERROR_BACKUP_CANCELLED; } @@ -879,8 +890,10 @@ public class PerformFullTransportBackupTask extends FullBackupTask implements Ba } int getBackupResultBlocking() { + long fullBackupAgentTimeoutMillis = + mAgentTimeoutParameters.getFullBackupAgentTimeoutMillis(); try { - mBackupLatch.await(TIMEOUT_FULL_BACKUP_INTERVAL, TimeUnit.MILLISECONDS); + mBackupLatch.await(fullBackupAgentTimeoutMillis, TimeUnit.MILLISECONDS); if (mIsCancelled) { return BackupManager.ERROR_BACKUP_CANCELLED; } diff --git a/services/backup/java/com/android/server/backup/internal/BackupHandler.java b/services/backup/java/com/android/server/backup/internal/BackupHandler.java index 136fada43b1fb36548c959342d709d833437e985..69f08ae49a2edc1c0f66a72d7d4823bc5cfd45dc 100644 --- a/services/backup/java/com/android/server/backup/internal/BackupHandler.java +++ b/services/backup/java/com/android/server/backup/internal/BackupHandler.java @@ -19,7 +19,6 @@ package com.android.server.backup.internal; import static com.android.server.backup.BackupManagerService.DEBUG; import static com.android.server.backup.BackupManagerService.MORE_DEBUG; import static com.android.server.backup.BackupManagerService.TAG; -import static com.android.server.backup.BackupManagerService.TIMEOUT_RESTORE_INTERVAL; import android.app.backup.RestoreSet; import android.content.Intent; @@ -33,7 +32,9 @@ import android.util.Pair; import android.util.Slog; import com.android.internal.backup.IBackupTransport; +import com.android.internal.util.Preconditions; import com.android.server.EventLogTags; +import com.android.server.backup.BackupAgentTimeoutParameters; import com.android.server.backup.BackupManagerService; import com.android.server.backup.BackupRestoreTask; import com.android.server.backup.DataChangedJournal; @@ -81,10 +82,14 @@ public class BackupHandler extends Handler { public static final int MSG_OP_COMPLETE = 21; private final BackupManagerService backupManagerService; + private final BackupAgentTimeoutParameters mAgentTimeoutParameters; public BackupHandler(BackupManagerService backupManagerService, Looper looper) { super(looper); this.backupManagerService = backupManagerService; + mAgentTimeoutParameters = Preconditions.checkNotNull( + backupManagerService.getAgentTimeoutParameters(), + "Timeout parameters cannot be null"); } public void handleMessage(Message msg) { @@ -322,7 +327,8 @@ public class BackupHandler extends Handler { // Done: reset the session timeout clock removeMessages(MSG_RESTORE_SESSION_TIMEOUT); - sendEmptyMessageDelayed(MSG_RESTORE_SESSION_TIMEOUT, TIMEOUT_RESTORE_INTERVAL); + sendEmptyMessageDelayed(MSG_RESTORE_SESSION_TIMEOUT, + mAgentTimeoutParameters.getRestoreAgentTimeoutMillis()); params.listener.onFinished(callerLogString); } diff --git a/services/backup/java/com/android/server/backup/internal/PerformBackupTask.java b/services/backup/java/com/android/server/backup/internal/PerformBackupTask.java index 11394e66a0f0ee3199fdf0617fd3b98990e5e701..ac605b1ddd699e2db89455fe41294540f52014be 100644 --- a/services/backup/java/com/android/server/backup/internal/PerformBackupTask.java +++ b/services/backup/java/com/android/server/backup/internal/PerformBackupTask.java @@ -24,7 +24,6 @@ import static com.android.server.backup.BackupManagerService.OP_PENDING; import static com.android.server.backup.BackupManagerService.OP_TYPE_BACKUP; import static com.android.server.backup.BackupManagerService.OP_TYPE_BACKUP_WAIT; import static com.android.server.backup.BackupManagerService.PACKAGE_MANAGER_SENTINEL; -import static com.android.server.backup.BackupManagerService.TIMEOUT_BACKUP_INTERVAL; import static com.android.server.backup.internal.BackupHandler.MSG_BACKUP_OPERATION_TIMEOUT; import static com.android.server.backup.internal.BackupHandler.MSG_BACKUP_RESTORE_STEP; @@ -55,8 +54,10 @@ import android.util.Slog; import com.android.internal.annotations.GuardedBy; import com.android.internal.backup.IBackupTransport; +import com.android.internal.util.Preconditions; import com.android.server.AppWidgetBackupBridge; import com.android.server.EventLogTags; +import com.android.server.backup.BackupAgentTimeoutParameters; import com.android.server.backup.BackupRestoreTask; import com.android.server.backup.DataChangedJournal; import com.android.server.backup.KeyValueBackupJob; @@ -142,6 +143,7 @@ public class PerformBackupTask implements BackupRestoreTask { private boolean mFinished; private final boolean mUserInitiated; private final boolean mNonIncremental; + private final BackupAgentTimeoutParameters mAgentTimeoutParameters; private volatile boolean mCancelAll; @@ -162,6 +164,9 @@ public class PerformBackupTask implements BackupRestoreTask { mPendingFullBackups = pendingFullBackups; mUserInitiated = userInitiated; mNonIncremental = nonIncremental; + mAgentTimeoutParameters = Preconditions.checkNotNull( + backupManagerService.getAgentTimeoutParameters(), + "Timeout parameters cannot be null"); mStateDir = new File(backupManagerService.getBaseStateDir(), dirName); mCurrentOpToken = backupManagerService.generateRandomIntegerToken(); @@ -711,8 +716,10 @@ public class PerformBackupTask implements BackupRestoreTask { // Initiate the target's backup pass backupManagerService.addBackupTrace("setting timeout"); + long kvBackupAgentTimeoutMillis = + mAgentTimeoutParameters.getKvBackupAgentTimeoutMillis(); backupManagerService.prepareOperationTimeout( - mEphemeralOpToken, TIMEOUT_BACKUP_INTERVAL, this, OP_TYPE_BACKUP_WAIT); + mEphemeralOpToken, kvBackupAgentTimeoutMillis, this, OP_TYPE_BACKUP_WAIT); backupManagerService.addBackupTrace("calling agent doBackup()"); agent.doBackup( diff --git a/services/backup/java/com/android/server/backup/restore/AdbRestoreFinishedLatch.java b/services/backup/java/com/android/server/backup/restore/AdbRestoreFinishedLatch.java index e4f3a9d5cd0a9bb22418135cd1ae3bc2fa115763..a8c7ce6ad8322bff801a495fd1441e33fd05a687 100644 --- a/services/backup/java/com/android/server/backup/restore/AdbRestoreFinishedLatch.java +++ b/services/backup/java/com/android/server/backup/restore/AdbRestoreFinishedLatch.java @@ -18,10 +18,11 @@ package com.android.server.backup.restore; import static com.android.server.backup.BackupManagerService.DEBUG; import static com.android.server.backup.BackupManagerService.MORE_DEBUG; -import static com.android.server.backup.BackupManagerService.TIMEOUT_FULL_BACKUP_INTERVAL; import android.util.Slog; +import com.android.internal.util.Preconditions; +import com.android.server.backup.BackupAgentTimeoutParameters; import com.android.server.backup.BackupManagerService; import com.android.server.backup.BackupRestoreTask; @@ -37,18 +38,24 @@ public class AdbRestoreFinishedLatch implements BackupRestoreTask { private BackupManagerService backupManagerService; final CountDownLatch mLatch; private final int mCurrentOpToken; + private final BackupAgentTimeoutParameters mAgentTimeoutParameters; public AdbRestoreFinishedLatch(BackupManagerService backupManagerService, int currentOpToken) { this.backupManagerService = backupManagerService; mLatch = new CountDownLatch(1); mCurrentOpToken = currentOpToken; + mAgentTimeoutParameters = Preconditions.checkNotNull( + backupManagerService.getAgentTimeoutParameters(), + "Timeout parameters cannot be null"); } void await() { boolean latched = false; + long fullBackupAgentTimeoutMillis = + mAgentTimeoutParameters.getFullBackupAgentTimeoutMillis(); try { - latched = mLatch.await(TIMEOUT_FULL_BACKUP_INTERVAL, TimeUnit.MILLISECONDS); + latched = mLatch.await(fullBackupAgentTimeoutMillis, TimeUnit.MILLISECONDS); } catch (InterruptedException e) { Slog.w(TAG, "Interrupted!"); } diff --git a/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java b/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java index c1a1c1dc10e7c884298592cef2f70d3faa9f6c5c..6bc7530008378946cec344265e02ef98a3c99400 100644 --- a/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java +++ b/services/backup/java/com/android/server/backup/restore/FullRestoreEngine.java @@ -23,9 +23,6 @@ import static com.android.server.backup.BackupManagerService.MORE_DEBUG; import static com.android.server.backup.BackupManagerService.OP_TYPE_RESTORE_WAIT; import static com.android.server.backup.BackupManagerService.SHARED_BACKUP_AGENT_PACKAGE; import static com.android.server.backup.BackupManagerService.TAG; -import static com.android.server.backup.BackupManagerService.TIMEOUT_RESTORE_INTERVAL; -import static com.android.server.backup.BackupManagerService - .TIMEOUT_SHARED_BACKUP_INTERVAL; import static com.android.server.backup.internal.BackupHandler.MSG_RESTORE_OPERATION_TIMEOUT; import android.app.ApplicationThreadConstants; @@ -40,13 +37,17 @@ import android.content.pm.PackageManagerInternal; import android.content.pm.Signature; import android.os.ParcelFileDescriptor; import android.os.RemoteException; +import android.provider.Settings; +import android.text.TextUtils; import android.util.Slog; +import com.android.internal.util.Preconditions; import com.android.server.LocalServices; +import com.android.server.backup.BackupAgentTimeoutParameters; +import com.android.server.backup.BackupManagerService; import com.android.server.backup.BackupRestoreTask; import com.android.server.backup.FileMetadata; import com.android.server.backup.KeyValueAdbRestoreEngine; -import com.android.server.backup.BackupManagerService; import com.android.server.backup.fullbackup.FullBackupObbConnection; import com.android.server.backup.utils.BytesReadListener; import com.android.server.backup.utils.FullBackupRestoreObserverUtils; @@ -56,8 +57,11 @@ import com.android.server.backup.utils.TarBackupReader; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; +import java.util.ArrayList; +import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; +import java.util.List; /** * Full restore engine, used by both adb restore and transport-based full restore. @@ -121,6 +125,8 @@ public class FullRestoreEngine extends RestoreEngine { final int mEphemeralOpToken; + private final BackupAgentTimeoutParameters mAgentTimeoutParameters; + public FullRestoreEngine(BackupManagerService backupManagerService, BackupRestoreTask monitorTask, IFullBackupRestoreObserver observer, IBackupManagerMonitor monitor, PackageInfo onlyPackage, boolean allowApks, @@ -135,6 +141,9 @@ public class FullRestoreEngine extends RestoreEngine { mAllowObbs = allowObbs; mBuffer = new byte[32 * 1024]; mBytes = 0; + mAgentTimeoutParameters = Preconditions.checkNotNull( + backupManagerService.getAgentTimeoutParameters(), + "Timeout parameters cannot be null"); } public IBackupAgent getAgent() { @@ -320,12 +329,17 @@ public class FullRestoreEngine extends RestoreEngine { pkg, 0); // If we haven't sent any data to this app yet, we probably - // need to clear it first. Check that. + // need to clear it first. Check that. if (!mClearedPackages.contains(pkg)) { - // apps with their own backup agents are - // responsible for coherently managing a full - // restore. - if (mTargetApp.backupAgentName == null) { + // Apps with their own backup agents are responsible for coherently + // managing a full restore. + // In some rare cases they can't, especially in case of deferred + // restore. In this case check whether this app should be forced to + // clear up. + // TODO: Fix this properly with manifest parameter. + boolean forceClear = shouldForceClearAppDataOnFullRestore( + mTargetApp.packageName); + if (mTargetApp.backupAgentName == null || forceClear) { if (DEBUG) { Slog.d(TAG, "Clearing app data preparatory to full restore"); @@ -381,8 +395,8 @@ public class FullRestoreEngine extends RestoreEngine { long toCopy = info.size; final boolean isSharedStorage = pkg.equals(SHARED_BACKUP_AGENT_PACKAGE); final long timeout = isSharedStorage ? - TIMEOUT_SHARED_BACKUP_INTERVAL : - TIMEOUT_RESTORE_INTERVAL; + mAgentTimeoutParameters.getSharedBackupAgentTimeoutMillis() : + mAgentTimeoutParameters.getRestoreAgentTimeoutMillis(); try { mBackupManagerService.prepareOperationTimeout(token, timeout, @@ -623,6 +637,24 @@ public class FullRestoreEngine extends RestoreEngine { return true; } + /** + * Returns whether the package is in the list of the packages for which clear app data should + * be called despite the fact that they have backup agent. + * + *

        The list is read from {@link Settings.Secure.PACKAGES_TO_CLEAR_DATA_BEFORE_FULL_RESTORE}. + */ + private boolean shouldForceClearAppDataOnFullRestore(String packageName) { + String packageListString = Settings.Secure.getString( + mBackupManagerService.getContext().getContentResolver(), + Settings.Secure.PACKAGES_TO_CLEAR_DATA_BEFORE_FULL_RESTORE); + if (TextUtils.isEmpty(packageListString)) { + return false; + } + + List packages = Arrays.asList(packageListString.split(";")); + return packages.contains(packageName); + } + void sendOnRestorePackage(String name) { if (mObserver != null) { try { diff --git a/services/backup/java/com/android/server/backup/restore/PerformAdbRestoreTask.java b/services/backup/java/com/android/server/backup/restore/PerformAdbRestoreTask.java index dacde0b9af6801e8d262a7454dad20080c7be2dc..77163d348e1cda7dd838ee3acbd8ab15c223b7f1 100644 --- a/services/backup/java/com/android/server/backup/restore/PerformAdbRestoreTask.java +++ b/services/backup/java/com/android/server/backup/restore/PerformAdbRestoreTask.java @@ -16,8 +16,6 @@ package com.android.server.backup.restore; -import static com.android.server.backup.BackupPasswordManager.PBKDF_CURRENT; -import static com.android.server.backup.BackupPasswordManager.PBKDF_FALLBACK; import static com.android.server.backup.BackupManagerService.BACKUP_FILE_HEADER_MAGIC; import static com.android.server.backup.BackupManagerService.BACKUP_FILE_VERSION; import static com.android.server.backup.BackupManagerService.BACKUP_MANIFEST_FILENAME; @@ -28,8 +26,8 @@ import static com.android.server.backup.BackupManagerService.OP_TYPE_RESTORE_WAI import static com.android.server.backup.BackupManagerService.SETTINGS_PACKAGE; import static com.android.server.backup.BackupManagerService.SHARED_BACKUP_AGENT_PACKAGE; import static com.android.server.backup.BackupManagerService.TAG; -import static com.android.server.backup.BackupManagerService.TIMEOUT_FULL_BACKUP_INTERVAL; -import static com.android.server.backup.BackupManagerService.TIMEOUT_RESTORE_INTERVAL; +import static com.android.server.backup.BackupPasswordManager.PBKDF_CURRENT; +import static com.android.server.backup.BackupPasswordManager.PBKDF_FALLBACK; import static com.android.server.backup.internal.BackupHandler.MSG_RESTORE_OPERATION_TIMEOUT; import android.app.ApplicationThreadConstants; @@ -48,7 +46,9 @@ import android.os.RemoteException; import android.util.Slog; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.util.Preconditions; import com.android.server.LocalServices; +import com.android.server.backup.BackupAgentTimeoutParameters; import com.android.server.backup.BackupManagerService; import com.android.server.backup.FileMetadata; import com.android.server.backup.KeyValueAdbRestoreEngine; @@ -101,6 +101,7 @@ public class PerformAdbRestoreTask implements Runnable { private byte[] mWidgetData = null; private long mBytes; + private final BackupAgentTimeoutParameters mAgentTimeoutParameters; // Runner that can be placed on a separate thread to do in-process invocation // of the "restore finished" API asynchronously. Used by adb restore. @@ -155,6 +156,9 @@ public class PerformAdbRestoreTask implements Runnable { mAgentPackage = null; mTargetApp = null; mObbConnection = new FullBackupObbConnection(backupManagerService); + mAgentTimeoutParameters = Preconditions.checkNotNull( + backupManagerService.getAgentTimeoutParameters(), + "Timeout parameters cannot be null"); // Which packages we've already wiped data on. We prepopulate this // with a whitelist of packages known to be unclearable. @@ -643,9 +647,11 @@ public class PerformAdbRestoreTask implements Runnable { if (okay) { boolean agentSuccess = true; long toCopy = info.size; + long restoreAgentTimeoutMillis = + mAgentTimeoutParameters.getRestoreAgentTimeoutMillis(); try { mBackupManagerService.prepareOperationTimeout( - token, TIMEOUT_RESTORE_INTERVAL, null, OP_TYPE_RESTORE_WAIT); + token, restoreAgentTimeoutMillis, null, OP_TYPE_RESTORE_WAIT); if (FullBackup.OBB_TREE_TOKEN.equals(info.domain)) { if (DEBUG) { @@ -820,10 +826,12 @@ public class PerformAdbRestoreTask implements Runnable { // In the adb restore case, we do restore-finished here if (doRestoreFinished) { final int token = mBackupManagerService.generateRandomIntegerToken(); + long fullBackupAgentTimeoutMillis = + mAgentTimeoutParameters.getFullBackupAgentTimeoutMillis(); final AdbRestoreFinishedLatch latch = new AdbRestoreFinishedLatch( mBackupManagerService, token); mBackupManagerService.prepareOperationTimeout( - token, TIMEOUT_FULL_BACKUP_INTERVAL, latch, OP_TYPE_RESTORE_WAIT); + token, fullBackupAgentTimeoutMillis, latch, OP_TYPE_RESTORE_WAIT); if (mTargetApp.processName.equals("system")) { if (MORE_DEBUG) { Slog.d(TAG, "system agent - restoreFinished on thread"); diff --git a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java index 4b467e5a0399cc2a64bbab8e586df02f4fbcc818..12d72d8a4637b2fda4f4e973ca8f32e49e983e15 100644 --- a/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java +++ b/services/backup/java/com/android/server/backup/restore/PerformUnifiedRestoreTask.java @@ -23,9 +23,6 @@ import static com.android.server.backup.BackupManagerService.OP_TYPE_RESTORE_WAI import static com.android.server.backup.BackupManagerService.PACKAGE_MANAGER_SENTINEL; import static com.android.server.backup.BackupManagerService.SETTINGS_PACKAGE; import static com.android.server.backup.BackupManagerService.TAG; -import static com.android.server.backup.BackupManagerService - .TIMEOUT_RESTORE_FINISHED_INTERVAL; -import static com.android.server.backup.BackupManagerService.TIMEOUT_RESTORE_INTERVAL; import static com.android.server.backup.internal.BackupHandler.MSG_BACKUP_RESTORE_STEP; import static com.android.server.backup.internal.BackupHandler.MSG_RESTORE_OPERATION_TIMEOUT; import static com.android.server.backup.internal.BackupHandler.MSG_RESTORE_SESSION_TIMEOUT; @@ -56,9 +53,11 @@ import android.util.EventLog; import android.util.Slog; import com.android.internal.backup.IBackupTransport; +import com.android.internal.util.Preconditions; import com.android.server.AppWidgetBackupBridge; import com.android.server.EventLogTags; import com.android.server.LocalServices; +import com.android.server.backup.BackupAgentTimeoutParameters; import com.android.server.backup.BackupRestoreTask; import com.android.server.backup.BackupUtils; import com.android.server.backup.PackageManagerBackupAgent; @@ -160,6 +159,7 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { ParcelFileDescriptor mNewState; private final int mEphemeralOpToken; + private final BackupAgentTimeoutParameters mAgentTimeoutParameters; // This task can assume that the wakelock is properly held for it and doesn't have to worry // about releasing it. @@ -190,6 +190,9 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { mFinished = false; mDidLaunch = false; mListener = listener; + mAgentTimeoutParameters = Preconditions.checkNotNull( + backupManagerService.getAgentTimeoutParameters(), + "Timeout parameters cannot be null"); if (targetPackage != null) { // Single package restore @@ -760,8 +763,9 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { // Kick off the restore, checking for hung agents. The timeout or // the operationComplete() callback will schedule the next step, // so we do not do that here. + long restoreAgentTimeoutMillis = mAgentTimeoutParameters.getRestoreAgentTimeoutMillis(); backupManagerService.prepareOperationTimeout( - mEphemeralOpToken, TIMEOUT_RESTORE_INTERVAL, this, OP_TYPE_RESTORE_WAIT); + mEphemeralOpToken, restoreAgentTimeoutMillis, this, OP_TYPE_RESTORE_WAIT); mAgent.doRestore(mBackupData, appVersionCode, mNewState, mEphemeralOpToken, backupManagerService.getBackupManagerBinder()); } catch (Exception e) { @@ -813,9 +817,11 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { Slog.d(TAG, "restoreFinished packageName=" + mCurrentPackage.packageName); } try { + long restoreAgentFinishedTimeoutMillis = + mAgentTimeoutParameters.getRestoreAgentFinishedTimeoutMillis(); backupManagerService .prepareOperationTimeout(mEphemeralOpToken, - TIMEOUT_RESTORE_FINISHED_INTERVAL, this, + restoreAgentFinishedTimeoutMillis, this, OP_TYPE_RESTORE_WAIT); mAgent.doRestoreFinished(mEphemeralOpToken, backupManagerService.getBackupManagerBinder()); @@ -1109,9 +1115,10 @@ public class PerformUnifiedRestoreTask implements BackupRestoreTask { } else { // We were invoked via an active restore session, not by the Package // Manager, so start up the session timeout again. + long restoreAgentTimeoutMillis = mAgentTimeoutParameters.getRestoreAgentTimeoutMillis(); backupManagerService.getBackupHandler().sendEmptyMessageDelayed( MSG_RESTORE_SESSION_TIMEOUT, - TIMEOUT_RESTORE_INTERVAL); + restoreAgentTimeoutMillis); } // Kick off any work that may be needed regarding app widget restores diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java index f6ff359d8c1925b69607ea6e80a64a1174674fab..40f947607b1ea3fb76444c8e18cc767101b17513 100644 --- a/services/core/java/com/android/server/InputMethodManagerService.java +++ b/services/core/java/com/android/server/InputMethodManagerService.java @@ -266,9 +266,9 @@ public class InputMethodManagerService extends IInputMethodManager.Stub @GuardedBy("LOCK") private boolean mValue; - public DebugFlag(String key) { + public DebugFlag(String key, boolean defaultValue) { mKey = key; - refresh(); + mValue = SystemProperties.getBoolean(key, defaultValue); } void refresh() { @@ -290,7 +290,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub */ private static final class DebugFlags { static final DebugFlag FLAG_OPTIMIZE_START_INPUT = - new DebugFlag("debug.optimize_startinput"); + new DebugFlag("debug.optimize_startinput", false); } diff --git a/services/core/java/com/android/server/IpSecService.java b/services/core/java/com/android/server/IpSecService.java index d09a161d1ef4788abb8eca80992d1fb08481549d..bde6bd8db6fd6ba7a577aead810307edcab796e9 100644 --- a/services/core/java/com/android/server/IpSecService.java +++ b/services/core/java/com/android/server/IpSecService.java @@ -931,7 +931,7 @@ public class IpSecService extends IIpSecService.Stub { return mPort; } - public FileDescriptor getSocket() { + public FileDescriptor getFileDescriptor() { return mSocket; } @@ -1065,7 +1065,10 @@ public class IpSecService extends IIpSecService.Stub { public synchronized IpSecSpiResponse allocateSecurityParameterIndex( String destinationAddress, int requestedSpi, IBinder binder) throws RemoteException { checkInetAddress(destinationAddress); - /* requestedSpi can be anything in the int range, so no check is needed. */ + // RFC 4303 Section 2.1 - 0=local, 1-255=reserved. + if (requestedSpi > 0 && requestedSpi < 256) { + throw new IllegalArgumentException("ESP SPI must not be in the range of 0-255."); + } checkNotNull(binder, "Null Binder passed to allocateSecurityParameterIndex"); UserRecord userRecord = mUserResourceTracker.getUserRecord(Binder.getCallingUid()); diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index e3584e639abcc4155901318ac57cb21181477a9f..76d26a8a2d92478467b29c28d9ba4f932ccd4e66 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -2873,13 +2873,15 @@ public class ActivityManagerService extends IActivityManager.Stub } /** - * Encapsulates the globla setting "hidden_api_blacklist_exemptions", including tracking the + * Encapsulates the global setting "hidden_api_blacklist_exemptions", including tracking the * latest value via a content observer. */ static class HiddenApiBlacklist extends ContentObserver { private final Context mContext; private boolean mBlacklistDisabled; + private String mExemptionsStr; + private List mExemptions = Collections.emptyList(); public HiddenApiBlacklist(Handler handler, Context context) { super(handler); @@ -2895,8 +2897,22 @@ public class ActivityManagerService extends IActivityManager.Stub } private void update() { - mBlacklistDisabled = "*".equals(Settings.Global.getString(mContext.getContentResolver(), - Settings.Global.HIDDEN_API_BLACKLIST_EXEMPTIONS)); + String exemptions = Settings.Global.getString(mContext.getContentResolver(), + Settings.Global.HIDDEN_API_BLACKLIST_EXEMPTIONS); + if (!TextUtils.equals(exemptions, mExemptionsStr)) { + mExemptionsStr = exemptions; + if ("*".equals(exemptions)) { + mBlacklistDisabled = true; + mExemptions = Collections.emptyList(); + } else { + mBlacklistDisabled = false; + mExemptions = TextUtils.isEmpty(exemptions) + ? Collections.emptyList() + : Arrays.asList(exemptions.split(",")); + } + zygoteProcess.setApiBlacklistExemptions(mExemptions); + } + } boolean isDisabled() { @@ -4477,8 +4493,8 @@ public class ActivityManagerService extends IActivityManager.Stub StatsLog.write(StatsLog.ACTIVITY_FOREGROUND_STATE_CHANGED, component.app.uid, component.realActivity.getPackageName(), component.realActivity.getShortClassName(), resumed ? - StatsLog.ACTIVITY_FOREGROUND_STATE_CHANGED__ACTIVITY__MOVE_TO_FOREGROUND : - StatsLog.ACTIVITY_FOREGROUND_STATE_CHANGED__ACTIVITY__MOVE_TO_BACKGROUND); + StatsLog.ACTIVITY_FOREGROUND_STATE_CHANGED__STATE__FOREGROUND : + StatsLog.ACTIVITY_FOREGROUND_STATE_CHANGED__STATE__BACKGROUND); if (resumed) { if (mUsageStatsService != null) { mUsageStatsService.reportEvent(component.realActivity, component.userId, @@ -13163,10 +13179,6 @@ public class ActivityManagerService extends IActivityManager.Stub + android.Manifest.permission.SHUTDOWN); } - // TODO: Where should the corresponding '1' (start) write go? - StatsLog.write(StatsLog.DEVICE_ON_STATUS_CHANGED, - StatsLog.DEVICE_ON_STATUS_CHANGED__STATE__OFF); - boolean timedout = false; synchronized(this) { @@ -14814,7 +14826,7 @@ public class ActivityManagerService extends IActivityManager.Stub .setPackage("android") .addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); broadcastIntent(null, intent, null, null, 0, null, null, null, - OP_NONE, null, true, false, UserHandle.USER_ALL); + OP_NONE, null, false, false, UserHandle.USER_ALL); } finally { Binder.restoreCallingIdentity(ident); } @@ -15181,6 +15193,12 @@ public class ActivityManagerService extends IActivityManager.Stub crashInfo.throwFileName, crashInfo.throwLineNumber); + StatsLog.write(StatsLog.APP_CRASH_OCCURRED, + Binder.getCallingUid(), + eventType, + processName, + Binder.getCallingPid()); + addErrorToDropBox(eventType, r, processName, null, null, null, null, null, crashInfo); mAppErrors.crashApplication(r, crashInfo); @@ -15351,6 +15369,9 @@ public class ActivityManagerService extends IActivityManager.Stub EventLog.writeEvent(EventLogTags.AM_WTF, UserHandle.getUserId(callingUid), callingPid, processName, r == null ? -1 : r.info.flags, tag, crashInfo.exceptionMessage); + StatsLog.write(StatsLog.WTF_OCCURRED, callingUid, tag, processName, + callingPid); + addErrorToDropBox("wtf", r, processName, null, null, tag, null, null, crashInfo); return r; @@ -15472,19 +15493,6 @@ public class ActivityManagerService extends IActivityManager.Stub final String dropboxTag = processClass(process) + "_" + eventType; if (dbox == null || !dbox.isTagEnabled(dropboxTag)) return; - // Log to StatsLog before the rate-limiting. - // The logging below is adapated from appendDropboxProcessHeaders. - StatsLog.write(StatsLog.DROPBOX_ERROR_CHANGED, - process != null ? process.uid : -1, - dropboxTag, - processName, - process != null ? process.pid : -1, - (process != null && process.info != null) ? - (process.info.isInstantApp() ? 1 : 0) : -1, - activity != null ? activity.shortComponentName : null, - activity != null ? activity.packageName : null, - process != null ? (process.isInterestingToUserLocked() ? 1 : 0) : -1); - // Rate-limit how often we're willing to do the heavy lifting below to // collect and record logs; currently 5 logs per 10 second period. final long now = SystemClock.elapsedRealtime(); @@ -19764,6 +19772,7 @@ public class ActivityManagerService extends IActivityManager.Stub catPw.flush(); } dropBuilder.append(catSw.toString()); + StatsLog.write(StatsLog.LOW_MEM_REPORTED); addErrorToDropBox("lowmem", null, "system_server", null, null, tag.toString(), dropBuilder.toString(), null, null); //Slog.i(TAG, "Sent to dropbox:"); @@ -20920,8 +20929,16 @@ public class ActivityManagerService extends IActivityManager.Stub // explicitly list each action as a protected broadcast, so we will check for that // one safe case and allow it: an explicit broadcast, only being received by something // that has protected itself. - if (receivers != null && receivers.size() > 0 - && (intent.getPackage() != null || intent.getComponent() != null)) { + if (intent.getPackage() != null || intent.getComponent() != null) { + if (receivers == null || receivers.size() == 0) { + // Intent is explicit and there's no receivers. + // This happens, e.g. , when a system component sends a broadcast to + // its own runtime receiver, and there's no manifest receivers for it, + // because this method is called twice for each broadcast, + // for runtime receivers and manifest receivers and the later check would find + // no receivers. + return; + } boolean allProtected = true; for (int i = receivers.size()-1; i >= 0; i--) { Object target = receivers.get(i); diff --git a/services/core/java/com/android/server/am/ActivityMetricsLogger.java b/services/core/java/com/android/server/am/ActivityMetricsLogger.java index 724dd3fd984758aedc7f33d1c4b4f71d1597826a..47d0423550c4f591192931fbbddc951911053919 100644 --- a/services/core/java/com/android/server/am/ActivityMetricsLogger.java +++ b/services/core/java/com/android/server/am/ActivityMetricsLogger.java @@ -489,7 +489,7 @@ class ActivityMetricsLogger { builder.addTaggedData(FIELD_CLASS_NAME, info.launchedActivity.info.name); mMetricsLogger.write(builder); StatsLog.write( - StatsLog.APP_START_CANCEL_CHANGED, + StatsLog.APP_START_CANCELED, info.launchedActivity.appInfo.uid, info.launchedActivity.packageName, convertAppStartTransitionType(type), @@ -561,7 +561,7 @@ class ActivityMetricsLogger { packageOptimizationInfo.getCompilationFilter()); mMetricsLogger.write(builder); StatsLog.write( - StatsLog.APP_START_CHANGED, + StatsLog.APP_START_OCCURRED, info.applicationInfo.uid, info.packageName, convertAppStartTransitionType(info.type), @@ -582,15 +582,15 @@ class ActivityMetricsLogger { private int convertAppStartTransitionType(int tronType) { if (tronType == TYPE_TRANSITION_COLD_LAUNCH) { - return StatsLog.APP_START_CHANGED__TYPE__COLD; + return StatsLog.APP_START_OCCURRED__TYPE__COLD; } if (tronType == TYPE_TRANSITION_WARM_LAUNCH) { - return StatsLog.APP_START_CHANGED__TYPE__WARM; + return StatsLog.APP_START_OCCURRED__TYPE__WARM; } if (tronType == TYPE_TRANSITION_HOT_LAUNCH) { - return StatsLog.APP_START_CHANGED__TYPE__HOT; + return StatsLog.APP_START_OCCURRED__TYPE__HOT; } - return StatsLog.APP_START_CHANGED__TYPE__APP_START_TRANSITION_TYPE_UNKNOWN; + return StatsLog.APP_START_OCCURRED__TYPE__UNKNOWN; } void logAppTransitionReportedDrawn(ActivityRecord r, boolean restoredFromBundle) { @@ -611,12 +611,12 @@ class ActivityMetricsLogger { info.currentTransitionProcessRunning ? 1 : 0); mMetricsLogger.write(builder); StatsLog.write( - StatsLog.APP_START_FULLY_DRAWN_CHANGED, + StatsLog.APP_START_FULLY_DRAWN, info.launchedActivity.appInfo.uid, info.launchedActivity.packageName, restoredFromBundle - ? StatsLog.APP_START_FULLY_DRAWN_CHANGED__TYPE__WITH_BUNDLE - : StatsLog.APP_START_FULLY_DRAWN_CHANGED__TYPE__WITHOUT_BUNDLE, + ? StatsLog.APP_START_FULLY_DRAWN__TYPE__WITH_BUNDLE + : StatsLog.APP_START_FULLY_DRAWN__TYPE__WITHOUT_BUNDLE, info.launchedActivity.info.name, info.currentTransitionProcessRunning, startupTimeMs); diff --git a/services/core/java/com/android/server/am/AppErrors.java b/services/core/java/com/android/server/am/AppErrors.java index b2872e4d7f5a62c8ed6b233a06c2237ea30e0951..7ee20fa2501cf59d55c8353548569640203746c8 100644 --- a/services/core/java/com/android/server/am/AppErrors.java +++ b/services/core/java/com/android/server/am/AppErrors.java @@ -47,6 +47,7 @@ import android.util.ArraySet; import android.util.EventLog; import android.util.Log; import android.util.Slog; +import android.util.StatsLog; import android.util.SparseArray; import android.util.TimeUtils; import android.util.proto.ProtoOutputStream; @@ -1039,6 +1040,8 @@ class AppErrors { Process.sendSignal(app.pid, Process.SIGNAL_QUIT); } + StatsLog.write(StatsLog.ANR_OCCURRED, app.uid, app.processName, + activity == null ? "unknown": activity.shortComponentName, annotation); mService.addErrorToDropBox("anr", app, app.processName, activity, parent, annotation, cpuInfo, tracesFile, null); diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java index b338029d4e869ec750e979f55681661718428207..8ecd93e65b08014f71ddb71118e8c3df85c97883 100644 --- a/services/core/java/com/android/server/am/BatteryStatsService.java +++ b/services/core/java/com/android/server/am/BatteryStatsService.java @@ -337,7 +337,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub synchronized (mStats) { mStats.noteProcessStartLocked(name, uid); StatsLog.write(StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED, uid, name, - StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED__EVENT__PROCESS_STARTED); + StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED__STATE__STARTED); } } @@ -345,15 +345,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub synchronized (mStats) { mStats.noteProcessCrashLocked(name, uid); StatsLog.write(StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED, uid, name, - StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED__EVENT__PROCESS_CRASHED); + StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED__STATE__CRASHED); } } void noteProcessAnr(String name, int uid) { synchronized (mStats) { mStats.noteProcessAnrLocked(name, uid); - StatsLog.write(StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED, uid, name, - StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED__EVENT__PROCESS_ANRED); } } @@ -361,7 +359,7 @@ public final class BatteryStatsService extends IBatteryStats.Stub synchronized (mStats) { mStats.noteProcessFinishLocked(name, uid); StatsLog.write(StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED, uid, name, - StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED__EVENT__PROCESS_FINISHED); + StatsLog.PROCESS_LIFE_CYCLE_STATE_CHANGED__STATE__FINISHED); } } @@ -768,8 +766,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub enforceCallingPermission(); synchronized (mStats) { mStats.noteVideoOnLocked(uid); - StatsLog.write_non_chained(StatsLog.MEDIA_CODEC_ACTIVITY_CHANGED, uid, null, - StatsLog.MEDIA_CODEC_ACTIVITY_CHANGED__STATE__ON); + StatsLog.write_non_chained(StatsLog.MEDIA_CODEC_STATE_CHANGED, uid, null, + StatsLog.MEDIA_CODEC_STATE_CHANGED__STATE__ON); } } @@ -777,8 +775,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub enforceCallingPermission(); synchronized (mStats) { mStats.noteVideoOffLocked(uid); - StatsLog.write_non_chained(StatsLog.MEDIA_CODEC_ACTIVITY_CHANGED, uid, - null, StatsLog.MEDIA_CODEC_ACTIVITY_CHANGED__STATE__OFF); + StatsLog.write_non_chained(StatsLog.MEDIA_CODEC_STATE_CHANGED, uid, + null, StatsLog.MEDIA_CODEC_STATE_CHANGED__STATE__OFF); } } @@ -795,8 +793,8 @@ public final class BatteryStatsService extends IBatteryStats.Stub enforceCallingPermission(); synchronized (mStats) { mStats.noteResetVideoLocked(); - StatsLog.write_non_chained(StatsLog.MEDIA_CODEC_ACTIVITY_CHANGED, -1, null, - StatsLog.MEDIA_CODEC_ACTIVITY_CHANGED__STATE__RESET); + StatsLog.write_non_chained(StatsLog.MEDIA_CODEC_STATE_CHANGED, -1, null, + StatsLog.MEDIA_CODEC_STATE_CHANGED__STATE__RESET); } } diff --git a/services/core/java/com/android/server/am/LockTaskController.java b/services/core/java/com/android/server/am/LockTaskController.java index 106b37f819c3fc7dd0ea50bbbd52bc2188823a60..bef650b90f4436573785f418fc024268ee87d0a4 100644 --- a/services/core/java/com/android/server/am/LockTaskController.java +++ b/services/core/java/com/android/server/am/LockTaskController.java @@ -285,6 +285,16 @@ public class LockTaskController { return false; } + /** + * @return the root task of the lock task. + */ + TaskRecord getRootTask() { + if (mLockTaskModeTasks.isEmpty()) { + return null; + } + return mLockTaskModeTasks.get(0); + } + private boolean isLockTaskModeViolationInternal(TaskRecord task, boolean isNewClearTask) { // TODO: Double check what's going on here. If the task is already in lock task mode, it's // likely whitelisted, so will return false below. diff --git a/services/core/java/com/android/server/am/RecentTasks.java b/services/core/java/com/android/server/am/RecentTasks.java index fcf00ce79ea914dd59c3d6aff883c5a481bdcfa2..1d305fb4248f1f44a1e52e57de2c7532a171b4eb 100644 --- a/services/core/java/com/android/server/am/RecentTasks.java +++ b/services/core/java/com/android/server/am/RecentTasks.java @@ -1155,6 +1155,11 @@ class RecentTasks { } } + // If we're in lock task mode, ignore the root task + if (task == mService.mLockTaskController.getRootTask()) { + return false; + } + return true; } diff --git a/services/core/java/com/android/server/am/RecentsAnimation.java b/services/core/java/com/android/server/am/RecentsAnimation.java index 73a7c3eb32a5e992b4e4ff30d10b93b23b47e94f..9df321c64c9a8b6e6b3fb9b562f4718822aababb 100644 --- a/services/core/java/com/android/server/am/RecentsAnimation.java +++ b/services/core/java/com/android/server/am/RecentsAnimation.java @@ -42,18 +42,13 @@ import com.android.server.wm.WindowManagerService; class RecentsAnimation implements RecentsAnimationCallbacks { private static final String TAG = RecentsAnimation.class.getSimpleName(); - private static final int RECENTS_ANIMATION_TIMEOUT = 10 * 1000; - private final ActivityManagerService mService; private final ActivityStackSupervisor mStackSupervisor; private final ActivityStartController mActivityStartController; private final WindowManagerService mWindowManager; private final UserController mUserController; - private final Handler mHandler; private final int mCallingPid; - private final Runnable mCancelAnimationRunnable; - // The stack to restore the home stack behind when the animation is finished private ActivityStack mRestoreHomeBehindStack; @@ -63,16 +58,9 @@ class RecentsAnimation implements RecentsAnimationCallbacks { mService = am; mStackSupervisor = stackSupervisor; mActivityStartController = activityStartController; - mHandler = new Handler(mStackSupervisor.mLooper); mWindowManager = wm; mUserController = userController; mCallingPid = callingPid; - - mCancelAnimationRunnable = () -> { - // The caller has not finished the animation in a predefined amount of time, so - // force-cancel the animation - mWindowManager.cancelRecentsAnimation(); - }; } void startRecentsActivity(Intent intent, IRecentsAnimationRunner recentsAnimationRunner, @@ -133,10 +121,6 @@ class RecentsAnimation implements RecentsAnimationCallbacks { // duration of the gesture that is driven by the recents component homeActivity.mLaunchTaskBehind = true; - // Post a timeout for the animation. This needs to happen before initializing the - // recents animation on the WM side since we may decide to cancel the animation there - mHandler.postDelayed(mCancelAnimationRunnable, RECENTS_ANIMATION_TIMEOUT); - // Fetch all the surface controls and pass them to the client to get the animation // started mWindowManager.cancelRecentsAnimation(); @@ -157,7 +141,6 @@ class RecentsAnimation implements RecentsAnimationCallbacks { @Override public void onAnimationFinished(boolean moveHomeToTop) { - mHandler.removeCallbacks(mCancelAnimationRunnable); synchronized (mService) { if (mWindowManager.getRecentsAnimationController() == null) return; diff --git a/services/core/java/com/android/server/broadcastradio/hal1/TunerCallback.java b/services/core/java/com/android/server/broadcastradio/hal1/TunerCallback.java index 32b1d1adfe3a08b76e7eace1f46dcefc950e4541..7a6d9647bf43331b37324752857ba3686551bd3e 100644 --- a/services/core/java/com/android/server/broadcastradio/hal1/TunerCallback.java +++ b/services/core/java/com/android/server/broadcastradio/hal1/TunerCallback.java @@ -17,6 +17,7 @@ package com.android.server.broadcastradio.hal1; import android.annotation.NonNull; +import android.annotation.Nullable; import android.hardware.radio.ITuner; import android.hardware.radio.ITunerCallback; import android.hardware.radio.ProgramList; @@ -87,8 +88,9 @@ class TunerCallback implements ITunerCallback { mTuner.close(); } - void startProgramListUpdates(@NonNull ProgramList.Filter filter) { - mProgramListFilter.set(Objects.requireNonNull(filter)); + void startProgramListUpdates(@Nullable ProgramList.Filter filter) { + if (filter == null) filter = new ProgramList.Filter(); + mProgramListFilter.set(filter); sendProgramListUpdate(); } diff --git a/services/core/java/com/android/server/broadcastradio/hal2/Convert.java b/services/core/java/com/android/server/broadcastradio/hal2/Convert.java index 6919282054ede39ef3964777d070a12a1abb7ece..9730c9a1a38055cf08df16a0a5020275a299fd2d 100644 --- a/services/core/java/com/android/server/broadcastradio/hal2/Convert.java +++ b/services/core/java/com/android/server/broadcastradio/hal2/Convert.java @@ -232,6 +232,7 @@ class Convert { * HAL implementation instance. */ 1, // numTuners 1, // numAudioSources + false, // isInitializationRequired false, // isCaptureSupported amfmConfigToBands(amfmConfig), @@ -374,7 +375,9 @@ class Convert { ); } - static @NonNull ProgramFilter programFilterToHal(@NonNull ProgramList.Filter filter) { + static @NonNull ProgramFilter programFilterToHal(@Nullable ProgramList.Filter filter) { + if (filter == null) filter = new ProgramList.Filter(); + ProgramFilter hwFilter = new ProgramFilter(); filter.getIdentifierTypes().stream().forEachOrdered(hwFilter.identifierTypes::add); diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java index eee830f3299b40d1956f66ea10c98c0182d6e247..1bc74238436f930d35d8c8cfd50a2eccb6a5bdb8 100644 --- a/services/core/java/com/android/server/connectivity/Tethering.java +++ b/services/core/java/com/android/server/connectivity/Tethering.java @@ -56,6 +56,7 @@ import android.net.NetworkInfo; import android.net.NetworkState; import android.net.NetworkUtils; import android.net.RouteInfo; +import android.net.util.InterfaceSet; import android.net.util.PrefixUtils; import android.net.util.SharedLog; import android.net.util.VersionedBroadcastListener; @@ -98,6 +99,7 @@ import com.android.server.connectivity.tethering.SimChangeListener; import com.android.server.connectivity.tethering.TetherInterfaceStateMachine; import com.android.server.connectivity.tethering.TetheringConfiguration; import com.android.server.connectivity.tethering.TetheringDependencies; +import com.android.server.connectivity.tethering.TetheringInterfaceUtils; import com.android.server.connectivity.tethering.UpstreamNetworkMonitor; import com.android.server.net.BaseNetworkObserver; @@ -181,9 +183,10 @@ public class Tethering extends BaseNetworkObserver { private final VersionedBroadcastListener mCarrierConfigChange; // TODO: Delete SimChangeListener; it's obsolete. private final SimChangeListener mSimChange; + private final TetheringDependencies mDeps; private volatile TetheringConfiguration mConfig; - private String mCurrentUpstreamIface; + private InterfaceSet mCurrentUpstreamIfaceSet; private Notification.Builder mTetheredNotificationBuilder; private int mLastNotificationId; @@ -202,12 +205,13 @@ public class Tethering extends BaseNetworkObserver { mPolicyManager = policyManager; mLooper = looper; mSystemProperties = systemProperties; + mDeps = deps; mPublicSync = new Object(); mTetherStates = new ArrayMap<>(); - mTetherMasterSM = new TetherMasterSM("TetherMaster", mLooper); + mTetherMasterSM = new TetherMasterSM("TetherMaster", mLooper, deps); mTetherMasterSM.start(); final Handler smHandler = mTetherMasterSM.getHandler(); @@ -215,8 +219,8 @@ public class Tethering extends BaseNetworkObserver { deps.getOffloadHardwareInterface(smHandler, mLog), mContext.getContentResolver(), mNMService, mLog); - mUpstreamNetworkMonitor = new UpstreamNetworkMonitor( - mContext, mTetherMasterSM, mLog, TetherMasterSM.EVENT_UPSTREAM_CALLBACK); + mUpstreamNetworkMonitor = deps.getUpstreamNetworkMonitor(mContext, mTetherMasterSM, mLog, + TetherMasterSM.EVENT_UPSTREAM_CALLBACK); mForwardedDownstreams = new HashSet<>(); IntentFilter filter = new IntentFilter(); @@ -1160,12 +1164,11 @@ public class Tethering extends BaseNetworkObserver { } // Needed because the canonical source of upstream truth is just the - // upstream interface name, |mCurrentUpstreamIface|. This is ripe for - // future simplification, once the upstream Network is canonical. + // upstream interface set, |mCurrentUpstreamIfaceSet|. private boolean pertainsToCurrentUpstream(NetworkState ns) { - if (ns != null && ns.linkProperties != null && mCurrentUpstreamIface != null) { + if (ns != null && ns.linkProperties != null && mCurrentUpstreamIfaceSet != null) { for (String ifname : ns.linkProperties.getAllInterfaceNames()) { - if (mCurrentUpstreamIface.equals(ifname)) { + if (mCurrentUpstreamIfaceSet.ifnames.contains(ifname)) { return true; } } @@ -1241,7 +1244,7 @@ public class Tethering extends BaseNetworkObserver { private static final int UPSTREAM_SETTLE_TIME_MS = 10000; - TetherMasterSM(String name, Looper looper) { + TetherMasterSM(String name, Looper looper, TetheringDependencies deps) { super(name, looper); mInitialState = new InitialState(); @@ -1261,7 +1264,7 @@ public class Tethering extends BaseNetworkObserver { addState(mSetDnsForwardersErrorState); mNotifyList = new ArrayList<>(); - mIPv6TetheringCoordinator = new IPv6TetheringCoordinator(mNotifyList, mLog); + mIPv6TetheringCoordinator = deps.getIPv6TetheringCoordinator(mNotifyList, mLog); mOffload = new OffloadWrapper(); setInitialState(mInitialState); @@ -1360,31 +1363,27 @@ public class Tethering extends BaseNetworkObserver { } protected void setUpstreamNetwork(NetworkState ns) { - String iface = null; + InterfaceSet ifaces = null; if (ns != null) { // Find the interface with the default IPv4 route. It may be the // interface described by linkProperties, or one of the interfaces // stacked on top of it. mLog.i("Looking for default routes on: " + ns.linkProperties); - final String iface4 = getIPv4DefaultRouteInterface(ns); - final String iface6 = getIPv6DefaultRouteInterface(ns); - mLog.i("IPv4/IPv6 upstream interface(s): " + iface4 + "/" + iface6); - - iface = (iface4 != null) ? iface4 : null /* TODO: iface6 */; + ifaces = TetheringInterfaceUtils.getTetheringInterfaces(ns); + mLog.i("Found upstream interface(s): " + ifaces); } - if (iface != null) { + if (ifaces != null) { setDnsForwarders(ns.network, ns.linkProperties); } - notifyDownstreamsOfNewUpstreamIface(iface); + notifyDownstreamsOfNewUpstreamIface(ifaces); if (ns != null && pertainsToCurrentUpstream(ns)) { // If we already have NetworkState for this network examine // it immediately, because there likely will be no second // EVENT_ON_AVAILABLE (it was already received). handleNewUpstreamNetworkState(ns); - } else if (mCurrentUpstreamIface == null) { - // There are no available upstream networks, or none that - // have an IPv4 default route (current metric for success). + } else if (mCurrentUpstreamIfaceSet == null) { + // There are no available upstream networks. handleNewUpstreamNetworkState(null); } } @@ -1411,12 +1410,10 @@ public class Tethering extends BaseNetworkObserver { } } - protected void notifyDownstreamsOfNewUpstreamIface(String ifaceName) { - mLog.log("Notifying downstreams of upstream=" + ifaceName); - mCurrentUpstreamIface = ifaceName; + protected void notifyDownstreamsOfNewUpstreamIface(InterfaceSet ifaces) { + mCurrentUpstreamIfaceSet = ifaces; for (TetherInterfaceStateMachine sm : mNotifyList) { - sm.sendMessage(TetherInterfaceStateMachine.CMD_TETHER_CONNECTION_CHANGED, - ifaceName); + sm.sendMessage(TetherInterfaceStateMachine.CMD_TETHER_CONNECTION_CHANGED, ifaces); } } @@ -1488,7 +1485,7 @@ public class Tethering extends BaseNetworkObserver { // For example, after CONNECTIVITY_ACTION listening is removed, here // is where we could observe a Wi-Fi network becoming available and // passing validation. - if (mCurrentUpstreamIface == null) { + if (mCurrentUpstreamIfaceSet == null) { // If we have no upstream interface, try to run through upstream // selection again. If, for example, IPv4 connectivity has shown up // after IPv6 (e.g., 464xlat became available) we want the chance to @@ -1512,8 +1509,7 @@ public class Tethering extends BaseNetworkObserver { handleNewUpstreamNetworkState(ns); break; case UpstreamNetworkMonitor.EVENT_ON_LINKPROPERTIES: - setDnsForwarders(ns.network, ns.linkProperties); - handleNewUpstreamNetworkState(ns); + chooseUpstreamType(false); break; case UpstreamNetworkMonitor.EVENT_ON_LOST: // TODO: Re-evaluate possible upstreams. Currently upstream @@ -1586,7 +1582,7 @@ public class Tethering extends BaseNetworkObserver { if (VDBG) Log.d(TAG, "Tether Mode requested by " + who); handleInterfaceServingStateActive(message.arg1, who); who.sendMessage(TetherInterfaceStateMachine.CMD_TETHER_CONNECTION_CHANGED, - mCurrentUpstreamIface); + mCurrentUpstreamIfaceSet); // If there has been a change and an upstream is now // desired, kick off the selection process. final boolean previousUpstreamWanted = updateUpstreamWanted(); @@ -1864,7 +1860,7 @@ public class Tethering extends BaseNetworkObserver { pw.println(" - lastError = " + tetherState.lastError); } pw.println("Upstream wanted: " + upstreamWanted()); - pw.println("Current upstream interface: " + mCurrentUpstreamIface); + pw.println("Current upstream interface(s): " + mCurrentUpstreamIfaceSet); pw.decreaseIndent(); } @@ -1997,7 +1993,7 @@ public class Tethering extends BaseNetworkObserver { final TetherState tetherState = new TetherState( new TetherInterfaceStateMachine( iface, mLooper, interfaceType, mLog, mNMService, mStatsService, - makeControlCallback(iface))); + makeControlCallback(iface), mDeps)); mTetherStates.put(iface, tetherState); tetherState.stateMachine.start(); } diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java index c9bdcf1a73b5ffdd8d23de649ef14292867e258e..2fda08e2a57592cb55b4a4bd727fbc0538003447 100644 --- a/services/core/java/com/android/server/connectivity/Vpn.java +++ b/services/core/java/com/android/server/connectivity/Vpn.java @@ -151,6 +151,13 @@ public class Vpn { .multiply(BigInteger.valueOf(howManyPercentIsMost)) .divide(BigInteger.valueOf(100)); } + // How many routes to evaluate before bailing and declaring this Vpn should provide + // the INTERNET capability. This is necessary because computing the adress space is + // O(n²) and this is running in the system service, so a limit is needed to alleviate + // the risk of attack. + // This is taken as a total of IPv4 + IPV6 routes for simplicity, but the algorithm + // is actually O(n²)+O(n²). + private static final int MAX_ROUTES_TO_EVALUATE = 150; // TODO: create separate trackers for each unique VPN to support // automated reconnection @@ -862,10 +869,12 @@ public class Vpn { */ @VisibleForTesting static boolean providesRoutesToMostDestinations(LinkProperties lp) { + final List routes = lp.getAllRoutes(); + if (routes.size() > MAX_ROUTES_TO_EVALUATE) return true; final Comparator prefixLengthComparator = IpPrefix.lengthComparator(); TreeSet ipv4Prefixes = new TreeSet<>(prefixLengthComparator); TreeSet ipv6Prefixes = new TreeSet<>(prefixLengthComparator); - for (final RouteInfo route : lp.getAllRoutes()) { + for (final RouteInfo route : routes) { IpPrefix destination = route.getDestination(); if (destination.isIPv4()) { ipv4Prefixes.add(destination); diff --git a/services/core/java/com/android/server/connectivity/tethering/IPv6TetheringCoordinator.java b/services/core/java/com/android/server/connectivity/tethering/IPv6TetheringCoordinator.java index 518f6c1440ccb0d21f06109ff96675549e253956..ba67c94d1cd450495707c10fc79fd8c0c9ccdd94 100644 --- a/services/core/java/com/android/server/connectivity/tethering/IPv6TetheringCoordinator.java +++ b/services/core/java/com/android/server/connectivity/tethering/IPv6TetheringCoordinator.java @@ -30,10 +30,8 @@ import android.util.Log; import java.net.Inet6Address; import java.net.InetAddress; -import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Arrays; -import java.util.HashMap; import java.util.LinkedList; import java.util.Random; @@ -119,7 +117,7 @@ public class IPv6TetheringCoordinator { if (VDBG) { Log.d(TAG, "updateUpstreamNetworkState: " + toDebugString(ns)); } - if (!canTetherIPv6(ns, mLog)) { + if (TetheringInterfaceUtils.getIPv6Interface(ns) == null) { stopIPv6TetheringOnAllInterfaces(); setUpstreamNetworkState(null); return; @@ -208,70 +206,6 @@ public class IPv6TetheringCoordinator { return null; } - private static boolean canTetherIPv6(NetworkState ns, SharedLog sharedLog) { - // Broadly speaking: - // - // [1] does the upstream have an IPv6 default route? - // - // and - // - // [2] does the upstream have one or more global IPv6 /64s - // dedicated to this device? - // - // In lieu of Prefix Delegation and other evaluation of whether a - // prefix may or may not be dedicated to this device, for now just - // check whether the upstream is TRANSPORT_CELLULAR. This works - // because "[t]he 3GPP network allocates each default bearer a unique - // /64 prefix", per RFC 6459, Section 5.2. - - final boolean canTether = - (ns != null) && (ns.network != null) && - (ns.linkProperties != null) && (ns.networkCapabilities != null) && - // At least one upstream DNS server: - ns.linkProperties.isProvisioned() && - // Minimal amount of IPv6 provisioning: - ns.linkProperties.hasIPv6DefaultRoute() && - ns.linkProperties.hasGlobalIPv6Address() && - // Temporary approximation of "dedicated prefix": - ns.networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR); - - // For now, we do not support separate IPv4 and IPv6 upstreams (e.g. - // tethering with 464xlat involved). TODO: Rectify this shortcoming, - // likely by calling NetworkManagementService#startInterfaceForwarding() - // for all upstream interfaces. - RouteInfo v4default = null; - RouteInfo v6default = null; - if (canTether) { - for (RouteInfo r : ns.linkProperties.getAllRoutes()) { - if (r.isIPv4Default()) { - v4default = r; - } else if (r.isIPv6Default()) { - v6default = r; - } - - if (v4default != null && v6default != null) { - break; - } - } - } - - final boolean supportedConfiguration = - (v4default != null) && (v6default != null) && - (v4default.getInterface() != null) && - v4default.getInterface().equals(v6default.getInterface()); - - final boolean outcome = canTether && supportedConfiguration; - - if (ns == null) { - sharedLog.log("No available upstream."); - } else { - sharedLog.log(String.format("IPv6 tethering is %s for upstream: %s", - (outcome ? "available" : "not available"), toDebugString(ns))); - } - - return outcome; - } - private static LinkProperties getIPv6OnlyLinkProperties(LinkProperties lp) { final LinkProperties v6only = new LinkProperties(); if (lp == null) { diff --git a/services/core/java/com/android/server/connectivity/tethering/TetherInterfaceStateMachine.java b/services/core/java/com/android/server/connectivity/tethering/TetherInterfaceStateMachine.java index 2224913b2cf68f4dd7a9b1f249279e09d5b21318..5ed14a07cb6cc1768aa5bf374212c1d23ebb2686 100644 --- a/services/core/java/com/android/server/connectivity/tethering/TetherInterfaceStateMachine.java +++ b/services/core/java/com/android/server/connectivity/tethering/TetherInterfaceStateMachine.java @@ -31,7 +31,7 @@ import android.net.ip.InterfaceController; import android.net.ip.RouterAdvertisementDaemon; import android.net.ip.RouterAdvertisementDaemon.RaParams; import android.net.util.InterfaceParams; -import android.net.util.NetdService; +import android.net.util.InterfaceSet; import android.net.util.SharedLog; import android.os.INetworkManagementService; import android.os.Looper; @@ -49,12 +49,12 @@ import com.android.internal.util.StateMachine; import java.net.Inet6Address; import java.net.InetAddress; -import java.net.SocketException; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.HashSet; import java.util.Objects; import java.util.Random; +import java.util.Set; /** * Provides the interface to IP-layer serving functionality for a given network @@ -117,9 +117,11 @@ public class TetherInterfaceStateMachine extends StateMachine { private final int mInterfaceType; private final LinkProperties mLinkProperties; + private final TetheringDependencies mDeps; + private int mLastError; private int mServingMode; - private String mMyUpstreamIfaceName; // may change over time + private InterfaceSet mUpstreamIfaceSet; // may change over time private InterfaceParams mInterfaceParams; // TODO: De-duplicate this with mLinkProperties above. Currently, these link // properties are those selected by the IPv6TetheringCoordinator and relayed @@ -134,18 +136,19 @@ public class TetherInterfaceStateMachine extends StateMachine { public TetherInterfaceStateMachine( String ifaceName, Looper looper, int interfaceType, SharedLog log, INetworkManagementService nMService, INetworkStatsService statsService, - IControlsTethering tetherController) { + IControlsTethering tetherController, + TetheringDependencies deps) { super(ifaceName, looper); mLog = log.forSubComponent(ifaceName); mNMService = nMService; - // TODO: This should be passed in for testability. - mNetd = NetdService.getInstance(); + mNetd = deps.getNetdService(); mStatsService = statsService; mTetherController = tetherController; mInterfaceCtrl = new InterfaceController(ifaceName, nMService, mNetd, mLog); mIfaceName = ifaceName; mInterfaceType = interfaceType; mLinkProperties = new LinkProperties(); + mDeps = deps; resetLinkProperties(); mLastError = ConnectivityManager.TETHER_ERROR_NO_ERROR; mServingMode = IControlsTethering.STATE_AVAILABLE; @@ -246,16 +249,14 @@ public class TetherInterfaceStateMachine extends StateMachine { } private boolean startIPv6() { - // TODO: Refactor for better testability. This is one of the things - // that prohibits unittesting IPv6 tethering setup. - mInterfaceParams = InterfaceParams.getByName(mIfaceName); + mInterfaceParams = mDeps.getInterfaceParams(mIfaceName); if (mInterfaceParams == null) { mLog.e("Failed to find InterfaceParams"); stopIPv6(); return false; } - mRaDaemon = new RouterAdvertisementDaemon(mInterfaceParams); + mRaDaemon = mDeps.getRouterAdvertisementDaemon(mInterfaceParams); if (!mRaDaemon.start()) { stopIPv6(); return false; @@ -621,10 +622,10 @@ public class TetherInterfaceStateMachine extends StateMachine { } private void cleanupUpstream() { - if (mMyUpstreamIfaceName == null) return; + if (mUpstreamIfaceSet == null) return; - cleanupUpstreamInterface(mMyUpstreamIfaceName); - mMyUpstreamIfaceName = null; + for (String ifname : mUpstreamIfaceSet.ifnames) cleanupUpstreamInterface(ifname); + mUpstreamIfaceSet = null; } private void cleanupUpstreamInterface(String upstreamIface) { @@ -660,34 +661,66 @@ public class TetherInterfaceStateMachine extends StateMachine { mLog.e("CMD_TETHER_REQUESTED while already tethering."); break; case CMD_TETHER_CONNECTION_CHANGED: - String newUpstreamIfaceName = (String)(message.obj); - if ((mMyUpstreamIfaceName == null && newUpstreamIfaceName == null) || - (mMyUpstreamIfaceName != null && - mMyUpstreamIfaceName.equals(newUpstreamIfaceName))) { + final InterfaceSet newUpstreamIfaceSet = (InterfaceSet) message.obj; + if (noChangeInUpstreamIfaceSet(newUpstreamIfaceSet)) { if (VDBG) Log.d(TAG, "Connection changed noop - dropping"); break; } - cleanupUpstream(); - if (newUpstreamIfaceName != null) { + + if (newUpstreamIfaceSet == null) { + cleanupUpstream(); + break; + } + + for (String removed : upstreamInterfacesRemoved(newUpstreamIfaceSet)) { + cleanupUpstreamInterface(removed); + } + + final Set added = upstreamInterfacesAdd(newUpstreamIfaceSet); + // This makes the call to cleanupUpstream() in the error + // path for any interface neatly cleanup all the interfaces. + mUpstreamIfaceSet = newUpstreamIfaceSet; + + for (String ifname : added) { try { - mNMService.enableNat(mIfaceName, newUpstreamIfaceName); - mNMService.startInterfaceForwarding(mIfaceName, - newUpstreamIfaceName); + mNMService.enableNat(mIfaceName, ifname); + mNMService.startInterfaceForwarding(mIfaceName, ifname); } catch (Exception e) { mLog.e("Exception enabling NAT: " + e); - cleanupUpstreamInterface(newUpstreamIfaceName); + cleanupUpstream(); mLastError = ConnectivityManager.TETHER_ERROR_ENABLE_NAT_ERROR; transitionTo(mInitialState); return true; } } - mMyUpstreamIfaceName = newUpstreamIfaceName; break; default: return false; } return true; } + + private boolean noChangeInUpstreamIfaceSet(InterfaceSet newIfaces) { + if (mUpstreamIfaceSet == null && newIfaces == null) return true; + if (mUpstreamIfaceSet != null && newIfaces != null) { + return mUpstreamIfaceSet.equals(newIfaces); + } + return false; + } + + private Set upstreamInterfacesRemoved(InterfaceSet newIfaces) { + if (mUpstreamIfaceSet == null) return new HashSet<>(); + + final HashSet removed = new HashSet<>(mUpstreamIfaceSet.ifnames); + removed.removeAll(newIfaces.ifnames); + return removed; + } + + private Set upstreamInterfacesAdd(InterfaceSet newIfaces) { + final HashSet added = new HashSet<>(newIfaces.ifnames); + if (mUpstreamIfaceSet != null) added.removeAll(mUpstreamIfaceSet.ifnames); + return added; + } } /** diff --git a/services/core/java/com/android/server/connectivity/tethering/TetheringDependencies.java b/services/core/java/com/android/server/connectivity/tethering/TetheringDependencies.java index b8174b6c8d2bc8467e4da43331131e7c08934acd..66afb0f2cb145db1d1360cd9cdc50ee8323b6733 100644 --- a/services/core/java/com/android/server/connectivity/tethering/TetheringDependencies.java +++ b/services/core/java/com/android/server/connectivity/tethering/TetheringDependencies.java @@ -16,9 +16,18 @@ package com.android.server.connectivity.tethering; +import android.content.Context; +import android.net.INetd; +import android.net.ip.RouterAdvertisementDaemon; +import android.net.util.InterfaceParams; +import android.net.util.NetdService; import android.os.Handler; import android.net.util.SharedLog; +import com.android.internal.util.StateMachine; + +import java.util.ArrayList; + /** * Capture tethering dependencies, for injection. @@ -29,4 +38,26 @@ public class TetheringDependencies { public OffloadHardwareInterface getOffloadHardwareInterface(Handler h, SharedLog log) { return new OffloadHardwareInterface(h, log); } + + public UpstreamNetworkMonitor getUpstreamNetworkMonitor(Context ctx, StateMachine target, + SharedLog log, int what) { + return new UpstreamNetworkMonitor(ctx, target, log, what); + } + + public IPv6TetheringCoordinator getIPv6TetheringCoordinator( + ArrayList notifyList, SharedLog log) { + return new IPv6TetheringCoordinator(notifyList, log); + } + + public RouterAdvertisementDaemon getRouterAdvertisementDaemon(InterfaceParams ifParams) { + return new RouterAdvertisementDaemon(ifParams); + } + + public InterfaceParams getInterfaceParams(String ifName) { + return InterfaceParams.getByName(ifName); + } + + public INetd getNetdService() { + return NetdService.getInstance(); + } } diff --git a/services/core/java/com/android/server/connectivity/tethering/TetheringInterfaceUtils.java b/services/core/java/com/android/server/connectivity/tethering/TetheringInterfaceUtils.java new file mode 100644 index 0000000000000000000000000000000000000000..6c7ff91761acb973c048a1921a4ddfe1239f95ba --- /dev/null +++ b/services/core/java/com/android/server/connectivity/tethering/TetheringInterfaceUtils.java @@ -0,0 +1,90 @@ +/* + * 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.server.connectivity.tethering; + +import android.annotation.Nullable; +import android.net.LinkProperties; +import android.net.NetworkCapabilities; +import android.net.NetworkState; +import android.net.RouteInfo; +import android.net.util.InterfaceSet; + +import java.net.Inet4Address; +import java.net.Inet6Address; +import java.net.InetAddress; + +/** + * @hide + */ +public final class TetheringInterfaceUtils { + /** + * Get upstream interfaces for tethering based on default routes for IPv4/IPv6. + * @return null if there is no usable interface, or a set of at least one interface otherwise. + */ + public static @Nullable InterfaceSet getTetheringInterfaces(NetworkState ns) { + if (ns == null) { + return null; + } + + final LinkProperties lp = ns.linkProperties; + final String if4 = getInterfaceForDestination(lp, Inet4Address.ANY); + final String if6 = getIPv6Interface(ns); + + return (if4 == null && if6 == null) ? null : new InterfaceSet(if4, if6); + } + + /** + * Get the upstream interface for IPv6 tethering. + * @return null if there is no usable interface, or the interface name otherwise. + */ + public static @Nullable String getIPv6Interface(NetworkState ns) { + // Broadly speaking: + // + // [1] does the upstream have an IPv6 default route? + // + // and + // + // [2] does the upstream have one or more global IPv6 /64s + // dedicated to this device? + // + // In lieu of Prefix Delegation and other evaluation of whether a + // prefix may or may not be dedicated to this device, for now just + // check whether the upstream is TRANSPORT_CELLULAR. This works + // because "[t]he 3GPP network allocates each default bearer a unique + // /64 prefix", per RFC 6459, Section 5.2. + final boolean canTether = + (ns != null) && (ns.network != null) && + (ns.linkProperties != null) && (ns.networkCapabilities != null) && + // At least one upstream DNS server: + ns.linkProperties.hasIPv6DnsServer() && + // Minimal amount of IPv6 provisioning: + ns.linkProperties.hasGlobalIPv6Address() && + // Temporary approximation of "dedicated prefix": + ns.networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR); + + return canTether + ? getInterfaceForDestination(ns.linkProperties, Inet6Address.ANY) + : null; + } + + private static String getInterfaceForDestination(LinkProperties lp, InetAddress dst) { + final RouteInfo ri = (lp != null) + ? RouteInfo.selectBestRoute(lp.getAllRoutes(), dst) + : null; + return (ri != null) ? ri.getInterface() : null; + } +} diff --git a/services/core/java/com/android/server/content/ContentService.java b/services/core/java/com/android/server/content/ContentService.java index 63308f894d09e7994fe622e5258b54d3df060ab4..b7bbb3b425304d2b0ebbf8e5b7f49c1d51ab9516 100644 --- a/services/core/java/com/android/server/content/ContentService.java +++ b/services/core/java/com/android/server/content/ContentService.java @@ -26,6 +26,7 @@ import android.app.job.JobInfo; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.ContentResolver; +import android.content.ContentResolver.SyncExemption; import android.content.Context; import android.content.IContentService; import android.content.ISyncStatusObserver; @@ -78,7 +79,7 @@ import java.util.List; */ public final class ContentService extends IContentService.Stub { static final String TAG = "ContentService"; - static final boolean DEBUG = false; + static final boolean DEBUG = true; public static class Lifecycle extends SystemService { private ContentService mService; @@ -451,7 +452,7 @@ public final class ContentService extends IContentService.Stub { SyncManager syncManager = getSyncManager(); if (syncManager != null) { syncManager.scheduleLocalSync(null /* all accounts */, callingUserHandle, uid, - uri.getAuthority(), /*isAppStandbyExempted=*/ isUidInForeground(uid)); + uri.getAuthority(), getSyncExemptionForCaller(uid)); } } @@ -508,7 +509,7 @@ public final class ContentService extends IContentService.Stub { int uId = Binder.getCallingUid(); validateExtras(uId, extras); - final boolean isForegroundSyncRequest = isForegroundSyncRequest(uId, extras); + final int syncExemption = getSyncExemptionAndCleanUpExtrasForCaller(uId, extras); // This makes it so that future permission checks will be in the context of this // process rather than the caller's process. We will restore this before returning. @@ -518,7 +519,7 @@ public final class ContentService extends IContentService.Stub { if (syncManager != null) { syncManager.scheduleSync(account, userId, uId, authority, extras, SyncStorageEngine.AuthorityInfo.UNDEFINED, - /*isAppStandbyExempted=*/ isForegroundSyncRequest); + syncExemption); } } finally { restoreCallingIdentity(identityToken); @@ -561,7 +562,7 @@ public final class ContentService extends IContentService.Stub { final Bundle extras = request.getBundle(); validateExtras(callerUid, extras); - final boolean isForegroundSyncRequest = isForegroundSyncRequest(callerUid, extras); + final int syncExemption = getSyncExemptionAndCleanUpExtrasForCaller(callerUid, extras); // This makes it so that future permission checks will be in the context of this // process rather than the caller's process. We will restore this before returning. @@ -589,7 +590,7 @@ public final class ContentService extends IContentService.Stub { syncManager.scheduleSync( request.getAccount(), userId, callerUid, request.getProvider(), extras, SyncStorageEngine.AuthorityInfo.UNDEFINED, - /*isAppStandbyExempted=*/ isForegroundSyncRequest); + syncExemption); } } finally { restoreCallingIdentity(identityToken); @@ -777,13 +778,15 @@ public final class ContentService extends IContentService.Stub { "no permission to write the sync settings"); enforceCrossUserPermission(userId, "no permission to modify the sync settings for user " + userId); + final int callingUid = Binder.getCallingUid(); + final int syncExemptionFlag = getSyncExemptionForCaller(callingUid); long identityToken = clearCallingIdentity(); try { SyncManager syncManager = getSyncManager(); if (syncManager != null) { syncManager.getSyncStorageEngine().setSyncAutomatically(account, userId, - providerName, sync); + providerName, sync, syncExemptionFlag, callingUid); } } finally { restoreCallingIdentity(identityToken); @@ -910,6 +913,7 @@ public final class ContentService extends IContentService.Stub { "no permission to write the sync settings"); syncable = normalizeSyncable(syncable); + final int callingUid = Binder.getCallingUid(); int userId = UserHandle.getCallingUserId(); long identityToken = clearCallingIdentity(); @@ -917,7 +921,7 @@ public final class ContentService extends IContentService.Stub { SyncManager syncManager = getSyncManager(); if (syncManager != null) { syncManager.getSyncStorageEngine().setIsSyncable( - account, userId, providerName, syncable); + account, userId, providerName, syncable, callingUid); } } finally { restoreCallingIdentity(identityToken); @@ -964,11 +968,14 @@ public final class ContentService extends IContentService.Stub { mContext.enforceCallingOrSelfPermission(Manifest.permission.WRITE_SYNC_SETTINGS, "no permission to write the sync settings"); + final int callingUid = Binder.getCallingUid(); + long identityToken = clearCallingIdentity(); try { SyncManager syncManager = getSyncManager(); if (syncManager != null) { - syncManager.getSyncStorageEngine().setMasterSyncAutomatically(flag, userId); + syncManager.getSyncStorageEngine().setMasterSyncAutomatically(flag, userId, + getSyncExemptionForCaller(callingUid), callingUid); } } finally { restoreCallingIdentity(identityToken); @@ -1263,9 +1270,7 @@ public final class ContentService extends IContentService.Stub { } private void validateExtras(int callingUid, Bundle extras) { - if (extras.containsKey(ContentResolver.SYNC_VIRTUAL_EXTRAS_FORCE_FG_SYNC) - || extras.containsKey(ContentResolver.SYNC_VIRTUAL_EXTRAS_FORCE_FG_SYNC) - ) { + if (extras.containsKey(ContentResolver.SYNC_VIRTUAL_EXTRAS_EXEMPTION_FLAG)) { switch (callingUid) { case Process.ROOT_UID: case Process.SHELL_UID: @@ -1277,39 +1282,36 @@ public final class ContentService extends IContentService.Stub { } } - private boolean isForegroundSyncRequest(int callingUid, Bundle extras) { - final boolean isForegroundRequest; - if (extras.getBoolean(ContentResolver.SYNC_VIRTUAL_EXTRAS_FORCE_FG_SYNC)) { - isForegroundRequest = true; - } else if (extras.getBoolean(ContentResolver.SYNC_VIRTUAL_EXTRAS_FORCE_BG_SYNC)) { - isForegroundRequest = false; - } else { - isForegroundRequest = isUidInForeground(callingUid); - } - extras.remove(ContentResolver.SYNC_VIRTUAL_EXTRAS_FORCE_FG_SYNC); - extras.remove(ContentResolver.SYNC_VIRTUAL_EXTRAS_FORCE_BG_SYNC); - - return isForegroundRequest; + @SyncExemption + private int getSyncExemptionForCaller(int callingUid) { + return getSyncExemptionAndCleanUpExtrasForCaller(callingUid, null); } - private boolean isUidInForeground(int uid) { - // If the caller is ADB, we assume it's a background request by default, because - // that's also the default of requests from the requestsync command. - // The requestsync command will always set either SYNC_VIRTUAL_EXTRAS_FORCE_FG_SYNC or - // SYNC_VIRTUAL_EXTRAS_FORCE_BG_SYNC (for non-periodic sync requests), - // so it shouldn't matter in practice. - switch (uid) { - case Process.SHELL_UID: - case Process.ROOT_UID: - return false; + @SyncExemption + private int getSyncExemptionAndCleanUpExtrasForCaller(int callingUid, Bundle extras) { + if (extras != null) { + final int exemption = + extras.getInt(ContentResolver.SYNC_VIRTUAL_EXTRAS_EXEMPTION_FLAG, -1); + + // Need to remove the virtual extra. + extras.remove(ContentResolver.SYNC_VIRTUAL_EXTRAS_EXEMPTION_FLAG); + if (exemption != -1) { + return exemption; + } } final ActivityManagerInternal ami = LocalServices.getService(ActivityManagerInternal.class); - if (ami != null) { - return ami.getUidProcessState(uid) - <= ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND; + final int procState = (ami != null) + ? ami.getUidProcessState(callingUid) + : ActivityManager.PROCESS_STATE_NONEXISTENT; + + if (procState <= ActivityManager.PROCESS_STATE_TOP) { + return ContentResolver.SYNC_EXEMPTION_ACTIVE_WITH_TEMP; } - return false; + if (procState <= ActivityManager.PROCESS_STATE_IMPORTANT_FOREGROUND) { + return ContentResolver.SYNC_EXEMPTION_ACTIVE; + } + return ContentResolver.SYNC_EXEMPTION_NONE; } /** diff --git a/services/core/java/com/android/server/content/SyncAdapterStateFetcher.java b/services/core/java/com/android/server/content/SyncAdapterStateFetcher.java new file mode 100644 index 0000000000000000000000000000000000000000..62fb75107755720fae72ef359b1556f00e127b80 --- /dev/null +++ b/services/core/java/com/android/server/content/SyncAdapterStateFetcher.java @@ -0,0 +1,68 @@ +/* + * 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.server.content; + +import android.app.usage.UsageStatsManagerInternal; +import android.os.SystemClock; +import android.util.Pair; + +import com.android.server.AppStateTracker; +import com.android.server.LocalServices; + +import java.util.HashMap; + +class SyncAdapterStateFetcher { + + private final HashMap, Integer> mBucketCache = + new HashMap<>(); + + public SyncAdapterStateFetcher() { + } + + /** + * Return sync adapter state with a cache. + */ + public int getStandbyBucket(int userId, String packageName) { + final Pair key = Pair.create(userId, packageName); + final Integer cached = mBucketCache.get(key); + if (cached != null) { + return cached; + } + final UsageStatsManagerInternal usmi = + LocalServices.getService(UsageStatsManagerInternal.class); + if (usmi == null) { + return -1; // Unknown. + } + + final int value = usmi.getAppStandbyBucket(packageName, userId, + SystemClock.elapsedRealtime()); + mBucketCache.put(key, value); + return value; + } + + /** + * Return UID active state. + */ + public boolean isAppActive(int uid) { + final AppStateTracker ast = + LocalServices.getService(AppStateTracker.class); + if (ast == null) { + return false; + } + + return ast.isUidActive(uid); + } +} diff --git a/services/core/java/com/android/server/content/SyncLogger.java b/services/core/java/com/android/server/content/SyncLogger.java index 20aec7e4ae29d6c10be01fae44e6de664741fdb0..8c35e27671eb891c211940aae0ce4d30a30889da 100644 --- a/services/core/java/com/android/server/content/SyncLogger.java +++ b/services/core/java/com/android/server/content/SyncLogger.java @@ -54,6 +54,9 @@ public class SyncLogger { private static SyncLogger sInstance; + // Special UID used for logging to denote the self process. + public static final int CALLING_UID_SELF = -1; + SyncLogger() { } @@ -62,8 +65,10 @@ public class SyncLogger { */ public static synchronized SyncLogger getInstance() { if (sInstance == null) { - final boolean enable = "1".equals(SystemProperties.get("debug.synclog", - Build.IS_DEBUGGABLE ? "1" : "0")); + final boolean enable = + Build.IS_DEBUGGABLE + || "1".equals(SystemProperties.get("debug.synclog")) + || Log.isLoggable(TAG, Log.VERBOSE); if (enable) { sInstance = new RotatingFileLogger(); } else { diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java index 70892685d8b497e3bbef1de94a989fff103203cf..a312fe1dcc3b8f6ffd88ae2a5d278ff0b07131cc 100644 --- a/services/core/java/com/android/server/content/SyncManager.java +++ b/services/core/java/com/android/server/content/SyncManager.java @@ -29,9 +29,11 @@ import android.app.NotificationManager; import android.app.PendingIntent; import android.app.job.JobInfo; import android.app.job.JobScheduler; +import android.app.usage.UsageStatsManagerInternal; import android.content.BroadcastReceiver; import android.content.ComponentName; import android.content.ContentResolver; +import android.content.ContentResolver.SyncExemption; import android.content.Context; import android.content.ISyncAdapter; import android.content.ISyncAdapterUnsyncableAccountCallback; @@ -49,8 +51,8 @@ import android.content.SyncStatusInfo; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; -import android.content.pm.PackageManagerInternal; import android.content.pm.PackageManager.NameNotFoundException; +import android.content.pm.PackageManagerInternal; import android.content.pm.ProviderInfo; import android.content.pm.RegisteredServicesCache; import android.content.pm.RegisteredServicesCacheListener; @@ -70,6 +72,7 @@ import android.os.Looper; import android.os.Message; import android.os.Messenger; import android.os.PowerManager; +import android.os.Process; import android.os.RemoteCallback; import android.os.RemoteException; import android.os.ServiceManager; @@ -85,24 +88,25 @@ import android.util.Log; import android.util.Pair; import android.util.Slog; +import com.android.internal.R; +import com.android.internal.app.IBatteryStats; import com.android.internal.messages.nano.SystemMessageProto.SystemMessage; import com.android.internal.notification.SystemNotificationChannels; +import com.android.internal.os.BackgroundThread; import com.android.internal.util.ArrayUtils; +import com.android.internal.util.IndentingPrintWriter; +import com.android.server.DeviceIdleController; import com.android.server.LocalServices; import com.android.server.SystemService; -import com.android.server.job.JobSchedulerInternal; -import com.google.android.collect.Lists; -import com.google.android.collect.Maps; - -import com.android.internal.R; -import com.android.internal.app.IBatteryStats; -import com.android.internal.os.BackgroundThread; -import com.android.internal.util.IndentingPrintWriter; import com.android.server.accounts.AccountManagerService; import com.android.server.backup.AccountSyncSettingsBackupHelper; import com.android.server.content.SyncStorageEngine.AuthorityInfo; import com.android.server.content.SyncStorageEngine.EndPoint; import com.android.server.content.SyncStorageEngine.OnSyncRequestListener; +import com.android.server.job.JobSchedulerInternal; + +import com.google.android.collect.Lists; +import com.google.android.collect.Maps; import java.io.FileDescriptor; import java.io.PrintWriter; @@ -550,10 +554,6 @@ public class SyncManager { return mJobScheduler; } - /** - * Should only be created after {@link ContentService#systemReady()} so that - * {@link PackageManager} is ready to query. - */ public SyncManager(Context context, boolean factoryTest) { // Initialize the SyncStorageEngine first, before registering observers // and creating threads and so on; it may fail if the disk is full. @@ -566,9 +566,9 @@ public class SyncManager { mSyncStorageEngine.setOnSyncRequestListener(new OnSyncRequestListener() { @Override public void onSyncRequest(SyncStorageEngine.EndPoint info, int reason, Bundle extras, - boolean isAppStandbyExempted) { + @SyncExemption int syncExemptionFlag) { scheduleSync(info.account, info.userId, reason, info.provider, extras, - AuthorityInfo.UNDEFINED, isAppStandbyExempted); + AuthorityInfo.UNDEFINED, syncExemptionFlag); } }); @@ -599,7 +599,7 @@ public class SyncManager { scheduleSync(null, UserHandle.USER_ALL, SyncOperation.REASON_SERVICE_CHANGED, type.authority, null, AuthorityInfo.UNDEFINED, - /*isAppStandbyExempted=*/ false); + ContentResolver.SYNC_EXEMPTION_NONE); } } }, mSyncHandler); @@ -649,7 +649,7 @@ public class SyncManager { scheduleSync(account, UserHandle.getUserId(uid), SyncOperation.REASON_ACCOUNTS_UPDATED, null, null, AuthorityInfo.SYNCABLE_NO_ACCOUNT_ACCESS, - /*isAppStandbyExempted=*/ false); + ContentResolver.SYNC_EXEMPTION_NONE); } }); @@ -883,9 +883,9 @@ public class SyncManager { */ public void scheduleSync(Account requestedAccount, int userId, int reason, String requestedAuthority, Bundle extras, int targetSyncState, - boolean isAppStandbyExempted) { + @SyncExemption int syncExemptionFlag) { scheduleSync(requestedAccount, userId, reason, requestedAuthority, extras, targetSyncState, - 0 /* min delay */, true /* checkIfAccountReady */, isAppStandbyExempted); + 0 /* min delay */, true /* checkIfAccountReady */, syncExemptionFlag); } /** @@ -894,7 +894,7 @@ public class SyncManager { private void scheduleSync(Account requestedAccount, int userId, int reason, String requestedAuthority, Bundle extras, int targetSyncState, final long minDelayMillis, boolean checkIfAccountReady, - boolean isAppStandbyExempted) { + @SyncExemption int syncExemptionFlag) { final boolean isLoggable = Log.isLoggable(TAG, Log.VERBOSE); if (extras == null) { extras = new Bundle(); @@ -904,7 +904,7 @@ public class SyncManager { + requestedAuthority + " reason=" + reason + " checkIfAccountReady=" + checkIfAccountReady - + " isAppStandbyExempted=" + isAppStandbyExempted); + + " syncExemptionFlag=" + syncExemptionFlag); } AccountAndUser[] accounts = null; @@ -1016,7 +1016,7 @@ public class SyncManager { scheduleSync(account.account, userId, reason, authority, finalExtras, targetSyncState, minDelayMillis, true /* checkIfAccountReady */, - isAppStandbyExempted); + syncExemptionFlag); } } )); @@ -1027,7 +1027,8 @@ public class SyncManager { final boolean isAlwaysSyncable = syncAdapterInfo.type.isAlwaysSyncable(); if (!checkIfAccountReady && isSyncable < 0 && isAlwaysSyncable) { mSyncStorageEngine.setIsSyncable( - account.account, account.userId, authority, AuthorityInfo.SYNCABLE); + account.account, account.userId, authority, AuthorityInfo.SYNCABLE, + SyncLogger.CALLING_UID_SELF); isSyncable = AuthorityInfo.SYNCABLE; } @@ -1067,7 +1068,7 @@ public class SyncManager { sendOnUnsyncableAccount(mContext, syncAdapterInfo, account.userId, () -> scheduleSync(account.account, account.userId, reason, authority, finalExtras, targetSyncState, minDelayMillis, - false, isAppStandbyExempted)); + false, syncExemptionFlag)); } else { // Initialisation sync. Bundle newExtras = new Bundle(); @@ -1086,7 +1087,7 @@ public class SyncManager { new SyncOperation(account.account, account.userId, owningUid, owningPackage, reason, source, authority, newExtras, allowParallelSyncs, - isAppStandbyExempted), + syncExemptionFlag), minDelayMillis ); } @@ -1103,7 +1104,7 @@ public class SyncManager { postScheduleSyncMessage( new SyncOperation(account.account, account.userId, owningUid, owningPackage, reason, source, - authority, extras, allowParallelSyncs, isAppStandbyExempted), + authority, extras, allowParallelSyncs, syncExemptionFlag), minDelayMillis ); } @@ -1217,12 +1218,12 @@ public class SyncManager { * ms to batch syncs. */ public void scheduleLocalSync(Account account, int userId, int reason, String authority, - boolean isAppStandbyExempted) { + @SyncExemption int syncExemptionFlag) { final Bundle extras = new Bundle(); extras.putBoolean(ContentResolver.SYNC_EXTRAS_UPLOAD, true); scheduleSync(account, userId, reason, authority, extras, AuthorityInfo.UNDEFINED, LOCAL_SYNC_DELAY, true /* checkIfAccountReady */, - isAppStandbyExempted); + syncExemptionFlag); } public SyncAdapterType[] getSyncAdapterTypes(int userId) { @@ -1493,7 +1494,7 @@ public class SyncManager { // If any of the duplicate ones has exemption, then we inherit it. if (!syncOperation.isPeriodic) { - boolean inheritAppStandbyExemption = false; + int inheritedSyncExemptionFlag = ContentResolver.SYNC_EXEMPTION_NONE; // Check currently running syncs for (ActiveSyncContext asc: mActiveSyncContexts) { @@ -1534,10 +1535,11 @@ public class SyncManager { // This means the duplicate one has a negative expected run time, but it hasn't // been executed possibly because of app-standby. - if (syncOperation.isAppStandbyExempted - && (minDelay == 0) - && !syncToRun.isAppStandbyExempted) { + if ((minDelay == 0) + && (syncToRun.syncExemptionFlag < syncOperation.syncExemptionFlag)) { syncToRun = syncOperation; + inheritedSyncExemptionFlag = + Math.max(inheritedSyncExemptionFlag, syncToRun.syncExemptionFlag); } } @@ -1551,9 +1553,8 @@ public class SyncManager { if (isLoggable) { Slog.v(TAG, "Cancelling duplicate sync " + op); } - if (op.isAppStandbyExempted) { - inheritAppStandbyExemption = true; - } + inheritedSyncExemptionFlag = + Math.max(inheritedSyncExemptionFlag, op.syncExemptionFlag); cancelJob(op, "scheduleSyncOperationH-duplicate"); } } @@ -1570,8 +1571,9 @@ public class SyncManager { } // If any of the duplicates had exemption, we exempt the current one. - if (inheritAppStandbyExemption) { - syncOperation.isAppStandbyExempted = true; + // + if (inheritedSyncExemptionFlag > ContentResolver.SYNC_EXEMPTION_NONE) { + syncOperation.syncExemptionFlag = inheritedSyncExemptionFlag; } } @@ -1591,7 +1593,7 @@ public class SyncManager { // Note this logic means when an exempted sync fails, // the back-off one will inherit it too, and will be exempted from app-standby. - final int jobFlags = syncOperation.isAppStandbyExempted + final int jobFlags = syncOperation.isAppStandbyExempted() ? JobInfo.FLAG_EXEMPT_FROM_APP_STANDBY : 0; JobInfo.Builder b = new JobInfo.Builder(syncOperation.jobId, @@ -1615,6 +1617,19 @@ public class SyncManager { b.setRequiresCharging(true); } + if (syncOperation.syncExemptionFlag + == ContentResolver.SYNC_EXEMPTION_ACTIVE_WITH_TEMP) { + DeviceIdleController.LocalService dic = + LocalServices.getService(DeviceIdleController.LocalService.class); + if (dic != null) { + dic.addPowerSaveTempWhitelistApp(Process.SYSTEM_UID, + syncOperation.owningPackage, + mConstants.getKeyExemptionTempWhitelistDurationInSeconds() * 1000, + UserHandle.getUserId(syncOperation.owningUid), + /* sync=*/ false, "sync by top app"); + } + } + getJobScheduler().scheduleAsPackage(b.build(), syncOperation.owningPackage, syncOperation.target.userId, syncOperation.wakeLockName()); } @@ -1736,7 +1751,7 @@ public class SyncManager { mContext.getOpPackageName()); for (Account account : accounts) { scheduleSync(account, userId, SyncOperation.REASON_USER_START, null, null, - AuthorityInfo.NOT_INITIALIZED, /*isAppStandbyExempted=*/ false); + AuthorityInfo.NOT_INITIALIZED, ContentResolver.SYNC_EXEMPTION_NONE); } } @@ -1930,7 +1945,10 @@ public class SyncManager { protected void dump(FileDescriptor fd, PrintWriter pw, boolean dumpAll) { final IndentingPrintWriter ipw = new IndentingPrintWriter(pw, " "); - dumpSyncState(ipw); + + final SyncAdapterStateFetcher buckets = new SyncAdapterStateFetcher(); + + dumpSyncState(ipw, buckets); mConstants.dump(pw, ""); dumpSyncAdapters(ipw); @@ -1991,7 +2009,7 @@ public class SyncManager { return ret; } - protected void dumpPendingSyncs(PrintWriter pw) { + protected void dumpPendingSyncs(PrintWriter pw, SyncAdapterStateFetcher buckets) { List pendingSyncs = getAllPendingSyncs(); pw.print("Pending Syncs: "); @@ -2001,14 +2019,14 @@ public class SyncManager { int count = 0; for (SyncOperation op: pendingSyncs) { if (!op.isPeriodic) { - pw.println(op.dump(null, false)); + pw.println(op.dump(null, false, buckets)); count++; } } pw.println(); } - protected void dumpPeriodicSyncs(PrintWriter pw) { + protected void dumpPeriodicSyncs(PrintWriter pw, SyncAdapterStateFetcher buckets) { List pendingSyncs = getAllPendingSyncs(); pw.print("Periodic Syncs: "); @@ -2018,7 +2036,7 @@ public class SyncManager { int count = 0; for (SyncOperation op: pendingSyncs) { if (op.isPeriodic) { - pw.println(op.dump(null, false)); + pw.println(op.dump(null, false, buckets)); count++; } } @@ -2075,7 +2093,7 @@ public class SyncManager { return true; } - protected void dumpSyncState(PrintWriter pw) { + protected void dumpSyncState(PrintWriter pw, SyncAdapterStateFetcher buckets) { final StringBuilder sb = new StringBuilder(); pw.print("Data connected: "); pw.println(mDataConnectionIsConnected); @@ -2150,13 +2168,13 @@ public class SyncManager { sb.setLength(0); pw.print(formatDurationHMS(sb, durationInSeconds)); pw.print(" - "); - pw.print(activeSyncContext.mSyncOperation.dump(pm, false)); + pw.print(activeSyncContext.mSyncOperation.dump(pm, false, buckets)); pw.println(); } pw.println(); - dumpPendingSyncs(pw); - dumpPeriodicSyncs(pw); + dumpPendingSyncs(pw, buckets); + dumpPeriodicSyncs(pw, buckets); // Join the installed sync adapter with the accounts list and emit for everything. pw.println("Sync Status"); @@ -3219,7 +3237,7 @@ public class SyncManager { scheduleSync(syncTargets.account, syncTargets.userId, SyncOperation.REASON_ACCOUNTS_UPDATED, syncTargets.provider, null, AuthorityInfo.NOT_INITIALIZED, - /*isAppStandbyExempted=*/ false); + ContentResolver.SYNC_EXEMPTION_NONE); } } @@ -3286,7 +3304,7 @@ public class SyncManager { syncAdapterInfo.componentName.getPackageName(), SyncOperation.REASON_PERIODIC, SyncStorageEngine.SOURCE_PERIODIC, extras, syncAdapterInfo.type.allowParallelSyncs(), true, SyncOperation.NO_JOB_ID, - pollFrequencyMillis, flexMillis, /*isAppStandbyExempted=*/ false); + pollFrequencyMillis, flexMillis, ContentResolver.SYNC_EXEMPTION_NONE); final int syncOpState = computeSyncOpState(op); switch (syncOpState) { @@ -3431,6 +3449,15 @@ public class SyncManager { Slog.v(TAG, syncContext.toString()); } } + if (op.isAppStandbyExempted()) { + final UsageStatsManagerInternal usmi = LocalServices.getService( + UsageStatsManagerInternal.class); + if (usmi != null) { + usmi.reportExemptedSyncStart(op.owningPackage, + UserHandle.getUserId(op.owningUid)); + } + } + // Connect to the sync adapter. int targetUid; ComponentName targetComponent; @@ -3604,7 +3631,7 @@ public class SyncManager { syncOperation.retries++; if (syncOperation.retries > mConstants.getMaxRetriesWithAppStandbyExemption()) { - syncOperation.isAppStandbyExempted = false; + syncOperation.syncExemptionFlag = ContentResolver.SYNC_EXEMPTION_NONE; } // the operation failed so increase the backoff time @@ -3672,7 +3699,7 @@ public class SyncManager { syncOperation.reason, syncOperation.syncSource, info.provider, new Bundle(), syncOperation.allowParallelSyncs, - syncOperation.isAppStandbyExempted)); + syncOperation.syncExemptionFlag)); } } diff --git a/services/core/java/com/android/server/content/SyncManagerConstants.java b/services/core/java/com/android/server/content/SyncManagerConstants.java index 061e4ca02d2d0ec0abdb44c6d15c63a5900b56cc..2a5858c3e1825902857fd78d7960218e24bcdc5a 100644 --- a/services/core/java/com/android/server/content/SyncManagerConstants.java +++ b/services/core/java/com/android/server/content/SyncManagerConstants.java @@ -52,6 +52,12 @@ public class SyncManagerConstants extends ContentObserver { private static final int DEF_MAX_RETRIES_WITH_APP_STANDBY_EXEMPTION = 5; private int mMaxRetriesWithAppStandbyExemption = DEF_MAX_RETRIES_WITH_APP_STANDBY_EXEMPTION; + private static final String KEY_EXEMPTION_TEMP_WHITELIST_DURATION_IN_SECONDS = + "exemption_temp_whitelist_duration_in_seconds"; + private static final int DEF_EXEMPTION_TEMP_WHITELIST_DURATION_IN_SECONDS = 10 * 60; + private int mKeyExemptionTempWhitelistDurationInSeconds + = DEF_EXEMPTION_TEMP_WHITELIST_DURATION_IN_SECONDS; + protected SyncManagerConstants(Context context) { super(null); mContext = context; @@ -97,6 +103,11 @@ public class SyncManagerConstants extends ContentObserver { mMaxRetriesWithAppStandbyExemption = parser.getInt( KEY_MAX_RETRIES_WITH_APP_STANDBY_EXEMPTION, DEF_MAX_RETRIES_WITH_APP_STANDBY_EXEMPTION); + + mKeyExemptionTempWhitelistDurationInSeconds = parser.getInt( + KEY_EXEMPTION_TEMP_WHITELIST_DURATION_IN_SECONDS, + DEF_EXEMPTION_TEMP_WHITELIST_DURATION_IN_SECONDS); + } } @@ -124,6 +135,12 @@ public class SyncManagerConstants extends ContentObserver { } } + public int getKeyExemptionTempWhitelistDurationInSeconds() { + synchronized (mLock) { + return mKeyExemptionTempWhitelistDurationInSeconds; + } + } + public void dump(PrintWriter pw, String prefix) { synchronized (mLock) { pw.print(prefix); @@ -144,6 +161,10 @@ public class SyncManagerConstants extends ContentObserver { pw.print(prefix); pw.print(" mMaxRetriesWithAppStandbyExemption="); pw.println(mMaxRetriesWithAppStandbyExemption); + + pw.print(prefix); + pw.print(" mKeyExemptionTempWhitelistDurationInSeconds="); + pw.println(mKeyExemptionTempWhitelistDurationInSeconds); } } } diff --git a/services/core/java/com/android/server/content/SyncOperation.java b/services/core/java/com/android/server/content/SyncOperation.java index 96bdaeabf17c2a990012c05a2f30f095d9afd782..d0975637e686f4733435a1c63c3b9ae3decc2f93 100644 --- a/services/core/java/com/android/server/content/SyncOperation.java +++ b/services/core/java/com/android/server/content/SyncOperation.java @@ -19,6 +19,7 @@ package com.android.server.content; import android.accounts.Account; import android.app.job.JobInfo; import android.content.ContentResolver; +import android.content.ContentResolver.SyncExemption; import android.content.pm.PackageManager; import android.os.Bundle; import android.os.PersistableBundle; @@ -98,33 +99,33 @@ public class SyncOperation { /** jobId of the JobScheduler job corresponding to this sync */ public int jobId; - /** Whether this operation should be exempted from the app-standby throttling. */ - public boolean isAppStandbyExempted; + @SyncExemption + public int syncExemptionFlag; public SyncOperation(Account account, int userId, int owningUid, String owningPackage, int reason, int source, String provider, Bundle extras, - boolean allowParallelSyncs, boolean isAppStandbyExempted) { + boolean allowParallelSyncs, @SyncExemption int syncExemptionFlag) { this(new SyncStorageEngine.EndPoint(account, provider, userId), owningUid, owningPackage, - reason, source, extras, allowParallelSyncs, isAppStandbyExempted); + reason, source, extras, allowParallelSyncs, syncExemptionFlag); } private SyncOperation(SyncStorageEngine.EndPoint info, int owningUid, String owningPackage, int reason, int source, Bundle extras, boolean allowParallelSyncs, - boolean isAppStandbyExempted) { + @SyncExemption int syncExemptionFlag) { this(info, owningUid, owningPackage, reason, source, extras, allowParallelSyncs, false, - NO_JOB_ID, 0, 0, isAppStandbyExempted); + NO_JOB_ID, 0, 0, syncExemptionFlag); } public SyncOperation(SyncOperation op, long periodMillis, long flexMillis) { this(op.target, op.owningUid, op.owningPackage, op.reason, op.syncSource, new Bundle(op.extras), op.allowParallelSyncs, op.isPeriodic, op.sourcePeriodicId, - periodMillis, flexMillis, /*isAppStandbyExempted=*/ false); + periodMillis, flexMillis, ContentResolver.SYNC_EXEMPTION_NONE); } public SyncOperation(SyncStorageEngine.EndPoint info, int owningUid, String owningPackage, int reason, int source, Bundle extras, boolean allowParallelSyncs, boolean isPeriodic, int sourcePeriodicId, long periodMillis, - long flexMillis, boolean isAppStandbyExempted) { + long flexMillis, @SyncExemption int syncExemptionFlag) { this.target = info; this.owningUid = owningUid; this.owningPackage = owningPackage; @@ -138,7 +139,7 @@ public class SyncOperation { this.flexMillis = flexMillis; this.jobId = NO_JOB_ID; this.key = toKey(); - this.isAppStandbyExempted = isAppStandbyExempted; + this.syncExemptionFlag = syncExemptionFlag; } /* Get a one off sync operation instance from a periodic sync. */ @@ -148,7 +149,7 @@ public class SyncOperation { } SyncOperation op = new SyncOperation(target, owningUid, owningPackage, reason, syncSource, new Bundle(extras), allowParallelSyncs, false, jobId /* sourcePeriodicId */, - periodMillis, flexMillis, /*isAppStandbyExempted=*/ false); + periodMillis, flexMillis, ContentResolver.SYNC_EXEMPTION_NONE); return op; } @@ -166,7 +167,7 @@ public class SyncOperation { periodMillis = other.periodMillis; flexMillis = other.flexMillis; this.key = other.key; - isAppStandbyExempted = other.isAppStandbyExempted; + syncExemptionFlag = other.syncExemptionFlag; } /** @@ -235,7 +236,7 @@ public class SyncOperation { jobInfoExtras.putLong("flexMillis", flexMillis); jobInfoExtras.putLong("expectedRuntime", expectedRuntime); jobInfoExtras.putInt("retries", retries); - jobInfoExtras.putBoolean("isAppStandbyExempted", isAppStandbyExempted); + jobInfoExtras.putInt("syncExemptionFlag", syncExemptionFlag); return jobInfoExtras; } @@ -256,7 +257,7 @@ public class SyncOperation { Bundle extras; boolean allowParallelSyncs, isPeriodic; long periodMillis, flexMillis; - boolean isAppStandbyExempted; + int syncExemptionFlag; if (!jobExtras.getBoolean("SyncManagerJob", false)) { return null; @@ -275,7 +276,8 @@ public class SyncOperation { initiatedBy = jobExtras.getInt("sourcePeriodicId", NO_JOB_ID); periodMillis = jobExtras.getLong("periodMillis"); flexMillis = jobExtras.getLong("flexMillis"); - isAppStandbyExempted = jobExtras.getBoolean("isAppStandbyExempted", false); + syncExemptionFlag = jobExtras.getInt("syncExemptionFlag", + ContentResolver.SYNC_EXEMPTION_NONE); extras = new Bundle(); PersistableBundle syncExtras = jobExtras.getPersistableBundle("syncExtras"); @@ -298,7 +300,7 @@ public class SyncOperation { new SyncStorageEngine.EndPoint(account, provider, userId); SyncOperation op = new SyncOperation(target, owningUid, owningPackage, reason, source, extras, allowParallelSyncs, isPeriodic, initiatedBy, periodMillis, flexMillis, - isAppStandbyExempted); + syncExemptionFlag); op.jobId = jobExtras.getInt("jobId"); op.expectedRuntime = jobExtras.getLong("expectedRuntime"); op.retries = jobExtras.getInt("retries"); @@ -361,10 +363,10 @@ public class SyncOperation { @Override public String toString() { - return dump(null, true); + return dump(null, true, null); } - String dump(PackageManager pm, boolean shorter) { + String dump(PackageManager pm, boolean shorter, SyncAdapterStateFetcher appStates) { StringBuilder sb = new StringBuilder(); sb.append("JobId=").append(jobId) .append(" ") @@ -385,8 +387,18 @@ public class SyncOperation { if (extras.getBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, false)) { sb.append(" EXPEDITED"); } - if (isAppStandbyExempted) { - sb.append(" STANDBY-EXEMPTED"); + switch (syncExemptionFlag) { + case ContentResolver.SYNC_EXEMPTION_NONE: + break; + case ContentResolver.SYNC_EXEMPTION_ACTIVE: + sb.append(" STANDBY-EXEMPTED"); + break; + case ContentResolver.SYNC_EXEMPTION_ACTIVE_WITH_TEMP: + sb.append(" STANDBY-EXEMPTED(TOP)"); + break; + default: + sb.append(" ExemptionFlag=" + syncExemptionFlag); + break; } sb.append(" Reason="); sb.append(reasonToString(pm, reason)); @@ -397,21 +409,31 @@ public class SyncOperation { SyncManager.formatDurationHMS(sb, flexMillis); sb.append(")"); } + if (retries > 0) { + sb.append(" Retries="); + sb.append(retries); + } if (!shorter) { sb.append(" Owner={"); UserHandle.formatUid(sb, owningUid); sb.append(" "); sb.append(owningPackage); + if (appStates != null) { + sb.append(" ["); + sb.append(appStates.getStandbyBucket( + UserHandle.getUserId(owningUid), owningPackage)); + sb.append("]"); + + if (appStates.isAppActive(owningUid)) { + sb.append(" [ACTIVE]"); + } + } sb.append("}"); if (!extras.keySet().isEmpty()) { sb.append(" "); extrasToStringBuilder(extras, sb); } } - if (retries > 0) { - sb.append(" Retries="); - sb.append(retries); - } return sb.toString(); } @@ -464,6 +486,10 @@ public class SyncOperation { return extras.getBoolean(ContentResolver.SYNC_EXTRAS_IGNORE_SETTINGS, false); } + boolean isAppStandbyExempted() { + return syncExemptionFlag != ContentResolver.SYNC_EXEMPTION_NONE; + } + static void extrasToStringBuilder(Bundle bundle, StringBuilder sb) { if (bundle == null) { sb.append("null"); diff --git a/services/core/java/com/android/server/content/SyncStorageEngine.java b/services/core/java/com/android/server/content/SyncStorageEngine.java index 8b67b7a27e7ee003fe19f325d09291714ca5c9db..8dd229c3280973dfcbc69b884ae6728b567bb5fc 100644 --- a/services/core/java/com/android/server/content/SyncStorageEngine.java +++ b/services/core/java/com/android/server/content/SyncStorageEngine.java @@ -22,6 +22,7 @@ import android.accounts.AccountManager; import android.app.backup.BackupManager; import android.content.ComponentName; import android.content.ContentResolver; +import android.content.ContentResolver.SyncExemption; import android.content.Context; import android.content.ISyncStatusObserver; import android.content.PeriodicSync; @@ -42,7 +43,14 @@ import android.os.Parcel; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.os.UserHandle; -import android.util.*; +import android.util.ArrayMap; +import android.util.AtomicFile; +import android.util.EventLog; +import android.util.Log; +import android.util.Pair; +import android.util.Slog; +import android.util.SparseArray; +import android.util.Xml; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.ArrayUtils; @@ -341,7 +349,7 @@ public class SyncStorageEngine { /** Called when a sync is needed on an account(s) due to some change in state. */ public void onSyncRequest(EndPoint info, int reason, Bundle extras, - boolean exemptFromAppStandby); + @SyncExemption int syncExemptionFlag); } interface PeriodicSyncAddedListener { @@ -465,11 +473,13 @@ public class SyncStorageEngine { private boolean mGrantSyncAdaptersAccountAccess; private final MyHandler mHandler; + private final SyncLogger mLogger; private SyncStorageEngine(Context context, File dataDir, Looper looper) { mHandler = new MyHandler(looper); mContext = context; sSyncStorageEngine = this; + mLogger = SyncLogger.getInstance(); mCal = Calendar.getInstance(TimeZone.getTimeZone("GMT+0")); @@ -493,6 +503,14 @@ public class SyncStorageEngine { writeAccountInfoLocked(); writeStatusLocked(); writeStatisticsLocked(); + + if (mLogger.enabled()) { + final int size = mAuthorities.size(); + mLogger.log("Loaded ", size, " items"); + for (int i = 0; i < size; i++) { + mLogger.log(mAuthorities.valueAt(i)); + } + } } public static SyncStorageEngine newTestInstance(Context context) { @@ -647,11 +665,16 @@ public class SyncStorageEngine { } public void setSyncAutomatically(Account account, int userId, String providerName, - boolean sync) { + boolean sync, @SyncExemption int syncExemptionFlag, int callingUid) { if (Log.isLoggable(TAG, Log.VERBOSE)) { Slog.d(TAG, "setSyncAutomatically: " + /* account + */" provider " + providerName + ", user " + userId + " -> " + sync); } + mLogger.log("Set sync auto account=", account, + " user=", userId, + " authority=", providerName, + " value=", Boolean.toString(sync), + " callingUid=", callingUid); synchronized (mAuthorities) { AuthorityInfo authority = getOrCreateAuthorityLocked( @@ -677,7 +700,7 @@ public class SyncStorageEngine { if (sync) { requestSync(account, userId, SyncOperation.REASON_SYNC_AUTO, providerName, new Bundle(), - /* exemptFromAppStandby=*/ false); + syncExemptionFlag); } reportChange(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS); queueBackup(); @@ -708,8 +731,10 @@ public class SyncStorageEngine { } } - public void setIsSyncable(Account account, int userId, String providerName, int syncable) { - setSyncableStateForEndPoint(new EndPoint(account, providerName, userId), syncable); + public void setIsSyncable(Account account, int userId, String providerName, int syncable, + int callingUid) { + setSyncableStateForEndPoint(new EndPoint(account, providerName, userId), syncable, + callingUid); } /** @@ -718,8 +743,10 @@ public class SyncStorageEngine { * @param target target to set value for. * @param syncable 0 indicates unsyncable, <0 unknown, >0 is active/syncable. */ - private void setSyncableStateForEndPoint(EndPoint target, int syncable) { + private void setSyncableStateForEndPoint(EndPoint target, int syncable, int callingUid) { AuthorityInfo aInfo; + mLogger.log("Set syncable ", target, " value=", Integer.toString(syncable), + " callingUid=", callingUid); synchronized (mAuthorities) { aInfo = getOrCreateAuthorityLocked(target, -1, false); if (syncable < AuthorityInfo.NOT_INITIALIZED) { @@ -739,7 +766,7 @@ public class SyncStorageEngine { } if (syncable == AuthorityInfo.SYNCABLE) { requestSync(aInfo, SyncOperation.REASON_IS_SYNCABLE, new Bundle(), - /*exemptFromAppStandby=*/ false); // Or the caller FG state? + ContentResolver.SYNC_EXEMPTION_NONE); } reportChange(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS); } @@ -900,7 +927,10 @@ public class SyncStorageEngine { return true; } - public void setMasterSyncAutomatically(boolean flag, int userId) { + public void setMasterSyncAutomatically(boolean flag, int userId, + @SyncExemption int syncExemptionFlag, int callingUid) { + mLogger.log("Set master enabled=", flag, " user=", userId, + " caller=" + callingUid); synchronized (mAuthorities) { Boolean auto = mMasterSyncAutomatically.get(userId); if (auto != null && auto.equals(flag)) { @@ -912,7 +942,7 @@ public class SyncStorageEngine { if (flag) { requestSync(null, userId, SyncOperation.REASON_MASTER_SYNC_AUTO, null, new Bundle(), - /*exemptFromAppStandby=*/ false); // Or the caller FG state? + syncExemptionFlag); } reportChange(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS); mContext.sendBroadcast(ContentResolver.ACTION_SYNC_CONN_STATUS_CHANGED); @@ -2046,7 +2076,8 @@ public class SyncStorageEngine { String value = c.getString(c.getColumnIndex("value")); if (name == null) continue; if (name.equals("listen_for_tickles")) { - setMasterSyncAutomatically(value == null || Boolean.parseBoolean(value), 0); + setMasterSyncAutomatically(value == null || Boolean.parseBoolean(value), 0, + ContentResolver.SYNC_EXEMPTION_NONE, SyncLogger.CALLING_UID_SELF); } else if (name.startsWith("sync_provider_")) { String provider = name.substring("sync_provider_".length(), name.length()); @@ -2143,11 +2174,11 @@ public class SyncStorageEngine { } private void requestSync(AuthorityInfo authorityInfo, int reason, Bundle extras, - boolean exemptFromAppStandby) { + @SyncExemption int syncExemptionFlag) { if (android.os.Process.myUid() == android.os.Process.SYSTEM_UID && mSyncRequestListener != null) { mSyncRequestListener.onSyncRequest(authorityInfo.target, reason, extras, - exemptFromAppStandby); + syncExemptionFlag); } else { SyncRequest.Builder req = new SyncRequest.Builder() @@ -2159,7 +2190,7 @@ public class SyncStorageEngine { } private void requestSync(Account account, int userId, int reason, String authority, - Bundle extras, boolean exemptFromAppStandby) { + Bundle extras, @SyncExemption int syncExemptionFlag) { // If this is happening in the system process, then call the syncrequest listener // to make a request back to the SyncManager directly. // If this is probably a test instance, then call back through the ContentResolver @@ -2168,7 +2199,7 @@ public class SyncStorageEngine { && mSyncRequestListener != null) { mSyncRequestListener.onSyncRequest( new EndPoint(account, authority, userId), - reason, extras, exemptFromAppStandby); + reason, extras, syncExemptionFlag); } else { ContentResolver.requestSync(account, authority, extras); } diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java index c4b2b5ed3ccf83af55af5fe81e246d0b7a5cc9cd..c7ae1f4f5e5078eb1aecb39dcba93d11ec0ed0ee 100644 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -695,6 +695,27 @@ public final class DisplayManagerService extends SystemService { } } + private void setSaturationLevelInternal(float level) { + if (level < 0 || level > 1) { + throw new IllegalArgumentException("Saturation level must be between 0 and 1"); + } + float[] matrix = (level == 1.0f ? null : computeSaturationMatrix(level)); + DisplayTransformManager dtm = LocalServices.getService(DisplayTransformManager.class); + dtm.setColorMatrix(DisplayTransformManager.LEVEL_COLOR_MATRIX_SATURATION, matrix); + } + + private static float[] computeSaturationMatrix(float saturation) { + float desaturation = 1.0f - saturation; + float[] luminance = {0.231f * desaturation, 0.715f * desaturation, 0.072f * desaturation}; + float[] matrix = { + luminance[0] + saturation, luminance[0], luminance[0], 0, + luminance[1], luminance[1] + saturation, luminance[1], 0, + luminance[2], luminance[2], luminance[2] + saturation, 0, + 0, 0, 0, 1 + }; + return matrix; + } + private int createVirtualDisplayInternal(IVirtualDisplayCallback callback, IMediaProjection projection, int callingUid, String packageName, String name, int width, int height, int densityDpi, Surface surface, int flags, String uniqueId) { @@ -1686,6 +1707,19 @@ public final class DisplayManagerService extends SystemService { } } + @Override // Binder call + public void setSaturationLevel(float level) { + mContext.enforceCallingOrSelfPermission( + Manifest.permission.CONTROL_DISPLAY_SATURATION, + "Permission required to set display saturation level"); + final long token = Binder.clearCallingIdentity(); + try { + setSaturationLevelInternal(level); + } finally { + Binder.restoreCallingIdentity(token); + } + } + @Override // Binder call public int createVirtualDisplay(IVirtualDisplayCallback callback, IMediaProjection projection, String packageName, String name, diff --git a/services/core/java/com/android/server/display/DisplayTransformManager.java b/services/core/java/com/android/server/display/DisplayTransformManager.java index 000fcf3e992b7fe21c65ca1faae3c5086fc52fda..a94f049f7ef82785a86c54c3a4f7be108847883e 100644 --- a/services/core/java/com/android/server/display/DisplayTransformManager.java +++ b/services/core/java/com/android/server/display/DisplayTransformManager.java @@ -17,7 +17,6 @@ package com.android.server.display; import android.app.ActivityManager; -import android.app.IActivityManager; import android.opengl.Matrix; import android.os.IBinder; import android.os.Parcel; @@ -28,7 +27,6 @@ import android.util.Log; import android.util.Slog; import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; - import com.android.internal.app.ColorDisplayController; import java.util.Arrays; @@ -45,6 +43,10 @@ public class DisplayTransformManager { * Color transform level used by Night display to tint the display red. */ public static final int LEVEL_COLOR_MATRIX_NIGHT_DISPLAY = 100; + /** + * Color transform level used to adjust the color saturation of the display. + */ + public static final int LEVEL_COLOR_MATRIX_SATURATION = 150; /** * Color transform level used by A11y services to make the display monochromatic. */ diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java index 262a2f8ea817b2f942e91e7481e78e17178c3518..92d3772e06070bc149e6afeda76c4f385bf3e135 100644 --- a/services/core/java/com/android/server/fingerprint/FingerprintService.java +++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java @@ -1470,6 +1470,8 @@ public class FingerprintService extends SystemService implements IHwBinder.Death proto.end(userToken); } proto.flush(); + mPerformanceMap.clear(); + mCryptoPerformanceMap.clear(); } @Override diff --git a/services/core/java/com/android/server/job/controllers/IdleController.java b/services/core/java/com/android/server/job/controllers/IdleController.java index 1dbcfd6a5bdf830d1d4d1845bf78407c8105daf4..40d2a3a4a09452d4657cfe285add4d90b5f8b41c 100644 --- a/services/core/java/com/android/server/job/controllers/IdleController.java +++ b/services/core/java/com/android/server/job/controllers/IdleController.java @@ -19,7 +19,6 @@ package com.android.server.job.controllers; import static com.android.server.job.JobSchedulerService.sElapsedRealtimeClock; import android.app.AlarmManager; -import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -101,18 +100,19 @@ public final class IdleController extends StateController { final class IdlenessTracker extends BroadcastReceiver { private AlarmManager mAlarm; - private PendingIntent mIdleTriggerIntent; - boolean mIdle; - boolean mScreenOn; + + // After construction, mutations of idle/screen-on state will only happen + // on the main looper thread, either in onReceive() or in an alarm callback. + private boolean mIdle; + private boolean mScreenOn; + + private AlarmManager.OnAlarmListener mIdleAlarmListener = () -> { + handleIdleTrigger(); + }; public IdlenessTracker() { mAlarm = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); - Intent intent = new Intent(ActivityManagerService.ACTION_TRIGGER_IDLE) - .setPackage("android") - .setFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); - mIdleTriggerIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0); - // At boot we presume that the user has just "interacted" with the // device in some meaningful way. mIdle = false; @@ -150,7 +150,7 @@ public final class IdleController extends StateController { } mScreenOn = true; //cancel the alarm - mAlarm.cancel(mIdleTriggerIntent); + mAlarm.cancel(mIdleAlarmListener); if (mIdle) { // possible transition to not-idle mIdle = false; @@ -169,20 +169,24 @@ public final class IdleController extends StateController { } mScreenOn = false; mAlarm.setWindow(AlarmManager.ELAPSED_REALTIME_WAKEUP, - when, mIdleWindowSlop, mIdleTriggerIntent); + when, mIdleWindowSlop, "JS idleness", mIdleAlarmListener, null); } else if (action.equals(ActivityManagerService.ACTION_TRIGGER_IDLE)) { - // idle time starts now. Do not set mIdle if screen is on. - if (!mIdle && !mScreenOn) { - if (DEBUG) { - Slog.v(TAG, "Idle trigger fired @ " + sElapsedRealtimeClock.millis()); - } - mIdle = true; - reportNewIdleState(mIdle); - } else { - if (DEBUG) { - Slog.v(TAG, "TRIGGER_IDLE received but not changing state; idle=" - + mIdle + " screen=" + mScreenOn); - } + handleIdleTrigger(); + } + } + + private void handleIdleTrigger() { + // idle time starts now. Do not set mIdle if screen is on. + if (!mIdle && !mScreenOn) { + if (DEBUG) { + Slog.v(TAG, "Idle trigger fired @ " + sElapsedRealtimeClock.millis()); + } + mIdle = true; + reportNewIdleState(mIdle); + } else { + if (DEBUG) { + Slog.v(TAG, "TRIGGER_IDLE received but not changing state; idle=" + + mIdle + " screen=" + mScreenOn); } } } diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java index 3374b30448d47b3a4f2a2b52f9e5c512254af88b..5955c9c3dd0a7e13ed2af68e18d04efffdcf24f8 100644 --- a/services/core/java/com/android/server/location/GnssLocationProvider.java +++ b/services/core/java/com/android/server/location/GnssLocationProvider.java @@ -2513,6 +2513,8 @@ public class GnssLocationProvider implements LocationProviderInterface { * this handler. */ private void handleInitialize() { + native_init_once(); + /* * A cycle of native_init() and native_cleanup() is needed so that callbacks are * registered after bootup even when location is disabled. @@ -2576,9 +2578,9 @@ public class GnssLocationProvider implements LocationProviderInterface { // register for connectivity change events, this is equivalent to the deprecated way of // registering for CONNECTIVITY_ACTION broadcasts NetworkRequest.Builder networkRequestBuilder = new NetworkRequest.Builder(); - networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); - networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI); - networkRequestBuilder.addTransportType(NetworkCapabilities.TRANSPORT_BLUETOOTH); + networkRequestBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET); + networkRequestBuilder.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED); + networkRequestBuilder.removeCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN); NetworkRequest networkRequest = networkRequestBuilder.build(); mConnMgr.registerNetworkCallback(networkRequest, mNetworkConnectivityCallback); @@ -2899,6 +2901,8 @@ public class GnssLocationProvider implements LocationProviderInterface { private static native boolean native_is_gnss_configuration_supported(); + private static native void native_init_once(); + private native boolean native_init(); private native void native_cleanup(); diff --git a/services/core/java/com/android/server/locksettings/LockSettingsService.java b/services/core/java/com/android/server/locksettings/LockSettingsService.java index f617964481bf641e6234a8c3e4e01d3784ca06c8..4b58d537e84498c817c2ab97a32c128e6e045e34 100644 --- a/services/core/java/com/android/server/locksettings/LockSettingsService.java +++ b/services/core/java/com/android/server/locksettings/LockSettingsService.java @@ -2078,11 +2078,6 @@ public class LockSettingsService extends ILockSettings.Stub { mRecoverableKeyStoreManager.removeKey(alias); } - @Override - public byte[] generateAndStoreKey(@NonNull String alias) throws RemoteException { - return mRecoverableKeyStoreManager.generateAndStoreKey(alias); - } - @Override public @Nullable String generateKey(@NonNull String alias) throws RemoteException { return mRecoverableKeyStoreManager.generateKey(alias); diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/KeySyncTask.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/KeySyncTask.java index 050c1f4a6141c30db5e1f65b1318f772d4bfd5d5..b0afac2c62ddcde00a7f200666e7393350cc2809 100644 --- a/services/core/java/com/android/server/locksettings/recoverablekeystore/KeySyncTask.java +++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/KeySyncTask.java @@ -79,6 +79,7 @@ public class KeySyncTask implements Runnable { private final PlatformKeyManager mPlatformKeyManager; private final RecoverySnapshotStorage mRecoverySnapshotStorage; private final RecoverySnapshotListenersStorage mSnapshotListenersStorage; + private final TestOnlyInsecureCertificateHelper mTestOnlyInsecureCertificateHelper; public static KeySyncTask newInstance( Context context, @@ -98,7 +99,8 @@ public class KeySyncTask implements Runnable { credentialType, credential, credentialUpdated, - PlatformKeyManager.getInstance(context, recoverableKeyStoreDb)); + PlatformKeyManager.getInstance(context, recoverableKeyStoreDb), + new TestOnlyInsecureCertificateHelper()); } /** @@ -110,6 +112,7 @@ public class KeySyncTask implements Runnable { * @param credential The credential, encoded as a {@link String}. * @param credentialUpdated signals weather credentials were updated. * @param platformKeyManager platform key manager + * @param TestOnlyInsecureCertificateHelper utility class used for end-to-end tests */ @VisibleForTesting KeySyncTask( @@ -120,7 +123,8 @@ public class KeySyncTask implements Runnable { int credentialType, String credential, boolean credentialUpdated, - PlatformKeyManager platformKeyManager) { + PlatformKeyManager platformKeyManager, + TestOnlyInsecureCertificateHelper TestOnlyInsecureCertificateHelper) { mSnapshotListenersStorage = recoverySnapshotListenersStorage; mRecoverableKeyStoreDb = recoverableKeyStoreDb; mUserId = userId; @@ -129,6 +133,7 @@ public class KeySyncTask implements Runnable { mCredentialUpdated = credentialUpdated; mPlatformKeyManager = platformKeyManager; mRecoverySnapshotStorage = snapshotStorage; + mTestOnlyInsecureCertificateHelper = TestOnlyInsecureCertificateHelper; } @Override @@ -189,8 +194,9 @@ public class KeySyncTask implements Runnable { PublicKey publicKey; String rootCertAlias = mRecoverableKeyStoreDb.getActiveRootOfTrust(mUserId, recoveryAgentUid); + rootCertAlias = mTestOnlyInsecureCertificateHelper + .getDefaultCertificateAliasIfEmpty(rootCertAlias); - rootCertAlias = replaceEmptyValueWithSecureDefault(rootCertAlias); CertPath certPath = mRecoverableKeyStoreDb.getRecoveryServiceCertPath(mUserId, recoveryAgentUid, rootCertAlias); if (certPath != null) { @@ -212,12 +218,18 @@ public class KeySyncTask implements Runnable { return; } - // The only place in this class which uses credential value - if (!TrustedRootCertificates.GOOGLE_CLOUD_KEY_VAULT_SERVICE_V1_ALIAS.equals( - rootCertAlias)) { - // TODO: allow only whitelisted LSKF usage - Log.w(TAG, "Untrusted root certificate is used by recovery agent " + if (mTestOnlyInsecureCertificateHelper.isTestOnlyCertificate(rootCertAlias)) { + Log.w(TAG, "Insecure root certificate is used by recovery agent " + recoveryAgentUid); + if (mTestOnlyInsecureCertificateHelper.doesCredentailSupportInsecureMode( + mCredentialType, mCredential)) { + Log.w(TAG, "Whitelisted credential is used to generate snapshot by " + + "recovery agent "+ recoveryAgentUid); + } else { + Log.w(TAG, "Non whitelisted credential is used to generate recovery snapshot by " + + recoveryAgentUid + " - ignore attempt."); + return; // User secret will not be used. + } } byte[] salt = generateSalt(); @@ -239,8 +251,10 @@ public class KeySyncTask implements Runnable { return; } - // TODO: filter raw keys based on the root of trust. - // It is the only place in the class where raw key material is used. + // Only include insecure key material for test + if (mTestOnlyInsecureCertificateHelper.isTestOnlyCertificate(rootCertAlias)) { + rawKeys = mTestOnlyInsecureCertificateHelper.keepOnlyWhitelistedInsecureKeys(rawKeys); + } SecretKey recoveryKey; try { recoveryKey = generateRecoveryKey(); @@ -467,14 +481,4 @@ public class KeySyncTask implements Runnable { } return keyEntries; } - - private @NonNull String replaceEmptyValueWithSecureDefault( - @Nullable String rootCertificateAlias) { - if (rootCertificateAlias == null || rootCertificateAlias.isEmpty()) { - Log.e(TAG, "rootCertificateAlias is null or empty"); - // Use the default Google Key Vault Service CA certificate if the alias is not provided - rootCertificateAlias = TrustedRootCertificates.GOOGLE_CLOUD_KEY_VAULT_SERVICE_V1_ALIAS; - } - return rootCertificateAlias; - } } diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java index 30125f8199deea45dc2669dbfb4f1335bb36a266..9f6ac10378ba026daf3232ab72ad585d88296251 100644 --- a/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java +++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/RecoverableKeyStoreManager.java @@ -31,7 +31,6 @@ import android.annotation.Nullable; import android.app.PendingIntent; import android.content.Context; import android.os.Binder; -import android.os.Process; import android.os.RemoteException; import android.os.ServiceSpecificException; import android.os.UserHandle; @@ -39,7 +38,6 @@ import android.security.keystore.recovery.KeyChainProtectionParams; import android.security.keystore.recovery.KeyChainSnapshot; import android.security.keystore.recovery.RecoveryCertPath; import android.security.keystore.recovery.RecoveryController; -import android.security.keystore.recovery.TrustedRootCertificates; import android.security.keystore.recovery.WrappedApplicationKey; import android.security.KeyStore; import android.util.ArrayMap; @@ -100,8 +98,8 @@ public class RecoverableKeyStoreManager { private final RecoverableKeyGenerator mRecoverableKeyGenerator; private final RecoverySnapshotStorage mSnapshotStorage; private final PlatformKeyManager mPlatformKeyManager; - private final KeyStore mKeyStore; private final ApplicationKeyStorage mApplicationKeyStorage; + private final TestOnlyInsecureCertificateHelper mTestCertHelper; /** * Returns a new or existing instance. @@ -126,14 +124,14 @@ public class RecoverableKeyStoreManager { mInstance = new RecoverableKeyStoreManager( context.getApplicationContext(), - keystore, db, new RecoverySessionStorage(), Executors.newSingleThreadExecutor(), - new RecoverySnapshotStorage(), + RecoverySnapshotStorage.newInstance(), new RecoverySnapshotListenersStorage(), platformKeyManager, - applicationKeyStorage); + applicationKeyStorage, + new TestOnlyInsecureCertificateHelper()); } return mInstance; } @@ -141,16 +139,15 @@ public class RecoverableKeyStoreManager { @VisibleForTesting RecoverableKeyStoreManager( Context context, - KeyStore keystore, RecoverableKeyStoreDb recoverableKeyStoreDb, RecoverySessionStorage recoverySessionStorage, ExecutorService executorService, RecoverySnapshotStorage snapshotStorage, RecoverySnapshotListenersStorage listenersStorage, PlatformKeyManager platformKeyManager, - ApplicationKeyStorage applicationKeyStorage) { + ApplicationKeyStorage applicationKeyStorage, + TestOnlyInsecureCertificateHelper TestOnlyInsecureCertificateHelper) { mContext = context; - mKeyStore = keystore; mDatabase = recoverableKeyStoreDb; mRecoverySessionStorage = recoverySessionStorage; mExecutorService = executorService; @@ -158,6 +155,7 @@ public class RecoverableKeyStoreManager { mSnapshotStorage = snapshotStorage; mPlatformKeyManager = platformKeyManager; mApplicationKeyStorage = applicationKeyStorage; + mTestCertHelper = TestOnlyInsecureCertificateHelper; try { mRecoverableKeyGenerator = RecoverableKeyGenerator.newInstance(mDatabase); @@ -176,7 +174,8 @@ public class RecoverableKeyStoreManager { checkRecoverKeyStorePermission(); int userId = UserHandle.getCallingUserId(); int uid = Binder.getCallingUid(); - rootCertificateAlias = replaceEmptyValueWithSecureDefault(rootCertificateAlias); + rootCertificateAlias + = mTestCertHelper.getDefaultCertificateAliasIfEmpty(rootCertificateAlias); // Always set active alias to the argument of the last call to initRecoveryService method, // even if cert file is incorrect. @@ -221,14 +220,14 @@ public class RecoverableKeyStoreManager { // Randomly choose and validate an endpoint certificate from the list CertPath certPath; - X509Certificate rootCert = getRootCertificate(rootCertificateAlias); + X509Certificate rootCert = + mTestCertHelper.getRootCertificate(rootCertificateAlias); try { Log.d(TAG, "Getting and validating a random endpoint certificate"); certPath = certXml.getRandomEndpointCert(rootCert); } catch (CertValidationException e) { Log.e(TAG, "Invalid endpoint cert", e); - throw new ServiceSpecificException( - ERROR_INVALID_CERTIFICATE, "Failed to validate certificate."); + throw new ServiceSpecificException(ERROR_INVALID_CERTIFICATE, e.getMessage()); } boolean wasInitialized = mDatabase.getRecoveryServiceCertPath(userId, uid, @@ -249,8 +248,7 @@ public class RecoverableKeyStoreManager { } } catch (CertificateEncodingException e) { Log.e(TAG, "Failed to encode CertPath", e); - throw new ServiceSpecificException( - ERROR_BAD_CERTIFICATE_FORMAT, "Failed to encode CertPath."); + throw new ServiceSpecificException(ERROR_BAD_CERTIFICATE_FORMAT, e.getMessage()); } } @@ -270,7 +268,8 @@ public class RecoverableKeyStoreManager { @NonNull byte[] recoveryServiceSigFile) throws RemoteException { checkRecoverKeyStorePermission(); - rootCertificateAlias = replaceEmptyValueWithSecureDefault(rootCertificateAlias); + rootCertificateAlias = + mTestCertHelper.getDefaultCertificateAliasIfEmpty(rootCertificateAlias); Preconditions.checkNotNull(recoveryServiceCertFile, "recoveryServiceCertFile is null"); Preconditions.checkNotNull(recoveryServiceSigFile, "recoveryServiceSigFile is null"); @@ -280,19 +279,18 @@ public class RecoverableKeyStoreManager { } catch (CertParsingException e) { Log.d(TAG, "Failed to parse the sig file: " + HexDump.toHexString( recoveryServiceSigFile)); - throw new ServiceSpecificException( - ERROR_BAD_CERTIFICATE_FORMAT, "Failed to parse the sig file."); + throw new ServiceSpecificException(ERROR_BAD_CERTIFICATE_FORMAT, e.getMessage()); } - X509Certificate rootCert = getRootCertificate(rootCertificateAlias); + X509Certificate rootCert = + mTestCertHelper.getRootCertificate(rootCertificateAlias); try { sigXml.verifyFileSignature(rootCert, recoveryServiceCertFile); } catch (CertValidationException e) { Log.d(TAG, "The signature over the cert file is invalid." + " Cert: " + HexDump.toHexString(recoveryServiceCertFile) + " Sig: " + HexDump.toHexString(recoveryServiceSigFile)); - throw new ServiceSpecificException( - ERROR_INVALID_CERTIFICATE, "The signature over the cert file is invalid."); + throw new ServiceSpecificException(ERROR_INVALID_CERTIFICATE, e.getMessage()); } initRecoveryService(rootCertificateAlias, recoveryServiceCertFile); @@ -469,8 +467,7 @@ public class RecoverableKeyStoreManager { try { publicKey = KeySyncUtils.deserializePublicKey(verifierPublicKey); } catch (InvalidKeySpecException e) { - throw new ServiceSpecificException(ERROR_BAD_CERTIFICATE_FORMAT, - "Not a valid X509 key"); + throw new ServiceSpecificException(ERROR_BAD_CERTIFICATE_FORMAT, e.getMessage()); } // The raw public key bytes contained in vaultParams must match the ones given in // verifierPublicKey; otherwise, the user secret may be decrypted by a key that is not owned @@ -524,7 +521,8 @@ public class RecoverableKeyStoreManager { @NonNull List secrets) throws RemoteException { checkRecoverKeyStorePermission(); - rootCertificateAlias = replaceEmptyValueWithSecureDefault(rootCertificateAlias); + rootCertificateAlias = + mTestCertHelper.getDefaultCertificateAliasIfEmpty(rootCertificateAlias); Preconditions.checkNotNull(sessionId, "invalid session"); Preconditions.checkNotNull(verifierCertPath, "verifierCertPath is null"); Preconditions.checkNotNull(vaultParams, "vaultParams is null"); @@ -534,12 +532,12 @@ public class RecoverableKeyStoreManager { try { certPath = verifierCertPath.getCertPath(); } catch (CertificateException e) { - throw new ServiceSpecificException(ERROR_BAD_CERTIFICATE_FORMAT, - "Failed decode the certificate path"); + throw new ServiceSpecificException(ERROR_BAD_CERTIFICATE_FORMAT, e.getMessage()); } try { - CertUtils.validateCertPath(getRootCertificate(rootCertificateAlias), certPath); + CertUtils.validateCertPath( + mTestCertHelper.getRootCertificate(rootCertificateAlias), certPath); } catch (CertValidationException e) { Log.e(TAG, "Failed to validate the given cert path", e); throw new ServiceSpecificException(ERROR_INVALID_CERTIFICATE, e.getMessage()); @@ -667,40 +665,6 @@ public class RecoverableKeyStoreManager { return mApplicationKeyStorage.getGrantAlias(userId, uid, alias); } - /** - * Deprecated - * Generates a key named {@code alias} in the recoverable store for the calling uid. Then - * returns the raw key material. - * - *

        TODO: Once AndroidKeyStore has added move api, do not return raw bytes. - * - * @deprecated - * @hide - */ - public byte[] generateAndStoreKey(@NonNull String alias) throws RemoteException { - checkRecoverKeyStorePermission(); - int uid = Binder.getCallingUid(); - int userId = UserHandle.getCallingUserId(); - - PlatformEncryptionKey encryptionKey; - try { - encryptionKey = mPlatformKeyManager.getEncryptKey(userId); - } catch (NoSuchAlgorithmException e) { - // Impossible: all algorithms must be supported by AOSP - throw new RuntimeException(e); - } catch (KeyStoreException | UnrecoverableKeyException e) { - throw new ServiceSpecificException(ERROR_SERVICE_INTERNAL_ERROR, e.getMessage()); - } catch (InsecureUserException e) { - throw new ServiceSpecificException(ERROR_INSECURE_USER, e.getMessage()); - } - - try { - return mRecoverableKeyGenerator.generateAndStoreKey(encryptionKey, userId, uid, alias); - } catch (KeyStoreException | InvalidKeyException | RecoverableKeyStorageException e) { - throw new ServiceSpecificException(ERROR_SERVICE_INTERNAL_ERROR, e.getMessage()); - } - } - /** * Destroys the session with the given {@code sessionId}. */ @@ -965,27 +929,6 @@ public class RecoverableKeyStoreManager { } } - private X509Certificate getRootCertificate(String rootCertificateAlias) throws RemoteException { - rootCertificateAlias = replaceEmptyValueWithSecureDefault(rootCertificateAlias); - X509Certificate rootCertificate = - TrustedRootCertificates.getRootCertificate(rootCertificateAlias); - if (rootCertificate == null) { - throw new ServiceSpecificException( - ERROR_INVALID_CERTIFICATE, "The provided root certificate alias is invalid"); - } - return rootCertificate; - } - - private @NonNull String replaceEmptyValueWithSecureDefault( - @Nullable String rootCertificateAlias) { - if (rootCertificateAlias == null || rootCertificateAlias.isEmpty()) { - Log.e(TAG, "rootCertificateAlias is null or empty"); - // Use the default Google Key Vault Service CA certificate if the alias is not provided - rootCertificateAlias = TrustedRootCertificates.GOOGLE_CLOUD_KEY_VAULT_SERVICE_V1_ALIAS; - } - return rootCertificateAlias; - } - private void checkRecoverKeyStorePermission() { mContext.enforceCallingOrSelfPermission( Manifest.permission.RECOVER_KEYSTORE, diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelper.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelper.java new file mode 100644 index 0000000000000000000000000000000000000000..490f733f149f03ceb455d21bbed9049b7395c197 --- /dev/null +++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/TestOnlyInsecureCertificateHelper.java @@ -0,0 +1,103 @@ +/* + * 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.server.locksettings.recoverablekeystore; + +import static android.security.keystore.recovery.RecoveryController.ERROR_INVALID_CERTIFICATE; + +import com.android.internal.widget.LockPatternUtils; +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.os.RemoteException; +import android.os.ServiceSpecificException; +import android.security.keystore.recovery.TrustedRootCertificates; +import android.util.Log; + +import java.util.HashMap; +import java.security.cert.X509Certificate; +import java.util.Map; +import javax.crypto.SecretKey; + +/** + * The class provides helper methods to support end-to-end test with insecure certificate. + */ +public class TestOnlyInsecureCertificateHelper { + private static final String TAG = "TestCertHelper"; + + /** + * Constructor for the helper class. + */ + public TestOnlyInsecureCertificateHelper() { + } + + /** + * Returns a root certificate installed in the system for given alias. + * Returns default secure certificate if alias is empty or null. + * Can return insecure certificate for its alias. + */ + public @NonNull X509Certificate + getRootCertificate(String rootCertificateAlias) throws RemoteException { + rootCertificateAlias = getDefaultCertificateAliasIfEmpty(rootCertificateAlias); + if (isTestOnlyCertificate(rootCertificateAlias)) { + return TrustedRootCertificates.getTestOnlyInsecureCertificate(); + } + + X509Certificate rootCertificate = + TrustedRootCertificates.getRootCertificate(rootCertificateAlias); + if (rootCertificate == null) { + throw new ServiceSpecificException( + ERROR_INVALID_CERTIFICATE, "The provided root certificate alias is invalid"); + } + return rootCertificate; + } + + public @NonNull String getDefaultCertificateAliasIfEmpty( + @Nullable String rootCertificateAlias) { + if (rootCertificateAlias == null || rootCertificateAlias.isEmpty()) { + Log.e(TAG, "rootCertificateAlias is null or empty - use secure default value"); + // Use the default Google Key Vault Service CA certificate if the alias is not provided + rootCertificateAlias = TrustedRootCertificates.GOOGLE_CLOUD_KEY_VAULT_SERVICE_V1_ALIAS; + } + return rootCertificateAlias; + } + + public boolean isTestOnlyCertificate(String rootCertificateAlias) { + return TrustedRootCertificates.TEST_ONLY_INSECURE_CERTIFICATE_ALIAS + .equals(rootCertificateAlias); + } + + public boolean doesCredentailSupportInsecureMode(int credentialType, String credential) { + return (credentialType == LockPatternUtils.CREDENTIAL_TYPE_PASSWORD) + && (credential != null) + && credential.startsWith(TrustedRootCertificates.INSECURE_PASSWORD_PREFIX); + } + + public Map keepOnlyWhitelistedInsecureKeys(Map rawKeys) { + if (rawKeys == null) { + return null; + } + Map filteredKeys = new HashMap<>(); + for (Map.Entry entry : rawKeys.entrySet()) { + String alias = entry.getKey(); + if (alias != null + && alias.startsWith(TrustedRootCertificates.INSECURE_KEY_ALIAS_PREFIX)) { + filteredKeys.put(entry.getKey(), entry.getValue()); + Log.d(TAG, "adding key with insecure alias " + alias + " to the recovery snapshot"); + } + } + return filteredKeys; + } +} diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer.java new file mode 100644 index 0000000000000000000000000000000000000000..f789155cee52507517678dcdb006f89c2c0bd870 --- /dev/null +++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotDeserializer.java @@ -0,0 +1,409 @@ +/* + * 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.server.locksettings.recoverablekeystore.serialization; + +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.CERTIFICATE_FACTORY_TYPE; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.NAMESPACE; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.OUTPUT_ENCODING; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_ALGORITHM; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_ALIAS; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_APPLICATION_KEY; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_APPLICATION_KEYS; + +import static com.android.server.locksettings.recoverablekeystore.serialization + .KeyChainSnapshotSchema.TAG_BACKEND_PUBLIC_KEY; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_COUNTER_ID; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_RECOVERY_KEY_MATERIAL; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_KEY_CHAIN_PROTECTION_PARAMS; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_KEY_CHAIN_PROTECTION_PARAMS_LIST; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_KEY_CHAIN_SNAPSHOT; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_KEY_DERIVATION_PARAMS; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_KEY_MATERIAL; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_LOCK_SCREEN_UI_TYPE; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_MAX_ATTEMPTS; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_MEMORY_DIFFICULTY; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_SALT; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_SERVER_PARAMS; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_SNAPSHOT_VERSION; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_TRUSTED_HARDWARE_CERT_PATH; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_USER_SECRET_TYPE; + +import android.security.keystore.recovery.KeyChainProtectionParams; +import android.security.keystore.recovery.KeyChainSnapshot; +import android.security.keystore.recovery.KeyDerivationParams; +import android.security.keystore.recovery.WrappedApplicationKey; +import android.util.Base64; +import android.util.Xml; + +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.security.cert.CertPath; +import java.security.cert.CertificateException; +import java.security.cert.CertificateFactory; +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; + +/** + * Deserializes a {@link android.security.keystore.recovery.KeyChainSnapshot} instance from XML. + */ +public class KeyChainSnapshotDeserializer { + + /** + * Deserializes a {@link KeyChainSnapshot} instance from the XML in the {@code inputStream}. + * + * @throws IOException if there is an IO error reading from the stream. + * @throws KeyChainSnapshotParserException if the XML does not conform to the expected XML for + * a snapshot. + */ + public static KeyChainSnapshot deserialize(InputStream inputStream) + throws KeyChainSnapshotParserException, IOException { + try { + return deserializeInternal(inputStream); + } catch (XmlPullParserException e) { + throw new KeyChainSnapshotParserException("Malformed KeyChainSnapshot XML", e); + } + } + + private static KeyChainSnapshot deserializeInternal(InputStream inputStream) throws IOException, + XmlPullParserException, KeyChainSnapshotParserException { + XmlPullParser parser = Xml.newPullParser(); + parser.setInput(inputStream, OUTPUT_ENCODING); + + parser.nextTag(); + parser.require(XmlPullParser.START_TAG, NAMESPACE, TAG_KEY_CHAIN_SNAPSHOT); + + KeyChainSnapshot.Builder builder = new KeyChainSnapshot.Builder(); + while (parser.next() != XmlPullParser.END_TAG) { + if (parser.getEventType() != XmlPullParser.START_TAG) { + continue; + } + + String name = parser.getName(); + + switch (name) { + case TAG_SNAPSHOT_VERSION: + builder.setSnapshotVersion(readIntTag(parser, TAG_SNAPSHOT_VERSION)); + break; + + case TAG_RECOVERY_KEY_MATERIAL: + builder.setEncryptedRecoveryKeyBlob( + readBlobTag(parser, TAG_RECOVERY_KEY_MATERIAL)); + break; + + case TAG_COUNTER_ID: + builder.setCounterId(readLongTag(parser, TAG_COUNTER_ID)); + break; + + case TAG_SERVER_PARAMS: + builder.setServerParams(readBlobTag(parser, TAG_SERVER_PARAMS)); + break; + + case TAG_MAX_ATTEMPTS: + builder.setMaxAttempts(readIntTag(parser, TAG_MAX_ATTEMPTS)); + break; + + case TAG_TRUSTED_HARDWARE_CERT_PATH: + try { + builder.setTrustedHardwareCertPath( + readCertPathTag(parser, TAG_TRUSTED_HARDWARE_CERT_PATH)); + } catch (CertificateException e) { + throw new KeyChainSnapshotParserException( + "Could not set trustedHardwareCertPath", e); + } + break; + + case TAG_BACKEND_PUBLIC_KEY: + builder.setTrustedHardwarePublicKey( + readBlobTag(parser, TAG_BACKEND_PUBLIC_KEY)); + break; + + case TAG_KEY_CHAIN_PROTECTION_PARAMS_LIST: + builder.setKeyChainProtectionParams(readKeyChainProtectionParamsList(parser)); + break; + + case TAG_APPLICATION_KEYS: + builder.setWrappedApplicationKeys(readWrappedApplicationKeys(parser)); + break; + + default: + throw new KeyChainSnapshotParserException(String.format( + Locale.US, "Unexpected tag %s in keyChainSnapshot", name)); + } + } + + parser.require(XmlPullParser.END_TAG, NAMESPACE, TAG_KEY_CHAIN_SNAPSHOT); + try { + return builder.build(); + } catch (NullPointerException e) { + throw new KeyChainSnapshotParserException("Failed to build KeyChainSnapshot", e); + } + } + + private static List readWrappedApplicationKeys(XmlPullParser parser) + throws IOException, XmlPullParserException, KeyChainSnapshotParserException { + parser.require(XmlPullParser.START_TAG, NAMESPACE, TAG_APPLICATION_KEYS); + ArrayList keys = new ArrayList<>(); + while (parser.next() != XmlPullParser.END_TAG) { + if (parser.getEventType() != XmlPullParser.START_TAG) { + continue; + } + keys.add(readWrappedApplicationKey(parser)); + } + parser.require(XmlPullParser.END_TAG, NAMESPACE, TAG_APPLICATION_KEYS); + return keys; + } + + private static WrappedApplicationKey readWrappedApplicationKey(XmlPullParser parser) + throws IOException, XmlPullParserException, KeyChainSnapshotParserException { + parser.require(XmlPullParser.START_TAG, NAMESPACE, TAG_APPLICATION_KEY); + WrappedApplicationKey.Builder builder = new WrappedApplicationKey.Builder(); + while (parser.next() != XmlPullParser.END_TAG) { + if (parser.getEventType() != XmlPullParser.START_TAG) { + continue; + } + + String name = parser.getName(); + + switch (name) { + case TAG_ALIAS: + builder.setAlias(readStringTag(parser, TAG_ALIAS)); + break; + + case TAG_KEY_MATERIAL: + builder.setEncryptedKeyMaterial(readBlobTag(parser, TAG_KEY_MATERIAL)); + break; + + default: + throw new KeyChainSnapshotParserException(String.format( + Locale.US, "Unexpected tag %s in wrappedApplicationKey", name)); + } + } + parser.require(XmlPullParser.END_TAG, NAMESPACE, TAG_APPLICATION_KEY); + + try { + return builder.build(); + } catch (NullPointerException e) { + throw new KeyChainSnapshotParserException("Failed to build WrappedApplicationKey", e); + } + } + + private static List readKeyChainProtectionParamsList( + XmlPullParser parser) throws IOException, XmlPullParserException, + KeyChainSnapshotParserException { + parser.require(XmlPullParser.START_TAG, NAMESPACE, TAG_KEY_CHAIN_PROTECTION_PARAMS_LIST); + + ArrayList keyChainProtectionParamsList = new ArrayList<>(); + while (parser.next() != XmlPullParser.END_TAG) { + if (parser.getEventType() != XmlPullParser.START_TAG) { + continue; + } + keyChainProtectionParamsList.add(readKeyChainProtectionParams(parser)); + } + + parser.require(XmlPullParser.END_TAG, NAMESPACE, TAG_KEY_CHAIN_PROTECTION_PARAMS_LIST); + return keyChainProtectionParamsList; + } + + private static KeyChainProtectionParams readKeyChainProtectionParams(XmlPullParser parser) + throws IOException, XmlPullParserException, KeyChainSnapshotParserException { + parser.require(XmlPullParser.START_TAG, NAMESPACE, TAG_KEY_CHAIN_PROTECTION_PARAMS); + + KeyChainProtectionParams.Builder builder = new KeyChainProtectionParams.Builder(); + while (parser.next() != XmlPullParser.END_TAG) { + if (parser.getEventType() != XmlPullParser.START_TAG) { + continue; + } + + String name = parser.getName(); + + switch (name) { + case TAG_LOCK_SCREEN_UI_TYPE: + builder.setLockScreenUiFormat(readIntTag(parser, TAG_LOCK_SCREEN_UI_TYPE)); + break; + + case TAG_USER_SECRET_TYPE: + builder.setUserSecretType(readIntTag(parser, TAG_USER_SECRET_TYPE)); + break; + + case TAG_KEY_DERIVATION_PARAMS: + builder.setKeyDerivationParams(readKeyDerivationParams(parser)); + break; + + default: + throw new KeyChainSnapshotParserException(String.format( + Locale.US, + "Unexpected tag %s in keyChainProtectionParams", + name)); + + } + } + + parser.require(XmlPullParser.END_TAG, NAMESPACE, TAG_KEY_CHAIN_PROTECTION_PARAMS); + + try { + return builder.build(); + } catch (NullPointerException e) { + throw new KeyChainSnapshotParserException( + "Failed to build KeyChainProtectionParams", e); + } + } + + private static KeyDerivationParams readKeyDerivationParams(XmlPullParser parser) + throws XmlPullParserException, IOException, KeyChainSnapshotParserException { + parser.require(XmlPullParser.START_TAG, NAMESPACE, TAG_KEY_DERIVATION_PARAMS); + + int memoryDifficulty = -1; + int algorithm = -1; + byte[] salt = null; + + while (parser.next() != XmlPullParser.END_TAG) { + if (parser.getEventType() != XmlPullParser.START_TAG) { + continue; + } + + String name = parser.getName(); + + switch (name) { + case TAG_MEMORY_DIFFICULTY: + memoryDifficulty = readIntTag(parser, TAG_MEMORY_DIFFICULTY); + break; + + case TAG_ALGORITHM: + algorithm = readIntTag(parser, TAG_ALGORITHM); + break; + + case TAG_SALT: + salt = readBlobTag(parser, TAG_SALT); + break; + + default: + throw new KeyChainSnapshotParserException( + String.format( + Locale.US, + "Unexpected tag %s in keyDerivationParams", + name)); + } + } + + if (salt == null) { + throw new KeyChainSnapshotParserException("salt was not set in keyDerivationParams"); + } + + KeyDerivationParams keyDerivationParams = null; + + switch (algorithm) { + case KeyDerivationParams.ALGORITHM_SHA256: + keyDerivationParams = KeyDerivationParams.createSha256Params(salt); + break; + + case KeyDerivationParams.ALGORITHM_SCRYPT: + keyDerivationParams = KeyDerivationParams.createScryptParams( + salt, memoryDifficulty); + break; + + default: + throw new KeyChainSnapshotParserException( + "Unknown algorithm in keyDerivationParams"); + } + + parser.require(XmlPullParser.END_TAG, NAMESPACE, TAG_KEY_DERIVATION_PARAMS); + return keyDerivationParams; + } + + private static int readIntTag(XmlPullParser parser, String tagName) + throws IOException, XmlPullParserException, KeyChainSnapshotParserException { + parser.require(XmlPullParser.START_TAG, NAMESPACE, tagName); + String text = readText(parser); + parser.require(XmlPullParser.END_TAG, NAMESPACE, tagName); + try { + return Integer.valueOf(text); + } catch (NumberFormatException e) { + throw new KeyChainSnapshotParserException( + String.format( + Locale.US, "%s expected int but got '%s'", tagName, text), e); + } + } + + private static long readLongTag(XmlPullParser parser, String tagName) + throws IOException, XmlPullParserException, KeyChainSnapshotParserException { + parser.require(XmlPullParser.START_TAG, NAMESPACE, tagName); + String text = readText(parser); + parser.require(XmlPullParser.END_TAG, NAMESPACE, tagName); + try { + return Long.valueOf(text); + } catch (NumberFormatException e) { + throw new KeyChainSnapshotParserException( + String.format( + Locale.US, "%s expected long but got '%s'", tagName, text), e); + } + } + + private static String readStringTag(XmlPullParser parser, String tagName) + throws IOException, XmlPullParserException { + parser.require(XmlPullParser.START_TAG, NAMESPACE, tagName); + String text = readText(parser); + parser.require(XmlPullParser.END_TAG, NAMESPACE, tagName); + return text; + } + + private static byte[] readBlobTag(XmlPullParser parser, String tagName) + throws IOException, XmlPullParserException, KeyChainSnapshotParserException { + parser.require(XmlPullParser.START_TAG, NAMESPACE, tagName); + String text = readText(parser); + parser.require(XmlPullParser.END_TAG, NAMESPACE, tagName); + + try { + return Base64.decode(text, /*flags=*/ Base64.DEFAULT); + } catch (IllegalArgumentException e) { + throw new KeyChainSnapshotParserException( + String.format( + Locale.US, + "%s expected base64 encoded bytes but got '%s'", + tagName, text), e); + } + } + + private static CertPath readCertPathTag(XmlPullParser parser, String tagName) + throws IOException, XmlPullParserException, KeyChainSnapshotParserException { + byte[] bytes = readBlobTag(parser, tagName); + try { + return CertificateFactory.getInstance(CERTIFICATE_FACTORY_TYPE) + .generateCertPath(new ByteArrayInputStream(bytes)); + } catch (CertificateException e) { + throw new KeyChainSnapshotParserException("Could not parse CertPath in tag " + tagName, + e); + } + } + + private static String readText(XmlPullParser parser) + throws IOException, XmlPullParserException { + String result = ""; + if (parser.next() == XmlPullParser.TEXT) { + result = parser.getText(); + parser.nextTag(); + } + return result; + } + + // Statics only + private KeyChainSnapshotDeserializer() {} +} diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotParserException.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotParserException.java new file mode 100644 index 0000000000000000000000000000000000000000..a3208afddf9b4958c9123005f369975120ef9ed3 --- /dev/null +++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotParserException.java @@ -0,0 +1,32 @@ +/* + * 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.server.locksettings.recoverablekeystore.serialization; + +/** + * Error thrown when parsing invalid XML, while trying to read a + * {@link android.security.keystore.recovery.KeyChainSnapshot}. + */ +public class KeyChainSnapshotParserException extends Exception { + + public KeyChainSnapshotParserException(String message, Throwable cause) { + super(message, cause); + } + + public KeyChainSnapshotParserException(String message) { + super(message); + } +} diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSchema.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSchema.java new file mode 100644 index 0000000000000000000000000000000000000000..ff30ecd7d3a73f39cf702f9a4b52a81d756ecd26 --- /dev/null +++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSchema.java @@ -0,0 +1,58 @@ +/* + * 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.server.locksettings.recoverablekeystore.serialization; + +/** + * Describes the XML schema of the {@link android.security.keystore.recovery.KeyChainSnapshot} file. + */ +class KeyChainSnapshotSchema { + static final String NAMESPACE = null; + + static final String OUTPUT_ENCODING = "UTF-8"; + + static final String CERTIFICATE_FACTORY_TYPE = "X.509"; + static final String CERT_PATH_ENCODING = "PkiPath"; + + static final String TAG_KEY_CHAIN_SNAPSHOT = "keyChainSnapshot"; + + static final String TAG_SNAPSHOT_VERSION = "snapshotVersion"; + static final String TAG_COUNTER_ID = "counterId"; + static final String TAG_MAX_ATTEMPTS = "maxAttempts"; + static final String TAG_RECOVERY_KEY_MATERIAL = "recoveryKeyMaterial"; + static final String TAG_SERVER_PARAMS = "serverParams"; + static final String TAG_TRUSTED_HARDWARE_CERT_PATH = "thmCertPath"; + static final String TAG_BACKEND_PUBLIC_KEY = "backendPublicKey"; + + static final String TAG_KEY_CHAIN_PROTECTION_PARAMS_LIST = + "keyChainProtectionParamsList"; + static final String TAG_KEY_CHAIN_PROTECTION_PARAMS = "keyChainProtectionParams"; + static final String TAG_USER_SECRET_TYPE = "userSecretType"; + static final String TAG_LOCK_SCREEN_UI_TYPE = "lockScreenUiType"; + + static final String TAG_KEY_DERIVATION_PARAMS = "keyDerivationParams"; + static final String TAG_ALGORITHM = "algorithm"; + static final String TAG_MEMORY_DIFFICULTY = "memoryDifficulty"; + static final String TAG_SALT = "salt"; + + static final String TAG_APPLICATION_KEYS = "applicationKeysList"; + static final String TAG_APPLICATION_KEY = "applicationKey"; + static final String TAG_ALIAS = "alias"; + static final String TAG_KEY_MATERIAL = "keyMaterial"; + + // Statics only + private KeyChainSnapshotSchema() {} +} diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializer.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializer.java new file mode 100644 index 0000000000000000000000000000000000000000..17a16bf5906b2c494bcb664ebf3af3b7f594fda1 --- /dev/null +++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/serialization/KeyChainSnapshotSerializer.java @@ -0,0 +1,203 @@ +/* + * 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.server.locksettings.recoverablekeystore.serialization; + + +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.CERT_PATH_ENCODING; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.NAMESPACE; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.OUTPUT_ENCODING; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_ALGORITHM; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_ALIAS; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_APPLICATION_KEY; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_APPLICATION_KEYS; + +import static com.android.server.locksettings.recoverablekeystore.serialization + .KeyChainSnapshotSchema.TAG_BACKEND_PUBLIC_KEY; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_COUNTER_ID; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_RECOVERY_KEY_MATERIAL; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_KEY_CHAIN_PROTECTION_PARAMS; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_KEY_CHAIN_PROTECTION_PARAMS_LIST; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_KEY_CHAIN_SNAPSHOT; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_KEY_DERIVATION_PARAMS; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_KEY_MATERIAL; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_LOCK_SCREEN_UI_TYPE; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_MAX_ATTEMPTS; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_MEMORY_DIFFICULTY; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_SALT; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_SERVER_PARAMS; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_SNAPSHOT_VERSION; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_TRUSTED_HARDWARE_CERT_PATH; +import static com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSchema.TAG_USER_SECRET_TYPE; + +import android.security.keystore.recovery.KeyChainProtectionParams; +import android.security.keystore.recovery.KeyChainSnapshot; +import android.security.keystore.recovery.KeyDerivationParams; +import android.security.keystore.recovery.WrappedApplicationKey; +import android.util.Base64; +import android.util.Xml; + +import org.xmlpull.v1.XmlSerializer; + +import java.io.IOException; +import java.io.OutputStream; +import java.security.cert.CertPath; +import java.security.cert.CertificateEncodingException; +import java.util.List; + +/** + * Serializes a {@link KeyChainSnapshot} instance to XML. + */ +public class KeyChainSnapshotSerializer { + + /** + * Serializes {@code keyChainSnapshot} to XML, writing to {@code outputStream}. + * + * @throws IOException if there was an IO error writing to the stream. + * @throws CertificateEncodingException if the {@link CertPath} from + * {@link KeyChainSnapshot#getTrustedHardwareCertPath()} is not encoded correctly. + */ + public static void serialize(KeyChainSnapshot keyChainSnapshot, OutputStream outputStream) + throws IOException, CertificateEncodingException { + XmlSerializer xmlSerializer = Xml.newSerializer(); + xmlSerializer.setOutput(outputStream, OUTPUT_ENCODING); + xmlSerializer.startDocument( + /*encoding=*/ null, + /*standalone=*/ null); + xmlSerializer.startTag(NAMESPACE, TAG_KEY_CHAIN_SNAPSHOT); + writeKeyChainSnapshotProperties(xmlSerializer, keyChainSnapshot); + writeKeyChainProtectionParams(xmlSerializer, + keyChainSnapshot.getKeyChainProtectionParams()); + writeApplicationKeys(xmlSerializer, + keyChainSnapshot.getWrappedApplicationKeys()); + xmlSerializer.endTag(NAMESPACE, TAG_KEY_CHAIN_SNAPSHOT); + xmlSerializer.endDocument(); + } + + private static void writeApplicationKeys( + XmlSerializer xmlSerializer, List wrappedApplicationKeys) + throws IOException { + xmlSerializer.startTag(NAMESPACE, TAG_APPLICATION_KEYS); + for (WrappedApplicationKey key : wrappedApplicationKeys) { + xmlSerializer.startTag(NAMESPACE, TAG_APPLICATION_KEY); + writeApplicationKeyProperties(xmlSerializer, key); + xmlSerializer.endTag(NAMESPACE, TAG_APPLICATION_KEY); + } + xmlSerializer.endTag(NAMESPACE, TAG_APPLICATION_KEYS); + } + + private static void writeApplicationKeyProperties( + XmlSerializer xmlSerializer, WrappedApplicationKey applicationKey) throws IOException { + writePropertyTag(xmlSerializer, TAG_ALIAS, applicationKey.getAlias()); + writePropertyTag(xmlSerializer, TAG_KEY_MATERIAL, applicationKey.getEncryptedKeyMaterial()); + } + + private static void writeKeyChainProtectionParams( + XmlSerializer xmlSerializer, + List keyChainProtectionParamsList) throws IOException { + xmlSerializer.startTag(NAMESPACE, TAG_KEY_CHAIN_PROTECTION_PARAMS_LIST); + for (KeyChainProtectionParams keyChainProtectionParams : keyChainProtectionParamsList) { + xmlSerializer.startTag(NAMESPACE, TAG_KEY_CHAIN_PROTECTION_PARAMS); + writeKeyChainProtectionParamsProperties(xmlSerializer, keyChainProtectionParams); + xmlSerializer.endTag(NAMESPACE, TAG_KEY_CHAIN_PROTECTION_PARAMS); + } + xmlSerializer.endTag(NAMESPACE, TAG_KEY_CHAIN_PROTECTION_PARAMS_LIST); + } + + private static void writeKeyChainProtectionParamsProperties( + XmlSerializer xmlSerializer, KeyChainProtectionParams keyChainProtectionParams) + throws IOException { + writePropertyTag(xmlSerializer, TAG_USER_SECRET_TYPE, + keyChainProtectionParams.getUserSecretType()); + writePropertyTag(xmlSerializer, TAG_LOCK_SCREEN_UI_TYPE, + keyChainProtectionParams.getLockScreenUiFormat()); + + // NOTE: Do not serialize the 'secret' field. It should never be set anyway for snapshots + // we generate. + + writeKeyDerivationParams(xmlSerializer, keyChainProtectionParams.getKeyDerivationParams()); + } + + private static void writeKeyDerivationParams( + XmlSerializer xmlSerializer, KeyDerivationParams keyDerivationParams) + throws IOException { + xmlSerializer.startTag(NAMESPACE, TAG_KEY_DERIVATION_PARAMS); + writeKeyDerivationParamsProperties( + xmlSerializer, keyDerivationParams); + xmlSerializer.endTag(NAMESPACE, TAG_KEY_DERIVATION_PARAMS); + } + + private static void writeKeyDerivationParamsProperties( + XmlSerializer xmlSerializer, KeyDerivationParams keyDerivationParams) + throws IOException { + writePropertyTag(xmlSerializer, TAG_ALGORITHM, keyDerivationParams.getAlgorithm()); + writePropertyTag(xmlSerializer, TAG_SALT, keyDerivationParams.getSalt()); + writePropertyTag(xmlSerializer, TAG_MEMORY_DIFFICULTY, + keyDerivationParams.getMemoryDifficulty()); + } + + private static void writeKeyChainSnapshotProperties( + XmlSerializer xmlSerializer, KeyChainSnapshot keyChainSnapshot) + throws IOException, CertificateEncodingException { + + writePropertyTag(xmlSerializer, TAG_SNAPSHOT_VERSION, + keyChainSnapshot.getSnapshotVersion()); + writePropertyTag(xmlSerializer, TAG_MAX_ATTEMPTS, keyChainSnapshot.getMaxAttempts()); + writePropertyTag(xmlSerializer, TAG_COUNTER_ID, keyChainSnapshot.getCounterId()); + writePropertyTag(xmlSerializer, TAG_RECOVERY_KEY_MATERIAL, + keyChainSnapshot.getEncryptedRecoveryKeyBlob()); + writePropertyTag(xmlSerializer, TAG_SERVER_PARAMS, keyChainSnapshot.getServerParams()); + writePropertyTag(xmlSerializer, TAG_TRUSTED_HARDWARE_CERT_PATH, + keyChainSnapshot.getTrustedHardwareCertPath()); + if (keyChainSnapshot.getTrustedHardwarePublicKey() != null) { + writePropertyTag(xmlSerializer, TAG_BACKEND_PUBLIC_KEY, + keyChainSnapshot.getTrustedHardwarePublicKey()); + } + } + + private static void writePropertyTag( + XmlSerializer xmlSerializer, String propertyName, long propertyValue) + throws IOException { + xmlSerializer.startTag(NAMESPACE, propertyName); + xmlSerializer.text(Long.toString(propertyValue)); + xmlSerializer.endTag(NAMESPACE, propertyName); + } + + private static void writePropertyTag( + XmlSerializer xmlSerializer, String propertyName, String propertyValue) + throws IOException { + xmlSerializer.startTag(NAMESPACE, propertyName); + xmlSerializer.text(propertyValue); + xmlSerializer.endTag(NAMESPACE, propertyName); + } + + private static void writePropertyTag( + XmlSerializer xmlSerializer, String propertyName, byte[] propertyValue) + throws IOException { + xmlSerializer.startTag(NAMESPACE, propertyName); + xmlSerializer.text(Base64.encodeToString(propertyValue, /*flags=*/ Base64.DEFAULT)); + xmlSerializer.endTag(NAMESPACE, propertyName); + } + + private static void writePropertyTag( + XmlSerializer xmlSerializer, String propertyName, CertPath certPath) + throws IOException, CertificateEncodingException { + writePropertyTag(xmlSerializer, propertyName, certPath.getEncoded(CERT_PATH_ENCODING)); + } + + // Statics only + private KeyChainSnapshotSerializer() {} +} diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbContract.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbContract.java index 1eff2d4721448d604599703c0b2f2cc666f8cb9c..7ee809aa38655dcec9cfb1fc84b14ee335339609 100644 --- a/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbContract.java +++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverableKeyStoreDbContract.java @@ -69,121 +69,6 @@ class RecoverableKeyStoreDbContract { static final String COLUMN_NAME_RECOVERY_STATUS = "recovery_status"; } - /** - * Table holding encrypted snapshots of the recoverable key store. - */ - static class SnapshotsEntry implements BaseColumns { - static final String TABLE_NAME = "snapshots"; - - /** - * The version number of the snapshot. - */ - static final String COLUMN_NAME_VERSION = "version"; - - /** - * The ID of the user whose keystore was snapshotted. - */ - static final String COLUMN_NAME_USER_ID = "user_id"; - - /** - * The UID of the app that owns the snapshot (i.e., the recovery agent). - */ - static final String COLUMN_NAME_UID = "uid"; - - /** - * The maximum number of attempts allowed to attempt to decrypt the recovery key. - */ - static final String COLUMN_NAME_MAX_ATTEMPTS = "max_attempts"; - - /** - * The ID of the counter in the trusted hardware module. - */ - static final String COLUMN_NAME_COUNTER_ID = "counter_id"; - - /** - * Server parameters used to help identify the device (during recovery). - */ - static final String SERVER_PARAMS = "server_params"; - - /** - * The public key of the trusted hardware module. This key has been used to encrypt the - * snapshot, to ensure that it can only be read by the trusted module. - */ - static final String TRUSTED_HARDWARE_PUBLIC_KEY = "thm_public_key"; - - /** - * {@link java.security.cert.CertPath} signing the trusted hardware module to whose public - * key this snapshot is encrypted. - */ - static final String CERT_PATH = "cert_path"; - - /** - * The recovery key, encrypted with the user's lock screen and the trusted hardware module's - * public key. - */ - static final String ENCRYPTED_RECOVERY_KEY = "encrypted_recovery_key"; - } - - /** - * Table holding encrypted keys belonging to a particular snapshot. - */ - static class SnapshotKeysEntry implements BaseColumns { - static final String TABLE_NAME = "snapshot_keys"; - - /** - * ID of the associated snapshot entry in {@link SnapshotsEntry}. - */ - static final String COLUMN_NAME_SNAPSHOT_ID = "snapshot_id"; - - /** - * Alias of the key. - */ - static final String COLUMN_NAME_ALIAS = "alias"; - - /** - * Key material, encrypted with the recovery key from the snapshot. - */ - static final String COLUMN_NAME_ENCRYPTED_BYTES = "encrypted_key_bytes"; - } - - /** - * A layer of protection associated with a snapshot. - */ - static class SnapshotProtectionParams implements BaseColumns { - static final String TABLE_NAME = "snapshot_protection_params"; - - /** - * ID of the associated snapshot entry in {@link SnapshotsEntry}. - */ - static final String COLUMN_NAME_SNAPSHOT_ID = "snapshot_id"; - - /** - * Type of secret used to generate recovery key. One of - * {@link android.security.keystore.recovery.KeyChainProtectionParams#TYPE_LOCKSCREEN} or - */ - static final String COLUMN_NAME_SECRET_TYPE = "secret_type"; - - /** - * If a lock screen, the type of UI used. One of - * {@link android.security.keystore.recovery.KeyChainProtectionParams#UI_FORMAT_PATTERN}, - * {@link android.security.keystore.recovery.KeyChainProtectionParams#UI_FORMAT_PIN}, or - * {@link android.security.keystore.recovery.KeyChainProtectionParams#UI_FORMAT_PASSWORD}. - */ - static final String COLUMN_NAME_LOCKSCREEN_UI_TYPE = "lock_screen_ui_type"; - - /** - * The algorithm used to derive cryptographic material from the key and salt. One of - * {@link android.security.keystore.recovery.KeyDerivationParams#ALGORITHM_SHA256} or - * {@link android.security.keystore.recovery.KeyDerivationParams#ALGORITHM_SCRYPT}. - */ - static final String COLUMN_NAME_KEY_DERIVATION_ALGORITHM = "key_derivation_algorithm"; - - /** - * The salt used along with the secret to generate cryptographic material. - */ - static final String COLUMN_NAME_KEY_DERIVATION_SALT = "key_derivation_salt"; - } - /** * Recoverable KeyStore metadata for a specific user profile. */ diff --git a/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage.java b/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage.java index 3f93cc6f5f88b01eb49552028eb46021b8ddb15b..c02b103f1d3389f24986d5e21aaeb31476c2e6bb 100644 --- a/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage.java +++ b/services/core/java/com/android/server/locksettings/recoverablekeystore/storage/RecoverySnapshotStorage.java @@ -17,13 +17,28 @@ package com.android.server.locksettings.recoverablekeystore.storage; import android.annotation.Nullable; +import android.os.Environment; import android.security.keystore.recovery.KeyChainSnapshot; +import android.util.Log; import android.util.SparseArray; import com.android.internal.annotations.GuardedBy; +import com.android.internal.annotations.VisibleForTesting; +import com.android.server.locksettings.recoverablekeystore.serialization + .KeyChainSnapshotDeserializer; +import com.android.server.locksettings.recoverablekeystore.serialization + .KeyChainSnapshotParserException; +import com.android.server.locksettings.recoverablekeystore.serialization.KeyChainSnapshotSerializer; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.security.cert.CertificateEncodingException; +import java.util.Locale; /** - * In-memory storage for recovery snapshots. + * Storage for recovery snapshots. Stores snapshots in memory, backed by disk storage. * *

        Recovery snapshots are generated after a successful screen unlock. They are only generated if * the recoverable keystore has been mutated since the previous snapshot. This class stores only the @@ -33,14 +48,46 @@ import com.android.internal.annotations.GuardedBy; * {@link com.android.server.locksettings.recoverablekeystore.KeySyncTask} thread. */ public class RecoverySnapshotStorage { + + private static final String TAG = "RecoverySnapshotStorage"; + + private static final String ROOT_PATH = "system"; + private static final String STORAGE_PATH = "recoverablekeystore/snapshots/"; + @GuardedBy("this") private final SparseArray mSnapshotByUid = new SparseArray<>(); + private final File rootDirectory; + + /** + * A new instance, storing snapshots in /data/system/recoverablekeystore/snapshots. + * + *

        NOTE: calling this multiple times DOES NOT return the same instance, so will NOT be backed + * by the same in-memory store. + */ + public static RecoverySnapshotStorage newInstance() { + return new RecoverySnapshotStorage( + new File(Environment.getDataDirectory(), ROOT_PATH)); + } + + @VisibleForTesting + public RecoverySnapshotStorage(File rootDirectory) { + this.rootDirectory = rootDirectory; + } + /** * Sets the latest {@code snapshot} for the recovery agent {@code uid}. */ public synchronized void put(int uid, KeyChainSnapshot snapshot) { mSnapshotByUid.put(uid, snapshot); + + try { + writeToDisk(uid, snapshot); + } catch (IOException | CertificateEncodingException e) { + Log.e(TAG, + String.format(Locale.US, "Error persisting snapshot for %d to disk", uid), + e); + } } /** @@ -48,7 +95,17 @@ public class RecoverySnapshotStorage { */ @Nullable public synchronized KeyChainSnapshot get(int uid) { - return mSnapshotByUid.get(uid); + KeyChainSnapshot snapshot = mSnapshotByUid.get(uid); + if (snapshot != null) { + return snapshot; + } + + try { + return readFromDisk(uid); + } catch (IOException | KeyChainSnapshotParserException e) { + Log.e(TAG, String.format(Locale.US, "Error reading snapshot for %d from disk", uid), e); + return null; + } } /** @@ -56,5 +113,66 @@ public class RecoverySnapshotStorage { */ public synchronized void remove(int uid) { mSnapshotByUid.remove(uid); + getSnapshotFile(uid).delete(); + } + + /** + * Writes the snapshot for recovery agent {@code uid} to disk. + * + * @throws IOException if an IO error occurs writing to disk. + */ + private void writeToDisk(int uid, KeyChainSnapshot snapshot) + throws IOException, CertificateEncodingException { + File snapshotFile = getSnapshotFile(uid); + + try ( + FileOutputStream fileOutputStream = new FileOutputStream(snapshotFile) + ) { + KeyChainSnapshotSerializer.serialize(snapshot, fileOutputStream); + } catch (IOException | CertificateEncodingException e) { + // If we fail to write the latest snapshot, we should delete any older snapshot that + // happens to be around. Otherwise snapshot syncs might end up going 'back in time'. + snapshotFile.delete(); + throw e; + } + } + + /** + * Reads the last snapshot for recovery agent {@code uid} from disk. + * + * @return The snapshot, or null if none existed. + * @throws IOException if an IO error occurs reading from disk. + */ + @Nullable + private KeyChainSnapshot readFromDisk(int uid) + throws IOException, KeyChainSnapshotParserException { + File snapshotFile = getSnapshotFile(uid); + + try ( + FileInputStream fileInputStream = new FileInputStream(snapshotFile) + ) { + return KeyChainSnapshotDeserializer.deserialize(fileInputStream); + } catch (IOException | KeyChainSnapshotParserException e) { + // If we fail to read the latest snapshot, we should delete it in case it is in some way + // corrupted. We can regenerate snapshots anyway. + snapshotFile.delete(); + throw e; + } + } + + private File getSnapshotFile(int uid) { + File folder = getStorageFolder(); + String fileName = getSnapshotFileName(uid); + return new File(folder, fileName); + } + + private String getSnapshotFileName(int uid) { + return String.format(Locale.US, "%d.xml", uid); + } + + private File getStorageFolder() { + File folder = new File(rootDirectory, STORAGE_PATH); + folder.mkdirs(); + return folder; } } diff --git a/services/core/java/com/android/server/notification/ManagedServices.java b/services/core/java/com/android/server/notification/ManagedServices.java index b7842d5365b53df7ad9acb0da553e61cce908a00..d5a32aa309365efaddbb78f560d3557b74463c82 100644 --- a/services/core/java/com/android/server/notification/ManagedServices.java +++ b/services/core/java/com/android/server/notification/ManagedServices.java @@ -982,7 +982,11 @@ abstract public class ManagedServices { Slog.w(TAG, getCaption() + " binding died: " + name); synchronized (mMutex) { mServicesBinding.remove(servicesBindingTag); - mContext.unbindService(this); + try { + mContext.unbindService(this); + } catch (IllegalArgumentException e) { + Slog.e(TAG, "failed to unbind " + name, e); + } if (!mServicesRebinding.contains(servicesBindingTag)) { mServicesRebinding.add(servicesBindingTag); mHandler.postDelayed(new Runnable() { diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 210857e1b097dad715dce1fd39e5a89dd4eccd7d..f31ca0a2fa09560d4f79ae7c05751ce22901634d 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -182,6 +182,7 @@ import com.android.internal.annotations.VisibleForTesting; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; +import com.android.internal.notification.SystemNotificationChannels; import com.android.internal.os.BackgroundThread; import com.android.internal.statusbar.NotificationVisibility; import com.android.internal.util.ArrayUtils; @@ -898,6 +899,8 @@ public class NotificationManagerService extends SystemService { @Override public void onReceive(Context context, Intent intent) { if (Intent.ACTION_LOCALE_CHANGED.equals(intent.getAction())) { + // update system notification channels + SystemNotificationChannels.createAll(context); mZenModeHelper.updateDefaultZenRules(); mRankingHelper.onLocaleChanged(context, ActivityManager.getCurrentUser()); } @@ -2149,7 +2152,8 @@ public class NotificationManagerService extends SystemService { final NotificationChannel channel = channels.get(i); Preconditions.checkNotNull(channel, "channel in list is null"); mRankingHelper.createNotificationChannel(pkg, uid, channel, - true /* fromTargetApp */); + true /* fromTargetApp */, mConditionProviders.isPackageOrComponentAllowed( + pkg, UserHandle.getUserId(uid))); mListeners.notifyNotificationChannelChanged(pkg, UserHandle.getUserHandleForUid(uid), mRankingHelper.getNotificationChannel(pkg, uid, channel.getId(), false), @@ -4691,11 +4695,12 @@ public class NotificationManagerService extends SystemService { private boolean playSound(final NotificationRecord record, Uri soundUri) { boolean looping = (record.getNotification().flags & Notification.FLAG_INSISTENT) != 0; - // do not play notifications if there is a user of exclusive audio focus - // or the device is in vibrate mode - if (!mAudioManager.isAudioFocusExclusive() && (mAudioManager.getRingerModeInternal() - != AudioManager.RINGER_MODE_VIBRATE || mAudioManager.getStreamVolume( - AudioAttributes.toLegacyStreamType(record.getAudioAttributes())) != 0)) { + // play notifications if there is no user of exclusive audio focus + // and the stream volume is not 0 (non-zero volume implies not silenced by SILENT or + // VIBRATE ringer mode) + if (!mAudioManager.isAudioFocusExclusive() + && (mAudioManager.getStreamVolume( + AudioAttributes.toLegacyStreamType(record.getAudioAttributes())) != 0)) { final long identity = Binder.clearCallingIdentity(); try { final IRingtonePlayer player = mAudioManager.getRingtonePlayer(); diff --git a/services/core/java/com/android/server/notification/RankingConfig.java b/services/core/java/com/android/server/notification/RankingConfig.java index b1b0bf26d9ee881694eb90c0301a0fd7d414e4ec..af6468333ba00cce1ada92d8b0afb3237dc39397 100644 --- a/services/core/java/com/android/server/notification/RankingConfig.java +++ b/services/core/java/com/android/server/notification/RankingConfig.java @@ -38,7 +38,7 @@ public interface RankingConfig { ParceledListSlice getNotificationChannelGroups(String pkg, int uid, boolean includeDeleted, boolean includeNonGrouped); void createNotificationChannel(String pkg, int uid, NotificationChannel channel, - boolean fromTargetApp); + boolean fromTargetApp, boolean hasDndAccess); void updateNotificationChannel(String pkg, int uid, NotificationChannel channel, boolean fromUser); NotificationChannel getNotificationChannel(String pkg, int uid, String channelId, boolean includeDeleted); void deleteNotificationChannel(String pkg, int uid, String channelId); diff --git a/services/core/java/com/android/server/notification/RankingHelper.java b/services/core/java/com/android/server/notification/RankingHelper.java index f163113209722b792560f0344cedb830d3d282ac..98d5c9a59f6b8bc6374e9c513ae35987a40c4210 100644 --- a/services/core/java/com/android/server/notification/RankingHelper.java +++ b/services/core/java/com/android/server/notification/RankingHelper.java @@ -569,7 +569,7 @@ public class RankingHelper implements RankingConfig { @Override public void createNotificationChannel(String pkg, int uid, NotificationChannel channel, - boolean fromTargetApp) { + boolean fromTargetApp, boolean hasDndAccess) { Preconditions.checkNotNull(pkg); Preconditions.checkNotNull(channel); Preconditions.checkNotNull(channel.getId()); @@ -610,8 +610,9 @@ public class RankingHelper implements RankingConfig { existing.setImportance(channel.getImportance()); } - // system apps can bypass dnd if the user hasn't changed any fields on the channel yet - if (existing.getUserLockedFields() == 0 & isSystemApp) { + // system apps and dnd access apps can bypass dnd if the user hasn't changed any + // fields on the channel yet + if (existing.getUserLockedFields() == 0 && (isSystemApp || hasDndAccess)) { existing.setBypassDnd(channel.canBypassDnd()); } @@ -624,7 +625,7 @@ public class RankingHelper implements RankingConfig { } // Reset fields that apps aren't allowed to set. - if (fromTargetApp && !isSystemApp) { + if (fromTargetApp && !(isSystemApp || hasDndAccess)) { channel.setBypassDnd(r.priority == Notification.PRIORITY_MAX); } if (fromTargetApp) { diff --git a/services/core/java/com/android/server/notification/ValidateNotificationPeople.java b/services/core/java/com/android/server/notification/ValidateNotificationPeople.java index c0c66b248ea5db5972dce80c7cfc0ca1bf44e679..6cf8f86aed83fc501b18f5c47bc5f672d484f31b 100644 --- a/services/core/java/com/android/server/notification/ValidateNotificationPeople.java +++ b/services/core/java/com/android/server/notification/ValidateNotificationPeople.java @@ -468,12 +468,14 @@ public class ValidateNotificationPeople implements NotificationSignalExtractor { private final LinkedList mPendingLookups; private final Context mContext; + // Amount of time to wait for a result from the contacts db before rechecking affinity. + private static final long LOOKUP_TIME = 1000; private float mContactAffinity = NONE; private NotificationRecord mRecord; private PeopleRankingReconsideration(Context context, String key, LinkedList pendingLookups) { - super(key); + super(key, LOOKUP_TIME); mContext = context; mPendingLookups = pendingLookups; } diff --git a/services/core/java/com/android/server/pm/Installer.java b/services/core/java/com/android/server/pm/Installer.java index 24abf8657b883f1fc5b2e765ed919c83a4d2220c..9d3f48b428ceef919d15af652bc99af45a449b74 100644 --- a/services/core/java/com/android/server/pm/Installer.java +++ b/services/core/java/com/android/server/pm/Installer.java @@ -484,11 +484,11 @@ public class Installer extends SystemService { } } - public void installApkVerity(String filePath, FileDescriptor verityInput) + public void installApkVerity(String filePath, FileDescriptor verityInput, int contentSize) throws InstallerException { if (!checkBeforeRemote()) return; try { - mInstalld.installApkVerity(filePath, verityInput); + mInstalld.installApkVerity(filePath, verityInput, contentSize); } catch (Exception e) { throw InstallerException.from(e); } diff --git a/services/core/java/com/android/server/pm/LauncherAppsService.java b/services/core/java/com/android/server/pm/LauncherAppsService.java index fb3839805b1acb6bae24aa1cf6df8208b287cc0a..8e78703f37c2f3807b2d31a6a88b39bda1c78f2b 100644 --- a/services/core/java/com/android/server/pm/LauncherAppsService.java +++ b/services/core/java/com/android/server/pm/LauncherAppsService.java @@ -363,6 +363,17 @@ public class LauncherAppsService extends SystemService { } } + @Override + public Bundle getSuspendedPackageLauncherExtras(String packageName, + UserHandle user) { + if (!canAccessProfile(user.getIdentifier(), "Cannot get launcher extras")) { + return null; + } + final PackageManagerInternal pmi = + LocalServices.getService(PackageManagerInternal.class); + return pmi.getSuspendedPackageLauncherExtras(packageName, user.getIdentifier()); + } + @Override public ApplicationInfo getApplicationInfo( String callingPackage, String packageName, int flags, UserHandle user) @@ -732,7 +743,7 @@ public class LauncherAppsService extends SystemService { } @Override - public void onPackagesSuspended(String[] packages) { + public void onPackagesSuspended(String[] packages, Bundle launcherExtras) { UserHandle user = new UserHandle(getChangingUserId()); final int n = mListeners.beginBroadcast(); try { @@ -741,7 +752,7 @@ public class LauncherAppsService extends SystemService { BroadcastCookie cookie = (BroadcastCookie) mListeners.getBroadcastCookie(i); if (!isEnabledProfileOf(cookie.user, user, "onPackagesSuspended")) continue; try { - listener.onPackagesSuspended(user, packages); + listener.onPackagesSuspended(user, packages, launcherExtras); } catch (RemoteException re) { Slog.d(TAG, "Callback failed ", re); } @@ -750,7 +761,7 @@ public class LauncherAppsService extends SystemService { mListeners.finishBroadcast(); } - super.onPackagesSuspended(packages); + super.onPackagesSuspended(packages, launcherExtras); } @Override diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java index 61c6be7c84e12e9563a1327ca76eacaad344f372..892fa12ddf522906e8ccc0e63f04e3adadb9c515 100644 --- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java +++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java @@ -449,13 +449,13 @@ public class PackageDexOptimizer { pw.increaseIndent(); for (String isa : dexCodeInstructionSets) { - String status = null; try { - status = DexFile.getDexFileStatus(path, isa); + DexFile.OptimizationInfo info = DexFile.getDexFileOptimizationInfo(path, isa); + pw.println(isa + ": [status=" + info.getStatus() + +"] [reason=" + info.getReason() + "]"); } catch (IOException ioe) { - status = "[Exception]: " + ioe.getMessage(); + pw.println(isa + ": [Exception]: " + ioe.getMessage()); } - pw.println(isa + ": " + status); } if (useInfo.isUsedByOtherApps(path)) { diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index e08ec556c68fa97ab2e708fe0533c005b5285e64..52bdea6cbf9a38dbc339208e6deba0fdb832230c 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -808,7 +808,7 @@ public class PackageManagerService extends IPackageManager.Stub } final String[] getStaticOverlayPaths(List overlayPackages, - String targetPath, Object installLock) { + String targetPath) { if (overlayPackages == null || overlayPackages.isEmpty()) { return null; } @@ -828,20 +828,9 @@ public class PackageManagerService extends IPackageManager.Stub // // OverlayManagerService will update each of them with a correct gid from its // target package app id. - if (installLock != null) { - synchronized (installLock) { - mInstaller.idmap(targetPath, overlayPackage.baseCodePath, - UserHandle.getSharedAppGid( - UserHandle.getUserGid(UserHandle.USER_SYSTEM))); - } - } else { - // We can call mInstaller without holding mInstallLock because mInstallLock - // is held before running parallel parsing. - // Moreover holding mInstallLock on each parsing thread causes dead-lock. - mInstaller.idmap(targetPath, overlayPackage.baseCodePath, - UserHandle.getSharedAppGid( - UserHandle.getUserGid(UserHandle.USER_SYSTEM))); - } + mInstaller.idmap(targetPath, overlayPackage.baseCodePath, + UserHandle.getSharedAppGid( + UserHandle.getUserGid(UserHandle.USER_SYSTEM))); if (overlayPathList == null) { overlayPathList = new ArrayList(); } @@ -856,13 +845,15 @@ public class PackageManagerService extends IPackageManager.Stub String[] getStaticOverlayPaths(String targetPackageName, String targetPath) { List overlayPackages; - synchronized (mPackages) { - overlayPackages = getStaticOverlayPackages( - mPackages.values(), targetPackageName); + synchronized (mInstallLock) { + synchronized (mPackages) { + overlayPackages = getStaticOverlayPackages( + mPackages.values(), targetPackageName); + } + // It is safe to keep overlayPackages without holding mPackages because static overlay + // packages can't be uninstalled or disabled. + return getStaticOverlayPaths(overlayPackages, targetPath); } - // It is safe to keep overlayPackages without holding mPackages because static overlay - // packages can't be uninstalled or disabled. - return getStaticOverlayPaths(overlayPackages, targetPath, mInstallLock); } @Override public final String[] getOverlayApks(String targetPackageName) { @@ -895,11 +886,13 @@ public class PackageManagerService extends IPackageManager.Stub synchronized String[] getStaticOverlayPaths(String targetPackageName, String targetPath) { // We can trust mOverlayPackages without holding mPackages because package uninstall // can't happen while running parallel parsing. - // Moreover holding mPackages on each parsing thread causes dead-lock. + // And we can call mInstaller inside getStaticOverlayPaths without holding mInstallLock + // because mInstallLock is held before running parallel parsing. + // Moreover holding mPackages or mInstallLock on each parsing thread causes dead-lock. return mOverlayPackages == null ? null : getStaticOverlayPaths( getStaticOverlayPackages(mOverlayPackages, targetPackageName), - targetPath, null); + targetPath); } } @@ -13825,11 +13818,15 @@ public class PackageManagerService extends IPackageManager.Stub info.sendPackageRemovedBroadcasts(true /*killApp*/); } - private void sendPackagesSuspendedForUser(String[] pkgList, int userId, boolean suspended) { + private void sendPackagesSuspendedForUser(String[] pkgList, int userId, boolean suspended, + PersistableBundle launcherExtras) { if (pkgList.length > 0) { Bundle extras = new Bundle(1); extras.putStringArray(Intent.EXTRA_CHANGED_PACKAGE_LIST, pkgList); - + if (launcherExtras != null) { + extras.putBundle(Intent.EXTRA_LAUNCHER_EXTRAS, + new Bundle(launcherExtras.deepCopy())); + } sendPackageBroadcast( suspended ? Intent.ACTION_PACKAGES_SUSPENDED : Intent.ACTION_PACKAGES_UNSUSPENDED, @@ -14041,7 +14038,7 @@ public class PackageManagerService extends IPackageManager.Stub if (!changedPackagesList.isEmpty()) { final String[] changedPackages = changedPackagesList.toArray( new String[changedPackagesList.size()]); - sendPackagesSuspendedForUser(changedPackages, userId, suspended); + sendPackagesSuspendedForUser(changedPackages, userId, suspended, launcherExtras); sendMyPackageSuspendedOrUnsuspended(changedPackages, suspended, appExtras, userId); synchronized (mPackages) { scheduleWritePackageRestrictionsLocked(userId); @@ -16810,12 +16807,6 @@ public class PackageManagerService extends IPackageManager.Stub if (userId != UserHandle.USER_ALL) { ps.setInstalled(true, userId); ps.setEnabled(COMPONENT_ENABLED_STATE_DEFAULT, userId, installerPackageName); - } else { - for (int currentUserId : sUserManager.getUserIds()) { - ps.setInstalled(true, currentUserId); - ps.setEnabled(COMPONENT_ENABLED_STATE_DEFAULT, currentUserId, - installerPackageName); - } } // When replacing an existing package, preserve the original install reason for all @@ -17335,8 +17326,11 @@ public class PackageManagerService extends IPackageManager.Stub if (Build.IS_DEBUGGABLE) Slog.i(TAG, "Enabling apk verity to " + apkPath); FileDescriptor fd = result.getUnownedFileDescriptor(); try { - mInstaller.installApkVerity(apkPath, fd); - } catch (InstallerException e) { + final byte[] signedRootHash = VerityUtils.generateFsverityRootHash(apkPath); + mInstaller.installApkVerity(apkPath, fd, result.getContentSize()); + mInstaller.assertFsverityRootHashMatches(apkPath, signedRootHash); + } catch (InstallerException | IOException | DigestException | + NoSuchAlgorithmException e) { res.setError(INSTALL_FAILED_INTERNAL_ERROR, "Failed to set up verity: " + e); return; @@ -23753,6 +23747,18 @@ Slog.v(TAG, ":: stepped forward, applying functor at tag " + parser.getName()); flags, filterCallingUid, userId); } + @Override + public Bundle getSuspendedPackageLauncherExtras(String packageName, int userId) { + synchronized (mPackages) { + final PackageSetting ps = mSettings.mPackages.get(packageName); + PersistableBundle launcherExtras = null; + if (ps != null) { + launcherExtras = ps.readUserState(userId).suspendedLauncherExtras; + } + return (launcherExtras != null) ? new Bundle(launcherExtras.deepCopy()) : null; + } + } + @Override public int getPackageUid(String packageName, int flags, int userId) { return PackageManagerService.this diff --git a/services/core/java/com/android/server/pm/dex/ArtManagerService.java b/services/core/java/com/android/server/pm/dex/ArtManagerService.java index cdafe5715ffc28b0eb740905225800cbf0020c9d..9c2ad4635d586aedc29ab425e195feabe63912f8 100644 --- a/services/core/java/com/android/server/pm/dex/ArtManagerService.java +++ b/services/core/java/com/android/server/pm/dex/ArtManagerService.java @@ -527,9 +527,10 @@ public class ArtManagerService extends android.content.pm.dex.IArtManager.Stub { String compilationFilter; try { String isa = VMRuntime.getInstructionSet(abi); - String[] stats = DexFile.getDexFileOptimizationStatus(info.getBaseCodePath(), isa); - compilationFilter = stats[0]; - compilationReason = stats[1]; + DexFile.OptimizationInfo optInfo = + DexFile.getDexFileOptimizationInfo(info.getBaseCodePath(), isa); + compilationFilter = optInfo.getStatus(); + compilationReason = optInfo.getReason(); } catch (FileNotFoundException e) { Slog.e(TAG, "Could not get optimizations status for " + info.getBaseCodePath(), e); compilationFilter = "error"; diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 2e6e348c51a45043e2086f382514413931e0256d..fd023476c9e4aac45e37db75f5dc3b4b8473fa02 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -1330,6 +1330,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { mHandler.post(mHiddenNavPanic); } + // Abort possibly stuck animations. + mHandler.post(mWindowManagerFuncs::triggerAnimationFailsafe); + // Latch power key state to detect screenshot chord. if (interactive && !mScreenshotChordPowerKeyTriggered && (event.getFlags() & KeyEvent.FLAG_FALLBACK) == 0) { @@ -4362,6 +4365,9 @@ public class PhoneWindowManager implements WindowManagerPolicy { * given the situation with the keyguard. */ void launchHomeFromHotKey(final boolean awakenFromDreams, final boolean respectKeyguard) { + // Abort possibly stuck animations. + mHandler.post(mWindowManagerFuncs::triggerAnimationFailsafe); + if (respectKeyguard) { if (isKeyguardShowingAndNotOccluded()) { // don't launch home if keyguard showing @@ -7175,7 +7181,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } @Override - public int rotationForOrientationLw(int orientation, int lastRotation) { + public int rotationForOrientationLw(int orientation, int lastRotation, boolean defaultDisplay) { if (false) { Slog.v(TAG, "rotationForOrientationLw(orient=" + orientation + ", last=" + lastRotation @@ -7196,7 +7202,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { } final int preferredRotation; - if (mLidState == LID_OPEN && mLidOpenRotation >= 0) { + if (!defaultDisplay) { + // For secondary displays we ignore things like displays sensors, docking mode and + // rotation lock, and always prefer a default rotation. + preferredRotation = Surface.ROTATION_0; + } else if (mLidState == LID_OPEN && mLidOpenRotation >= 0) { // Ignore sensor when lid switch is open and rotation is forced. preferredRotation = mLidOpenRotation; } else if (mDockMode == Intent.EXTRA_DOCK_STATE_CAR diff --git a/services/core/java/com/android/server/policy/WindowManagerPolicy.java b/services/core/java/com/android/server/policy/WindowManagerPolicy.java index ec0521dda40de85ddbf76b691571e851ff8d8fba..0a6ae4e2f2d972ce8ef0730454ea8e17b428e851 100644 --- a/services/core/java/com/android/server/policy/WindowManagerPolicy.java +++ b/services/core/java/com/android/server/policy/WindowManagerPolicy.java @@ -407,7 +407,10 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants { /** * Returns true if this window has been shown on screen at some time in * the past. Must be called with the window manager lock held. + * + * @deprecated Use {@link #isDrawnLw} or any of the other drawn/visibility methods. */ + @Deprecated public boolean hasDrawnLw(); /** @@ -649,6 +652,12 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants { return Integer.toString(lens); } } + + /** + * Hint to window manager that the user has started a navigation action that should + * abort animations that have no timeout, in case they got stuck. + */ + void triggerAnimationFailsafe(); } /** Window has been added to the screen. */ @@ -1426,10 +1435,13 @@ public interface WindowManagerPolicy extends WindowManagerPolicyConstants { * @param orientation An orientation constant, such as * {@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_LANDSCAPE}. * @param lastRotation The most recently used rotation. + * @param defaultDisplay Flag indicating whether the rotation is computed for the default + * display. Currently for all non-default displays sensors, docking mode, + * rotation lock and other factors are ignored. * @return The surface rotation to use. */ public int rotationForOrientationLw(@ActivityInfo.ScreenOrientation int orientation, - int lastRotation); + int lastRotation, boolean defaultDisplay); /** * Given an orientation constant and a rotation, returns true if the rotation diff --git a/services/core/java/com/android/server/policy/keyguard/KeyguardStateMonitor.java b/services/core/java/com/android/server/policy/keyguard/KeyguardStateMonitor.java index 941cd4441e23ae7b37cbe82b923e6702f7dd3b4e..e56caf849aac2fb86b39675e7f95cbb58e0dea85 100644 --- a/services/core/java/com/android/server/policy/keyguard/KeyguardStateMonitor.java +++ b/services/core/java/com/android/server/policy/keyguard/KeyguardStateMonitor.java @@ -19,6 +19,8 @@ package com.android.server.policy.keyguard; import android.app.ActivityManager; import android.content.Context; import android.os.RemoteException; +import android.os.ServiceManager; +import android.security.IKeystoreService; import android.util.Slog; import com.android.internal.policy.IKeyguardService; @@ -51,11 +53,16 @@ public class KeyguardStateMonitor extends IKeyguardStateCallback.Stub { private final LockPatternUtils mLockPatternUtils; private final StateCallback mCallback; + IKeystoreService mKeystoreService; + public KeyguardStateMonitor(Context context, IKeyguardService service, StateCallback callback) { mLockPatternUtils = new LockPatternUtils(context); mCurrentUserId = ActivityManager.getCurrentUser(); mCallback = callback; + mKeystoreService = IKeystoreService.Stub.asInterface(ServiceManager + .getService("android.security.keystore")); + try { service.addStateMonitorCallback(this); } catch (RemoteException e) { @@ -86,6 +93,12 @@ public class KeyguardStateMonitor extends IKeyguardStateCallback.Stub { @Override // Binder interface public void onShowingStateChanged(boolean showing) { mIsShowing = showing; + + try { + mKeystoreService.onKeyguardVisibilityChanged(showing, mCurrentUserId); + } catch (RemoteException e) { + Slog.e(TAG, "Error informing keystore of screen lock", e); + } } @Override // Binder interface @@ -130,4 +143,4 @@ public class KeyguardStateMonitor extends IKeyguardStateCallback.Stub { pw.println(prefix + "mTrusted=" + mTrusted); pw.println(prefix + "mCurrentUserId=" + mCurrentUserId); } -} \ No newline at end of file +} diff --git a/services/core/java/com/android/server/power/batterysaver/BatterySaverStateMachine.java b/services/core/java/com/android/server/power/batterysaver/BatterySaverStateMachine.java index 5b3182ebd6995692894908d1a54cf6b2f9591f12..28605215e19d944a0e3c4d80ed0530e62ac9a04e 100644 --- a/services/core/java/com/android/server/power/batterysaver/BatterySaverStateMachine.java +++ b/services/core/java/com/android/server/power/batterysaver/BatterySaverStateMachine.java @@ -26,6 +26,7 @@ import android.util.proto.ProtoOutputStream; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.os.BackgroundThread; import com.android.server.power.BatterySaverPolicy; import com.android.server.power.BatterySaverStateMachineProto; @@ -124,25 +125,33 @@ public class BatterySaverStateMachine { if (DEBUG) { Slog.d(TAG, "onBootCompleted"); } - synchronized (mLock) { + // This is called with the power manager lock held. Don't do any + runOnBgThread(() -> { + synchronized (mLock) { - final ContentResolver cr = mContext.getContentResolver(); - cr.registerContentObserver(Settings.Global.getUriFor( - Settings.Global.LOW_POWER_MODE), - false, mSettingsObserver, UserHandle.USER_SYSTEM); - cr.registerContentObserver(Settings.Global.getUriFor( - Settings.Global.LOW_POWER_MODE_STICKY), - false, mSettingsObserver, UserHandle.USER_SYSTEM); - cr.registerContentObserver(Settings.Global.getUriFor( - Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL), - false, mSettingsObserver, UserHandle.USER_SYSTEM); + final ContentResolver cr = mContext.getContentResolver(); + cr.registerContentObserver(Settings.Global.getUriFor( + Settings.Global.LOW_POWER_MODE), + false, mSettingsObserver, UserHandle.USER_SYSTEM); + cr.registerContentObserver(Settings.Global.getUriFor( + Settings.Global.LOW_POWER_MODE_STICKY), + false, mSettingsObserver, UserHandle.USER_SYSTEM); + cr.registerContentObserver(Settings.Global.getUriFor( + Settings.Global.LOW_POWER_MODE_TRIGGER_LEVEL), + false, mSettingsObserver, UserHandle.USER_SYSTEM); - mBootCompleted = true; + mBootCompleted = true; - refreshSettingsLocked(); + refreshSettingsLocked(); - doAutoBatterySaverLocked(); - } + doAutoBatterySaverLocked(); + } + }); + } + + @VisibleForTesting + void runOnBgThread(Runnable r) { + BackgroundThread.getHandler().post(r); } void refreshSettingsLocked() { diff --git a/services/core/java/com/android/server/security/VerityUtils.java b/services/core/java/com/android/server/security/VerityUtils.java index d2d0e60dc742bc331c46fbc129b292849a536bd6..180f34355c94d53926686188b37aa60880ce9d32 100644 --- a/services/core/java/com/android/server/security/VerityUtils.java +++ b/services/core/java/com/android/server/security/VerityUtils.java @@ -26,6 +26,7 @@ import android.system.Os; import android.util.apk.ApkSignatureVerifier; import android.util.apk.ByteBufferFactory; import android.util.apk.SignatureNotFoundException; +import android.util.Pair; import android.util.Slog; import java.io.FileDescriptor; @@ -59,12 +60,15 @@ abstract public class VerityUtils { return SetupResult.skipped(); } - shm = generateApkVerityIntoSharedMemory(apkPath, signedRootHash); + Pair result = generateApkVerityIntoSharedMemory(apkPath, + signedRootHash); + shm = result.first; + int contentSize = result.second; FileDescriptor rfd = shm.getFileDescriptor(); if (rfd == null || !rfd.valid()) { return SetupResult.failed(); } - return SetupResult.ok(Os.dup(rfd)); + return SetupResult.ok(Os.dup(rfd), contentSize); } catch (IOException | SecurityException | DigestException | NoSuchAlgorithmException | SignatureNotFoundException | ErrnoException e) { Slog.e(TAG, "Failed to set up apk verity: ", e); @@ -85,10 +89,20 @@ abstract public class VerityUtils { } /** - * Returns a {@code SharedMemory} that contains Merkle tree and fsverity headers for the given - * apk, in the form that can immediately be used for fsverity setup. + * {@see ApkSignatureVerifier#getVerityRootHash(String)}. */ - private static SharedMemory generateApkVerityIntoSharedMemory( + public static byte[] getVerityRootHash(@NonNull String apkPath) + throws IOException, SignatureNotFoundException, SecurityException { + return ApkSignatureVerifier.getVerityRootHash(apkPath); + } + + /** + * Returns a pair of {@code SharedMemory} and {@code Integer}. The {@code SharedMemory} contains + * Merkle tree and fsverity headers for the given apk, in the form that can immediately be used + * for fsverity setup. The data is aligned to the beginning of {@code SharedMemory}, and has + * length equals to the returned {@code Integer}. + */ + private static Pair generateApkVerityIntoSharedMemory( String apkPath, byte[] expectedRootHash) throws IOException, SecurityException, DigestException, NoSuchAlgorithmException, SignatureNotFoundException { @@ -101,6 +115,7 @@ abstract public class VerityUtils { throw new SecurityException("Locally generated verity root hash does not match"); } + int contentSize = shmBufferFactory.getBufferLimit(); SharedMemory shm = shmBufferFactory.releaseSharedMemory(); if (shm == null) { throw new IllegalStateException("Failed to generate verity tree into shared memory"); @@ -108,7 +123,7 @@ abstract public class VerityUtils { if (!shm.setProtect(PROT_READ)) { throw new SecurityException("Failed to set up shared memory correctly"); } - return shm; + return Pair.create(shm, contentSize); } public static class SetupResult { @@ -123,22 +138,24 @@ abstract public class VerityUtils { private final int mCode; private final FileDescriptor mFileDescriptor; + private final int mContentSize; - public static SetupResult ok(@NonNull FileDescriptor fileDescriptor) { - return new SetupResult(RESULT_OK, fileDescriptor); + public static SetupResult ok(@NonNull FileDescriptor fileDescriptor, int contentSize) { + return new SetupResult(RESULT_OK, fileDescriptor, contentSize); } public static SetupResult skipped() { - return new SetupResult(RESULT_SKIPPED, null); + return new SetupResult(RESULT_SKIPPED, null, -1); } public static SetupResult failed() { - return new SetupResult(RESULT_FAILED, null); + return new SetupResult(RESULT_FAILED, null, -1); } - private SetupResult(int code, FileDescriptor fileDescriptor) { + private SetupResult(int code, FileDescriptor fileDescriptor, int contentSize) { this.mCode = code; this.mFileDescriptor = fileDescriptor; + this.mContentSize = contentSize; } public boolean isFailed() { @@ -152,6 +169,10 @@ abstract public class VerityUtils { public @NonNull FileDescriptor getUnownedFileDescriptor() { return mFileDescriptor; } + + public int getContentSize() { + return mContentSize; + } } /** A {@code ByteBufferFactory} that creates a shared memory backed {@code ByteBuffer}. */ @@ -188,5 +209,9 @@ abstract public class VerityUtils { mShm = null; return tmp; } + + public int getBufferLimit() { + return mBuffer == null ? -1 : mBuffer.limit(); + } } } diff --git a/services/core/java/com/android/server/slice/SliceManagerService.java b/services/core/java/com/android/server/slice/SliceManagerService.java index 0b7d9d02f1cb4ecb38199ef9ef95895390a3b729..fd0b6f1eb457c9b6b759100e72cc262c52ad347b 100644 --- a/services/core/java/com/android/server/slice/SliceManagerService.java +++ b/services/core/java/com/android/server/slice/SliceManagerService.java @@ -168,7 +168,8 @@ public class SliceManagerService extends ISliceManager.Stub { } @Override - public void pinSlice(String pkg, Uri uri, SliceSpec[] specs, IBinder token) throws RemoteException { + public void pinSlice(String pkg, Uri uri, SliceSpec[] specs, IBinder token) + throws RemoteException { verifyCaller(pkg); enforceAccess(pkg, uri); int user = Binder.getCallingUserHandle().getIdentifier(); @@ -210,7 +211,8 @@ public class SliceManagerService extends ISliceManager.Stub { } @Override - public int checkSlicePermission(Uri uri, String pkg, int pid, int uid) throws RemoteException { + public int checkSlicePermission(Uri uri, String pkg, int pid, int uid, + String[] autoGrantPermissions) throws RemoteException { if (mContext.checkUriPermission(uri, pid, uid, Intent.FLAG_GRANT_WRITE_URI_PERMISSION) == PERMISSION_GRANTED) { return SliceManager.PERMISSION_GRANTED; @@ -218,6 +220,11 @@ public class SliceManagerService extends ISliceManager.Stub { if (hasFullSliceAccess(pkg, UserHandle.getUserId(uid))) { return SliceManager.PERMISSION_GRANTED; } + for (String perm : autoGrantPermissions) { + if (mContext.checkPermission(perm, pid, uid) == PERMISSION_GRANTED) { + return SliceManager.PERMISSION_USER_GRANTED; + } + } synchronized (mLock) { if (mUserGrants.contains(new SliceGrant(uri, pkg, UserHandle.getUserId(uid)))) { return SliceManager.PERMISSION_USER_GRANTED; diff --git a/services/core/java/com/android/server/stats/StatsCompanionService.java b/services/core/java/com/android/server/stats/StatsCompanionService.java index b3d28fcbc4f1b4a1cf45bd3407ae7660aff8278c..fae0b24ff535532476f5a4ef6d698baf19aa2bb3 100644 --- a/services/core/java/com/android/server/stats/StatsCompanionService.java +++ b/services/core/java/com/android/server/stats/StatsCompanionService.java @@ -39,6 +39,7 @@ import android.os.BatteryStatsInternal; import android.os.Binder; import android.os.Bundle; import android.os.Environment; +import android.os.FileUtils; import android.os.IBinder; import android.os.IStatsCompanionService; import android.os.IStatsManager; @@ -68,14 +69,21 @@ import com.android.internal.os.KernelUidCpuFreqTimeReader; import com.android.internal.os.KernelWakelockReader; import com.android.internal.os.KernelWakelockStats; import com.android.internal.os.PowerProfile; +import com.android.internal.util.DumpUtils; import com.android.server.LocalServices; import com.android.server.SystemService; +import java.io.File; +import java.io.FileDescriptor; import java.io.IOException; +import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; +import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; /** @@ -89,14 +97,17 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { * How long to wait on an individual subsystem to return its stats. */ private static final long EXTERNAL_STATS_SYNC_TIMEOUT_MILLIS = 2000; + private static final long MILLIS_IN_A_DAY = TimeUnit.DAYS.toMillis(1); public static final String RESULT_RECEIVER_CONTROLLER_KEY = "controller_activity"; + public static final String CONFIG_DIR = "/data/misc/stats-service"; static final String TAG = "StatsCompanionService"; static final boolean DEBUG = false; public static final int CODE_DATA_BROADCAST = 1; public static final int CODE_SUBSCRIBER_BROADCAST = 1; + public static final int DEATH_THRESHOLD = 10; private final Context mContext; private final AlarmManager mAlarmManager; @@ -119,6 +130,10 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { new StatFs(Environment.getRootDirectory().getAbsolutePath()); private final StatFs mStatFsTemp = new StatFs(Environment.getDownloadCacheDirectory().getAbsolutePath()); + @GuardedBy("sStatsdLock") + private final HashSet mDeathTimeMillis = new HashSet<>(); + @GuardedBy("sStatsdLock") + private final HashMap mDeletedFiles = new HashMap<>(); private KernelUidCpuTimeReader mKernelUidCpuTimeReader = new KernelUidCpuTimeReader(); private KernelCpuSpeedReader[] mKernelCpuSpeedReaders; @@ -156,7 +171,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { informAllUidsLocked(context); } catch (RemoteException e) { Slog.e(TAG, "Failed to inform statsd latest update of all apps", e); - forgetEverything(); + forgetEverythingLocked(); } } } @@ -466,34 +481,32 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { } @Override // Binder call - public void setPullingAlarms(long timestampMs, long intervalMs) { - enforceCallingPermission(); - if (DEBUG) - Slog.d(TAG, "Setting pulling alarm for " + timestampMs + " every " + intervalMs + "ms"); - final long callingToken = Binder.clearCallingIdentity(); - try { - // using ELAPSED_REALTIME, not ELAPSED_REALTIME_WAKEUP, so if device is asleep, will - // only fire when it awakens. - // This alarm is inexact, leaving its exactness completely up to the OS optimizations. - // TODO: totally inexact means that stats per bucket could be quite off. Is this okay? - mAlarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME, timestampMs, intervalMs, - mPullingAlarmIntent); - } finally { - Binder.restoreCallingIdentity(callingToken); - } + public void setPullingAlarm(long nextPullTimeMs) { + enforceCallingPermission(); + if (DEBUG) + Slog.d(TAG, + "Setting pulling alarm in about " + (nextPullTimeMs - SystemClock.elapsedRealtime())); + final long callingToken = Binder.clearCallingIdentity(); + try { + // using ELAPSED_REALTIME, not ELAPSED_REALTIME_WAKEUP, so if device is asleep, will + // only fire when it awakens. + mAlarmManager.setExact(AlarmManager.ELAPSED_REALTIME, nextPullTimeMs, mPullingAlarmIntent); + } finally { + Binder.restoreCallingIdentity(callingToken); + } } @Override // Binder call - public void cancelPullingAlarms() { - enforceCallingPermission(); - if (DEBUG) - Slog.d(TAG, "Cancelling pulling alarm"); - final long callingToken = Binder.clearCallingIdentity(); - try { - mAlarmManager.cancel(mPullingAlarmIntent); - } finally { - Binder.restoreCallingIdentity(callingToken); - } + public void cancelPullingAlarm() { + enforceCallingPermission(); + if (DEBUG) + Slog.d(TAG, "Cancelling pulling alarm"); + final long callingToken = Binder.clearCallingIdentity(); + try { + mAlarmManager.cancel(mPullingAlarmIntent); + } finally { + Binder.restoreCallingIdentity(callingToken); + } } private void addNetworkStats( @@ -660,12 +673,14 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { private void pullBluetoothBytesTransfer(int tagId, List pulledData) { BluetoothActivityEnergyInfo info = pullBluetoothData(); long elapsedNanos = SystemClock.elapsedRealtimeNanos(); - for (UidTraffic traffic : info.getUidTraffic()) { - StatsLogEventWrapper e = new StatsLogEventWrapper(elapsedNanos, tagId, 3); - e.writeInt(traffic.getUid()); - e.writeLong(traffic.getRxBytes()); - e.writeLong(traffic.getTxBytes()); - pulledData.add(e); + if (info.getUidTraffic() != null) { + for (UidTraffic traffic : info.getUidTraffic()) { + StatsLogEventWrapper e = new StatsLogEventWrapper(elapsedNanos, tagId, 3); + e.writeInt(traffic.getUid()); + e.writeLong(traffic.getRxBytes()); + e.writeLong(traffic.getTxBytes()); + pulledData.add(e); + } } } @@ -753,7 +768,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { }); } - private void pullWifiActivityEnergyInfo(int tagId, List pulledData) { + private void pullWifiActivityInfo(int tagId, List pulledData) { long token = Binder.clearCallingIdentity(); if (mWifiManager == null) { mWifiManager = @@ -921,8 +936,8 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { pullKernelUidCpuActiveTime(tagId, ret); break; } - case StatsLog.WIFI_ACTIVITY_ENERGY_INFO: { - pullWifiActivityEnergyInfo(tagId, ret); + case StatsLog.WIFI_ACTIVITY_INFO: { + pullWifiActivityInfo(tagId, ret); break; } case StatsLog.MODEM_ACTIVITY_INFO: { @@ -1057,7 +1072,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { sStatsd.asBinder().linkToDeath(new StatsdDeathRecipient(), 0); } catch (RemoteException e) { Slog.e(TAG, "linkToDeath(StatsdDeathRecipient) failed", e); - forgetEverything(); + forgetEverythingLocked(); } // Setup broadcast receiver for updates. IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_REPLACED); @@ -1089,7 +1104,7 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { Slog.i(TAG, "Told statsd that StatsCompanionService is alive."); } catch (RemoteException e) { Slog.e(TAG, "Failed to inform statsd that statscompanion is ready", e); - forgetEverything(); + forgetEverythingLocked(); } } } @@ -1098,18 +1113,60 @@ public class StatsCompanionService extends IStatsCompanionService.Stub { @Override public void binderDied() { Slog.i(TAG, "Statsd is dead - erase all my knowledge."); - forgetEverything(); + synchronized (sStatsdLock) { + long now = SystemClock.elapsedRealtime(); + for (Long timeMillis : mDeathTimeMillis) { + long ageMillis = now - timeMillis; + if (ageMillis > MILLIS_IN_A_DAY) { + mDeathTimeMillis.remove(timeMillis); + } + } + for (Long timeMillis : mDeletedFiles.keySet()) { + long ageMillis = now - timeMillis; + if (ageMillis > MILLIS_IN_A_DAY * 7) { + mDeletedFiles.remove(timeMillis); + } + } + mDeathTimeMillis.add(now); + if (mDeathTimeMillis.size() >= DEATH_THRESHOLD) { + mDeathTimeMillis.clear(); + File[] configs = FileUtils.listFilesOrEmpty(new File(CONFIG_DIR)); + if (configs.length > 0) { + String fileName = configs[0].getName(); + if (configs[0].delete()) { + mDeletedFiles.put(now, fileName); + } + } + } + forgetEverythingLocked(); + } } } - private void forgetEverything() { + private void forgetEverythingLocked() { + sStatsd = null; + mContext.unregisterReceiver(mAppUpdateReceiver); + mContext.unregisterReceiver(mUserUpdateReceiver); + mContext.unregisterReceiver(mShutdownEventReceiver); + cancelAnomalyAlarm(); + cancelPullingAlarm(); + } + + @Override + protected void dump(FileDescriptor fd, PrintWriter writer, String[] args) { + if (!DumpUtils.checkDumpPermission(mContext, TAG, writer)) return; + synchronized (sStatsdLock) { - sStatsd = null; - mContext.unregisterReceiver(mAppUpdateReceiver); - mContext.unregisterReceiver(mUserUpdateReceiver); - mContext.unregisterReceiver(mShutdownEventReceiver); - cancelAnomalyAlarm(); - cancelPullingAlarms(); + writer.println("Number of configuration files deleted: " + mDeletedFiles.size()); + if (mDeletedFiles.size() > 0) { + writer.println(" timestamp, deleted file name"); + } + long lastBootMillis = + SystemClock.currentThreadTimeMillis() - SystemClock.elapsedRealtime(); + for (Long elapsedMillis : mDeletedFiles.keySet()) { + long deletionMillis = lastBootMillis + elapsedMillis; + writer.println(" " + deletionMillis + ", " + mDeletedFiles.get(elapsedMillis)); + } } } diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java index 56c9e51d5d3a84e2cd09d28b5463545b95c11be3..f19c554ace979f5282afc2a4e34b53f415045c55 100644 --- a/services/core/java/com/android/server/wm/AppWindowToken.java +++ b/services/core/java/com/android/server/wm/AppWindowToken.java @@ -1485,7 +1485,7 @@ class AppWindowToken extends WindowToken implements WindowManagerService.AppFree if (w == null || winHint != null && w != winHint) { return; } - final boolean surfaceReady = w.hasDrawnLw() // Regular case + final boolean surfaceReady = w.isDrawnLw() // Regular case || w.mWinAnimator.mSurfaceDestroyDeferred // The preserved surface is still ready. || w.isDragResizeChanged(); // Waiting for relayoutWindow to call preserveSurface. final boolean needsLetterbox = w.isLetterboxedAppWindow() && fillsParent() && surfaceReady; diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 2ffdbfd4c64654768c2c5b4e77b4d62933d30ae1..c9ff9e3ba35b2bb3cd4c2b8571f2787988029862 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -909,6 +909,7 @@ class DisplayContent extends WindowContainer mPendingAnimations = new ArrayList<>(); private final int mDisplayId; + private final Runnable mFailsafeRunnable = this::cancelAnimation; // The recents component app token that is shown behind the visibile tasks private AppWindowToken mHomeAppToken; @@ -223,6 +226,13 @@ public class RecentsAnimationController { return; } + try { + mRunner.asBinder().linkToDeath(this, 0); + } catch (RemoteException e) { + cancelAnimation(); + return; + } + // Adjust the wallpaper visibility for the showing home activity final AppWindowToken recentsComponentAppToken = dc.getHomeStack().getTopChild().getTopFullscreenAppToken(); @@ -296,6 +306,7 @@ public class RecentsAnimationController { // We've already canceled the animation return; } + mService.mH.removeCallbacks(mFailsafeRunnable); mCanceled = true; try { mRunner.onAnimationCanceled(); @@ -321,10 +332,21 @@ public class RecentsAnimationController { } mPendingAnimations.clear(); + mRunner.asBinder().unlinkToDeath(this, 0); + mService.mInputMonitor.updateInputWindowsLw(true /*force*/); mService.destroyInputConsumer(INPUT_CONSUMER_RECENTS_ANIMATION); } + void scheduleFailsafe() { + mService.mH.postDelayed(mFailsafeRunnable, FAILSAFE_DELAY); + } + + @Override + public void binderDied() { + cancelAnimation(); + } + void checkAnimationReady(WallpaperController wallpaperController) { if (mPendingStart) { final boolean wallpaperReady = !isHomeAppOverWallpaper() diff --git a/services/core/java/com/android/server/wm/RemoteAnimationController.java b/services/core/java/com/android/server/wm/RemoteAnimationController.java index 379a1a1528b4f8caa29802a34a00d9327f27ad0b..3be7b23590e58ba9816d9b0b4eba6a62ff65b0b1 100644 --- a/services/core/java/com/android/server/wm/RemoteAnimationController.java +++ b/services/core/java/com/android/server/wm/RemoteAnimationController.java @@ -26,6 +26,7 @@ import android.graphics.Point; import android.graphics.Rect; import android.os.Binder; import android.os.Handler; +import android.os.IBinder.DeathRecipient; import android.os.RemoteException; import android.os.SystemClock; import android.util.Slog; @@ -47,7 +48,7 @@ import java.util.ArrayList; /** * Helper class to run app animations in a remote process. */ -class RemoteAnimationController { +class RemoteAnimationController implements DeathRecipient { private static final String TAG = TAG_WITH_CLASS_NAME ? "RemoteAnimationController" : TAG_WM; private static final long TIMEOUT_MS = 2000; @@ -56,12 +57,10 @@ class RemoteAnimationController { private final ArrayList mPendingAnimations = new ArrayList<>(); private final Rect mTmpRect = new Rect(); private final Handler mHandler; - private FinishedCallback mFinishedCallback; + private final Runnable mTimeoutRunnable = this::cancelAnimation; - private final Runnable mTimeoutRunnable = () -> { - onAnimationFinished(); - invokeAnimationCancelled(); - }; + private FinishedCallback mFinishedCallback; + private boolean mCanceled; RemoteAnimationController(WindowManagerService service, RemoteAnimationAdapter remoteAnimationAdapter, Handler handler) { @@ -90,7 +89,7 @@ class RemoteAnimationController { * Called when the transition is ready to be started, and all leashes have been set up. */ void goodToGo() { - if (mPendingAnimations.isEmpty()) { + if (mPendingAnimations.isEmpty() || mCanceled) { onAnimationFinished(); return; } @@ -107,8 +106,8 @@ class RemoteAnimationController { } mService.mAnimator.addAfterPrepareSurfacesRunnable(() -> { try { - mRemoteAnimationAdapter.getRunner().onAnimationStart(animations, - mFinishedCallback); + mRemoteAnimationAdapter.getRunner().asBinder().linkToDeath(this, 0); + mRemoteAnimationAdapter.getRunner().onAnimationStart(animations, mFinishedCallback); } catch (RemoteException e) { Slog.e(TAG, "Failed to start remote animation", e); onAnimationFinished(); @@ -120,6 +119,17 @@ class RemoteAnimationController { } } + private void cancelAnimation() { + synchronized (mService.getWindowManagerLock()) { + if (mCanceled) { + return; + } + mCanceled = true; + } + onAnimationFinished(); + invokeAnimationCancelled(); + } + private void writeStartDebugStatement() { Slog.i(TAG, "Starting remote animation"); final StringWriter sw = new StringWriter(); @@ -154,6 +164,7 @@ class RemoteAnimationController { private void onAnimationFinished() { mHandler.removeCallbacks(mTimeoutRunnable); + mRemoteAnimationAdapter.getRunner().asBinder().unlinkToDeath(this, 0); synchronized (mService.mWindowMap) { releaseFinishedCallback(); mService.openSurfaceTransaction(); @@ -193,6 +204,11 @@ class RemoteAnimationController { mService.sendSetRunningRemoteAnimation(pid, running); } + @Override + public void binderDied() { + cancelAnimation(); + } + private static final class FinishedCallback extends IRemoteAnimationFinishedCallback.Stub { RemoteAnimationController mOuter; diff --git a/services/core/java/com/android/server/wm/StrictModeFlash.java b/services/core/java/com/android/server/wm/StrictModeFlash.java index f51a6a921984cd1dbb350eb2d9f054aa61bc7ad2..e97b36683362e0b44e05227c15ac5f3e9713bc68 100644 --- a/services/core/java/com/android/server/wm/StrictModeFlash.java +++ b/services/core/java/com/android/server/wm/StrictModeFlash.java @@ -79,17 +79,25 @@ class StrictModeFlash { } // Top - c.clipRect(new Rect(0, 0, dw, mThickness), Region.Op.REPLACE); + c.save(); + c.clipRect(new Rect(0, 0, dw, mThickness)); c.drawColor(Color.RED); + c.restore(); // Left - c.clipRect(new Rect(0, 0, mThickness, dh), Region.Op.REPLACE); + c.save(); + c.clipRect(new Rect(0, 0, mThickness, dh)); c.drawColor(Color.RED); + c.restore(); // Right - c.clipRect(new Rect(dw - mThickness, 0, dw, dh), Region.Op.REPLACE); + c.save(); + c.clipRect(new Rect(dw - mThickness, 0, dw, dh)); c.drawColor(Color.RED); + c.restore(); // Bottom - c.clipRect(new Rect(0, dh - mThickness, dw, dh), Region.Op.REPLACE); + c.save(); + c.clipRect(new Rect(0, dh - mThickness, dw, dh)); c.drawColor(Color.RED); + c.restore(); mSurface.unlockCanvasAndPost(c); } diff --git a/services/core/java/com/android/server/wm/WindowManagerInternal.java b/services/core/java/com/android/server/wm/WindowManagerInternal.java index 6bceda5ae3bc2541777bb860110ea6dc274bb609..6686b80d1e18940ebd45ff7d025ed99919c3143f 100644 --- a/services/core/java/com/android/server/wm/WindowManagerInternal.java +++ b/services/core/java/com/android/server/wm/WindowManagerInternal.java @@ -419,4 +419,10 @@ public abstract class WindowManagerInternal { * @see android.view.IWindowManager#lockNow */ public abstract void lockNow(); + + /** + * Return the user that owns the given window, {@link android.os.UserHandle#USER_NULL} if + * the window token is not found. + */ + public abstract int getWindowOwnerUserId(IBinder windowToken); } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 0b5c0064d40ffb3424d882004f258d458b255b2e..f1cd46bc16d01dc87cc423988aa1dae150cf5722 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -25,12 +25,10 @@ import static android.app.ActivityManager.SPLIT_SCREEN_CREATE_MODE_TOP_OR_LEFT; import static android.app.AppOpsManager.OP_SYSTEM_ALERT_WINDOW; import static android.app.StatusBarManager.DISABLE_MASK; import static android.app.admin.DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED; -import static android.content.Intent.EXTRA_USER_HANDLE; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.os.Process.SYSTEM_UID; import static android.os.Process.myPid; import static android.os.Trace.TRACE_TAG_WINDOW_MANAGER; -import static android.os.UserHandle.USER_NULL; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.Display.INVALID_DISPLAY; import static android.view.WindowManager.DOCKED_INVALID; @@ -181,7 +179,6 @@ import android.util.Log; import android.util.MergedConfiguration; import android.util.Pair; import android.util.Slog; -import android.util.SparseArray; import android.util.SparseBooleanArray; import android.util.SparseIntArray; import android.util.TimeUtils; @@ -2423,8 +2420,8 @@ public class WindowManagerService extends IWindowManager.Stub final int oldRotation = defaultDisplayContent.getRotation(); final boolean oldAltOrientation = defaultDisplayContent.getAltOrientation(); - final int rotation = mPolicy.rotationForOrientationLw(lastOrientation, - oldRotation); + final int rotation = mPolicy.rotationForOrientationLw(lastOrientation, oldRotation, + true /* defaultDisplay */); boolean altOrientation = !mPolicy.rotationHasCompatibleMetricsLw( lastOrientation, rotation); if (oldRotation == rotation && oldAltOrientation == altOrientation) { @@ -2793,6 +2790,11 @@ public class WindowManagerService extends IWindowManager.Stub mTaskSnapshotController.screenTurningOff(listener); } + @Override + public void triggerAnimationFailsafe() { + mH.sendEmptyMessage(H.ANIMATION_FAILSAFE); + } + /** * Starts deferring layout passes. Useful when doing multiple changes but to optimize * performance, only one layout pass should be done. This can be called multiple times, and @@ -4566,6 +4568,7 @@ public class WindowManagerService extends IWindowManager.Stub public static final int NOTIFY_KEYGUARD_TRUSTED_CHANGED = 57; public static final int SET_HAS_OVERLAY_UI = 58; public static final int SET_RUNNING_REMOTE_ANIMATION = 59; + public static final int ANIMATION_FAILSAFE = 60; /** * Used to denote that an integer field in a message will not be used. @@ -4984,6 +4987,14 @@ public class WindowManagerService extends IWindowManager.Stub mAmInternal.setRunningRemoteAnimation(msg.arg1, msg.arg2 == 1); } break; + case ANIMATION_FAILSAFE: { + synchronized (mWindowMap) { + if (mRecentsAnimationController != null) { + mRecentsAnimationController.scheduleFailsafe(); + } + } + } + break; } if (DEBUG_WINDOW_TRACE) { Slog.v(TAG_WM, "handleMessage: exit"); @@ -7351,6 +7362,17 @@ public class WindowManagerService extends IWindowManager.Stub public void lockNow() { WindowManagerService.this.lockNow(null); } + + @Override + public int getWindowOwnerUserId(IBinder token) { + synchronized (mWindowMap) { + WindowState window = mWindowMap.get(token); + if (window != null) { + return UserHandle.getUserId(window.mOwnerUid); + } + return UserHandle.USER_NULL; + } + } } void registerAppFreezeListener(AppFreezeListener listener) { diff --git a/services/core/jni/BroadcastRadio/BroadcastRadioService.cpp b/services/core/jni/BroadcastRadio/BroadcastRadioService.cpp index ecf1a33539e937ce7cefd32367e3b9502b545106..f7ca363e54a10d8d131edc1778e9d644cdd07d02 100644 --- a/services/core/jni/BroadcastRadio/BroadcastRadioService.cpp +++ b/services/core/jni/BroadcastRadio/BroadcastRadioService.cpp @@ -231,6 +231,13 @@ static jobject nativeOpenTuner(JNIEnv *env, jobject obj, long nativeContext, jin return nullptr; } bandConfigHal = module.bands[0]; + + /* Prefer FM to workaround possible program list fetching limitation + * (if tuner scans only configured band for programs). */ + auto fmIt = std::find_if(module.bands.begin(), module.bands.end(), + [](const BandConfig & band) { return utils::isFm(band.type); }); + if (fmIt != module.bands.end()) bandConfigHal = *fmIt; + if (bandConfigHal.spacings.size() > 1) { bandConfigHal.spacings = hidl_vec({ *std::min_element( bandConfigHal.spacings.begin(), bandConfigHal.spacings.end()) }); diff --git a/services/core/jni/BroadcastRadio/convert.cpp b/services/core/jni/BroadcastRadio/convert.cpp index 847222ae4ba1b84ee924cde58569ffe70cd95969..61b48c2e9316379fbb561dae654544b36351b391 100644 --- a/services/core/jni/BroadcastRadio/convert.cpp +++ b/services/core/jni/BroadcastRadio/convert.cpp @@ -380,6 +380,7 @@ static JavaRef ModulePropertiesFromHal(JNIEnv *env, const V1_0::Propert auto jProduct = make_javastr(env, prop10.product); auto jVersion = make_javastr(env, prop10.version); auto jSerial = make_javastr(env, prop10.serial); + constexpr bool isInitializationRequired = true; bool isBgScanSupported = prop11 ? prop11->supportsBackgroundScanning : false; auto jVendorInfo = prop11 ? VendorInfoFromHal(env, prop11->vendorInfo) : nullptr; @@ -394,9 +395,9 @@ static JavaRef ModulePropertiesFromHal(JNIEnv *env, const V1_0::Propert return make_javaref(env, env->NewObject(gjni.ModuleProperties.clazz, gjni.ModuleProperties.cstor, moduleId, jServiceName.get(), prop10.classId, jImplementor.get(), jProduct.get(), jVersion.get(), jSerial.get(), prop10.numTuners, - prop10.numAudioSources, prop10.supportsCapture, jBands.get(), isBgScanSupported, - jSupportedProgramTypes.get(), jSupportedIdentifierTypes.get(), nullptr, - jVendorInfo.get())); + prop10.numAudioSources, isInitializationRequired, prop10.supportsCapture, jBands.get(), + isBgScanSupported, jSupportedProgramTypes.get(), jSupportedIdentifierTypes.get(), + nullptr, jVendorInfo.get())); } JavaRef ModulePropertiesFromHal(JNIEnv *env, const V1_0::Properties &properties, @@ -712,7 +713,7 @@ void register_android_server_broadcastradio_convert(JNIEnv *env) { gjni.ModuleProperties.clazz = MakeGlobalRefOrDie(env, modulePropertiesClass); gjni.ModuleProperties.cstor = GetMethodIDOrDie(env, modulePropertiesClass, "", "(ILjava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;" - "Ljava/lang/String;IIZ[Landroid/hardware/radio/RadioManager$BandDescriptor;Z" + "Ljava/lang/String;IIZZ[Landroid/hardware/radio/RadioManager$BandDescriptor;Z" "[I[ILjava/util/Map;Ljava/util/Map;)V"); auto programInfoClass = FindClassOrDie(env, "android/hardware/radio/RadioManager$ProgramInfo"); diff --git a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp index dcee15106f8a81a8a453ec2aadc9a79792193f47..21fea1c910cb0c7afc311dc69d49398e8acb22c2 100644 --- a/services/core/jni/com_android_server_location_GnssLocationProvider.cpp +++ b/services/core/jni/com_android_server_location_GnssLocationProvider.cpp @@ -1125,6 +1125,16 @@ Return GnssBatchingCallback::gnssLocationBatchCb( } static void android_location_GnssLocationProvider_class_init_native(JNIEnv* env, jclass clazz) { + gnssHal_V1_1 = IGnss_V1_1::getService(); + if (gnssHal_V1_1 == nullptr) { + ALOGD("gnssHal 1.1 was null, trying 1.0"); + gnssHal = IGnss_V1_0::getService(); + } else { + gnssHal = gnssHal_V1_1; + } +} + +static void android_location_GnssLocationProvider_init_once(JNIEnv* env, jclass clazz) { method_reportLocation = env->GetMethodID(clazz, "reportLocation", "(ZLandroid/location/Location;)V"); method_reportStatus = env->GetMethodID(clazz, "reportStatus", "(I)V"); @@ -1175,15 +1185,6 @@ static void android_location_GnssLocationProvider_class_init_native(JNIEnv* env, LOG_ALWAYS_FATAL("Unable to get Java VM. Error: %d", jvmStatus); } - // TODO(b/31632518) - gnssHal_V1_1 = IGnss_V1_1::getService(); - if (gnssHal_V1_1 == nullptr) { - ALOGD("gnssHal 1.1 was null, trying 1.0"); - gnssHal = IGnss_V1_0::getService(); - } else { - gnssHal = gnssHal_V1_1; - } - if (gnssHal != nullptr) { gnssHalDeathRecipient = new GnssDeathRecipient(); hardware::Return linked = gnssHal->linkToDeath( @@ -2068,6 +2069,8 @@ static const JNINativeMethod sMethods[] = { {"native_is_gnss_configuration_supported", "()Z", reinterpret_cast( android_location_gpsLocationProvider_is_gnss_configuration_supported)}, + {"native_init_once", "()V", reinterpret_cast( + android_location_GnssLocationProvider_init_once)}, {"native_init", "()Z", reinterpret_cast(android_location_GnssLocationProvider_init)}, {"native_cleanup", "()V", reinterpret_cast( android_location_GnssLocationProvider_cleanup)}, diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java b/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java index 71c2ea18eb1bc4ba28b76552a9b5cf73fa5bc960..1c9782fa5565aea6300e1910227c426085df6a23 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/BaseIDevicePolicyManager.java @@ -78,23 +78,6 @@ abstract class BaseIDevicePolicyManager extends IDevicePolicyManager.Stub { return false; } - @Override - public boolean setPasswordBlacklist(ComponentName who, String name, List blacklist, - boolean parent) { - return false; - } - - @Override - public String getPasswordBlacklistName(ComponentName who, @UserIdInt int userId, - boolean parent) { - return null; - } - - @Override - public boolean isPasswordBlacklisted(@UserIdInt int userId, String password) { - return false; - } - public boolean isUsingUnifiedPassword(ComponentName who) { return true; } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 2fd776405b39a0d5924d73188fd041a481e0f8e5..90e8a9cd74e13b386c8082e3223c92d95449b466 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -51,6 +51,7 @@ import static android.app.admin.DevicePolicyManager.ID_TYPE_MEID; import static android.app.admin.DevicePolicyManager.ID_TYPE_SERIAL; import static android.app.admin.DevicePolicyManager.LEAVE_ALL_SYSTEM_APPS_ENABLED; import static android.app.admin.DevicePolicyManager.LOCK_TASK_FEATURE_HOME; +import static android.app.admin.DevicePolicyManager.LOCK_TASK_FEATURE_NOTIFICATIONS; import static android.app.admin.DevicePolicyManager.LOCK_TASK_FEATURE_OVERVIEW; import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_COMPLEX; import static android.app.admin.DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED; @@ -590,7 +591,8 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { List mLockTaskPackages = new ArrayList<>(); // Bitfield of feature flags to be enabled during LockTask mode. - int mLockTaskFeatures = DevicePolicyManager.LOCK_TASK_FEATURE_NONE; + // We default on the power button menu, in order to be consistent with pre-P behaviour. + int mLockTaskFeatures = DevicePolicyManager.LOCK_TASK_FEATURE_GLOBAL_ACTIONS; boolean mStatusBarDisabled = false; @@ -818,7 +820,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { private static final String TAG_PASSWORD_HISTORY_LENGTH = "password-history-length"; private static final String TAG_MIN_PASSWORD_LENGTH = "min-password-length"; private static final String ATTR_VALUE = "value"; - private static final String TAG_PASSWORD_BLACKLIST = "password-blacklist"; private static final String TAG_PASSWORD_QUALITY = "password-quality"; private static final String TAG_POLICIES = "policies"; private static final String TAG_CROSS_PROFILE_WIDGET_PROVIDERS = @@ -959,9 +960,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { // Default title of confirm credentials screen String organizationName = null; - // The blacklist data is stored in a file whose name is stored in the XML - String passwordBlacklistFile = null; - // The component name of the backup transport which has to be used if backups are mandatory // or null if backups are not mandatory. ComponentName mandatoryBackupTransport = null; @@ -1051,11 +1049,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { out.endTag(null, TAG_MIN_PASSWORD_NONLETTER); } } - if (passwordBlacklistFile != null) { - out.startTag(null, TAG_PASSWORD_BLACKLIST); - out.attribute(null, ATTR_VALUE, passwordBlacklistFile); - out.endTag(null, TAG_PASSWORD_BLACKLIST); - } if (maximumTimeToUnlock != DEF_MAXIMUM_TIME_TO_UNLOCK) { out.startTag(null, TAG_MAX_TIME_TO_UNLOCK); out.attribute(null, ATTR_VALUE, Long.toString(maximumTimeToUnlock)); @@ -1311,8 +1304,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } else if (TAG_MIN_PASSWORD_NONLETTER.equals(tag)) { minimumPasswordMetrics.nonLetter = Integer.parseInt( parser.getAttributeValue(null, ATTR_VALUE)); - } else if (TAG_PASSWORD_BLACKLIST.equals(tag)) { - passwordBlacklistFile = parser.getAttributeValue(null, ATTR_VALUE); }else if (TAG_MAX_TIME_TO_UNLOCK.equals(tag)) { maximumTimeToUnlock = Long.parseLong( parser.getAttributeValue(null, ATTR_VALUE)); @@ -1587,8 +1578,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { pw.println(minimumPasswordMetrics.symbols); pw.print(prefix); pw.print("minimumPasswordNonLetter="); pw.println(minimumPasswordMetrics.nonLetter); - pw.print(prefix); pw.print("passwordBlacklist="); - pw.println(passwordBlacklistFile != null); pw.print(prefix); pw.print("maximumTimeToUnlock="); pw.println(maximumTimeToUnlock); pw.print(prefix); pw.print("strongAuthUnlockTimeout="); @@ -1855,10 +1844,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { return new LockPatternUtils(mContext); } - PasswordBlacklist newPasswordBlacklist(File file) { - return new PasswordBlacklist(file); - } - boolean storageManagerIsFileBasedEncryptionEnabled() { return StorageManager.isFileEncryptedNativeOnly(); } @@ -2026,8 +2011,9 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { Settings.Global.putString(mContext.getContentResolver(), name, value); } - void settingsSystemPutString(String name, String value) { - Settings.System.putString(mContext.getContentResolver(), name, value); + void settingsSystemPutStringForUser(String name, String value, int userId) { + Settings.System.putStringForUser( + mContext.getContentResolver(), name, value, userId); } void securityLogSetLoggingEnabledProperty(boolean enabled) { @@ -4410,136 +4396,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { } } - /* @return the password blacklist set by the admin or {@code null} if none. */ - PasswordBlacklist getAdminPasswordBlacklistLocked(@NonNull ActiveAdmin admin) { - final int userId = UserHandle.getUserId(admin.getUid()); - return admin.passwordBlacklistFile == null ? null : new PasswordBlacklist( - new File(getPolicyFileDirectory(userId), admin.passwordBlacklistFile)); - } - - private static final String PASSWORD_BLACKLIST_FILE_PREFIX = "password-blacklist-"; - private static final String PASSWORD_BLACKLIST_FILE_SUFFIX = ""; - - @Override - public boolean setPasswordBlacklist(ComponentName who, String name, List blacklist, - boolean parent) { - if (!mHasFeature) { - return false; - } - Preconditions.checkNotNull(who, "who is null"); - - synchronized (this) { - final ActiveAdmin admin = getActiveAdminForCallerLocked( - who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER, parent); - final int userId = mInjector.userHandleGetCallingUserId(); - PasswordBlacklist adminBlacklist = getAdminPasswordBlacklistLocked(admin); - - if (blacklist == null || blacklist.isEmpty()) { - // Remove the adminBlacklist - admin.passwordBlacklistFile = null; - saveSettingsLocked(userId); - if (adminBlacklist != null) { - adminBlacklist.delete(); - } - return true; - } - - // Validate server side - Preconditions.checkNotNull(name, "name is null"); - DevicePolicyManager.enforcePasswordBlacklistSize(blacklist); - - // Blacklist is case insensitive so normalize to lower case - final int blacklistSize = blacklist.size(); - for (int i = 0; i < blacklistSize; ++i) { - blacklist.set(i, blacklist.get(i).toLowerCase()); - } - - final boolean isNewBlacklist = adminBlacklist == null; - if (isNewBlacklist) { - // Create a new file for the blacklist. There could be multiple admins, each setting - // different blacklists, to restrict a user's credential, for example a managed - // profile can impose restrictions on its parent while the parent is already - // restricted by its own admin. A deterministic naming scheme would be fragile if - // new types of admin are introduced so we generate and save the file name instead. - // This isn't a temporary file but it reuses the name generation logic - final File file; - try { - file = File.createTempFile(PASSWORD_BLACKLIST_FILE_PREFIX, - PASSWORD_BLACKLIST_FILE_SUFFIX, getPolicyFileDirectory(userId)); - } catch (IOException e) { - Slog.e(LOG_TAG, "Failed to make a file for the blacklist", e); - return false; - } - adminBlacklist = mInjector.newPasswordBlacklist(file); - } - - if (adminBlacklist.savePasswordBlacklist(name, blacklist)) { - if (isNewBlacklist) { - // The blacklist was saved so point the admin to the file - admin.passwordBlacklistFile = adminBlacklist.getFile().getName(); - saveSettingsLocked(userId); - } - return true; - } - } - - return false; - } - - @Override - public String getPasswordBlacklistName(ComponentName who, @UserIdInt int userId, - boolean parent) { - if (!mHasFeature) { - return null; - } - Preconditions.checkNotNull(who, "who is null"); - enforceFullCrossUsersPermission(userId); - synchronized (this) { - final ActiveAdmin admin = getActiveAdminForCallerLocked( - who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER, parent); - final PasswordBlacklist blacklist = getAdminPasswordBlacklistLocked(admin); - if (blacklist == null) { - return null; - } - return blacklist.getName(); - } - } - - @Override - public boolean isPasswordBlacklisted(@UserIdInt int userId, String password) { - if (!mHasFeature) { - return false; - } - mContext.enforceCallingOrSelfPermission( - android.Manifest.permission.TEST_BLACKLISTED_PASSWORD, null); - return isPasswordBlacklistedInternal(userId, password); - } - - private boolean isPasswordBlacklistedInternal(@UserIdInt int userId, String password) { - Preconditions.checkNotNull(password, "Password is null"); - enforceFullCrossUsersPermission(userId); - - // Normalize to lower case for case insensitive blacklist match - final String lowerCasePassword = password.toLowerCase(); - - synchronized (this) { - final List admins = - getActiveAdminsForLockscreenPoliciesLocked(userId, /* parent */ false); - final int N = admins.size(); - for (int i = 0; i < N; i++) { - final PasswordBlacklist blacklist - = getAdminPasswordBlacklistLocked(admins.get(i)); - if (blacklist != null) { - if (blacklist.isPasswordBlacklisted(lowerCasePassword)) { - return true; - } - } - } - } - - return false; - } - @Override public boolean isActivePasswordSufficient(int userHandle, boolean parent) { if (!mHasFeature) { @@ -4935,11 +4791,6 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { return false; } } - - if (isPasswordBlacklistedInternal(userHandle, password)) { - Slog.w(LOG_TAG, "resetPassword: the password is blacklisted"); - return false; - } } DevicePolicyData policy = getUserData(userHandle); @@ -5531,10 +5382,11 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { .setAttestationChallenge(null) .build(); - final boolean generationResult = keyChain.generateKeyPair(algorithm, + final int generationResult = keyChain.generateKeyPair(algorithm, new ParcelableKeyGenParameterSpec(noAttestationSpec)); - if (!generationResult) { - Log.e(LOG_TAG, "KeyChain failed to generate a keypair."); + if (generationResult != KeyChain.KEY_GEN_SUCCESS) { + Log.e(LOG_TAG, String.format( + "KeyChain failed to generate a keypair, error %d.", generationResult)); return false; } @@ -5547,12 +5399,17 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { final byte[] attestationChallenge = keySpec.getAttestationChallenge(); if (attestationChallenge != null) { - final boolean attestationResult = keyChain.attestKey( + final int attestationResult = keyChain.attestKey( alias, attestationChallenge, attestationUtilsFlags, attestationChain); - if (!attestationResult) { + if (attestationResult != KeyChain.KEY_ATTESTATION_SUCCESS) { Log.e(LOG_TAG, String.format( - "Attestation for %s failed, deleting key.", alias)); + "Attestation for %s failed (rc=%d), deleting key.", + alias, attestationResult)); keyChain.removeKeyPair(alias); + if (attestationResult == KeyChain.KEY_ATTESTATION_CANNOT_ATTEST_IDS) { + throw new UnsupportedOperationException( + "Device does not support Device ID attestation."); + } return false; } } @@ -8738,6 +8595,7 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { @Override public List getPermittedInputMethodsForCurrentUser() { + enforceManageUsers(); UserInfo currentUser; try { currentUser = mInjector.getIActivityManager().getCurrentUser(); @@ -9909,6 +9767,9 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { boolean hasOverview = (flags & LOCK_TASK_FEATURE_OVERVIEW) != 0; Preconditions.checkArgument(hasHome || !hasOverview, "Cannot use LOCK_TASK_FEATURE_OVERVIEW without LOCK_TASK_FEATURE_HOME"); + boolean hasNotification = (flags & LOCK_TASK_FEATURE_NOTIFICATIONS) != 0; + Preconditions.checkArgument(hasHome || !hasNotification, + "Cannot use LOCK_TASK_FEATURE_NOTIFICATIONS without LOCK_TASK_FEATURE_HOME"); final int userHandle = mInjector.userHandleGetCallingUserId(); synchronized (this) { @@ -10037,15 +9898,17 @@ public class DevicePolicyManagerService extends BaseIDevicePolicyManager { Preconditions.checkStringNotEmpty(setting, "String setting is null or empty"); synchronized (this) { - getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER); + getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_PROFILE_OWNER); if (!SYSTEM_SETTINGS_WHITELIST.contains(setting)) { throw new SecurityException(String.format( "Permission denial: device owners cannot update %1$s", setting)); } - mInjector.binderWithCleanCallingIdentity(() -> mInjector.settingsSystemPutString( - setting, value)); + final int callingUserId = mInjector.userHandleGetCallingUserId(); + + mInjector.binderWithCleanCallingIdentity(() -> + mInjector.settingsSystemPutStringForUser(setting, value, callingUserId)); } } diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/PasswordBlacklist.java b/services/devicepolicy/java/com/android/server/devicepolicy/PasswordBlacklist.java deleted file mode 100644 index a17a1075f100e91fb4d3794f27f02e725b743b24..0000000000000000000000000000000000000000 --- a/services/devicepolicy/java/com/android/server/devicepolicy/PasswordBlacklist.java +++ /dev/null @@ -1,165 +0,0 @@ -/* - * Copyright (C) 2017 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.devicepolicy; - -import android.annotation.NonNull; -import android.annotation.Nullable; -import android.util.AtomicFile; -import android.util.Slog; - -import java.io.BufferedInputStream; -import java.io.BufferedOutputStream; -import java.io.DataInputStream; -import java.io.DataOutputStream; -import java.io.File; -import java.io.FileOutputStream; -import java.io.FileNotFoundException; -import java.io.IOException; -import java.util.List; - -/** - * Manages the blacklisted passwords. - * - * This caller must ensure synchronized access. - */ -public class PasswordBlacklist { - private static final String TAG = "PasswordBlacklist"; - - private final AtomicFile mFile; - - /** - * Create an object to manage the password blacklist. - * - * This is a lightweight operation to prepare variables but not perform any IO. - */ - public PasswordBlacklist(File file) { - mFile = new AtomicFile(file, "device-policy"); - } - - /** - * Atomically replace the blacklist. - * - * Pass {@code null} for an empty list. - */ - public boolean savePasswordBlacklist(@NonNull String name, @NonNull List blacklist) { - FileOutputStream fos = null; - try { - fos = mFile.startWrite(); - final DataOutputStream out = buildStreamForWriting(fos); - final Header header = new Header(Header.VERSION_1, name, blacklist.size()); - header.write(out); - final int blacklistSize = blacklist.size(); - for (int i = 0; i < blacklistSize; ++i) { - out.writeUTF(blacklist.get(i)); - } - out.flush(); - mFile.finishWrite(fos); - return true; - } catch (IOException e) { - mFile.failWrite(fos); - return false; - } - } - - /** @return the name of the blacklist or {@code null} if none set. */ - public String getName() { - try (DataInputStream in = openForReading()) { - return Header.read(in).mName; - } catch (IOException e) { - Slog.wtf(TAG, "Failed to read blacklist file", e); - } - return null; - } - - /** @return the number of blacklisted passwords. */ - public int getSize() { - final int blacklistSize; - try (DataInputStream in = openForReading()) { - return Header.read(in).mSize; - } catch (IOException e) { - Slog.wtf(TAG, "Failed to read blacklist file", e); - } - return 0; - } - - /** @return whether the password matches an blacklisted item. */ - public boolean isPasswordBlacklisted(@NonNull String password) { - final int blacklistSize; - try (DataInputStream in = openForReading()) { - final Header header = Header.read(in); - for (int i = 0; i < header.mSize; ++i) { - if (in.readUTF().equals(password)) { - return true; - } - } - } catch (IOException e) { - Slog.wtf(TAG, "Failed to read blacklist file", e); - // Fail safe and block all passwords. Setting a new blacklist should resolve this - // problem which can be identified by examining the log. - return true; - } - return false; - } - - /** Delete the blacklist completely from disk. */ - public void delete() { - mFile.delete(); - } - - /** Get the file the blacklist is stored in. */ - public File getFile() { - return mFile.getBaseFile(); - } - - private DataOutputStream buildStreamForWriting(FileOutputStream fos) { - return new DataOutputStream(new BufferedOutputStream(fos)); - } - - private DataInputStream openForReading() throws IOException { - return new DataInputStream(new BufferedInputStream(mFile.openRead())); - } - - /** - * Helper to read and write the header of the blacklist file. - */ - private static class Header { - static final int VERSION_1 = 1; - - final int mVersion; // File format version - final String mName; - final int mSize; - - Header(int version, String name, int size) { - mVersion = version; - mName = name; - mSize = size; - } - - void write(DataOutputStream out) throws IOException { - out.writeInt(mVersion); - out.writeUTF(mName); - out.writeInt(mSize); - } - - static Header read(DataInputStream in) throws IOException { - final int version = in.readInt(); - final String name = in.readUTF(); - final int size = in.readInt(); - return new Header(version, name, size); - } - } -} diff --git a/services/net/java/android/net/apf/ApfGenerator.java b/services/net/java/android/net/apf/ApfGenerator.java index d41fbce1f2066174b9574919431b1d71c42d6974..ca8f72760457d3528bc5ff7d9484b8f199c4e4aa 100644 --- a/services/net/java/android/net/apf/ApfGenerator.java +++ b/services/net/java/android/net/apf/ApfGenerator.java @@ -367,7 +367,7 @@ public class ApfGenerator { */ public boolean setApfVersion(int version) { // This version number syncs up with APF_VERSION in hardware/google/apf/apf_interpreter.h - return version == 2; + return version >= 2; } private void addInstruction(Instruction instruction) { diff --git a/services/net/java/android/net/util/InterfaceSet.java b/services/net/java/android/net/util/InterfaceSet.java new file mode 100644 index 0000000000000000000000000000000000000000..9f26fa17ef5c413dfa3c0d39a51eea35ec2656f6 --- /dev/null +++ b/services/net/java/android/net/util/InterfaceSet.java @@ -0,0 +1,52 @@ +/* + * 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.net.util; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Set; +import java.util.StringJoiner; + + +/** + * @hide + */ +public class InterfaceSet { + public final Set ifnames; + + public InterfaceSet(String... names) { + final Set nameSet = new HashSet<>(); + for (String name : names) { + if (name != null) nameSet.add(name); + } + ifnames = Collections.unmodifiableSet(nameSet); + } + + @Override + public String toString() { + final StringJoiner sj = new StringJoiner(",", "[", "]"); + for (String ifname : ifnames) sj.add(ifname); + return sj.toString(); + } + + @Override + public boolean equals(Object obj) { + return obj != null + && obj instanceof InterfaceSet + && ifnames.equals(((InterfaceSet)obj).ifnames); + } +} diff --git a/services/robotests/src/com/android/server/backup/PerformBackupTaskTest.java b/services/robotests/src/com/android/server/backup/PerformBackupTaskTest.java index f603a09baa37e27a3cf0c13c6ae03f8e14e167df..fa41220dc44c27496d257e079395295a1485d167 100644 --- a/services/robotests/src/com/android/server/backup/PerformBackupTaskTest.java +++ b/services/robotests/src/com/android/server/backup/PerformBackupTaskTest.java @@ -147,6 +147,15 @@ public class PerformBackupTaskTest { Looper backupLooper = startBackupThreadAndGetLooper(); mShadowBackupLooper = shadowOf(backupLooper); + + Handler mainHandler = new Handler(Looper.getMainLooper()); + BackupAgentTimeoutParameters agentTimeoutParameters = + new BackupAgentTimeoutParameters(mainHandler, application.getContentResolver()); + agentTimeoutParameters.start(); + + // We need to mock BMS timeout parameters before initializing the BackupHandler since + // the constructor of BackupHandler relies on the timeout parameters. + when(mBackupManagerService.getAgentTimeoutParameters()).thenReturn(agentTimeoutParameters); mBackupHandler = new BackupHandler(mBackupManagerService, backupLooper); mBackupManager = spy(FakeIBackupManager.class); @@ -157,7 +166,8 @@ public class PerformBackupTaskTest { mTransportManager, packageManager, mBackupHandler, - mWakeLock); + mWakeLock, + agentTimeoutParameters); when(mBackupManagerService.getBaseStateDir()).thenReturn(mBaseStateDir); when(mBackupManagerService.getDataDir()).thenReturn(dataDir); when(mBackupManagerService.getBackupManagerBinder()).thenReturn(mBackupManager); diff --git a/services/robotests/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java b/services/robotests/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java index 03792b1d40ba9a380c41e7e71be6296ae1136aad..92d6bbd54fab9e2a08c8ab24c0de8451255278cd 100644 --- a/services/robotests/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java +++ b/services/robotests/src/com/android/server/backup/restore/ActiveRestoreSessionTest.java @@ -41,12 +41,14 @@ import android.app.backup.IRestoreSession; import android.app.backup.RestoreSet; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; +import android.os.Handler; import android.os.Looper; import android.os.PowerManager; import android.os.RemoteException; import android.platform.test.annotations.Presubmit; import com.android.server.EventLogTags; +import com.android.server.backup.BackupAgentTimeoutParameters; import com.android.server.backup.BackupManagerService; import com.android.server.backup.TransportManager; import com.android.server.backup.internal.BackupHandler; @@ -115,6 +117,15 @@ public class ActiveRestoreSessionTest { Looper backupLooper = startBackupThreadAndGetLooper(); mShadowBackupLooper = shadowOf(backupLooper); + + Handler mainHandler = new Handler(Looper.getMainLooper()); + BackupAgentTimeoutParameters agentTimeoutParameters = + new BackupAgentTimeoutParameters(mainHandler, application.getContentResolver()); + agentTimeoutParameters.start(); + + // We need to mock BMS timeout parameters before initializing the BackupHandler since + // the constructor of BackupHandler relies on it. + when(mBackupManagerService.getAgentTimeoutParameters()).thenReturn(agentTimeoutParameters); BackupHandler backupHandler = new BackupHandler(mBackupManagerService, backupLooper); mWakeLock = createBackupWakeLock(application); @@ -125,7 +136,8 @@ public class ActiveRestoreSessionTest { mTransportManager, application.getPackageManager(), backupHandler, - mWakeLock); + mWakeLock, + agentTimeoutParameters); when(mBackupManagerService.getPendingRestores()).thenReturn(new ArrayDeque<>()); } diff --git a/services/robotests/src/com/android/server/backup/testing/BackupManagerServiceTestUtils.java b/services/robotests/src/com/android/server/backup/testing/BackupManagerServiceTestUtils.java index c210fdea6e8979fa9315cb5411828642ed5e113a..5a886e33622f9670fe247a7189a6d49d0338e0cd 100644 --- a/services/robotests/src/com/android/server/backup/testing/BackupManagerServiceTestUtils.java +++ b/services/robotests/src/com/android/server/backup/testing/BackupManagerServiceTestUtils.java @@ -28,6 +28,7 @@ import android.os.Looper; import android.os.PowerManager; import android.util.SparseArray; +import com.android.server.backup.BackupAgentTimeoutParameters; import com.android.server.backup.BackupManagerService; import com.android.server.backup.TransportManager; import com.android.server.backup.internal.BackupHandler; @@ -43,7 +44,8 @@ public class BackupManagerServiceTestUtils { TransportManager transportManager, PackageManager packageManager, BackupHandler backupHandler, - PowerManager.WakeLock wakeLock) { + PowerManager.WakeLock wakeLock, + BackupAgentTimeoutParameters agentTimeoutParameters) { when(backupManagerService.getContext()).thenReturn(context); when(backupManagerService.getTransportManager()).thenReturn(transportManager); when(backupManagerService.getPackageManager()).thenReturn(packageManager); @@ -53,6 +55,7 @@ public class BackupManagerServiceTestUtils { when(backupManagerService.getCurrentOperations()).thenReturn(new SparseArray<>()); when(backupManagerService.getActivityManager()).thenReturn(mock(IActivityManager.class)); when(backupManagerService.getWakelock()).thenReturn(wakeLock); + when(backupManagerService.getAgentTimeoutParameters()).thenReturn(agentTimeoutParameters); } public static PowerManager.WakeLock createBackupWakeLock(Application application) { diff --git a/services/tests/servicestests/AndroidTest.xml b/services/tests/servicestests/AndroidTest.xml index 082827c23b53e83448ce21abc2a762b8b6eab525..0ec16b523a1b7074769b68c5a02b677b71767ddc 100644 --- a/services/tests/servicestests/AndroidTest.xml +++ b/services/tests/servicestests/AndroidTest.xml @@ -14,7 +14,9 @@ limitations under the License. --> - +