diff options
713 files changed, 17062 insertions, 8428 deletions
diff --git a/Android.mk b/Android.mk index 6ec434cfbf54..683cdf80bc5d 100644 --- a/Android.mk +++ b/Android.mk @@ -194,6 +194,8 @@ LOCAL_SRC_FILES += \ core/java/android/hardware/usb/IUsbManager.aidl \ core/java/android/net/ICaptivePortal.aidl \ core/java/android/net/IConnectivityManager.aidl \ + core/java/android/net/IConnectivityMetricsLogger.aidl \ + core/java/android/net/IConnectivityMetricsLoggerSubscriber.aidl \ core/java/android/net/IEthernetManager.aidl \ core/java/android/net/IEthernetServiceListener.aidl \ core/java/android/net/INetworkManagementEventObserver.aidl \ @@ -215,6 +217,7 @@ LOCAL_SRC_FILES += \ core/java/android/os/IBatteryPropertiesRegistrar.aidl \ core/java/android/os/ICancellationSignal.aidl \ core/java/android/os/IDeviceIdleController.aidl \ + core/java/android/os/IHardwarePropertiesManager.aidl \ core/java/android/os/IMaintenanceActivityListener.aidl \ core/java/android/os/IMessenger.aidl \ core/java/android/os/INetworkActivityListener.aidl \ @@ -222,6 +225,8 @@ LOCAL_SRC_FILES += \ core/java/android/os/IPermissionController.aidl \ core/java/android/os/IProcessInfoService.aidl \ core/java/android/os/IPowerManager.aidl \ + core/java/android/os/IRecoverySystem.aidl \ + core/java/android/os/IRecoverySystemProgressListener.aidl \ core/java/android/os/IRemoteCallback.aidl \ core/java/android/os/ISchedulingPolicyService.aidl \ core/java/android/os/IUpdateLock.aidl \ @@ -455,7 +460,7 @@ LOCAL_INTERMEDIATE_SOURCES := \ $(framework_res_source_path)/com/android/internal/R.java LOCAL_NO_STANDARD_LIBRARIES := true -LOCAL_JAVA_LIBRARIES := core-oj core-libart conscrypt okhttp core-junit bouncycastle ext +LOCAL_JAVA_LIBRARIES := core-oj core-libart core-lambda-stubs conscrypt okhttp core-junit bouncycastle ext LOCAL_STATIC_JAVA_LIBRARIES := framework-protos LOCAL_MODULE := framework diff --git a/api/current.txt b/api/current.txt index 658478be435c..142178472f54 100644 --- a/api/current.txt +++ b/api/current.txt @@ -338,6 +338,7 @@ package android { field public static final int calendarViewStyle = 16843613; // 0x101035d field public static final int canControlMagnification = 16844040; // 0x1010508 field public static final int canPerformGestures = 16844046; // 0x101050e + field public static final int canRecord = 16844061; // 0x101051d field public static final int canRequestEnhancedWebAccessibility = 16843736; // 0x10103d8 field public static final int canRequestFilterKeyEvents = 16843737; // 0x10103d9 field public static final int canRequestTouchExplorationMode = 16843735; // 0x10103d7 @@ -423,6 +424,7 @@ package android { field public static final int controlX2 = 16843774; // 0x10103fe field public static final int controlY1 = 16843773; // 0x10103fd field public static final int controlY2 = 16843775; // 0x10103ff + field public static final int countDown = 16844060; // 0x101051c field public static final int country = 16843962; // 0x10104ba field public static final int cropToPadding = 16843043; // 0x1010123 field public static final int cursorVisible = 16843090; // 0x1010152 @@ -1358,6 +1360,7 @@ package android { field public static final int trimPathEnd = 16843785; // 0x1010409 field public static final int trimPathOffset = 16843786; // 0x101040a field public static final int trimPathStart = 16843784; // 0x1010408 + field public static final int tunerCount = 16844062; // 0x101051e field public static final int type = 16843169; // 0x10101a1 field public static final int typeface = 16842902; // 0x1010096 field public static final int uiOptions = 16843672; // 0x1010398 @@ -4276,7 +4279,6 @@ package android.app { public class DownloadManager { method public long addCompletedDownload(java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, long, boolean); - method public long addCompletedDownload(java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, long, boolean, android.net.Uri, android.net.Uri); method public long enqueue(android.app.DownloadManager.Request); method public static java.lang.Long getMaxBytesOverMobile(android.content.Context); method public java.lang.String getMimeTypeForDownloadedFile(long); @@ -5829,9 +5831,7 @@ package android.app.admin { method public void clearPackagePersistentPreferredActivities(android.content.ComponentName, java.lang.String); method public void clearProfileOwner(android.content.ComponentName); method public void clearUserRestriction(android.content.ComponentName, java.lang.String); - method public deprecated android.os.UserHandle createAndInitializeUser(android.content.ComponentName, java.lang.String, java.lang.String, android.content.ComponentName, android.os.Bundle); method public android.os.UserHandle createAndManageUser(android.content.ComponentName, java.lang.String, android.content.ComponentName, android.os.PersistableBundle, int); - method public deprecated android.os.UserHandle createUser(android.content.ComponentName, java.lang.String); method public void enableSystemApp(android.content.ComponentName, java.lang.String); method public int enableSystemApp(android.content.ComponentName, android.content.Intent); method public java.lang.String[] getAccountTypesWithManagementDisabled(); @@ -5886,6 +5886,7 @@ package android.app.admin { method public boolean hasGrantedPolicy(android.content.ComponentName, int); method public boolean installCaCert(android.content.ComponentName, byte[]); 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 isActivePasswordSufficient(); method public boolean isAdminActive(android.content.ComponentName); method public boolean isApplicationHidden(android.content.ComponentName, java.lang.String); @@ -8470,6 +8471,7 @@ package android.content { field public static final java.lang.String ACTION_AIRPLANE_MODE_CHANGED = "android.intent.action.AIRPLANE_MODE"; field public static final java.lang.String ACTION_ALL_APPS = "android.intent.action.ALL_APPS"; field public static final java.lang.String ACTION_ANSWER = "android.intent.action.ANSWER"; + field public static final java.lang.String ACTION_APPLICATION_PREFERENCES = "android.intent.action.APPLICATION_PREFERENCES"; field public static final java.lang.String ACTION_APPLICATION_RESTRICTIONS_CHANGED = "android.intent.action.APPLICATION_RESTRICTIONS_CHANGED"; field public static final java.lang.String ACTION_APP_ERROR = "android.intent.action.APP_ERROR"; field public static final java.lang.String ACTION_ASSIST = "android.intent.action.ASSIST"; @@ -9785,6 +9787,8 @@ package android.content.pm { field public static final java.lang.String FEATURE_VERIFIED_BOOT = "android.software.verified_boot"; field public static final java.lang.String FEATURE_VR_MODE = "android.software.vr.mode"; field public static final java.lang.String FEATURE_VR_MODE_HIGH_PERFORMANCE = "android.hardware.vr.high_performance"; + field public static final java.lang.String FEATURE_VULKAN_HARDWARE_LEVEL = "android.hardware.vulkan.level"; + field public static final java.lang.String FEATURE_VULKAN_HARDWARE_VERSION = "android.hardware.vulkan.version"; field public static final java.lang.String FEATURE_WATCH = "android.hardware.type.watch"; field public static final java.lang.String FEATURE_WEBVIEW = "android.software.webview"; field public static final java.lang.String FEATURE_WIFI = "android.hardware.wifi"; @@ -11946,6 +11950,8 @@ package android.graphics { ctor public Outline(android.graphics.Outline); method public boolean canClip(); method public float getAlpha(); + method public float getRadius(); + method public boolean getRect(android.graphics.Rect); method public boolean isEmpty(); method public void offset(int, int); method public void set(android.graphics.Outline); @@ -12973,12 +12979,10 @@ package android.graphics.drawable { ctor public deprecated NinePatchDrawable(android.graphics.NinePatch); ctor public NinePatchDrawable(android.content.res.Resources, android.graphics.NinePatch); method public void draw(android.graphics.Canvas); - method public android.graphics.NinePatch getNinePatch(); method public int getOpacity(); method public android.graphics.Paint getPaint(); method public void setAlpha(int); method public void setColorFilter(android.graphics.ColorFilter); - method public void setNinePatch(android.graphics.NinePatch); method public void setTargetDensity(android.graphics.Canvas); method public void setTargetDensity(android.util.DisplayMetrics); method public void setTargetDensity(int); @@ -13201,8 +13205,8 @@ package android.hardware { method public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback); method public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback); method public final void unlock(); - field public static final java.lang.String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE"; - field public static final java.lang.String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO"; + field public static final deprecated java.lang.String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE"; + field public static final deprecated java.lang.String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO"; field public static final int CAMERA_ERROR_EVICTED = 2; // 0x2 field public static final int CAMERA_ERROR_SERVER_DIED = 100; // 0x64 field public static final int CAMERA_ERROR_UNKNOWN = 1; // 0x1 @@ -19692,6 +19696,7 @@ package android.media { field public static final int TYPE_BUILTIN_EARPIECE = 1; // 0x1 field public static final int TYPE_BUILTIN_MIC = 15; // 0xf field public static final int TYPE_BUILTIN_SPEAKER = 2; // 0x2 + field public static final int TYPE_BUS = 21; // 0x15 field public static final int TYPE_DOCK = 13; // 0xd field public static final int TYPE_FM = 14; // 0xe field public static final int TYPE_FM_TUNER = 16; // 0x10 @@ -19709,12 +19714,14 @@ package android.media { field public static final int TYPE_WIRED_HEADSET = 3; // 0x3 } - public class AudioFormat { + public class AudioFormat implements android.os.Parcelable { + method public int describeContents(); method public int getChannelCount(); method public int getChannelIndexMask(); method public int getChannelMask(); method public int getEncoding(); method public int getSampleRate(); + method public void writeToParcel(android.os.Parcel, int); field public static final deprecated int CHANNEL_CONFIGURATION_DEFAULT = 1; // 0x1 field public static final deprecated int CHANNEL_CONFIGURATION_INVALID = 0; // 0x0 field public static final deprecated int CHANNEL_CONFIGURATION_MONO = 2; // 0x2 @@ -19756,6 +19763,7 @@ package android.media { field public static final int CHANNEL_OUT_SIDE_RIGHT = 4096; // 0x1000 field public static final int CHANNEL_OUT_STEREO = 12; // 0xc field public static final int CHANNEL_OUT_SURROUND = 1052; // 0x41c + field public static final android.os.Parcelable.Creator<android.media.AudioFormat> CREATOR; field public static final int ENCODING_AC3 = 5; // 0x5 field public static final int ENCODING_DEFAULT = 1; // 0x1 field public static final int ENCODING_DTS = 7; // 0x7 @@ -21187,6 +21195,7 @@ package android.media { method public void setDataSource(android.content.Context, android.net.Uri) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException; method public void setDataSource(android.content.Context, android.net.Uri, java.util.Map<java.lang.String, java.lang.String>) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException; method public void setDataSource(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException; + method public void setDataSource(android.content.res.AssetFileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; method public void setDataSource(java.io.FileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; method public void setDataSource(java.io.FileDescriptor, long, long) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; method public void setDataSource(android.media.MediaDataSource) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException; @@ -22553,6 +22562,10 @@ package android.media.session { method public void playFromMediaId(java.lang.String, android.os.Bundle); method public void playFromSearch(java.lang.String, android.os.Bundle); method public void playFromUri(android.net.Uri, android.os.Bundle); + method public void prepare(); + method public void prepareFromMediaId(java.lang.String, android.os.Bundle); + method public void prepareFromSearch(java.lang.String, android.os.Bundle); + method public void prepareFromUri(android.net.Uri, android.os.Bundle); method public void rewind(); method public void seekTo(long); method public void sendCustomAction(android.media.session.PlaybackState.CustomAction, android.os.Bundle); @@ -22586,7 +22599,6 @@ package android.media.session { method public void setRatingType(int); method public void setSessionActivity(android.app.PendingIntent); field public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1 - field public static final int FLAG_HANDLES_PREPARE_ONLY = 4; // 0x4 field public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; // 0x2 } @@ -22601,6 +22613,10 @@ package android.media.session { method public void onPlayFromMediaId(java.lang.String, android.os.Bundle); method public void onPlayFromSearch(java.lang.String, android.os.Bundle); method public void onPlayFromUri(android.net.Uri, android.os.Bundle); + method public void onPrepare(); + method public void onPrepareFromMediaId(java.lang.String, android.os.Bundle); + method public void onPrepareFromSearch(java.lang.String, android.os.Bundle); + method public void onPrepareFromUri(android.net.Uri, android.os.Bundle); method public void onRewind(); method public void onSeekTo(long); method public void onSetRating(android.media.Rating); @@ -22657,6 +22673,10 @@ package android.media.session { field public static final long ACTION_PLAY_FROM_SEARCH = 2048L; // 0x800L field public static final long ACTION_PLAY_FROM_URI = 8192L; // 0x2000L field public static final long ACTION_PLAY_PAUSE = 512L; // 0x200L + field public static final long ACTION_PREPARE = 16384L; // 0x4000L + field public static final long ACTION_PREPARE_FROM_MEDIA_ID = 32768L; // 0x8000L + field public static final long ACTION_PREPARE_FROM_SEARCH = 65536L; // 0x10000L + field public static final long ACTION_PREPARE_FROM_URI = 131072L; // 0x20000L field public static final long ACTION_REWIND = 8L; // 0x8L field public static final long ACTION_SEEK_TO = 256L; // 0x100L field public static final long ACTION_SET_RATING = 128L; // 0x80L @@ -22665,7 +22685,6 @@ package android.media.session { field public static final long ACTION_SKIP_TO_QUEUE_ITEM = 4096L; // 0x1000L field public static final long ACTION_STOP = 1L; // 0x1L field public static final android.os.Parcelable.Creator<android.media.session.PlaybackState> CREATOR; - field public static final java.lang.String EXTRA_PREPARE_ONLY = "android.media.session.extra.PREPARE_ONLY"; field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL field public static final int STATE_BUFFERING = 6; // 0x6 field public static final int STATE_CONNECTING = 8; // 0x8 @@ -22741,6 +22760,10 @@ package android.media.tv { method public static final android.net.Uri buildProgramsUriForChannel(long, long, long); method public static final android.net.Uri buildProgramsUriForChannel(android.net.Uri, long, long); method public static final android.net.Uri buildRecordedProgramUri(long); + method public static final boolean isChannelUri(android.net.Uri); + method public static final boolean isChannelUriForPassthroughInput(android.net.Uri); + method public static final boolean isChannelUriForTunerInput(android.net.Uri); + method public static final boolean isProgramUri(android.net.Uri); field public static final java.lang.String AUTHORITY = "android.media.tv"; } @@ -22832,7 +22855,8 @@ package android.media.tv { field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id"; field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating"; field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis"; - field public static final java.lang.String COLUMN_EPISODE_NUMBER = "episode_number"; + field public static final java.lang.String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number"; + field public static final deprecated java.lang.String COLUMN_EPISODE_NUMBER = "episode_number"; field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title"; field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data"; field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1"; @@ -22842,7 +22866,9 @@ package android.media.tv { field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description"; field public static final java.lang.String COLUMN_POSTER_ART_URI = "poster_art_uri"; field public static final java.lang.String COLUMN_SEARCHABLE = "searchable"; - field public static final java.lang.String COLUMN_SEASON_NUMBER = "season_number"; + field public static final java.lang.String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number"; + field public static final deprecated java.lang.String COLUMN_SEASON_NUMBER = "season_number"; + field public static final java.lang.String COLUMN_SEASON_TITLE = "season_title"; field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description"; field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis"; field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri"; @@ -22885,7 +22911,7 @@ package android.media.tv { field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id"; field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating"; field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis"; - field public static final java.lang.String COLUMN_EPISODE_NUMBER = "episode_number"; + field public static final java.lang.String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number"; field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title"; field public static final java.lang.String COLUMN_INPUT_ID = "input_id"; field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data"; @@ -22900,7 +22926,8 @@ package android.media.tv { field public static final java.lang.String COLUMN_RECORDING_DURATION_MILLIS = "recording_duration_millis"; field public static final java.lang.String COLUMN_RECORDING_EXPIRE_TIME_UTC_MILLIS = "recording_expire_time_utc_millis"; field public static final java.lang.String COLUMN_SEARCHABLE = "searchable"; - field public static final java.lang.String COLUMN_SEASON_NUMBER = "season_number"; + field public static final java.lang.String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number"; + field public static final java.lang.String COLUMN_SEASON_TITLE = "season_title"; field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description"; field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis"; field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri"; @@ -23490,6 +23517,17 @@ package android.net { method public abstract void onNetworkActive(); } + public class ConnectivityMetricsEvent implements android.os.Parcelable { + ctor public ConnectivityMetricsEvent(long, int, int, android.os.Parcelable); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.net.ConnectivityMetricsEvent> CREATOR; + field public final int componentTag; + field public final android.os.Parcelable data; + field public final int eventTag; + field public final long timestamp; + } + public class Credentials { ctor public Credentials(int, int, int); method public int getGid(); @@ -29508,6 +29546,7 @@ package android.preference { method protected int getPersistedInt(int); method protected long getPersistedLong(long); method protected java.lang.String getPersistedString(java.lang.String); + method public java.util.Set<java.lang.String> getPersistedStringSet(java.util.Set<java.lang.String>); method public android.preference.PreferenceManager getPreferenceManager(); method public android.content.SharedPreferences getSharedPreferences(); method public boolean getShouldDisableView(); @@ -29542,6 +29581,7 @@ package android.preference { method protected boolean persistInt(int); method protected boolean persistLong(long); method protected boolean persistString(java.lang.String); + method public boolean persistStringSet(java.util.Set<java.lang.String>); method public void restoreHierarchyState(android.os.Bundle); method public void saveHierarchyState(android.os.Bundle); method public void setDefaultValue(java.lang.Object); @@ -34100,6 +34140,7 @@ package android.security.keystore { method public java.lang.String[] getSignaturePaddings(); method public int getUserAuthenticationValidityDurationSeconds(); method public boolean isDigestsSpecified(); + method public boolean isInvalidatedByBiometricEnrollment(); method public boolean isRandomizedEncryptionRequired(); method public boolean isUserAuthenticationRequired(); method public boolean isUserAuthenticationValidWhileOnBody(); @@ -34117,6 +34158,7 @@ package android.security.keystore { method public android.security.keystore.KeyGenParameterSpec.Builder setCertificateSubject(javax.security.auth.x500.X500Principal); method public android.security.keystore.KeyGenParameterSpec.Builder setDigests(java.lang.String...); method public android.security.keystore.KeyGenParameterSpec.Builder setEncryptionPaddings(java.lang.String...); + method public android.security.keystore.KeyGenParameterSpec.Builder setInvalidatedByBiometricEnrollment(boolean); method public android.security.keystore.KeyGenParameterSpec.Builder setKeySize(int); method public android.security.keystore.KeyGenParameterSpec.Builder setKeyValidityEnd(java.util.Date); method public android.security.keystore.KeyGenParameterSpec.Builder setKeyValidityForConsumptionEnd(java.util.Date); @@ -34143,6 +34185,7 @@ package android.security.keystore { method public java.lang.String[] getSignaturePaddings(); method public int getUserAuthenticationValidityDurationSeconds(); method public boolean isInsideSecureHardware(); + method public boolean isInvalidatedByBiometricEnrollment(); method public boolean isUserAuthenticationRequired(); method public boolean isUserAuthenticationRequirementEnforcedBySecureHardware(); method public boolean isUserAuthenticationValidWhileOnBody(); @@ -34206,6 +34249,7 @@ package android.security.keystore { method public java.lang.String[] getSignaturePaddings(); method public int getUserAuthenticationValidityDurationSeconds(); method public boolean isDigestsSpecified(); + method public boolean isInvalidatedByBiometricEnrollment(); method public boolean isRandomizedEncryptionRequired(); method public boolean isUserAuthenticationRequired(); method public boolean isUserAuthenticationValidWhileOnBody(); @@ -34217,6 +34261,7 @@ package android.security.keystore { method public android.security.keystore.KeyProtection.Builder setBlockModes(java.lang.String...); method public android.security.keystore.KeyProtection.Builder setDigests(java.lang.String...); method public android.security.keystore.KeyProtection.Builder setEncryptionPaddings(java.lang.String...); + method public android.security.keystore.KeyProtection.Builder setInvalidatedByBiometricEnrollment(boolean); method public android.security.keystore.KeyProtection.Builder setKeyValidityEnd(java.util.Date); method public android.security.keystore.KeyProtection.Builder setKeyValidityForConsumptionEnd(java.util.Date); method public android.security.keystore.KeyProtection.Builder setKeyValidityForOriginationEnd(java.util.Date); @@ -37094,12 +37139,18 @@ package android.telephony { method public int getVoiceNetworkType(int); method public android.net.Uri getVoicemailRingtoneUri(android.telecom.PhoneAccountHandle); method public boolean hasCarrierPrivileges(); + method public boolean hasCarrierPrivileges(int); method public boolean hasIccCard(); method public boolean iccCloseLogicalChannel(int); + method public boolean iccCloseLogicalChannel(int, int); method public byte[] iccExchangeSimIO(int, int, int, int, int, java.lang.String); + method public byte[] iccExchangeSimIO(int, int, int, int, int, int, java.lang.String); method public android.telephony.IccOpenLogicalChannelResponse iccOpenLogicalChannel(java.lang.String); + method public android.telephony.IccOpenLogicalChannelResponse iccOpenLogicalChannel(int, java.lang.String); method public java.lang.String iccTransmitApduBasicChannel(int, int, int, int, int, java.lang.String); + method public java.lang.String iccTransmitApduBasicChannel(int, int, int, int, int, int, java.lang.String); method public java.lang.String iccTransmitApduLogicalChannel(int, int, int, int, int, int, java.lang.String); + method public java.lang.String iccTransmitApduLogicalChannel(int, int, int, int, int, int, int, java.lang.String); method public boolean isHearingAidCompatibilitySupported(); method public boolean isNetworkRoaming(); method public boolean isNetworkRoaming(int); @@ -37110,10 +37161,13 @@ package android.telephony { method public boolean isWorldPhone(); method public void listen(android.telephony.PhoneStateListener, int); method public java.lang.String sendEnvelopeWithStatus(java.lang.String); + method public java.lang.String sendEnvelopeWithStatus(int, java.lang.String); method public boolean setLine1NumberForDisplay(java.lang.String, java.lang.String); method public boolean setLine1NumberForDisplay(int, java.lang.String, java.lang.String); method public boolean setOperatorBrandOverride(java.lang.String); + method public boolean setOperatorBrandOverride(int, java.lang.String); method public boolean setPreferredNetworkTypeToGlobal(); + method public boolean setPreferredNetworkTypeToGlobal(int); method public boolean setVoiceMailNumber(java.lang.String, java.lang.String); method public boolean setVoiceMailNumber(int, java.lang.String, java.lang.String); field public static final java.lang.String ACTION_CONFIGURE_VOICEMAIL = "android.telephony.action.CONFIGURE_VOICEMAIL"; @@ -46059,7 +46113,9 @@ package android.widget { method public long getBase(); method public java.lang.String getFormat(); method public android.widget.Chronometer.OnChronometerTickListener getOnChronometerTickListener(); + method public boolean isCountDown(); method public void setBase(long); + method public void setCountDown(boolean); method public void setFormat(java.lang.String); method public void setOnChronometerTickListener(android.widget.Chronometer.OnChronometerTickListener); method public void start(); diff --git a/api/removed.txt b/api/removed.txt index 0bf659438340..50a24f6dfd93 100644 --- a/api/removed.txt +++ b/api/removed.txt @@ -9,6 +9,8 @@ package android.app { package android.app.admin { public class DevicePolicyManager { + method public deprecated android.os.UserHandle createAndInitializeUser(android.content.ComponentName, java.lang.String, java.lang.String, android.content.ComponentName, android.os.Bundle); + method public deprecated android.os.UserHandle createUser(android.content.ComponentName, java.lang.String); method public deprecated java.lang.String getDeviceInitializerApp(); method public deprecated android.content.ComponentName getDeviceInitializerComponent(); } @@ -35,7 +37,7 @@ package android.database { package android.media { - public class AudioFormat { + public class AudioFormat implements android.os.Parcelable { ctor public AudioFormat(); } diff --git a/api/system-current.txt b/api/system-current.txt index 6646c28b43be..71b0aeb8250b 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -433,6 +433,7 @@ package android { field public static final int calendarViewStyle = 16843613; // 0x101035d field public static final int canControlMagnification = 16844040; // 0x1010508 field public static final int canPerformGestures = 16844046; // 0x101050e + field public static final int canRecord = 16844061; // 0x101051d field public static final int canRequestEnhancedWebAccessibility = 16843736; // 0x10103d8 field public static final int canRequestFilterKeyEvents = 16843737; // 0x10103d9 field public static final int canRequestTouchExplorationMode = 16843735; // 0x10103d7 @@ -518,6 +519,7 @@ package android { field public static final int controlX2 = 16843774; // 0x10103fe field public static final int controlY1 = 16843773; // 0x10103fd field public static final int controlY2 = 16843775; // 0x10103ff + field public static final int countDown = 16844060; // 0x101051c field public static final int country = 16843962; // 0x10104ba field public static final int cropToPadding = 16843043; // 0x1010123 field public static final int cursorVisible = 16843090; // 0x1010152 @@ -1457,6 +1459,7 @@ package android { field public static final int trimPathEnd = 16843785; // 0x1010409 field public static final int trimPathOffset = 16843786; // 0x101040a field public static final int trimPathStart = 16843784; // 0x1010408 + field public static final int tunerCount = 16844062; // 0x101051e field public static final int type = 16843169; // 0x10101a1 field public static final int typeface = 16842902; // 0x1010096 field public static final int uiOptions = 16843672; // 0x1010398 @@ -4408,7 +4411,6 @@ package android.app { public class DownloadManager { method public long addCompletedDownload(java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, long, boolean); - method public long addCompletedDownload(java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, long, boolean, android.net.Uri, android.net.Uri); method public long enqueue(android.app.DownloadManager.Request); method public static java.lang.Long getMaxBytesOverMobile(android.content.Context); method public java.lang.String getMimeTypeForDownloadedFile(long); @@ -5966,9 +5968,7 @@ package android.app.admin { method public void clearPackagePersistentPreferredActivities(android.content.ComponentName, java.lang.String); method public void clearProfileOwner(android.content.ComponentName); method public void clearUserRestriction(android.content.ComponentName, java.lang.String); - method public deprecated android.os.UserHandle createAndInitializeUser(android.content.ComponentName, java.lang.String, java.lang.String, android.content.ComponentName, android.os.Bundle); method public android.os.UserHandle createAndManageUser(android.content.ComponentName, java.lang.String, android.content.ComponentName, android.os.PersistableBundle, int); - method public deprecated android.os.UserHandle createUser(android.content.ComponentName, java.lang.String); method public void enableSystemApp(android.content.ComponentName, java.lang.String); method public int enableSystemApp(android.content.ComponentName, android.content.Intent); method public java.lang.String[] getAccountTypesWithManagementDisabled(); @@ -6025,12 +6025,14 @@ package android.app.admin { method public int getStorageEncryptionStatus(); method public android.app.admin.SystemUpdatePolicy getSystemUpdatePolicy(); method public java.util.List<android.os.PersistableBundle> getTrustAgentConfiguration(android.content.ComponentName, android.content.ComponentName); + method public int getUserProvisioningState(); method public android.os.Bundle getUserRestrictions(android.content.ComponentName); method public java.lang.String getWifiMacAddress(); method public boolean hasCaCertInstalled(android.content.ComponentName, byte[]); method public boolean hasGrantedPolicy(android.content.ComponentName, int); method public boolean installCaCert(android.content.ComponentName, byte[]); 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 isActivePasswordSufficient(); method public boolean isAdminActive(android.content.ComponentName); method public boolean isApplicationHidden(android.content.ComponentName, java.lang.String); @@ -6111,6 +6113,7 @@ package android.app.admin { field public static final java.lang.String ACTION_ADD_DEVICE_ADMIN = "android.app.action.ADD_DEVICE_ADMIN"; field public static final java.lang.String ACTION_DEVICE_OWNER_CHANGED = "android.app.action.DEVICE_OWNER_CHANGED"; field public static final java.lang.String ACTION_MANAGED_PROFILE_PROVISIONED = "android.app.action.MANAGED_PROFILE_PROVISIONED"; + field public static final java.lang.String ACTION_PROVISION_FINALIZATION = "android.app.action.PROVISION_FINALIZATION"; field public static final java.lang.String ACTION_PROVISION_MANAGED_DEVICE = "android.app.action.PROVISION_MANAGED_DEVICE"; field public static final java.lang.String ACTION_PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE = "android.app.action.PROVISION_MANAGED_DEVICE_FROM_TRUSTED_SOURCE"; field public static final java.lang.String ACTION_PROVISION_MANAGED_PROFILE = "android.app.action.PROVISION_MANAGED_PROFILE"; @@ -6180,6 +6183,11 @@ package android.app.admin { field public static final int RESET_PASSWORD_DO_NOT_ASK_CREDENTIALS_ON_BOOT = 2; // 0x2 field public static final int RESET_PASSWORD_REQUIRE_ENTRY = 1; // 0x1 field public static final int SKIP_SETUP_WIZARD = 1; // 0x1 + field public static final int STATE_USER_PROFILE_COMPLETE = 4; // 0x4 + field public static final int STATE_USER_SETUP_COMPLETE = 2; // 0x2 + field public static final int STATE_USER_SETUP_FINALIZED = 3; // 0x3 + field public static final int STATE_USER_SETUP_INCOMPLETE = 1; // 0x1 + field public static final int STATE_USER_UNMANAGED = 0; // 0x0 field public static final int WIPE_EXTERNAL_STORAGE = 1; // 0x1 field public static final int WIPE_RESET_PROTECTION_DATA = 2; // 0x2 } @@ -8775,6 +8783,7 @@ package android.content { field public static final java.lang.String ACTION_AIRPLANE_MODE_CHANGED = "android.intent.action.AIRPLANE_MODE"; field public static final java.lang.String ACTION_ALL_APPS = "android.intent.action.ALL_APPS"; field public static final java.lang.String ACTION_ANSWER = "android.intent.action.ANSWER"; + field public static final java.lang.String ACTION_APPLICATION_PREFERENCES = "android.intent.action.APPLICATION_PREFERENCES"; field public static final java.lang.String ACTION_APPLICATION_RESTRICTIONS_CHANGED = "android.intent.action.APPLICATION_RESTRICTIONS_CHANGED"; field public static final java.lang.String ACTION_APP_ERROR = "android.intent.action.APP_ERROR"; field public static final java.lang.String ACTION_ASSIST = "android.intent.action.ASSIST"; @@ -10143,6 +10152,8 @@ package android.content.pm { field public static final java.lang.String FEATURE_VERIFIED_BOOT = "android.software.verified_boot"; field public static final java.lang.String FEATURE_VR_MODE = "android.software.vr.mode"; field public static final java.lang.String FEATURE_VR_MODE_HIGH_PERFORMANCE = "android.hardware.vr.high_performance"; + field public static final java.lang.String FEATURE_VULKAN_HARDWARE_LEVEL = "android.hardware.vulkan.level"; + field public static final java.lang.String FEATURE_VULKAN_HARDWARE_VERSION = "android.hardware.vulkan.version"; field public static final java.lang.String FEATURE_WATCH = "android.hardware.type.watch"; field public static final java.lang.String FEATURE_WEBVIEW = "android.software.webview"; field public static final java.lang.String FEATURE_WIFI = "android.hardware.wifi"; @@ -10282,6 +10293,7 @@ package android.content.pm { field public static final android.os.Parcelable.Creator<android.content.pm.PermissionInfo> CREATOR; field public static final int FLAG_COSTS_MONEY = 1; // 0x1 field public static final int FLAG_INSTALLED = 1073741824; // 0x40000000 + field public static final int FLAG_REMOVED = 2; // 0x2 field public static final int PROTECTION_DANGEROUS = 1; // 0x1 field public static final int PROTECTION_FLAG_APPOP = 64; // 0x40 field public static final int PROTECTION_FLAG_DEVELOPMENT = 32; // 0x20 @@ -12348,6 +12360,8 @@ package android.graphics { ctor public Outline(android.graphics.Outline); method public boolean canClip(); method public float getAlpha(); + method public float getRadius(); + method public boolean getRect(android.graphics.Rect); method public boolean isEmpty(); method public void offset(int, int); method public void set(android.graphics.Outline); @@ -13375,12 +13389,10 @@ package android.graphics.drawable { ctor public deprecated NinePatchDrawable(android.graphics.NinePatch); ctor public NinePatchDrawable(android.content.res.Resources, android.graphics.NinePatch); method public void draw(android.graphics.Canvas); - method public android.graphics.NinePatch getNinePatch(); method public int getOpacity(); method public android.graphics.Paint getPaint(); method public void setAlpha(int); method public void setColorFilter(android.graphics.ColorFilter); - method public void setNinePatch(android.graphics.NinePatch); method public void setTargetDensity(android.graphics.Canvas); method public void setTargetDensity(android.util.DisplayMetrics); method public void setTargetDensity(int); @@ -13603,8 +13615,8 @@ package android.hardware { method public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback); method public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback); method public final void unlock(); - field public static final java.lang.String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE"; - field public static final java.lang.String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO"; + field public static final deprecated java.lang.String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE"; + field public static final deprecated java.lang.String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO"; field public static final int CAMERA_ERROR_EVICTED = 2; // 0x2 field public static final int CAMERA_ERROR_SERVER_DIED = 100; // 0x64 field public static final int CAMERA_ERROR_UNKNOWN = 1; // 0x1 @@ -21168,6 +21180,7 @@ package android.media { field public static final int TYPE_BUILTIN_EARPIECE = 1; // 0x1 field public static final int TYPE_BUILTIN_MIC = 15; // 0xf field public static final int TYPE_BUILTIN_SPEAKER = 2; // 0x2 + field public static final int TYPE_BUS = 21; // 0x15 field public static final int TYPE_DOCK = 13; // 0xd field public static final int TYPE_FM = 14; // 0xe field public static final int TYPE_FM_TUNER = 16; // 0x10 @@ -21197,12 +21210,14 @@ package android.media { field public static final android.os.Parcelable.Creator<android.media.AudioFocusInfo> CREATOR; } - public class AudioFormat { + public class AudioFormat implements android.os.Parcelable { + method public int describeContents(); method public int getChannelCount(); method public int getChannelIndexMask(); method public int getChannelMask(); method public int getEncoding(); method public int getSampleRate(); + method public void writeToParcel(android.os.Parcel, int); field public static final deprecated int CHANNEL_CONFIGURATION_DEFAULT = 1; // 0x1 field public static final deprecated int CHANNEL_CONFIGURATION_INVALID = 0; // 0x0 field public static final deprecated int CHANNEL_CONFIGURATION_MONO = 2; // 0x2 @@ -21244,6 +21259,7 @@ package android.media { field public static final int CHANNEL_OUT_SIDE_RIGHT = 4096; // 0x1000 field public static final int CHANNEL_OUT_STEREO = 12; // 0xc field public static final int CHANNEL_OUT_SURROUND = 1052; // 0x41c + field public static final android.os.Parcelable.Creator<android.media.AudioFormat> CREATOR; field public static final int ENCODING_AC3 = 5; // 0x5 field public static final int ENCODING_DEFAULT = 1; // 0x1 field public static final int ENCODING_DTS = 7; // 0x7 @@ -22687,6 +22703,7 @@ package android.media { method public void setDataSource(android.content.Context, android.net.Uri) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException; method public void setDataSource(android.content.Context, android.net.Uri, java.util.Map<java.lang.String, java.lang.String>) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException; method public void setDataSource(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException; + method public void setDataSource(android.content.res.AssetFileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; method public void setDataSource(java.io.FileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; method public void setDataSource(java.io.FileDescriptor, long, long) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; method public void setDataSource(android.media.MediaDataSource) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException; @@ -24126,6 +24143,10 @@ package android.media.session { method public void playFromMediaId(java.lang.String, android.os.Bundle); method public void playFromSearch(java.lang.String, android.os.Bundle); method public void playFromUri(android.net.Uri, android.os.Bundle); + method public void prepare(); + method public void prepareFromMediaId(java.lang.String, android.os.Bundle); + method public void prepareFromSearch(java.lang.String, android.os.Bundle); + method public void prepareFromUri(android.net.Uri, android.os.Bundle); method public void rewind(); method public void seekTo(long); method public void sendCustomAction(android.media.session.PlaybackState.CustomAction, android.os.Bundle); @@ -24159,7 +24180,6 @@ package android.media.session { method public void setRatingType(int); method public void setSessionActivity(android.app.PendingIntent); field public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1 - field public static final int FLAG_HANDLES_PREPARE_ONLY = 4; // 0x4 field public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; // 0x2 } @@ -24174,6 +24194,10 @@ package android.media.session { method public void onPlayFromMediaId(java.lang.String, android.os.Bundle); method public void onPlayFromSearch(java.lang.String, android.os.Bundle); method public void onPlayFromUri(android.net.Uri, android.os.Bundle); + method public void onPrepare(); + method public void onPrepareFromMediaId(java.lang.String, android.os.Bundle); + method public void onPrepareFromSearch(java.lang.String, android.os.Bundle); + method public void onPrepareFromUri(android.net.Uri, android.os.Bundle); method public void onRewind(); method public void onSeekTo(long); method public void onSetRating(android.media.Rating); @@ -24230,6 +24254,10 @@ package android.media.session { field public static final long ACTION_PLAY_FROM_SEARCH = 2048L; // 0x800L field public static final long ACTION_PLAY_FROM_URI = 8192L; // 0x2000L field public static final long ACTION_PLAY_PAUSE = 512L; // 0x200L + field public static final long ACTION_PREPARE = 16384L; // 0x4000L + field public static final long ACTION_PREPARE_FROM_MEDIA_ID = 32768L; // 0x8000L + field public static final long ACTION_PREPARE_FROM_SEARCH = 65536L; // 0x10000L + field public static final long ACTION_PREPARE_FROM_URI = 131072L; // 0x20000L field public static final long ACTION_REWIND = 8L; // 0x8L field public static final long ACTION_SEEK_TO = 256L; // 0x100L field public static final long ACTION_SET_RATING = 128L; // 0x80L @@ -24238,7 +24266,6 @@ package android.media.session { field public static final long ACTION_SKIP_TO_QUEUE_ITEM = 4096L; // 0x1000L field public static final long ACTION_STOP = 1L; // 0x1L field public static final android.os.Parcelable.Creator<android.media.session.PlaybackState> CREATOR; - field public static final java.lang.String EXTRA_PREPARE_ONLY = "android.media.session.extra.PREPARE_ONLY"; field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL field public static final int STATE_BUFFERING = 6; // 0x6 field public static final int STATE_CONNECTING = 8; // 0x8 @@ -24363,7 +24390,10 @@ package android.media.tv { method public static final android.net.Uri buildProgramsUriForChannel(long, long, long); method public static final android.net.Uri buildProgramsUriForChannel(android.net.Uri, long, long); method public static final android.net.Uri buildRecordedProgramUri(long); + method public static final boolean isChannelUri(android.net.Uri); method public static final boolean isChannelUriForPassthroughInput(android.net.Uri); + method public static final boolean isChannelUriForTunerInput(android.net.Uri); + method public static final boolean isProgramUri(android.net.Uri); field public static final java.lang.String AUTHORITY = "android.media.tv"; } @@ -24457,7 +24487,8 @@ package android.media.tv { field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id"; field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating"; field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis"; - field public static final java.lang.String COLUMN_EPISODE_NUMBER = "episode_number"; + field public static final java.lang.String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number"; + field public static final deprecated java.lang.String COLUMN_EPISODE_NUMBER = "episode_number"; field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title"; field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data"; field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1"; @@ -24467,7 +24498,9 @@ package android.media.tv { field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description"; field public static final java.lang.String COLUMN_POSTER_ART_URI = "poster_art_uri"; field public static final java.lang.String COLUMN_SEARCHABLE = "searchable"; - field public static final java.lang.String COLUMN_SEASON_NUMBER = "season_number"; + field public static final java.lang.String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number"; + field public static final deprecated java.lang.String COLUMN_SEASON_NUMBER = "season_number"; + field public static final java.lang.String COLUMN_SEASON_TITLE = "season_title"; field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description"; field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis"; field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri"; @@ -24510,7 +24543,7 @@ package android.media.tv { field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id"; field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating"; field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis"; - field public static final java.lang.String COLUMN_EPISODE_NUMBER = "episode_number"; + field public static final java.lang.String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number"; field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title"; field public static final java.lang.String COLUMN_INPUT_ID = "input_id"; field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data"; @@ -24525,7 +24558,8 @@ package android.media.tv { field public static final java.lang.String COLUMN_RECORDING_DURATION_MILLIS = "recording_duration_millis"; field public static final java.lang.String COLUMN_RECORDING_EXPIRE_TIME_UTC_MILLIS = "recording_expire_time_utc_millis"; field public static final java.lang.String COLUMN_SEARCHABLE = "searchable"; - field public static final java.lang.String COLUMN_SEASON_NUMBER = "season_number"; + field public static final java.lang.String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number"; + field public static final java.lang.String COLUMN_SEASON_TITLE = "season_title"; field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description"; field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis"; field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri"; @@ -25302,6 +25336,17 @@ package android.net { method public void onTetheringStarted(); } + public class ConnectivityMetricsEvent implements android.os.Parcelable { + ctor public ConnectivityMetricsEvent(long, int, int, android.os.Parcelable); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.net.ConnectivityMetricsEvent> CREATOR; + field public final int componentTag; + field public final android.os.Parcelable data; + field public final int eventTag; + field public final long timestamp; + } + public class Credentials { ctor public Credentials(int, int, int); method public int getGid(); @@ -26817,6 +26862,7 @@ package android.net.wifi { method public void stopTrackingWifiChange(android.net.wifi.WifiScanner.WifiChangeListener); field public static final int MAX_SCAN_PERIOD_MS = 1024000; // 0xfa000 field public static final int MIN_SCAN_PERIOD_MS = 1000; // 0x3e8 + field public static final int REASON_DUPLICATE_REQEUST = -5; // 0xfffffffb field public static final int REASON_INVALID_LISTENER = -2; // 0xfffffffe field public static final int REASON_INVALID_REQUEST = -3; // 0xfffffffd field public static final int REASON_NOT_AUTHORIZED = -4; // 0xfffffffc @@ -31408,9 +31454,14 @@ package android.os { } public class RecoverySystem { + method public static void cancelScheduledUpdate(android.content.Context) throws java.io.IOException; method public static void installPackage(android.content.Context, java.io.File) throws java.io.IOException; + method public static void installPackage(android.content.Context, java.io.File, boolean) throws java.io.IOException; + method public static void processPackage(android.content.Context, java.io.File, android.os.RecoverySystem.ProgressListener, android.os.Handler) throws java.io.IOException; + method public static void processPackage(android.content.Context, java.io.File, android.os.RecoverySystem.ProgressListener) throws java.io.IOException; method public static void rebootWipeCache(android.content.Context) throws java.io.IOException; method public static void rebootWipeUserData(android.content.Context) throws java.io.IOException; + method public static void scheduleUpdateOnBoot(android.content.Context, java.io.File) throws java.io.IOException; method public static void verifyPackage(java.io.File, android.os.RecoverySystem.ProgressListener, java.io.File) throws java.security.GeneralSecurityException, java.io.IOException; } @@ -31864,6 +31915,7 @@ package android.preference { method protected int getPersistedInt(int); method protected long getPersistedLong(long); method protected java.lang.String getPersistedString(java.lang.String); + method public java.util.Set<java.lang.String> getPersistedStringSet(java.util.Set<java.lang.String>); method public android.preference.PreferenceManager getPreferenceManager(); method public android.content.SharedPreferences getSharedPreferences(); method public boolean getShouldDisableView(); @@ -31898,6 +31950,7 @@ package android.preference { method protected boolean persistInt(int); method protected boolean persistLong(long); method protected boolean persistString(java.lang.String); + method public boolean persistStringSet(java.util.Set<java.lang.String>); method public void restoreHierarchyState(android.os.Bundle); method public void saveHierarchyState(android.os.Bundle); method public void setDefaultValue(java.lang.Object); @@ -34741,6 +34794,7 @@ package android.provider { field public static final java.lang.String USB_MASS_STORAGE_ENABLED = "usb_mass_storage_enabled"; field public static final java.lang.String USE_GOOGLE_MAIL = "use_google_mail"; field public static final java.lang.String WAIT_FOR_DEBUGGER = "wait_for_debugger"; + field public static final java.lang.String WEBVIEW_MULTIPROCESS = "webview_multiprocess"; field public static final java.lang.String WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN = "wifi_device_owner_configs_lockdown"; field public static final java.lang.String WIFI_MAX_DHCP_RETRY_COUNT = "wifi_max_dhcp_retry_count"; field public static final java.lang.String WIFI_MOBILE_DATA_TRANSITION_WAKELOCK_TIMEOUT_MS = "wifi_mobile_data_transition_wakelock_timeout_ms"; @@ -36591,6 +36645,7 @@ package android.security.keystore { method public java.lang.String[] getSignaturePaddings(); method public int getUserAuthenticationValidityDurationSeconds(); method public boolean isDigestsSpecified(); + method public boolean isInvalidatedByBiometricEnrollment(); method public boolean isRandomizedEncryptionRequired(); method public boolean isUserAuthenticationRequired(); method public boolean isUserAuthenticationValidWhileOnBody(); @@ -36608,6 +36663,7 @@ package android.security.keystore { method public android.security.keystore.KeyGenParameterSpec.Builder setCertificateSubject(javax.security.auth.x500.X500Principal); method public android.security.keystore.KeyGenParameterSpec.Builder setDigests(java.lang.String...); method public android.security.keystore.KeyGenParameterSpec.Builder setEncryptionPaddings(java.lang.String...); + method public android.security.keystore.KeyGenParameterSpec.Builder setInvalidatedByBiometricEnrollment(boolean); method public android.security.keystore.KeyGenParameterSpec.Builder setKeySize(int); method public android.security.keystore.KeyGenParameterSpec.Builder setKeyValidityEnd(java.util.Date); method public android.security.keystore.KeyGenParameterSpec.Builder setKeyValidityForConsumptionEnd(java.util.Date); @@ -36634,6 +36690,7 @@ package android.security.keystore { method public java.lang.String[] getSignaturePaddings(); method public int getUserAuthenticationValidityDurationSeconds(); method public boolean isInsideSecureHardware(); + method public boolean isInvalidatedByBiometricEnrollment(); method public boolean isUserAuthenticationRequired(); method public boolean isUserAuthenticationRequirementEnforcedBySecureHardware(); method public boolean isUserAuthenticationValidWhileOnBody(); @@ -36697,6 +36754,7 @@ package android.security.keystore { method public java.lang.String[] getSignaturePaddings(); method public int getUserAuthenticationValidityDurationSeconds(); method public boolean isDigestsSpecified(); + method public boolean isInvalidatedByBiometricEnrollment(); method public boolean isRandomizedEncryptionRequired(); method public boolean isUserAuthenticationRequired(); method public boolean isUserAuthenticationValidWhileOnBody(); @@ -36708,6 +36766,7 @@ package android.security.keystore { method public android.security.keystore.KeyProtection.Builder setBlockModes(java.lang.String...); method public android.security.keystore.KeyProtection.Builder setDigests(java.lang.String...); method public android.security.keystore.KeyProtection.Builder setEncryptionPaddings(java.lang.String...); + method public android.security.keystore.KeyProtection.Builder setInvalidatedByBiometricEnrollment(boolean); method public android.security.keystore.KeyProtection.Builder setKeyValidityEnd(java.util.Date); method public android.security.keystore.KeyProtection.Builder setKeyValidityForConsumptionEnd(java.util.Date); method public android.security.keystore.KeyProtection.Builder setKeyValidityForOriginationEnd(java.util.Date); @@ -37092,6 +37151,7 @@ package android.service.persistentdata { public abstract interface IPersistentDataBlockService implements android.os.IInterface { method public abstract int getDataBlockSize() throws android.os.RemoteException; + method public abstract int getFlashLockState() throws android.os.RemoteException; method public abstract long getMaximumDataBlockSize() throws android.os.RemoteException; method public abstract boolean getOemUnlockEnabled() throws android.os.RemoteException; method public abstract byte[] read() throws android.os.RemoteException; @@ -37103,12 +37163,19 @@ package android.service.persistentdata { public class PersistentDataBlockManager { ctor public PersistentDataBlockManager(android.service.persistentdata.IPersistentDataBlockService); method public int getDataBlockSize(); + method public int getFlashLockState(); method public long getMaximumDataBlockSize(); method public boolean getOemUnlockEnabled(); method public byte[] read(); method public void setOemUnlockEnabled(boolean); method public void wipe(); method public int write(byte[]); + field public static final int FLASH_LOCK_LOCKED = 1; // 0x1 + field public static final int FLASH_LOCK_UNKNOWN = -1; // 0xffffffff + field public static final int FLASH_LOCK_UNLOCKED = 0; // 0x0 + } + + public static abstract class PersistentDataBlockManager.FlashLockState implements java.lang.annotation.Annotation { } } @@ -39810,12 +39877,18 @@ package android.telephony { method public boolean handlePinMmi(java.lang.String); method public boolean handlePinMmiForSubscriber(int, java.lang.String); method public boolean hasCarrierPrivileges(); + method public boolean hasCarrierPrivileges(int); method public boolean hasIccCard(); method public boolean iccCloseLogicalChannel(int); + method public boolean iccCloseLogicalChannel(int, int); method public byte[] iccExchangeSimIO(int, int, int, int, int, java.lang.String); + method public byte[] iccExchangeSimIO(int, int, int, int, int, int, java.lang.String); method public android.telephony.IccOpenLogicalChannelResponse iccOpenLogicalChannel(java.lang.String); + method public android.telephony.IccOpenLogicalChannelResponse iccOpenLogicalChannel(int, java.lang.String); method public java.lang.String iccTransmitApduBasicChannel(int, int, int, int, int, java.lang.String); + method public java.lang.String iccTransmitApduBasicChannel(int, int, int, int, int, int, java.lang.String); method public java.lang.String iccTransmitApduLogicalChannel(int, int, int, int, int, int, java.lang.String); + method public java.lang.String iccTransmitApduLogicalChannel(int, int, int, int, int, int, int, java.lang.String); method public boolean isDataConnectivityPossible(); method public boolean isHearingAidCompatibilitySupported(); method public boolean isIdle(); @@ -39833,12 +39906,15 @@ package android.telephony { method public void listen(android.telephony.PhoneStateListener, int); method public boolean needsOtaServiceProvisioning(); method public java.lang.String sendEnvelopeWithStatus(java.lang.String); + method public java.lang.String sendEnvelopeWithStatus(int, java.lang.String); method public void setDataEnabled(boolean); method public void setDataEnabled(int, boolean); method public boolean setLine1NumberForDisplay(java.lang.String, java.lang.String); method public boolean setLine1NumberForDisplay(int, java.lang.String, java.lang.String); method public boolean setOperatorBrandOverride(java.lang.String); + method public boolean setOperatorBrandOverride(int, java.lang.String); method public boolean setPreferredNetworkTypeToGlobal(); + method public boolean setPreferredNetworkTypeToGlobal(int); method public boolean setRadio(boolean); method public boolean setRadioPower(boolean); method public boolean setVoiceMailNumber(java.lang.String, java.lang.String); @@ -49155,7 +49231,9 @@ package android.widget { method public long getBase(); method public java.lang.String getFormat(); method public android.widget.Chronometer.OnChronometerTickListener getOnChronometerTickListener(); + method public boolean isCountDown(); method public void setBase(long); + method public void setCountDown(boolean); method public void setFormat(java.lang.String); method public void setOnChronometerTickListener(android.widget.Chronometer.OnChronometerTickListener); method public void start(); diff --git a/api/system-removed.txt b/api/system-removed.txt index 27de91312fae..7347aa3f2110 100644 --- a/api/system-removed.txt +++ b/api/system-removed.txt @@ -6,6 +6,15 @@ package android.app { } +package android.app.admin { + + public class DevicePolicyManager { + method public deprecated android.os.UserHandle createAndInitializeUser(android.content.ComponentName, java.lang.String, java.lang.String, android.content.ComponentName, android.os.Bundle); + method public deprecated android.os.UserHandle createUser(android.content.ComponentName, java.lang.String); + } + +} + package android.content.pm { public class PackageInfo implements android.os.Parcelable { @@ -26,7 +35,7 @@ package android.database { package android.media { - public class AudioFormat { + public class AudioFormat implements android.os.Parcelable { ctor public AudioFormat(); } diff --git a/api/test-current.txt b/api/test-current.txt index f1908c150b42..83e4642a8932 100644 --- a/api/test-current.txt +++ b/api/test-current.txt @@ -338,6 +338,7 @@ package android { field public static final int calendarViewStyle = 16843613; // 0x101035d field public static final int canControlMagnification = 16844040; // 0x1010508 field public static final int canPerformGestures = 16844046; // 0x101050e + field public static final int canRecord = 16844061; // 0x101051d field public static final int canRequestEnhancedWebAccessibility = 16843736; // 0x10103d8 field public static final int canRequestFilterKeyEvents = 16843737; // 0x10103d9 field public static final int canRequestTouchExplorationMode = 16843735; // 0x10103d7 @@ -423,6 +424,7 @@ package android { field public static final int controlX2 = 16843774; // 0x10103fe field public static final int controlY1 = 16843773; // 0x10103fd field public static final int controlY2 = 16843775; // 0x10103ff + field public static final int countDown = 16844060; // 0x101051c field public static final int country = 16843962; // 0x10104ba field public static final int cropToPadding = 16843043; // 0x1010123 field public static final int cursorVisible = 16843090; // 0x1010152 @@ -1358,6 +1360,7 @@ package android { field public static final int trimPathEnd = 16843785; // 0x1010409 field public static final int trimPathOffset = 16843786; // 0x101040a field public static final int trimPathStart = 16843784; // 0x1010408 + field public static final int tunerCount = 16844062; // 0x101051e field public static final int type = 16843169; // 0x10101a1 field public static final int typeface = 16842902; // 0x1010096 field public static final int uiOptions = 16843672; // 0x1010398 @@ -4276,7 +4279,6 @@ package android.app { public class DownloadManager { method public long addCompletedDownload(java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, long, boolean); - method public long addCompletedDownload(java.lang.String, java.lang.String, boolean, java.lang.String, java.lang.String, long, boolean, android.net.Uri, android.net.Uri); method public long enqueue(android.app.DownloadManager.Request); method public static java.lang.Long getMaxBytesOverMobile(android.content.Context); method public java.lang.String getMimeTypeForDownloadedFile(long); @@ -5831,9 +5833,7 @@ package android.app.admin { method public void clearPackagePersistentPreferredActivities(android.content.ComponentName, java.lang.String); method public void clearProfileOwner(android.content.ComponentName); method public void clearUserRestriction(android.content.ComponentName, java.lang.String); - method public deprecated android.os.UserHandle createAndInitializeUser(android.content.ComponentName, java.lang.String, java.lang.String, android.content.ComponentName, android.os.Bundle); method public android.os.UserHandle createAndManageUser(android.content.ComponentName, java.lang.String, android.content.ComponentName, android.os.PersistableBundle, int); - method public deprecated android.os.UserHandle createUser(android.content.ComponentName, java.lang.String); method public void enableSystemApp(android.content.ComponentName, java.lang.String); method public int enableSystemApp(android.content.ComponentName, android.content.Intent); method public java.lang.String[] getAccountTypesWithManagementDisabled(); @@ -5888,6 +5888,7 @@ package android.app.admin { method public boolean hasGrantedPolicy(android.content.ComponentName, int); method public boolean installCaCert(android.content.ComponentName, byte[]); 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 isActivePasswordSufficient(); method public boolean isAdminActive(android.content.ComponentName); method public boolean isApplicationHidden(android.content.ComponentName, java.lang.String); @@ -8475,6 +8476,7 @@ package android.content { field public static final java.lang.String ACTION_AIRPLANE_MODE_CHANGED = "android.intent.action.AIRPLANE_MODE"; field public static final java.lang.String ACTION_ALL_APPS = "android.intent.action.ALL_APPS"; field public static final java.lang.String ACTION_ANSWER = "android.intent.action.ANSWER"; + field public static final java.lang.String ACTION_APPLICATION_PREFERENCES = "android.intent.action.APPLICATION_PREFERENCES"; field public static final java.lang.String ACTION_APPLICATION_RESTRICTIONS_CHANGED = "android.intent.action.APPLICATION_RESTRICTIONS_CHANGED"; field public static final java.lang.String ACTION_APP_ERROR = "android.intent.action.APP_ERROR"; field public static final java.lang.String ACTION_ASSIST = "android.intent.action.ASSIST"; @@ -9793,6 +9795,8 @@ package android.content.pm { field public static final java.lang.String FEATURE_VERIFIED_BOOT = "android.software.verified_boot"; field public static final java.lang.String FEATURE_VR_MODE = "android.software.vr.mode"; field public static final java.lang.String FEATURE_VR_MODE_HIGH_PERFORMANCE = "android.hardware.vr.high_performance"; + field public static final java.lang.String FEATURE_VULKAN_HARDWARE_LEVEL = "android.hardware.vulkan.level"; + field public static final java.lang.String FEATURE_VULKAN_HARDWARE_VERSION = "android.hardware.vulkan.version"; field public static final java.lang.String FEATURE_WATCH = "android.hardware.type.watch"; field public static final java.lang.String FEATURE_WEBVIEW = "android.software.webview"; field public static final java.lang.String FEATURE_WIFI = "android.hardware.wifi"; @@ -11954,6 +11958,8 @@ package android.graphics { ctor public Outline(android.graphics.Outline); method public boolean canClip(); method public float getAlpha(); + method public float getRadius(); + method public boolean getRect(android.graphics.Rect); method public boolean isEmpty(); method public void offset(int, int); method public void set(android.graphics.Outline); @@ -12981,12 +12987,10 @@ package android.graphics.drawable { ctor public deprecated NinePatchDrawable(android.graphics.NinePatch); ctor public NinePatchDrawable(android.content.res.Resources, android.graphics.NinePatch); method public void draw(android.graphics.Canvas); - method public android.graphics.NinePatch getNinePatch(); method public int getOpacity(); method public android.graphics.Paint getPaint(); method public void setAlpha(int); method public void setColorFilter(android.graphics.ColorFilter); - method public void setNinePatch(android.graphics.NinePatch); method public void setTargetDensity(android.graphics.Canvas); method public void setTargetDensity(android.util.DisplayMetrics); method public void setTargetDensity(int); @@ -13209,8 +13213,8 @@ package android.hardware { method public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback); method public final void takePicture(android.hardware.Camera.ShutterCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback, android.hardware.Camera.PictureCallback); method public final void unlock(); - field public static final java.lang.String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE"; - field public static final java.lang.String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO"; + field public static final deprecated java.lang.String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE"; + field public static final deprecated java.lang.String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO"; field public static final int CAMERA_ERROR_EVICTED = 2; // 0x2 field public static final int CAMERA_ERROR_SERVER_DIED = 100; // 0x64 field public static final int CAMERA_ERROR_UNKNOWN = 1; // 0x1 @@ -19701,6 +19705,7 @@ package android.media { field public static final int TYPE_BUILTIN_EARPIECE = 1; // 0x1 field public static final int TYPE_BUILTIN_MIC = 15; // 0xf field public static final int TYPE_BUILTIN_SPEAKER = 2; // 0x2 + field public static final int TYPE_BUS = 21; // 0x15 field public static final int TYPE_DOCK = 13; // 0xd field public static final int TYPE_FM = 14; // 0xe field public static final int TYPE_FM_TUNER = 16; // 0x10 @@ -19718,12 +19723,14 @@ package android.media { field public static final int TYPE_WIRED_HEADSET = 3; // 0x3 } - public class AudioFormat { + public class AudioFormat implements android.os.Parcelable { + method public int describeContents(); method public int getChannelCount(); method public int getChannelIndexMask(); method public int getChannelMask(); method public int getEncoding(); method public int getSampleRate(); + method public void writeToParcel(android.os.Parcel, int); field public static final deprecated int CHANNEL_CONFIGURATION_DEFAULT = 1; // 0x1 field public static final deprecated int CHANNEL_CONFIGURATION_INVALID = 0; // 0x0 field public static final deprecated int CHANNEL_CONFIGURATION_MONO = 2; // 0x2 @@ -19765,6 +19772,7 @@ package android.media { field public static final int CHANNEL_OUT_SIDE_RIGHT = 4096; // 0x1000 field public static final int CHANNEL_OUT_STEREO = 12; // 0xc field public static final int CHANNEL_OUT_SURROUND = 1052; // 0x41c + field public static final android.os.Parcelable.Creator<android.media.AudioFormat> CREATOR; field public static final int ENCODING_AC3 = 5; // 0x5 field public static final int ENCODING_DEFAULT = 1; // 0x1 field public static final int ENCODING_DTS = 7; // 0x7 @@ -21196,6 +21204,7 @@ package android.media { method public void setDataSource(android.content.Context, android.net.Uri) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException; method public void setDataSource(android.content.Context, android.net.Uri, java.util.Map<java.lang.String, java.lang.String>) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException; method public void setDataSource(java.lang.String) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException, java.lang.SecurityException; + method public void setDataSource(android.content.res.AssetFileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; method public void setDataSource(java.io.FileDescriptor) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; method public void setDataSource(java.io.FileDescriptor, long, long) throws java.io.IOException, java.lang.IllegalArgumentException, java.lang.IllegalStateException; method public void setDataSource(android.media.MediaDataSource) throws java.lang.IllegalArgumentException, java.lang.IllegalStateException; @@ -22562,6 +22571,10 @@ package android.media.session { method public void playFromMediaId(java.lang.String, android.os.Bundle); method public void playFromSearch(java.lang.String, android.os.Bundle); method public void playFromUri(android.net.Uri, android.os.Bundle); + method public void prepare(); + method public void prepareFromMediaId(java.lang.String, android.os.Bundle); + method public void prepareFromSearch(java.lang.String, android.os.Bundle); + method public void prepareFromUri(android.net.Uri, android.os.Bundle); method public void rewind(); method public void seekTo(long); method public void sendCustomAction(android.media.session.PlaybackState.CustomAction, android.os.Bundle); @@ -22595,7 +22608,6 @@ package android.media.session { method public void setRatingType(int); method public void setSessionActivity(android.app.PendingIntent); field public static final int FLAG_HANDLES_MEDIA_BUTTONS = 1; // 0x1 - field public static final int FLAG_HANDLES_PREPARE_ONLY = 4; // 0x4 field public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 2; // 0x2 } @@ -22610,6 +22622,10 @@ package android.media.session { method public void onPlayFromMediaId(java.lang.String, android.os.Bundle); method public void onPlayFromSearch(java.lang.String, android.os.Bundle); method public void onPlayFromUri(android.net.Uri, android.os.Bundle); + method public void onPrepare(); + method public void onPrepareFromMediaId(java.lang.String, android.os.Bundle); + method public void onPrepareFromSearch(java.lang.String, android.os.Bundle); + method public void onPrepareFromUri(android.net.Uri, android.os.Bundle); method public void onRewind(); method public void onSeekTo(long); method public void onSetRating(android.media.Rating); @@ -22666,6 +22682,10 @@ package android.media.session { field public static final long ACTION_PLAY_FROM_SEARCH = 2048L; // 0x800L field public static final long ACTION_PLAY_FROM_URI = 8192L; // 0x2000L field public static final long ACTION_PLAY_PAUSE = 512L; // 0x200L + field public static final long ACTION_PREPARE = 16384L; // 0x4000L + field public static final long ACTION_PREPARE_FROM_MEDIA_ID = 32768L; // 0x8000L + field public static final long ACTION_PREPARE_FROM_SEARCH = 65536L; // 0x10000L + field public static final long ACTION_PREPARE_FROM_URI = 131072L; // 0x20000L field public static final long ACTION_REWIND = 8L; // 0x8L field public static final long ACTION_SEEK_TO = 256L; // 0x100L field public static final long ACTION_SET_RATING = 128L; // 0x80L @@ -22674,7 +22694,6 @@ package android.media.session { field public static final long ACTION_SKIP_TO_QUEUE_ITEM = 4096L; // 0x1000L field public static final long ACTION_STOP = 1L; // 0x1L field public static final android.os.Parcelable.Creator<android.media.session.PlaybackState> CREATOR; - field public static final java.lang.String EXTRA_PREPARE_ONLY = "android.media.session.extra.PREPARE_ONLY"; field public static final long PLAYBACK_POSITION_UNKNOWN = -1L; // 0xffffffffffffffffL field public static final int STATE_BUFFERING = 6; // 0x6 field public static final int STATE_CONNECTING = 8; // 0x8 @@ -22750,6 +22769,10 @@ package android.media.tv { method public static final android.net.Uri buildProgramsUriForChannel(long, long, long); method public static final android.net.Uri buildProgramsUriForChannel(android.net.Uri, long, long); method public static final android.net.Uri buildRecordedProgramUri(long); + method public static final boolean isChannelUri(android.net.Uri); + method public static final boolean isChannelUriForPassthroughInput(android.net.Uri); + method public static final boolean isChannelUriForTunerInput(android.net.Uri); + method public static final boolean isProgramUri(android.net.Uri); field public static final java.lang.String AUTHORITY = "android.media.tv"; } @@ -22841,7 +22864,8 @@ package android.media.tv { field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id"; field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating"; field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis"; - field public static final java.lang.String COLUMN_EPISODE_NUMBER = "episode_number"; + field public static final java.lang.String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number"; + field public static final deprecated java.lang.String COLUMN_EPISODE_NUMBER = "episode_number"; field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title"; field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data"; field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_FLAG1 = "internal_provider_flag1"; @@ -22851,7 +22875,9 @@ package android.media.tv { field public static final java.lang.String COLUMN_LONG_DESCRIPTION = "long_description"; field public static final java.lang.String COLUMN_POSTER_ART_URI = "poster_art_uri"; field public static final java.lang.String COLUMN_SEARCHABLE = "searchable"; - field public static final java.lang.String COLUMN_SEASON_NUMBER = "season_number"; + field public static final java.lang.String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number"; + field public static final deprecated java.lang.String COLUMN_SEASON_NUMBER = "season_number"; + field public static final java.lang.String COLUMN_SEASON_TITLE = "season_title"; field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description"; field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis"; field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri"; @@ -22894,7 +22920,7 @@ package android.media.tv { field public static final java.lang.String COLUMN_CHANNEL_ID = "channel_id"; field public static final java.lang.String COLUMN_CONTENT_RATING = "content_rating"; field public static final java.lang.String COLUMN_END_TIME_UTC_MILLIS = "end_time_utc_millis"; - field public static final java.lang.String COLUMN_EPISODE_NUMBER = "episode_number"; + field public static final java.lang.String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number"; field public static final java.lang.String COLUMN_EPISODE_TITLE = "episode_title"; field public static final java.lang.String COLUMN_INPUT_ID = "input_id"; field public static final java.lang.String COLUMN_INTERNAL_PROVIDER_DATA = "internal_provider_data"; @@ -22909,7 +22935,8 @@ package android.media.tv { field public static final java.lang.String COLUMN_RECORDING_DURATION_MILLIS = "recording_duration_millis"; field public static final java.lang.String COLUMN_RECORDING_EXPIRE_TIME_UTC_MILLIS = "recording_expire_time_utc_millis"; field public static final java.lang.String COLUMN_SEARCHABLE = "searchable"; - field public static final java.lang.String COLUMN_SEASON_NUMBER = "season_number"; + field public static final java.lang.String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number"; + field public static final java.lang.String COLUMN_SEASON_TITLE = "season_title"; field public static final java.lang.String COLUMN_SHORT_DESCRIPTION = "short_description"; field public static final java.lang.String COLUMN_START_TIME_UTC_MILLIS = "start_time_utc_millis"; field public static final java.lang.String COLUMN_THUMBNAIL_URI = "thumbnail_uri"; @@ -23499,6 +23526,17 @@ package android.net { method public abstract void onNetworkActive(); } + public class ConnectivityMetricsEvent implements android.os.Parcelable { + ctor public ConnectivityMetricsEvent(long, int, int, android.os.Parcelable); + method public int describeContents(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.net.ConnectivityMetricsEvent> CREATOR; + field public final int componentTag; + field public final android.os.Parcelable data; + field public final int eventTag; + field public final long timestamp; + } + public class Credentials { ctor public Credentials(int, int, int); method public int getGid(); @@ -29518,6 +29556,7 @@ package android.preference { method protected int getPersistedInt(int); method protected long getPersistedLong(long); method protected java.lang.String getPersistedString(java.lang.String); + method public java.util.Set<java.lang.String> getPersistedStringSet(java.util.Set<java.lang.String>); method public android.preference.PreferenceManager getPreferenceManager(); method public android.content.SharedPreferences getSharedPreferences(); method public boolean getShouldDisableView(); @@ -29552,6 +29591,7 @@ package android.preference { method protected boolean persistInt(int); method protected boolean persistLong(long); method protected boolean persistString(java.lang.String); + method public boolean persistStringSet(java.util.Set<java.lang.String>); method public void restoreHierarchyState(android.os.Bundle); method public void saveHierarchyState(android.os.Bundle); method public void setDefaultValue(java.lang.Object); @@ -34115,6 +34155,7 @@ package android.security.keystore { method public java.lang.String[] getSignaturePaddings(); method public int getUserAuthenticationValidityDurationSeconds(); method public boolean isDigestsSpecified(); + method public boolean isInvalidatedByBiometricEnrollment(); method public boolean isRandomizedEncryptionRequired(); method public boolean isUserAuthenticationRequired(); method public boolean isUserAuthenticationValidWhileOnBody(); @@ -34132,6 +34173,7 @@ package android.security.keystore { method public android.security.keystore.KeyGenParameterSpec.Builder setCertificateSubject(javax.security.auth.x500.X500Principal); method public android.security.keystore.KeyGenParameterSpec.Builder setDigests(java.lang.String...); method public android.security.keystore.KeyGenParameterSpec.Builder setEncryptionPaddings(java.lang.String...); + method public android.security.keystore.KeyGenParameterSpec.Builder setInvalidatedByBiometricEnrollment(boolean); method public android.security.keystore.KeyGenParameterSpec.Builder setKeySize(int); method public android.security.keystore.KeyGenParameterSpec.Builder setKeyValidityEnd(java.util.Date); method public android.security.keystore.KeyGenParameterSpec.Builder setKeyValidityForConsumptionEnd(java.util.Date); @@ -34158,6 +34200,7 @@ package android.security.keystore { method public java.lang.String[] getSignaturePaddings(); method public int getUserAuthenticationValidityDurationSeconds(); method public boolean isInsideSecureHardware(); + method public boolean isInvalidatedByBiometricEnrollment(); method public boolean isUserAuthenticationRequired(); method public boolean isUserAuthenticationRequirementEnforcedBySecureHardware(); method public boolean isUserAuthenticationValidWhileOnBody(); @@ -34221,6 +34264,7 @@ package android.security.keystore { method public java.lang.String[] getSignaturePaddings(); method public int getUserAuthenticationValidityDurationSeconds(); method public boolean isDigestsSpecified(); + method public boolean isInvalidatedByBiometricEnrollment(); method public boolean isRandomizedEncryptionRequired(); method public boolean isUserAuthenticationRequired(); method public boolean isUserAuthenticationValidWhileOnBody(); @@ -34232,6 +34276,7 @@ package android.security.keystore { method public android.security.keystore.KeyProtection.Builder setBlockModes(java.lang.String...); method public android.security.keystore.KeyProtection.Builder setDigests(java.lang.String...); method public android.security.keystore.KeyProtection.Builder setEncryptionPaddings(java.lang.String...); + method public android.security.keystore.KeyProtection.Builder setInvalidatedByBiometricEnrollment(boolean); method public android.security.keystore.KeyProtection.Builder setKeyValidityEnd(java.util.Date); method public android.security.keystore.KeyProtection.Builder setKeyValidityForConsumptionEnd(java.util.Date); method public android.security.keystore.KeyProtection.Builder setKeyValidityForOriginationEnd(java.util.Date); @@ -37109,12 +37154,18 @@ package android.telephony { method public int getVoiceNetworkType(int); method public android.net.Uri getVoicemailRingtoneUri(android.telecom.PhoneAccountHandle); method public boolean hasCarrierPrivileges(); + method public boolean hasCarrierPrivileges(int); method public boolean hasIccCard(); method public boolean iccCloseLogicalChannel(int); + method public boolean iccCloseLogicalChannel(int, int); method public byte[] iccExchangeSimIO(int, int, int, int, int, java.lang.String); + method public byte[] iccExchangeSimIO(int, int, int, int, int, int, java.lang.String); method public android.telephony.IccOpenLogicalChannelResponse iccOpenLogicalChannel(java.lang.String); + method public android.telephony.IccOpenLogicalChannelResponse iccOpenLogicalChannel(int, java.lang.String); method public java.lang.String iccTransmitApduBasicChannel(int, int, int, int, int, java.lang.String); + method public java.lang.String iccTransmitApduBasicChannel(int, int, int, int, int, int, java.lang.String); method public java.lang.String iccTransmitApduLogicalChannel(int, int, int, int, int, int, java.lang.String); + method public java.lang.String iccTransmitApduLogicalChannel(int, int, int, int, int, int, int, java.lang.String); method public boolean isHearingAidCompatibilitySupported(); method public boolean isNetworkRoaming(); method public boolean isNetworkRoaming(int); @@ -37125,10 +37176,13 @@ package android.telephony { method public boolean isWorldPhone(); method public void listen(android.telephony.PhoneStateListener, int); method public java.lang.String sendEnvelopeWithStatus(java.lang.String); + method public java.lang.String sendEnvelopeWithStatus(int, java.lang.String); method public boolean setLine1NumberForDisplay(java.lang.String, java.lang.String); method public boolean setLine1NumberForDisplay(int, java.lang.String, java.lang.String); method public boolean setOperatorBrandOverride(java.lang.String); + method public boolean setOperatorBrandOverride(int, java.lang.String); method public boolean setPreferredNetworkTypeToGlobal(); + method public boolean setPreferredNetworkTypeToGlobal(int); method public boolean setVoiceMailNumber(java.lang.String, java.lang.String); method public boolean setVoiceMailNumber(int, java.lang.String, java.lang.String); field public static final java.lang.String ACTION_CONFIGURE_VOICEMAIL = "android.telephony.action.CONFIGURE_VOICEMAIL"; @@ -46076,7 +46130,9 @@ package android.widget { method public long getBase(); method public java.lang.String getFormat(); method public android.widget.Chronometer.OnChronometerTickListener getOnChronometerTickListener(); + method public boolean isCountDown(); method public void setBase(long); + method public void setCountDown(boolean); method public void setFormat(java.lang.String); method public void setOnChronometerTickListener(android.widget.Chronometer.OnChronometerTickListener); method public void start(); diff --git a/api/test-removed.txt b/api/test-removed.txt index 0bf659438340..50a24f6dfd93 100644 --- a/api/test-removed.txt +++ b/api/test-removed.txt @@ -9,6 +9,8 @@ package android.app { package android.app.admin { public class DevicePolicyManager { + method public deprecated android.os.UserHandle createAndInitializeUser(android.content.ComponentName, java.lang.String, java.lang.String, android.content.ComponentName, android.os.Bundle); + method public deprecated android.os.UserHandle createUser(android.content.ComponentName, java.lang.String); method public deprecated java.lang.String getDeviceInitializerApp(); method public deprecated android.content.ComponentName getDeviceInitializerComponent(); } @@ -35,7 +37,7 @@ package android.database { package android.media { - public class AudioFormat { + public class AudioFormat implements android.os.Parcelable { ctor public AudioFormat(); } diff --git a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java index 079bdfcb7b90..75680e6a60ec 100644 --- a/core/java/android/accessibilityservice/AccessibilityServiceInfo.java +++ b/core/java/android/accessibilityservice/AccessibilityServiceInfo.java @@ -686,6 +686,11 @@ public class AccessibilityServiceInfo implements Parcelable { return null; } + /** {@hide} */ + public boolean isEncryptionAware() { + return mResolveInfo.serviceInfo.encryptionAware; + } + /** * {@inheritDoc} */ diff --git a/core/java/android/app/ActivityThread.java b/core/java/android/app/ActivityThread.java index 04883a961286..02b94de92509 100644 --- a/core/java/android/app/ActivityThread.java +++ b/core/java/android/app/ActivityThread.java @@ -4774,6 +4774,12 @@ public final class ActivityThread { } } + // Keep in sync with installd (frameworks/native/cmds/installd/commands.cpp). + private static File getPrimaryProfileFile(String packageName) { + return new File("/data/misc/profiles/cur/" + UserHandle.myUserId() + + "/" + packageName + "/primary.prof"); + } + private static void setupJitProfileSupport(LoadedApk loadedApk, File cacheDir) { if (!SystemProperties.getBoolean("dalvik.vm.usejitprofiles", false)) { return; @@ -4793,10 +4799,7 @@ public final class ActivityThread { return; } - // Add an extension to the file name to better reveal its intended use. - // Keep in sync with BackgroundDexOptService. - final String profileExtension = ".prof"; - final File profileFile = new File(cacheDir, loadedApk.mPackageName + profileExtension); + final File profileFile = getPrimaryProfileFile(loadedApk.mPackageName); if (!profileFile.exists()) { FileDescriptor fd = null; try { @@ -4805,7 +4808,7 @@ public final class ActivityThread { Os.fchmod(fd, permissions); Os.fchown(fd, appInfo.uid, appInfo.uid); } catch (ErrnoException e) { - Log.w(TAG, "Unable to create jit profile file " + profileFile, e); + Log.v(TAG, "Unable to create jit profile file " + profileFile, e); try { Os.unlink(profileFile.getAbsolutePath()); } catch (ErrnoException unlinkErr) { diff --git a/core/java/android/app/BackStackRecord.java b/core/java/android/app/BackStackRecord.java index eb4b13e69e9d..4b0dfc7e0a8b 100644 --- a/core/java/android/app/BackStackRecord.java +++ b/core/java/android/app/BackStackRecord.java @@ -470,6 +470,10 @@ final class BackStackRecord extends FragmentTransaction implements } if (containerViewId != 0) { + if (containerViewId == View.NO_ID) { + throw new IllegalArgumentException("Can't add fragment " + + fragment + " with tag " + tag + " to container view with no id"); + } if (fragment.mFragmentId != 0 && fragment.mFragmentId != containerViewId) { throw new IllegalStateException("Can't change container ID of fragment " + fragment + ": was " + fragment.mFragmentId diff --git a/core/java/android/app/DownloadManager.java b/core/java/android/app/DownloadManager.java index 1e5f00727e12..ed4bb28427ae 100644 --- a/core/java/android/app/DownloadManager.java +++ b/core/java/android/app/DownloadManager.java @@ -1193,52 +1193,13 @@ public class DownloadManager { boolean isMediaScannerScannable, String mimeType, String path, long length, boolean showNotification) { return addCompletedDownload(title, description, isMediaScannerScannable, mimeType, path, - length, showNotification, false, null, null); - } - - /** - * Adds a file to the downloads database system, so it could appear in Downloads App - * (and thus become eligible for management by the Downloads App). - * <p> - * It is helpful to make the file scannable by MediaScanner by setting the param - * isMediaScannerScannable to true. It makes the file visible in media managing - * applications such as Gallery App, which could be a useful purpose of using this API. - * - * @param title the title that would appear for this file in Downloads App. - * @param description the description that would appear for this file in Downloads App. - * @param isMediaScannerScannable true if the file is to be scanned by MediaScanner. Files - * scanned by MediaScanner appear in the applications used to view media (for example, - * Gallery app). - * @param mimeType mimetype of the file. - * @param path absolute pathname to the file. The file should be world-readable, so that it can - * be managed by the Downloads App and any other app that is used to read it (for example, - * Gallery app to display the file, if the file contents represent a video/image). - * @param length length of the downloaded file - * @param showNotification true if a notification is to be sent, false otherwise - * @param uri the original HTTP URI of the download - * @param referer the HTTP Referer for the download - * @return an ID for the download entry added to the downloads app, unique across the system - * This ID is used to make future calls related to this download. - */ - public long addCompletedDownload(String title, String description, - boolean isMediaScannerScannable, String mimeType, String path, long length, - boolean showNotification, Uri uri, Uri referer) { - return addCompletedDownload(title, description, isMediaScannerScannable, mimeType, path, - length, showNotification, false, uri, referer); + length, showNotification, false); } /** {@hide} */ public long addCompletedDownload(String title, String description, boolean isMediaScannerScannable, String mimeType, String path, long length, boolean showNotification, boolean allowWrite) { - return addCompletedDownload(title, description, isMediaScannerScannable, mimeType, path, - length, showNotification, allowWrite, null, null); - } - - /** {@hide} */ - public long addCompletedDownload(String title, String description, - boolean isMediaScannerScannable, String mimeType, String path, long length, - boolean showNotification, boolean allowWrite, Uri uri, Uri referer) { // make sure the input args are non-null/non-zero validateArgumentIsNonEmpty("title", title); validateArgumentIsNonEmpty("description", description); @@ -1249,18 +1210,10 @@ public class DownloadManager { } // if there is already an entry with the given path name in downloads.db, return its id - Request request; - if (uri != null) { - request = new Request(uri); - } else { - request = new Request(NON_DOWNLOADMANAGER_DOWNLOAD); - } - request.setTitle(title) + Request request = new Request(NON_DOWNLOADMANAGER_DOWNLOAD) + .setTitle(title) .setDescription(description) .setMimeType(mimeType); - if (referer != null) { - request.addRequestHeader("Referer", referer.toString()); - } ContentValues values = request.toContentValues(null); values.put(Downloads.Impl.COLUMN_DESTINATION, Downloads.Impl.DESTINATION_NON_DOWNLOADMANAGER_DOWNLOAD); diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java index 4c8761c86b93..78a054b3a717 100644 --- a/core/java/android/app/FragmentManager.java +++ b/core/java/android/app/FragmentManager.java @@ -24,6 +24,7 @@ import android.animation.PropertyValuesHolder; import android.animation.ValueAnimator; import android.content.Context; import android.content.res.Configuration; +import android.content.res.Resources.NotFoundException; import android.content.res.TypedArray; import android.os.Bundle; import android.os.Debug; @@ -960,12 +961,24 @@ final class FragmentManagerImpl extends FragmentManager implements LayoutInflate if (!f.mFromLayout) { ViewGroup container = null; if (f.mContainerId != 0) { - container = (ViewGroup)mContainer.onFindViewById(f.mContainerId); + if (f.mContainerId == View.NO_ID) { + throwException(new IllegalArgumentException( + "Cannot create fragment " + + f + + " for a container view with no id")); + } + container = (ViewGroup) mContainer.onFindViewById(f.mContainerId); if (container == null && !f.mRestored) { + String resName; + try { + resName = f.getResources().getResourceName(f.mContainerId); + } catch (NotFoundException e) { + resName = "unknown"; + } throwException(new IllegalArgumentException( "No view found for id 0x" + Integer.toHexString(f.mContainerId) + " (" - + f.getResources().getResourceName(f.mContainerId) + + resName + ") for fragment " + f)); } } diff --git a/core/java/android/app/JobSchedulerImpl.java b/core/java/android/app/JobSchedulerImpl.java index dacf4ea997dc..b3a486f450bf 100644 --- a/core/java/android/app/JobSchedulerImpl.java +++ b/core/java/android/app/JobSchedulerImpl.java @@ -46,9 +46,9 @@ public class JobSchedulerImpl extends JobScheduler { } @Override - public int scheduleAsPackage(JobInfo job, String packageName, int userId) { + public int scheduleAsPackage(JobInfo job, String packageName, int userId, String tag) { try { - return mBinder.scheduleAsPackage(job, packageName, userId); + return mBinder.scheduleAsPackage(job, packageName, userId, tag); } catch (RemoteException e) { return JobScheduler.RESULT_FAILURE; } diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java index 87173532ae51..837ceb6cc252 100644 --- a/core/java/android/app/LoadedApk.java +++ b/core/java/android/app/LoadedApk.java @@ -268,154 +268,155 @@ public final class LoadedApk { return mClassLoader; } - if (mIncludeCode && !mPackageName.equals("android")) { - // Avoid the binder call when the package is the current application package. - // The activity manager will perform ensure that dexopt is performed before - // spinning up the process. - if (!Objects.equals(mPackageName, ActivityThread.currentPackageName())) { - final String isa = VMRuntime.getRuntime().vmInstructionSet(); - try { - ActivityThread.getPackageManager().notifyPackageUse(mPackageName); - } catch (RemoteException re) { - // Ignored. - } + if (mPackageName.equals("android")) { + if (mBaseClassLoader == null) { + mClassLoader = ClassLoader.getSystemClassLoader(); + } else { + mClassLoader = mBaseClassLoader; } + return mClassLoader; + } - final List<String> zipPaths = new ArrayList<>(); - final List<String> apkPaths = new ArrayList<>(); - final List<String> libPaths = new ArrayList<>(); - - if (mRegisterPackage) { - try { - ActivityManagerNative.getDefault().addPackageDependency(mPackageName); - } catch (RemoteException e) { - } + // Avoid the binder call when the package is the current application package. + // The activity manager will perform ensure that dexopt is performed before + // spinning up the process. + if (!Objects.equals(mPackageName, ActivityThread.currentPackageName())) { + final String isa = VMRuntime.getRuntime().vmInstructionSet(); + try { + ActivityThread.getPackageManager().notifyPackageUse(mPackageName); + } catch (RemoteException re) { + // Ignored. } + } - zipPaths.add(mAppDir); - if (mSplitAppDirs != null) { - Collections.addAll(zipPaths, mSplitAppDirs); + final List<String> zipPaths = new ArrayList<>(); + final List<String> apkPaths = new ArrayList<>(); + final List<String> libPaths = new ArrayList<>(); + + if (mRegisterPackage) { + try { + ActivityManagerNative.getDefault().addPackageDependency(mPackageName); + } catch (RemoteException e) { } + } - libPaths.add(mLibDir); - - /* - * The following is a bit of a hack to inject - * instrumentation into the system: If the app - * being started matches one of the instrumentation names, - * then we combine both the "instrumentation" and - * "instrumented" app into the path, along with the - * concatenation of both apps' shared library lists. - */ - - String instrumentationPackageName = mActivityThread.mInstrumentationPackageName; - String instrumentationAppDir = mActivityThread.mInstrumentationAppDir; - String[] instrumentationSplitAppDirs = mActivityThread.mInstrumentationSplitAppDirs; - String instrumentationLibDir = mActivityThread.mInstrumentationLibDir; - - String instrumentedAppDir = mActivityThread.mInstrumentedAppDir; - String[] instrumentedSplitAppDirs = mActivityThread.mInstrumentedSplitAppDirs; - String instrumentedLibDir = mActivityThread.mInstrumentedLibDir; - String[] instrumentationLibs = null; - - if (mAppDir.equals(instrumentationAppDir) - || mAppDir.equals(instrumentedAppDir)) { - zipPaths.clear(); - zipPaths.add(instrumentationAppDir); - if (instrumentationSplitAppDirs != null) { - Collections.addAll(zipPaths, instrumentationSplitAppDirs); - } - zipPaths.add(instrumentedAppDir); - if (instrumentedSplitAppDirs != null) { - Collections.addAll(zipPaths, instrumentedSplitAppDirs); - } + zipPaths.add(mAppDir); + if (mSplitAppDirs != null) { + Collections.addAll(zipPaths, mSplitAppDirs); + } + + libPaths.add(mLibDir); + + /* + * The following is a bit of a hack to inject + * instrumentation into the system: If the app + * being started matches one of the instrumentation names, + * then we combine both the "instrumentation" and + * "instrumented" app into the path, along with the + * concatenation of both apps' shared library lists. + */ + + String instrumentationPackageName = mActivityThread.mInstrumentationPackageName; + String instrumentationAppDir = mActivityThread.mInstrumentationAppDir; + String[] instrumentationSplitAppDirs = mActivityThread.mInstrumentationSplitAppDirs; + String instrumentationLibDir = mActivityThread.mInstrumentationLibDir; + + String instrumentedAppDir = mActivityThread.mInstrumentedAppDir; + String[] instrumentedSplitAppDirs = mActivityThread.mInstrumentedSplitAppDirs; + String instrumentedLibDir = mActivityThread.mInstrumentedLibDir; + String[] instrumentationLibs = null; + + if (mAppDir.equals(instrumentationAppDir) + || mAppDir.equals(instrumentedAppDir)) { + zipPaths.clear(); + zipPaths.add(instrumentationAppDir); + if (instrumentationSplitAppDirs != null) { + Collections.addAll(zipPaths, instrumentationSplitAppDirs); + } + zipPaths.add(instrumentedAppDir); + if (instrumentedSplitAppDirs != null) { + Collections.addAll(zipPaths, instrumentedSplitAppDirs); + } - libPaths.clear(); - libPaths.add(instrumentationLibDir); - libPaths.add(instrumentedLibDir); + libPaths.clear(); + libPaths.add(instrumentationLibDir); + libPaths.add(instrumentedLibDir); - if (!instrumentedAppDir.equals(instrumentationAppDir)) { - instrumentationLibs = getLibrariesFor(instrumentationPackageName); - } + if (!instrumentedAppDir.equals(instrumentationAppDir)) { + instrumentationLibs = getLibrariesFor(instrumentationPackageName); } + } - apkPaths.addAll(zipPaths); + apkPaths.addAll(zipPaths); - if (mSharedLibraries != null) { - for (String lib : mSharedLibraries) { - if (!zipPaths.contains(lib)) { - zipPaths.add(0, lib); - } + if (mSharedLibraries != null) { + for (String lib : mSharedLibraries) { + if (!zipPaths.contains(lib)) { + zipPaths.add(0, lib); } } + } - if (instrumentationLibs != null) { - for (String lib : instrumentationLibs) { - if (!zipPaths.contains(lib)) { - zipPaths.add(0, lib); - } + if (instrumentationLibs != null) { + for (String lib : instrumentationLibs) { + if (!zipPaths.contains(lib)) { + zipPaths.add(0, lib); } } + } - final String zip = TextUtils.join(File.pathSeparator, zipPaths); + final String zip = mIncludeCode ? TextUtils.join(File.pathSeparator, zipPaths) : ""; - // Add path to libraries in apk for current abi - if (mApplicationInfo.primaryCpuAbi != null) { - for (String apk : apkPaths) { - libPaths.add(apk + "!/lib/" + mApplicationInfo.primaryCpuAbi); - } + // Add path to libraries in apk for current abi + if (mApplicationInfo.primaryCpuAbi != null) { + for (String apk : apkPaths) { + libPaths.add(apk + "!/lib/" + mApplicationInfo.primaryCpuAbi); } + } - String libraryPermittedPath = mDataDir; - boolean isBundledApp = false; - - if (mApplicationInfo.isSystemApp()) { - isBundledApp = true; - // Add path to system libraries to libPaths; - // Access to system libs should be limited - // to bundled applications; this is why updated - // system apps are not included. - libPaths.add(System.getProperty("java.library.path")); - - // This is necessary to grant bundled apps access to - // libraries located in subdirectories of /system/lib - libraryPermittedPath += File.pathSeparator + - System.getProperty("java.library.path"); - } - // DO NOT SHIP: this is a workaround for apps loading native libraries - // provided by 3rd party apps using absolute path instead of corresponding - // classloader; see http://b/26954419 for example. - if (mApplicationInfo.targetSdkVersion <= 23) { - libraryPermittedPath += File.pathSeparator + "/data/app"; - } - // ----------------------------------------------------------------------------- + String libraryPermittedPath = mDataDir; + boolean isBundledApp = false; + + if (mApplicationInfo.isSystemApp()) { + isBundledApp = true; + // Add path to system libraries to libPaths; + // Access to system libs should be limited + // to bundled applications; this is why updated + // system apps are not included. + libPaths.add(System.getProperty("java.library.path")); + + // This is necessary to grant bundled apps access to + // libraries located in subdirectories of /system/lib + libraryPermittedPath += File.pathSeparator + + System.getProperty("java.library.path"); + } + // DO NOT SHIP: this is a workaround for apps loading native libraries + // provided by 3rd party apps using absolute path instead of corresponding + // classloader; see http://b/26954419 for example. + if (mApplicationInfo.targetSdkVersion <= 23) { + libraryPermittedPath += File.pathSeparator + "/data/app"; + } + // ----------------------------------------------------------------------------- - final String librarySearchPath = TextUtils.join(File.pathSeparator, libPaths); + final String librarySearchPath = TextUtils.join(File.pathSeparator, libPaths); - /* - * With all the combination done (if necessary, actually - * create the class loader. - */ + /* + * With all the combination done (if necessary, actually + * create the class loader. + */ - if (ActivityThread.localLOGV) - Slog.v(ActivityThread.TAG, "Class path: " + zip + - ", JNI path: " + librarySearchPath); + if (ActivityThread.localLOGV) + Slog.v(ActivityThread.TAG, "Class path: " + zip + + ", JNI path: " + librarySearchPath); - // Temporarily disable logging of disk reads on the Looper thread - // as this is early and necessary. - StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); + // Temporarily disable logging of disk reads on the Looper thread + // as this is early and necessary. + StrictMode.ThreadPolicy oldPolicy = StrictMode.allowThreadDiskReads(); - mClassLoader = ApplicationLoaders.getDefault().getClassLoader(zip, isBundledApp, - librarySearchPath, libraryPermittedPath, mBaseClassLoader); + mClassLoader = ApplicationLoaders.getDefault().getClassLoader(zip, isBundledApp, + librarySearchPath, libraryPermittedPath, mBaseClassLoader); - StrictMode.setThreadPolicy(oldPolicy); - } else { - if (mBaseClassLoader == null) { - mClassLoader = ClassLoader.getSystemClassLoader(); - } else { - mClassLoader = mBaseClassLoader; - } - } + StrictMode.setThreadPolicy(oldPolicy); return mClassLoader; } } diff --git a/core/java/android/app/NativeActivity.java b/core/java/android/app/NativeActivity.java index aa14cb513d46..3c7f48ba580c 100644 --- a/core/java/android/app/NativeActivity.java +++ b/core/java/android/app/NativeActivity.java @@ -166,7 +166,8 @@ public class NativeActivity extends Activity implements SurfaceHolder.Callback2, String path = classLoader.findLibrary(libname); if (path == null) { - throw new IllegalArgumentException("Unable to find native library: " + libname); + throw new IllegalArgumentException("Unable to find native library " + libname + + " using classloader: " + classLoader.toString()); } byte[] nativeSavedState = savedInstanceState != null diff --git a/core/java/android/app/SystemServiceRegistry.java b/core/java/android/app/SystemServiceRegistry.java index 5eed781d76c3..307c3eb18362 100644 --- a/core/java/android/app/SystemServiceRegistry.java +++ b/core/java/android/app/SystemServiceRegistry.java @@ -89,10 +89,13 @@ import android.os.BatteryManager; import android.os.DropBoxManager; import android.os.HardwarePropertiesManager; import android.os.IBinder; +import android.os.IHardwarePropertiesManager; import android.os.IPowerManager; +import android.os.IRecoverySystem; import android.os.IUserManager; import android.os.PowerManager; import android.os.Process; +import android.os.RecoverySystem; import android.os.ServiceManager; import android.os.SystemVibrator; import android.os.UserHandle; @@ -379,6 +382,18 @@ final class SystemServiceRegistry { service, ctx.mMainThread.getHandler()); }}); + registerService(Context.RECOVERY_SERVICE, RecoverySystem.class, + new CachedServiceFetcher<RecoverySystem>() { + @Override + public RecoverySystem createService(ContextImpl ctx) { + IBinder b = ServiceManager.getService(Context.RECOVERY_SERVICE); + IRecoverySystem service = IRecoverySystem.Stub.asInterface(b); + if (service == null) { + Log.wtf(TAG, "Failed to get recovery service."); + } + return new RecoverySystem(service); + }}); + registerService(Context.SEARCH_SERVICE, SearchManager.class, new CachedServiceFetcher<SearchManager>() { @Override @@ -715,7 +730,14 @@ final class SystemServiceRegistry { new CachedServiceFetcher<HardwarePropertiesManager>() { @Override public HardwarePropertiesManager createService(ContextImpl ctx) { - return new HardwarePropertiesManager(); + IBinder b = ServiceManager.getService(Context.HARDWARE_PROPERTIES_SERVICE); + IHardwarePropertiesManager service = + IHardwarePropertiesManager.Stub.asInterface(b); + if (service == null) { + Log.wtf(TAG, "Failed to get hardwareproperties service."); + return null; + } + return new HardwarePropertiesManager(ctx, service); }}); registerService(Context.SOUND_TRIGGER_SERVICE, SoundTriggerManager.class, diff --git a/core/java/android/app/admin/DeviceAdminInfo.java b/core/java/android/app/admin/DeviceAdminInfo.java index 4e9adf09c351..1de1d2fbb822 100644 --- a/core/java/android/app/admin/DeviceAdminInfo.java +++ b/core/java/android/app/admin/DeviceAdminInfo.java @@ -240,7 +240,7 @@ public final class DeviceAdminInfo implements Parcelable { /** * The BroadcastReceiver that implements this device admin component. */ - final ResolveInfo mReceiver; + final ActivityInfo mActivityInfo; /** * Whether this should be visible to the user. @@ -252,29 +252,42 @@ public final class DeviceAdminInfo implements Parcelable { */ int mUsesPolicies; + + /** + * Constructor. + * + * @param context The Context in which we are parsing the device admin. + * @param resolveInfo The ResolveInfo returned from the package manager about + * this device admin's component. + */ + public DeviceAdminInfo(Context context, ResolveInfo resolveInfo) + throws XmlPullParserException, IOException { + this(context, resolveInfo.activityInfo); + } /** * Constructor. * * @param context The Context in which we are parsing the device admin. - * @param receiver The ResolveInfo returned from the package manager about + * @param activityInfo The ActivityInfo returned from the package manager about * this device admin's component. + * + * @hide */ - public DeviceAdminInfo(Context context, ResolveInfo receiver) + public DeviceAdminInfo(Context context, ActivityInfo activityInfo) throws XmlPullParserException, IOException { - mReceiver = receiver; - ActivityInfo ai = receiver.activityInfo; + mActivityInfo = activityInfo; PackageManager pm = context.getPackageManager(); XmlResourceParser parser = null; try { - parser = ai.loadXmlMetaData(pm, DeviceAdminReceiver.DEVICE_ADMIN_META_DATA); + parser = mActivityInfo.loadXmlMetaData(pm, DeviceAdminReceiver.DEVICE_ADMIN_META_DATA); if (parser == null) { throw new XmlPullParserException("No " + DeviceAdminReceiver.DEVICE_ADMIN_META_DATA + " meta-data"); } - Resources res = pm.getResourcesForApplication(ai.applicationInfo); + Resources res = pm.getResourcesForApplication(mActivityInfo.applicationInfo); AttributeSet attrs = Xml.asAttributeSet(parser); @@ -324,14 +337,14 @@ public final class DeviceAdminInfo implements Parcelable { } } catch (NameNotFoundException e) { throw new XmlPullParserException( - "Unable to create context for: " + ai.packageName); + "Unable to create context for: " + mActivityInfo.packageName); } finally { if (parser != null) parser.close(); } } DeviceAdminInfo(Parcel source) { - mReceiver = ResolveInfo.CREATOR.createFromParcel(source); + mActivityInfo = ActivityInfo.CREATOR.createFromParcel(source); mUsesPolicies = source.readInt(); } @@ -339,7 +352,7 @@ public final class DeviceAdminInfo implements Parcelable { * Return the .apk package that implements this device admin. */ public String getPackageName() { - return mReceiver.activityInfo.packageName; + return mActivityInfo.packageName; } /** @@ -347,7 +360,7 @@ public final class DeviceAdminInfo implements Parcelable { * this device admin. */ public String getReceiverName() { - return mReceiver.activityInfo.name; + return mActivityInfo.name; } /** @@ -355,7 +368,7 @@ public final class DeviceAdminInfo implements Parcelable { * device admin. Do not modify the returned object. */ public ActivityInfo getActivityInfo() { - return mReceiver.activityInfo; + return mActivityInfo; } /** @@ -363,8 +376,8 @@ public final class DeviceAdminInfo implements Parcelable { */ @NonNull public ComponentName getComponent() { - return new ComponentName(mReceiver.activityInfo.packageName, - mReceiver.activityInfo.name); + return new ComponentName(mActivityInfo.packageName, + mActivityInfo.name); } /** @@ -374,7 +387,7 @@ public final class DeviceAdminInfo implements Parcelable { * resources. */ public CharSequence loadLabel(PackageManager pm) { - return mReceiver.loadLabel(pm); + return mActivityInfo.loadLabel(pm); } /** @@ -384,15 +397,9 @@ public final class DeviceAdminInfo implements Parcelable { * resources. */ public CharSequence loadDescription(PackageManager pm) throws NotFoundException { - if (mReceiver.activityInfo.descriptionRes != 0) { - String packageName = mReceiver.resolvePackageName; - ApplicationInfo applicationInfo = null; - if (packageName == null) { - packageName = mReceiver.activityInfo.packageName; - applicationInfo = mReceiver.activityInfo.applicationInfo; - } - return pm.getText(packageName, - mReceiver.activityInfo.descriptionRes, applicationInfo); + if (mActivityInfo.descriptionRes != 0) { + return pm.getText(mActivityInfo.packageName, + mActivityInfo.descriptionRes, mActivityInfo.applicationInfo); } throw new NotFoundException(); } @@ -404,7 +411,7 @@ public final class DeviceAdminInfo implements Parcelable { * resources. */ public Drawable loadIcon(PackageManager pm) { - return mReceiver.loadIcon(pm); + return mActivityInfo.loadIcon(pm); } /** @@ -464,12 +471,12 @@ public final class DeviceAdminInfo implements Parcelable { public void dump(Printer pw, String prefix) { pw.println(prefix + "Receiver:"); - mReceiver.dump(pw, prefix + " "); + mActivityInfo.dump(pw, prefix + " "); } @Override public String toString() { - return "DeviceAdminInfo{" + mReceiver.activityInfo.name + "}"; + return "DeviceAdminInfo{" + mActivityInfo.name + "}"; } /** @@ -479,7 +486,7 @@ public final class DeviceAdminInfo implements Parcelable { * @param flags The flags used for parceling. */ public void writeToParcel(Parcel dest, int flags) { - mReceiver.writeToParcel(dest, flags); + mActivityInfo.writeToParcel(dest, flags); dest.writeInt(mUsesPolicies); } diff --git a/core/java/android/app/admin/DeviceAdminReceiver.java b/core/java/android/app/admin/DeviceAdminReceiver.java index d5ca0e94e2d3..a34e8551ed4b 100644 --- a/core/java/android/app/admin/DeviceAdminReceiver.java +++ b/core/java/android/app/admin/DeviceAdminReceiver.java @@ -383,8 +383,8 @@ public class DeviceAdminReceiver extends BroadcastReceiver { * * <p> If the admin is activated by a device owner, then the intent * may contain private extras that are relevant to user setup. - * {@see DevicePolicyManager#createAndInitializeUser(ComponentName, String, String, - * ComponentName, Intent)} + * {@see DevicePolicyManager#createAndManageUser(ComponentName, String, ComponentName, + * PersistableBundle, int)} * * @param context The running context as per {@link #onReceive}. * @param intent The received intent as per {@link #onReceive}. diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java index ae63a2f0704d..74fe13ac1961 100644 --- a/core/java/android/app/admin/DevicePolicyManager.java +++ b/core/java/android/app/admin/DevicePolicyManager.java @@ -341,6 +341,7 @@ public class DevicePolicyManager { * * @hide */ + @SystemApi @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) public static final String ACTION_PROVISION_FINALIZATION = "android.app.action.PROVISION_FINALIZATION"; @@ -932,30 +933,35 @@ public class DevicePolicyManager { * No management for current user in-effect. This is the default. * @hide */ + @SystemApi public static final int STATE_USER_UNMANAGED = 0; /** * Management partially setup, user setup needs to be completed. * @hide */ + @SystemApi public static final int STATE_USER_SETUP_INCOMPLETE = 1; /** * Management partially setup, user setup completed. * @hide */ + @SystemApi public static final int STATE_USER_SETUP_COMPLETE = 2; /** * Management setup and active on current user. * @hide */ + @SystemApi public static final int STATE_USER_SETUP_FINALIZED = 3; /** * Management partially setup on a managed profile. * @hide */ + @SystemApi public static final int STATE_USER_PROFILE_COMPLETE = 4; /** @@ -1059,6 +1065,9 @@ public class DevicePolicyManager { * by the application that owns the administration component; if you * try to remove someone else's component, a security exception will be * thrown. + * + * <p>Note that the operation is not synchronous and the admin might still be active (as + * indicated by {@link #getActiveAdmins()}) by the time this method returns. */ public void removeActiveAdmin(@NonNull ComponentName admin) { if (mService != null) { @@ -2677,8 +2686,16 @@ public class DevicePolicyManager { } /** - * Called by a device or profile owner to install a certificate and private key pair. The - * keypair will be visible to all apps within the profile. + * Called by a device or profile owner, or delegated certificate installer, to install a + * certificate and corresponding private key. All apps within the profile will be able to access + * the certificate and use the private key, given direct user approval. + * + * <p>Access to the installed credentials will not be granted to the caller of this API without + * direct user approval. This is for security - should a certificate installer become + * compromised, certificates it had already installed will be protected. + * + * <p>If the installer must have access to the credentials, call + * {@link #installKeyPair(ComponentName, PrivateKey, Certificate, String, boolean)} instead. * * @param admin Which {@link DeviceAdminReceiver} this request is associated with, or * {@code null} if calling from a delegated certificate installer. @@ -2690,11 +2707,35 @@ public class DevicePolicyManager { */ public boolean installKeyPair(@Nullable ComponentName admin, @NonNull PrivateKey privKey, @NonNull Certificate cert, @NonNull String alias) { + return installKeyPair(admin, privKey, cert, alias, false); + } + + /** + * Called by a device or profile owner, or delegated certificate installer, to install a + * certificate and corresponding private key. All apps within the profile will be able to access + * the certificate and use the private key, given direct user approval. + * + * <p>The caller of this API may grant itself access to the credential immediately, without user + * approval. It is a best practice not to request this unless strictly necessary since it opens + * up additional security vulnerabilities. + * + * @param admin Which {@link DeviceAdminReceiver} this request is associated with, or + * {@code null} if calling from a delegated certificate installer. + * @param privKey The private key to install. + * @param cert The certificate to install. + * @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. + * @return {@code true} if the keys were installed, {@code false} otherwise. + */ + public boolean installKeyPair(@Nullable ComponentName admin, @NonNull PrivateKey privKey, + @NonNull Certificate cert, @NonNull String alias, boolean requestAccess) { try { final byte[] pemCert = Credentials.convertToPem(cert); final byte[] pkcs8Key = KeyFactory.getInstance(privKey.getAlgorithm()) .getKeySpec(privKey, PKCS8EncodedKeySpec.class).getEncoded(); - return mService.installKeyPair(admin, pkcs8Key, pemCert, alias); + return mService.installKeyPair(admin, pkcs8Key, pemCert, alias, requestAccess); } catch (RemoteException e) { Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, e); } catch (NoSuchAlgorithmException | InvalidKeySpecException e) { @@ -2706,8 +2747,8 @@ public class DevicePolicyManager { } /** - * Called by a device or profile owner to remove all user credentials installed under a given - * alias. + * Called by a device or profile owner, or delegated certificate installer, to remove all user + * credentials installed under a given alias. * * @param admin Which {@link DeviceAdminReceiver} this request is associated with, or * {@code null} if calling from a delegated certificate installer. @@ -3131,31 +3172,6 @@ public class DevicePolicyManager { } /** - * Returns the DeviceAdminInfo as defined by the administrator's package info & meta-data - * @hide - */ - public DeviceAdminInfo getAdminInfo(@NonNull ComponentName cn) { - ActivityInfo ai; - try { - ai = mContext.getPackageManager().getReceiverInfo(cn, - PackageManager.GET_META_DATA); - } catch (PackageManager.NameNotFoundException e) { - Log.w(TAG, "Unable to retrieve device policy " + cn, e); - return null; - } - - ResolveInfo ri = new ResolveInfo(); - ri.activityInfo = ai; - - try { - return new DeviceAdminInfo(mContext, ri); - } catch (XmlPullParserException | IOException e) { - Log.w(TAG, "Unable to parse device policy " + cn, e); - return null; - } - } - - /** * @hide */ public void getRemoveWarning(@Nullable ComponentName admin, RemoteCallback result) { @@ -4536,14 +4552,10 @@ public class DevicePolicyManager { * user could not be created. * * @deprecated From {@link android.os.Build.VERSION_CODES#M} + * @removed From {@link android.os.Build.VERSION_CODES#N} */ @Deprecated public UserHandle createUser(@NonNull ComponentName admin, String name) { - try { - return mService.createUser(admin, name); - } catch (RemoteException re) { - Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, re); - } return null; } @@ -4573,16 +4585,11 @@ public class DevicePolicyManager { * user could not be created. * * @deprecated From {@link android.os.Build.VERSION_CODES#M} + * @removed From {@link android.os.Build.VERSION_CODES#N} */ @Deprecated public UserHandle createAndInitializeUser(@NonNull ComponentName admin, String name, String ownerName, @NonNull ComponentName profileOwnerComponent, Bundle adminExtras) { - try { - return mService.createAndInitializeUser(admin, name, ownerName, profileOwnerComponent, - adminExtras); - } catch (RemoteException re) { - Log.w(TAG, REMOTE_EXCEPTION_MESSAGE, re); - } return null; } @@ -5897,6 +5904,7 @@ public class DevicePolicyManager { * return {@link #STATE_USER_UNMANAGED} * @hide */ + @SystemApi @UserProvisioningState public int getUserProvisioningState() { if (mService != null) { diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl index e9af8727012a..b7a16aa0dc07 100644 --- a/core/java/android/app/admin/IDevicePolicyManager.aidl +++ b/core/java/android/app/admin/IDevicePolicyManager.aidl @@ -145,7 +145,8 @@ interface IDevicePolicyManager { void uninstallCaCerts(in ComponentName admin, in String[] aliases); void enforceCanManageCaCerts(in ComponentName admin); - boolean installKeyPair(in ComponentName who, in byte[] privKeyBuffer, in byte[] certBuffer, String alias); + boolean installKeyPair(in ComponentName who, in byte[] privKeyBuffer, in byte[] certBuffer, + String alias, boolean requestAccess); boolean removeKeyPair(in ComponentName who, String alias); void choosePrivateKeyAlias(int uid, in Uri uri, in String alias, IBinder aliasCallback); @@ -185,8 +186,6 @@ interface IDevicePolicyManager { boolean setApplicationHidden(in ComponentName admin, in String packageName, boolean hidden); boolean isApplicationHidden(in ComponentName admin, in String packageName); - UserHandle createUser(in ComponentName who, in String name); - UserHandle createAndInitializeUser(in ComponentName who, in String name, in String profileOwnerName, in ComponentName profileOwnerComponent, in Bundle adminExtras); UserHandle createAndManageUser(in ComponentName who, in String name, in ComponentName profileOwner, in PersistableBundle adminExtras, in int flags); boolean removeUser(in ComponentName who, in UserHandle userHandle); boolean switchUser(in ComponentName who, in UserHandle userHandle); diff --git a/core/java/android/app/backup/BackupManager.java b/core/java/android/app/backup/BackupManager.java index 2268400ed573..7fcca0969f75 100644 --- a/core/java/android/app/backup/BackupManager.java +++ b/core/java/android/app/backup/BackupManager.java @@ -468,7 +468,7 @@ public class BackupManager { * * @param packages List of package names to backup. * @param observer The {@link BackupObserver} to receive callbacks during the backup - * operation. + * operation. Could be {@code null}. * @return {@link BackupManager#SUCCESS} on success; nonzero on error. * @exception IllegalArgumentException on null or empty {@code packages} param. * @@ -479,8 +479,9 @@ public class BackupManager { checkServiceBinder(); if (sService != null) { try { - BackupObserverWrapper observerWrapper = - new BackupObserverWrapper(mContext, observer); + BackupObserverWrapper observerWrapper = observer == null + ? null + : new BackupObserverWrapper(mContext, observer); return sService.requestBackup(packages, observerWrapper); } catch (RemoteException e) { Log.e(TAG, "requestBackup() couldn't connect"); diff --git a/core/java/android/app/job/IJobScheduler.aidl b/core/java/android/app/job/IJobScheduler.aidl index f0c33023292b..3379f2ec7c9c 100644 --- a/core/java/android/app/job/IJobScheduler.aidl +++ b/core/java/android/app/job/IJobScheduler.aidl @@ -24,7 +24,7 @@ import android.app.job.JobInfo; */ interface IJobScheduler { int schedule(in JobInfo job); - int scheduleAsPackage(in JobInfo job, String packageName, int userId); + int scheduleAsPackage(in JobInfo job, String packageName, int userId, String tag); void cancel(int jobId); void cancelAll(); List<JobInfo> getAllPendingJobs(); diff --git a/core/java/android/app/job/JobInfo.java b/core/java/android/app/job/JobInfo.java index 5398e7f2dc95..4cbaf6cbf087 100644 --- a/core/java/android/app/job/JobInfo.java +++ b/core/java/android/app/job/JobInfo.java @@ -83,6 +83,31 @@ public class JobInfo implements Parcelable { */ public static final int DEFAULT_BACKOFF_POLICY = BACKOFF_POLICY_EXPONENTIAL; + /** + * Default of {@link #getPriority}. + * @hide + */ + public static final int PRIORITY_DEFAULT = 0; + + /** + * Value of {@link #getPriority} for expedited syncs. + * @hide + */ + public static final int PRIORITY_SYNC_EXPEDITED = 10; + + /** + * Value of {@link #getPriority} for first time initialization syncs. + * @hide + */ + public static final int PRIORITY_SYNC_INITIALIZATION = 20; + + /** + * Value of {@link #getPriority} for the current foreground app (overrides the supplied + * JobInfo priority if it is smaller). + * @hide + */ + public static final int PRIORITY_FOREGROUND_APP = 30; + private final int jobId; private final PersistableBundle extras; private final ComponentName service; @@ -406,7 +431,7 @@ public class JobInfo implements Parcelable { private int mJobId; private PersistableBundle mExtras = PersistableBundle.EMPTY; private ComponentName mJobService; - private int mPriority; + private int mPriority = PRIORITY_DEFAULT; // Requirements. private boolean mRequiresCharging; private boolean mRequiresDeviceIdle; diff --git a/core/java/android/app/job/JobScheduler.java b/core/java/android/app/job/JobScheduler.java index 5e1a425606f3..d1e563f90f2d 100644 --- a/core/java/android/app/job/JobScheduler.java +++ b/core/java/android/app/job/JobScheduler.java @@ -68,10 +68,11 @@ public abstract class JobScheduler { * @param packageName The package on behalf of which the job is to be scheduled. This will be * used to track battery usage and appIdleState. * @param userId User on behalf of whom this job is to be scheduled. + * @param tag Debugging tag for dumps associated with this job (instead of the service class) * @return {@link #RESULT_SUCCESS} or {@link #RESULT_FAILURE} * @hide */ - public abstract int scheduleAsPackage(JobInfo job, String packageName, int userId); + public abstract int scheduleAsPackage(JobInfo job, String packageName, int userId, String tag); /** * Cancel a job that is pending in the JobScheduler. diff --git a/core/java/android/app/usage/IUsageStatsManager.aidl b/core/java/android/app/usage/IUsageStatsManager.aidl index a9328bce0612..342c2858ab0f 100644 --- a/core/java/android/app/usage/IUsageStatsManager.aidl +++ b/core/java/android/app/usage/IUsageStatsManager.aidl @@ -33,4 +33,5 @@ interface IUsageStatsManager { void setAppInactive(String packageName, boolean inactive, int userId); boolean isAppInactive(String packageName, int userId); void whitelistAppTemporarily(String packageName, long duration, int userId); + void onCarrierPrivilegedAppsChanged(); } diff --git a/core/java/android/app/usage/UsageStatsManager.java b/core/java/android/app/usage/UsageStatsManager.java index c74b0f2d8e43..2aeecfabd48c 100644 --- a/core/java/android/app/usage/UsageStatsManager.java +++ b/core/java/android/app/usage/UsageStatsManager.java @@ -267,4 +267,15 @@ public final class UsageStatsManager { } catch (RemoteException re) { } } + + /** + * Inform usage stats that the carrier privileged apps access rules have changed. + * @hide + */ + public void onCarrierPrivilegedAppsChanged() { + try { + mService.onCarrierPrivilegedAppsChanged(); + } catch (RemoteException re) { + } + } } diff --git a/core/java/android/auditing/SecurityLog.java b/core/java/android/auditing/SecurityLog.java index f1703d644bb8..829685b83b5b 100644 --- a/core/java/android/auditing/SecurityLog.java +++ b/core/java/android/auditing/SecurityLog.java @@ -64,7 +64,8 @@ public class SecurityLog { public static final int TAG_SYNC_SEND_FILE = SecurityLogTags.SECURITY_ADB_SYNC_SEND; /** * Indicate that an app process was started. The log entry contains the following - * information about the process in order, accessible via {@link SecurityEvent#getData()}}: + * information about the process encapsulated in an {@link Object} array, accessible via + * {@link SecurityEvent#getData()}: * process name (String), exact start time (long), app Uid (integer), app Pid (integer), * seinfo tag (String), SHA-256 hash of the APK in hexadecimal (String) */ @@ -77,10 +78,10 @@ public class SecurityLog { SecurityLogTags.SECURITY_KEYGUARD_DISMISSED; /** * Indicate that there has been an authentication attempt to dismiss the keyguard. The log entry - * contains the following information about the attempt in order, accessible via - * {@link SecurityEvent#getData()}}: attempt result (integer, 1 for successful, 0 for - * unsuccessful), strength of auth method (integer, 1 if strong auth method was used, - * 0 otherwise) + * contains the following information about the attempt encapsulated in an {@link Object} array, + * accessible via {@link SecurityEvent#getData()}: + * attempt result (integer, 1 for successful, 0 for unsuccessful), strength of auth method + * (integer, 1 if strong auth method was used, 0 otherwise) */ public static final int TAG_KEYGUARD_DISMISS_AUTH_ATTEMPT = SecurityLogTags.SECURITY_KEYGUARD_DISMISS_AUTH_ATTEMPT; diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index 0cdbef0b770b..b935b256b880 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -2863,6 +2863,16 @@ public abstract class Context { /** * Use with {@link #getSystemService} to retrieve a + * {@link android.os.RecoverySystem} for accessing the recovery system + * service. + * + * @see #getSystemService + * @hide + */ + public static final String RECOVERY_SERVICE = "recovery"; + + /** + * Use with {@link #getSystemService} to retrieve a * {@link android.view.WindowManager} for accessing the system's window * manager. * diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java index 8f2b9c8a32c2..09fa5e11829b 100644 --- a/core/java/android/content/Intent.java +++ b/core/java/android/content/Intent.java @@ -16,24 +16,13 @@ package android.content; -import android.content.pm.ApplicationInfo; -import android.os.ResultReceiver; -import android.os.ShellCommand; -import android.provider.MediaStore; -import android.util.ArraySet; - -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; - import android.annotation.AnyRes; import android.annotation.IntDef; import android.annotation.SdkConstant; -import android.annotation.SystemApi; import android.annotation.SdkConstant.SdkConstantType; +import android.annotation.SystemApi; import android.content.pm.ActivityInfo; - -import static android.content.ContentProvider.maybeAddUserId; - +import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.Resources; @@ -41,21 +30,24 @@ import android.content.res.TypedArray; import android.graphics.Rect; import android.net.Uri; import android.os.Bundle; -import android.os.Environment; import android.os.IBinder; import android.os.Parcel; import android.os.Parcelable; import android.os.Process; +import android.os.ResultReceiver; +import android.os.ShellCommand; import android.os.StrictMode; import android.os.UserHandle; import android.provider.DocumentsContract; import android.provider.DocumentsProvider; +import android.provider.MediaStore; import android.provider.OpenableColumns; +import android.util.ArraySet; import android.util.AttributeSet; import android.util.Log; - import com.android.internal.util.XmlUtils; - +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; import java.io.IOException; @@ -71,6 +63,8 @@ import java.util.Locale; import java.util.Objects; import java.util.Set; +import static android.content.ContentProvider.maybeAddUserId; + /** * An intent is an abstract description of an operation to be performed. It * can be used with {@link Context#startActivity(Intent) startActivity} to @@ -759,6 +753,14 @@ public class Intent implements Parcelable, Cloneable { "android.intent.extra.shortcut.ICON_RESOURCE"; /** + * An activity that provides a user interface for adjusting application preferences. + * Optional but recommended settings for all applications which have settings. + */ + @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION) + public static final String ACTION_APPLICATION_PREFERENCES + = "android.intent.action.APPLICATION_PREFERENCES"; + + /** * Represents a shortcut/live folder icon resource. * * @see Intent#ACTION_CREATE_SHORTCUT diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 188e1d7d92b0..4dd8155f1b10 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -602,7 +602,8 @@ public abstract class PackageManager { /** * Flag parameter for {@link #installPackage} to indicate that it is okay * to install an update to an app where the newly installed app has a lower - * version code than the currently installed app. + * version code than the currently installed app. This is permitted only if + * the currently installed app is marked debuggable. * * @hide */ @@ -1573,6 +1574,48 @@ public abstract class PackageManager { /** * Feature for {@link #getSystemAvailableFeatures} and + * {@link #hasSystemFeature}: If this feature is supported, the Vulkan native API will enumerate + * at least one {@code VkPhysicalDevice}, and the feature version will indicate what + * level of optional hardware features limits it supports. + * <p> + * Level 0 includes the base Vulkan requirements as well as: + * <ul><li>{@code VkPhysicalDeviceFeatures::textureCompressionETC2}</li></ul> + * <p> + * Level 1 additionally includes: + * <ul> + * <li>{@code VkPhysicalDeviceFeatures::fullDrawIndexUint32}</li> + * <li>{@code VkPhysicalDeviceFeatures::imageCubeArray}</li> + * <li>{@code VkPhysicalDeviceFeatures::independentBlend}</li> + * <li>{@code VkPhysicalDeviceFeatures::geometryShader}</li> + * <li>{@code VkPhysicalDeviceFeatures::tessellationShader}</li> + * <li>{@code VkPhysicalDeviceFeatures::sampleRateShading}</li> + * <li>{@code VkPhysicalDeviceFeatures::textureCompressionASTC_LDR}</li> + * <li>{@code VkPhysicalDeviceFeatures::fragmentStoresAndAtomics}</li> + * <li>{@code VkPhysicalDeviceFeatures::shaderImageGatherExtended}</li> + * <li>{@code VkPhysicalDeviceFeatures::shaderUniformBufferArrayDynamicIndexing}</li> + * <li>{@code VkPhysicalDeviceFeatures::shaderSampledImageArrayDynamicIndexing}</li> + * </ul> + */ + @SdkConstant(SdkConstantType.FEATURE) + public static final String FEATURE_VULKAN_HARDWARE_LEVEL = "android.hardware.vulkan.level"; + + /** + * Feature for {@link #getSystemAvailableFeatures} and + * {@link #hasSystemFeature}: The version of this feature indicates the highest + * {@code VkPhysicalDeviceProperties::apiVersion} supported by the physical devices that support + * the hardware level indicated by {@link #FEATURE_VULKAN_HARDWARE_LEVEL}. The feature version + * uses the same encoding as Vulkan version numbers: + * <ul> + * <li>Major version number in bits 31-22</li> + * <li>Minor version number in bits 21-12</li> + * <li>Patch version number in bits 11-0</li> + * </ul> + */ + @SdkConstant(SdkConstantType.FEATURE) + public static final String FEATURE_VULKAN_HARDWARE_VERSION = "android.hardware.vulkan.version"; + + /** + * Feature for {@link #getSystemAvailableFeatures} and * {@link #hasSystemFeature}: The device includes an accelerometer. */ @SdkConstant(SdkConstantType.FEATURE) @@ -4059,7 +4102,7 @@ public abstract class PackageManager { * * @return A list of {@link InstrumentationInfo} objects containing one * entry for each matching instrumentation. If there are no - * instrumentation available, returns and empty list. + * instrumentation available, returns an empty list. * * @see #GET_META_DATA */ diff --git a/core/java/android/content/pm/PermissionInfo.java b/core/java/android/content/pm/PermissionInfo.java index 9da2ba9ce59d..984a960b5308 100644 --- a/core/java/android/content/pm/PermissionInfo.java +++ b/core/java/android/content/pm/PermissionInfo.java @@ -16,6 +16,7 @@ package android.content.pm; +import android.annotation.SystemApi; import android.os.Parcel; import android.os.Parcelable; import android.text.TextUtils; @@ -145,11 +146,12 @@ public class PermissionInfo extends PackageItemInfo implements Parcelable { public static final int FLAG_COSTS_MONEY = 1<<0; /** - * Flag for {@link #flags}, corresponding to <code>hidden</code> + * Flag for {@link #flags}, corresponding to <code>removed</code> * value of {@link android.R.attr#permissionFlags}. * @hide */ - public static final int FLAG_HIDDEN = 1<<1; + @SystemApi + public static final int FLAG_REMOVED = 1<<1; /** * Flag for {@link #flags}, indicating that this permission has been diff --git a/core/java/android/content/pm/UserInfo.java b/core/java/android/content/pm/UserInfo.java index 9cf467534daf..3139151b78a0 100644 --- a/core/java/android/content/pm/UserInfo.java +++ b/core/java/android/content/pm/UserInfo.java @@ -73,6 +73,9 @@ public class UserInfo implements Parcelable { /** * Indicates that this user is disabled. + * + * <p>Note: If an ephemeral user is disabled, it shouldn't be later re-enabled. Ephemeral users + * are disabled as their removal is in progress to indicate that they shouldn't be re-entered. */ public static final int FLAG_DISABLED = 0x00000040; @@ -171,6 +174,10 @@ public class UserInfo implements Parcelable { * @return true if this user can be switched to. **/ public boolean supportsSwitchTo() { + if (isEphemeral() && !isEnabled()) { + // Don't support switching to an ephemeral user with removal in progress. + return false; + } // TODO remove fw.show_hidden_users when we have finished developing managed profiles. return !isManagedProfile() || SystemProperties.getBoolean("fw.show_hidden_users", false); } diff --git a/core/java/android/content/res/Resources.java b/core/java/android/content/res/Resources.java index 915fae0ff6b5..a9150e88701f 100644 --- a/core/java/android/content/res/Resources.java +++ b/core/java/android/content/res/Resources.java @@ -769,7 +769,6 @@ public class Resources { * @deprecated Use {@link #getDrawable(int, Theme)} instead. */ @Deprecated - @Nullable public Drawable getDrawable(@DrawableRes int id) throws NotFoundException { final Drawable d = getDrawable(id, null); if (d != null && d.canApplyTheme()) { @@ -794,7 +793,6 @@ public class Resources { * @throws NotFoundException Throws NotFoundException if the given ID does * not exist. */ - @Nullable public Drawable getDrawable(@DrawableRes int id, @Nullable Theme theme) throws NotFoundException { final TypedValue value = obtainTempTypedValue(id); @@ -832,7 +830,6 @@ public class Resources { * @deprecated Use {@link #getDrawableForDensity(int, int, Theme)} instead. */ @Deprecated - @Nullable public Drawable getDrawableForDensity(@DrawableRes int id, int density) throws NotFoundException { return getDrawableForDensity(id, density, null); @@ -852,7 +849,6 @@ public class Resources { * @throws NotFoundException Throws NotFoundException if the given ID does * not exist. */ - @Nullable public Drawable getDrawableForDensity(@DrawableRes int id, int density, @Nullable Theme theme) { final TypedValue value = obtainTempTypedValue(id); try { diff --git a/core/java/android/hardware/Camera.java b/core/java/android/hardware/Camera.java index 02d4e59af6e4..3dbe437a6c43 100644 --- a/core/java/android/hardware/Camera.java +++ b/core/java/android/hardware/Camera.java @@ -19,6 +19,7 @@ package android.hardware; import android.app.ActivityThread; import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; +import android.app.job.JobInfo; import android.content.Context; import android.graphics.ImageFormat; import android.graphics.Point; @@ -177,19 +178,27 @@ public class Camera { private static final int NO_ERROR = 0; /** + * @deprecated This broadcast is no longer delivered by the system; use + * {@link android.app.job.JobInfo.Builder JobInfo.Builder}.{@link android.app.job.JobInfo.Builder#addTriggerContentUri} + * instead. * Broadcast Action: A new picture is taken by the camera, and the entry of * the picture has been added to the media store. * {@link android.content.Intent#getData} is URI of the picture. */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + @Deprecated public static final String ACTION_NEW_PICTURE = "android.hardware.action.NEW_PICTURE"; /** + * @deprecated This broadcast is no longer delivered by the system; use + * {@link android.app.job.JobInfo.Builder JobInfo.Builder}.{@link android.app.job.JobInfo.Builder#addTriggerContentUri} + * instead. * Broadcast Action: A new video is recorded by the camera, and the entry * of the video has been added to the media store. * {@link android.content.Intent#getData} is URI of the video. */ @SdkConstant(SdkConstantType.BROADCAST_INTENT_ACTION) + @Deprecated public static final String ACTION_NEW_VIDEO = "android.hardware.action.NEW_VIDEO"; /** diff --git a/core/java/android/hardware/camera2/params/StreamConfigurationMap.java b/core/java/android/hardware/camera2/params/StreamConfigurationMap.java index 8be49e8f3ccf..6cc7fece2898 100644 --- a/core/java/android/hardware/camera2/params/StreamConfigurationMap.java +++ b/core/java/android/hardware/camera2/params/StreamConfigurationMap.java @@ -1269,6 +1269,11 @@ public final class StreamConfigurationMap { private Size[] getInternalFormatSizes(int format, int dataspace, boolean output, boolean highRes) { + // All depth formats are non-high-res. + if (dataspace == HAL_DATASPACE_DEPTH && highRes) { + return new Size[0]; + } + SparseIntArray formatsMap = !output ? mInputFormats : dataspace == HAL_DATASPACE_DEPTH ? mDepthOutputFormats : @@ -1287,6 +1292,8 @@ public final class StreamConfigurationMap { StreamConfiguration[] configurations = (dataspace == HAL_DATASPACE_DEPTH) ? mDepthConfigurations : mConfigurations; + StreamConfigurationDuration[] minFrameDurations = + (dataspace == HAL_DATASPACE_DEPTH) ? mDepthMinFrameDurations : mMinFrameDurations; for (StreamConfiguration config : configurations) { int fmt = config.getFormat(); @@ -1295,8 +1302,8 @@ public final class StreamConfigurationMap { // Filter slow high-res output formats; include for // highRes, remove for !highRes long duration = 0; - for (int i = 0; i < mMinFrameDurations.length; i++) { - StreamConfigurationDuration d = mMinFrameDurations[i]; + for (int i = 0; i < minFrameDurations.length; i++) { + StreamConfigurationDuration d = minFrameDurations[i]; if (d.getFormat() == fmt && d.getWidth() == config.getSize().getWidth() && d.getHeight() == config.getSize().getHeight()) { @@ -1304,7 +1311,8 @@ public final class StreamConfigurationMap { break; } } - if (highRes != (duration > DURATION_20FPS_NS)) { + if (dataspace != HAL_DATASPACE_DEPTH && + highRes != (duration > DURATION_20FPS_NS)) { continue; } } diff --git a/core/java/android/hardware/fingerprint/FingerprintManager.java b/core/java/android/hardware/fingerprint/FingerprintManager.java index 9f8c28ee1216..abd02f0ecc9b 100644 --- a/core/java/android/hardware/fingerprint/FingerprintManager.java +++ b/core/java/android/hardware/fingerprint/FingerprintManager.java @@ -40,6 +40,7 @@ import java.util.List; import javax.crypto.Cipher; import javax.crypto.Mac; +import static android.Manifest.permission.INTERACT_ACROSS_USERS; import static android.Manifest.permission.USE_FINGERPRINT; import static android.Manifest.permission.MANAGE_FINGERPRINT; @@ -655,8 +656,23 @@ public class FingerprintManager { @RequiresPermission(USE_FINGERPRINT) public boolean hasEnrolledFingerprints() { if (mService != null) try { - return mService.hasEnrolledFingerprints(UserHandle.myUserId(), - mContext.getOpPackageName()); + return mService.hasEnrolledFingerprints( + UserHandle.myUserId(), mContext.getOpPackageName()); + } catch (RemoteException e) { + Log.v(TAG, "Remote exception in getEnrolledFingerprints: ", e); + } + return false; + } + + /** + * @hide + */ + @RequiresPermission(allOf = { + USE_FINGERPRINT, + INTERACT_ACROSS_USERS}) + public boolean hasEnrolledFingerprints(int userId) { + if (mService != null) try { + return mService.hasEnrolledFingerprints(userId, mContext.getOpPackageName()); } catch (RemoteException e) { Log.v(TAG, "Remote exception in getEnrolledFingerprints: ", e); } diff --git a/core/java/android/hardware/soundtrigger/IRecognitionStatusCallback.aidl b/core/java/android/hardware/soundtrigger/IRecognitionStatusCallback.aidl index 597efa566d2c..dcc336966810 100644 --- a/core/java/android/hardware/soundtrigger/IRecognitionStatusCallback.aidl +++ b/core/java/android/hardware/soundtrigger/IRecognitionStatusCallback.aidl @@ -26,10 +26,20 @@ oneway interface IRecognitionStatusCallback { * Called when the keyphrase is spoken. * * @param recognitionEvent Object containing data relating to the - * recognition event such as trigger audio data, if it was requested - * and is available. + * keyphrase recognition event such as keyphrase + * extras. */ - void onDetected(in SoundTrigger.RecognitionEvent recognitionEvent); + void onKeyphraseDetected(in SoundTrigger.KeyphraseRecognitionEvent recognitionEvent); + + /** + * Called when a generic sound trigger event is witnessed. + * + * @param recognitionEvent Object containing data relating to the + * recognition event such as trigger audio data (if + * requested). + */ + + void onGenericSoundTriggerDetected(in SoundTrigger.GenericRecognitionEvent recognitionEvent); /** * Called when the detection fails due to an error. diff --git a/core/java/android/hardware/soundtrigger/SoundTrigger.aidl b/core/java/android/hardware/soundtrigger/SoundTrigger.aidl index fec64ea338ea..325a9addc8ff 100644 --- a/core/java/android/hardware/soundtrigger/SoundTrigger.aidl +++ b/core/java/android/hardware/soundtrigger/SoundTrigger.aidl @@ -20,7 +20,7 @@ parcelable SoundTrigger.ConfidenceLevel; parcelable SoundTrigger.Keyphrase; parcelable SoundTrigger.RecognitionEvent; parcelable SoundTrigger.KeyphraseRecognitionEvent; -parcelable SoundTrigger.GenericSoundRecognitionEvent; +parcelable SoundTrigger.GenericRecognitionEvent; parcelable SoundTrigger.KeyphraseRecognitionExtra; parcelable SoundTrigger.KeyphraseSoundModel; parcelable SoundTrigger.GenericSoundModel; diff --git a/core/java/android/hardware/soundtrigger/SoundTrigger.java b/core/java/android/hardware/soundtrigger/SoundTrigger.java index 882908a9f46e..cc2b7643d3e6 100644 --- a/core/java/android/hardware/soundtrigger/SoundTrigger.java +++ b/core/java/android/hardware/soundtrigger/SoundTrigger.java @@ -595,7 +595,7 @@ public class SoundTrigger { } }; - private static RecognitionEvent fromParcel(Parcel in) { + protected static RecognitionEvent fromParcel(Parcel in) { int status = in.readInt(); int soundModelHandle = in.readInt(); boolean captureAvailable = in.readByte() == 1; @@ -980,7 +980,7 @@ public class SoundTrigger { public static final Parcelable.Creator<KeyphraseRecognitionEvent> CREATOR = new Parcelable.Creator<KeyphraseRecognitionEvent>() { public KeyphraseRecognitionEvent createFromParcel(Parcel in) { - return KeyphraseRecognitionEvent.fromParcel(in); + return KeyphraseRecognitionEvent.fromParcelForKeyphrase(in); } public KeyphraseRecognitionEvent[] newArray(int size) { @@ -988,7 +988,7 @@ public class SoundTrigger { } }; - private static KeyphraseRecognitionEvent fromParcel(Parcel in) { + private static KeyphraseRecognitionEvent fromParcelForKeyphrase(Parcel in) { int status = in.readInt(); int soundModelHandle = in.readInt(); boolean captureAvailable = in.readByte() == 1; @@ -1094,6 +1094,40 @@ public class SoundTrigger { captureDelayMs, capturePreambleMs, triggerInData, captureFormat, data); } + + public static final Parcelable.Creator<GenericRecognitionEvent> CREATOR + = new Parcelable.Creator<GenericRecognitionEvent>() { + public GenericRecognitionEvent createFromParcel(Parcel in) { + return GenericRecognitionEvent.fromParcelForGeneric(in); + } + + public GenericRecognitionEvent[] newArray(int size) { + return new GenericRecognitionEvent[size]; + } + }; + + private static GenericRecognitionEvent fromParcelForGeneric(Parcel in) { + RecognitionEvent event = RecognitionEvent.fromParcel(in); + return new GenericRecognitionEvent(event.status, event.soundModelHandle, + event.captureAvailable, event.captureSession, event.captureDelayMs, + event.capturePreambleMs, event.triggerInData, event.captureFormat, event.data); + } + + @Override + public boolean equals(Object obj) { + if (this == obj) + return true; + if (obj == null) + return false; + if (getClass() != obj.getClass()) return false; + RecognitionEvent other = (RecognitionEvent) obj; + return super.equals(obj); + } + + @Override + public String toString() { + return "GenericRecognitionEvent ::" + super.toString(); + } } /** diff --git a/core/java/android/net/ConnectivityMetricsEvent.aidl b/core/java/android/net/ConnectivityMetricsEvent.aidl new file mode 100644 index 000000000000..da175614b588 --- /dev/null +++ b/core/java/android/net/ConnectivityMetricsEvent.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net; + +parcelable ConnectivityMetricsEvent; diff --git a/core/java/android/net/ConnectivityMetricsEvent.java b/core/java/android/net/ConnectivityMetricsEvent.java new file mode 100644 index 000000000000..d040a8563440 --- /dev/null +++ b/core/java/android/net/ConnectivityMetricsEvent.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net; + +import android.annotation.SystemApi; +import android.os.Parcel; +import android.os.Parcelable; + +@SystemApi +public class ConnectivityMetricsEvent implements Parcelable { + + /** The time when this event was collected, as returned by System.currentTimeMillis(). */ + final public long timestamp; + + /** The subsystem that generated the event. One of the COMPONENT_TAG_xxx constants. */ + final public int componentTag; + + /** The subsystem-specific event ID. */ + final public int eventTag; + + /** Opaque event-specific data. */ + final public Parcelable data; + + public ConnectivityMetricsEvent(long timestamp, int componentTag, + int eventTag, Parcelable data) { + this.timestamp = timestamp; + this.componentTag = componentTag; + this.eventTag = eventTag; + this.data = data; + } + + /** Implement the Parcelable interface */ + public static final Parcelable.Creator<ConnectivityMetricsEvent> CREATOR + = new Parcelable.Creator<ConnectivityMetricsEvent> (){ + public ConnectivityMetricsEvent createFromParcel(Parcel source) { + final long timestamp = source.readLong(); + final int componentTag = source.readInt(); + final int eventTag = source.readInt(); + final Parcelable data = source.readParcelable(null); + return new ConnectivityMetricsEvent(timestamp, componentTag, + eventTag, data); + } + + public ConnectivityMetricsEvent[] newArray(int size) { + return new ConnectivityMetricsEvent[size]; + } + }; + + /** Implement the Parcelable interface */ + @Override + public int describeContents() { + return 0; + } + + /** Implement the Parcelable interface */ + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeLong(timestamp); + dest.writeInt(componentTag); + dest.writeInt(eventTag); + dest.writeParcelable(data, 0); + } + + public String toString() { + return String.format("ConnectivityMetricsEvent(%d, %d, %d)", timestamp, + componentTag, eventTag); + } +} diff --git a/core/java/android/net/ConnectivityMetricsLogger.java b/core/java/android/net/ConnectivityMetricsLogger.java new file mode 100644 index 000000000000..3ef805017f14 --- /dev/null +++ b/core/java/android/net/ConnectivityMetricsLogger.java @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package android.net; + +import android.os.Parcelable; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.util.Log; + +/** {@hide} */ +public class ConnectivityMetricsLogger { + private static String TAG = "ConnectivityMetricsLogger"; + private static final boolean DBG = true; + + public static final String CONNECTIVITY_METRICS_LOGGER_SERVICE = "connectivity_metrics_logger"; + + // Component Tags + public static final int COMPONENT_TAG_CONNECTIVITY = 1; + public static final int COMPONENT_TAG_BLUETOOTH = 2; + public static final int COMPONENT_TAG_WIFI = 3; + public static final int COMPONENT_TAG_TELECOM = 4; + public static final int COMPONENT_TAG_TELEPHONY = 5; + + private IConnectivityMetricsLogger mService; + + public ConnectivityMetricsLogger() { + mService = IConnectivityMetricsLogger.Stub.asInterface(ServiceManager.getService( + CONNECTIVITY_METRICS_LOGGER_SERVICE)); + } + + public void logEvent(long timestamp, int componentTag, int eventTag, Parcelable data) { + if (mService == null) { + if (DBG) { + Log.d(TAG, "logEvent(" + componentTag + "," + eventTag + ") Service not ready"); + } + } else { + try { + mService.logEvent(new ConnectivityMetricsEvent(timestamp, componentTag, eventTag, data)); + } catch (RemoteException e) { + Log.e(TAG, "Error logging event " + e.getMessage()); + } + } + } +} diff --git a/core/java/android/net/IConnectivityMetricsLogger.aidl b/core/java/android/net/IConnectivityMetricsLogger.aidl new file mode 100644 index 000000000000..27786712a5c5 --- /dev/null +++ b/core/java/android/net/IConnectivityMetricsLogger.aidl @@ -0,0 +1,30 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net; + +import android.net.ConnectivityMetricsEvent; +import android.net.IConnectivityMetricsLoggerSubscriber; + +/** {@hide} */ +interface IConnectivityMetricsLogger { + + void logEvent(in ConnectivityMetricsEvent event); + void logEvents(in ConnectivityMetricsEvent[] events); + + boolean subscribe(in IConnectivityMetricsLoggerSubscriber subscriber); + void unsubscribe(in IConnectivityMetricsLoggerSubscriber subscriber); +} diff --git a/core/java/android/net/IConnectivityMetricsLoggerSubscriber.aidl b/core/java/android/net/IConnectivityMetricsLoggerSubscriber.aidl new file mode 100644 index 000000000000..a2c62cdaee97 --- /dev/null +++ b/core/java/android/net/IConnectivityMetricsLoggerSubscriber.aidl @@ -0,0 +1,25 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.net; + +import android.net.ConnectivityMetricsEvent; + +/** {@hide} */ +oneway interface IConnectivityMetricsLoggerSubscriber { + + void onEvents(in ConnectivityMetricsEvent[] events); +} diff --git a/core/java/android/net/NetworkUtils.java b/core/java/android/net/NetworkUtils.java index 4487cab9e182..c6d919f4d77e 100644 --- a/core/java/android/net/NetworkUtils.java +++ b/core/java/android/net/NetworkUtils.java @@ -57,90 +57,6 @@ public class NetworkUtils { public native static int resetConnections(String interfaceName, int mask); /** - * Start the DHCP client daemon, in order to have it request addresses - * for the named interface. This returns {@code true} if the DHCPv4 daemon - * starts, {@code false} otherwise. This call blocks until such time as a - * result is available or the default discovery timeout has been reached. - * Callers should check {@link #getDhcpResults} to determine whether DHCP - * succeeded or failed, and if it succeeded, to fetch the {@link DhcpResults}. - * @param interfaceName the name of the interface to configure - * @return {@code true} for success, {@code false} for failure - */ - public native static boolean startDhcp(String interfaceName); - - /** - * Initiate renewal on the DHCP client daemon for the named interface. This - * returns {@code true} if the DHCPv4 daemon has been notified, {@code false} - * otherwise. This call blocks until such time as a result is available or - * the default renew timeout has been reached. Callers should check - * {@link #getDhcpResults} to determine whether DHCP succeeded or failed, - * and if it succeeded, to fetch the {@link DhcpResults}. - * @param interfaceName the name of the interface to configure - * @return {@code true} for success, {@code false} for failure - */ - public native static boolean startDhcpRenew(String interfaceName); - - /** - * Start the DHCP client daemon, in order to have it request addresses - * for the named interface, and then configure the interface with those - * addresses. This call blocks until it obtains a result (either success - * or failure) from the daemon. - * @param interfaceName the name of the interface to configure - * @param dhcpResults if the request succeeds, this object is filled in with - * the IP address information. - * @return {@code true} for success, {@code false} for failure - */ - public static boolean runDhcp(String interfaceName, DhcpResults dhcpResults) { - return startDhcp(interfaceName) && getDhcpResults(interfaceName, dhcpResults); - } - - /** - * Initiate renewal on the DHCP client daemon. This call blocks until it obtains - * a result (either success or failure) from the daemon. - * @param interfaceName the name of the interface to configure - * @param dhcpResults if the request succeeds, this object is filled in with - * the IP address information. - * @return {@code true} for success, {@code false} for failure - */ - public static boolean runDhcpRenew(String interfaceName, DhcpResults dhcpResults) { - return startDhcpRenew(interfaceName) && getDhcpResults(interfaceName, dhcpResults); - } - - /** - * Fetch results from the DHCP client daemon. This call returns {@code true} if - * if there are results available to be read, {@code false} otherwise. - * @param interfaceName the name of the interface to configure - * @param dhcpResults if the request succeeds, this object is filled in with - * the IP address information. - * @return {@code true} for success, {@code false} for failure - */ - public native static boolean getDhcpResults(String interfaceName, DhcpResults dhcpResults); - - /** - * Shut down the DHCP client daemon. - * @param interfaceName the name of the interface for which the daemon - * should be stopped - * @return {@code true} for success, {@code false} for failure - */ - public native static boolean stopDhcp(String interfaceName); - - /** - * Release the current DHCP lease. - * @param interfaceName the name of the interface for which the lease should - * be released - * @return {@code true} for success, {@code false} for failure - */ - public native static boolean releaseDhcpLease(String interfaceName); - - /** - * Return the last DHCP-related error message that was recorded. - * <p/>NOTE: This string is not localized, but currently it is only - * used in logging. - * @return the most recent error message, if any - */ - public native static String getDhcpError(); - - /** * Attaches a socket filter that accepts DHCP packets to the given socket. */ public native static void attachDhcpFilter(FileDescriptor fd) throws SocketException; diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index a738b2e9bf61..8281279bec68 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -623,7 +623,7 @@ public abstract class BatteryStats implements Parcelable { /** * The statistics associated with a particular service. */ - public abstract class Serv { + public static abstract class Serv { /** * Returns the amount of time spent started. diff --git a/core/java/android/os/CpuUsageInfo.aidl b/core/java/android/os/CpuUsageInfo.aidl new file mode 100644 index 000000000000..f81aefe4423f --- /dev/null +++ b/core/java/android/os/CpuUsageInfo.aidl @@ -0,0 +1,18 @@ +/* Copyright 2016, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +package android.os; + +parcelable CpuUsageInfo; diff --git a/core/java/android/os/HardwarePropertiesManager.java b/core/java/android/os/HardwarePropertiesManager.java index bc317b672d9c..c72a6481ebed 100644 --- a/core/java/android/os/HardwarePropertiesManager.java +++ b/core/java/android/os/HardwarePropertiesManager.java @@ -17,10 +17,12 @@ package android.os; import android.annotation.IntDef; import android.annotation.NonNull; +import android.content.Context; +import android.util.Log; + import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; - /** * The HardwarePropertiesManager class provides a mechanism of accessing hardware state of a * device: CPU, GPU and battery temperatures, CPU usage per core, fan speed, etc. @@ -29,11 +31,7 @@ public class HardwarePropertiesManager { private static final String TAG = HardwarePropertiesManager.class.getSimpleName(); - private static native void nativeInit(); - - private static native float[] nativeGetFanSpeeds(); - private static native float[] nativeGetDeviceTemperatures(int type); - private static native CpuUsageInfo[] nativeGetCpuUsages(); + private final IHardwarePropertiesManager mService; @Retention(RetentionPolicy.SOURCE) @IntDef({ @@ -54,9 +52,13 @@ public class HardwarePropertiesManager { /** Temperature of battery in Celsius. */ public static final int DEVICE_TEMPERATURE_BATTERY = 2; + /** Calling app context. */ + private final Context mContext; + /** @hide */ - public HardwarePropertiesManager() { - nativeInit(); + public HardwarePropertiesManager(Context context, IHardwarePropertiesManager service) { + mContext = context; + mService = service; } /** @@ -68,13 +70,19 @@ public class HardwarePropertiesManager { * Empty if platform doesn't provide the queried temperature. * * @throws IllegalArgumentException if an incorrect temperature type is queried. + * @throws SecurityException if a non profile or device owner tries to call this method. */ public @NonNull float[] getDeviceTemperatures(@DeviceTemperatureType int type) { switch (type) { case DEVICE_TEMPERATURE_CPU: case DEVICE_TEMPERATURE_GPU: case DEVICE_TEMPERATURE_BATTERY: - return nativeGetDeviceTemperatures(type); + try { + return mService.getDeviceTemperatures(mContext.getOpPackageName(), type); + } catch (RemoteException e) { + Log.w(TAG, "Could not get device temperatures", e); + return new float[0]; + } default: throw new IllegalArgumentException(); } @@ -85,18 +93,32 @@ public class HardwarePropertiesManager { * * @return an array of {@link android.os.CpuUsageInfo} for each core. * Empty if CPU usage is not supported on this system. + * + * @throws SecurityException if a non profile or device owner tries to call this method. */ public @NonNull CpuUsageInfo[] getCpuUsages() { - return nativeGetCpuUsages(); + try { + return mService.getCpuUsages(mContext.getOpPackageName()); + } catch (RemoteException e) { + Log.w(TAG, "Could not get CPU usages", e); + return new CpuUsageInfo[0]; + } } /** * Return an array of fan speeds in RPM. * - * @return an arrat of float fan speeds. Empty if there is no fans or fan speed - * not supported on this system. + * @return an array of float fan speeds in RPM. Empty if there are no fans or fan speed is not + * supported on this system. + * + * @throws SecurityException if a non profile or device owner tries to call this method. */ public @NonNull float[] getFanSpeeds() { - return nativeGetFanSpeeds(); + try { + return mService.getFanSpeeds(mContext.getOpPackageName()); + } catch (RemoteException e) { + Log.w(TAG, "Could not get fan speeds", e); + return new float[0]; + } } } diff --git a/core/java/android/os/IHardwarePropertiesManager.aidl b/core/java/android/os/IHardwarePropertiesManager.aidl new file mode 100644 index 000000000000..bcf0dc85a5e1 --- /dev/null +++ b/core/java/android/os/IHardwarePropertiesManager.aidl @@ -0,0 +1,28 @@ +/* +** +** Copyright 2016, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +package android.os; + +import android.os.CpuUsageInfo; + +/** @hide */ + +interface IHardwarePropertiesManager { + float[] getDeviceTemperatures(String callingPackage, int type); + CpuUsageInfo[] getCpuUsages(String callingPackage); + float[] getFanSpeeds(String callingPackage); +} diff --git a/core/java/android/os/IRecoverySystem.aidl b/core/java/android/os/IRecoverySystem.aidl new file mode 100644 index 000000000000..12830a4996aa --- /dev/null +++ b/core/java/android/os/IRecoverySystem.aidl @@ -0,0 +1,28 @@ +/* //device/java/android/android/os/IRecoverySystem.aidl +** +** Copyright 2016, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +package android.os; + +import android.os.IRecoverySystemProgressListener; + +/** @hide */ + +interface IRecoverySystem { + boolean uncrypt(in String packageFile, IRecoverySystemProgressListener listener); + boolean setupBcb(in String command); + boolean clearBcb(); +} diff --git a/core/java/android/os/IRecoverySystemProgressListener.aidl b/core/java/android/os/IRecoverySystemProgressListener.aidl new file mode 100644 index 000000000000..d6f712ea3240 --- /dev/null +++ b/core/java/android/os/IRecoverySystemProgressListener.aidl @@ -0,0 +1,24 @@ +/* //device/java/android/android/os/IRecoverySystemProgressListener.aidl +** +** Copyright 2016, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +package android.os; + +/** @hide */ + +oneway interface IRecoverySystemProgressListener { + void onProgress(int progress); +} diff --git a/core/java/android/os/PowerManager.java b/core/java/android/os/PowerManager.java index 314b7d5491ff..dcc28d6f01a9 100644 --- a/core/java/android/os/PowerManager.java +++ b/core/java/android/os/PowerManager.java @@ -385,9 +385,9 @@ public final class PowerManager { public static final int GO_TO_SLEEP_FLAG_NO_DOZE = 1 << 0; /** - * The value to pass as the 'reason' argument to reboot() to - * reboot into recovery mode (for applying system updates, doing - * factory resets, etc.). + * The value to pass as the 'reason' argument to reboot() to reboot into + * recovery mode for tasks other than applying system updates, such as + * doing factory resets. * <p> * Requires the {@link android.Manifest.permission#RECOVERY} * permission (in addition to @@ -398,6 +398,18 @@ public final class PowerManager { public static final String REBOOT_RECOVERY = "recovery"; /** + * The value to pass as the 'reason' argument to reboot() to reboot into + * recovery mode for applying system updates. + * <p> + * Requires the {@link android.Manifest.permission#RECOVERY} + * permission (in addition to + * {@link android.Manifest.permission#REBOOT}). + * </p> + * @hide + */ + public static final String REBOOT_RECOVERY_UPDATE = "recovery-update"; + + /** * The value to pass as the 'reason' argument to reboot() when device owner requests a reboot on * the device. * @hide diff --git a/core/java/android/os/RecoverySystem.java b/core/java/android/os/RecoverySystem.java index 154c9bbab312..ddcd63520549 100644 --- a/core/java/android/os/RecoverySystem.java +++ b/core/java/android/os/RecoverySystem.java @@ -16,6 +16,7 @@ package android.os; +import android.annotation.SystemApi; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; @@ -66,15 +67,34 @@ public class RecoverySystem { private static final long PUBLISH_PROGRESS_INTERVAL_MS = 500; /** Used to communicate with recovery. See bootable/recovery/recovery.cpp. */ - private static File RECOVERY_DIR = new File("/cache/recovery"); - private static File BLOCK_MAP_FILE = new File(RECOVERY_DIR, "block.map"); - private static File COMMAND_FILE = new File(RECOVERY_DIR, "command"); - private static File UNCRYPT_FILE = new File(RECOVERY_DIR, "uncrypt_file"); - private static File LOG_FILE = new File(RECOVERY_DIR, "log"); - private static String LAST_PREFIX = "last_"; + private static final File RECOVERY_DIR = new File("/cache/recovery"); + private static final File LOG_FILE = new File(RECOVERY_DIR, "log"); + private static final String LAST_PREFIX = "last_"; + + /** + * The recovery image uses this file to identify the location (i.e. blocks) + * of an OTA package on the /data partition. The block map file is + * generated by uncrypt. + * + * @hide + */ + public static final File BLOCK_MAP_FILE = new File(RECOVERY_DIR, "block.map"); + + /** + * UNCRYPT_PACKAGE_FILE stores the filename to be uncrypt'd, which will be + * read by uncrypt. + * + * @hide + */ + public static final File UNCRYPT_PACKAGE_FILE = new File(RECOVERY_DIR, "uncrypt_file"); // Length limits for reading files. - private static int LOG_FILE_MAX_LENGTH = 64 * 1024; + private static final int LOG_FILE_MAX_LENGTH = 64 * 1024; + + // Prevent concurrent execution of requests. + private static final Object sRequestLock = new Object(); + + private final IRecoverySystem mService; /** * Interface definition for a callback to be invoked regularly as @@ -287,6 +307,89 @@ public class RecoverySystem { } /** + * Process a given package with uncrypt. No-op if the package is not on the + * /data partition. + * + * @param Context the Context to use + * @param packageFile the package to be processed + * @param listener an object to receive periodic progress updates as + * processing proceeds. May be null. + * @param handler the Handler upon which the callbacks will be + * executed. + * + * @throws IOException if there were any errors processing the package file. + * + * @hide + */ + @SystemApi + public static void processPackage(Context context, + File packageFile, + final ProgressListener listener, + final Handler handler) + throws IOException { + String filename = packageFile.getCanonicalPath(); + if (!filename.startsWith("/data/")) { + return; + } + + RecoverySystem rs = (RecoverySystem) context.getSystemService(Context.RECOVERY_SERVICE); + IRecoverySystemProgressListener progressListener = null; + if (listener != null) { + final Handler progressHandler; + if (handler != null) { + progressHandler = handler; + } else { + progressHandler = new Handler(context.getMainLooper()); + } + progressListener = new IRecoverySystemProgressListener.Stub() { + int lastProgress = 0; + long lastPublishTime = System.currentTimeMillis(); + + @Override + public void onProgress(final int progress) { + final long now = System.currentTimeMillis(); + progressHandler.post(new Runnable() { + @Override + public void run() { + if (progress > lastProgress && + now - lastPublishTime > PUBLISH_PROGRESS_INTERVAL_MS) { + lastProgress = progress; + lastPublishTime = now; + listener.onProgress(progress); + } + } + }); + } + }; + } + + if (!rs.uncrypt(filename, progressListener)) { + throw new IOException("process package failed"); + } + } + + /** + * Process a given package with uncrypt. No-op if the package is not on the + * /data partition. + * + * @param Context the Context to use + * @param packageFile the package to be processed + * @param listener an object to receive periodic progress updates as + * processing proceeds. May be null. + * + * @throws IOException if there were any errors processing the package file. + * + * @hide + */ + @SystemApi + public static void processPackage(Context context, + File packageFile, + final ProgressListener listener) + throws IOException { + processPackage(context, packageFile, listener, null); + } + + /** * Reboots the device in order to install the given update * package. * Requires the {@link android.Manifest.permission#REBOOT} permission. @@ -301,30 +404,127 @@ public class RecoverySystem { * fails, or if the reboot itself fails. */ public static void installPackage(Context context, File packageFile) - throws IOException { - String filename = packageFile.getCanonicalPath(); + throws IOException { + installPackage(context, packageFile, false); + } - FileWriter uncryptFile = new FileWriter(UNCRYPT_FILE); - try { - uncryptFile.write(filename + "\n"); - } finally { - uncryptFile.close(); - } - // UNCRYPT_FILE needs to be readable by system server on bootup. - if (!UNCRYPT_FILE.setReadable(true, false)) { - Log.e(TAG, "Error setting readable for " + UNCRYPT_FILE.getCanonicalPath()); + /** + * If the package hasn't been processed (i.e. uncrypt'd), set up + * UNCRYPT_PACKAGE_FILE and delete BLOCK_MAP_FILE to trigger uncrypt during the + * reboot. + * + * @param context the Context to use + * @param packageFile the update package to install. Must be on a + * partition mountable by recovery. + * @param processed if the package has been processed (uncrypt'd). + * + * @throws IOException if writing the recovery command file fails, or if + * the reboot itself fails. + * + * @hide + */ + @SystemApi + public static void installPackage(Context context, File packageFile, boolean processed) + throws IOException { + synchronized (sRequestLock) { + LOG_FILE.delete(); + // Must delete the file in case it was created by system server. + UNCRYPT_PACKAGE_FILE.delete(); + + String filename = packageFile.getCanonicalPath(); + Log.w(TAG, "!!! REBOOTING TO INSTALL " + filename + " !!!"); + + if (!processed && filename.startsWith("/data/")) { + FileWriter uncryptFile = new FileWriter(UNCRYPT_PACKAGE_FILE); + try { + uncryptFile.write(filename + "\n"); + } finally { + uncryptFile.close(); + } + // UNCRYPT_PACKAGE_FILE needs to be readable and writable by system server. + if (!UNCRYPT_PACKAGE_FILE.setReadable(true, false) + || !UNCRYPT_PACKAGE_FILE.setWritable(true, false)) { + Log.e(TAG, "Error setting permission for " + UNCRYPT_PACKAGE_FILE); + } + + BLOCK_MAP_FILE.delete(); + } + + // If the package is on the /data partition, use the block map file as + // the package name instead. + if (filename.startsWith("/data/")) { + filename = "@/cache/recovery/block.map"; + } + + final String filenameArg = "--update_package=" + filename + "\n"; + final String localeArg = "--locale=" + Locale.getDefault().toString() + "\n"; + final String command = filenameArg + localeArg; + + RecoverySystem rs = (RecoverySystem) context.getSystemService( + Context.RECOVERY_SERVICE); + if (!rs.setupBcb(command)) { + throw new IOException("Setup BCB failed"); + } + + // Having set up the BCB (bootloader control block), go ahead and reboot + PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); + pm.reboot(PowerManager.REBOOT_RECOVERY_UPDATE); + + throw new IOException("Reboot failed (no permissions?)"); } - Log.w(TAG, "!!! REBOOTING TO INSTALL " + filename + " !!!"); + } - // If the package is on the /data partition, write the block map file - // into COMMAND_FILE instead. + /** + * Schedule to install the given package on next boot. The caller needs to + * ensure that the package must have been processed (uncrypt'd) if needed. + * It sets up the command in BCB (bootloader control block), which will + * be read by the bootloader and the recovery image. + * + * @param Context the Context to use. + * @param packageFile the package to be installed. + * + * @throws IOException if there were any errors setting up the BCB. + * + * @hide + */ + @SystemApi + public static void scheduleUpdateOnBoot(Context context, File packageFile) + throws IOException { + String filename = packageFile.getCanonicalPath(); + + // If the package is on the /data partition, use the block map file as + // the package name instead. if (filename.startsWith("/data/")) { filename = "@/cache/recovery/block.map"; } - final String filenameArg = "--update_package=" + filename; - final String localeArg = "--locale=" + Locale.getDefault().toString(); - bootCommand(context, filenameArg, localeArg); + final String filenameArg = "--update_package=" + filename + "\n"; + final String localeArg = "--locale=" + Locale.getDefault().toString() + "\n"; + final String command = filenameArg + localeArg; + + RecoverySystem rs = (RecoverySystem) context.getSystemService(Context.RECOVERY_SERVICE); + if (!rs.setupBcb(command)) { + throw new IOException("schedule update on boot failed"); + } + } + + /** + * Cancel any scheduled update by clearing up the BCB (bootloader control + * block). + * + * @param Context the Context to use. + * + * @throws IOException if there were any errors clearing up the BCB. + * + * @hide + */ + @SystemApi + public static void cancelScheduledUpdate(Context context) + throws IOException { + RecoverySystem rs = (RecoverySystem) context.getSystemService(Context.RECOVERY_SERVICE); + if (!rs.clearBcb()) { + throw new IOException("cancel scheduled update failed"); + } } /** @@ -434,27 +634,28 @@ public class RecoverySystem { * @throws IOException if something goes wrong. */ private static void bootCommand(Context context, String... args) throws IOException { - RECOVERY_DIR.mkdirs(); // In case we need it - COMMAND_FILE.delete(); // In case it's not writable - LOG_FILE.delete(); + synchronized (sRequestLock) { + LOG_FILE.delete(); - FileWriter command = new FileWriter(COMMAND_FILE); - try { + StringBuilder command = new StringBuilder(); for (String arg : args) { if (!TextUtils.isEmpty(arg)) { - command.write(arg); - command.write("\n"); + command.append(arg); + command.append("\n"); } } - } finally { - command.close(); - } - // Having written the command file, go ahead and reboot - PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); - pm.reboot(PowerManager.REBOOT_RECOVERY); + // Write the command into BCB (bootloader control block). + RecoverySystem rs = (RecoverySystem) context.getSystemService( + Context.RECOVERY_SERVICE); + rs.setupBcb(command.toString()); - throw new IOException("Reboot failed (no permissions?)"); + // Having set up the BCB, go ahead and reboot. + PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); + pm.reboot(PowerManager.REBOOT_RECOVERY); + + throw new IOException("Reboot failed (no permissions?)"); + } } /** @@ -476,10 +677,10 @@ public class RecoverySystem { // Only remove the OTA package if it's partially processed (uncrypt'd). boolean reservePackage = BLOCK_MAP_FILE.exists(); - if (!reservePackage && UNCRYPT_FILE.exists()) { + if (!reservePackage && UNCRYPT_PACKAGE_FILE.exists()) { String filename = null; try { - filename = FileUtils.readTextFile(UNCRYPT_FILE, 0, null); + filename = FileUtils.readTextFile(UNCRYPT_PACKAGE_FILE, 0, null); } catch (IOException e) { Log.e(TAG, "Error reading uncrypt file", e); } @@ -487,7 +688,7 @@ public class RecoverySystem { // Remove the OTA package on /data that has been (possibly // partially) processed. (Bug: 24973532) if (filename != null && filename.startsWith("/data")) { - if (UNCRYPT_FILE.delete()) { + if (UNCRYPT_PACKAGE_FILE.delete()) { Log.i(TAG, "Deleted: " + filename); } else { Log.e(TAG, "Can't delete: " + filename); @@ -499,13 +700,13 @@ public class RecoverySystem { // the block map file (BLOCK_MAP_FILE) for a package. BLOCK_MAP_FILE // will be created at the end of a successful uncrypt. If seeing this // file, we keep the block map file and the file that contains the - // package name (UNCRYPT_FILE). This is to reduce the work for GmsCore - // to avoid re-downloading everything again. + // package name (UNCRYPT_PACKAGE_FILE). This is to reduce the work for + // GmsCore to avoid re-downloading everything again. String[] names = RECOVERY_DIR.list(); for (int i = 0; names != null && i < names.length; i++) { if (names[i].startsWith(LAST_PREFIX)) continue; if (reservePackage && names[i].equals(BLOCK_MAP_FILE.getName())) continue; - if (reservePackage && names[i].equals(UNCRYPT_FILE.getName())) continue; + if (reservePackage && names[i].equals(UNCRYPT_PACKAGE_FILE.getName())) continue; recursiveDelete(new File(RECOVERY_DIR, names[i])); } @@ -533,6 +734,39 @@ public class RecoverySystem { } /** + * Talks to RecoverySystemService via Binder to trigger uncrypt. + */ + private boolean uncrypt(String packageFile, IRecoverySystemProgressListener listener) { + try { + return mService.uncrypt(packageFile, listener); + } catch (RemoteException unused) { + } + return false; + } + + /** + * Talks to RecoverySystemService via Binder to set up the BCB. + */ + private boolean setupBcb(String command) { + try { + return mService.setupBcb(command); + } catch (RemoteException unused) { + } + return false; + } + + /** + * Talks to RecoverySystemService via Binder to clear up the BCB. + */ + private boolean clearBcb() { + try { + return mService.clearBcb(); + } catch (RemoteException unused) { + } + return false; + } + + /** * Internally, recovery treats each line of the command file as a separate * argv, so we only need to protect against newlines and nulls. */ @@ -546,5 +780,14 @@ public class RecoverySystem { /** * @removed Was previously made visible by accident. */ - public RecoverySystem() { } + public RecoverySystem() { + mService = null; + } + + /** + * @hide + */ + public RecoverySystem(IRecoverySystem service) { + mService = service; + } } diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java index 69d564fc610b..da7f85fc0e1d 100644 --- a/core/java/android/os/UserManager.java +++ b/core/java/android/os/UserManager.java @@ -379,8 +379,7 @@ public class UserManager { * Specifies that the user is not allowed to make outgoing * phone calls. Emergency calls are still permitted. * The default value is <code>false</code>. - * <p>This restriction has no effect on managed profiles since call intents are normally - * forwarded to the primary user. + * <p>This restriction has no effect on managed profiles. * * <p>Key for user restrictions. * <p>Type: Boolean @@ -1372,8 +1371,12 @@ public class UserManager { /** * Sets the user as enabled, if such an user exists. - * Requires {@link android.Manifest.permission#MANAGE_USERS} permission. - * Note that the default is true, it's only that managed profiles might not be enabled. + * + * <p>Requires {@link android.Manifest.permission#MANAGE_USERS} permission. + * + * <p>Note that the default is true, it's only that managed profiles might not be enabled. + * Also ephemeral users can be disabled to indicate that their removal is in progress and they + * shouldn't be re-entered. Therefore ephemeral users should not be re-enabled once disabled. * * @param userHandle the id of the profile to enable * @hide diff --git a/core/java/android/os/UserManagerInternal.java b/core/java/android/os/UserManagerInternal.java index d2ece8bba3ad..f399719fa1fc 100644 --- a/core/java/android/os/UserManagerInternal.java +++ b/core/java/android/os/UserManagerInternal.java @@ -109,6 +109,17 @@ public abstract class UserManagerInternal { public abstract void removeAllUsers(); /** + * Called by the activity manager when the ephemeral user goes to background and its removal + * starts as a result. + * + * <p>It marks the ephemeral user as disabled in order to prevent it from being re-entered + * before its removal finishes. + * + * @param userId the ID of the ephemeral user. + */ + public abstract void onEphemeralUserStop(int userId); + + /** * Same as UserManager.createUser(), but bypasses the check for DISALLOW_ADD_USER. * * <p>Called by the {@link com.android.server.devicepolicy.DevicePolicyManagerService} when diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java index 5d64af577cba..d41bc070d6c1 100644 --- a/core/java/android/preference/Preference.java +++ b/core/java/android/preference/Preference.java @@ -1494,11 +1494,9 @@ public class Preference implements Comparable<Preference> { * @return True if the Preference is persistent. (This is not whether the * value was persisted, since we may not necessarily commit if there * will be a batch commit later.) - * @see #getPersistedString(Set) - * - * @hide Pending API approval + * @see #getPersistedStringSet(Set) */ - protected boolean persistStringSet(Set<String> values) { + public boolean persistStringSet(Set<String> values) { if (shouldPersist()) { // Shouldn't store null if (values.equals(getPersistedStringSet(null))) { @@ -1527,10 +1525,8 @@ public class Preference implements Comparable<Preference> { * @return The value from the SharedPreferences or the default return * value. * @see #persistStringSet(Set) - * - * @hide Pending API approval */ - protected Set<String> getPersistedStringSet(Set<String> defaultReturnValue) { + public Set<String> getPersistedStringSet(Set<String> defaultReturnValue) { if (!shouldPersist()) { return defaultReturnValue; } diff --git a/core/java/android/provider/BlockedNumberContract.java b/core/java/android/provider/BlockedNumberContract.java index ed7c7c5e4868..b9213513cc17 100644 --- a/core/java/android/provider/BlockedNumberContract.java +++ b/core/java/android/provider/BlockedNumberContract.java @@ -239,20 +239,20 @@ public class BlockedNumberContract { public static class SystemContract { /** * A protected broadcast intent action for letting components with - * {@link android.Manifest.permission#READ_BLOCKED_NUMBERS} know that the block suppressal - * status as returned by {@link #getBlockSuppressalStatus(Context)} has been updated. + * {@link android.Manifest.permission#READ_BLOCKED_NUMBERS} know that the block suppression + * status as returned by {@link #getBlockSuppressionStatus(Context)} has been updated. */ - public static final String ACTION_BLOCK_SUPPRESSAL_STATE_CHANGED = - "android.provider.action.BLOCK_SUPPRESSAL_STATE_CHANGED"; + public static final String ACTION_BLOCK_SUPPRESSION_STATE_CHANGED = + "android.provider.action.BLOCK_SUPPRESSION_STATE_CHANGED"; public static final String METHOD_NOTIFY_EMERGENCY_CONTACT = "notify_emergency_contact"; - public static final String METHOD_END_BLOCK_SUPPRESSAL = "end_block_suppressal"; + public static final String METHOD_END_BLOCK_SUPPRESSION = "end_block_suppression"; public static final String METHOD_SHOULD_SYSTEM_BLOCK_NUMBER = "should_system_block_number"; - public static final String METHOD_GET_BLOCK_SUPPRESSAL_STATUS = - "get_block_suppresal_status"; + public static final String METHOD_GET_BLOCK_SUPPRESSION_STATUS = + "get_block_suppression_status"; public static final String RES_IS_BLOCKING_SUPPRESSED = "blocking_suppressed"; @@ -264,7 +264,7 @@ public class BlockedNumberContract { * <p> This results in {@link #shouldSystemBlockNumber} returning {@code false} independent * of the contents of the provider for a duration defined by * {@link android.telephony.CarrierConfigManager#KEY_DURATION_BLOCKING_DISABLED_AFTER_EMERGENCY_INT} - * the provider unless {@link #endBlockSuppressal(Context)} is called. + * the provider unless {@link #endBlockSuppression(Context)} is called. */ public static void notifyEmergencyContact(Context context) { context.getContentResolver().call( @@ -275,9 +275,9 @@ public class BlockedNumberContract { * Notifies the provider to disable suppressing blocking. If emergency services were not * contacted recently at all, calling this method is a no-op. */ - public static void endBlockSuppressal(Context context) { + public static void endBlockSuppression(Context context) { context.getContentResolver().call( - AUTHORITY_URI, METHOD_END_BLOCK_SUPPRESSAL, null, null); + AUTHORITY_URI, METHOD_END_BLOCK_SUPPRESSION, null, null); } /** @@ -292,26 +292,26 @@ public class BlockedNumberContract { return res != null && res.getBoolean(RES_NUMBER_IS_BLOCKED, false); } - public static BlockSuppressalStatus getBlockSuppressalStatus(Context context) { + public static BlockSuppressionStatus getBlockSuppressionStatus(Context context) { final Bundle res = context.getContentResolver().call( - AUTHORITY_URI, METHOD_GET_BLOCK_SUPPRESSAL_STATUS, null, null); - return new BlockSuppressalStatus(res.getBoolean(RES_IS_BLOCKING_SUPPRESSED, false), + AUTHORITY_URI, METHOD_GET_BLOCK_SUPPRESSION_STATUS, null, null); + return new BlockSuppressionStatus(res.getBoolean(RES_IS_BLOCKING_SUPPRESSED, false), res.getLong(RES_BLOCKING_SUPPRESSED_UNTIL_TIMESTAMP, 0)); } /** * Represents the current status of {@link #shouldSystemBlockNumber(Context, String)}. If * emergency services have been contacted recently, {@link #isSuppressed} is {@code true}, - * and blocking is disabled until the timestamp {@link #untilTimestampMillis}. + * and blocking is disabled until the timestamp {@link #untilTimestampMillis}. */ - public static class BlockSuppressalStatus { + public static class BlockSuppressionStatus { public final boolean isSuppressed; /** * Timestamp in milliseconds from epoch. */ public final long untilTimestampMillis; - public BlockSuppressalStatus(boolean isSuppressed, long untilTimestampMillis) { + public BlockSuppressionStatus(boolean isSuppressed, long untilTimestampMillis) { this.isSuppressed = isSuppressed; this.untilTimestampMillis = untilTimestampMillis; } diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index 770cde7053bc..eaff1acf1468 100755 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -2780,6 +2780,11 @@ public final class Settings { */ public static final Uri DEFAULT_RINGTONE_URI = getUriFor(RINGTONE); + /** {@hide} */ + public static final String RINGTONE_CACHE = "ringtone_cache"; + /** {@hide} */ + public static final Uri RINGTONE_CACHE_URI = getUriFor(RINGTONE_CACHE); + /** * Persistent store for the system-wide default notification sound. * @@ -2798,6 +2803,11 @@ public final class Settings { */ public static final Uri DEFAULT_NOTIFICATION_URI = getUriFor(NOTIFICATION_SOUND); + /** {@hide} */ + public static final String NOTIFICATION_SOUND_CACHE = "notification_sound_cache"; + /** {@hide} */ + public static final Uri NOTIFICATION_SOUND_CACHE_URI = getUriFor(NOTIFICATION_SOUND_CACHE); + /** * Persistent store for the system-wide default alarm alert. * @@ -2816,6 +2826,11 @@ public final class Settings { */ public static final Uri DEFAULT_ALARM_ALERT_URI = getUriFor(ALARM_ALERT); + /** {@hide} */ + public static final String ALARM_ALERT_CACHE = "alarm_alert_cache"; + /** {@hide} */ + public static final Uri ALARM_ALERT_CACHE_URI = getUriFor(ALARM_ALERT_CACHE); + /** * Persistent store for the system default media button event receiver. * @@ -7033,6 +7048,14 @@ public final class Settings { "webview_data_reduction_proxy_key"; /** + * Whether or not the WebView fallback mechanism should be enabled. + * 0=disabled, 1=enabled. + * @hide + */ + public static final String WEBVIEW_FALLBACK_LOGIC_ENABLED = + "webview_fallback_logic_enabled"; + + /** * Name of the package used as WebView provider (if unset the provider is instead determined * by the system). * @hide @@ -7043,6 +7066,7 @@ public final class Settings { * Developer setting to enable WebView multiprocess rendering. * @hide */ + @SystemApi public static final String WEBVIEW_MULTIPROCESS = "webview_multiprocess"; /** @@ -7866,6 +7890,52 @@ public final class Settings { public static final String DOCK_AUDIO_MEDIA_ENABLED = "dock_audio_media_enabled"; /** + * The surround sound formats AC3, DTS or IEC61937 are + * available for use if they are detected. + * This is the default mode. + * + * Note that AUTO is equivalent to ALWAYS for Android TVs and other + * devices that have an S/PDIF output. This is because S/PDIF + * is unidirectional and the TV cannot know if a decoder is + * connected. So it assumes they are always available. + * @hide + */ + public static final int ENCODED_SURROUND_OUTPUT_AUTO = 0; + + /** + * AC3, DTS or IEC61937 are NEVER available, even if they + * are detected by the hardware. Those formats will not be + * reported. + * + * An example use case would be an AVR reports that it is capable of + * surround sound decoding but is broken. If NEVER is chosen + * then apps must use PCM output instead of encoded output. + * @hide + */ + public static final int ENCODED_SURROUND_OUTPUT_NEVER = 1; + + /** + * AC3, DTS or IEC61937 are ALWAYS available, even if they + * are not detected by the hardware. Those formats will be + * reported as part of the HDMI output capability. Applications + * are then free to use either PCM or encoded output. + * + * An example use case would be a when TV was connected over + * TOS-link to an AVR. But the TV could not see it because TOS-link + * is unidirectional. + * @hide + */ + public static final int ENCODED_SURROUND_OUTPUT_ALWAYS = 2; + + /** + * Set to ENCODED_SURROUND_OUTPUT_AUTO, + * ENCODED_SURROUND_OUTPUT_NEVER or + * ENCODED_SURROUND_OUTPUT_ALWAYS + * @hide + */ + public static final String ENCODED_SURROUND_OUTPUT = "encoded_surround_output"; + + /** * Persisted safe headphone volume management state by AudioService * @hide */ @@ -8140,6 +8210,15 @@ public final class Settings { "uninstalled_ephemeral_app_cache_duration_millis"; /** + * Allows switching users when system user is locked. + * <p> + * Type: int + * @hide + */ + public static final String ALLOW_USER_SWITCHING_WHEN_SYSTEM_USER_LOCKED = + "allow_user_switching_when_system_user_locked"; + + /** * Settings to backup. This is here so that it's in the same place as the settings * keys and easy to update. * @@ -8172,6 +8251,7 @@ public final class Settings { EMERGENCY_TONE, CALL_AUTO_RETRY, DOCK_AUDIO_MEDIA_ENABLED, + ENCODED_SURROUND_OUTPUT, LOW_POWER_MODE_TRIGGER_LEVEL }; diff --git a/core/java/android/security/net/config/ManifestConfigSource.java b/core/java/android/security/net/config/ManifestConfigSource.java index 0e137cddc148..be0821c0c730 100644 --- a/core/java/android/security/net/config/ManifestConfigSource.java +++ b/core/java/android/security/net/config/ManifestConfigSource.java @@ -61,6 +61,7 @@ public class ManifestConfigSource implements ConfigSource { } catch (PackageManager.NameNotFoundException e) { throw new RuntimeException("Failed to look up ApplicationInfo", e); } + int targetSdkVersion = info.targetSdkVersion; int configResourceId = 0; if (info != null && info.metaData != null) { configResourceId = info.metaData.getInt(META_DATA_NETWORK_SECURITY_CONFIG); @@ -74,14 +75,15 @@ public class ManifestConfigSource implements ConfigSource { + mContext.getResources().getResourceEntryName(configResourceId) + " debugBuild: " + debugBuild); } - source = new XmlConfigSource(mContext, configResourceId, debugBuild); + source = new XmlConfigSource(mContext, configResourceId, debugBuild, + targetSdkVersion); } else { if (DBG) { Log.d(LOG_TAG, "No Network Security Config specified, using platform default"); } boolean usesCleartextTraffic = (info.flags & ApplicationInfo.FLAG_USES_CLEARTEXT_TRAFFIC) != 0; - source = new DefaultConfigSource(usesCleartextTraffic); + source = new DefaultConfigSource(usesCleartextTraffic, targetSdkVersion); } mConfigSource = source; return mConfigSource; @@ -92,11 +94,11 @@ public class ManifestConfigSource implements ConfigSource { private final NetworkSecurityConfig mDefaultConfig; - public DefaultConfigSource(boolean usesCleartextTraffic) { - mDefaultConfig = NetworkSecurityConfig.getDefaultBuilder() + public DefaultConfigSource(boolean usesCleartextTraffic, int targetSdkVersion) { + mDefaultConfig = NetworkSecurityConfig.getDefaultBuilder(targetSdkVersion) .setCleartextTrafficPermitted(usesCleartextTraffic) .build(); - } + } @Override public NetworkSecurityConfig getDefaultConfig() { diff --git a/core/java/android/security/net/config/NetworkSecurityConfig.java b/core/java/android/security/net/config/NetworkSecurityConfig.java index ebe14691464c..6d6a92a5b308 100644 --- a/core/java/android/security/net/config/NetworkSecurityConfig.java +++ b/core/java/android/security/net/config/NetworkSecurityConfig.java @@ -16,6 +16,7 @@ package android.security.net.config; +import android.os.Build; import android.util.ArrayMap; import android.util.ArraySet; import java.security.cert.X509Certificate; @@ -37,7 +38,6 @@ public final class NetworkSecurityConfig { public static final boolean DEFAULT_CLEARTEXT_TRAFFIC_PERMITTED = true; /** @hide */ public static final boolean DEFAULT_HSTS_ENFORCED = false; - public static final NetworkSecurityConfig DEFAULT = getDefaultBuilder().build(); private final boolean mCleartextTrafficPermitted; private final boolean mHstsEnforced; @@ -163,21 +163,28 @@ public final class NetworkSecurityConfig { * <li>Cleartext traffic is permitted.</li> * <li>HSTS is not enforced.</li> * <li>No certificate pinning is used.</li> - * <li>The system and user added trusted certificate stores are trusted for connections.</li> + * <li>The system certificate store is trusted for connections.</li> + * <li>If the application targets API level 23 (Android M) or lower then the user certificate + * store is trusted by default as well.</li> * </ol> * * @hide */ - public static final Builder getDefaultBuilder() { - return new Builder() + public static final Builder getDefaultBuilder(int targetSdkVersion) { + Builder builder = new Builder() .setCleartextTrafficPermitted(DEFAULT_CLEARTEXT_TRAFFIC_PERMITTED) .setHstsEnforced(DEFAULT_HSTS_ENFORCED) // System certificate store, does not bypass static pins. .addCertificatesEntryRef( - new CertificatesEntryRef(SystemCertificateSource.getInstance(), false)) - // User certificate store, does not bypass static pins. - .addCertificatesEntryRef( - new CertificatesEntryRef(UserCertificateSource.getInstance(), false)); + new CertificatesEntryRef(SystemCertificateSource.getInstance(), false)); + // Applications targeting N and above must opt in into trusting the user added certificate + // store. + if (targetSdkVersion <= Build.VERSION_CODES.M) { + // User certificate store, does not bypass static pins. + builder.addCertificatesEntryRef( + new CertificatesEntryRef(UserCertificateSource.getInstance(), false)); + } + return builder; } /** diff --git a/core/java/android/security/net/config/ResourceCertificateSource.java b/core/java/android/security/net/config/ResourceCertificateSource.java index 8803c4b2559c..22fbee2feab3 100644 --- a/core/java/android/security/net/config/ResourceCertificateSource.java +++ b/core/java/android/security/net/config/ResourceCertificateSource.java @@ -44,7 +44,7 @@ public class ResourceCertificateSource implements CertificateSource { public ResourceCertificateSource(int resourceId, Context context) { mResourceId = resourceId; - mContext = context.getApplicationContext(); + mContext = context; } private void ensureInitialized() { diff --git a/core/java/android/security/net/config/XmlConfigSource.java b/core/java/android/security/net/config/XmlConfigSource.java index 1706e95513ff..2a8773cd3d86 100644 --- a/core/java/android/security/net/config/XmlConfigSource.java +++ b/core/java/android/security/net/config/XmlConfigSource.java @@ -3,9 +3,11 @@ package android.security.net.config; import android.content.Context; import android.content.res.Resources; import android.content.res.XmlResourceParser; +import android.os.Build; import android.util.ArraySet; import android.util.Base64; import android.util.Pair; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.XmlUtils; import org.xmlpull.v1.XmlPullParser; @@ -34,20 +36,29 @@ public class XmlConfigSource implements ConfigSource { private final Object mLock = new Object(); private final int mResourceId; private final boolean mDebugBuild; + private final int mTargetSdkVersion; private boolean mInitialized; private NetworkSecurityConfig mDefaultConfig; private Set<Pair<Domain, NetworkSecurityConfig>> mDomainMap; private Context mContext; + @VisibleForTesting public XmlConfigSource(Context context, int resourceId) { this(context, resourceId, false); } + @VisibleForTesting public XmlConfigSource(Context context, int resourceId, boolean debugBuild) { + this(context, resourceId, debugBuild, Build.VERSION_CODES.CUR_DEVELOPMENT); + } + + public XmlConfigSource(Context context, int resourceId, boolean debugBuild, + int targetSdkVersion) { mResourceId = resourceId; mContext = context; mDebugBuild = debugBuild; + mTargetSdkVersion = targetSdkVersion; } public Set<Pair<Domain, NetworkSecurityConfig>> getPerDomainConfigs() { @@ -341,7 +352,7 @@ public class XmlConfigSource implements ConfigSource { // Use the platform default as the parent of the base config for any values not provided // there. If there is no base config use the platform default. NetworkSecurityConfig.Builder platformDefaultBuilder = - NetworkSecurityConfig.getDefaultBuilder(); + NetworkSecurityConfig.getDefaultBuilder(mTargetSdkVersion); addDebugAnchorsIfNeeded(debugConfigBuilder, platformDefaultBuilder); if (baseConfigBuilder != null) { baseConfigBuilder.setParent(platformDefaultBuilder); diff --git a/core/java/android/service/persistentdata/IPersistentDataBlockService.aidl b/core/java/android/service/persistentdata/IPersistentDataBlockService.aidl index 52db22397b65..626b40827334 100644 --- a/core/java/android/service/persistentdata/IPersistentDataBlockService.aidl +++ b/core/java/android/service/persistentdata/IPersistentDataBlockService.aidl @@ -35,4 +35,6 @@ interface IPersistentDataBlockService { void setOemUnlockEnabled(boolean enabled); boolean getOemUnlockEnabled(); + int getFlashLockState(); } + diff --git a/core/java/android/service/persistentdata/PersistentDataBlockManager.java b/core/java/android/service/persistentdata/PersistentDataBlockManager.java index 0ffdf68c4b30..ddb6980046ed 100644 --- a/core/java/android/service/persistentdata/PersistentDataBlockManager.java +++ b/core/java/android/service/persistentdata/PersistentDataBlockManager.java @@ -17,9 +17,13 @@ package android.service.persistentdata; import android.annotation.SystemApi; +import android.annotation.IntDef; import android.os.RemoteException; import android.util.Slog; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + /** * Interface for reading and writing data blocks to a persistent partition. * @@ -43,6 +47,27 @@ public class PersistentDataBlockManager { private static final String TAG = PersistentDataBlockManager.class.getSimpleName(); private IPersistentDataBlockService sService; + /** + * Indicates that the device's bootloader lock state is UNKNOWN. + */ + public static final int FLASH_LOCK_UNKNOWN = -1; + /** + * Indicates that the device's bootloader is UNLOCKED. + */ + public static final int FLASH_LOCK_UNLOCKED = 0; + /** + * Indicates that the device's bootloader is LOCKED. + */ + public static final int FLASH_LOCK_LOCKED = 1; + + @IntDef({ + FLASH_LOCK_UNKNOWN, + FLASH_LOCK_LOCKED, + FLASH_LOCK_UNLOCKED, + }) + @Retention(RetentionPolicy.SOURCE) + public @interface FlashLockState {} + public PersistentDataBlockManager(IPersistentDataBlockService service) { sService = service; } @@ -140,6 +165,24 @@ public class PersistentDataBlockManager { } } + /** + * Retrieves available information about this device's flash lock state. + * + * @return FLASH_LOCK_STATE_LOCKED if device bootloader is locked, + * FLASH_LOCK_STATE_UNLOCKED if device bootloader is unlocked, + * or FLASH_LOCK_STATE unknown if this information cannot be ascertained + * on this device. + */ + @FlashLockState + public int getFlashLockState() { + try { + return sService.getFlashLockState(); + } catch (RemoteException e) { + onError("getting flash lock state"); + return FLASH_LOCK_UNKNOWN; + } + } + private void onError(String msg) { Slog.v(TAG, "Remote exception while " + msg); } diff --git a/core/java/android/service/voice/AlwaysOnHotwordDetector.java b/core/java/android/service/voice/AlwaysOnHotwordDetector.java index 76a401d74559..9464a8754fa8 100644 --- a/core/java/android/service/voice/AlwaysOnHotwordDetector.java +++ b/core/java/android/service/voice/AlwaysOnHotwordDetector.java @@ -617,11 +617,7 @@ public class AlwaysOnHotwordDetector { } @Override - public void onDetected(RecognitionEvent event) { - if (! (event instanceof KeyphraseRecognitionEvent)) { - Slog.e(TAG, "onDetected() called for a soundtrigger event."); - return; - } + public void onKeyphraseDetected(KeyphraseRecognitionEvent event) { if (DBG) { Slog.d(TAG, "onDetected(" + event + ")"); } else { @@ -632,6 +628,10 @@ public class AlwaysOnHotwordDetector { event.captureFormat, event.captureSession, event.data)) .sendToTarget(); } + @Override + public void onGenericSoundTriggerDetected(SoundTrigger.GenericRecognitionEvent event) { + Slog.w(TAG, "Generic sound trigger event detected at AOHD: " + event); + } @Override public void onError(int status) { diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java index a98551752181..de8133b33aa6 100644 --- a/core/java/android/service/wallpaper/WallpaperService.java +++ b/core/java/android/service/wallpaper/WallpaperService.java @@ -271,7 +271,8 @@ public abstract class WallpaperService extends Service { @Override public void resized(Rect frame, Rect overscanInsets, Rect contentInsets, Rect visibleInsets, Rect stableInsets, Rect outsets, boolean reportDraw, - Configuration newConfig, Rect backDropRect, boolean forceLayout) { + Configuration newConfig, Rect backDropRect, boolean forceLayout, + boolean alwaysConsumeNavBar) { Message msg = mCaller.obtainMessageIO(MSG_WINDOW_RESIZED, reportDraw ? 1 : 0, outsets); mCaller.sendMessage(msg); @@ -790,7 +791,7 @@ public abstract class WallpaperService extends Service { mFinalStableInsets.set(mDispatchedStableInsets); WindowInsets insets = new WindowInsets(mFinalSystemInsets, null, mFinalStableInsets, - getResources().getConfiguration().isScreenRound()); + getResources().getConfiguration().isScreenRound(), false); if (DEBUG) { Log.v(TAG, "dispatching insets=" + insets); } diff --git a/core/java/android/text/Emoji.java b/core/java/android/text/Emoji.java index b437f486c872..c0f0663084fe 100644 --- a/core/java/android/text/Emoji.java +++ b/core/java/android/text/Emoji.java @@ -23,15 +23,17 @@ import java.util.Arrays; * @hide */ public class Emoji { - // See http://www.unicode.org/Public/emoji/2.0//emoji-data.txt + // See http://www.unicode.org/Public/emoji/3.0/emoji-data.txt private static int[] EMOJI_MODIFIER_BASE = { 0x261D, 0x26F9, 0x270A, 0x270B, 0x270C, 0x270D, 0x1F385, 0x1F3C3, 0x1F3C4, 0x1F3CA, 0x1F3CB, 0x1F442, 0x1F443, 0x1F446, 0x1F447, 0x1F448, 0x1F449, 0x1F44A, 0x1F44B, 0x1F44C, 0x1F44D, 0x1F44E, 0x1F44F, 0x1F450, 0x1F466, 0x1F467, 0x1F468, 0x1F469, 0x1F46E, 0x1F470, - 0x1F471, 0x1F472, 0x1F473, 0x1F474, 0x1F475, 0x1F476, 0x1F474, 0x1F478, 0x1F47C, 0x1F481, - 0x1F482, 0x1F483, 0x1F485, 0x1F486, 0x1F487, 0x1F4AA, 0x1F575, 0x1F590, 0x1F595, 0x1F596, - 0x1F645, 0x1F646, 0x1F647, 0x1F64B, 0x1F64C, 0x1F64D, 0x1F64E, 0x1F64F, 0x1F6A3, 0x1F6B4, - 0x1F6B5, 0x1F6B6, 0x1F6C0, 0x1F918 + 0x1F471, 0x1F472, 0x1F473, 0x1F474, 0x1F475, 0x1F476, 0x1F477, 0x1F478, 0x1F47C, 0x1F481, + 0x1F482, 0x1F483, 0x1F485, 0x1F486, 0x1F487, 0x1F4AA, 0x1F575, 0x1F57A, 0x1F590, 0x1F595, + 0x1F596, 0x1F645, 0x1F646, 0x1F647, 0x1F64B, 0x1F64C, 0x1F64D, 0x1F64E, 0x1F64F, 0x1F6A3, + 0x1F6B4, 0x1F6B5, 0x1F6B6, 0x1F6C0, 0x1F918, 0x1F919, 0x1F91A, 0x1F91B, 0x1F91C, 0x1F91D, + 0x1F91E, 0x1F926, 0x1F930, 0x1F933, 0x1F934, 0x1F935, 0x1F936, 0x1F937, 0x1F938, 0x1F939, + 0x1F93B, 0x1F93C, 0x1F93D, 0x1F93E }; // See http://www.unicode.org/emoji/charts/emoji-zwj-sequences.html diff --git a/core/java/android/view/IWindow.aidl b/core/java/android/view/IWindow.aidl index 3688d50d9fe3..70d0513bfbc5 100644 --- a/core/java/android/view/IWindow.aidl +++ b/core/java/android/view/IWindow.aidl @@ -49,7 +49,8 @@ oneway interface IWindow { void resized(in Rect frame, in Rect overscanInsets, in Rect contentInsets, in Rect visibleInsets, in Rect stableInsets, in Rect outsets, boolean reportDraw, - in Configuration newConfig, in Rect backDropFrame, boolean forceLayout); + in Configuration newConfig, in Rect backDropFrame, boolean forceLayout, + boolean alwaysConsumeNavBar); void moved(int newX, int newY); void dispatchAppVisibility(boolean visible); void dispatchGetNewSurface(); diff --git a/core/java/android/view/KeyEvent.java b/core/java/android/view/KeyEvent.java index 51e1f4baae97..e0c6770ecb38 100644 --- a/core/java/android/view/KeyEvent.java +++ b/core/java/android/view/KeyEvent.java @@ -1780,6 +1780,7 @@ public class KeyEvent extends InputEvent implements Parcelable { case KeyEvent.KEYCODE_DPAD_CENTER: case KeyEvent.KEYCODE_ENTER: case KeyEvent.KEYCODE_SPACE: + case KeyEvent.KEYCODE_NUMPAD_ENTER: return true; default: return false; diff --git a/core/java/android/view/RenderNode.java b/core/java/android/view/RenderNode.java index a4cb7035f2f9..a45c18d058cb 100644 --- a/core/java/android/view/RenderNode.java +++ b/core/java/android/view/RenderNode.java @@ -779,7 +779,7 @@ public class RenderNode { return mOwningView != null && mOwningView.mAttachInfo != null; } - public void addAnimator(AnimatedVectorDrawable.VectorDrawableAnimator animatorSet) { + public void addAnimator(AnimatedVectorDrawable.VectorDrawableAnimatorRT animatorSet) { if (mOwningView == null || mOwningView.mAttachInfo == null) { throw new IllegalStateException("Cannot start this animator on a detached view!"); } diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java index 152dd66ec7be..2c9d691214b0 100644 --- a/core/java/android/view/SurfaceView.java +++ b/core/java/android/view/SurfaceView.java @@ -743,7 +743,8 @@ public class SurfaceView extends View { @Override public void resized(Rect frame, Rect overscanInsets, Rect contentInsets, Rect visibleInsets, Rect stableInsets, Rect outsets, boolean reportDraw, - Configuration newConfig, Rect backDropRect, boolean forceLayout) { + Configuration newConfig, Rect backDropRect, boolean forceLayout, + boolean alwaysConsumeNavBar) { SurfaceView surfaceView = mSurfaceView.get(); if (surfaceView != null) { if (DEBUG) Log.v( diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 70a0e014014a..26f3b39cf2f4 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -22517,6 +22517,13 @@ public class View implements Drawable.Callback, KeyEvent.Callback, final Rect mOutsets = new Rect(); /** + * In multi-window we force show the navigation bar. Because we don't want that the surface + * size changes in this mode, we instead have a flag whether the navigation bar size should + * always be consumed, so the app is treated like there is no virtual navigation bar at all. + */ + boolean mAlwaysConsumeNavBar; + + /** * The internal insets given by this window. This value is * supplied by the client (through * {@link ViewTreeObserver.OnComputeInternalInsetsListener}) and will diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 05177885f3dc..b9eb0a96f98d 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -313,6 +313,7 @@ public final class ViewRootImpl implements ViewParent, final Rect mPendingContentInsets = new Rect(); final Rect mPendingOutsets = new Rect(); final Rect mPendingBackDropFrame = new Rect(); + boolean mPendingAlwaysConsumeNavBar; final ViewTreeObserver.InternalInsetsInfo mLastGivenInsets = new ViewTreeObserver.InternalInsetsInfo(); @@ -623,6 +624,9 @@ public final class ViewRootImpl implements ViewParent, mPendingContentInsets.set(mAttachInfo.mContentInsets); mPendingStableInsets.set(mAttachInfo.mStableInsets); mPendingVisibleInsets.set(0, 0, 0, 0); + mAttachInfo.mAlwaysConsumeNavBar = + (res & WindowManagerGlobal.ADD_FLAG_ALWAYS_CONSUME_NAV_BAR) != 0; + mPendingAlwaysConsumeNavBar = mAttachInfo.mAlwaysConsumeNavBar; if (DEBUG_LAYOUT) Log.v(mTag, "Added window " + mWindow); if (res < WindowManagerGlobal.ADD_OKAY) { mAttachInfo.mRootView = null; @@ -1072,6 +1076,8 @@ public final class ViewRootImpl implements ViewParent, mStopped = stopped; if (!mStopped) { scheduleTraversals(); + } else { + destroyHardwareResources(); } } } @@ -1343,7 +1349,8 @@ public final class ViewRootImpl implements ViewParent, } mLastWindowInsets = new WindowInsets(contentInsets, null /* windowDecorInsets */, stableInsets, - mContext.getResources().getConfiguration().isScreenRound()); + mContext.getResources().getConfiguration().isScreenRound(), + mAttachInfo.mAlwaysConsumeNavBar); } return mLastWindowInsets; } @@ -1510,6 +1517,9 @@ public final class ViewRootImpl implements ViewParent, if (!mPendingOutsets.equals(mAttachInfo.mOutsets)) { insetsChanged = true; } + if (mPendingAlwaysConsumeNavBar != mAttachInfo.mAlwaysConsumeNavBar) { + insetsChanged = true; + } if (lp.width == ViewGroup.LayoutParams.WRAP_CONTENT || lp.height == ViewGroup.LayoutParams.WRAP_CONTENT) { windowSizeMayChange = true; @@ -1694,6 +1704,8 @@ public final class ViewRootImpl implements ViewParent, final boolean outsetsChanged = !mPendingOutsets.equals(mAttachInfo.mOutsets); final boolean surfaceSizeChanged = (relayoutResult & WindowManagerGlobal.RELAYOUT_RES_SURFACE_RESIZED) != 0; + final boolean alwaysConsumeNavBarChanged = + mPendingAlwaysConsumeNavBar != mAttachInfo.mAlwaysConsumeNavBar; if (contentInsetsChanged) { mAttachInfo.mContentInsets.set(mPendingContentInsets); if (DEBUG_LAYOUT) Log.v(mTag, "Content insets changing to: " @@ -1713,6 +1725,10 @@ public final class ViewRootImpl implements ViewParent, // Need to relayout with content insets. contentInsetsChanged = true; } + if (alwaysConsumeNavBarChanged) { + mAttachInfo.mAlwaysConsumeNavBar = mPendingAlwaysConsumeNavBar; + contentInsetsChanged = true; + } if (contentInsetsChanged || mLastSystemUiVisibility != mAttachInfo.mSystemUiVisibility || mApplyInsetsRequested || mLastOverscanRequested != mAttachInfo.mOverscanRequested @@ -1966,7 +1982,7 @@ public final class ViewRootImpl implements ViewParent, boolean triggerGlobalLayoutListener = didLayout || mAttachInfo.mRecomputeGlobalAttributes; if (didLayout) { - performLayout(lp, desiredWindowWidth, desiredWindowHeight); + performLayout(lp, mWidth, mHeight); // By this point all views have been sized and positioned // We can compute the transparent area @@ -3389,6 +3405,7 @@ public final class ViewRootImpl implements ViewParent, mPendingOutsets.set((Rect) args.arg7); mPendingBackDropFrame.set((Rect) args.arg8); mForceNextWindowRelayout = args.argi1 != 0; + mPendingAlwaysConsumeNavBar = args.argi2 != 0; args.recycle(); @@ -3797,7 +3814,8 @@ public final class ViewRootImpl implements ViewParent, return true; } else if ((!mAttachInfo.mHasWindowFocus && !q.mEvent.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) || mStopped - || mIsAmbientMode || (mPausedForTransition && !isBack(q.mEvent))) { + || (mIsAmbientMode && !q.mEvent.isFromSource(InputDevice.SOURCE_CLASS_BUTTON)) + || (mPausedForTransition && !isBack(q.mEvent))) { // This is a focus event and the window doesn't currently have input focus or // has stopped. This could be an event that came back from the previous stage // but the window has lost focus or stopped in the meantime. @@ -5567,6 +5585,10 @@ public final class ViewRootImpl implements ViewParent, mWinFrame, mPendingOverscanInsets, mPendingContentInsets, mPendingVisibleInsets, mPendingStableInsets, mPendingOutsets, mPendingBackDropFrame, mPendingConfiguration, mSurface); + + mPendingAlwaysConsumeNavBar = + (relayoutResult & WindowManagerGlobal.RELAYOUT_RES_CONSUME_ALWAYS_NAV_BAR) != 0; + //Log.d(mTag, "<<<<<< BACK FROM relayout"); if (restore) { params.restore(); @@ -5838,7 +5860,8 @@ public final class ViewRootImpl implements ViewParent, public void dispatchResized(Rect frame, Rect overscanInsets, Rect contentInsets, Rect visibleInsets, Rect stableInsets, Rect outsets, boolean reportDraw, - Configuration newConfig, Rect backDropFrame, boolean forceLayout) { + Configuration newConfig, Rect backDropFrame, boolean forceLayout, + boolean alwaysConsumeNavBar) { if (DEBUG_LAYOUT) Log.v(mTag, "Resizing " + this + ": frame=" + frame.toShortString() + " contentInsets=" + contentInsets.toShortString() + " visibleInsets=" + visibleInsets.toShortString() @@ -5875,6 +5898,7 @@ public final class ViewRootImpl implements ViewParent, args.arg7 = sameProcessCall ? new Rect(outsets) : outsets; args.arg8 = sameProcessCall ? new Rect(backDropFrame) : backDropFrame; args.argi1 = forceLayout ? 1 : 0; + args.argi2 = alwaysConsumeNavBar ? 1 : 0; msg.obj = args; mHandler.sendMessage(msg); } @@ -6876,12 +6900,13 @@ public final class ViewRootImpl implements ViewParent, @Override public void resized(Rect frame, Rect overscanInsets, Rect contentInsets, Rect visibleInsets, Rect stableInsets, Rect outsets, boolean reportDraw, - Configuration newConfig, Rect backDropFrame, boolean forceLayout) { + Configuration newConfig, Rect backDropFrame, boolean forceLayout, + boolean alwaysConsumeNavBar) { final ViewRootImpl viewAncestor = mViewAncestor.get(); if (viewAncestor != null) { viewAncestor.dispatchResized(frame, overscanInsets, contentInsets, visibleInsets, stableInsets, outsets, reportDraw, newConfig, backDropFrame, - forceLayout); + forceLayout, alwaysConsumeNavBar); } } diff --git a/core/java/android/view/WindowInsets.java b/core/java/android/view/WindowInsets.java index 997e7e8a16f0..929fdac82c28 100644 --- a/core/java/android/view/WindowInsets.java +++ b/core/java/android/view/WindowInsets.java @@ -37,6 +37,13 @@ public final class WindowInsets { private Rect mTempRect; private boolean mIsRound; + /** + * In multi-window we force show the navigation bar. Because we don't want that the surface size + * changes in this mode, we instead have a flag whether the navigation bar size should always + * be consumed, so the app is treated like there is no virtual navigation bar at all. + */ + private boolean mAlwaysConsumeNavBar; + private boolean mSystemWindowInsetsConsumed = false; private boolean mWindowDecorInsetsConsumed = false; private boolean mStableInsetsConsumed = false; @@ -52,12 +59,12 @@ public final class WindowInsets { public static final WindowInsets CONSUMED; static { - CONSUMED = new WindowInsets(null, null, null, false); + CONSUMED = new WindowInsets(null, null, null, false, false); } /** @hide */ public WindowInsets(Rect systemWindowInsets, Rect windowDecorInsets, Rect stableInsets, - boolean isRound) { + boolean isRound, boolean alwaysConsumeNavBar) { mSystemWindowInsetsConsumed = systemWindowInsets == null; mSystemWindowInsets = mSystemWindowInsetsConsumed ? EMPTY_RECT : systemWindowInsets; @@ -68,6 +75,7 @@ public final class WindowInsets { mStableInsets = mStableInsetsConsumed ? EMPTY_RECT : stableInsets; mIsRound = isRound; + mAlwaysConsumeNavBar = alwaysConsumeNavBar; } /** @@ -87,7 +95,7 @@ public final class WindowInsets { /** @hide */ public WindowInsets(Rect systemWindowInsets) { - this(systemWindowInsets, null, null, false); + this(systemWindowInsets, null, null, false, false); } /** @@ -475,6 +483,13 @@ public final class WindowInsets { return result; } + /** + * @hide + */ + public boolean shouldAlwaysConsumeNavBar() { + return mAlwaysConsumeNavBar; + } + @Override public String toString() { return "WindowInsets{systemWindowInsets=" + mSystemWindowInsets diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index 18dfdfd6de03..6e025161f4ce 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -30,7 +30,7 @@ import android.text.TextUtils; import android.util.Log; import java.util.List; - +import java.util.Objects; /** * The interface that apps use to talk to the window manager. @@ -1950,7 +1950,7 @@ public interface WindowManager extends ViewManager { // already have one. packageName = o.packageName; } - if (o.mTitle != null) { + if (!Objects.equals(mTitle, o.mTitle) && o.mTitle != null) { // NOTE: mTitle only copied if the originator set one. mTitle = o.mTitle; changes |= TITLE_CHANGED; diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java index 1530b474c534..a1cbc1d07575 100644 --- a/core/java/android/view/WindowManagerGlobal.java +++ b/core/java/android/view/WindowManagerGlobal.java @@ -90,6 +90,13 @@ public final class WindowManagerGlobal { public static final int RELAYOUT_RES_SURFACE_RESIZED = 0x20; /** + * In multi-window we force show the navigation bar. Because we don't want that the surface size + * changes in this mode, we instead have a flag whether the navigation bar size should always be + * consumed, so the app is treated like there is no virtual navigation bar at all. + */ + public static final int RELAYOUT_RES_CONSUME_ALWAYS_NAV_BAR = 0x40; + + /** * Flag for relayout: the client will be later giving * internal insets; as a result, the window will not impact other window * layouts until the insets are given. @@ -107,6 +114,11 @@ public final class WindowManagerGlobal { public static final int ADD_FLAG_APP_VISIBLE = 0x2; public static final int ADD_FLAG_IN_TOUCH_MODE = RELAYOUT_RES_IN_TOUCH_MODE; + /** + * Like {@link #RELAYOUT_RES_CONSUME_ALWAYS_NAV_BAR}, but as a "hint" when adding the window. + */ + public static final int ADD_FLAG_ALWAYS_CONSUME_NAV_BAR = 0x4; + public static final int ADD_OKAY = 0; public static final int ADD_BAD_APP_TOKEN = -1; public static final int ADD_BAD_SUBWINDOW_TOKEN = -2; diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java index a8b7a7b8a8db..2fbfd2d13b40 100644 --- a/core/java/android/view/WindowManagerPolicy.java +++ b/core/java/android/view/WindowManagerPolicy.java @@ -920,9 +920,10 @@ public interface WindowManagerPolicy { * @param outStableInsets The areas covered by stable system windows irrespective of their * current visibility. Expressed as positive insets. * @param outOutsets The areas that are not real display, but we would like to treat as such. - * + * @return Whether to always consume the navigation bar. + * See {@link #isNavBarForcedShownLw(WindowState)}. */ - public void getInsetHintLw(WindowManager.LayoutParams attrs, int rotation, + public boolean getInsetHintLw(WindowManager.LayoutParams attrs, int rotation, Rect outContentInsets, Rect outStableInsets, Rect outOutsets); /** @@ -1351,6 +1352,12 @@ public interface WindowManagerPolicy { public void getStableInsetsLw(int displayRotation, int displayWidth, int displayHeight, Rect outInsets); + + /** + * @return true if the navigation bar is forced to stay visible + */ + public boolean isNavBarForcedShownLw(WindowState win); + /** * Calculates the insets for the areas that could never be removed in Honeycomb, i.e. system * bar or button bar. See {@link #getNonDecorDisplayWidth}. @@ -1362,4 +1369,11 @@ public interface WindowManagerPolicy { */ public void getNonDecorInsetsLw(int displayRotation, int displayWidth, int displayHeight, Rect outInsets); + + /** + * @return True if a specified {@param dockSide} is allowed on the current device, or false + * otherwise. It is guaranteed that at least one dock side for a particular orientation + * is allowed, so for example, if DOCKED_RIGHT is not allowed, DOCKED_LEFT is allowed. + */ + public boolean isDockSideAllowed(int dockSide); } diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java index 2de9897904d6..4c015ba9e2d3 100644 --- a/core/java/android/view/inputmethod/InputMethodManager.java +++ b/core/java/android/view/inputmethod/InputMethodManager.java @@ -1245,15 +1245,9 @@ public final class InputMethodManager { if (DEBUG) Log.v(TAG, "START INPUT: " + view + " ic=" + ic + " tba=" + tba + " controlFlags=#" + Integer.toHexString(controlFlags)); - InputBindResult res; - if (windowGainingFocus != null) { - res = mService.windowGainedFocus(startInputReason, mClient, windowGainingFocus, - controlFlags, softInputMode, windowFlags, - tba, servedContext); - } else { - res = mService.startInput(startInputReason, mClient, - servedContext, tba, controlFlags); - } + final InputBindResult res = mService.startInputOrWindowGainedFocus( + startInputReason, mClient, windowGainingFocus, controlFlags, softInputMode, + windowFlags, tba, servedContext); if (DEBUG) Log.v(TAG, "Starting input: Bind result=" + res); if (res != null) { if (res.id != null) { @@ -1471,13 +1465,13 @@ public final class InputMethodManager { return; } } - + // For some reason we didn't do a startInput + windowFocusGain, so // we'll just do a window focus gain and call it a day. synchronized (mH) { try { if (DEBUG) Log.v(TAG, "Reporting focus gain, without startInput"); - mService.windowGainedFocus( + mService.startInputOrWindowGainedFocus( InputMethodClient.START_INPUT_REASON_WINDOW_FOCUS_GAIN_REPORT_ONLY, mClient, rootView.getWindowToken(), controlFlags, softInputMode, windowFlags, null, null); diff --git a/core/java/android/webkit/IWebViewUpdateService.aidl b/core/java/android/webkit/IWebViewUpdateService.aidl index 89d5d69de392..5697dfc0188c 100644 --- a/core/java/android/webkit/IWebViewUpdateService.aidl +++ b/core/java/android/webkit/IWebViewUpdateService.aidl @@ -38,10 +38,14 @@ interface IWebViewUpdateService { WebViewProviderResponse waitForAndGetProvider(); /** - * DevelopmentSettings uses this to notify WebViewUpdateService that a - * new provider has been selected by the user. + * DevelopmentSettings uses this to notify WebViewUpdateService that a new provider has been + * selected by the user. Returns the provider we end up switching to, this could be different to + * the one passed as argument to this method since the Dev Setting calling this method could be + * stale. I.e. the Dev setting could be letting the user choose uninstalled/disabled packages, + * it would then try to update the provider to such a package while in reality the update + * service would switch to another one. */ - void changeProviderAndSetting(String newProvider); + String changeProviderAndSetting(String newProvider); /** * DevelopmentSettings uses this to get the current available WebView @@ -53,4 +57,15 @@ interface IWebViewUpdateService { * Used by DevelopmentSetting to get the name of the WebView provider currently in use. */ String getCurrentWebViewPackageName(); + + /** + * Used by Settings to determine whether a certain package can be enabled/disabled by the user - + * the package should not be modifiable in this way if it is a fallback package. + */ + boolean isFallbackPackage(String packageName); + + /** + * Enable or disable the WebView package fallback mechanism. + */ + void enableFallbackLogic(boolean enable); } diff --git a/core/java/android/webkit/WebView.java b/core/java/android/webkit/WebView.java index 647d4dcbc347..2eb258fb6683 100644 --- a/core/java/android/webkit/WebView.java +++ b/core/java/android/webkit/WebView.java @@ -288,11 +288,11 @@ import java.util.Map; * helps Google improve WebView. Data is collected on a per-app basis for each app which has * instantiated a WebView. An individual app can opt out of this feature by putting the following * tag in its manifest: - * </p> * <pre> - * <meta-data android:name="android.webkit.WebView.MetricsOptOut" - * android:value="true" /> + * <meta-data android:name="android.webkit.WebView.MetricsOptOut" + * android:value="true" /> * </pre> + * </p> * <p> * Data will only be uploaded for a given app if the user has consented AND the app has not opted * out. diff --git a/core/java/android/webkit/WebViewDelegate.java b/core/java/android/webkit/WebViewDelegate.java index 23af384e9165..94dc03cad23b 100644 --- a/core/java/android/webkit/WebViewDelegate.java +++ b/core/java/android/webkit/WebViewDelegate.java @@ -156,7 +156,7 @@ public final class WebViewDelegate { * Adds the WebView asset path to {@link android.content.res.AssetManager}. */ public void addWebViewAssetPath(Context context) { - context.getAssets().addAssetPath( + context.getAssets().addAssetPathAsSharedLibrary( WebViewFactory.getLoadedPackageInfo().applicationInfo.sourceDir); } } diff --git a/core/java/android/webkit/WebViewFactory.java b/core/java/android/webkit/WebViewFactory.java index b04b4c0e3b11..ad50ff60780e 100644 --- a/core/java/android/webkit/WebViewFactory.java +++ b/core/java/android/webkit/WebViewFactory.java @@ -21,6 +21,7 @@ import android.app.ActivityManagerInternal; import android.app.AppGlobals; import android.app.Application; import android.content.Context; +import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; @@ -134,6 +135,7 @@ public final class WebViewFactory { // Whether or not the provider must be explicitly chosen by the user to be used. private static String TAG_AVAILABILITY = "availableByDefault"; private static String TAG_SIGNATURE = "signature"; + private static String TAG_FALLBACK = "isFallback"; /** * Reads all signatures at the current depth (within the current provider) from the XML parser. @@ -159,6 +161,7 @@ public final class WebViewFactory { * @hide * */ public static WebViewProviderInfo[] getWebViewPackages() { + int numFallbackPackages = 0; XmlResourceParser parser = null; List<WebViewProviderInfo> webViewProviders = new ArrayList<WebViewProviderInfo>(); try { @@ -182,13 +185,21 @@ public final class WebViewFactory { throw new MissingWebViewPackageException( "WebView provider in framework resources missing description"); } - String availableByDefault = parser.getAttributeValue(null, TAG_AVAILABILITY); - if (availableByDefault == null) { - availableByDefault = "false"; - } - webViewProviders.add( + boolean availableByDefault = "true".equals( + parser.getAttributeValue(null, TAG_AVAILABILITY)); + boolean isFallback = "true".equals( + parser.getAttributeValue(null, TAG_FALLBACK)); + WebViewProviderInfo currentProvider = new WebViewProviderInfo(packageName, description, availableByDefault, - readSignatures(parser))); + isFallback, readSignatures(parser)); + if (currentProvider.isFallbackPackage()) { + numFallbackPackages++; + if (numFallbackPackages > 1) { + throw new AndroidRuntimeException( + "There can be at most one webview fallback package."); + } + } + webViewProviders.add(currentProvider); } else { Log.e(LOGTAG, "Found an element that is not a webview provider"); @@ -641,6 +652,18 @@ public final class WebViewFactory { return result; } + /** + * Returns whether the entire package from an ACTION_PACKAGE_CHANGED intent was changed (rather + * than just one of its components). + * @hide + */ + public static boolean entirePackageChanged(Intent intent) { + String[] componentList = + intent.getStringArrayExtra(Intent.EXTRA_CHANGED_COMPONENT_NAME_LIST); + return Arrays.asList(componentList).contains( + intent.getDataString().substring("package:".length())); + } + private static IWebViewUpdateService getUpdateService() { return IWebViewUpdateService.Stub.asInterface(ServiceManager.getService("webviewupdate")); } diff --git a/core/java/android/webkit/WebViewProviderInfo.java b/core/java/android/webkit/WebViewProviderInfo.java index 94e8b70ce38c..64c2caa58fd5 100644 --- a/core/java/android/webkit/WebViewProviderInfo.java +++ b/core/java/android/webkit/WebViewProviderInfo.java @@ -40,11 +40,12 @@ public class WebViewProviderInfo implements Parcelable { public WebViewPackageNotFoundException(Exception e) { super(e); } } - public WebViewProviderInfo(String packageName, String description, String availableByDefault, - String[] signatures) { + public WebViewProviderInfo(String packageName, String description, boolean availableByDefault, + boolean isFallback, String[] signatures) { this.packageName = packageName; this.description = description; - this.availableByDefault = availableByDefault.equals("true"); + this.availableByDefault = availableByDefault; + this.isFallback = isFallback; this.signatures = signatures; } @@ -114,6 +115,10 @@ public class WebViewProviderInfo implements Parcelable { return availableByDefault; } + public boolean isFallbackPackage() { + return isFallback; + } + private void updatePackageInfo() { try { PackageManager pm = AppGlobals.getInitialApplication().getPackageManager(); @@ -165,6 +170,7 @@ public class WebViewProviderInfo implements Parcelable { public String packageName; public String description; private boolean availableByDefault; + private boolean isFallback; private String[] signatures; diff --git a/core/java/android/widget/AbsSeekBar.java b/core/java/android/widget/AbsSeekBar.java index 9a6859387bdf..34f3a47393ba 100644 --- a/core/java/android/widget/AbsSeekBar.java +++ b/core/java/android/widget/AbsSeekBar.java @@ -694,7 +694,7 @@ public abstract class AbsSeekBar extends ProgressBar { final int halfH = h >= 0 ? h / 2 : 1; mTickMark.setBounds(-halfW, -halfH, halfW, halfH); - final int spacing = (getWidth() - mPaddingLeft - mPaddingRight) / count; + final float spacing = (getWidth() - mPaddingLeft - mPaddingRight) / (float) count; final int saveCount = canvas.save(); canvas.translate(mPaddingLeft, getHeight() / 2); for (int i = 0; i <= count; i++) { diff --git a/core/java/android/widget/Chronometer.java b/core/java/android/widget/Chronometer.java index 4d707e369992..3421790894ed 100644 --- a/core/java/android/widget/Chronometer.java +++ b/core/java/android/widget/Chronometer.java @@ -19,15 +19,14 @@ package android.widget; import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; -import android.os.Handler; -import android.os.Message; import android.os.SystemClock; import android.text.format.DateUtils; import android.util.AttributeSet; import android.util.Log; -import android.view.accessibility.AccessibilityEvent; import android.widget.RemoteViews.RemoteView; +import com.android.internal.R; + import java.util.Formatter; import java.util.IllegalFormatException; import java.util.Locale; @@ -37,11 +36,17 @@ import java.util.Locale; * <p> * You can give it a start time in the {@link SystemClock#elapsedRealtime} timebase, * and it counts up from that, or if you don't give it a base time, it will use the - * time at which you call {@link #start}. By default it will display the current + * time at which you call {@link #start}. + * + * <p>The timer can also count downward towards the base time by + * setting {@link #setCountDown(boolean)} to true. + * + * <p>By default it will display the current * timer value in the form "MM:SS" or "H:MM:SS", or you can use {@link #setFormat} * to format the timer value into an arbitrary string. * * @attr ref android.R.styleable#Chronometer_format + * @attr ref android.R.styleable#Chronometer_countDown */ @RemoteView public class Chronometer extends TextView { @@ -72,6 +77,7 @@ public class Chronometer extends TextView { private StringBuilder mFormatBuilder; private OnChronometerTickListener mOnChronometerTickListener; private StringBuilder mRecycle = new StringBuilder(8); + private boolean mCountDown; /** * Initialize this Chronometer object. @@ -102,7 +108,8 @@ public class Chronometer extends TextView { final TypedArray a = context.obtainStyledAttributes( attrs, com.android.internal.R.styleable.Chronometer, defStyleAttr, defStyleRes); - setFormat(a.getString(com.android.internal.R.styleable.Chronometer_format)); + setFormat(a.getString(R.styleable.Chronometer_format)); + setCountDown(a.getBoolean(R.styleable.Chronometer_countDown, false)); a.recycle(); init(); @@ -114,6 +121,27 @@ public class Chronometer extends TextView { } /** + * Set this view to count down to the base instead of counting up from it. + * + * @param countDown whether this view should count down + * + * @see #setBase(long) + */ + @android.view.RemotableViewMethod + public void setCountDown(boolean countDown) { + mCountDown = countDown; + } + + /** + * @return whether this view counts down + * + * @see #setCountDown(boolean) + */ + public boolean isCountDown() { + return mCountDown; + } + + /** * Set the time that the count-up timer is in reference to. * * @param base Use the {@link SystemClock#elapsedRealtime} time base. @@ -226,9 +254,17 @@ public class Chronometer extends TextView { private synchronized void updateText(long now) { mNow = now; - long seconds = now - mBase; + long seconds = mCountDown ? mBase - now : now - mBase; seconds /= 1000; + boolean negative = false; + if (seconds < 0) { + seconds = -seconds; + negative = true; + } String text = DateUtils.formatElapsedTime(mRecycle, seconds); + if (negative) { + text = getResources().getString(R.string.negative_duration, text); + } if (mFormat != null) { Locale loc = Locale.getDefault(); diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java index 1826dd82abed..b2ef6873dc30 100644 --- a/core/java/android/widget/Editor.java +++ b/core/java/android/widget/Editor.java @@ -965,20 +965,21 @@ public class Editor { private int getNextCursorOffset(int offset, boolean findAfterGivenOffset) { final Layout layout = mTextView.getLayout(); if (layout == null) return offset; - final CharSequence text = mTextView.getText(); - final int nextOffset = layout.getPaint().getTextRunCursor(text, 0, text.length(), - layout.isRtlCharAt(offset) ? Paint.DIRECTION_RTL : Paint.DIRECTION_LTR, - offset, findAfterGivenOffset ? Paint.CURSOR_AFTER : Paint.CURSOR_BEFORE); - return nextOffset == -1 ? offset : nextOffset; + return findAfterGivenOffset == layout.isRtlCharAt(offset) ? + layout.getOffsetToLeftOf(offset) : layout.getOffsetToRightOf(offset); } private long getCharClusterRange(int offset) { final int textLength = mTextView.getText().length(); if (offset < textLength) { - return TextUtils.packRangeInLong(offset, getNextCursorOffset(offset, true)); + final int clusterEndOffset = getNextCursorOffset(offset, true); + return TextUtils.packRangeInLong( + getNextCursorOffset(clusterEndOffset, false), clusterEndOffset); } if (offset - 1 >= 0) { - return TextUtils.packRangeInLong(getNextCursorOffset(offset, false), offset); + final int clusterStartOffset = getNextCursorOffset(offset, false); + return TextUtils.packRangeInLong(clusterStartOffset, + getNextCursorOffset(clusterStartOffset, true)); } return TextUtils.packRangeInLong(offset, offset); } @@ -1089,7 +1090,7 @@ public class Editor { CharSequence selectedText = mTextView.getTransformedText(start, end); ClipData data = ClipData.newPlainText(null, selectedText); DragLocalState localState = new DragLocalState(mTextView, start, end); - mTextView.startDragAndDrop(data, getTextThumbnailBuilder(selectedText), localState, + mTextView.startDragAndDrop(data, getTextThumbnailBuilder(start, end), localState, View.DRAG_FLAG_GLOBAL); stopTextActionMode(); if (hasSelectionController()) { @@ -2296,7 +2297,7 @@ public class Editor { } } - private DragShadowBuilder getTextThumbnailBuilder(CharSequence text) { + private DragShadowBuilder getTextThumbnailBuilder(int start, int end) { TextView shadowView = (TextView) View.inflate(mTextView.getContext(), com.android.internal.R.layout.text_drag_thumbnail, null); @@ -2304,9 +2305,11 @@ public class Editor { throw new IllegalArgumentException("Unable to inflate text drag thumbnail"); } - if (text.length() > DRAG_SHADOW_MAX_TEXT_LENGTH) { - text = text.subSequence(0, DRAG_SHADOW_MAX_TEXT_LENGTH); + if (end - start > DRAG_SHADOW_MAX_TEXT_LENGTH) { + final long range = getCharClusterRange(start + DRAG_SHADOW_MAX_TEXT_LENGTH); + end = TextUtils.unpackRangeEndFromLong(range); } + final CharSequence text = mTextView.getTransformedText(start, end); shadowView.setText(text); shadowView.setTextColor(mTextView.getTextColors()); diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java index 8fa71a21cd4a..4c81d1ac316b 100644 --- a/core/java/android/widget/PopupWindow.java +++ b/core/java/android/widget/PopupWindow.java @@ -1632,6 +1632,7 @@ public class PopupWindow { final PopupDecorView decorView = mDecorView; final View contentView = mContentView; + final OnDismissListener dismissListener = mOnDismissListener; final ViewGroup contentHolder; final ViewParent contentParent = contentView.getParent(); @@ -1653,7 +1654,7 @@ public class PopupWindow { // can expect the OnAttachStateChangeListener to have been called prior // to executing this method, so we can rely on that instead. final Transition exitTransition = mExitTransition; - if (!mIsAnchorRootAttached && exitTransition != null && decorView.isLaidOut()) { + if (mIsAnchorRootAttached && exitTransition != null && decorView.isLaidOut()) { // The decor view is non-interactive during exit transitions. final LayoutParams p = (LayoutParams) decorView.getLayoutParams(); p.flags |= LayoutParams.FLAG_NOT_TOUCHABLE; @@ -1675,19 +1676,16 @@ public class PopupWindow { new TransitionListenerAdapter() { @Override public void onTransitionEnd(Transition transition) { - dismissImmediate(decorView, contentHolder, contentView); + dismissImmediate(decorView, contentHolder, + contentView, dismissListener); } }); } else { - dismissImmediate(decorView, contentHolder, contentView); + dismissImmediate(decorView, contentHolder, contentView, dismissListener); } // Clears the anchor view. unregisterForViewTreeChanges(); - - if (mOnDismissListener != null) { - mOnDismissListener.onDismiss(); - } } /** @@ -1729,7 +1727,8 @@ public class PopupWindow { * Removes the popup from the window manager and tears down the supporting * view hierarchy, if necessary. */ - private void dismissImmediate(View decorView, ViewGroup contentHolder, View contentView) { + private void dismissImmediate(View decorView, ViewGroup contentHolder, + View contentView, OnDismissListener listener) { // If this method gets called and the decor view doesn't have a parent, // then it was either never added or was already removed. That should // never happen, but it's worth checking to avoid potential crashes. @@ -1746,6 +1745,10 @@ public class PopupWindow { mDecorView = null; mBackgroundView = null; mIsTransitioningToDismiss = false; + + if (mOnDismissListener != null) { + mOnDismissListener.onDismiss(); + } } /** diff --git a/core/java/android/widget/RemoteViews.java b/core/java/android/widget/RemoteViews.java index 4ed175d80160..914ffdf8b1e9 100644 --- a/core/java/android/widget/RemoteViews.java +++ b/core/java/android/widget/RemoteViews.java @@ -1973,13 +1973,13 @@ public class RemoteViews implements Parcelable, Filter { public SetRemoteInputsAction(Parcel parcel) { viewId = parcel.readInt(); - remoteInputs = parcel.readParcelableArray(RemoteInput.class.getClassLoader()); + remoteInputs = parcel.createTypedArray(RemoteInput.CREATOR); } public void writeToParcel(Parcel dest, int flags) { dest.writeInt(TAG); dest.writeInt(viewId); - dest.writeParcelableArray(remoteInputs, flags); + dest.writeTypedArray(remoteInputs, flags); } @Override diff --git a/core/java/com/android/internal/app/LocaleHelper.java b/core/java/com/android/internal/app/LocaleHelper.java index c7459d7b274c..aca93abddf85 100644 --- a/core/java/com/android/internal/app/LocaleHelper.java +++ b/core/java/com/android/internal/app/LocaleHelper.java @@ -16,8 +16,8 @@ package com.android.internal.app; -import android.icu.util.ULocale; import android.icu.text.ListFormatter; +import android.icu.util.ULocale; import android.util.LocaleList; import java.text.Collator; @@ -99,7 +99,7 @@ public class LocaleHelper { * @return the localized name of the locale. */ public static String getDisplayName(Locale locale, Locale displayLocale, boolean sentenceCase) { - String result = ULocale.getDisplayName(locale.toLanguageTag(), + String result = ULocale.getDisplayNameWithDialect(locale.toLanguageTag(), ULocale.forLocale(displayLocale)); return sentenceCase ? toSentenceCase(result, displayLocale) : result; } @@ -112,7 +112,8 @@ public class LocaleHelper { * @return the localized name of the locale. */ public static String getDisplayName(Locale locale, boolean sentenceCase) { - String result = ULocale.getDisplayName(locale.toLanguageTag(), ULocale.getDefault()); + String result = ULocale.getDisplayNameWithDialect(locale.toLanguageTag(), + ULocale.getDefault()); return sentenceCase ? toSentenceCase(result, Locale.getDefault()) : result; } @@ -155,7 +156,7 @@ public class LocaleHelper { } ListFormatter lfn = ListFormatter.getInstance(dispLocale); - return lfn.format(localeNames); + return lfn.format((Object[]) localeNames); } /** diff --git a/core/java/com/android/internal/app/PlatLogoActivity.java b/core/java/com/android/internal/app/PlatLogoActivity.java index 0964dcf81722..59445688aa7e 100644 --- a/core/java/com/android/internal/app/PlatLogoActivity.java +++ b/core/java/com/android/internal/app/PlatLogoActivity.java @@ -73,62 +73,28 @@ public class PlatLogoActivity extends Activity { final int size = (int) (Math.min(Math.min(dm.widthPixels, dm.heightPixels), 600*dp) - 100*dp); - final View im = new View(this); + final ImageView im = new ImageView(this); + final int pad = (int)(40*dp); + im.setPadding(pad, pad, pad, pad); im.setTranslationZ(20); im.setScaleX(0.5f); im.setScaleY(0.5f); im.setAlpha(0f); - im.setOutlineProvider(new ViewOutlineProvider() { - @Override - public void getOutline(View view, Outline outline) { - final int pad = (int) (8 * dp); - outline.setOval(pad, pad, view.getWidth() - pad, view.getHeight() - pad); - } - }); - final float hue = (float) Math.random(); - final Paint bgPaint = new Paint(); - bgPaint.setColor(HSBtoColor(hue, 0.4f, 1f)); - final Paint fgPaint = new Paint(); - fgPaint.setColor(HSBtoColor(hue, 0.5f, 1f)); - final Drawable M = getDrawable(com.android.internal.R.drawable.platlogo_m); - final Drawable platlogo = new Drawable() { - @Override - public void setAlpha(int alpha) { } - @Override - public void setColorFilter(@Nullable ColorFilter colorFilter) { } - - @Override - public int getOpacity() { - return PixelFormat.TRANSLUCENT; - } - - @Override - public void draw(Canvas c) { - final float r = c.getWidth() / 2f; - c.drawCircle(r, r, r, bgPaint); - c.drawArc(0, 0, 2 * r, 2 * r, 135, 180, false, fgPaint); - M.setBounds(0, 0, c.getWidth(), c.getHeight()); - M.draw(c); - } - }; im.setBackground(new RippleDrawable( ColorStateList.valueOf(0xFFFFFFFF), - platlogo, + getDrawable(com.android.internal.R.drawable.platlogo), null)); - im.setOutlineProvider(new ViewOutlineProvider() { - @Override - public void getOutline(View view, Outline outline) { - outline.setOval(0, 0, view.getWidth(), view.getHeight()); - } - }); +// im.setOutlineProvider(new ViewOutlineProvider() { +// @Override +// public void getOutline(View view, Outline outline) { +// outline.setOval(0, 0, view.getWidth(), view.getHeight()); +// } +// }); im.setClickable(true); im.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - if (mTapCount == 0) { - showMarshmallow(im); - } im.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { @@ -175,9 +141,6 @@ public class PlatLogoActivity extends Activity { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (keyCode != KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN) { - if (mKeyCount == 0) { - showMarshmallow(im); - } ++mKeyCount; if (mKeyCount > 2) { if (mTapCount > 5) { @@ -201,81 +164,4 @@ public class PlatLogoActivity extends Activity { .setStartDelay(800) .start(); } - - public void showMarshmallow(View im) { - final Drawable fg = getDrawable(com.android.internal.R.drawable.platlogo); - fg.setBounds(0, 0, im.getWidth(), im.getHeight()); - fg.setAlpha(0); - im.getOverlay().add(fg); - - final Animator fadeIn = ObjectAnimator.ofInt(fg, "alpha", 255); - fadeIn.setInterpolator(mInterpolator); - fadeIn.setDuration(300); - fadeIn.start(); - } - - /** - * Convert HSB components to an ARGB color. Alpha set to 0xFF. - * hsv[0] is Hue [0 .. 1) - * hsv[1] is Saturation [0...1] - * hsv[2] is Value [0...1] - * If hsv values are out of range, they are pinned. - * @param h Hue component - * @param s Saturation component - * @param b Brightness component - * @return the resulting argb color - */ - private static int HSBtoColor(float h, float s, float b) { - h = MathUtils.constrain(h, 0.0f, 1.0f); - s = MathUtils.constrain(s, 0.0f, 1.0f); - b = MathUtils.constrain(b, 0.0f, 1.0f); - - float red = 0.0f; - float green = 0.0f; - float blue = 0.0f; - - final float hf = (h - (int) h) * 6.0f; - final int ihf = (int) hf; - final float f = hf - ihf; - final float pv = b * (1.0f - s); - final float qv = b * (1.0f - s * f); - final float tv = b * (1.0f - s * (1.0f - f)); - - switch (ihf) { - case 0: // Red is the dominant color - red = b; - green = tv; - blue = pv; - break; - case 1: // Green is the dominant color - red = qv; - green = b; - blue = pv; - break; - case 2: - red = pv; - green = b; - blue = tv; - break; - case 3: // Blue is the dominant color - red = pv; - green = qv; - blue = b; - break; - case 4: - red = tv; - green = pv; - blue = b; - break; - case 5: // Red is the dominant color - red = b; - green = pv; - blue = qv; - break; - } - - return 0xFF000000 | (((int) (red * 255.0f)) << 16) | - (((int) (green * 255.0f)) << 8) | ((int) (blue * 255.0f)); - } - } diff --git a/core/java/com/android/internal/app/SuggestedLocaleAdapter.java b/core/java/com/android/internal/app/SuggestedLocaleAdapter.java index 478a56d774a5..0d4a5aac2c0a 100644 --- a/core/java/com/android/internal/app/SuggestedLocaleAdapter.java +++ b/core/java/com/android/internal/app/SuggestedLocaleAdapter.java @@ -23,7 +23,6 @@ import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Filter; import android.widget.Filterable; -import android.widget.ImageView; import android.widget.TextView; import com.android.internal.R; @@ -156,16 +155,9 @@ public class SuggestedLocaleAdapter extends BaseAdapter implements Filterable { } TextView text = (TextView) convertView.findViewById(R.id.locale); - ImageView localized = (ImageView) convertView.findViewById(R.id.l10nWarn); LocaleStore.LocaleInfo item = (LocaleStore.LocaleInfo) getItem(position); text.setText(item.getLabel()); - if (item.isTranslated() || mCountryMode) { - localized.setVisibility(View.GONE); - text.setTextLocale(item.getLocale()); - } else { - localized.setVisibility(View.VISIBLE); - text.setTextLocale(Locale.getDefault()); - } + text.setTextLocale(item.getLocale()); if (mCountryMode) { int layoutDir = TextUtils.getLayoutDirectionFromLocale(item.getParent()); //noinspection ResourceType diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index 648b1a54927d..d917cdb30927 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -93,7 +93,7 @@ import java.util.concurrent.locks.ReentrantLock; * battery life. All times are represented in microseconds except where indicated * otherwise. */ -public final class BatteryStatsImpl extends BatteryStats { +public class BatteryStatsImpl extends BatteryStats { private static final String TAG = "BatteryStatsImpl"; private static final boolean DEBUG = false; public static final boolean DEBUG_ENERGY = false; @@ -126,6 +126,8 @@ public final class BatteryStatsImpl extends BatteryStats { // Number of transmit power states the Bluetooth controller can be in. private static final int NUM_BT_TX_LEVELS = 1; + protected Clocks mClocks; + private final JournaledFile mFile; public final AtomicFile mCheckinFile; public final AtomicFile mDailyFile; @@ -185,6 +187,21 @@ public final class BatteryStatsImpl extends BatteryStats { } } + public interface Clocks { + public long elapsedRealtime(); + public long uptimeMillis(); + } + + public static class SystemClocks implements Clocks { + public long elapsedRealtime() { + return SystemClock.elapsedRealtime(); + } + + public long uptimeMillis() { + return SystemClock.uptimeMillis(); + } + } + public interface ExternalStatsSync { public static final int UPDATE_CPU = 0x01; public static final int UPDATE_WIFI = 0x02; @@ -236,7 +253,7 @@ public final class BatteryStatsImpl extends BatteryStats { // These are the objects that will want to do something when the device // is unplugged from power. - final TimeBase mOnBatteryTimeBase = new TimeBase(); + protected final TimeBase mOnBatteryTimeBase = new TimeBase(); // These are the objects that will want to do something when the device // is unplugged from power *and* the screen is off. @@ -541,6 +558,11 @@ public final class BatteryStatsImpl extends BatteryStats { } public BatteryStatsImpl() { + this(new SystemClocks()); + } + + public BatteryStatsImpl(Clocks clocks) { + init(clocks); mFile = null; mCheckinFile = null; mDailyFile = null; @@ -549,25 +571,40 @@ public final class BatteryStatsImpl extends BatteryStats { clearHistoryLocked(); } + private void init(Clocks clocks) { + mClocks = clocks; + mMobileNetworkStats = new NetworkStats[] { + new NetworkStats(mClocks.elapsedRealtime(), 50), + new NetworkStats(mClocks.elapsedRealtime(), 50), + new NetworkStats(mClocks.elapsedRealtime(), 50) + }; + mWifiNetworkStats = new NetworkStats[] { + new NetworkStats(mClocks.elapsedRealtime(), 50), + new NetworkStats(mClocks.elapsedRealtime(), 50), + new NetworkStats(mClocks.elapsedRealtime(), 50) + }; + } + public static interface TimeBaseObs { void onTimeStarted(long elapsedRealtime, long baseUptime, long baseRealtime); void onTimeStopped(long elapsedRealtime, long baseUptime, long baseRealtime); } - static class TimeBase { - private final ArrayList<TimeBaseObs> mObservers = new ArrayList<>(); + // methods are protected not private to be VisibleForTesting + public static class TimeBase { + protected final ArrayList<TimeBaseObs> mObservers = new ArrayList<>(); - private long mUptime; - private long mRealtime; + protected long mUptime; + protected long mRealtime; - private boolean mRunning; + protected boolean mRunning; - private long mPastUptime; - private long mUptimeStart; - private long mPastRealtime; - private long mRealtimeStart; - private long mUnpluggedUptime; - private long mUnpluggedRealtime; + protected long mPastUptime; + protected long mUptimeStart; + protected long mPastRealtime; + protected long mRealtimeStart; + protected long mUnpluggedUptime; + protected long mUnpluggedRealtime; public void dump(PrintWriter pw, String prefix) { StringBuilder sb = new StringBuilder(128); @@ -608,6 +645,10 @@ public final class BatteryStatsImpl extends BatteryStats { } } + public boolean hasObserver(TimeBaseObs observer) { + return mObservers.contains(observer); + } + public void init(long uptime, long realtime) { mRealtime = 0; mUptime = 0; @@ -626,7 +667,10 @@ public final class BatteryStatsImpl extends BatteryStats { } else { mUptimeStart = uptime; mRealtimeStart = realtime; + // TODO: Since mUptimeStart was just reset and we are running, getUptime will + // just return mPastUptime. Also, are we sure we don't want to reset that? mUnpluggedUptime = getUptime(uptime); + // TODO: likewise. mUnpluggedRealtime = getRealtime(realtime); } } @@ -949,13 +993,14 @@ public final class BatteryStatsImpl extends BatteryStats { * State for keeping track of timing information. */ public static abstract class Timer extends BatteryStats.Timer implements TimeBaseObs { - final int mType; - final TimeBase mTimeBase; + protected final Clocks mClocks; + protected final int mType; + protected final TimeBase mTimeBase; - int mCount; - int mLoadedCount; - int mLastCount; - int mUnpluggedCount; + protected int mCount; + protected int mLoadedCount; + protected int mLastCount; + protected int mUnpluggedCount; // Times are in microseconds for better accuracy when dividing by the // lock count, and are in "battery realtime" units. @@ -965,32 +1010,32 @@ public final class BatteryStatsImpl extends BatteryStats { * boot, to the last time something interesting happened in the * current run. */ - long mTotalTime; + protected long mTotalTime; /** * The total time we loaded for the previous runs. Subtract this from * mTotalTime to find the time for the current run of the system. */ - long mLoadedTime; + protected long mLoadedTime; /** * The run time of the last run of the system, as loaded from the * saved data. */ - long mLastTime; + protected long mLastTime; /** * The value of mTotalTime when unplug() was last called. Subtract * this from mTotalTime to find the time since the last unplug from * power. */ - long mUnpluggedTime; + protected long mUnpluggedTime; /** * The total time this timer has been running until the latest mark has been set. * Subtract this from mTotalTime to get the time spent running since the mark was set. */ - long mTimeBeforeMark; + protected long mTimeBeforeMark; /** * Constructs from a parcel. @@ -998,7 +1043,8 @@ public final class BatteryStatsImpl extends BatteryStats { * @param timeBase * @param in */ - Timer(int type, TimeBase timeBase, Parcel in) { + public Timer(Clocks clocks, int type, TimeBase timeBase, Parcel in) { + mClocks = clocks; mType = type; mTimeBase = timeBase; @@ -1015,7 +1061,8 @@ public final class BatteryStatsImpl extends BatteryStats { if (DEBUG) Log.i(TAG, "**** READ TIMER #" + mType + ": mTotalTime=" + mTotalTime); } - Timer(int type, TimeBase timeBase) { + public Timer(Clocks clocks, int type, TimeBase timeBase) { + mClocks = clocks; mType = type; mTimeBase = timeBase; timeBase.add(this); @@ -1029,7 +1076,7 @@ public final class BatteryStatsImpl extends BatteryStats { * Clear state of this timer. Returns true if the timer is inactive * so can be completely dropped. */ - boolean reset(boolean detachIfReset) { + public boolean reset(boolean detachIfReset) { mTotalTime = mLoadedTime = mLastTime = mTimeBeforeMark = 0; mCount = mLoadedCount = mLastCount = 0; if (detachIfReset) { @@ -1038,7 +1085,7 @@ public final class BatteryStatsImpl extends BatteryStats { return true; } - void detach() { + public void detach() { mTimeBase.remove(this); } @@ -1142,13 +1189,13 @@ public final class BatteryStatsImpl extends BatteryStats { } - void writeSummaryFromParcelLocked(Parcel out, long elapsedRealtimeUs) { + public void writeSummaryFromParcelLocked(Parcel out, long elapsedRealtimeUs) { long runTime = computeRunTimeLocked(mTimeBase.getRealtime(elapsedRealtimeUs)); out.writeLong(runTime); out.writeInt(mCount); } - void readSummaryFromParcelLocked(Parcel in) { + public void readSummaryFromParcelLocked(Parcel in) { // Multiply by 1000 for backwards compatibility mTotalTime = mLoadedTime = in.readLong(); mLastTime = 0; @@ -1162,7 +1209,7 @@ public final class BatteryStatsImpl extends BatteryStats { } } - public static final class SamplingTimer extends Timer { + public static class SamplingTimer extends Timer { /** * The most recent reported count from /proc/wakelocks. @@ -1202,8 +1249,8 @@ public final class BatteryStatsImpl extends BatteryStats { */ int mUpdateVersion; - SamplingTimer(TimeBase timeBase, Parcel in) { - super(0, timeBase, in); + SamplingTimer(Clocks clocks, TimeBase timeBase, Parcel in) { + super(clocks, 0, timeBase, in); mCurrentReportedCount = in.readInt(); mUnpluggedReportedCount = in.readInt(); mCurrentReportedTotalTime = in.readLong(); @@ -1212,8 +1259,8 @@ public final class BatteryStatsImpl extends BatteryStats { mTimeBaseRunning = timeBase.isRunning(); } - SamplingTimer(TimeBase timeBase, boolean trackReportedValues) { - super(0, timeBase); + SamplingTimer(Clocks clocks, TimeBase timeBase, boolean trackReportedValues) { + super(clocks, 0, timeBase); mTrackingReportedValues = trackReportedValues; mTimeBaseRunning = timeBase.isRunning(); } @@ -1301,20 +1348,20 @@ public final class BatteryStatsImpl extends BatteryStats { out.writeInt(mTrackingReportedValues ? 1 : 0); } - boolean reset(boolean detachIfReset) { + public boolean reset(boolean detachIfReset) { super.reset(detachIfReset); setStale(); return true; } - void writeSummaryFromParcelLocked(Parcel out, long batteryRealtime) { + public void writeSummaryFromParcelLocked(Parcel out, long batteryRealtime) { super.writeSummaryFromParcelLocked(out, batteryRealtime); out.writeLong(mCurrentReportedTotalTime); out.writeInt(mCurrentReportedCount); out.writeInt(mTrackingReportedValues ? 1 : 0); } - void readSummaryFromParcelLocked(Parcel in) { + public void readSummaryFromParcelLocked(Parcel in) { super.readSummaryFromParcelLocked(in); mUnpluggedReportedTotalTime = mCurrentReportedTotalTime = in.readLong(); mUnpluggedReportedCount = mCurrentReportedCount = in.readInt(); @@ -1326,7 +1373,7 @@ public final class BatteryStatsImpl extends BatteryStats { * A timer that increments in batches. It does not run for durations, but just jumps * for a pre-determined amount. */ - public static final class BatchTimer extends Timer { + public static class BatchTimer extends Timer { final Uid mUid; /** @@ -1344,16 +1391,16 @@ public final class BatteryStatsImpl extends BatteryStats { */ boolean mInDischarge; - BatchTimer(Uid uid, int type, TimeBase timeBase, Parcel in) { - super(type, timeBase, in); + BatchTimer(Clocks clocks, Uid uid, int type, TimeBase timeBase, Parcel in) { + super(clocks, type, timeBase, in); mUid = uid; mLastAddedTime = in.readLong(); mLastAddedDuration = in.readLong(); mInDischarge = timeBase.isRunning(); } - BatchTimer(Uid uid, int type, TimeBase timeBase) { - super(type, timeBase); + BatchTimer(Clocks clocks, Uid uid, int type, TimeBase timeBase) { + super(clocks, type, timeBase); mUid = uid; mInDischarge = timeBase.isRunning(); } @@ -1367,7 +1414,7 @@ public final class BatteryStatsImpl extends BatteryStats { @Override public void onTimeStopped(long elapsedRealtime, long baseUptime, long baseRealtime) { - recomputeLastDuration(SystemClock.elapsedRealtime() * 1000, false); + recomputeLastDuration(mClocks.elapsedRealtime() * 1000, false); mInDischarge = false; super.onTimeStopped(elapsedRealtime, baseUptime, baseRealtime); } @@ -1416,7 +1463,7 @@ public final class BatteryStatsImpl extends BatteryStats { } public void addDuration(BatteryStatsImpl stats, long durationMillis) { - final long now = SystemClock.elapsedRealtime() * 1000; + final long now = mClocks.elapsedRealtime() * 1000; recomputeLastDuration(now, true); mLastAddedTime = now; mLastAddedDuration = durationMillis * 1000; @@ -1427,7 +1474,7 @@ public final class BatteryStatsImpl extends BatteryStats { } public void abortLastDuration(BatteryStatsImpl stats) { - final long now = SystemClock.elapsedRealtime() * 1000; + final long now = mClocks.elapsedRealtime() * 1000; recomputeLastDuration(now, true); } @@ -1438,7 +1485,7 @@ public final class BatteryStatsImpl extends BatteryStats { @Override protected long computeRunTimeLocked(long curBatteryRealtime) { - final long overage = computeOverage(SystemClock.elapsedRealtime() * 1000); + final long overage = computeOverage(mClocks.elapsedRealtime() * 1000); if (overage > 0) { return mTotalTime = overage; } @@ -1446,8 +1493,8 @@ public final class BatteryStatsImpl extends BatteryStats { } @Override - boolean reset(boolean detachIfReset) { - final long now = SystemClock.elapsedRealtime() * 1000; + public boolean reset(boolean detachIfReset) { + final long now = mClocks.elapsedRealtime() * 1000; recomputeLastDuration(now, true); boolean stillActive = mLastAddedTime == now; super.reset(!stillActive && detachIfReset); @@ -1458,7 +1505,7 @@ public final class BatteryStatsImpl extends BatteryStats { /** * State for keeping track of timing information. */ - public static final class StopwatchTimer extends Timer { + public static class StopwatchTimer extends Timer { final Uid mUid; final ArrayList<StopwatchTimer> mTimerPool; @@ -1485,22 +1532,22 @@ public final class BatteryStatsImpl extends BatteryStats { */ boolean mInList; - StopwatchTimer(Uid uid, int type, ArrayList<StopwatchTimer> timerPool, + public StopwatchTimer(Clocks clocks, Uid uid, int type, ArrayList<StopwatchTimer> timerPool, TimeBase timeBase, Parcel in) { - super(type, timeBase, in); + super(clocks, type, timeBase, in); mUid = uid; mTimerPool = timerPool; mUpdateTime = in.readLong(); } - StopwatchTimer(Uid uid, int type, ArrayList<StopwatchTimer> timerPool, + public StopwatchTimer(Clocks clocks, Uid uid, int type, ArrayList<StopwatchTimer> timerPool, TimeBase timeBase) { - super(type, timeBase); + super(clocks, type, timeBase); mUid = uid; mTimerPool = timerPool; } - void setTimeout(long timeout) { + public void setTimeout(long timeout) { mTimeout = timeout; } @@ -1528,7 +1575,7 @@ public final class BatteryStatsImpl extends BatteryStats { + " mAcquireTime=" + mAcquireTime); } - void startRunningLocked(long elapsedRealtimeMs) { + public void startRunningLocked(long elapsedRealtimeMs) { if (mNesting++ == 0) { final long batteryRealtime = mTimeBase.getRealtime(elapsedRealtimeMs * 1000); mUpdateTime = batteryRealtime; @@ -1550,11 +1597,11 @@ public final class BatteryStatsImpl extends BatteryStats { } } - boolean isRunningLocked() { + public boolean isRunningLocked() { return mNesting > 0; } - void stopRunningLocked(long elapsedRealtimeMs) { + public void stopRunningLocked(long elapsedRealtimeMs) { // Ignore attempt to stop a timer that isn't running if (mNesting == 0) { return; @@ -1587,7 +1634,7 @@ public final class BatteryStatsImpl extends BatteryStats { } } - void stopAllRunningLocked(long elapsedRealtimeMs) { + public void stopAllRunningLocked(long elapsedRealtimeMs) { if (mNesting > 0) { mNesting = 1; stopRunningLocked(elapsedRealtimeMs); @@ -1632,18 +1679,18 @@ public final class BatteryStatsImpl extends BatteryStats { } @Override - boolean reset(boolean detachIfReset) { + public boolean reset(boolean detachIfReset) { boolean canDetach = mNesting <= 0; super.reset(canDetach && detachIfReset); if (mNesting > 0) { - mUpdateTime = mTimeBase.getRealtime(SystemClock.elapsedRealtime() * 1000); + mUpdateTime = mTimeBase.getRealtime(mClocks.elapsedRealtime() * 1000); } mAcquireTime = mTotalTime; return canDetach; } @Override - void detach() { + public void detach() { super.detach(); if (mTimerPool != null) { mTimerPool.remove(this); @@ -1651,7 +1698,7 @@ public final class BatteryStatsImpl extends BatteryStats { } @Override - void readSummaryFromParcelLocked(Parcel in) { + public void readSummaryFromParcelLocked(Parcel in) { super.readSummaryFromParcelLocked(in); mNesting = 0; } @@ -1943,7 +1990,7 @@ public final class BatteryStatsImpl extends BatteryStats { public SamplingTimer getWakeupReasonTimerLocked(String name) { SamplingTimer timer = mWakeupReasonStats.get(name); if (timer == null) { - timer = new SamplingTimer(mOnBatteryTimeBase, true); + timer = new SamplingTimer(mClocks, mOnBatteryTimeBase, true); mWakeupReasonStats.put(name, timer); } return timer; @@ -1956,7 +2003,8 @@ public final class BatteryStatsImpl extends BatteryStats { public SamplingTimer getKernelWakelockTimerLocked(String name) { SamplingTimer kwlt = mKernelWakelockStats.get(name); if (kwlt == null) { - kwlt = new SamplingTimer(mOnBatteryScreenOffTimeBase, true /* track reported values */); + kwlt = new SamplingTimer(mClocks, mOnBatteryScreenOffTimeBase, + true /* track reported values */); mKernelWakelockStats.put(name, kwlt); } return kwlt; @@ -2729,8 +2777,8 @@ public final class BatteryStatsImpl extends BatteryStats { if (!mActiveEvents.updateState(code, name, uid, 0)) { return; } - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); addHistoryEventLocked(elapsedRealtime, uptime, code, name, uid); } @@ -2740,7 +2788,7 @@ public final class BatteryStatsImpl extends BatteryStats { // If the start clock time has changed by more than a year, then presumably // the previous time was completely bogus. So we are going to figure out a // new time based on how much time has elapsed since we started counting. - mStartClockTime = currentTime - (SystemClock.elapsedRealtime()-(mRealtimeStart/1000)); + mStartClockTime = currentTime - (mClocks.elapsedRealtime()-(mRealtimeStart/1000)); return true; } return false; @@ -2748,8 +2796,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteCurrentTimeChangedLocked() { final long currentTime = System.currentTimeMillis(); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); recordCurrentTimeChangeLocked(currentTime, elapsedRealtime, uptime); ensureStartClockTime(currentTime); } @@ -2766,8 +2814,8 @@ public final class BatteryStatsImpl extends BatteryStats { if (!mRecordAllHistory) { return; } - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); addHistoryEventLocked(elapsedRealtime, uptime, HistoryItem.EVENT_PROC_START, name, uid); } @@ -2800,15 +2848,15 @@ public final class BatteryStatsImpl extends BatteryStats { if (!mRecordAllHistory) { return; } - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); addHistoryEventLocked(elapsedRealtime, uptime, HistoryItem.EVENT_PROC_FINISH, name, uid); } public void noteSyncStartLocked(String name, int uid) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); getUidStatsLocked(uid).noteStartSyncLocked(name, elapsedRealtime); if (!mActiveEvents.updateState(HistoryItem.EVENT_SYNC_START, name, uid, 0)) { return; @@ -2818,8 +2866,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteSyncFinishLocked(String name, int uid) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); getUidStatsLocked(uid).noteStopSyncLocked(name, elapsedRealtime); if (!mActiveEvents.updateState(HistoryItem.EVENT_SYNC_FINISH, name, uid, 0)) { return; @@ -2829,8 +2877,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteJobStartLocked(String name, int uid) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); getUidStatsLocked(uid).noteStartJobLocked(name, elapsedRealtime); if (!mActiveEvents.updateState(HistoryItem.EVENT_JOB_START, name, uid, 0)) { return; @@ -2840,8 +2888,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteJobFinishLocked(String name, int uid) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); getUidStatsLocked(uid).noteStopJobLocked(name, elapsedRealtime); if (!mActiveEvents.updateState(HistoryItem.EVENT_JOB_FINISH, name, uid, 0)) { return; @@ -2854,8 +2902,8 @@ public final class BatteryStatsImpl extends BatteryStats { return; } uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (!mActiveEvents.updateState(HistoryItem.EVENT_ALARM_START, name, uid, 0)) { return; } @@ -2867,8 +2915,8 @@ public final class BatteryStatsImpl extends BatteryStats { return; } uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (!mActiveEvents.updateState(HistoryItem.EVENT_ALARM_FINISH, name, uid, 0)) { return; } @@ -2898,8 +2946,8 @@ public final class BatteryStatsImpl extends BatteryStats { HashMap<String, SparseIntArray> active = mActiveEvents.getStateForEvent( HistoryItem.EVENT_PROC); if (active != null) { - long mSecRealtime = SystemClock.elapsedRealtime(); - final long mSecUptime = SystemClock.uptimeMillis(); + long mSecRealtime = mClocks.elapsedRealtime(); + final long mSecUptime = mClocks.uptimeMillis(); for (HashMap.Entry<String, SparseIntArray> ent : active.entrySet()) { SparseIntArray uids = ent.getValue(); for (int j=0; j<uids.size(); j++) { @@ -2913,8 +2961,8 @@ public final class BatteryStatsImpl extends BatteryStats { HashMap<String, SparseIntArray> active = mActiveEvents.getStateForEvent( HistoryItem.EVENT_PROC); if (active != null) { - long mSecRealtime = SystemClock.elapsedRealtime(); - final long mSecUptime = SystemClock.uptimeMillis(); + long mSecRealtime = mClocks.elapsedRealtime(); + final long mSecUptime = mClocks.uptimeMillis(); for (HashMap.Entry<String, SparseIntArray> ent : active.entrySet()) { SparseIntArray uids = ent.getValue(); for (int j=0; j<uids.size(); j++) { @@ -3023,8 +3071,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteStartWakeFromSourceLocked(WorkSource ws, int pid, String name, String historyName, int type, boolean unimportantForLogging) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); final int N = ws.size(); for (int i=0; i<N; i++) { noteStartWakeLocked(ws.get(i), pid, name, historyName, type, unimportantForLogging, @@ -3035,8 +3083,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteChangeWakelockFromSourceLocked(WorkSource ws, int pid, String name, String historyName, int type, WorkSource newWs, int newPid, String newName, String newHistoryName, int newType, boolean newUnimportantForLogging) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); // For correct semantics, we start the need worksources first, so that we won't // make inappropriate history items as if all wake locks went away and new ones // appeared. This is okay because tracking of wake locks allows nesting. @@ -3053,8 +3101,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteStopWakeFromSourceLocked(WorkSource ws, int pid, String name, String historyName, int type) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); final int N = ws.size(); for (int i=0; i<N; i++) { noteStopWakeLocked(ws.get(i), pid, name, historyName, type, elapsedRealtime, uptime); @@ -3072,8 +3120,8 @@ public final class BatteryStatsImpl extends BatteryStats { } public void noteWakeupReasonLocked(String reason) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (DEBUG_HISTORY) Slog.v(TAG, "Wakeup reason \"" + reason +"\": " + Integer.toHexString(mHistoryCur.states)); aggregateLastWakeupUptimeLocked(uptime); @@ -3147,8 +3195,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteStartSensorLocked(int uid, int sensor) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (mSensorNesting == 0) { mHistoryCur.states |= HistoryItem.STATE_SENSOR_ON_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Start sensor to: " @@ -3161,8 +3209,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteStopSensorLocked(int uid, int sensor) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mSensorNesting--; if (mSensorNesting == 0) { mHistoryCur.states &= ~HistoryItem.STATE_SENSOR_ON_FLAG; @@ -3177,8 +3225,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteStartGpsLocked(int uid) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (mGpsNesting == 0) { mHistoryCur.states |= HistoryItem.STATE_GPS_ON_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Start GPS to: " @@ -3191,8 +3239,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteStopGpsLocked(int uid) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mGpsNesting--; if (mGpsNesting == 0) { mHistoryCur.states &= ~HistoryItem.STATE_GPS_ON_FLAG; @@ -3223,8 +3271,8 @@ public final class BatteryStatsImpl extends BatteryStats { if (state == Display.STATE_ON) { // Screen turning on. - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mHistoryCur.states |= HistoryItem.STATE_SCREEN_ON_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Screen on to: " + Integer.toHexString(mHistoryCur.states)); @@ -3235,7 +3283,7 @@ public final class BatteryStatsImpl extends BatteryStats { } updateTimeBasesLocked(mOnBatteryTimeBase.isRunning(), false, - SystemClock.uptimeMillis() * 1000, elapsedRealtime * 1000); + mClocks.uptimeMillis() * 1000, elapsedRealtime * 1000); // Fake a wake lock, so we consider the device waked as long // as the screen is on. @@ -3248,8 +3296,8 @@ public final class BatteryStatsImpl extends BatteryStats { } } else if (oldState == Display.STATE_ON) { // Screen turning off or dozing. - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mHistoryCur.states &= ~HistoryItem.STATE_SCREEN_ON_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Screen off to: " + Integer.toHexString(mHistoryCur.states)); @@ -3263,7 +3311,7 @@ public final class BatteryStatsImpl extends BatteryStats { elapsedRealtime, uptime); updateTimeBasesLocked(mOnBatteryTimeBase.isRunning(), true, - SystemClock.uptimeMillis() * 1000, elapsedRealtime * 1000); + mClocks.uptimeMillis() * 1000, elapsedRealtime * 1000); // Update discharge amounts. if (mOnBatteryInternal) { @@ -3279,8 +3327,8 @@ public final class BatteryStatsImpl extends BatteryStats { if (bin < 0) bin = 0; else if (bin >= NUM_SCREEN_BRIGHTNESS_BINS) bin = NUM_SCREEN_BRIGHTNESS_BINS-1; if (mScreenBrightnessBin != bin) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mHistoryCur.states = (mHistoryCur.states&~HistoryItem.STATE_BRIGHTNESS_MASK) | (bin << HistoryItem.STATE_BRIGHTNESS_SHIFT); if (DEBUG_HISTORY) Slog.v(TAG, "Screen brightness " + bin + " to: " @@ -3304,15 +3352,15 @@ public final class BatteryStatsImpl extends BatteryStats { } public void noteWakeUpLocked(String reason, int reasonUid) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); addHistoryEventLocked(elapsedRealtime, uptime, HistoryItem.EVENT_SCREEN_WAKE_UP, reason, reasonUid); } public void noteInteractiveLocked(boolean interactive) { if (mInteractive != interactive) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); + final long elapsedRealtime = mClocks.elapsedRealtime(); mInteractive = interactive; if (DEBUG) Slog.v(TAG, "Interactive: " + interactive); if (interactive) { @@ -3324,16 +3372,16 @@ public final class BatteryStatsImpl extends BatteryStats { } public void noteConnectivityChangedLocked(int type, String extra) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); addHistoryEventLocked(elapsedRealtime, uptime, HistoryItem.EVENT_CONNECTIVITY_CHANGED, extra, type); mNumConnectivityChange++; } public void noteMobileRadioPowerState(int powerState, long timestampNs) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (mMobileRadioPowerState != powerState) { long realElapsedRealtimeMs; final boolean active = @@ -3375,8 +3423,8 @@ public final class BatteryStatsImpl extends BatteryStats { int stepState = enabled ? STEP_LEVEL_MODE_POWER_SAVE : 0; mModStepMode |= (mCurStepMode&STEP_LEVEL_MODE_POWER_SAVE) ^ stepState; mCurStepMode = (mCurStepMode&~STEP_LEVEL_MODE_POWER_SAVE) | stepState; - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mPowerSaveModeEnabled = enabled; if (enabled) { mHistoryCur.states2 |= HistoryItem.STATE2_POWER_SAVE_FLAG; @@ -3394,8 +3442,8 @@ public final class BatteryStatsImpl extends BatteryStats { } public void noteDeviceIdleModeLocked(int mode, String activeReason, int activeUid) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); boolean nowIdling = mode == DEVICE_IDLE_MODE_FULL; if (mDeviceIdling && !nowIdling && activeReason == null) { // We don't go out of general idling mode until explicitly taken out of @@ -3460,8 +3508,8 @@ public final class BatteryStatsImpl extends BatteryStats { } public void notePackageInstalledLocked(String pkgName, int versionCode) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); addHistoryEventLocked(elapsedRealtime, uptime, HistoryItem.EVENT_PACKAGE_INSTALLED, pkgName, versionCode); PackageChange pc = new PackageChange(); @@ -3472,8 +3520,8 @@ public final class BatteryStatsImpl extends BatteryStats { } public void notePackageUninstalledLocked(String pkgName) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); addHistoryEventLocked(elapsedRealtime, uptime, HistoryItem.EVENT_PACKAGE_UNINSTALLED, pkgName, 0); PackageChange pc = new PackageChange(); @@ -3491,8 +3539,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void notePhoneOnLocked() { if (!mPhoneOn) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mHistoryCur.states2 |= HistoryItem.STATE2_PHONE_IN_CALL_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Phone on to: " + Integer.toHexString(mHistoryCur.states)); @@ -3504,8 +3552,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void notePhoneOffLocked() { if (mPhoneOn) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mHistoryCur.states2 &= ~HistoryItem.STATE2_PHONE_IN_CALL_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Phone off to: " + Integer.toHexString(mHistoryCur.states)); @@ -3516,7 +3564,7 @@ public final class BatteryStatsImpl extends BatteryStats { } void stopAllPhoneSignalStrengthTimersLocked(int except) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); + final long elapsedRealtime = mClocks.elapsedRealtime(); for (int i = 0; i < SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) { if (i == except) { continue; @@ -3548,8 +3596,8 @@ public final class BatteryStatsImpl extends BatteryStats { mPhoneSimStateRaw = simState; mPhoneSignalStrengthBinRaw = strengthBin; - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (simState == TelephonyManager.SIM_STATE_ABSENT) { // In this case we will always be STATE_OUT_OF_SERVICE, so need @@ -3697,8 +3745,8 @@ public final class BatteryStatsImpl extends BatteryStats { } if (DEBUG) Log.i(TAG, "Phone Data Connection -> " + dataType + " = " + hasData); if (mPhoneDataConnectionType != bin) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mHistoryCur.states = (mHistoryCur.states&~HistoryItem.STATE_DATA_CONNECTION_MASK) | (bin << HistoryItem.STATE_DATA_CONNECTION_SHIFT); if (DEBUG_HISTORY) Slog.v(TAG, "Data connection " + bin + " to: " @@ -3715,8 +3763,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteWifiOnLocked() { if (!mWifiOn) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mHistoryCur.states2 |= HistoryItem.STATE2_WIFI_ON_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "WIFI on to: " + Integer.toHexString(mHistoryCur.states)); @@ -3728,8 +3776,8 @@ public final class BatteryStatsImpl extends BatteryStats { } public void noteWifiOffLocked() { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (mWifiOn) { mHistoryCur.states2 &= ~HistoryItem.STATE2_WIFI_ON_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "WIFI off to: " @@ -3743,8 +3791,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteAudioOnLocked(int uid) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (mAudioOnNesting == 0) { mHistoryCur.states |= HistoryItem.STATE_AUDIO_ON_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Audio on to: " @@ -3761,8 +3809,8 @@ public final class BatteryStatsImpl extends BatteryStats { return; } uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (--mAudioOnNesting == 0) { mHistoryCur.states &= ~HistoryItem.STATE_AUDIO_ON_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Audio off to: " @@ -3775,8 +3823,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteVideoOnLocked(int uid) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (mVideoOnNesting == 0) { mHistoryCur.states2 |= HistoryItem.STATE2_VIDEO_ON_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Video on to: " @@ -3793,8 +3841,8 @@ public final class BatteryStatsImpl extends BatteryStats { return; } uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (--mVideoOnNesting == 0) { mHistoryCur.states2 &= ~HistoryItem.STATE2_VIDEO_ON_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Video off to: " @@ -3807,8 +3855,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteResetAudioLocked() { if (mAudioOnNesting > 0) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mAudioOnNesting = 0; mHistoryCur.states &= ~HistoryItem.STATE_AUDIO_ON_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Audio off to: " @@ -3824,8 +3872,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteResetVideoLocked() { if (mVideoOnNesting > 0) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mAudioOnNesting = 0; mHistoryCur.states2 &= ~HistoryItem.STATE2_VIDEO_ON_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Video off to: " @@ -3841,12 +3889,12 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteActivityResumedLocked(int uid) { uid = mapUid(uid); - getUidStatsLocked(uid).noteActivityResumedLocked(SystemClock.elapsedRealtime()); + getUidStatsLocked(uid).noteActivityResumedLocked(mClocks.elapsedRealtime()); } public void noteActivityPausedLocked(int uid) { uid = mapUid(uid); - getUidStatsLocked(uid).noteActivityPausedLocked(SystemClock.elapsedRealtime()); + getUidStatsLocked(uid).noteActivityPausedLocked(mClocks.elapsedRealtime()); } public void noteVibratorOnLocked(int uid, long durationMillis) { @@ -3861,8 +3909,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteFlashlightOnLocked(int uid) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (mFlashlightOnNesting++ == 0) { mHistoryCur.states2 |= HistoryItem.STATE2_FLASHLIGHT_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Flashlight on to: " @@ -3878,8 +3926,8 @@ public final class BatteryStatsImpl extends BatteryStats { return; } uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (--mFlashlightOnNesting == 0) { mHistoryCur.states2 &= ~HistoryItem.STATE2_FLASHLIGHT_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Flashlight off to: " @@ -3892,8 +3940,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteCameraOnLocked(int uid) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (mCameraOnNesting++ == 0) { mHistoryCur.states2 |= HistoryItem.STATE2_CAMERA_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Camera on to: " @@ -3909,8 +3957,8 @@ public final class BatteryStatsImpl extends BatteryStats { return; } uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (--mCameraOnNesting == 0) { mHistoryCur.states2 &= ~HistoryItem.STATE2_CAMERA_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Camera off to: " @@ -3923,8 +3971,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteResetCameraLocked() { if (mCameraOnNesting > 0) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mCameraOnNesting = 0; mHistoryCur.states2 &= ~HistoryItem.STATE2_CAMERA_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Camera off to: " @@ -3940,8 +3988,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteResetFlashlightLocked() { if (mFlashlightOnNesting > 0) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mFlashlightOnNesting = 0; mHistoryCur.states2 &= ~HistoryItem.STATE2_FLASHLIGHT_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "Flashlight off to: " @@ -4015,8 +4063,8 @@ public final class BatteryStatsImpl extends BatteryStats { } public void noteWifiRadioPowerState(int powerState, long timestampNs) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (mWifiRadioPowerState != powerState) { final boolean active = powerState == DataConnectionRealTimeInfo.DC_POWER_STATE_MEDIUM @@ -4035,8 +4083,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteWifiRunningLocked(WorkSource ws) { if (!mGlobalWifiRunning) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mHistoryCur.states2 |= HistoryItem.STATE2_WIFI_RUNNING_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "WIFI running to: " + Integer.toHexString(mHistoryCur.states)); @@ -4056,7 +4104,7 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteWifiRunningChangedLocked(WorkSource oldWs, WorkSource newWs) { if (mGlobalWifiRunning) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); + final long elapsedRealtime = mClocks.elapsedRealtime(); int N = oldWs.size(); for (int i=0; i<N; i++) { int uid = mapUid(oldWs.get(i)); @@ -4074,8 +4122,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteWifiStoppedLocked(WorkSource ws) { if (mGlobalWifiRunning) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mHistoryCur.states2 &= ~HistoryItem.STATE2_WIFI_RUNNING_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "WIFI stopped to: " + Integer.toHexString(mHistoryCur.states)); @@ -4096,7 +4144,7 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteWifiStateLocked(int wifiState, String accessPoint) { if (DEBUG) Log.i(TAG, "WiFi state -> " + wifiState); if (mWifiState != wifiState) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); + final long elapsedRealtime = mClocks.elapsedRealtime(); if (mWifiState >= 0) { mWifiStateTimer[mWifiState].stopRunningLocked(elapsedRealtime); } @@ -4109,8 +4157,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteWifiSupplicantStateChangedLocked(int supplState, boolean failedAuth) { if (DEBUG) Log.i(TAG, "WiFi suppl state -> " + supplState); if (mWifiSupplState != supplState) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (mWifiSupplState >= 0) { mWifiSupplStateTimer[mWifiSupplState].stopRunningLocked(elapsedRealtime); } @@ -4126,7 +4174,7 @@ public final class BatteryStatsImpl extends BatteryStats { } void stopAllWifiSignalStrengthTimersLocked(int except) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); + final long elapsedRealtime = mClocks.elapsedRealtime(); for (int i = 0; i < NUM_WIFI_SIGNAL_STRENGTH_BINS; i++) { if (i == except) { continue; @@ -4141,8 +4189,8 @@ public final class BatteryStatsImpl extends BatteryStats { int strengthBin = WifiManager.calculateSignalLevel(newRssi, NUM_WIFI_SIGNAL_STRENGTH_BINS); if (DEBUG) Log.i(TAG, "WiFi rssi -> " + newRssi + " bin=" + strengthBin); if (mWifiSignalStrengthBin != strengthBin) { - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (mWifiSignalStrengthBin >= 0) { mWifiSignalStrengthsTimer[mWifiSignalStrengthBin].stopRunningLocked( elapsedRealtime); @@ -4168,8 +4216,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteFullWifiLockAcquiredLocked(int uid) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (mWifiFullLockNesting == 0) { mHistoryCur.states |= HistoryItem.STATE_WIFI_FULL_LOCK_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "WIFI full lock on to: " @@ -4182,8 +4230,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteFullWifiLockReleasedLocked(int uid) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mWifiFullLockNesting--; if (mWifiFullLockNesting == 0) { mHistoryCur.states &= ~HistoryItem.STATE_WIFI_FULL_LOCK_FLAG; @@ -4198,8 +4246,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteWifiScanStartedLocked(int uid) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (mWifiScanNesting == 0) { mHistoryCur.states |= HistoryItem.STATE_WIFI_SCAN_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "WIFI scan started for: " @@ -4212,8 +4260,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteWifiScanStoppedLocked(int uid) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mWifiScanNesting--; if (mWifiScanNesting == 0) { mHistoryCur.states &= ~HistoryItem.STATE_WIFI_SCAN_FLAG; @@ -4226,13 +4274,13 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteWifiBatchedScanStartedLocked(int uid, int csph) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); + final long elapsedRealtime = mClocks.elapsedRealtime(); getUidStatsLocked(uid).noteWifiBatchedScanStartedLocked(csph, elapsedRealtime); } public void noteWifiBatchedScanStoppedLocked(int uid) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); + final long elapsedRealtime = mClocks.elapsedRealtime(); getUidStatsLocked(uid).noteWifiBatchedScanStoppedLocked(elapsedRealtime); } @@ -4240,8 +4288,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteWifiMulticastEnabledLocked(int uid) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (mWifiMulticastNesting == 0) { mHistoryCur.states |= HistoryItem.STATE_WIFI_MULTICAST_ON_FLAG; if (DEBUG_HISTORY) Slog.v(TAG, "WIFI multicast on to: " @@ -4254,8 +4302,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteWifiMulticastDisabledLocked(int uid) { uid = mapUid(uid); - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); mWifiMulticastNesting--; if (mWifiMulticastNesting == 0) { mHistoryCur.states &= ~HistoryItem.STATE_WIFI_MULTICAST_ON_FLAG; @@ -4369,7 +4417,7 @@ public final class BatteryStatsImpl extends BatteryStats { // During device boot, qtaguid isn't enabled until after the inital // loading of battery stats. Now that they're enabled, take our initial // snapshot for future delta calculation. - updateMobileRadioStateLocked(SystemClock.elapsedRealtime(), null); + updateMobileRadioStateLocked(mClocks.elapsedRealtime(), null); updateWifiStateLocked(null); } @@ -4623,8 +4671,8 @@ public final class BatteryStatsImpl extends BatteryStats { @Override public long getStartClockTime() { final long currentTime = System.currentTimeMillis(); if (ensureStartClockTime(currentTime)) { - recordCurrentTimeChangeLocked(currentTime, SystemClock.elapsedRealtime(), - SystemClock.uptimeMillis()); + recordCurrentTimeChangeLocked(currentTime, mClocks.elapsedRealtime(), + mClocks.uptimeMillis()); } return mStartClockTime; } @@ -4652,7 +4700,11 @@ public final class BatteryStatsImpl extends BatteryStats { /** * The statistics associated with a particular uid. */ - public final class Uid extends BatteryStats.Uid { + public static class Uid extends BatteryStats.Uid { + /** + * BatteryStatsImpl that we are associated with. + */ + protected BatteryStatsImpl mBsi; final int mUid; @@ -4717,35 +4769,25 @@ public final class BatteryStatsImpl extends BatteryStats { long mCurStepUserTime; long mCurStepSystemTime; - LongSamplingCounter mUserCpuTime = new LongSamplingCounter(mOnBatteryTimeBase); - LongSamplingCounter mSystemCpuTime = new LongSamplingCounter(mOnBatteryTimeBase); - LongSamplingCounter mCpuPower = new LongSamplingCounter(mOnBatteryTimeBase); + LongSamplingCounter mUserCpuTime; + LongSamplingCounter mSystemCpuTime; + LongSamplingCounter mCpuPower; LongSamplingCounter[][] mCpuClusterSpeed; /** * The statistics we have collected for this uid's wake locks. */ - final OverflowArrayMap<Wakelock> mWakelockStats = new OverflowArrayMap<Wakelock>() { - @Override public Wakelock instantiateObject() { return new Wakelock(); } - }; + final OverflowArrayMap<Wakelock> mWakelockStats; /** * The statistics we have collected for this uid's syncs. */ - final OverflowArrayMap<StopwatchTimer> mSyncStats = new OverflowArrayMap<StopwatchTimer>() { - @Override public StopwatchTimer instantiateObject() { - return new StopwatchTimer(Uid.this, SYNC, null, mOnBatteryTimeBase); - } - }; + final OverflowArrayMap<StopwatchTimer> mSyncStats; /** * The statistics we have collected for this uid's jobs. */ - final OverflowArrayMap<StopwatchTimer> mJobStats = new OverflowArrayMap<StopwatchTimer>() { - @Override public StopwatchTimer instantiateObject() { - return new StopwatchTimer(Uid.this, JOB, null, mOnBatteryTimeBase); - } - }; + final OverflowArrayMap<StopwatchTimer> mJobStats; /** * The statistics we have collected for this uid's sensor activations. @@ -4767,17 +4809,41 @@ public final class BatteryStatsImpl extends BatteryStats { */ final SparseArray<Pid> mPids = new SparseArray<>(); - public Uid(int uid) { + public Uid(BatteryStatsImpl bsi, int uid) { + mBsi = bsi; mUid = uid; - mWifiRunningTimer = new StopwatchTimer(Uid.this, WIFI_RUNNING, - mWifiRunningTimers, mOnBatteryTimeBase); - mFullWifiLockTimer = new StopwatchTimer(Uid.this, FULL_WIFI_LOCK, - mFullWifiLockTimers, mOnBatteryTimeBase); - mWifiScanTimer = new StopwatchTimer(Uid.this, WIFI_SCAN, - mWifiScanTimers, mOnBatteryTimeBase); + + mUserCpuTime = new LongSamplingCounter(mBsi.mOnBatteryTimeBase); + mSystemCpuTime = new LongSamplingCounter(mBsi.mOnBatteryTimeBase); + mCpuPower = new LongSamplingCounter(mBsi.mOnBatteryTimeBase); + + mWakelockStats = mBsi.new OverflowArrayMap<Wakelock>() { + @Override public Wakelock instantiateObject() { + return new Wakelock(mBsi, Uid.this); + } + }; + mSyncStats = mBsi.new OverflowArrayMap<StopwatchTimer>() { + @Override public StopwatchTimer instantiateObject() { + return new StopwatchTimer(mBsi.mClocks, Uid.this, SYNC, null, + mBsi.mOnBatteryTimeBase); + } + }; + mJobStats = mBsi.new OverflowArrayMap<StopwatchTimer>() { + @Override public StopwatchTimer instantiateObject() { + return new StopwatchTimer(mBsi.mClocks, Uid.this, JOB, null, + mBsi.mOnBatteryTimeBase); + } + }; + + mWifiRunningTimer = new StopwatchTimer(mBsi.mClocks, this, WIFI_RUNNING, + mBsi.mWifiRunningTimers, mBsi.mOnBatteryTimeBase); + mFullWifiLockTimer = new StopwatchTimer(mBsi.mClocks, this, FULL_WIFI_LOCK, + mBsi.mFullWifiLockTimers, mBsi.mOnBatteryTimeBase); + mWifiScanTimer = new StopwatchTimer(mBsi.mClocks, this, WIFI_SCAN, + mBsi.mWifiScanTimers, mBsi.mOnBatteryTimeBase); mWifiBatchedScanTimer = new StopwatchTimer[NUM_WIFI_BATCHED_SCAN_BINS]; - mWifiMulticastTimer = new StopwatchTimer(Uid.this, WIFI_MULTICAST_ENABLED, - mWifiMulticastTimers, mOnBatteryTimeBase); + mWifiMulticastTimer = new StopwatchTimer(mBsi.mClocks, this, WIFI_MULTICAST_ENABLED, + mBsi.mWifiMulticastTimers, mBsi.mOnBatteryTimeBase); mProcessStateTimer = new StopwatchTimer[NUM_PROCESS_STATE]; } @@ -4821,8 +4887,8 @@ public final class BatteryStatsImpl extends BatteryStats { if (!mWifiRunning) { mWifiRunning = true; if (mWifiRunningTimer == null) { - mWifiRunningTimer = new StopwatchTimer(Uid.this, WIFI_RUNNING, - mWifiRunningTimers, mOnBatteryTimeBase); + mWifiRunningTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, WIFI_RUNNING, + mBsi.mWifiRunningTimers, mBsi.mOnBatteryTimeBase); } mWifiRunningTimer.startRunningLocked(elapsedRealtimeMs); } @@ -4841,8 +4907,8 @@ public final class BatteryStatsImpl extends BatteryStats { if (!mFullWifiLockOut) { mFullWifiLockOut = true; if (mFullWifiLockTimer == null) { - mFullWifiLockTimer = new StopwatchTimer(Uid.this, FULL_WIFI_LOCK, - mFullWifiLockTimers, mOnBatteryTimeBase); + mFullWifiLockTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, FULL_WIFI_LOCK, + mBsi.mFullWifiLockTimers, mBsi.mOnBatteryTimeBase); } mFullWifiLockTimer.startRunningLocked(elapsedRealtimeMs); } @@ -4861,8 +4927,8 @@ public final class BatteryStatsImpl extends BatteryStats { if (!mWifiScanStarted) { mWifiScanStarted = true; if (mWifiScanTimer == null) { - mWifiScanTimer = new StopwatchTimer(Uid.this, WIFI_SCAN, - mWifiScanTimers, mOnBatteryTimeBase); + mWifiScanTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, WIFI_SCAN, + mBsi.mWifiScanTimers, mBsi.mOnBatteryTimeBase); } mWifiScanTimer.startRunningLocked(elapsedRealtimeMs); } @@ -4911,8 +4977,8 @@ public final class BatteryStatsImpl extends BatteryStats { if (!mWifiMulticastEnabled) { mWifiMulticastEnabled = true; if (mWifiMulticastTimer == null) { - mWifiMulticastTimer = new StopwatchTimer(Uid.this, WIFI_MULTICAST_ENABLED, - mWifiMulticastTimers, mOnBatteryTimeBase); + mWifiMulticastTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, + WIFI_MULTICAST_ENABLED, mBsi.mWifiMulticastTimers, mBsi.mOnBatteryTimeBase); } mWifiMulticastTimer.startRunningLocked(elapsedRealtimeMs); } @@ -4943,7 +5009,7 @@ public final class BatteryStatsImpl extends BatteryStats { public ControllerActivityCounterImpl getOrCreateWifiControllerActivityLocked() { if (mWifiControllerActivity == null) { - mWifiControllerActivity = new ControllerActivityCounterImpl(mOnBatteryTimeBase, + mWifiControllerActivity = new ControllerActivityCounterImpl(mBsi.mOnBatteryTimeBase, NUM_BT_TX_LEVELS); } return mWifiControllerActivity; @@ -4951,7 +5017,7 @@ public final class BatteryStatsImpl extends BatteryStats { public ControllerActivityCounterImpl getOrCreateBluetoothControllerActivityLocked() { if (mBluetoothControllerActivity == null) { - mBluetoothControllerActivity = new ControllerActivityCounterImpl(mOnBatteryTimeBase, + mBluetoothControllerActivity = new ControllerActivityCounterImpl(mBsi.mOnBatteryTimeBase, NUM_BT_TX_LEVELS); } return mBluetoothControllerActivity; @@ -4959,7 +5025,7 @@ public final class BatteryStatsImpl extends BatteryStats { public ControllerActivityCounterImpl getOrCreateModemControllerActivityLocked() { if (mModemControllerActivity == null) { - mModemControllerActivity = new ControllerActivityCounterImpl(mOnBatteryTimeBase, + mModemControllerActivity = new ControllerActivityCounterImpl(mBsi.mOnBatteryTimeBase, ModemActivityInfo.TX_POWER_LEVELS); } return mModemControllerActivity; @@ -4967,8 +5033,8 @@ public final class BatteryStatsImpl extends BatteryStats { public StopwatchTimer createAudioTurnedOnTimerLocked() { if (mAudioTurnedOnTimer == null) { - mAudioTurnedOnTimer = new StopwatchTimer(Uid.this, AUDIO_TURNED_ON, - mAudioTurnedOnTimers, mOnBatteryTimeBase); + mAudioTurnedOnTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, AUDIO_TURNED_ON, + mBsi.mAudioTurnedOnTimers, mBsi.mOnBatteryTimeBase); } return mAudioTurnedOnTimer; } @@ -4991,8 +5057,8 @@ public final class BatteryStatsImpl extends BatteryStats { public StopwatchTimer createVideoTurnedOnTimerLocked() { if (mVideoTurnedOnTimer == null) { - mVideoTurnedOnTimer = new StopwatchTimer(Uid.this, VIDEO_TURNED_ON, - mVideoTurnedOnTimers, mOnBatteryTimeBase); + mVideoTurnedOnTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, VIDEO_TURNED_ON, + mBsi.mVideoTurnedOnTimers, mBsi.mOnBatteryTimeBase); } return mVideoTurnedOnTimer; } @@ -5015,8 +5081,8 @@ public final class BatteryStatsImpl extends BatteryStats { public StopwatchTimer createFlashlightTurnedOnTimerLocked() { if (mFlashlightTurnedOnTimer == null) { - mFlashlightTurnedOnTimer = new StopwatchTimer(Uid.this, FLASHLIGHT_TURNED_ON, - mFlashlightTurnedOnTimers, mOnBatteryTimeBase); + mFlashlightTurnedOnTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, + FLASHLIGHT_TURNED_ON, mBsi.mFlashlightTurnedOnTimers, mBsi.mOnBatteryTimeBase); } return mFlashlightTurnedOnTimer; } @@ -5039,8 +5105,8 @@ public final class BatteryStatsImpl extends BatteryStats { public StopwatchTimer createCameraTurnedOnTimerLocked() { if (mCameraTurnedOnTimer == null) { - mCameraTurnedOnTimer = new StopwatchTimer(Uid.this, CAMERA_TURNED_ON, - mCameraTurnedOnTimers, mOnBatteryTimeBase); + mCameraTurnedOnTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, CAMERA_TURNED_ON, + mBsi.mCameraTurnedOnTimers, mBsi.mOnBatteryTimeBase); } return mCameraTurnedOnTimer; } @@ -5063,16 +5129,16 @@ public final class BatteryStatsImpl extends BatteryStats { public StopwatchTimer createForegroundActivityTimerLocked() { if (mForegroundActivityTimer == null) { - mForegroundActivityTimer = new StopwatchTimer( - Uid.this, FOREGROUND_ACTIVITY, null, mOnBatteryTimeBase); + mForegroundActivityTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, + FOREGROUND_ACTIVITY, null, mBsi.mOnBatteryTimeBase); } return mForegroundActivityTimer; } public StopwatchTimer createBluetoothScanTimerLocked() { if (mBluetoothScanTimer == null) { - mBluetoothScanTimer = new StopwatchTimer(Uid.this, BLUETOOTH_SCAN_ON, - mBluetoothScanOnTimers, mOnBatteryTimeBase); + mBluetoothScanTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, BLUETOOTH_SCAN_ON, + mBsi.mBluetoothScanOnTimers, mBsi.mOnBatteryTimeBase); } return mBluetoothScanTimer; } @@ -5108,18 +5174,19 @@ public final class BatteryStatsImpl extends BatteryStats { public BatchTimer createVibratorOnTimerLocked() { if (mVibratorOnTimer == null) { - mVibratorOnTimer = new BatchTimer(Uid.this, VIBRATOR_ON, mOnBatteryTimeBase); + mVibratorOnTimer = new BatchTimer(mBsi.mClocks, Uid.this, VIBRATOR_ON, + mBsi.mOnBatteryTimeBase); } return mVibratorOnTimer; } public void noteVibratorOnLocked(long durationMillis) { - createVibratorOnTimerLocked().addDuration(BatteryStatsImpl.this, durationMillis); + createVibratorOnTimerLocked().addDuration(mBsi, durationMillis); } public void noteVibratorOffLocked() { if (mVibratorOnTimer != null) { - mVibratorOnTimer.abortLastDuration(BatteryStatsImpl.this); + mVibratorOnTimer.abortLastDuration(mBsi); } } @@ -5215,11 +5282,11 @@ public final class BatteryStatsImpl extends BatteryStats { if (i < 0 || i >= NUM_PROCESS_STATE) return; if (in == null) { - mProcessStateTimer[i] = new StopwatchTimer(this, PROCESS_STATE, null, - mOnBatteryTimeBase); + mProcessStateTimer[i] = new StopwatchTimer(mBsi.mClocks, this, PROCESS_STATE, null, + mBsi.mOnBatteryTimeBase); } else { - mProcessStateTimer[i] = new StopwatchTimer(this, PROCESS_STATE, null, - mOnBatteryTimeBase, in); + mProcessStateTimer[i] = new StopwatchTimer(mBsi.mClocks, this, PROCESS_STATE, null, + mBsi.mOnBatteryTimeBase, in); } } @@ -5266,17 +5333,17 @@ public final class BatteryStatsImpl extends BatteryStats { void makeWifiBatchedScanBin(int i, Parcel in) { if (i < 0 || i >= NUM_WIFI_BATCHED_SCAN_BINS) return; - ArrayList<StopwatchTimer> collected = mWifiBatchedScanTimers.get(i); + ArrayList<StopwatchTimer> collected = mBsi.mWifiBatchedScanTimers.get(i); if (collected == null) { collected = new ArrayList<StopwatchTimer>(); - mWifiBatchedScanTimers.put(i, collected); + mBsi.mWifiBatchedScanTimers.put(i, collected); } if (in == null) { - mWifiBatchedScanTimer[i] = new StopwatchTimer(this, WIFI_BATCHED_SCAN, collected, - mOnBatteryTimeBase); + mWifiBatchedScanTimer[i] = new StopwatchTimer(mBsi.mClocks, this, WIFI_BATCHED_SCAN, + collected, mBsi.mOnBatteryTimeBase); } else { - mWifiBatchedScanTimer[i] = new StopwatchTimer(this, WIFI_BATCHED_SCAN, collected, - mOnBatteryTimeBase, in); + mWifiBatchedScanTimer[i] = new StopwatchTimer(mBsi.mClocks, this, WIFI_BATCHED_SCAN, + collected, mBsi.mOnBatteryTimeBase, in); } } @@ -5284,7 +5351,7 @@ public final class BatteryStatsImpl extends BatteryStats { void initUserActivityLocked() { mUserActivityCounters = new Counter[NUM_USER_ACTIVITY_TYPES]; for (int i=0; i<NUM_USER_ACTIVITY_TYPES; i++) { - mUserActivityCounters[i] = new Counter(mOnBatteryTimeBase); + mUserActivityCounters[i] = new Counter(mBsi.mOnBatteryTimeBase); } } @@ -5383,11 +5450,11 @@ public final class BatteryStatsImpl extends BatteryStats { mNetworkByteActivityCounters = new LongSamplingCounter[NUM_NETWORK_ACTIVITY_TYPES]; mNetworkPacketActivityCounters = new LongSamplingCounter[NUM_NETWORK_ACTIVITY_TYPES]; for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) { - mNetworkByteActivityCounters[i] = new LongSamplingCounter(mOnBatteryTimeBase); - mNetworkPacketActivityCounters[i] = new LongSamplingCounter(mOnBatteryTimeBase); + mNetworkByteActivityCounters[i] = new LongSamplingCounter(mBsi.mOnBatteryTimeBase); + mNetworkPacketActivityCounters[i] = new LongSamplingCounter(mBsi.mOnBatteryTimeBase); } - mMobileRadioActiveTime = new LongSamplingCounter(mOnBatteryTimeBase); - mMobileRadioActiveCount = new LongSamplingCounter(mOnBatteryTimeBase); + mMobileRadioActiveTime = new LongSamplingCounter(mBsi.mOnBatteryTimeBase); + mMobileRadioActiveCount = new LongSamplingCounter(mBsi.mOnBatteryTimeBase); } /** @@ -5475,12 +5542,12 @@ public final class BatteryStatsImpl extends BatteryStats { mWifiControllerActivity.reset(false); } - if (mBluetoothActivity != null) { - mBluetoothActivity.reset(false); + if (mBsi.mBluetoothActivity != null) { + mBsi.mBluetoothActivity.reset(false); } - if (mModemActivity != null) { - mModemActivity.reset(false); + if (mBsi.mModemActivity != null) { + mBsi.mModemActivity.reset(false); } mUserCpuTime.reset(false); @@ -5871,7 +5938,7 @@ public final class BatteryStatsImpl extends BatteryStats { mWakelockStats.clear(); for (int j = 0; j < numWakelocks; j++) { String wakelockName = in.readString(); - Uid.Wakelock wakelock = new Wakelock(); + Uid.Wakelock wakelock = new Wakelock(mBsi, this); wakelock.readFromParcelLocked(timeBase, screenOffTimeBase, in); mWakelockStats.add(wakelockName, wakelock); } @@ -5882,7 +5949,7 @@ public final class BatteryStatsImpl extends BatteryStats { String syncName = in.readString(); if (in.readInt() != 0) { mSyncStats.add(syncName, - new StopwatchTimer(Uid.this, SYNC, null, timeBase, in)); + new StopwatchTimer(mBsi.mClocks, Uid.this, SYNC, null, timeBase, in)); } } @@ -5891,7 +5958,8 @@ public final class BatteryStatsImpl extends BatteryStats { for (int j = 0; j < numJobs; j++) { String jobName = in.readString(); if (in.readInt() != 0) { - mJobStats.add(jobName, new StopwatchTimer(Uid.this, JOB, null, timeBase, in)); + mJobStats.add(jobName, new StopwatchTimer(mBsi.mClocks, Uid.this, JOB, null, + timeBase, in)); } } @@ -5899,8 +5967,8 @@ public final class BatteryStatsImpl extends BatteryStats { mSensorStats.clear(); for (int k = 0; k < numSensors; k++) { int sensorNumber = in.readInt(); - Uid.Sensor sensor = new Sensor(sensorNumber); - sensor.readFromParcelLocked(mOnBatteryTimeBase, in); + Uid.Sensor sensor = new Sensor(mBsi, this, sensorNumber); + sensor.readFromParcelLocked(mBsi.mOnBatteryTimeBase, in); mSensorStats.put(sensorNumber, sensor); } @@ -5908,7 +5976,7 @@ public final class BatteryStatsImpl extends BatteryStats { mProcessStats.clear(); for (int k = 0; k < numProcs; k++) { String processName = in.readString(); - Uid.Proc proc = new Proc(processName); + Uid.Proc proc = new Proc(mBsi, processName); proc.readFromParcelLocked(in); mProcessStats.put(processName, proc); } @@ -5917,29 +5985,29 @@ public final class BatteryStatsImpl extends BatteryStats { mPackageStats.clear(); for (int l = 0; l < numPkgs; l++) { String packageName = in.readString(); - Uid.Pkg pkg = new Pkg(); + Uid.Pkg pkg = new Pkg(mBsi); pkg.readFromParcelLocked(in); mPackageStats.put(packageName, pkg); } mWifiRunning = false; if (in.readInt() != 0) { - mWifiRunningTimer = new StopwatchTimer(Uid.this, WIFI_RUNNING, - mWifiRunningTimers, mOnBatteryTimeBase, in); + mWifiRunningTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, WIFI_RUNNING, + mBsi.mWifiRunningTimers, mBsi.mOnBatteryTimeBase, in); } else { mWifiRunningTimer = null; } mFullWifiLockOut = false; if (in.readInt() != 0) { - mFullWifiLockTimer = new StopwatchTimer(Uid.this, FULL_WIFI_LOCK, - mFullWifiLockTimers, mOnBatteryTimeBase, in); + mFullWifiLockTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, FULL_WIFI_LOCK, + mBsi.mFullWifiLockTimers, mBsi.mOnBatteryTimeBase, in); } else { mFullWifiLockTimer = null; } mWifiScanStarted = false; if (in.readInt() != 0) { - mWifiScanTimer = new StopwatchTimer(Uid.this, WIFI_SCAN, - mWifiScanTimers, mOnBatteryTimeBase, in); + mWifiScanTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, WIFI_SCAN, + mBsi.mWifiScanTimers, mBsi.mOnBatteryTimeBase, in); } else { mWifiScanTimer = null; } @@ -5953,44 +6021,44 @@ public final class BatteryStatsImpl extends BatteryStats { } mWifiMulticastEnabled = false; if (in.readInt() != 0) { - mWifiMulticastTimer = new StopwatchTimer(Uid.this, WIFI_MULTICAST_ENABLED, - mWifiMulticastTimers, mOnBatteryTimeBase, in); + mWifiMulticastTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, WIFI_MULTICAST_ENABLED, + mBsi.mWifiMulticastTimers, mBsi.mOnBatteryTimeBase, in); } else { mWifiMulticastTimer = null; } if (in.readInt() != 0) { - mAudioTurnedOnTimer = new StopwatchTimer(Uid.this, AUDIO_TURNED_ON, - mAudioTurnedOnTimers, mOnBatteryTimeBase, in); + mAudioTurnedOnTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, AUDIO_TURNED_ON, + mBsi.mAudioTurnedOnTimers, mBsi.mOnBatteryTimeBase, in); } else { mAudioTurnedOnTimer = null; } if (in.readInt() != 0) { - mVideoTurnedOnTimer = new StopwatchTimer(Uid.this, VIDEO_TURNED_ON, - mVideoTurnedOnTimers, mOnBatteryTimeBase, in); + mVideoTurnedOnTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, VIDEO_TURNED_ON, + mBsi.mVideoTurnedOnTimers, mBsi.mOnBatteryTimeBase, in); } else { mVideoTurnedOnTimer = null; } if (in.readInt() != 0) { - mFlashlightTurnedOnTimer = new StopwatchTimer(Uid.this, FLASHLIGHT_TURNED_ON, - mFlashlightTurnedOnTimers, mOnBatteryTimeBase, in); + mFlashlightTurnedOnTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, + FLASHLIGHT_TURNED_ON, mBsi.mFlashlightTurnedOnTimers, mBsi.mOnBatteryTimeBase, in); } else { mFlashlightTurnedOnTimer = null; } if (in.readInt() != 0) { - mCameraTurnedOnTimer = new StopwatchTimer(Uid.this, CAMERA_TURNED_ON, - mCameraTurnedOnTimers, mOnBatteryTimeBase, in); + mCameraTurnedOnTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, CAMERA_TURNED_ON, + mBsi.mCameraTurnedOnTimers, mBsi.mOnBatteryTimeBase, in); } else { mCameraTurnedOnTimer = null; } if (in.readInt() != 0) { - mForegroundActivityTimer = new StopwatchTimer( - Uid.this, FOREGROUND_ACTIVITY, null, mOnBatteryTimeBase, in); + mForegroundActivityTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, + FOREGROUND_ACTIVITY, null, mBsi.mOnBatteryTimeBase, in); } else { mForegroundActivityTimer = null; } if (in.readInt() != 0) { - mBluetoothScanTimer = new StopwatchTimer(Uid.this, BLUETOOTH_SCAN_ON, - mBluetoothScanOnTimers, mOnBatteryTimeBase, in); + mBluetoothScanTimer = new StopwatchTimer(mBsi.mClocks, Uid.this, BLUETOOTH_SCAN_ON, + mBsi.mBluetoothScanOnTimers, mBsi.mOnBatteryTimeBase, in); } else { mBluetoothScanTimer = null; } @@ -6003,14 +6071,15 @@ public final class BatteryStatsImpl extends BatteryStats { } } if (in.readInt() != 0) { - mVibratorOnTimer = new BatchTimer(Uid.this, VIBRATOR_ON, mOnBatteryTimeBase, in); + mVibratorOnTimer = new BatchTimer(mBsi.mClocks, Uid.this, VIBRATOR_ON, + mBsi.mOnBatteryTimeBase, in); } else { mVibratorOnTimer = null; } if (in.readInt() != 0) { mUserActivityCounters = new Counter[NUM_USER_ACTIVITY_TYPES]; for (int i=0; i<NUM_USER_ACTIVITY_TYPES; i++) { - mUserActivityCounters[i] = new Counter(mOnBatteryTimeBase, in); + mUserActivityCounters[i] = new Counter(mBsi.mOnBatteryTimeBase, in); } } else { mUserActivityCounters = null; @@ -6021,45 +6090,45 @@ public final class BatteryStatsImpl extends BatteryStats { = new LongSamplingCounter[NUM_NETWORK_ACTIVITY_TYPES]; for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) { mNetworkByteActivityCounters[i] - = new LongSamplingCounter(mOnBatteryTimeBase, in); + = new LongSamplingCounter(mBsi.mOnBatteryTimeBase, in); mNetworkPacketActivityCounters[i] - = new LongSamplingCounter(mOnBatteryTimeBase, in); + = new LongSamplingCounter(mBsi.mOnBatteryTimeBase, in); } - mMobileRadioActiveTime = new LongSamplingCounter(mOnBatteryTimeBase, in); - mMobileRadioActiveCount = new LongSamplingCounter(mOnBatteryTimeBase, in); + mMobileRadioActiveTime = new LongSamplingCounter(mBsi.mOnBatteryTimeBase, in); + mMobileRadioActiveCount = new LongSamplingCounter(mBsi.mOnBatteryTimeBase, in); } else { mNetworkByteActivityCounters = null; mNetworkPacketActivityCounters = null; } if (in.readInt() != 0) { - mWifiControllerActivity = new ControllerActivityCounterImpl(mOnBatteryTimeBase, + mWifiControllerActivity = new ControllerActivityCounterImpl(mBsi.mOnBatteryTimeBase, NUM_WIFI_TX_LEVELS, in); } else { mWifiControllerActivity = null; } if (in.readInt() != 0) { - mBluetoothControllerActivity = new ControllerActivityCounterImpl(mOnBatteryTimeBase, + mBluetoothControllerActivity = new ControllerActivityCounterImpl(mBsi.mOnBatteryTimeBase, NUM_BT_TX_LEVELS, in); } else { mBluetoothControllerActivity = null; } if (in.readInt() != 0) { - mModemControllerActivity = new ControllerActivityCounterImpl(mOnBatteryTimeBase, + mModemControllerActivity = new ControllerActivityCounterImpl(mBsi.mOnBatteryTimeBase, ModemActivityInfo.TX_POWER_LEVELS, in); } else { mModemControllerActivity = null; } - mUserCpuTime = new LongSamplingCounter(mOnBatteryTimeBase, in); - mSystemCpuTime = new LongSamplingCounter(mOnBatteryTimeBase, in); - mCpuPower = new LongSamplingCounter(mOnBatteryTimeBase, in); + mUserCpuTime = new LongSamplingCounter(mBsi.mOnBatteryTimeBase, in); + mSystemCpuTime = new LongSamplingCounter(mBsi.mOnBatteryTimeBase, in); + mCpuPower = new LongSamplingCounter(mBsi.mOnBatteryTimeBase, in); if (in.readInt() != 0) { int numCpuClusters = in.readInt(); - if (mPowerProfile != null && mPowerProfile.getNumCpuClusters() != numCpuClusters) { + if (mBsi.mPowerProfile != null && mBsi.mPowerProfile.getNumCpuClusters() != numCpuClusters) { throw new ParcelFormatException("Incompatible number of cpu clusters"); } @@ -6067,8 +6136,8 @@ public final class BatteryStatsImpl extends BatteryStats { for (int cluster = 0; cluster < numCpuClusters; cluster++) { if (in.readInt() != 0) { int numSpeeds = in.readInt(); - if (mPowerProfile != null && - mPowerProfile.getNumSpeedStepsInCpuCluster(cluster) != numSpeeds) { + if (mBsi.mPowerProfile != null && + mBsi.mPowerProfile.getNumSpeedStepsInCpuCluster(cluster) != numSpeeds) { throw new ParcelFormatException("Incompatible number of cpu speeds"); } @@ -6076,7 +6145,7 @@ public final class BatteryStatsImpl extends BatteryStats { mCpuClusterSpeed[cluster] = cpuSpeeds; for (int speed = 0; speed < numSpeeds; speed++) { if (in.readInt() != 0) { - cpuSpeeds[speed] = new LongSamplingCounter(mOnBatteryTimeBase, in); + cpuSpeeds[speed] = new LongSamplingCounter(mBsi.mOnBatteryTimeBase, in); } } } else { @@ -6091,7 +6160,17 @@ public final class BatteryStatsImpl extends BatteryStats { /** * The statistics associated with a particular wake lock. */ - public final class Wakelock extends BatteryStats.Uid.Wakelock { + public static class Wakelock extends BatteryStats.Uid.Wakelock { + /** + * BatteryStatsImpl that we are associated with. + */ + protected BatteryStatsImpl mBsi; + + /** + * BatteryStatsImpl that we are associated with. + */ + protected Uid mUid; + /** * How long (in ms) this uid has been keeping the device partially awake. */ @@ -6112,6 +6191,11 @@ public final class BatteryStatsImpl extends BatteryStats { */ StopwatchTimer mTimerDraw; + public Wakelock(BatteryStatsImpl bsi, Uid uid) { + mBsi = bsi; + mUid = uid; + } + /** * Reads a possibly null Timer from a Parcel. The timer is associated with the * proper timer pool from the given BatteryStatsImpl object. @@ -6125,7 +6209,7 @@ public final class BatteryStatsImpl extends BatteryStats { return null; } - return new StopwatchTimer(Uid.this, type, pool, timeBase, in); + return new StopwatchTimer(mBsi.mClocks, mUid, type, pool, timeBase, in); } boolean reset() { @@ -6165,10 +6249,10 @@ public final class BatteryStatsImpl extends BatteryStats { void readFromParcelLocked(TimeBase timeBase, TimeBase screenOffTimeBase, Parcel in) { mTimerPartial = readTimerFromParcel(WAKE_TYPE_PARTIAL, - mPartialTimers, screenOffTimeBase, in); - mTimerFull = readTimerFromParcel(WAKE_TYPE_FULL, mFullTimers, timeBase, in); - mTimerWindow = readTimerFromParcel(WAKE_TYPE_WINDOW, mWindowTimers, timeBase, in); - mTimerDraw = readTimerFromParcel(WAKE_TYPE_DRAW, mDrawTimers, timeBase, in); + mBsi.mPartialTimers, screenOffTimeBase, in); + mTimerFull = readTimerFromParcel(WAKE_TYPE_FULL, mBsi.mFullTimers, timeBase, in); + mTimerWindow = readTimerFromParcel(WAKE_TYPE_WINDOW, mBsi.mWindowTimers, timeBase, in); + mTimerDraw = readTimerFromParcel(WAKE_TYPE_DRAW, mBsi.mDrawTimers, timeBase, in); } void writeToParcelLocked(Parcel out, long elapsedRealtimeUs) { @@ -6195,32 +6279,32 @@ public final class BatteryStatsImpl extends BatteryStats { case WAKE_TYPE_PARTIAL: t = mTimerPartial; if (t == null) { - t = new StopwatchTimer(Uid.this, WAKE_TYPE_PARTIAL, - mPartialTimers, mOnBatteryScreenOffTimeBase); + t = new StopwatchTimer(mBsi.mClocks, mUid, WAKE_TYPE_PARTIAL, + mBsi.mPartialTimers, mBsi.mOnBatteryScreenOffTimeBase); mTimerPartial = t; } return t; case WAKE_TYPE_FULL: t = mTimerFull; if (t == null) { - t = new StopwatchTimer(Uid.this, WAKE_TYPE_FULL, - mFullTimers, mOnBatteryTimeBase); + t = new StopwatchTimer(mBsi.mClocks, mUid, WAKE_TYPE_FULL, + mBsi.mFullTimers, mBsi.mOnBatteryTimeBase); mTimerFull = t; } return t; case WAKE_TYPE_WINDOW: t = mTimerWindow; if (t == null) { - t = new StopwatchTimer(Uid.this, WAKE_TYPE_WINDOW, - mWindowTimers, mOnBatteryTimeBase); + t = new StopwatchTimer(mBsi.mClocks, mUid, WAKE_TYPE_WINDOW, + mBsi.mWindowTimers, mBsi.mOnBatteryTimeBase); mTimerWindow = t; } return t; case WAKE_TYPE_DRAW: t = mTimerDraw; if (t == null) { - t = new StopwatchTimer(Uid.this, WAKE_TYPE_DRAW, - mDrawTimers, mOnBatteryTimeBase); + t = new StopwatchTimer(mBsi.mClocks, mUid, WAKE_TYPE_DRAW, + mBsi.mDrawTimers, mBsi.mOnBatteryTimeBase); mTimerDraw = t; } return t; @@ -6230,11 +6314,23 @@ public final class BatteryStatsImpl extends BatteryStats { } } - public final class Sensor extends BatteryStats.Uid.Sensor { + public static class Sensor extends BatteryStats.Uid.Sensor { + /** + * BatteryStatsImpl that we are associated with. + */ + protected BatteryStatsImpl mBsi; + + /** + * BatteryStatsImpl that we are associated with. + */ + protected Uid mUid; + final int mHandle; StopwatchTimer mTimer; - public Sensor(int handle) { + public Sensor(BatteryStatsImpl bsi, Uid uid, int handle) { + mBsi = bsi; + mUid = uid; mHandle = handle; } @@ -6243,12 +6339,12 @@ public final class BatteryStatsImpl extends BatteryStats { return null; } - ArrayList<StopwatchTimer> pool = mSensorTimers.get(mHandle); + ArrayList<StopwatchTimer> pool = mBsi.mSensorTimers.get(mHandle); if (pool == null) { pool = new ArrayList<StopwatchTimer>(); - mSensorTimers.put(mHandle, pool); + mBsi.mSensorTimers.put(mHandle, pool); } - return new StopwatchTimer(Uid.this, 0, pool, timeBase, in); + return new StopwatchTimer(mBsi.mClocks, mUid, 0, pool, timeBase, in); } boolean reset() { @@ -6281,7 +6377,12 @@ public final class BatteryStatsImpl extends BatteryStats { /** * The statistics associated with a particular process. */ - public final class Proc extends BatteryStats.Uid.Proc implements TimeBaseObs { + public static class Proc extends BatteryStats.Uid.Proc implements TimeBaseObs { + /** + * BatteryStatsImpl that we are associated with. + */ + protected BatteryStatsImpl mBsi; + /** * The name of this process. */ @@ -6384,9 +6485,10 @@ public final class BatteryStatsImpl extends BatteryStats { ArrayList<ExcessivePower> mExcessivePower; - Proc(String name) { + public Proc(BatteryStatsImpl bsi, String name) { + mBsi = bsi; mName = name; - mOnBatteryTimeBase.add(this); + mBsi.mOnBatteryTimeBase.add(this); } public void onTimeStarted(long elapsedRealtime, long baseUptime, long baseRealtime) { @@ -6403,7 +6505,7 @@ public final class BatteryStatsImpl extends BatteryStats { void detach() { mActive = false; - mOnBatteryTimeBase.remove(this); + mBsi.mOnBatteryTimeBase.remove(this); } public int countExcessivePowers() { @@ -6617,7 +6719,12 @@ public final class BatteryStatsImpl extends BatteryStats { /** * The statistics associated with a particular package. */ - public final class Pkg extends BatteryStats.Uid.Pkg implements TimeBaseObs { + public static class Pkg extends BatteryStats.Uid.Pkg implements TimeBaseObs { + /** + * BatteryStatsImpl that we are associated with. + */ + protected BatteryStatsImpl mBsi; + /** * Number of times wakeup alarms have occurred for this app. */ @@ -6628,8 +6735,9 @@ public final class BatteryStatsImpl extends BatteryStats { */ final ArrayMap<String, Serv> mServiceStats = new ArrayMap<>(); - Pkg() { - mOnBatteryScreenOffTimeBase.add(this); + public Pkg(BatteryStatsImpl bsi) { + mBsi = bsi; + mBsi.mOnBatteryScreenOffTimeBase.add(this); } public void onTimeStarted(long elapsedRealtime, long baseUptime, long baseRealtime) { @@ -6639,7 +6747,7 @@ public final class BatteryStatsImpl extends BatteryStats { } void detach() { - mOnBatteryScreenOffTimeBase.remove(this); + mBsi.mOnBatteryScreenOffTimeBase.remove(this); } void readFromParcelLocked(Parcel in) { @@ -6647,14 +6755,14 @@ public final class BatteryStatsImpl extends BatteryStats { mWakeupAlarms.clear(); for (int i=0; i<numWA; i++) { String tag = in.readString(); - mWakeupAlarms.put(tag, new Counter(mOnBatteryTimeBase, in)); + mWakeupAlarms.put(tag, new Counter(mBsi.mOnBatteryTimeBase, in)); } int numServs = in.readInt(); mServiceStats.clear(); for (int m = 0; m < numServs; m++) { String serviceName = in.readString(); - Uid.Pkg.Serv serv = new Serv(); + Uid.Pkg.Serv serv = new Serv(mBsi); mServiceStats.put(serviceName, serv); serv.readFromParcelLocked(in); @@ -6686,7 +6794,7 @@ public final class BatteryStatsImpl extends BatteryStats { public void noteWakeupAlarmLocked(String tag) { Counter c = mWakeupAlarms.get(tag); if (c == null) { - c = new Counter(mOnBatteryTimeBase); + c = new Counter(mBsi.mOnBatteryTimeBase); mWakeupAlarms.put(tag, c); } c.stepAtomic(); @@ -6700,99 +6808,113 @@ public final class BatteryStatsImpl extends BatteryStats { /** * The statistics associated with a particular service. */ - public final class Serv extends BatteryStats.Uid.Pkg.Serv implements TimeBaseObs { + public static class Serv extends BatteryStats.Uid.Pkg.Serv implements TimeBaseObs { + /** + * BatteryStatsImpl that we are associated with. + */ + protected BatteryStatsImpl mBsi; + + /** + * The android package in which this service resides. + */ + protected Pkg mPkg; + /** * Total time (ms in battery uptime) the service has been left started. */ - long mStartTime; + protected long mStartTime; /** * If service has been started and not yet stopped, this is * when it was started. */ - long mRunningSince; + protected long mRunningSince; /** * True if we are currently running. */ - boolean mRunning; + protected boolean mRunning; /** * Total number of times startService() has been called. */ - int mStarts; + protected int mStarts; /** * Total time (ms in battery uptime) the service has been left launched. */ - long mLaunchedTime; + protected long mLaunchedTime; /** * If service has been launched and not yet exited, this is * when it was launched (ms in battery uptime). */ - long mLaunchedSince; + protected long mLaunchedSince; /** * True if we are currently launched. */ - boolean mLaunched; + protected boolean mLaunched; /** * Total number times the service has been launched. */ - int mLaunches; + protected int mLaunches; /** * The amount of time spent started loaded from a previous save * (ms in battery uptime). */ - long mLoadedStartTime; + protected long mLoadedStartTime; /** * The number of starts loaded from a previous save. */ - int mLoadedStarts; + protected int mLoadedStarts; /** * The number of launches loaded from a previous save. */ - int mLoadedLaunches; + protected int mLoadedLaunches; /** * The amount of time spent started as of the last run (ms * in battery uptime). */ - long mLastStartTime; + protected long mLastStartTime; /** * The number of starts as of the last run. */ - int mLastStarts; + protected int mLastStarts; /** * The number of launches as of the last run. */ - int mLastLaunches; + protected int mLastLaunches; /** * The amount of time spent started when last unplugged (ms * in battery uptime). */ - long mUnpluggedStartTime; + protected long mUnpluggedStartTime; /** * The number of starts when last unplugged. */ - int mUnpluggedStarts; + protected int mUnpluggedStarts; /** * The number of launches when last unplugged. */ - int mUnpluggedLaunches; + protected int mUnpluggedLaunches; - Serv() { - mOnBatteryTimeBase.add(this); + /** + * Construct a Serv. Also adds it to the on-battery time base as a listener. + */ + public Serv(BatteryStatsImpl bsi) { + mBsi = bsi; + mBsi.mOnBatteryTimeBase.add(this); } public void onTimeStarted(long elapsedRealtime, long baseUptime, @@ -6806,11 +6928,14 @@ public final class BatteryStatsImpl extends BatteryStats { long baseRealtime) { } - void detach() { - mOnBatteryTimeBase.remove(this); + /** + * Remove this Serv as a listener from the time base. + */ + public void detach() { + mBsi.mOnBatteryTimeBase.remove(this); } - void readFromParcelLocked(Parcel in) { + public void readFromParcelLocked(Parcel in) { mStartTime = in.readLong(); mRunningSince = in.readLong(); mRunning = in.readInt() != 0; @@ -6830,7 +6955,7 @@ public final class BatteryStatsImpl extends BatteryStats { mUnpluggedLaunches = in.readInt(); } - void writeToParcelLocked(Parcel out) { + public void writeToParcelLocked(Parcel out) { out.writeLong(mStartTime); out.writeLong(mRunningSince); out.writeInt(mRunning ? 1 : 0); @@ -6847,12 +6972,12 @@ public final class BatteryStatsImpl extends BatteryStats { out.writeInt(mUnpluggedLaunches); } - long getLaunchTimeToNowLocked(long batteryUptime) { + public long getLaunchTimeToNowLocked(long batteryUptime) { if (!mLaunched) return mLaunchedTime; return mLaunchedTime + batteryUptime - mLaunchedSince; } - long getStartTimeToNowLocked(long batteryUptime) { + public long getStartTimeToNowLocked(long batteryUptime) { if (!mRunning) return mStartTime; return mStartTime + batteryUptime - mRunningSince; } @@ -6860,14 +6985,14 @@ public final class BatteryStatsImpl extends BatteryStats { public void startLaunchedLocked() { if (!mLaunched) { mLaunches++; - mLaunchedSince = getBatteryUptimeLocked(); + mLaunchedSince = mBsi.getBatteryUptimeLocked(); mLaunched = true; } } public void stopLaunchedLocked() { if (mLaunched) { - long time = getBatteryUptimeLocked() - mLaunchedSince; + long time = mBsi.getBatteryUptimeLocked() - mLaunchedSince; if (time > 0) { mLaunchedTime += time; } else { @@ -6880,14 +7005,14 @@ public final class BatteryStatsImpl extends BatteryStats { public void startRunningLocked() { if (!mRunning) { mStarts++; - mRunningSince = getBatteryUptimeLocked(); + mRunningSince = mBsi.getBatteryUptimeLocked(); mRunning = true; } } public void stopRunningLocked() { if (mRunning) { - long time = getBatteryUptimeLocked() - mRunningSince; + long time = mBsi.getBatteryUptimeLocked() - mRunningSince; if (time > 0) { mStartTime += time; } else { @@ -6898,7 +7023,7 @@ public final class BatteryStatsImpl extends BatteryStats { } public BatteryStatsImpl getBatteryStats() { - return BatteryStatsImpl.this; + return mBsi; } @Override @@ -6937,7 +7062,7 @@ public final class BatteryStatsImpl extends BatteryStats { } final Serv newServiceStatsLocked() { - return new Serv(); + return new Serv(mBsi); } } @@ -6948,7 +7073,7 @@ public final class BatteryStatsImpl extends BatteryStats { public Proc getProcessStatsLocked(String name) { Proc ps = mProcessStats.get(name); if (ps == null) { - ps = new Proc(name); + ps = new Proc(mBsi, name); mProcessStats.put(name, ps); } @@ -6977,7 +7102,7 @@ public final class BatteryStatsImpl extends BatteryStats { if (mProcessState == uidRunningState) return; - final long elapsedRealtime = SystemClock.elapsedRealtime(); + final long elapsedRealtime = mBsi.mClocks.elapsedRealtime(); if (mProcessState != ActivityManager.PROCESS_STATE_NONEXISTENT) { mProcessStateTimer[mProcessState].stopRunningLocked(elapsedRealtime); @@ -7011,7 +7136,7 @@ public final class BatteryStatsImpl extends BatteryStats { public Pkg getPackageStatsLocked(String name) { Pkg ps = mPackageStats.get(name); if (ps == null) { - ps = new Pkg(); + ps = new Pkg(mBsi); mPackageStats.put(name, ps); } @@ -7046,7 +7171,7 @@ public final class BatteryStatsImpl extends BatteryStats { } public void readWakeSummaryFromParcelLocked(String wlName, Parcel in) { - Wakelock wl = new Wakelock(); + Wakelock wl = new Wakelock(mBsi, this); mWakelockStats.add(wlName, wl); if (in.readInt() != 0) { wl.getStopwatchTimer(WAKE_TYPE_FULL).readSummaryFromParcelLocked(in); @@ -7068,19 +7193,20 @@ public final class BatteryStatsImpl extends BatteryStats { if (!create) { return null; } - se = new Sensor(sensor); + se = new Sensor(mBsi, this, sensor); mSensorStats.put(sensor, se); } StopwatchTimer t = se.mTimer; if (t != null) { return t; } - ArrayList<StopwatchTimer> timers = mSensorTimers.get(sensor); + ArrayList<StopwatchTimer> timers = mBsi.mSensorTimers.get(sensor); if (timers == null) { timers = new ArrayList<StopwatchTimer>(); - mSensorTimers.put(sensor, timers); + mBsi.mSensorTimers.put(sensor, timers); } - t = new StopwatchTimer(Uid.this, BatteryStats.SENSOR, timers, mOnBatteryTimeBase); + t = new StopwatchTimer(mBsi.mClocks, this, BatteryStats.SENSOR, timers, + mBsi.mOnBatteryTimeBase); se.mTimer = t; return t; } @@ -7186,11 +7312,18 @@ public final class BatteryStatsImpl extends BatteryStats { } public BatteryStatsImpl getBatteryStats() { - return BatteryStatsImpl.this; + return mBsi; } } public BatteryStatsImpl(File systemDir, Handler handler, ExternalStatsSync externalSync) { + this(new SystemClocks(), systemDir, handler, externalSync); + } + + public BatteryStatsImpl(Clocks clocks, File systemDir, Handler handler, + ExternalStatsSync externalSync) { + init(clocks); + if (systemDir != null) { mFile = new JournaledFile(new File(systemDir, "batterystats.bin"), new File(systemDir, "batterystats.bin.tmp")); @@ -7202,24 +7335,28 @@ public final class BatteryStatsImpl extends BatteryStats { mExternalSync = externalSync; mHandler = new MyHandler(handler.getLooper()); mStartCount++; - mScreenOnTimer = new StopwatchTimer(null, -1, null, mOnBatteryTimeBase); + mScreenOnTimer = new StopwatchTimer(mClocks, null, -1, null, mOnBatteryTimeBase); for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) { - mScreenBrightnessTimer[i] = new StopwatchTimer(null, -100-i, null, mOnBatteryTimeBase); - } - mInteractiveTimer = new StopwatchTimer(null, -10, null, mOnBatteryTimeBase); - mPowerSaveModeEnabledTimer = new StopwatchTimer(null, -2, null, mOnBatteryTimeBase); - mDeviceIdleModeLightTimer = new StopwatchTimer(null, -11, null, mOnBatteryTimeBase); - mDeviceIdleModeFullTimer = new StopwatchTimer(null, -14, null, mOnBatteryTimeBase); - mDeviceLightIdlingTimer = new StopwatchTimer(null, -15, null, mOnBatteryTimeBase); - mDeviceIdlingTimer = new StopwatchTimer(null, -12, null, mOnBatteryTimeBase); - mPhoneOnTimer = new StopwatchTimer(null, -3, null, mOnBatteryTimeBase); + mScreenBrightnessTimer[i] = new StopwatchTimer(mClocks, null, -100-i, null, + mOnBatteryTimeBase); + } + mInteractiveTimer = new StopwatchTimer(mClocks, null, -10, null, mOnBatteryTimeBase); + mPowerSaveModeEnabledTimer = new StopwatchTimer(mClocks, null, -2, null, + mOnBatteryTimeBase); + mDeviceIdleModeLightTimer = new StopwatchTimer(mClocks, null, -11, null, + mOnBatteryTimeBase); + mDeviceIdleModeFullTimer = new StopwatchTimer(mClocks, null, -14, null, mOnBatteryTimeBase); + mDeviceLightIdlingTimer = new StopwatchTimer(mClocks, null, -15, null, mOnBatteryTimeBase); + mDeviceIdlingTimer = new StopwatchTimer(mClocks, null, -12, null, mOnBatteryTimeBase); + mPhoneOnTimer = new StopwatchTimer(mClocks, null, -3, null, mOnBatteryTimeBase); for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) { - mPhoneSignalStrengthsTimer[i] = new StopwatchTimer(null, -200-i, null, + mPhoneSignalStrengthsTimer[i] = new StopwatchTimer(mClocks, null, -200-i, null, mOnBatteryTimeBase); } - mPhoneSignalScanningTimer = new StopwatchTimer(null, -200+1, null, mOnBatteryTimeBase); + mPhoneSignalScanningTimer = new StopwatchTimer(mClocks, null, -200+1, null, + mOnBatteryTimeBase); for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) { - mPhoneDataConnectionsTimer[i] = new StopwatchTimer(null, -300-i, null, + mPhoneDataConnectionsTimer[i] = new StopwatchTimer(mClocks, null, -300-i, null, mOnBatteryTimeBase); } for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) { @@ -7232,31 +7369,34 @@ public final class BatteryStatsImpl extends BatteryStats { mModemActivity = new ControllerActivityCounterImpl(mOnBatteryTimeBase, ModemActivityInfo.TX_POWER_LEVELS); - mMobileRadioActiveTimer = new StopwatchTimer(null, -400, null, mOnBatteryTimeBase); - mMobileRadioActivePerAppTimer = new StopwatchTimer(null, -401, null, mOnBatteryTimeBase); + mMobileRadioActiveTimer = new StopwatchTimer(mClocks, null, -400, null, mOnBatteryTimeBase); + mMobileRadioActivePerAppTimer = new StopwatchTimer(mClocks, null, -401, null, + mOnBatteryTimeBase); mMobileRadioActiveAdjustedTime = new LongSamplingCounter(mOnBatteryTimeBase); mMobileRadioActiveUnknownTime = new LongSamplingCounter(mOnBatteryTimeBase); mMobileRadioActiveUnknownCount = new LongSamplingCounter(mOnBatteryTimeBase); - mWifiOnTimer = new StopwatchTimer(null, -4, null, mOnBatteryTimeBase); - mGlobalWifiRunningTimer = new StopwatchTimer(null, -5, null, mOnBatteryTimeBase); + mWifiOnTimer = new StopwatchTimer(mClocks, null, -4, null, mOnBatteryTimeBase); + mGlobalWifiRunningTimer = new StopwatchTimer(mClocks, null, -5, null, mOnBatteryTimeBase); for (int i=0; i<NUM_WIFI_STATES; i++) { - mWifiStateTimer[i] = new StopwatchTimer(null, -600-i, null, mOnBatteryTimeBase); + mWifiStateTimer[i] = new StopwatchTimer(mClocks, null, -600-i, null, + mOnBatteryTimeBase); } for (int i=0; i<NUM_WIFI_SUPPL_STATES; i++) { - mWifiSupplStateTimer[i] = new StopwatchTimer(null, -700-i, null, mOnBatteryTimeBase); + mWifiSupplStateTimer[i] = new StopwatchTimer(mClocks, null, -700-i, null, + mOnBatteryTimeBase); } for (int i=0; i<NUM_WIFI_SIGNAL_STRENGTH_BINS; i++) { - mWifiSignalStrengthsTimer[i] = new StopwatchTimer(null, -800-i, null, + mWifiSignalStrengthsTimer[i] = new StopwatchTimer(mClocks, null, -800-i, null, mOnBatteryTimeBase); } - mAudioOnTimer = new StopwatchTimer(null, -7, null, mOnBatteryTimeBase); - mVideoOnTimer = new StopwatchTimer(null, -8, null, mOnBatteryTimeBase); - mFlashlightOnTimer = new StopwatchTimer(null, -9, null, mOnBatteryTimeBase); - mCameraOnTimer = new StopwatchTimer(null, -13, null, mOnBatteryTimeBase); - mBluetoothScanTimer = new StopwatchTimer(null, -14, null, mOnBatteryTimeBase); + mAudioOnTimer = new StopwatchTimer(mClocks, null, -7, null, mOnBatteryTimeBase); + mVideoOnTimer = new StopwatchTimer(mClocks, null, -8, null, mOnBatteryTimeBase); + mFlashlightOnTimer = new StopwatchTimer(mClocks, null, -9, null, mOnBatteryTimeBase); + mCameraOnTimer = new StopwatchTimer(mClocks, null, -13, null, mOnBatteryTimeBase); + mBluetoothScanTimer = new StopwatchTimer(mClocks, null, -14, null, mOnBatteryTimeBase); mOnBattery = mOnBatteryInternal = false; - long uptime = SystemClock.uptimeMillis() * 1000; - long realtime = SystemClock.elapsedRealtime() * 1000; + long uptime = mClocks.uptimeMillis() * 1000; + long realtime = mClocks.elapsedRealtime() * 1000; initTimes(uptime, realtime); mStartPlatformVersion = mEndPlatformVersion = Build.ID; mDischargeStartLevel = 0; @@ -7270,6 +7410,11 @@ public final class BatteryStatsImpl extends BatteryStats { } public BatteryStatsImpl(Parcel p) { + this(new SystemClocks(), p); + } + + public BatteryStatsImpl(Clocks clocks, Parcel p) { + init(clocks); mFile = null; mCheckinFile = null; mDailyFile = null; @@ -7808,9 +7953,9 @@ public final class BatteryStatsImpl extends BatteryStats { public void resetAllStatsCmdLocked() { resetAllStatsLocked(); - final long mSecUptime = SystemClock.uptimeMillis(); + final long mSecUptime = mClocks.uptimeMillis(); long uptime = mSecUptime * 1000; - long mSecRealtime = SystemClock.elapsedRealtime(); + long mSecRealtime = mClocks.elapsedRealtime(); long realtime = mSecRealtime * 1000; mDischargeStartLevel = mHistoryCur.batteryLevel; pullPendingStateUpdatesLocked(); @@ -7835,7 +7980,7 @@ public final class BatteryStatsImpl extends BatteryStats { private void resetAllStatsLocked() { mStartCount = 0; - initTimes(SystemClock.uptimeMillis() * 1000, SystemClock.elapsedRealtime() * 1000); + initTimes(mClocks.uptimeMillis() * 1000, mClocks.elapsedRealtime() * 1000); mScreenOnTimer.reset(false); for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) { mScreenBrightnessTimer[i].reset(false); @@ -7983,17 +8128,8 @@ public final class BatteryStatsImpl extends BatteryStats { private static final int NETWORK_STATS_NEXT = 1; private static final int NETWORK_STATS_DELTA = 2; - private final NetworkStats[] mMobileNetworkStats = new NetworkStats[] { - new NetworkStats(SystemClock.elapsedRealtime(), 50), - new NetworkStats(SystemClock.elapsedRealtime(), 50), - new NetworkStats(SystemClock.elapsedRealtime(), 50) - }; - - private final NetworkStats[] mWifiNetworkStats = new NetworkStats[] { - new NetworkStats(SystemClock.elapsedRealtime(), 50), - new NetworkStats(SystemClock.elapsedRealtime(), 50), - new NetworkStats(SystemClock.elapsedRealtime(), 50) - }; + private NetworkStats[] mMobileNetworkStats; + private NetworkStats[] mWifiNetworkStats; /** * Retrieves the delta of network stats for the given network ifaces. Uses networkStatsBuffer @@ -8026,7 +8162,7 @@ public final class BatteryStatsImpl extends BatteryStats { Slog.d(TAG, "Updating wifi stats"); } - final long elapsedRealtimeMs = SystemClock.elapsedRealtime(); + final long elapsedRealtimeMs = mClocks.elapsedRealtime(); NetworkStats delta = null; try { if (!ArrayUtils.isEmpty(mWifiIfaces)) { @@ -8570,7 +8706,7 @@ public final class BatteryStatsImpl extends BatteryStats { SamplingTimer kwlt = mKernelWakelockStats.get(name); if (kwlt == null) { - kwlt = new SamplingTimer(mOnBatteryScreenOffTimeBase, + kwlt = new SamplingTimer(mClocks, mOnBatteryScreenOffTimeBase, true /* track reported val */); mKernelWakelockStats.put(name, kwlt); } @@ -8663,7 +8799,7 @@ public final class BatteryStatsImpl extends BatteryStats { // Read the CPU data for each UID. This will internally generate a snapshot so next time // we read, we get a delta. If we are to distribute the cpu time, then do so. Otherwise // we just ignore the data. - final long startTimeMs = SystemClock.elapsedRealtime(); + final long startTimeMs = mClocks.elapsedRealtime(); mKernelUidCpuTimeReader.readDelta(!mOnBatteryInternal ? null : new KernelUidCpuTimeReader.Callback() { @Override @@ -8735,7 +8871,7 @@ public final class BatteryStatsImpl extends BatteryStats { }); if (DEBUG_ENERGY_CPU) { - Slog.d(TAG, "Reading cpu stats took " + (SystemClock.elapsedRealtime() - startTimeMs) + + Slog.d(TAG, "Reading cpu stats took " + (mClocks.elapsedRealtime() - startTimeMs) + " ms"); } @@ -9000,8 +9136,8 @@ public final class BatteryStatsImpl extends BatteryStats { public void setBatteryStateLocked(int status, int health, int plugType, int level, int temp, int volt) { final boolean onBattery = plugType == BATTERY_PLUGGED_NONE; - final long uptime = SystemClock.uptimeMillis(); - final long elapsedRealtime = SystemClock.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); if (!mHaveBatteryLevel) { mHaveBatteryLevel = true; // We start out assuming that the device is plugged in (not @@ -9147,7 +9283,7 @@ public final class BatteryStatsImpl extends BatteryStats { } public long getAwakeTimePlugged() { - return (SystemClock.uptimeMillis() * 1000) - getAwakeTimeBattery(); + return (mClocks.uptimeMillis() * 1000) - getAwakeTimeBattery(); } @Override @@ -9310,8 +9446,8 @@ public final class BatteryStatsImpl extends BatteryStats { return mDailyPackageChanges; } - long getBatteryUptimeLocked() { - return mOnBatteryTimeBase.getUptime(SystemClock.uptimeMillis() * 1000); + protected long getBatteryUptimeLocked() { + return mOnBatteryTimeBase.getUptime(mClocks.uptimeMillis() * 1000); } @Override @@ -9429,7 +9565,7 @@ public final class BatteryStatsImpl extends BatteryStats { public Uid getUidStatsLocked(int uid) { Uid u = mUidStats.get(uid); if (u == null) { - u = new Uid(uid); + u = new Uid(this, uid); mUidStats.put(uid, u); } return u; @@ -9474,7 +9610,7 @@ public final class BatteryStatsImpl extends BatteryStats { } public void shutdownLocked() { - recordShutdownLocked(SystemClock.elapsedRealtime(), SystemClock.uptimeMillis()); + recordShutdownLocked(mClocks.elapsedRealtime(), mClocks.uptimeMillis()); writeSyncLocked(); mShuttingDown = true; } @@ -9502,7 +9638,7 @@ public final class BatteryStatsImpl extends BatteryStats { Parcel out = Parcel.obtain(); writeSummaryToParcel(out, true); - mLastWriteTime = SystemClock.elapsedRealtime(); + mLastWriteTime = mClocks.elapsedRealtime(); if (mPendingWrite != null) { mPendingWrite.recycle(); @@ -9583,8 +9719,8 @@ public final class BatteryStatsImpl extends BatteryStats { if (mHistoryBuffer.dataPosition() > 0) { mRecordingHistory = true; - final long elapsedRealtime = SystemClock.elapsedRealtime(); - final long uptime = SystemClock.uptimeMillis(); + final long elapsedRealtime = mClocks.elapsedRealtime(); + final long uptime = mClocks.uptimeMillis(); if (USE_OLD_HISTORY) { addHistoryRecordLocked(elapsedRealtime, uptime, HistoryItem.CMD_START, mHistoryCur); } @@ -9663,7 +9799,7 @@ public final class BatteryStatsImpl extends BatteryStats { // We are just arbitrarily going to insert 1 minute from the sample of // the last run until samples in this run. if (mHistoryBaseTime > 0) { - long oldnow = SystemClock.elapsedRealtime(); + long oldnow = mClocks.elapsedRealtime(); mHistoryBaseTime = mHistoryBaseTime - oldnow + 1; if (DEBUG_HISTORY) { StringBuilder sb = new StringBuilder(128); @@ -9870,7 +10006,7 @@ public final class BatteryStatsImpl extends BatteryStats { } for (int iu = 0; iu < NU; iu++) { int uid = in.readInt(); - Uid u = new Uid(uid); + Uid u = new Uid(this, uid); mUidStats.put(uid, u); u.mWifiRunning = false; @@ -10083,8 +10219,8 @@ public final class BatteryStatsImpl extends BatteryStats { // if we had originally pulled a time before the RTC was set. long startClockTime = getStartClockTime(); - final long NOW_SYS = SystemClock.uptimeMillis() * 1000; - final long NOWREAL_SYS = SystemClock.elapsedRealtime() * 1000; + final long NOW_SYS = mClocks.uptimeMillis() * 1000; + final long NOWREAL_SYS = mClocks.elapsedRealtime() * 1000; out.writeInt(VERSION); @@ -10469,29 +10605,34 @@ public final class BatteryStatsImpl extends BatteryStats { mOnBatteryScreenOffTimeBase.readFromParcel(in); mScreenState = Display.STATE_UNKNOWN; - mScreenOnTimer = new StopwatchTimer(null, -1, null, mOnBatteryTimeBase, in); + mScreenOnTimer = new StopwatchTimer(mClocks, null, -1, null, mOnBatteryTimeBase, in); for (int i=0; i<NUM_SCREEN_BRIGHTNESS_BINS; i++) { - mScreenBrightnessTimer[i] = new StopwatchTimer(null, -100-i, null, mOnBatteryTimeBase, - in); + mScreenBrightnessTimer[i] = new StopwatchTimer(mClocks, null, -100-i, null, + mOnBatteryTimeBase, in); } mInteractive = false; - mInteractiveTimer = new StopwatchTimer(null, -10, null, mOnBatteryTimeBase, in); + mInteractiveTimer = new StopwatchTimer(mClocks, null, -10, null, mOnBatteryTimeBase, in); mPhoneOn = false; - mPowerSaveModeEnabledTimer = new StopwatchTimer(null, -2, null, mOnBatteryTimeBase, in); + mPowerSaveModeEnabledTimer = new StopwatchTimer(mClocks, null, -2, null, + mOnBatteryTimeBase, in); mLongestLightIdleTime = in.readLong(); mLongestFullIdleTime = in.readLong(); - mDeviceIdleModeLightTimer = new StopwatchTimer(null, -14, null, mOnBatteryTimeBase, in); - mDeviceIdleModeFullTimer = new StopwatchTimer(null, -11, null, mOnBatteryTimeBase, in); - mDeviceLightIdlingTimer = new StopwatchTimer(null, -15, null, mOnBatteryTimeBase, in); - mDeviceIdlingTimer = new StopwatchTimer(null, -12, null, mOnBatteryTimeBase, in); - mPhoneOnTimer = new StopwatchTimer(null, -3, null, mOnBatteryTimeBase, in); + mDeviceIdleModeLightTimer = new StopwatchTimer(mClocks, null, -14, null, + mOnBatteryTimeBase, in); + mDeviceIdleModeFullTimer = new StopwatchTimer(mClocks, null, -11, null, + mOnBatteryTimeBase, in); + mDeviceLightIdlingTimer = new StopwatchTimer(mClocks, null, -15, null, + mOnBatteryTimeBase, in); + mDeviceIdlingTimer = new StopwatchTimer(mClocks, null, -12, null, mOnBatteryTimeBase, in); + mPhoneOnTimer = new StopwatchTimer(mClocks, null, -3, null, mOnBatteryTimeBase, in); for (int i=0; i<SignalStrength.NUM_SIGNAL_STRENGTH_BINS; i++) { - mPhoneSignalStrengthsTimer[i] = new StopwatchTimer(null, -200-i, + mPhoneSignalStrengthsTimer[i] = new StopwatchTimer(mClocks, null, -200-i, null, mOnBatteryTimeBase, in); } - mPhoneSignalScanningTimer = new StopwatchTimer(null, -200+1, null, mOnBatteryTimeBase, in); + mPhoneSignalScanningTimer = new StopwatchTimer(mClocks, null, -200+1, null, + mOnBatteryTimeBase, in); for (int i=0; i<NUM_DATA_CONNECTION_TYPES; i++) { - mPhoneDataConnectionsTimer[i] = new StopwatchTimer(null, -300-i, + mPhoneDataConnectionsTimer[i] = new StopwatchTimer(mClocks, null, -300-i, null, mOnBatteryTimeBase, in); } for (int i = 0; i < NUM_NETWORK_ACTIVITY_TYPES; i++) { @@ -10499,27 +10640,29 @@ public final class BatteryStatsImpl extends BatteryStats { mNetworkPacketActivityCounters[i] = new LongSamplingCounter(mOnBatteryTimeBase, in); } mMobileRadioPowerState = DataConnectionRealTimeInfo.DC_POWER_STATE_LOW; - mMobileRadioActiveTimer = new StopwatchTimer(null, -400, null, mOnBatteryTimeBase, in); - mMobileRadioActivePerAppTimer = new StopwatchTimer(null, -401, null, mOnBatteryTimeBase, - in); + mMobileRadioActiveTimer = new StopwatchTimer(mClocks, null, -400, null, + mOnBatteryTimeBase, in); + mMobileRadioActivePerAppTimer = new StopwatchTimer(mClocks, null, -401, null, + mOnBatteryTimeBase, in); mMobileRadioActiveAdjustedTime = new LongSamplingCounter(mOnBatteryTimeBase, in); mMobileRadioActiveUnknownTime = new LongSamplingCounter(mOnBatteryTimeBase, in); mMobileRadioActiveUnknownCount = new LongSamplingCounter(mOnBatteryTimeBase, in); mWifiRadioPowerState = DataConnectionRealTimeInfo.DC_POWER_STATE_LOW; mWifiOn = false; - mWifiOnTimer = new StopwatchTimer(null, -4, null, mOnBatteryTimeBase, in); + mWifiOnTimer = new StopwatchTimer(mClocks, null, -4, null, mOnBatteryTimeBase, in); mGlobalWifiRunning = false; - mGlobalWifiRunningTimer = new StopwatchTimer(null, -5, null, mOnBatteryTimeBase, in); + mGlobalWifiRunningTimer = new StopwatchTimer(mClocks, null, -5, null, + mOnBatteryTimeBase, in); for (int i=0; i<NUM_WIFI_STATES; i++) { - mWifiStateTimer[i] = new StopwatchTimer(null, -600-i, + mWifiStateTimer[i] = new StopwatchTimer(mClocks, null, -600-i, null, mOnBatteryTimeBase, in); } for (int i=0; i<NUM_WIFI_SUPPL_STATES; i++) { - mWifiSupplStateTimer[i] = new StopwatchTimer(null, -700-i, + mWifiSupplStateTimer[i] = new StopwatchTimer(mClocks, null, -700-i, null, mOnBatteryTimeBase, in); } for (int i=0; i<NUM_WIFI_SIGNAL_STRENGTH_BINS; i++) { - mWifiSignalStrengthsTimer[i] = new StopwatchTimer(null, -800-i, + mWifiSignalStrengthsTimer[i] = new StopwatchTimer(mClocks, null, -800-i, null, mOnBatteryTimeBase, in); } @@ -10537,15 +10680,15 @@ public final class BatteryStatsImpl extends BatteryStats { mLoadedNumConnectivityChange = in.readInt(); mUnpluggedNumConnectivityChange = in.readInt(); mAudioOnNesting = 0; - mAudioOnTimer = new StopwatchTimer(null, -7, null, mOnBatteryTimeBase); + mAudioOnTimer = new StopwatchTimer(mClocks, null, -7, null, mOnBatteryTimeBase); mVideoOnNesting = 0; - mVideoOnTimer = new StopwatchTimer(null, -8, null, mOnBatteryTimeBase); + mVideoOnTimer = new StopwatchTimer(mClocks, null, -8, null, mOnBatteryTimeBase); mFlashlightOnNesting = 0; - mFlashlightOnTimer = new StopwatchTimer(null, -9, null, mOnBatteryTimeBase, in); + mFlashlightOnTimer = new StopwatchTimer(mClocks, null, -9, null, mOnBatteryTimeBase, in); mCameraOnNesting = 0; - mCameraOnTimer = new StopwatchTimer(null, -13, null, mOnBatteryTimeBase, in); + mCameraOnTimer = new StopwatchTimer(mClocks, null, -13, null, mOnBatteryTimeBase, in); mBluetoothScanNesting = 0; - mBluetoothScanTimer = new StopwatchTimer(null, -14, null, mOnBatteryTimeBase, in); + mBluetoothScanTimer = new StopwatchTimer(mClocks, null, -14, null, mOnBatteryTimeBase, in); mDischargeUnplugLevel = in.readInt(); mDischargePlugLevel = in.readInt(); mDischargeCurrentLevel = in.readInt(); @@ -10565,7 +10708,7 @@ public final class BatteryStatsImpl extends BatteryStats { for (int ikw = 0; ikw < NKW; ikw++) { if (in.readInt() != 0) { String wakelockName = in.readString(); - SamplingTimer kwlt = new SamplingTimer(mOnBatteryScreenOffTimeBase, in); + SamplingTimer kwlt = new SamplingTimer(mClocks, mOnBatteryScreenOffTimeBase, in); mKernelWakelockStats.put(wakelockName, kwlt); } } @@ -10575,7 +10718,7 @@ public final class BatteryStatsImpl extends BatteryStats { for (int iwr = 0; iwr < NWR; iwr++) { if (in.readInt() != 0) { String reasonName = in.readString(); - SamplingTimer timer = new SamplingTimer(mOnBatteryTimeBase, in); + SamplingTimer timer = new SamplingTimer(mClocks, mOnBatteryTimeBase, in); mWakeupReasonStats.put(reasonName, timer); } } @@ -10597,7 +10740,7 @@ public final class BatteryStatsImpl extends BatteryStats { mUidStats.clear(); for (int i = 0; i < numUids; i++) { int uid = in.readInt(); - Uid u = new Uid(uid); + Uid u = new Uid(this, uid); u.readFromParcelLocked(mOnBatteryTimeBase, mOnBatteryScreenOffTimeBase, in); mUidStats.append(uid, u); } @@ -10620,8 +10763,8 @@ public final class BatteryStatsImpl extends BatteryStats { // if we had originally pulled a time before the RTC was set. long startClockTime = getStartClockTime(); - final long uSecUptime = SystemClock.uptimeMillis() * 1000; - final long uSecRealtime = SystemClock.elapsedRealtime() * 1000; + final long uSecUptime = mClocks.uptimeMillis() * 1000; + final long uSecRealtime = mClocks.elapsedRealtime() * 1000; final long batteryRealtime = mOnBatteryTimeBase.getRealtime(uSecRealtime); final long batteryScreenOffRealtime = mOnBatteryScreenOffTimeBase.getRealtime(uSecRealtime); diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java index 3d60926c8177..df48d6d0df8c 100644 --- a/core/java/com/android/internal/policy/DecorView.java +++ b/core/java/com/android/internal/policy/DecorView.java @@ -585,14 +585,14 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind w = 0; } if (DEBUG_MEASURE) Log.d(mLogTag, "Fixed width: " + w); + final int widthSize = MeasureSpec.getSize(widthMeasureSpec); if (w > 0) { - final int widthSize = MeasureSpec.getSize(widthMeasureSpec); widthMeasureSpec = MeasureSpec.makeMeasureSpec( Math.min(w, widthSize), EXACTLY); fixedWidth = true; } else { widthMeasureSpec = MeasureSpec.makeMeasureSpec( - widthMeasureSpec - mFloatingInsets.left - mFloatingInsets.right, + widthSize - mFloatingInsets.left - mFloatingInsets.right, AT_MOST); mApplyFloatingHorizontalInsets = true; } @@ -1002,7 +1002,8 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind boolean consumingNavBar = (attrs.flags & FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS) != 0 && (sysUiVisibility & SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION) == 0 - && (sysUiVisibility & SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0; + && (sysUiVisibility & SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0 + || (insets != null && insets.shouldAlwaysConsumeNavBar()); // If we didn't request fullscreen layout, but we still got it because of the // mForceWindowDrawsStatusBarBackground flag, also consume top inset. @@ -1744,6 +1745,10 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind mCaptionBackgroundDrawable = getContext().getDrawable( R.drawable.decor_caption_title_focused); } + if (mResizingBackgroundDrawable != null) { + mLastBackgroundDrawableCb = mResizingBackgroundDrawable.getCallback(); + mResizingBackgroundDrawable.setCallback(null); + } } // Free floating overlapping windows require a caption. @@ -1914,11 +1919,6 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind final ThreadedRenderer renderer = getHardwareRenderer(); if (renderer != null) { loadBackgroundDrawablesIfNeeded(); - if (mResizingBackgroundDrawable != null) { - mLastBackgroundDrawableCb = mResizingBackgroundDrawable.getCallback(); - mResizingBackgroundDrawable.setCallback(null); - } - mBackdropFrameRenderer = new BackdropFrameRenderer(this, renderer, initialBounds, mResizingBackgroundDrawable, mCaptionBackgroundDrawable, mUserCaptionBackgroundDrawable, getCurrentColor(mStatusColorViewState), diff --git a/core/java/com/android/internal/util/MessageUtils.java b/core/java/com/android/internal/util/MessageUtils.java index 1014bfd6955d..184245ef538d 100644 --- a/core/java/com/android/internal/util/MessageUtils.java +++ b/core/java/com/android/internal/util/MessageUtils.java @@ -21,6 +21,7 @@ import android.util.Log; import android.util.SparseArray; import java.lang.reflect.Field; +import java.lang.reflect.Modifier; /** * Static utility class for dealing with {@link Message} objects. @@ -62,8 +63,12 @@ public class MessageUtils { } for (Field field : fields) { - String name = field.getName(); + int modifiers = field.getModifiers(); + if (!Modifier.isStatic(modifiers) | !Modifier.isFinal(modifiers)) { + continue; + } + String name = field.getName(); for (String prefix : prefixes) { // Does this look like a constant? if (!name.startsWith(prefix)) { diff --git a/core/java/com/android/internal/view/BaseIWindow.java b/core/java/com/android/internal/view/BaseIWindow.java index bcc310f7a9fa..ab918c832c0c 100644 --- a/core/java/com/android/internal/view/BaseIWindow.java +++ b/core/java/com/android/internal/view/BaseIWindow.java @@ -38,7 +38,7 @@ public class BaseIWindow extends IWindow.Stub { @Override public void resized(Rect frame, Rect overscanInsets, Rect contentInsets, Rect visibleInsets, Rect stableInsets, Rect outsets, boolean reportDraw, Configuration newConfig, - Rect backDropFrame, boolean forceLayout) { + Rect backDropFrame, boolean forceLayout, boolean alwaysConsumeNavBar) { if (reportDraw) { try { mSession.finishDrawing(this); diff --git a/core/java/com/android/internal/view/IInputMethodManager.aidl b/core/java/com/android/internal/view/IInputMethodManager.aidl index db3ecc6f2dc8..5576f13ba488 100644 --- a/core/java/com/android/internal/view/IInputMethodManager.aidl +++ b/core/java/com/android/internal/view/IInputMethodManager.aidl @@ -46,17 +46,14 @@ interface IInputMethodManager { in IInputContext inputContext, int uid, int pid); void removeClient(in IInputMethodClient client); - InputBindResult startInput(/* @InputMethodClient.StartInputReason */ int startInputReason, - in IInputMethodClient client, IInputContext inputContext, in EditorInfo attribute, - int controlFlags); void finishInput(in IInputMethodClient client); boolean showSoftInput(in IInputMethodClient client, int flags, in ResultReceiver resultReceiver); boolean hideSoftInput(in IInputMethodClient client, int flags, in ResultReceiver resultReceiver); - // Report that a window has gained focus. If 'attribute' is non-null, - // this will also do a startInput. - InputBindResult windowGainedFocus( + // If windowToken is null, this just does startInput(). Otherwise this reports that a window + // has gained focus, and if 'attribute' is non-null then also does startInput. + InputBindResult startInputOrWindowGainedFocus( /* @InputMethodClient.StartInputReason */ int startInputReason, in IInputMethodClient client, in IBinder windowToken, int controlFlags, int softInputMode, int windowFlags, in EditorInfo attribute, diff --git a/core/jni/Android.mk b/core/jni/Android.mk index 1b6b53ae49f4..8b686b70041d 100644 --- a/core/jni/Android.mk +++ b/core/jni/Android.mk @@ -177,8 +177,7 @@ LOCAL_SRC_FILES:= \ com_android_internal_net_NetworkStatsFactory.cpp \ com_android_internal_os_Zygote.cpp \ com_android_internal_util_VirtualRefBasePtr.cpp \ - com_android_internal_view_animation_NativeInterpolatorFactoryHelper.cpp \ - android_os_HardwarePropertiesManager.cpp + com_android_internal_view_animation_NativeInterpolatorFactoryHelper.cpp LOCAL_C_INCLUDES += \ $(JNI_H_INCLUDE) \ diff --git a/core/jni/AndroidRuntime.cpp b/core/jni/AndroidRuntime.cpp index 223fc1af46d5..017fb533723c 100644 --- a/core/jni/AndroidRuntime.cpp +++ b/core/jni/AndroidRuntime.cpp @@ -198,7 +198,6 @@ extern int register_com_android_internal_content_NativeLibraryHelper(JNIEnv *env extern int register_com_android_internal_net_NetworkStatsFactory(JNIEnv *env); extern int register_com_android_internal_os_Zygote(JNIEnv *env); extern int register_com_android_internal_util_VirtualRefBasePtr(JNIEnv *env); -extern int register_android_os_HardwarePropertiesManager(JNIEnv *env); static AndroidRuntime* gCurRuntime = NULL; @@ -1390,7 +1389,6 @@ static const RegJNIRec gRegJNI[] = { REG_JNI(register_android_animation_PropertyValuesHolder), REG_JNI(register_com_android_internal_content_NativeLibraryHelper), REG_JNI(register_com_android_internal_net_NetworkStatsFactory), - REG_JNI(register_android_os_HardwarePropertiesManager), }; diff --git a/core/jni/android_graphics_drawable_AnimatedVectorDrawable.cpp b/core/jni/android_graphics_drawable_AnimatedVectorDrawable.cpp index 14badb72a195..4b2a72d8e28e 100644 --- a/core/jni/android_graphics_drawable_AnimatedVectorDrawable.cpp +++ b/core/jni/android_graphics_drawable_AnimatedVectorDrawable.cpp @@ -175,13 +175,13 @@ static const JNINativeMethod gMethods[] = { {"nCreatePathPropertyHolder", "!(JIFF)J", (void*)createPathPropertyHolder}, {"nCreateRootAlphaPropertyHolder", "!(JFF)J", (void*)createRootAlphaPropertyHolder}, {"nSetPropertyHolderData", "(J[FI)V", (void*)setPropertyHolderData}, - {"nStart", "(JLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;I)V", (void*)start}, - {"nReverse", "(JLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;I)V", (void*)reverse}, + {"nStart", "(JLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V", (void*)start}, + {"nReverse", "(JLandroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V", (void*)reverse}, {"nEnd", "!(J)V", (void*)end}, {"nReset", "!(J)V", (void*)reset}, }; -const char* const kClassPathName = "android/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator"; +const char* const kClassPathName = "android/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT"; int register_android_graphics_drawable_AnimatedVectorDrawable(JNIEnv* env) { gVectorDrawableAnimatorClassInfo.clazz = FindClassOrDie(env, kClassPathName); gVectorDrawableAnimatorClassInfo.clazz = MakeGlobalRefOrDie(env, @@ -189,7 +189,7 @@ int register_android_graphics_drawable_AnimatedVectorDrawable(JNIEnv* env) { gVectorDrawableAnimatorClassInfo.callOnFinished = GetStaticMethodIDOrDie( env, gVectorDrawableAnimatorClassInfo.clazz, "callOnFinished", - "(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimator;I)V"); + "(Landroid/graphics/drawable/AnimatedVectorDrawable$VectorDrawableAnimatorRT;I)V"); return RegisterMethodsOrDie(env, "android/graphics/drawable/AnimatedVectorDrawable", gMethods, NELEM(gMethods)); } diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp index 80f8a64122e3..7d9e4a284cec 100644 --- a/core/jni/android_media_AudioSystem.cpp +++ b/core/jni/android_media_AudioSystem.cpp @@ -388,18 +388,43 @@ android_media_AudioSystem_dyn_policy_callback(int event, String8 regId, int val) } static void -android_media_AudioSystem_recording_callback(int event, int session, int source) +android_media_AudioSystem_recording_callback(int event, int session, int source, + const audio_config_base_t *clientConfig, const audio_config_base_t *deviceConfig) { JNIEnv *env = AndroidRuntime::getJNIEnv(); if (env == NULL) { return; } + if (clientConfig == NULL || deviceConfig == NULL) { + ALOGE("Unexpected null client/device configurations in recording callback"); + return; + } + // create an array for 2*3 integers to store the record configurations (client + device) + jintArray recParamArray = env->NewIntArray(6); + if (recParamArray == NULL) { + ALOGE("recording callback: Couldn't allocate int array for configuration data"); + return; + } + jint recParamData[6]; + recParamData[0] = (jint) audioFormatFromNative(clientConfig->format); + // FIXME this doesn't support index-based masks + recParamData[1] = (jint) inChannelMaskFromNative(clientConfig->channel_mask); + recParamData[2] = (jint) clientConfig->sample_rate; + recParamData[3] = (jint) audioFormatFromNative(deviceConfig->format); + // FIXME this doesn't support index-based masks + recParamData[4] = (jint) inChannelMaskFromNative(deviceConfig->channel_mask); + recParamData[5] = (jint) deviceConfig->sample_rate; + env->SetIntArrayRegion(recParamArray, 0, 6, recParamData); + + // callback into java jclass clazz = env->FindClass(kClassPathName); env->CallStaticVoidMethod(clazz, gAudioPolicyEventHandlerMethods.postRecordConfigEventFromNative, - event, session, source); + event, session, source, recParamArray); env->DeleteLocalRef(clazz); + + env->DeleteLocalRef(recParamArray); } static jint @@ -1819,7 +1844,7 @@ int register_android_media_AudioSystem(JNIEnv *env) "dynamicPolicyCallbackFromNative", "(ILjava/lang/String;I)V"); gAudioPolicyEventHandlerMethods.postRecordConfigEventFromNative = GetStaticMethodIDOrDie(env, env->FindClass(kClassPathName), - "recordingCallbackFromNative", "(III)V"); + "recordingCallbackFromNative", "(III[I)V"); jclass audioMixClass = FindClassOrDie(env, "android/media/audiopolicy/AudioMix"); gAudioMixClass = MakeGlobalRefOrDie(env, audioMixClass); diff --git a/core/jni/android_net_NetUtils.cpp b/core/jni/android_net_NetUtils.cpp index ba0876d74b17..defb88a9712f 100644 --- a/core/jni/android_net_NetUtils.cpp +++ b/core/jni/android_net_NetUtils.cpp @@ -39,23 +39,6 @@ extern "C" { int ifc_enable(const char *ifname); int ifc_disable(const char *ifname); int ifc_reset_connections(const char *ifname, int reset_mask); - -int dhcp_start(const char * const ifname); -int dhcp_start_renew(const char * const ifname); -int dhcp_get_results(const char * const ifname, - const char *ipaddr, - const char *gateway, - uint32_t *prefixLength, - const char *dns[], - const char *server, - uint32_t *lease, - const char *vendorInfo, - const char *domains, - const char *mtu); - -int dhcp_stop(const char *ifname); -int dhcp_release_lease(const char *ifname); -char *dhcp_get_errmsg(); } #define NETUTILS_PKG_NAME "android/net/NetworkUtils" @@ -64,22 +47,6 @@ namespace android { static const uint16_t kDhcpClientPort = 68; -/* - * The following remembers the jfieldID's of the fields - * of the DhcpInfo Java object, so that we don't have - * to look them up every time. - */ -static struct fieldIds { - jmethodID clear; - jmethodID setIpAddress; - jmethodID setGateway; - jmethodID addDns; - jmethodID setDomains; - jmethodID setServerAddress; - jmethodID setLeaseDuration; - jmethodID setVendorInfo; -} dhcpResultsFieldIds; - static jint android_net_utils_resetConnections(JNIEnv* env, jobject clazz, jstring ifname, jint mask) { @@ -95,137 +62,6 @@ static jint android_net_utils_resetConnections(JNIEnv* env, jobject clazz, return (jint)result; } -static jboolean android_net_utils_getDhcpResults(JNIEnv* env, jobject clazz, jstring ifname, - jobject dhcpResults) -{ - int result; - char ipaddr[PROPERTY_VALUE_MAX]; - uint32_t prefixLength; - char gateway[PROPERTY_VALUE_MAX]; - char dns1[PROPERTY_VALUE_MAX]; - char dns2[PROPERTY_VALUE_MAX]; - char dns3[PROPERTY_VALUE_MAX]; - char dns4[PROPERTY_VALUE_MAX]; - const char *dns[5] = {dns1, dns2, dns3, dns4, NULL}; - char server[PROPERTY_VALUE_MAX]; - uint32_t lease; - char vendorInfo[PROPERTY_VALUE_MAX]; - char domains[PROPERTY_VALUE_MAX]; - char mtu[PROPERTY_VALUE_MAX]; - - const char *nameStr = env->GetStringUTFChars(ifname, NULL); - if (nameStr == NULL) return (jboolean)false; - - result = ::dhcp_get_results(nameStr, ipaddr, gateway, &prefixLength, - dns, server, &lease, vendorInfo, domains, mtu); - if (result != 0) { - ALOGD("dhcp_get_results failed : %s (%s)", nameStr, ::dhcp_get_errmsg()); - } - - env->ReleaseStringUTFChars(ifname, nameStr); - if (result == 0) { - env->CallVoidMethod(dhcpResults, dhcpResultsFieldIds.clear); - - // set the linkAddress - // dhcpResults->addLinkAddress(inetAddress, prefixLength) - result = env->CallBooleanMethod(dhcpResults, dhcpResultsFieldIds.setIpAddress, - env->NewStringUTF(ipaddr), prefixLength); - } - - if (result == 0) { - // set the gateway - result = env->CallBooleanMethod(dhcpResults, - dhcpResultsFieldIds.setGateway, env->NewStringUTF(gateway)); - } - - if (result == 0) { - // dhcpResults->addDns(new InetAddress(dns1)) - result = env->CallBooleanMethod(dhcpResults, - dhcpResultsFieldIds.addDns, env->NewStringUTF(dns1)); - } - - if (result == 0) { - env->CallVoidMethod(dhcpResults, dhcpResultsFieldIds.setDomains, - env->NewStringUTF(domains)); - - result = env->CallBooleanMethod(dhcpResults, - dhcpResultsFieldIds.addDns, env->NewStringUTF(dns2)); - - if (result == 0) { - result = env->CallBooleanMethod(dhcpResults, - dhcpResultsFieldIds.addDns, env->NewStringUTF(dns3)); - if (result == 0) { - result = env->CallBooleanMethod(dhcpResults, - dhcpResultsFieldIds.addDns, env->NewStringUTF(dns4)); - } - } - } - - if (result == 0) { - // dhcpResults->setServerAddress(new InetAddress(server)) - result = env->CallBooleanMethod(dhcpResults, dhcpResultsFieldIds.setServerAddress, - env->NewStringUTF(server)); - } - - if (result == 0) { - // dhcpResults->setLeaseDuration(lease) - env->CallVoidMethod(dhcpResults, - dhcpResultsFieldIds.setLeaseDuration, lease); - - // dhcpResults->setVendorInfo(vendorInfo) - env->CallVoidMethod(dhcpResults, dhcpResultsFieldIds.setVendorInfo, - env->NewStringUTF(vendorInfo)); - } - return (jboolean)(result == 0); -} - -static jboolean android_net_utils_startDhcp(JNIEnv* env, jobject clazz, jstring ifname) -{ - const char *nameStr = env->GetStringUTFChars(ifname, NULL); - if (nameStr == NULL) return (jboolean)false; - if (::dhcp_start(nameStr) != 0) { - ALOGD("dhcp_start failed : %s", nameStr); - return (jboolean)false; - } - return (jboolean)true; -} - -static jboolean android_net_utils_startDhcpRenew(JNIEnv* env, jobject clazz, jstring ifname) -{ - const char *nameStr = env->GetStringUTFChars(ifname, NULL); - if (nameStr == NULL) return (jboolean)false; - if (::dhcp_start_renew(nameStr) != 0) { - ALOGD("dhcp_start_renew failed : %s", nameStr); - return (jboolean)false; - } - return (jboolean)true; -} - -static jboolean android_net_utils_stopDhcp(JNIEnv* env, jobject clazz, jstring ifname) -{ - int result; - - const char *nameStr = env->GetStringUTFChars(ifname, NULL); - result = ::dhcp_stop(nameStr); - env->ReleaseStringUTFChars(ifname, nameStr); - return (jboolean)(result == 0); -} - -static jboolean android_net_utils_releaseDhcpLease(JNIEnv* env, jobject clazz, jstring ifname) -{ - int result; - - const char *nameStr = env->GetStringUTFChars(ifname, NULL); - result = ::dhcp_release_lease(nameStr); - env->ReleaseStringUTFChars(ifname, nameStr); - return (jboolean)(result == 0); -} - -static jstring android_net_utils_getDhcpError(JNIEnv* env, jobject clazz) -{ - return env->NewStringUTF(::dhcp_get_errmsg()); -} - static void android_net_utils_attachDhcpFilter(JNIEnv *env, jobject clazz, jobject javaFd) { int fd = jniGetFDFromFileDescriptor(env, javaFd); @@ -305,12 +141,6 @@ static jboolean android_net_utils_queryUserAccess(JNIEnv *env, jobject thiz, jin static const JNINativeMethod gNetworkUtilMethods[] = { /* name, signature, funcPtr */ { "resetConnections", "(Ljava/lang/String;I)I", (void *)android_net_utils_resetConnections }, - { "startDhcp", "(Ljava/lang/String;)Z", (void *)android_net_utils_startDhcp }, - { "startDhcpRenew", "(Ljava/lang/String;)Z", (void *)android_net_utils_startDhcpRenew }, - { "getDhcpResults", "(Ljava/lang/String;Landroid/net/DhcpResults;)Z", (void *)android_net_utils_getDhcpResults }, - { "stopDhcp", "(Ljava/lang/String;)Z", (void *)android_net_utils_stopDhcp }, - { "releaseDhcpLease", "(Ljava/lang/String;)Z", (void *)android_net_utils_releaseDhcpLease }, - { "getDhcpError", "()Ljava/lang/String;", (void*) android_net_utils_getDhcpError }, { "bindProcessToNetwork", "(I)Z", (void*) android_net_utils_bindProcessToNetwork }, { "getBoundNetworkForProcess", "()I", (void*) android_net_utils_getBoundNetworkForProcess }, { "bindProcessToNetworkForHostResolution", "(I)Z", (void*) android_net_utils_bindProcessToNetworkForHostResolution }, @@ -322,24 +152,6 @@ static const JNINativeMethod gNetworkUtilMethods[] = { int register_android_net_NetworkUtils(JNIEnv* env) { - jclass dhcpResultsClass = FindClassOrDie(env, "android/net/DhcpResults"); - - dhcpResultsFieldIds.clear = GetMethodIDOrDie(env, dhcpResultsClass, "clear", "()V"); - dhcpResultsFieldIds.setIpAddress =GetMethodIDOrDie(env, dhcpResultsClass, "setIpAddress", - "(Ljava/lang/String;I)Z"); - dhcpResultsFieldIds.setGateway = GetMethodIDOrDie(env, dhcpResultsClass, "setGateway", - "(Ljava/lang/String;)Z"); - dhcpResultsFieldIds.addDns = GetMethodIDOrDie(env, dhcpResultsClass, "addDns", - "(Ljava/lang/String;)Z"); - dhcpResultsFieldIds.setDomains = GetMethodIDOrDie(env, dhcpResultsClass, "setDomains", - "(Ljava/lang/String;)V"); - dhcpResultsFieldIds.setServerAddress = GetMethodIDOrDie(env, dhcpResultsClass, - "setServerAddress", "(Ljava/lang/String;)Z"); - dhcpResultsFieldIds.setLeaseDuration = GetMethodIDOrDie(env, dhcpResultsClass, - "setLeaseDuration", "(I)V"); - dhcpResultsFieldIds.setVendorInfo = GetMethodIDOrDie(env, dhcpResultsClass, "setVendorInfo", - "(Ljava/lang/String;)V"); - return RegisterMethodsOrDie(env, NETUTILS_PKG_NAME, gNetworkUtilMethods, NELEM(gNetworkUtilMethods)); } diff --git a/core/jni/android_view_DisplayListCanvas.cpp b/core/jni/android_view_DisplayListCanvas.cpp index 03c94a683ec2..c87a7701786c 100644 --- a/core/jni/android_view_DisplayListCanvas.cpp +++ b/core/jni/android_view_DisplayListCanvas.cpp @@ -160,7 +160,7 @@ static jboolean android_view_DisplayListCanvas_isAvailable(JNIEnv* env, jobject } // In the emulator this property will be set > 0 when OpenGL ES 2.0 is // enabled, 0 otherwise. On old emulator versions it will be undefined. - property_get("ro.kernel.qemu.gles", prop, "0"); + property_get("qemu.gles", prop, "0"); return atoi(prop) > 0 ? 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 4194aa410792..612f4dfd1505 100644 --- a/core/jni/com_android_internal_os_Zygote.cpp +++ b/core/jni/com_android_internal_os_Zygote.cpp @@ -608,8 +608,12 @@ static jint com_android_internal_os_Zygote_nativeForkAndSpecialize( jlong capabilities = 0; // Grant CAP_WAKE_ALARM to the Bluetooth process. + // Additionally, allow bluetooth to open packet sockets so it can start the DHCP client. + // TODO: consider making such functionality an RPC to netd. if (multiuser_get_app_id(uid) == AID_BLUETOOTH) { capabilities |= (1LL << CAP_WAKE_ALARM); + capabilities |= (1LL << CAP_NET_RAW); + capabilities |= (1LL << CAP_NET_BIND_SERVICE); } // Grant CAP_BLOCK_SUSPEND to processes that belong to GID "wakelock" diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index eeff00f54c86..30d6f2929774 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -296,10 +296,6 @@ <protected-broadcast android:name="android.intent.action.AIRPLANE_MODE" /> <protected-broadcast android:name="android.intent.action.ADVANCED_SETTINGS" /> <protected-broadcast android:name="android.intent.action.APPLICATION_RESTRICTIONS_CHANGED" /> - <protected-broadcast android:name="android.intent.action.BUGREPORT_STARTED" /> - <protected-broadcast android:name="android.intent.action.BUGREPORT_FINISHED" /> - <protected-broadcast android:name="android.intent.action.REMOTE_BUGREPORT_FINISHED" /> - <protected-broadcast android:name="android.intent.action.REMOTE_BUGREPORT_DISPATCH" /> <!-- Legacy --> <protected-broadcast android:name="android.intent.action.ACTION_IDLE_MAINTENANCE_START" /> @@ -893,77 +889,77 @@ <!-- @hide We need to keep this around for backwards compatibility --> <permission android:name="android.permission.READ_PROFILE" android:protectionLevel="normal" - android:permissionFlags="hidden"/> + android:permissionFlags="removed"/> <!-- @hide We need to keep this around for backwards compatibility --> <permission android:name="android.permission.WRITE_PROFILE" android:protectionLevel="normal" - android:permissionFlags="hidden"/> + android:permissionFlags="removed"/> <!-- @hide We need to keep this around for backwards compatibility --> <permission android:name="android.permission.READ_SOCIAL_STREAM" android:protectionLevel="normal" - android:permissionFlags="hidden"/> + android:permissionFlags="removed"/> <!-- @hide We need to keep this around for backwards compatibility --> <permission android:name="android.permission.WRITE_SOCIAL_STREAM" android:protectionLevel="normal" - android:permissionFlags="hidden"/> + android:permissionFlags="removed"/> <!-- @hide We need to keep this around for backwards compatibility --> <permission android:name="android.permission.READ_USER_DICTIONARY" android:protectionLevel="normal" - android:permissionFlags="hidden"/> + android:permissionFlags="removed"/> <!-- @hide We need to keep this around for backwards compatibility --> <permission android:name="android.permission.WRITE_USER_DICTIONARY" android:protectionLevel="normal" - android:permissionFlags="hidden"/> + android:permissionFlags="removed"/> <!-- @hide We need to keep this around for backwards compatibility --> <permission android:name="android.permission.WRITE_SMS" android:protectionLevel="normal" - android:permissionFlags="hidden"/> + android:permissionFlags="removed"/> <!-- @hide We need to keep this around for backwards compatibility --> <permission android:name="com.android.browser.permission.READ_HISTORY_BOOKMARKS" android:protectionLevel="normal" - android:permissionFlags="hidden"/> + android:permissionFlags="removed"/> <!-- @hide We need to keep this around for backwards compatibility --> <permission android:name="com.android.browser.permission.WRITE_HISTORY_BOOKMARKS" android:protectionLevel="normal" - android:permissionFlags="hidden"/> + android:permissionFlags="removed"/> <!-- @hide We need to keep this around for backwards compatibility --> <permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" android:protectionLevel="normal" - android:permissionFlags="hidden"/> + android:permissionFlags="removed"/> <!-- @hide We need to keep this around for backwards compatibility --> <permission android:name="android.permission.MANAGE_ACCOUNTS" android:protectionLevel="normal" - android:permissionFlags="hidden"/> + android:permissionFlags="removed"/> <!-- @hide We need to keep this around for backwards compatibility --> <permission android:name="android.permission.USE_CREDENTIALS" android:protectionLevel="normal" - android:permissionFlags="hidden"/> + android:permissionFlags="removed"/> <!-- @hide We need to keep this around for backwards compatibility --> <permission android:name="android.permission.SUBSCRIBED_FEEDS_READ" android:protectionLevel="normal" - android:permissionFlags="hidden"/> + android:permissionFlags="removed"/> <!-- @hide We need to keep this around for backwards compatibility --> <permission android:name="android.permission.SUBSCRIBED_FEEDS_WRITE" android:protectionLevel="normal" - android:permissionFlags="hidden"/> + android:permissionFlags="removed"/> <!-- @hide We need to keep this around for backwards compatibility --> <permission android:name="android.permission.FLASHLIGHT" android:protectionLevel="normal" - android:permissionFlags="hidden"/> + android:permissionFlags="removed"/> <!-- ====================================================================== --> <!-- INSTALL PERMISSIONS --> diff --git a/core/res/res/drawable-nodpi/platlogo.xml b/core/res/res/drawable-nodpi/platlogo.xml index bb423fef57ba..defa83a9b5c6 100644 --- a/core/res/res/drawable-nodpi/platlogo.xml +++ b/core/res/res/drawable-nodpi/platlogo.xml @@ -1,5 +1,5 @@ <!-- -Copyright (C) 2015 The Android Open Source Project +Copyright (C) 2016 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,20 +14,24 @@ Copyright (C) 2015 The Android Open Source Project limitations under the License. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="48dp" - android:height="48dp" + android:width="512dp" + android:height="512dp" android:viewportWidth="48.0" android:viewportHeight="48.0"> <path - android:pathData="M34.9,13.2c-0.8,-0.8,-4.2,-2.4,-10.9,-2.4s-10.1,1.6,-10.9,2.4c-0.8,0.8,-2.4,4.2,-2.4,10.9s1.6,10.1,2.4,10.9 c0.8,0.8,4.2,2.4,10.9,2.4s10.1,-1.6,10.9,-2.4c0.8,-0.8,2.4,-4.2,2.4,-10.9S35.6,14,34.9,13.2z" - android:fillColor="#FFFFFF"/> + android:fillColor="#FF7E5BBF" + android:pathData="M32.0,12.5l0.0,28.0l12.0,-5.0l0.0,-28.0z"/> <path - android:pathData="M34.7,13.7c0,0.8,-1.2,1.5,-3.1,2.1c-1.9,0.5,-4.6,0.8,-7.6,0.8s-5.6,-0.3,-7.6,-0.8 c-1.9,-0.5,-3.1,-1.2,-3.1,-2.1s1.2,-1.5,3.1,-2.1c1.9,-0.5,4.6,-0.8,7.6,-0.8s5.6,0.3,7.6,0.8C33.5,12.1,34.7,12.9,34.7,13.7z" - android:fillColor="#EBEBEB"/> + android:fillColor="#FF7E5BBF" + android:pathData="M4.0,40.5l12.0,-5.0l0.0,-11.0l-12.0,-12.0z"/> <path - android:pathData="M30,13c-0.1,0,-0.1,0,-0.2,0c-0.4,-0.1,-0.7,-0.6,-0.6,-1l1.3,-5.5c0.1,-0.4,0.6,-0.7,1,-0.6c0.4,0.1,0.7,0.6,0.6,1 l-1.3,5.5C30.7,12.7,30.4,13,30,13z" - android:fillColor="#FFFFFF"/> + android:fillColor="#40000000" + android:pathData="M44.0,35.5l-12.0,-12.0l0.0,-4.0z"/> <path - android:pathData="M18,13c-0.4,0,-0.7,-0.3,-0.8,-0.6l-1.3,-5.5c-0.1,-0.4,0.2,-0.9,0.6,-1c0.4,-0.1,0.9,0.2,1,0.6l1.3,5.5 c0.1,0.4,-0.2,0.9,-0.6,1C18.1,13,18.1,13,18,13z" - android:fillColor="#FFFFFF"/> + android:fillColor="#40000000" + android:pathData="M4.0,12.5l12.0,12.0l0.0,4.0z"/> + <path + android:fillColor="#FF55C4F5" + android:pathData="M32.0,23.5l-16.0,-16.0l-12.0,5.0l0.0,0.0l12.0,12.0l16.0,16.0l12.0,-5.0l0.0,0.0z"/> </vector> + diff --git a/core/res/res/drawable-nodpi/stat_sys_adb.xml b/core/res/res/drawable-nodpi/stat_sys_adb.xml index 8cc9961bf6e6..5043cba3aa5e 100644 --- a/core/res/res/drawable-nodpi/stat_sys_adb.xml +++ b/core/res/res/drawable-nodpi/stat_sys_adb.xml @@ -1,5 +1,5 @@ <!-- -Copyright (C) 2014 The Android Open Source Project +Copyright (C) 2016 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,23 +14,23 @@ Copyright (C) 2014 The Android Open Source Project limitations under the License. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="24.0dp" - android:height="24.0dp" - android:viewportWidth="24.0" - android:viewportHeight="24.0"> + android:width="24dp" + android:height="24dp" + android:viewportWidth="48.0" + android:viewportHeight="48.0"> <path - android:pathData="M8.4,5.3c-0.2,0.0 -0.4,-0.2 -0.5,-0.4L7.1,1.6C7.0,1.4 7.2,1.1 7.4,1.0C7.7,0.9 8.0,1.1 8.0,1.4l0.8,3.3c0.1,0.3 -0.1,0.5 -0.4,0.6C8.5,5.3 8.4,5.3 8.4,5.3z" - android:fillColor="#FFFFFF"/> + android:fillColor="#A0FFFFFF" + android:pathData="M32.0,12.5l0.0,28.0l12.0,-5.0l0.0,-28.0z"/> <path - android:pathData="M15.6,5.3c0.0,0.0 -0.1,0.0 -0.1,0.0c-0.3,-0.1 -0.4,-0.3 -0.4,-0.6L16.0,1.4C16.0,1.1 16.3,0.9 16.6,1.0c0.3,0.1 0.4,0.3 0.4,0.6l-0.8,3.3C16.1,5.1 15.9,5.3 15.6,5.3z" - android:fillColor="#FFFFFF"/> + android:fillColor="#A0FFFFFF" + android:pathData="M4.0,40.5l12.0,-5.0l0.0,-11.0l-12.0,-12.0z"/> <path - android:pathData="M18.6,5.4c-0.1,-0.1 -0.2,-0.1 -0.3,-0.2c0.2,0.2 0.3,0.3 0.3,0.5c0.0,0.9 -2.9,1.7 -6.6,1.7S5.4,6.7 5.4,5.7c0.0,-0.2 0.1,-0.3 0.3,-0.5C5.6,5.3 5.5,5.4 5.4,5.4C5.0,5.9 4.0,8.0 4.0,12.0s1.0,6.1 1.4,6.6C5.9,19.0 8.0,20.0 12.0,20.0s6.1,-1.0 6.6,-1.4C19.0,18.1 20.0,16.0 20.0,12.0S19.0,5.9 18.6,5.4zM8.0,13.0c-0.6,0.0 -1.0,-0.4 -1.0,-1.0c0.0,-0.6 0.4,-1.0 1.0,-1.0s1.0,0.4 1.0,1.0C9.0,12.6 8.6,13.0 8.0,13.0zM16.0,13.0c-0.6,0.0 -1.0,-0.4 -1.0,-1.0c0.0,-0.6 0.4,-1.0 1.0,-1.0s1.0,0.4 1.0,1.0C17.0,12.6 16.6,13.0 16.0,13.0z" - android:fillColor="#FFFFFF"/> - <path - android:pathData="M5.35,5.7 - a 6.6 1.75 0 1 1 13.25 0 - a 6.6 1.75 0 1 1 -13.25 0 - z" - android:fillColor="#BBFFFFFF" /> + android:fillColor="#40000000" + android:pathData="M44.0,35.5l-12.0,-12.0l0.0,-4.0z"/> + <path + android:fillColor="#40000000" + android:pathData="M4.0,12.5l12.0,12.0l0.0,4.0z"/> + <path + android:fillColor="#FFFFFFFF" + android:pathData="M32.0,23.5l-16.0,-16.0l-12.0,5.0l0.0,0.0l12.0,12.0l16.0,16.0l12.0,-5.0l0.0,0.0z"/> </vector> diff --git a/core/res/res/layout/language_picker_item.xml b/core/res/res/layout/language_picker_item.xml index 22cb514b10b9..88012a939857 100644 --- a/core/res/res/layout/language_picker_item.xml +++ b/core/res/res/layout/language_picker_item.xml @@ -14,37 +14,16 @@ limitations under the License. --> -<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:gravity="center_vertical" - android:orientation="horizontal" - android:layoutDirection="locale" - android:textDirection="locale" - android:paddingBottom="8dp" - android:paddingTop="8dp"> - - <TextView - android:id="@+id/locale" - android:layout_width="0dp" - android:layout_height="wrap_content" - tools:text="France" - android:layout_weight="1" - android:padding="12dp" - android:paddingStart="18dp" - android:paddingEnd="18dp" - android:textAppearance="?android:attr/textAppearanceListItem"/> - - <ImageView - android:id="@+id/l10nWarn" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:src="@android:drawable/stat_sys_warning" - android:focusableInTouchMode="false" - android:focusable="false" - android:paddingStart="12dp" - android:paddingEnd="12dp" - android:tint="?android:attr/colorAccent"/> - -</LinearLayout> +<TextView xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:id="@+id/locale" + android:gravity="center_vertical" + android:minHeight="?android:attr/listPreferredItemHeight" + android:paddingStart="?android:attr/listPreferredItemPaddingStart" + android:paddingEnd="?android:attr/listPreferredItemPaddingEnd" + android:textAppearance="?android:attr/textAppearanceListItem" + android:layoutDirection="locale" + android:textDirection="locale" + android:paddingBottom="8dp" + android:paddingTop="8dp" /> diff --git a/core/res/res/layout/language_picker_section_header.xml b/core/res/res/layout/language_picker_section_header.xml index b12ec8c00c85..6cbd7c36e958 100644 --- a/core/res/res/layout/language_picker_section_header.xml +++ b/core/res/res/layout/language_picker_section_header.xml @@ -23,4 +23,5 @@ android:paddingStart="18dp" android:paddingEnd="18dp" android:textColor="?android:attr/colorAccent" + android:textStyle="bold" tools:text="@string/language_picker_section_all"/> diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml index 6b158dc5c878..fd4fff4f71fe 100644 --- a/core/res/res/values-af/strings.xml +++ b/core/res/res/values-af/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Beller-ID se verstek is nie beperk nie. Volgende oproep: nie beperk nie"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Diens nie verskaf nie."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Jy kan nie die beller-ID-instelling verander nie."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Beperkte toegang het verander"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Datadiens word geblokkeer."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Nooddiens word geblokkeer."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Stemdiens word geblokkeer."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Stel terug en herbegin program"</string> <string name="aerr_report" msgid="5371800241488400617">"Stuur terugvoer"</string> <string name="aerr_close" msgid="2991640326563991340">"Maak toe"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Demp"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Demp totdat toestel herbegin"</string> <string name="aerr_wait" msgid="3199956902437040261">"Wag"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Maak program toe"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Raak vir meer opsies."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-ontfouter gekoppel"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Raak om USB-ontfouting te deaktiveer."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Deel foutverslag?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Deel tans foutverslag …"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Jou IT-administrateur het \'n foutverslag versoek om met die foutsporing van hierdie toestel te help. Programme en data sal dalk gedeel word en jou toestel sal dalk tydelik stadiger wees."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Jou IT-administrateur het \'n foutverslag versoek om met die foutsporing van hierdie toestel te help. Programme en data sal dalk gedeel word."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Dit sal jou toestel dalk tydelik stadiger maak"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"AANVAAR"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"WEIER"</string> <string name="select_input_method" msgid="8547250819326693584">"Verander sleutelbord"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> gekies</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> gekies</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Diverse"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Jy stel die belangrikheid van hierdie kennisgewings."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Jy stel die belangrikheid van hierdie kennisgewings."</string> <string name="importance_from_person" msgid="9160133597262938296">"Dit is belangrik as gevolg van die mense wat betrokke is."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Laat <xliff:g id="APP">%1$s</xliff:g> toe om \'n nuwe gebruiker met <xliff:g id="ACCOUNT">%2$s</xliff:g> te skep?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Laat <xliff:g id="APP">%1$s</xliff:g> toe om \'n nuwe gebruiker met <xliff:g id="ACCOUNT">%2$s</xliff:g> te skep (\'n gebruiker met hierdie rekening bestaan reeds)?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"Speld vas"</string> <string name="unpin_target" msgid="3556545602439143442">"Ontspeld"</string> <string name="app_info" msgid="6856026610594615344">"Programinligting"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml index 5332c622f455..d9f9610a5fa8 100644 --- a/core/res/res/values-am/strings.xml +++ b/core/res/res/values-am/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"የደዋይ ID ነባሪዎች ወደአልተከለከለም። ቀጥሎ ጥሪ፡አልተከለከለም"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"አገልግሎት አልቀረበም።"</string> <string name="CLIRPermanent" msgid="3377371145926835671">"የደዋይ መታወቂያ ቅንብሮች መለወጥ አትችልም፡፡"</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"ክልክል ድረስተለውጧል"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"የውሂብ አገልግሎት የታገደ ነው።"</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"የአደጋ ጊዜአገልግሎት የታገደ ነው።"</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"የድምፅ አገልግሎት ታግዷል።"</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"ዳግም ያቀናብሩ እና መተግበሪያ ዳግም ያስጀምሩት"</string> <string name="aerr_report" msgid="5371800241488400617">"ግብረመልስ ይላኩ"</string> <string name="aerr_close" msgid="2991640326563991340">"ዝጋ"</string> - <string name="aerr_mute" msgid="7698966346654789433">"ድምጽ-ከል አድርግ"</string> + <string name="aerr_mute" msgid="1974781923723235953">"መሣሪያ ዳግም እስኪጀመር ድረስ ድምጽ ያጥፉ"</string> <string name="aerr_wait" msgid="3199956902437040261">"ጠብቅ"</string> <string name="aerr_close_app" msgid="3269334853724920302">"መተግበሪያን ዝጋ"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"ለተጨማሪ አማራጮች ነካ ያድርጉ።"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB አድስ ተያይዟል"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB ማረሚያ ላለማንቃት ዳስስ።"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"የሳንካ ሪፖርት ይጋራ?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"የሳንካ ሪፖርትን በማጋራት ላይ…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"የእርስዎ አይቲ አስተዳዳሪ ለዚህ መሣሪያ መላ ለመፈለግ እንዲያግዝ የሳንካ ሪፖርት ጠይቀዋል። መተግበሪያዎች እና ውሂብ ሊጋሩ ይችላሉ። ይሄ መሣሪያዎን ለጊዜው ሊያዘገየው ይችላል።"</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"የእርስዎ አይቲ አስተዳዳሪ ለዚህ መሣሪያ መላ ለመፈለግ የሳንካ ሪፖርት ጠይቀዋል። መተግበሪያዎች እና ውሂብ ሊጋሩ ይችላሉ።"</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"ይሄ መሣሪያዎን ለጊዜው ሊያዘገየው ይችላል"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ተቀበል"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ውድቅ አድርግ"</string> <string name="select_input_method" msgid="8547250819326693584">"ቁልፍ ሰሌዳ ይቀይሩ"</string> @@ -1543,8 +1537,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ተመርጧል</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ተመርጠዋል</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"የተለያዩ"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"የእነዚህን ማሳወቂያዎች አስፈላጊነት አዘጋጅተዋል።"</string> + <string name="importance_from_user" msgid="7318955817386549931">"የእነዚህን ማሳወቂያዎች አስፈላጊነት አዘጋጅተዋል።"</string> <string name="importance_from_person" msgid="9160133597262938296">"ይሄ በሚሳተፉ ሰዎች ምክንያት አስፈላጊ ነው።"</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g> በ<xliff:g id="ACCOUNT">%2$s</xliff:g> አዲስ ተጠቃሚ እንዲፈጥር ይፈቀድለት?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="APP">%1$s</xliff:g> በ<xliff:g id="ACCOUNT">%2$s</xliff:g> አዲስ ተጠቃሚ እንዲፈጥር ይፈቀድለት (ይህ መለያ ያለው ተጠቃሚ አስቀድሞ አለ)?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"ፒን"</string> <string name="unpin_target" msgid="3556545602439143442">"ንቀል"</string> <string name="app_info" msgid="6856026610594615344">"የመተግበሪያ መረጃ"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml index e592fb9d784d..056f1aebd3c1 100644 --- a/core/res/res/values-ar/strings.xml +++ b/core/res/res/values-ar/strings.xml @@ -92,7 +92,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"الإعداد الافتراضي لمعرف المتصل هو غير مقيّد. الاتصال التالي: غير مقيّد"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"الخدمة غير متوفرة."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"لا يمكنك تغيير إعداد معرف المتصل."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"تم تغيير الدخول المقيّد"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"خدمة البيانات محظورة."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"خدمة الطوارئ محظورة."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"الخدمة الصوتية محظورة."</string> @@ -941,7 +940,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"إعادة ضبط التطبيق وإعادة تشغيله"</string> <string name="aerr_report" msgid="5371800241488400617">"إرسال تعليقات"</string> <string name="aerr_close" msgid="2991640326563991340">"إغلاق"</string> - <string name="aerr_mute" msgid="7698966346654789433">"تجاهل"</string> + <string name="aerr_mute" msgid="1974781923723235953">"التعطيل حتى إعادة تشغيل الجهاز"</string> <string name="aerr_wait" msgid="3199956902437040261">"انتظار"</string> <string name="aerr_close_app" msgid="3269334853724920302">"إغلاق التطبيق"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1085,16 +1084,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"المس للحصول على مزيد من الخيارات."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"تم توصيل تصحيح أخطاء USB"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"المس لتعطيل تصحيح أخطاء USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"هل تريد مشاركة تقرير الخطأ؟"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"جارٍ مشاركة تقرير الخطأ…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"طلب مشرف تكنولوجيا المعلومات الحصول على تقرير خطأ للمساعدة في تحرِّي مشكلة هذا الجهاز وإصلاحها. قد تتم مشاركة التطبيقات والبيانات. وقد يؤدي هذا إلى حدوث بطء مؤقت في جهازك."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"طلب مشرف تكنولوجيا المعلومات الحصول على تقرير خطأ للمساعدة في تحرِّي مشكلة هذا الجهاز وإصلاحها. قد تتم مشاركة التطبيقات والبيانات."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"قد يؤدي هذا إلى حدوث بطء مؤقت في جهازك"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"قبول"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"رفض"</string> <string name="select_input_method" msgid="8547250819326693584">"تغيير لوحة المفاتيح"</string> @@ -1619,8 +1613,7 @@ <item quantity="other">تم تحديد <xliff:g id="COUNT_1">%1$d</xliff:g> من العناصر</item> <item quantity="one">تم تحديد <xliff:g id="COUNT_0">%1$d</xliff:g> عنصر</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"متنوعة"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"لقد عيَّنت أهمية هذه الإشعارات."</string> + <string name="importance_from_user" msgid="7318955817386549931">"لقد عيَّنت أهمية هذه الإشعارات."</string> <string name="importance_from_person" msgid="9160133597262938296">"هذه الرسالة مهمة نظرًا لأهمية الأشخاص المعنيين."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"هل تسمح لـ <xliff:g id="APP">%1$s</xliff:g> بإنشاء مستخدم جديد باستخدام <xliff:g id="ACCOUNT">%2$s</xliff:g>؟"</string> <string name="user_creation_adding" msgid="4482658054622099197">"هل تسمح لـ <xliff:g id="APP">%1$s</xliff:g> بإنشاء مستخدم جديد باستخدام <xliff:g id="ACCOUNT">%2$s</xliff:g> (يوجد مستخدم بهذا الحساب مسبقًا)؟"</string> @@ -1647,4 +1640,5 @@ <string name="pin_target" msgid="3052256031352291362">"تثبيت"</string> <string name="unpin_target" msgid="3556545602439143442">"إزالة تثبيت"</string> <string name="app_info" msgid="6856026610594615344">"معلومات عن التطبيق"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-az-rAZ/strings.xml b/core/res/res/values-az-rAZ/strings.xml index 731306350487..a6bad85f3271 100644 --- a/core/res/res/values-az-rAZ/strings.xml +++ b/core/res/res/values-az-rAZ/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Adətən zəng edənin ID\'si məhdudlaşdırılmır. Növbəti zəng: Məhdudlaşdırılmayıb"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Xidmət təmin edilməyib."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Siz zəng edənin ID nizamlarını dəyişə bilməzsiz."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Məhdudlaşdırılmış keçid dəyişdi"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Data xidmət bağlıdır."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Təcili xidmət bağlıdır."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Səs xidməti bağlıdır."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Tətbiqi sıfırlayın və yenidən başladın"</string> <string name="aerr_report" msgid="5371800241488400617">"Geri əlaqə göndərin"</string> <string name="aerr_close" msgid="2991640326563991340">"Bağla"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Susdur"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Cihaz yeniden başladılana kimi səssiz edin"</string> <string name="aerr_wait" msgid="3199956902437040261">"Gözləyin"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Tətbiqi qapadın"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Əlavə seçimlər üçün toxunun."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB sazlama qoşuludur"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB debaqı deaktivasiya etmək üçün toxunun."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Baq hesabatı paylaşılsın?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Baq hesabatı paylaşılır..."</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"IT admininiz bu cihazda nasazlıqların aşkarlanması üçün baq hesabatı sorğusu göndərdi. Tətbiqlər və data paylaşıla və cihazınız surəti müvəqqəti azala bilər."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"IT admininiz bu cihazda nasazlıqların aşkarlanması üçün baq hesabatı sorğusu göndərdi. Tətbiqlər və data paylaşıla bilər."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Bu cihazınızın sürətini müvəqqəti olaraq azalda bilər"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"QƏBUL EDİN"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"RƏDD ET"</string> <string name="select_input_method" msgid="8547250819326693584">"Klaviaturanı dəyişin"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> seçilib</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> seçilib</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Müxtəlif"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Bildirişlərin əhəmiyyətini Siz ayarlaryırsınız."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Bildirişlərin əhəmiyyətini Siz ayarlaryırsınız."</string> <string name="importance_from_person" msgid="9160133597262938296">"İnsanlar cəlb olunduğu üçün bu vacibdir."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g> tətbiqinə <xliff:g id="ACCOUNT">%2$s</xliff:g> hesabı ilə yeni İstifadəçi yaratmağa icazə verilsin?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="APP">%1$s</xliff:g> tətbiqinə<xliff:g id="ACCOUNT">%2$s</xliff:g> (bu hesab ilə İstifadəçi artıq mövcuddur) hesabı ilə yeni İstifadəçi yaratmağa icazə verilsin?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"Pin kod"</string> <string name="unpin_target" msgid="3556545602439143442">"Çıxarın"</string> <string name="app_info" msgid="6856026610594615344">"Tətbiq məlumatı"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml index 3206faab944d..144559ad0585 100644 --- a/core/res/res/values-b+sr+Latn/strings.xml +++ b/core/res/res/values-b+sr+Latn/strings.xml @@ -89,7 +89,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"ID pozivaoca podrazumevano nije ograničen. Sledeći poziv: Nije ograničen."</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Usluga nije dobavljena."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Ne možete da promenite podešavanje ID-a korisnika."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Ograničeni pristup je promenjen"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Usluga za podatke je blokirana."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Usluga za hitne slučajeve je blokirana."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Glasovna usluga je blokirana."</string> @@ -923,7 +922,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Resetuj i ponovo pokreni aplikaciju"</string> <string name="aerr_report" msgid="5371800241488400617">"Pošaljite povratne informacije"</string> <string name="aerr_close" msgid="2991640326563991340">"Zatvori"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Ignoriši"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Ignoriši dok se uređaj ne pokrene ponovo"</string> <string name="aerr_wait" msgid="3199956902437040261">"Čekaj"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Zatvori aplikaciju"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1061,16 +1060,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Dodirnite za još opcija."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Otklanjanje grešaka sa USB-a je uspostavljeno"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Dodirnite da biste onemogućili otklanjanje grešaka sa USB-a."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Želite li da podelite izveštaj o grešci?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Deli se izveštaj o grešci…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"IT administrator je zatražio izveštaj o grešci radi lakšeg rešavanja problema u vezi sa ovim uređajem. Aplikacije i podaci mogu da se dele, a uređaj će se privremeno usporiti."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"IT administrator je zatražio izveštaj o grešci radi lakšeg rešavanja problema u vezi sa ovim uređajem. Aplikacije i podaci mogu da se dele."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Ovo će privremeno usporiti uređaj"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"PRIHVATI"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ODBIJ"</string> <string name="select_input_method" msgid="8547250819326693584">"Promenite tastaturu"</string> @@ -1562,8 +1556,7 @@ <item quantity="few">Izabrane su <xliff:g id="COUNT_1">%1$d</xliff:g> stavke</item> <item quantity="other">Izabrano je <xliff:g id="COUNT_1">%1$d</xliff:g> stavki</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Razno"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Vi podešavate važnost ovih obaveštenja."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Vi podešavate važnost ovih obaveštenja."</string> <string name="importance_from_person" msgid="9160133597262938296">"Ovo je važno zbog ljudi koji učestvuju."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Želite li da dozvolite aplikaciji <xliff:g id="APP">%1$s</xliff:g> da napravi novog korisnika za <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Želite li da dozvolite aplikaciji <xliff:g id="APP">%1$s</xliff:g> da napravi novog korisnika za <xliff:g id="ACCOUNT">%2$s</xliff:g> (korisnik sa ovim nalogom već postoji)?"</string> @@ -1590,4 +1583,6 @@ <string name="pin_target" msgid="3052256031352291362">"Zakači"</string> <string name="unpin_target" msgid="3556545602439143442">"Otkači"</string> <string name="app_info" msgid="6856026610594615344">"Informacije o aplikaciji"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml index a5255a62ad86..23bfab464af6 100644 --- a/core/res/res/values-bg/strings.xml +++ b/core/res/res/values-bg/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Стандартната идентификация на повикванията е „разрешено“. За следващото обаждане тя е разрешена."</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Услугата не е обезпечена."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Не можете да променяте настройката за идентификация на обажданията."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Ограниченият достъп е променен"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Услугата за данни е блокирана."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Услугата за спешни обаждания е блокирана."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Услугата за глас е блокирана."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Нулиране и рестартиране на приложението"</string> <string name="aerr_report" msgid="5371800241488400617">"Изпращане на отзиви"</string> <string name="aerr_close" msgid="2991640326563991340">"Затваряне"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Спиране"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Спиране, докато устройството се рестартира"</string> <string name="aerr_wait" msgid="3199956902437040261">"Изчакване"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Затваряне на приложението"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Докоснете за още опции."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Отстраняване на грешки през USB"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Докоснете за деактивиране"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Да се сподели ли сигналът за програмна грешка?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Сигналът за програмна грешка се споделя…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Системният ви администратор поиска сигнал за програмна грешка с цел отстраняване на неизправностите на устройството. Възможно е да бъдат споделени приложения и данни и работата на устройството ви временно да се забави."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Системният ви администратор поиска сигнал за програмна грешка с цел отстраняване на неизправностите на това устройство. Възможно е да бъдат споделени приложения и данни."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Това може временно да забави работата на устройството ви"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ПРИЕМАМ"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ОТХВЪРЛЯМ"</string> <string name="select_input_method" msgid="8547250819326693584">"Промяна на клавиатурата"</string> @@ -1543,8 +1537,7 @@ <item quantity="other">Избрахте <xliff:g id="COUNT_1">%1$d</xliff:g></item> <item quantity="one">Избрахте <xliff:g id="COUNT_0">%1$d</xliff:g></item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Други"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Зададохте важността на тези известия."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Зададохте важността на тези известия."</string> <string name="importance_from_person" msgid="9160133597262938296">"Това е важно заради участващите хора."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Да се разреши ли на <xliff:g id="APP">%1$s</xliff:g> да създаде нов потребител с профила <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Да се разреши ли на <xliff:g id="APP">%1$s</xliff:g> да създаде нов потребител с профила <xliff:g id="ACCOUNT">%2$s</xliff:g> (вече съществува потребител с този профил)?"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Фиксиране"</string> <string name="unpin_target" msgid="3556545602439143442">"Освобождаване"</string> <string name="app_info" msgid="6856026610594615344">"Информация за приложението"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-bn-rBD/strings.xml b/core/res/res/values-bn-rBD/strings.xml index eacfd3b3e84a..5c20c4e5afc6 100644 --- a/core/res/res/values-bn-rBD/strings.xml +++ b/core/res/res/values-bn-rBD/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"ডিফল্টরুপে কলার ID সীমাবদ্ধ করা থাকে না৷ পরবর্তী কল: সীমাবদ্ধ নয়"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"পরিষেবা প্রস্তুত নয়৷"</string> <string name="CLIRPermanent" msgid="3377371145926835671">"আপনি কলার ID এর সেটিংস পরিবর্তন করতে পারবেন না৷"</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"সীমিত অ্যাক্সেসের পরিবর্তন করা হয়েছে"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"ডেটা পরিষেবা অবরুদ্ধ করা আছে৷"</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"জরুরী পরিষেবা অবরুদ্ধ করা আছে৷"</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"ভয়েস পরিষেবা অবরুদ্ধ করা আছে৷"</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"পুনরায় সেট করুন এবং অ্যাপ্লিকেশান পুনরায় আরম্ভ করুন"</string> <string name="aerr_report" msgid="5371800241488400617">"প্রতিক্রিয়া পাঠান"</string> <string name="aerr_close" msgid="2991640326563991340">"বন্ধ করুন"</string> - <string name="aerr_mute" msgid="7698966346654789433">"নিঃশব্দ করুন"</string> + <string name="aerr_mute" msgid="1974781923723235953">"ডিভাইসটি পুনরায় আরম্ভ না হওয়া পর্যন্ত নিঃশব্দ করুন"</string> <string name="aerr_wait" msgid="3199956902437040261">"অপেক্ষা করুন"</string> <string name="aerr_close_app" msgid="3269334853724920302">"অ্যাপ্লিকেশান বন্ধ করুন"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"আরো বিকল্পের জন্য স্পর্শ করুন৷"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ডিবাগিং সংযুক্ত হয়েছে"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB ডিবাগিং অক্ষম করতে স্পর্শ করুন৷"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"ত্রুটির প্রতিবেদন শেয়ার করবেন?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"ত্রুটির প্রতিবেদন শেয়ার করা হচ্ছে..."</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"আপনার আইটি প্রশাসক এই ডিভাইসটির সমস্যা নিবারণে সহায়তা করতে একটি ত্রুটির প্রতিবেদন চেয়েছেন৷ অ্যাপ্লিকেশানগুলি এবং ডেটা শেয়ার করা হতে পারে এবং আপনার ডিভাইসটিকে অস্থায়ীভাবে ধীর করে দিতে পারে৷"</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"আপনার আইটি প্রশাসক এই ডিভাইসটির সমস্যা নিবারণে সহায়তা করতে একটি ত্রুটির প্রতিবেদন চেয়েছেন৷ অ্যাপ্লিকেশান এবং ডেটা শেয়ার করা হতে পারে৷"</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"এটি অস্থায়ীভাবে আপনার ডিভাইসটিকে ধীর করে দিতে পারে"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"স্বীকার করুন"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"অস্বীকার করুন"</string> <string name="select_input_method" msgid="8547250819326693584">"কীবোর্ড পরিবর্তন করুন"</string> @@ -1543,8 +1537,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g>টি নির্বাচন করা হয়েছে</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>টি নির্বাচন করা হয়েছে</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"বিবিধ"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"আপনি এই বিজ্ঞপ্তিগুলির গুরুত্ব সেট করেছেন।"</string> + <string name="importance_from_user" msgid="7318955817386549931">"আপনি এই বিজ্ঞপ্তিগুলির গুরুত্ব সেট করেছেন।"</string> <string name="importance_from_person" msgid="9160133597262938296">"লোকজন জড়িত থাকার কারণে এটি গুরুত্বপূর্ণ।"</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g> কে <xliff:g id="ACCOUNT">%2$s</xliff:g> এর সাথে একজন নতুন ব্যবহারকারী তৈরি করার অনুমতি দেবেন কি?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="APP">%1$s</xliff:g> কে <xliff:g id="ACCOUNT">%2$s</xliff:g> (একজন ব্যবহারকারী এই অ্যাকাউন্টে ইতিমধ্যেই বিদ্যমান আছেন) এর সাথে একজন নতুন ব্যবহারকারী তৈরি করার অনুমতি দেবেন কি?"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"পিন করুন"</string> <string name="unpin_target" msgid="3556545602439143442">"আনপিন করুন"</string> <string name="app_info" msgid="6856026610594615344">"অ্যাপ্লিকেশানের তথ্য"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-bs-rBA/strings.xml b/core/res/res/values-bs-rBA/strings.xml index 84e2826d0b73..58627be53538 100644 --- a/core/res/res/values-bs-rBA/strings.xml +++ b/core/res/res/values-bs-rBA/strings.xml @@ -89,7 +89,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Prikaz ID-a pozivaoca u zadanim postavkama nije zabranjen. Sljedeći poziv: nije zabranjen"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Uslugu nije moguće koristiti."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Ne možete promijeniti postavke ID-a pozivaoca."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Promijenjen ograničen pristup"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Usluga prijenosa podataka je blokirana."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Hitni pozivi su blokirani."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Govorne usluge su blokirane."</string> @@ -923,7 +922,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Vrati aplikaciju na zadano i pokreni ponovo"</string> <string name="aerr_report" msgid="5371800241488400617">"Pošalji povratne informacije"</string> <string name="aerr_close" msgid="2991640326563991340">"Zatvori"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Zanemari"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Isključiti zvuk dok se uređaj ponovo ne pokrene"</string> <string name="aerr_wait" msgid="3199956902437040261">"Sačekaj"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Zatvori aplikaciju"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1061,16 +1060,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Dodirnite za više opcija."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Uređaj za USB otklanjanje grešaka povezan"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Dodirnite da biste onemogućili USB otklanjanje grešaka."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Podijeliti izvještaj o grešci?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Dijeljenje izvještaja o grešci..."</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Vaš IT administrator je zatražio izvještaj o grešci kako bi pomogao riješiti problem na ovom uređaju. To može uzrokovati dijeljenje aplikacija i podataka te privremeno usporiti vaš uređaj."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Vaš IT administrator je zatražio izvještaj o grešci kako bi pomogao u rješavanju problema ovog uređaja. Aplikacije i podaci se mogu dijeliti."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"To može privremeno usporiti vaš uređaj"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"PRIHVATI"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ODBACI"</string> <string name="select_input_method" msgid="8547250819326693584">"Promijeni tastaturu"</string> @@ -1562,8 +1556,7 @@ <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> stavke su odabrane</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> stavki je odabrano</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Razno"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Vi postavljate značaj ovih oabvještenja."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Vi određujete značaj ovih obavještenja."</string> <string name="importance_from_person" msgid="9160133597262938296">"Ovo je značajno zbog osoba koje su uključene."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Da li dozvoljate da <xliff:g id="APP">%1$s</xliff:g> kreira novog korisnika za nalog <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Da li dozvoljavate da <xliff:g id="APP">%1$s</xliff:g> kreira novog korisnika za <xliff:g id="ACCOUNT">%2$s</xliff:g> (Korisnik sa ovim nalogom već postoji)?"</string> @@ -1590,4 +1583,6 @@ <string name="pin_target" msgid="3052256031352291362">"Zakači"</string> <string name="unpin_target" msgid="3556545602439143442">"Otkači"</string> <string name="app_info" msgid="6856026610594615344">"Informacije o aplikaciji"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml index f9ecd06cd54e..ef8c2dd9d2ef 100644 --- a/core/res/res/values-ca/strings.xml +++ b/core/res/res/values-ca/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"El valor predeterminat de l\'identificador de l\'emissor és no restringit. Següent trucada: no restringit"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"No s\'ha proveït el servei."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"No pots canviar la configuració de l\'identificador de l\'emissor."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Accés restringit canviat"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"El servei de dades està bloquejat."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"El servei d\'emergència està bloquejat."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"El servei de veu està bloquejat."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Restableix i reinicia l\'aplicació"</string> <string name="aerr_report" msgid="5371800241488400617">"Envia suggeriments"</string> <string name="aerr_close" msgid="2991640326563991340">"Tanca"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Silencia"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Silencia fins que es reiniciï el dispositiu"</string> <string name="aerr_wait" msgid="3199956902437040261">"Espera"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Tanca l\'aplicació"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Toca per veure més opcions."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Depuració USB activada"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Toca per desactivar la depuració USB"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Vols compartir l\'informe d\'errors?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"S\'està compartint l\'informe d\'errors…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"L\'administrador de TI ha sol·licitat un informe d\'errors per resoldre els problemes d\'aquest dispositiu. És possible que es comparteixin aplicacions i dades, i que el dispositiu funcioni més a poc a poc durant una estona."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"El teu administrador de TI ha sol·licitat un informe d\'errors per resoldre els problemes d\'aquest dispositiu. És possible que es comparteixin aplicacions i dades."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"És possible que el dispositiu funcioni més a poc a poc durant una estona"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ACCEPTA"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"REBUTJA"</string> <string name="select_input_method" msgid="8547250819326693584">"Canvia el teclat"</string> @@ -1543,8 +1537,7 @@ <item quantity="other">Seleccionats: <xliff:g id="COUNT_1">%1$d</xliff:g></item> <item quantity="one">Seleccionats: <xliff:g id="COUNT_0">%1$d</xliff:g></item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Altres"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Tu has definit la importància d\'aquestes notificacions."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Has definit la importància d\'aquestes notificacions."</string> <string name="importance_from_person" msgid="9160133597262938296">"Aquest missatge és important per les persones implicades."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Concedeixes permís a <xliff:g id="APP">%1$s</xliff:g> per crear un usuari amb el compte <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Concedeixes permís a <xliff:g id="APP">%1$s</xliff:g> per crear un usuari amb el compte <xliff:g id="ACCOUNT">%2$s</xliff:g>? (Ja hi ha un usuari amb aquest compte.)"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Fixa"</string> <string name="unpin_target" msgid="3556545602439143442">"No fixis"</string> <string name="app_info" msgid="6856026610594615344">"Informació de l\'aplicació"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml index 19f8864096a1..321e39781d21 100644 --- a/core/res/res/values-cs/strings.xml +++ b/core/res/res/values-cs/strings.xml @@ -90,7 +90,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Ve výchozím nastavení není identifikace volajícího omezena. Příští hovor: Neomezeno"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Služba není zřízena."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Nastavení identifikace volajícího nesmíte měnit."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Omezený přístup byl změněn."</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Datová služba je zablokována."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Tísňová linka je zablokována."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Hlasová služba je zablokována."</string> @@ -929,7 +928,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Obnovit a restartovat aplikaci"</string> <string name="aerr_report" msgid="5371800241488400617">"Odeslat zpětnou vazbu"</string> <string name="aerr_close" msgid="2991640326563991340">"Zavřít"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Ignorovat"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Ignorovat do restartu zařízení"</string> <string name="aerr_wait" msgid="3199956902437040261">"Počkat"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Zavřít aplikaci"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1069,16 +1068,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Klepnutím zobrazíte další možnosti."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Ladění přes USB připojeno"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Dotykem zakážete ladění USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Sdílet zprávu o chybě?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Sdílení zprávy o chybě…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Administrátor IT si vyžádal zprávu o chybě, aby mohl problém odstranit. Mohou být sdíleny aplikace a data a zařízení se může dočasně zpomalit."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Administrátor IT si vyžádal zprávu o chybě, aby mohl problém odstranit. Aplikace a data mohou být sdílena."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Zařízení se může dočasně zpomalit"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"PŘIJMOUT"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ODMÍTNOUT"</string> <string name="select_input_method" msgid="8547250819326693584">"Změna klávesnice"</string> @@ -1581,8 +1575,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> položek</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> položka</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Různé"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Důležitost oznámení určujete vy."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Důležitost oznámení určujete vy."</string> <string name="importance_from_person" msgid="9160133597262938296">"Tato zpráva je důležitá kvůli lidem zapojeným do konverzace."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Povolit aplikaci <xliff:g id="APP">%1$s</xliff:g> vytvořit nového uživatele s účtem <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Povolit aplikaci <xliff:g id="APP">%1$s</xliff:g> vytvořit nového uživatele s účtem <xliff:g id="ACCOUNT">%2$s</xliff:g>? (Uživatel s tímto účtem již existuje.)"</string> @@ -1609,4 +1602,6 @@ <string name="pin_target" msgid="3052256031352291362">"Připnout"</string> <string name="unpin_target" msgid="3556545602439143442">"Odepnout"</string> <string name="app_info" msgid="6856026610594615344">"Informace o aplikaci"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml index 6c36d86fe451..8b894781a4c1 100644 --- a/core/res/res/values-da/strings.xml +++ b/core/res/res/values-da/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Standarder for opkalds-id til ikke begrænset. Næste opkald: Ikke begrænset"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Tjenesten leveres ikke!"</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Du kan ikke ændre indstillingen for opkalds-id\'et."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Begrænset adgang ændret"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Datatjenesten er blokeret."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Nødtjenesten er blokeret."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Stemmetjenesten er blokeret."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Nulstil og genstart appen"</string> <string name="aerr_report" msgid="5371800241488400617">"Send feedback"</string> <string name="aerr_close" msgid="2991640326563991340">"Luk"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Ignorer"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Ignorer, indtil enheden genstarter"</string> <string name="aerr_wait" msgid="3199956902437040261">"Vent"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Luk app"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Tryk for at se flere muligheder."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-fejlretning er tilsluttet"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Tryk for at deaktivere USB-fejlretning."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Vil du dele fejlrapporten?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Deler fejlrapport…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Din it-administrator har anmodet om en fejlrapport for bedre at kunne finde og rette fejlen på enheden. Apps og data deles muligvis, og din enhed kan midlertidigt blive langsommere."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Din it-administrator har anmodet om en fejlrapport for bedre at kunne finde og rette fejlen på enheden. Apps og data deles muligvis."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Dette kan midlertidigt gøre enheden langsommere"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ACCEPTÉR"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"AFVIS"</string> <string name="select_input_method" msgid="8547250819326693584">"Skift tastatur"</string> @@ -1543,8 +1537,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g>valgt</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> valgt</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Diverse"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Du angiver, hvor vigtige disse underretninger er."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Du angiver, hvor vigtige disse underretninger er."</string> <string name="importance_from_person" msgid="9160133597262938296">"Dette er vigtigt på grund af de personer, det handler om."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Vil du give <xliff:g id="APP">%1$s</xliff:g> tilladelse til at oprette en ny bruger med <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Vil du give <xliff:g id="APP">%1$s</xliff:g> tilladelse til at oprette en ny bruger med <xliff:g id="ACCOUNT">%2$s</xliff:g> (der findes allerede en bruger med denne konto)?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"Fastgør"</string> <string name="unpin_target" msgid="3556545602439143442">"Frigør"</string> <string name="app_info" msgid="6856026610594615344">"Oplysninger om appen"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml index b68c7a1c85ad..d3a2959a7680 100644 --- a/core/res/res/values-de/strings.xml +++ b/core/res/res/values-de/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Anrufer-ID ist standardmäßig nicht beschränkt. Nächster Anruf: Nicht beschränkt"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Dienst nicht eingerichtet."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Du kannst die Einstellung für die Anrufer-ID nicht ändern."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Eingeschränkter Zugriff geändert"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Daten-Dienst ist gesperrt."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Notruf ist gesperrt."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Sprachdienst ist gesperrt."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"App zurücksetzen und neu starten"</string> <string name="aerr_report" msgid="5371800241488400617">"Feedback geben"</string> <string name="aerr_close" msgid="2991640326563991340">"Schließen"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Ignorieren"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Bis zum Neustart des Geräts ausblenden"</string> <string name="aerr_wait" msgid="3199956902437040261">"Warten"</string> <string name="aerr_close_app" msgid="3269334853724920302">"App schließen"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Für weitere Optionen tippen"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-Debugging"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Zum Deaktivieren berühren"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Fehlerbericht teilen?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Fehlerbericht wird geteilt…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Dein IT-Administrator hat einen Fehlerbericht zur Fehlerbehebung dieses Geräts angefordert. Apps und Daten werden unter Umständen geteilt und dein Gerät wird möglicherweise vorübergehend langsamer."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Dein IT-Administrator hat einen Fehlerbericht zur Fehlerbehebung dieses Geräts angefordert. Apps und Daten werden unter Umständen geteilt."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Dadurch wird dein Gerät möglicherweise vorübergehend langsamer"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"AKZEPTIEREN"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ABLEHNEN"</string> <string name="select_input_method" msgid="8547250819326693584">"Tastatur ändern"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ausgewählt</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ausgewählt</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Sonstige"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Du legst die Wichtigkeit dieser Benachrichtigungen fest."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Du hast die Wichtigkeit dieser Benachrichtigungen festgelegt."</string> <string name="importance_from_person" msgid="9160133597262938296">"Diese Benachrichtigung ist aufgrund der beteiligten Personen wichtig."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Möchtest du zulassen, dass <xliff:g id="APP">%1$s</xliff:g> einen neuen Nutzer mit <xliff:g id="ACCOUNT">%2$s</xliff:g> erstellt?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Möchtest du zulassen, dass <xliff:g id="APP">%1$s</xliff:g> einen neuen Nutzer mit <xliff:g id="ACCOUNT">%2$s</xliff:g> erstellt? Dieses Konto wird jedoch bereits von einem anderen Nutzer verwendet."</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Markieren"</string> <string name="unpin_target" msgid="3556545602439143442">"Markierung entfernen"</string> <string name="app_info" msgid="6856026610594615344">"App-Informationen"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml index 63d49b184eb3..eb6de52343b3 100644 --- a/core/res/res/values-el/strings.xml +++ b/core/res/res/values-el/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Η αναγνώριση κλήσης βρίσκεται από προεπιλογή στην \"μη περιορισμένη\". Επόμενη κλήση: Μη περιορισμένη"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Η υπηρεσία δεν προβλέπεται."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Δεν μπορείτε να αλλάξετε τη ρύθμιση του αναγνωριστικού καλούντος."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Η περιορισμένη πρόσβαση άλλαξε"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Η υπηρεσία δεδομένων είναι αποκλεισμένη."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Η υπηρεσία έκτακτης ανάγκης είναι αποκλεισμένη."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Η υπηρεσία φωνής έχει αποκλειστεί."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Επαναφορά και επανεκκίνηση εφαρμογής"</string> <string name="aerr_report" msgid="5371800241488400617">"Αποστολή σχολίων"</string> <string name="aerr_close" msgid="2991640326563991340">"Κλείσιμο"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Σίγαση"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Σίγαση μέχρι την επανεκκίνηση της συσκευής"</string> <string name="aerr_wait" msgid="3199956902437040261">"Αναμονή"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Κλείσιμο εφαρμογής"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Αγγίξτε για περισσότερες επιλογές."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Συνδέθηκε ο εντοπισμός σφαλμάτων USB"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Απεν. του εντοπ. σφαλμάτων USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Κοινή χρήση αναφοράς σφάλματος;"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Κοινή χρήση αναφοράς σφάλματος…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Ο διαχειριστής σας IT ζήτησε μια αναφορά σφάλματος για να συμβάλει στην αντιμετώπιση του προβλήματος αυτής της συσκευής. Ενδέχεται να γίνει κοινή χρήση των εφαρμογών και να επιβραδυνθεί προσωρινά τη λειτουργία της συσκευής σας."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Ο διαχειριστής σας IT ζήτησε μια αναφορά σφάλματος για να συμβάλει στην αντιμετώπιση του προβλήματος αυτής της συσκευής. Ενδέχεται να γίνει κοινή χρήση των εφαρμογών και των δεδομένων."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Αυτή η διαδικασία ενδέχεται να επιβραδύνει προσωρινά τη λειτουργία της συσκευής σας"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ΑΠΟΔΟΧΗ"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ΑΠΟΡΡΙΨΗ"</string> <string name="select_input_method" msgid="8547250819326693584">"Αλλαγή πληκτρολογίου"</string> @@ -1543,8 +1537,7 @@ <item quantity="other">Επιλέχτηκαν <xliff:g id="COUNT_1">%1$d</xliff:g></item> <item quantity="one">Επιλέχτηκε <xliff:g id="COUNT_0">%1$d</xliff:g></item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Διάφορα"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Μπορείτε να ρυθμίσετε τη βαρύτητα αυτών των ειδοποιήσεων."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Μπορείτε να ρυθμίσετε τη βαρύτητα αυτών των ειδοποιήσεων."</string> <string name="importance_from_person" msgid="9160133597262938296">"Αυτό είναι σημαντικό λόγω των ατόμων που συμμετέχουν."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Να επιτραπεί στην εφαρμογή <xliff:g id="APP">%1$s</xliff:g> να δημιουργήσει έναν νέο χρήστη με το λογαριασμό <xliff:g id="ACCOUNT">%2$s</xliff:g>;"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Να επιτραπεί στην εφαρμογή <xliff:g id="APP">%1$s</xliff:g> να δημιουργήσει έναν νέο χρήστη με το λογαριασμό <xliff:g id="ACCOUNT">%2$s</xliff:g> (υπάρχει ήδη χρήστης με αυτόν το λογαριασμό);"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Καρφίτσωμα"</string> <string name="unpin_target" msgid="3556545602439143442">"Ξεκαρφίτσωμα"</string> <string name="app_info" msgid="6856026610594615344">"Πληροφορίες εφαρμογής"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml index 7a709b678238..bcdad3b77028 100644 --- a/core/res/res/values-en-rAU/strings.xml +++ b/core/res/res/values-en-rAU/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Caller ID defaults to not restricted. Next call: Not restricted"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Service not provisioned."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"You can\'t change the caller ID setting."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Restricted access changed"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Data service is blocked."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Emergency service is blocked."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Voice service is blocked."</string> @@ -915,9 +914,9 @@ <string name="aerr_process_repeated" msgid="6235302956890402259">"<xliff:g id="PROCESS">%1$s</xliff:g> keeps stopping"</string> <string name="aerr_restart" msgid="9001379185665886595">"Restart app"</string> <string name="aerr_reset" msgid="7645427603514220451">"Reset and restart app"</string> - <string name="aerr_report" msgid="5371800241488400617">"Sending feedback"</string> + <string name="aerr_report" msgid="5371800241488400617">"Send feedback"</string> <string name="aerr_close" msgid="2991640326563991340">"Close"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Mute"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Mute until device restarts"</string> <string name="aerr_wait" msgid="3199956902437040261">"Wait"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Close app"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Touch for more options."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB debugging connected"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Touch to disable USB debugging."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Share bug report?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Sharing bug report…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Your IT admin requested a bug report to help troubleshoot this device. Apps and data may be shared and your device may temporarily slow down."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Your IT admin requested a bug report to help troubleshoot this device. Apps and data may be shared."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"This may temporarily slow down your device"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ACCEPT"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"DECLINE"</string> <string name="select_input_method" msgid="8547250819326693584">"Change keyboard"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> selected</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> selected</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Miscellaneous"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"You set the importance of these notifications."</string> + <string name="importance_from_user" msgid="7318955817386549931">"You set the importance of these notifications."</string> <string name="importance_from_person" msgid="9160133597262938296">"This is important because of the people involved."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Allow <xliff:g id="APP">%1$s</xliff:g> to create a new User with <xliff:g id="ACCOUNT">%2$s</xliff:g> ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Allow <xliff:g id="APP">%1$s</xliff:g> to create a new User with <xliff:g id="ACCOUNT">%2$s</xliff:g> (a User with this account already exists) ?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"Pin"</string> <string name="unpin_target" msgid="3556545602439143442">"Unpin"</string> <string name="app_info" msgid="6856026610594615344">"App info"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml index 7a709b678238..bcdad3b77028 100644 --- a/core/res/res/values-en-rGB/strings.xml +++ b/core/res/res/values-en-rGB/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Caller ID defaults to not restricted. Next call: Not restricted"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Service not provisioned."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"You can\'t change the caller ID setting."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Restricted access changed"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Data service is blocked."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Emergency service is blocked."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Voice service is blocked."</string> @@ -915,9 +914,9 @@ <string name="aerr_process_repeated" msgid="6235302956890402259">"<xliff:g id="PROCESS">%1$s</xliff:g> keeps stopping"</string> <string name="aerr_restart" msgid="9001379185665886595">"Restart app"</string> <string name="aerr_reset" msgid="7645427603514220451">"Reset and restart app"</string> - <string name="aerr_report" msgid="5371800241488400617">"Sending feedback"</string> + <string name="aerr_report" msgid="5371800241488400617">"Send feedback"</string> <string name="aerr_close" msgid="2991640326563991340">"Close"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Mute"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Mute until device restarts"</string> <string name="aerr_wait" msgid="3199956902437040261">"Wait"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Close app"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Touch for more options."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB debugging connected"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Touch to disable USB debugging."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Share bug report?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Sharing bug report…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Your IT admin requested a bug report to help troubleshoot this device. Apps and data may be shared and your device may temporarily slow down."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Your IT admin requested a bug report to help troubleshoot this device. Apps and data may be shared."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"This may temporarily slow down your device"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ACCEPT"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"DECLINE"</string> <string name="select_input_method" msgid="8547250819326693584">"Change keyboard"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> selected</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> selected</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Miscellaneous"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"You set the importance of these notifications."</string> + <string name="importance_from_user" msgid="7318955817386549931">"You set the importance of these notifications."</string> <string name="importance_from_person" msgid="9160133597262938296">"This is important because of the people involved."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Allow <xliff:g id="APP">%1$s</xliff:g> to create a new User with <xliff:g id="ACCOUNT">%2$s</xliff:g> ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Allow <xliff:g id="APP">%1$s</xliff:g> to create a new User with <xliff:g id="ACCOUNT">%2$s</xliff:g> (a User with this account already exists) ?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"Pin"</string> <string name="unpin_target" msgid="3556545602439143442">"Unpin"</string> <string name="app_info" msgid="6856026610594615344">"App info"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml index 7a709b678238..bcdad3b77028 100644 --- a/core/res/res/values-en-rIN/strings.xml +++ b/core/res/res/values-en-rIN/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Caller ID defaults to not restricted. Next call: Not restricted"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Service not provisioned."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"You can\'t change the caller ID setting."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Restricted access changed"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Data service is blocked."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Emergency service is blocked."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Voice service is blocked."</string> @@ -915,9 +914,9 @@ <string name="aerr_process_repeated" msgid="6235302956890402259">"<xliff:g id="PROCESS">%1$s</xliff:g> keeps stopping"</string> <string name="aerr_restart" msgid="9001379185665886595">"Restart app"</string> <string name="aerr_reset" msgid="7645427603514220451">"Reset and restart app"</string> - <string name="aerr_report" msgid="5371800241488400617">"Sending feedback"</string> + <string name="aerr_report" msgid="5371800241488400617">"Send feedback"</string> <string name="aerr_close" msgid="2991640326563991340">"Close"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Mute"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Mute until device restarts"</string> <string name="aerr_wait" msgid="3199956902437040261">"Wait"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Close app"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Touch for more options."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB debugging connected"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Touch to disable USB debugging."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Share bug report?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Sharing bug report…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Your IT admin requested a bug report to help troubleshoot this device. Apps and data may be shared and your device may temporarily slow down."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Your IT admin requested a bug report to help troubleshoot this device. Apps and data may be shared."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"This may temporarily slow down your device"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ACCEPT"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"DECLINE"</string> <string name="select_input_method" msgid="8547250819326693584">"Change keyboard"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> selected</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> selected</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Miscellaneous"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"You set the importance of these notifications."</string> + <string name="importance_from_user" msgid="7318955817386549931">"You set the importance of these notifications."</string> <string name="importance_from_person" msgid="9160133597262938296">"This is important because of the people involved."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Allow <xliff:g id="APP">%1$s</xliff:g> to create a new User with <xliff:g id="ACCOUNT">%2$s</xliff:g> ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Allow <xliff:g id="APP">%1$s</xliff:g> to create a new User with <xliff:g id="ACCOUNT">%2$s</xliff:g> (a User with this account already exists) ?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"Pin"</string> <string name="unpin_target" msgid="3556545602439143442">"Unpin"</string> <string name="app_info" msgid="6856026610594615344">"App info"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml index 465eceb16ef9..0ea627dd9be7 100644 --- a/core/res/res/values-es-rUS/strings.xml +++ b/core/res/res/values-es-rUS/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"El Identificador de llamadas está predeterminado en no restringido. Llamada siguiente: no restringido"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Servicio no suministrado."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"No puedes cambiar la configuración del identificador de llamadas."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Se ha cambiado el acceso restringido"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"El servicio de datos está bloqueado."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"El servicio de emergencias está bloqueado."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"El servicio de voz está bloqueado."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Restablecer y reiniciar la app"</string> <string name="aerr_report" msgid="5371800241488400617">"Enviar comentarios"</string> <string name="aerr_close" msgid="2991640326563991340">"Cerrar"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Silenciar"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Silenciar hasta que se reinicie el dispositivo"</string> <string name="aerr_wait" msgid="3199956902437040261">"Esperar"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Cerrar app"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -971,8 +970,8 @@ <string name="volume_icon_description_incall" msgid="8890073218154543397">"Volumen de la llamada"</string> <string name="volume_icon_description_media" msgid="4217311719665194215">"Volumen de los medios"</string> <string name="volume_icon_description_notification" msgid="7044986546477282274">"Volumen de notificación"</string> - <string name="ringtone_default" msgid="3789758980357696936">"Tono de llamada predeterminado"</string> - <string name="ringtone_default_with_actual" msgid="8129563480895990372">"Tono de llamada predeterminado (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string> + <string name="ringtone_default" msgid="3789758980357696936">"Tono predeterminado"</string> + <string name="ringtone_default_with_actual" msgid="8129563480895990372">"Tono predeterminado (<xliff:g id="ACTUAL_RINGTONE">%1$s</xliff:g>)"</string> <string name="ringtone_silent" msgid="7937634392408977062">"Ninguno"</string> <string name="ringtone_picker_title" msgid="3515143939175119094">"Tonos de llamada"</string> <string name="ringtone_unknown" msgid="5477919988701784788">"Tono de llamada desconocido"</string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Toca para ver más opciones."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Depuración por USB conectada"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Toca para desactivar la depuración por USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"¿Compartir informe de errores?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Compartiendo informe de errores…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"El administrador de TI solicitó un informe de errores para ayudar a solucionar los problemas de este dispositivo. Es posible que se compartan apps y datos, y que el dispositivo se ralentice temporalmente."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"El administrador de TI solicitó un informe de errores para ayudar a solucionar los problemas de este dispositivo. Es posible que se compartan apps y datos."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Es posible que tu dispositivo se ralentice temporalmente"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ACEPTAR"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"RECHAZAR"</string> <string name="select_input_method" msgid="8547250819326693584">"Cambiar el teclado"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> elementos seleccionados</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> elemento seleccionado</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Varios"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Estableciste la importancia de estas notificaciones."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Estableciste la importancia de estas notificaciones."</string> <string name="importance_from_person" msgid="9160133597262938296">"Es importante debido a las personas involucradas."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"¿Quieres permitir que <xliff:g id="APP">%1$s</xliff:g> cree un usuario nuevo con <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"¿Quieres permitir que <xliff:g id="APP">%1$s</xliff:g> cree un usuario nuevo con <xliff:g id="ACCOUNT">%2$s</xliff:g>? (Ya existe un usuario con esta cuenta)"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Fijar"</string> <string name="unpin_target" msgid="3556545602439143442">"No fijar"</string> <string name="app_info" msgid="6856026610594615344">"Información de la app"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml index 2a0e00002b37..cf4c4abd852e 100644 --- a/core/res/res/values-es/strings.xml +++ b/core/res/res/values-es/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"El ID de emisor presenta el valor predeterminado de no restringido. Siguiente llamada: No restringido"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"El servicio no se suministra."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"No puedes modificar el ID de emisor."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"El acceso restringido se ha modificado."</string> <string name="RestrictedOnData" msgid="8653794784690065540">"El servicio de datos está bloqueado."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"El servicio de emergencia está bloqueado."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"El servicio de voz está bloqueado."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Restablecer y reiniciar aplicación"</string> <string name="aerr_report" msgid="5371800241488400617">"Enviar sugerencias"</string> <string name="aerr_close" msgid="2991640326563991340">"Cerrar"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Silenciar"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Silenciar hasta que se reinicie el dispositivo"</string> <string name="aerr_wait" msgid="3199956902437040261">"Esperar"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Cerrar aplicación"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Toca para obtener más opciones"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Depuración USB habilitada"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Toca aquí para inhabilitarla"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"¿Compartir informe de errores?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Compartiendo informe de errores…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Tu administrador de TI ha solicitado un informe de errores para solucionar problemas de este dispositivo. Es posible que se compartan las aplicaciones y los datos. Puede que el dispositivo funcione más lento de forma temporal."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Tu administrador de TI ha solicitado un informe de errores para solucionar problemas de este dispositivo. Es posible que se compartan las aplicaciones y los datos."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Puede que el dispositivo funcione más lento de forma temporal"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ACEPTAR"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"RECHAZAR"</string> <string name="select_input_method" msgid="8547250819326693584">"Cambiar teclado"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> seleccionados</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> seleccionado</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Varios"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Tú determinas la importancia de estas notificaciones."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Tú determinas la importancia de estas notificaciones."</string> <string name="importance_from_person" msgid="9160133597262938296">"Esto es importante por los usuarios implicados."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"¿Permitir que <xliff:g id="APP">%1$s</xliff:g> cree un usuario con la cuenta <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"¿Permitir que <xliff:g id="APP">%1$s</xliff:g> cree un usuario con la cuenta <xliff:g id="ACCOUNT">%2$s</xliff:g> (ya existe un usuario con esta cuenta)?"</string> @@ -1575,4 +1568,6 @@ <string name="pin_target" msgid="3052256031352291362">"Fijar"</string> <string name="unpin_target" msgid="3556545602439143442">"No fijar"</string> <string name="app_info" msgid="6856026610594615344">"Información de la aplicación"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-et-rEE/strings.xml b/core/res/res/values-et-rEE/strings.xml index 15ba40483490..9d879e1f2ca3 100644 --- a/core/res/res/values-et-rEE/strings.xml +++ b/core/res/res/values-et-rEE/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Helistaja ID pole vaikimisi piiratud. Järgmine kõne: pole piiratud"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Teenus pole ette valmistatud."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Helistaja ID seadet ei saa muuta."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Piiratud juurdepääs muutunud"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Andmesideteenus on blokeeritud."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Hädaabiteenus on blokeeritud."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Häälteenus on blokeeritud."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Lähtesta ja taaskäivita rakendus"</string> <string name="aerr_report" msgid="5371800241488400617">"Saada tagasiside"</string> <string name="aerr_close" msgid="2991640326563991340">"Sule"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Vaigista"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Vaigista, kuni seade taaskäivitatakse"</string> <string name="aerr_wait" msgid="3199956902437040261">"Oota"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Sule rakendus"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Puudutage rohkemate valikute kuvamiseks."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-silumine ühendatud"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Puudutage USB-silumise keelamiseks."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Kas jagada veaaruannet?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Veaaruande jagamine …"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"IT-administraator taotles veaaruannet, mis aitaks seadmes vigu otsida. Rakendusi ja andmeid võidakse jagada ja see võib ajutiselt teie seadet aeglustada."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"IT-administraator taotles veaaruannet, mis aitaks seadmes vigu otsida. Rakendusi ja andmeid võidakse jagada."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"See võib ajutiselt teie seadet aeglustada"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"NÕUSTU"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"KEELDU"</string> <string name="select_input_method" msgid="8547250819326693584">"Klaviatuuri muutmine"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> on valitud</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> on valitud</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Mitmesugust"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Teie määrasite nende märguannete tähtsuse."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Teie määrasite nende märguannete tähtsuse."</string> <string name="importance_from_person" msgid="9160133597262938296">"See on tähtis osalevate inimeste tõttu."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Kas lubada rakendusel <xliff:g id="APP">%1$s</xliff:g> luua uus kasutaja kontoga <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Kas lubada rakendusel <xliff:g id="APP">%1$s</xliff:g> luua uus kasutaja kontoga <xliff:g id="ACCOUNT">%2$s</xliff:g> (selle kontoga kasutaja on juba olemas)?"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Kinnita"</string> <string name="unpin_target" msgid="3556545602439143442">"Vabasta"</string> <string name="app_info" msgid="6856026610594615344">"Rakenduse teave"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-eu-rES/strings.xml b/core/res/res/values-eu-rES/strings.xml index b8fa9623632c..f43cd8c3f4b1 100644 --- a/core/res/res/values-eu-rES/strings.xml +++ b/core/res/res/values-eu-rES/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Deien identifikazio-zerbitzuaren balio lehenetsiak ez du murriztapenik ezartzen. Hurrengo deia: murriztapenik gabe"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Zerbitzua ez da hornitu."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Ezin duzu deien identifikazio-zerbitzuaren ezarpena aldatu."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Sarbide murriztua aldatu da"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Datu-zerbitzua blokeatuta dago."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Larrialdi-zerbitzua blokeatuta dago."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Ahots-zerbitzua blokeatuta dago."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Berrezarri eta berrabiarazi aplikazioa"</string> <string name="aerr_report" msgid="5371800241488400617">"Bidali iritzia"</string> <string name="aerr_close" msgid="2991640326563991340">"Itxi"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Ezkutatu"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Ezkutatu gailua berrabiarazi arte"</string> <string name="aerr_wait" msgid="3199956902437040261">"Itxaron"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Itxi aplikazioa"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Ukitu aukera gehiago ikusteko."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB arazketa konektatuta"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB arazketa desgaitzeko, ukitu hau."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Akatsen txostena partekatu nahi duzu?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Akatsen txostena partekatzen…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"IKT administratzaileak akatsen txostena eskatu du gailuko arazoa konpontzen laguntzeko. Baliteke aplikazioak eta datuak partekatzea, eta agian motelago ibiliko da gailua aldi batez."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"IKT administratzaileak akatsen txostena eskatu du gailuko arazoa konpontzeko. Baliteke aplikazioak eta datuak partekatzea."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Agian motelago ibiliko da gailua aldi batez"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ONARTU"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"BAZTERTU"</string> <string name="select_input_method" msgid="8547250819326693584">"Aldatu teklatua"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> hautatuta</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> hautatuta</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Askotarikoak"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Zuk ezarri zenuen jakinarazpen hauen garrantzia."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Zuk ezarri zenuen jakinarazpen hauen garrantzia."</string> <string name="importance_from_person" msgid="9160133597262938296">"Garrantzitsua da eragiten dien pertsonengatik."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g> aplikazioari <xliff:g id="ACCOUNT">%2$s</xliff:g> kontua duen erabiltzailea sortzea baimendu nahi diozu?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="APP">%1$s</xliff:g> aplikazioari <xliff:g id="ACCOUNT">%2$s</xliff:g> kontua duen erabiltzailea sortzea baimendu nahi diozu? (Badago kontu hori duen erabiltzaile bat)"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"Ainguratu"</string> <string name="unpin_target" msgid="3556545602439143442">"Kendu aingura"</string> <string name="app_info" msgid="6856026610594615344">"Aplikazioari buruzko informazioa"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml index 02eafe935dd1..3237fec0964c 100644 --- a/core/res/res/values-fa/strings.xml +++ b/core/res/res/values-fa/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"پیشفرض شناسه تماس گیرنده روی غیر محدود است. تماس بعدی: بدون محدودیت"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"سرویس دارای مجوز نیست."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"شما میتوانید تنظیم شناسه تماس گیرنده را تغییر دهید."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"دسترسی محدود تغییر یافت"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"سرویس داده مسدود است."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"سرویس اضطراری مسدود است."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"سرویس صوتی مسدود شده است."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"بازنشانی و راهاندازی مجدد برنامه"</string> <string name="aerr_report" msgid="5371800241488400617">"ارسال بازخورد"</string> <string name="aerr_close" msgid="2991640326563991340">"بستن"</string> - <string name="aerr_mute" msgid="7698966346654789433">"بیصدا کردن"</string> + <string name="aerr_mute" msgid="1974781923723235953">"صامت کردن تا وقتی دستگاه راهاندازی مجدد شود"</string> <string name="aerr_wait" msgid="3199956902437040261">"انتظار"</string> <string name="aerr_close_app" msgid="3269334853724920302">"بستن برنامه"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"برای گزینههای بیشتر لمس کنید."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"اشکالزدایی USB متصل شد"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"غیرفعالکردن اشکالزداییUSB: با لمس آن."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"گزارش اشکال به اشتراک گذاشته شود؟"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"درحال اشتراکگذاری گزارش اشکال…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"سرپرست فناوری اطلاعات شما برای کمک به عیبیابی این دستگاه، درخواست گزارش اشکال کرده است. ممکن است برنامهها و دادهها به اشتراک گذاشته شوند و سرعت دستگاهتان بهطور موقت کاهش یابد."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"سرپرست فناوری اطلاعات شما برای کمک به عیبیابی این دستگاه، گزارش اشکال درخواست کرده است. ممکن است برنامهها و دادهها به اشتراک گذاشته شوند."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"ممکن است سرعت دستگاهتان بهطور موقت کاهش یابد"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"پذیرفتن"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"نپذیرفتن"</string> <string name="select_input_method" msgid="8547250819326693584">"تغییر صفحهکلید"</string> @@ -1543,8 +1537,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> انتخاب شد</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> انتخاب شد</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"متفرقه"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"شما اهمیت این اعلانها را تنظیم میکنید."</string> + <string name="importance_from_user" msgid="7318955817386549931">"شما اهمیت این اعلانها را تنظیم میکنید."</string> <string name="importance_from_person" msgid="9160133597262938296">"به دلیل افراد درگیر مهم است."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"به <xliff:g id="APP">%1$s</xliff:g> امکان داده شود کاربر جدیدی با <xliff:g id="ACCOUNT">%2$s</xliff:g> اضافه کند؟"</string> <string name="user_creation_adding" msgid="4482658054622099197">"به <xliff:g id="APP">%1$s</xliff:g> امکان داده شود کاربر جدیدی با <xliff:g id="ACCOUNT">%2$s</xliff:g> ایجاد کند (کاربری با این حساب از قبل وجود دارد)؟"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"پین کردن"</string> <string name="unpin_target" msgid="3556545602439143442">"برداشتن پین"</string> <string name="app_info" msgid="6856026610594615344">"اطلاعات برنامه"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml index 812565a2d1e6..d37d1022c359 100644 --- a/core/res/res/values-fi/strings.xml +++ b/core/res/res/values-fi/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Soittajan tunnukseksi muutetaan rajoittamaton. Seuraava puhelu: ei rajoitettu"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Palvelua ei tarjota."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Et voi muuttaa soittajan tunnuksen asetusta."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Rajoitettua oikeutta muutettu"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Tiedonsiirtopalvelu on estetty."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Hätäpalvelu on estetty."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Äänipalvelu on estetty."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Nollaa sovellus ja käynnistä uudelleen"</string> <string name="aerr_report" msgid="5371800241488400617">"Lähetä palautetta"</string> <string name="aerr_close" msgid="2991640326563991340">"Sulje"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Ohita"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Mykistä laitteen uudelleenkäynnistykseen asti"</string> <string name="aerr_wait" msgid="3199956902437040261">"Odota"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Sulje sovellus"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Lisää vaihtoehtoja koskettamalla"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-vianetsintä yhdistetty"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Sulje USB-vianetsintä koskettamalla."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Jaetaanko virheraportti?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Jaetaan virheraporttia…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Järjestelmänvalvoja pyysi virheraporttia voidakseen auttaa laitteen vianetsinnässä. Sovelluksia ja tietoja voidaan jakaa, ja laitteen toiminta voi hidastua väliaikaisesti."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Järjestelmänvalvoja pyysi virheraporttia voidakseen auttaa laitteen vianetsinnässä. Sovelluksia ja tietoja voidaan jakaa."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Tämä voi hidastaa laitteen toimintaa väliaikaisesti."</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"HYVÄKSY"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"HYLKÄÄ"</string> <string name="select_input_method" msgid="8547250819326693584">"Vaihda näppäimistö"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> valittu</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> valittu</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Muut"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Voit valita näiden ilmoitusten tärkeyden."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Voit valita näiden ilmoitusten tärkeyden."</string> <string name="importance_from_person" msgid="9160133597262938296">"Tämä on tärkeää siihen liittyvien ihmisten perusteella."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Myönnetäänkö sovellukselle <xliff:g id="APP">%1$s</xliff:g> oikeus luoda käyttäjä tilille <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Myönnetäänkö sovellukselle <xliff:g id="APP">%1$s</xliff:g> oikeus luoda käyttäjä tilille <xliff:g id="ACCOUNT">%2$s</xliff:g> (tilillä on jo käyttäjä)?"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Kiinnitä"</string> <string name="unpin_target" msgid="3556545602439143442">"Irrota"</string> <string name="app_info" msgid="6856026610594615344">"Sovelluksen tiedot"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml index d6c933f013e8..bb48fb1af331 100644 --- a/core/res/res/values-fr-rCA/strings.xml +++ b/core/res/res/values-fr-rCA/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Par défaut, les numéros des appelants ne sont pas restreints. Appel suivant : non restreint"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Ce service n\'est pas pris en charge."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Impossible de modifier le paramètre relatif au numéro de l\'appelant."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"L\'accès limité a été modifié."</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Le service de données est bloqué."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Le service d\'appel d\'urgence est bloqué."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Le service vocal est bloqué."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Réinitialiser et redémarrer l\'application"</string> <string name="aerr_report" msgid="5371800241488400617">"Envoyer des commentaires"</string> <string name="aerr_close" msgid="2991640326563991340">"Fermer"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Désactiver les notifications"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Désactiver jusqu\'au redémarrage de l\'appareil"</string> <string name="aerr_wait" msgid="3199956902437040261">"Attendre"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Fermer l\'application"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Touchez pour afficher plus d\'options."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Débogage USB connecté"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Appuyez pour désactiver le débogage USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Partager le rapport de bogue?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Partage du rapport de bogue en cours..."</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Votre administrateur informatique a demandé un rapport de bogue pour l\'aider à dépanner cet appareil. Les applications et les données peuvent être partagées. Cela pourrait temporairement ralentir votre appareil."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Votre administrateur informatique a demandé un rapport de bogue pour l\'aider à dépanner cet appareil. Les applications et les données peuvent être partagées."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Cela pourrait temporairement ralentir votre appareil."</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ACCEPTER"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"REFUSER"</string> <string name="select_input_method" msgid="8547250819326693584">"Changer de clavier"</string> @@ -1543,8 +1537,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> élément sélectionné</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> éléments sélectionnés</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Divers"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Vous définissez l\'importance de ces notifications."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Vous définissez l\'importance de ces notifications."</string> <string name="importance_from_person" msgid="9160133597262938296">"Ces notifications sont importantes en raison des participants."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Autoriser <xliff:g id="APP">%1$s</xliff:g> à créer un profil d\'utilisateur avec le compte <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Autoriser <xliff:g id="APP">%1$s</xliff:g> à créer un profil d\'utilisateur avec le compte <xliff:g id="ACCOUNT">%2$s</xliff:g>? (Un utilisateur associé à ce compte existe déjà.)"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Épingler"</string> <string name="unpin_target" msgid="3556545602439143442">"Annuler l\'épinglage"</string> <string name="app_info" msgid="6856026610594615344">"Détails de l\'application"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml index 897a2894e9ed..fc58839d006b 100644 --- a/core/res/res/values-fr/strings.xml +++ b/core/res/res/values-fr/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Par défaut, les numéros des appelants ne sont pas restreints. Appel suivant : non restreint"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Ce service n\'est pas pris en charge."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Impossible de modifier le paramètre relatif au numéro de l\'appelant."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"L\'accès limité a été modifié."</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Le service de données est bloqué."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Le service d\'appel d\'urgence est bloqué."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Le service vocal est bloqué."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Réinitialiser et redémarrer l\'application"</string> <string name="aerr_report" msgid="5371800241488400617">"Envoyer des commentaires"</string> <string name="aerr_close" msgid="2991640326563991340">"Fermer"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Ignorer"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Ignorer jusqu\'au redémarrage de l\'appareil"</string> <string name="aerr_wait" msgid="3199956902437040261">"Attendre"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Fermer l\'application"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Appuyez pour afficher plus d\'options"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Débogage USB activé"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Appuyez pour désact. débogage USB"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Partager le rapport de bug ?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Partage du rapport de bug…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Votre administrateur informatique a demandé un rapport de bug pour l\'aider à résoudre le problème lié à cet appareil. Il est possible que des applications et des données soient partagées et que votre appareil ralentisse temporairement."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Votre administrateur informatique a demandé un rapport de bug pour l\'aider à résoudre le problème lié à cet appareil. Il est possible que des applications et des données soient partagées."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Ceci risque de ralentir temporairement votre appareil."</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ACCEPTER"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"REFUSER"</string> <string name="select_input_method" msgid="8547250819326693584">"Changer de clavier"</string> @@ -1543,8 +1537,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> élément sélectionné</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> éléments sélectionnés</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Divers"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Vous définissez l\'importance de ces notifications."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Vous définissez l\'importance de ces notifications."</string> <string name="importance_from_person" msgid="9160133597262938296">"Ces notifications sont importantes en raison des participants."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Autoriser <xliff:g id="APP">%1$s</xliff:g> à créer un profil utilisateur avec le compte <xliff:g id="ACCOUNT">%2$s</xliff:g> ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Autoriser <xliff:g id="APP">%1$s</xliff:g> à créer un profil utilisateur avec le compte <xliff:g id="ACCOUNT">%2$s</xliff:g> (un utilisateur associé à ce compte existe déjà) ?"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Épingler"</string> <string name="unpin_target" msgid="3556545602439143442">"Retirer"</string> <string name="app_info" msgid="6856026610594615344">"Infos sur l\'appli"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-gl-rES/strings.xml b/core/res/res/values-gl-rES/strings.xml index 0e54aade9000..a8ebf9e8e3f5 100644 --- a/core/res/res/values-gl-rES/strings.xml +++ b/core/res/res/values-gl-rES/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"De forma predeterminada, non se restrinxe o ID de chamada. Próxima chamada: non restrinxido."</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Servizo non ofrecido."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Non podes cambiar a configuración do ID de chamada."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Modificouse o acceso restrinxido"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"O servizo de datos está bloqueado."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"O servizo de urxencia está bloqueado."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"O servizo de voz está bloqueado."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Restablecer e reiniciar aplicación"</string> <string name="aerr_report" msgid="5371800241488400617">"Dános a túa opinión"</string> <string name="aerr_close" msgid="2991640326563991340">"Pechar"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Ignorar"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Ignorar fallos ata que o dispositivo se reinicie"</string> <string name="aerr_wait" msgid="3199956902437040261">"Esperar"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Pechar aplicación"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Toca para ver máis opcións."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Depuración USB conectada"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Toca aquí para desactivala"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Queres compartir o informe de erros?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Compartindo informe de erros..."</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"O teu administrador de TI solicitou un informe de erros para axudar a solucionar os problemas deste dispositivo. É posible que se compartan aplicacións e datos e que se reduza a velocidade do teu dispositivo temporalmente."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"O teu administrador de TI solicitou un informe de erros para axudar a solucionar os problemas deste dispositivo. É posible que se compartan aplicacións e datos."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Esta acción pode reducir a velocidade do teu dispositivo temporalmente"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ACEPTAR"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ANULAR"</string> <string name="select_input_method" msgid="8547250819326693584">"Cambiar teclado"</string> @@ -1543,8 +1537,7 @@ <item quantity="other">Seleccionáronse <xliff:g id="COUNT_1">%1$d</xliff:g></item> <item quantity="one">Seleccionouse <xliff:g id="COUNT_0">%1$d</xliff:g></item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Varios"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Ti defines a importancia destas notificacións."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Ti defines a importancia destas notificacións."</string> <string name="importance_from_person" msgid="9160133597262938296">"É importante polas persoas involucradas."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Queres permitir que <xliff:g id="APP">%1$s</xliff:g> cree un usuario novo con <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Queres permitir que <xliff:g id="APP">%1$s</xliff:g> cree un usuario novo con <xliff:g id="ACCOUNT">%2$s</xliff:g>? (Xa existe un usuario con esta conta)"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Fixar"</string> <string name="unpin_target" msgid="3556545602439143442">"Soltar"</string> <string name="app_info" msgid="6856026610594615344">"Información da aplicación"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-gu-rIN/strings.xml b/core/res/res/values-gu-rIN/strings.xml index 246f2b4b2519..5ab04472d0b6 100644 --- a/core/res/res/values-gu-rIN/strings.xml +++ b/core/res/res/values-gu-rIN/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"કૉલર ID પ્રતિબંધિત નહીં પર ડિફોલ્ટ છે. આગલો કૉલ: પ્રતિબંધિત નહીં"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"સેવાની જોગવાઈ કરી નથી."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"તમે કૉલર ID સેટિંગ બદલી શકતાં નથી."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"પ્રતિબંધિત ઍક્સેસ બદલાઈ"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"ડેટા સેવા અવરોધિત છે."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"કટોકટીની સેવા અવરોધિત છે."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"વૉઇસ સેવા અવરોધિત છે."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"ફરીથી સેટ કરો અને ઍપ્લિકેશનને ફરીથી પ્રારંભ કરો"</string> <string name="aerr_report" msgid="5371800241488400617">"પ્રતિસાદ મોકલો"</string> <string name="aerr_close" msgid="2991640326563991340">"બંધ કરો"</string> - <string name="aerr_mute" msgid="7698966346654789433">"મ્યૂટ કરો"</string> + <string name="aerr_mute" msgid="1974781923723235953">"ઉપકરણ પુનઃપ્રારંભ ન થાય ત્યાં સુધી મ્યૂટ કરો"</string> <string name="aerr_wait" msgid="3199956902437040261">"રાહ જુઓ"</string> <string name="aerr_close_app" msgid="3269334853724920302">"ઍપ્લિકેશન બંધ કરો"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"વધુ વિકલ્પો માટે ટચ કરો."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ડીબગિંગ કનેક્ટ થયું."</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB ડીબગિંગ અક્ષમ કરવા માટે ટચ કરો."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"બગ રિપોર્ટ શેર કરીએ?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"બગ રિપોર્ટ શેર કરી રહ્યાં છે…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"તમારા IT વ્યવસ્થાપક એ આ ઉપકરણની સમસ્યા નિવારણમાં સહાય માટે બગ રિપોર્ટની વિનંતી કરી છે. ઍપ્લિકેશનો અને ડેટા શેર કરવામાં આવી શકે છે અને તમારા ઉપકરણને અસ્થાયી રૂપે ધીમું કરી શકે છે."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"તમારા IT વ્યવસ્થાપક એ આ ઉપકરણની સમસ્યા નિવારણમાં સહાય માટે બગ રિપોર્ટની વિનંતી કરી છે. ઍપ્લિકેશનો અને ડેટા શેર કરવામાં આવી શકે છે."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"આ અસ્થાયી રૂપે તમારા ઉપકરણને ધીમું કરી શકે છે"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"સ્વીકારો"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"નકારો"</string> <string name="select_input_method" msgid="8547250819326693584">"કીબોર્ડ બદલો"</string> @@ -1543,8 +1537,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> પસંદ કરી</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> પસંદ કરી</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"વિવિધ"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"તમે આ સૂચનાઓનું મહત્વ સેટ કર્યું છે."</string> + <string name="importance_from_user" msgid="7318955817386549931">"તમે આ સૂચનાઓનું મહત્વ સેટ કર્યું છે."</string> <string name="importance_from_person" msgid="9160133597262938296">"શામેલ થયેલ લોકોને કારણે આ મહત્વપૂર્ણ છે."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g> ને <xliff:g id="ACCOUNT">%2$s</xliff:g> સાથે એક નવા વપરાશકર્તાને બનાવવાની મંજૂરી આપીએ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="ACCOUNT">%2$s</xliff:g> સાથે <xliff:g id="APP">%1$s</xliff:g> ને એક નવા વપરાશકર્તાને બનાવવાની મંજૂરી આપીએ (આ એકાઉન્ટ સાથેના એક વપરાશકર્તા પહેલાંથી અસ્તિત્વમાં છે)?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"પિન કરો"</string> <string name="unpin_target" msgid="3556545602439143442">"અનપિન કરો"</string> <string name="app_info" msgid="6856026610594615344">"ઍપ્લિકેશન માહિતી"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml index 5e76c16b78f7..9760462420f3 100644 --- a/core/res/res/values-hi/strings.xml +++ b/core/res/res/values-hi/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"कॉलर ID प्रतिबंधित नहीं पर डिफ़ॉल्ट है. अगली कॉल: प्रतिबंधित नहीं"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"सेवा प्रावधान की हुई नहीं है."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"आप कॉलर आईडी सेटिंग नहीं बदल सकते."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"प्रतिबंधित पहुंच बदली गई"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"डेटा सेवा अवरोधित है."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"आपातकालीन सेवा अवरोधित है."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"ध्वनि सेवा अवरोधित है."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"ऐप रीसेट करें और पुन: प्रारंभ करें"</string> <string name="aerr_report" msgid="5371800241488400617">"फ़ीडबैक भेजें"</string> <string name="aerr_close" msgid="2991640326563991340">"बंद करें"</string> - <string name="aerr_mute" msgid="7698966346654789433">"म्यूट करें"</string> + <string name="aerr_mute" msgid="1974781923723235953">"डिवाइस पुन: प्रारंभ होने तक म्यूट करें"</string> <string name="aerr_wait" msgid="3199956902437040261">"प्रतीक्षा करें"</string> <string name="aerr_close_app" msgid="3269334853724920302">"ऐप बंद करें"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"और विकल्पों के लिए स्पर्श करें."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB डीबग कनेक्ट किया गया"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB डीबग करना अक्षम करने के लिए स्पर्श करें."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"बग रिपोर्ट साझा करें?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"बग रिपोर्ट साझा की जा रही है…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"इस डिवाइस के समस्या निवारण में सहायता हेतु आपके आईटी व्यवस्थापक ने बग रिपोर्ट के लिए अनुरोध किया है. ऐप्स और डेटा को साझा किया जा सकता है और आपके डिवाइस की गति अस्थायी रूप से धीमी हो सकती है."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"आपके आईटी व्यवस्थापक ने इस डिवाइस के समस्या निवारण में सहायता के लिए एक बग रिपोर्ट का अनुरोध किया है. ऐप्स और डेटा साझा किए जा सकते हैं."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"इससे आपका डिवाइस अस्थायी रूप से धीमा हो सकता है"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"स्वीकार करें"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"अस्वीकार करें"</string> <string name="select_input_method" msgid="8547250819326693584">"कीबोर्ड बदलें"</string> @@ -1543,8 +1537,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> चयनित</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> चयनित</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"विविध"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"आपने इन नोटिफिकेशन का महत्व सेट किया है."</string> + <string name="importance_from_user" msgid="7318955817386549931">"आपने इन नोटिफिकेशन का महत्व सेट किया है."</string> <string name="importance_from_person" msgid="9160133597262938296">"यह मौजूद व्यक्तियों के कारण महत्वपूर्ण है."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g> को <xliff:g id="ACCOUNT">%2$s</xliff:g> के द्वारा एक नया उपयोगकर्ता बनाने दें?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="APP">%1$s</xliff:g> को <xliff:g id="ACCOUNT">%2$s</xliff:g> के द्वारा एक नया उपयोगकर्ता बनाने दें (इस खाते वाला एक उपयोगकर्ता पहले से मौजूद है) ?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"पिन करें"</string> <string name="unpin_target" msgid="3556545602439143442">"अनपिन करें"</string> <string name="app_info" msgid="6856026610594615344">"ऐप की जानकारी"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml index 619e9b905806..cb6b377eb807 100644 --- a/core/res/res/values-hr/strings.xml +++ b/core/res/res/values-hr/strings.xml @@ -89,7 +89,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Zadana postavka ID-a pozivatelja nema ograničenje. Sljedeći poziv: Nije ograničen"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Usluga nije rezervirana."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Ne možete promijeniti postavku ID-a pozivatelja."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Promijenjen je ograničeni pristup"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Podatkovna usluga je blokirana."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Hitna usluga je blokirana."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Glasovna usluga je blokirana."</string> @@ -923,7 +922,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Vrati aplikaciju na zadano i pokreni ponovo"</string> <string name="aerr_report" msgid="5371800241488400617">"Pošalji povratne informacije"</string> <string name="aerr_close" msgid="2991640326563991340">"Zatvori"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Zanemari"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Zanemari do ponovnog pokretanja uređaja"</string> <string name="aerr_wait" msgid="3199956902437040261">"Čekaj"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Zatvori aplikaciju"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1061,16 +1060,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Dodirnite za više opcija."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Priključen je alat za uklanjanje pogrešaka USB-om"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Dodirnite da se onemogući otklanjanje pogrešaka USB-om."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Želite li podijeliti izvješće o programskoj pogrešci?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Dijeljenje izvješća o programskoj pogrešci…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"IT administrator zatražio je izvješće o programskoj pogrešci radi lakšeg rješavanja problema na uređaju. Moguće je da će se aplikacije i podaci dijeliti, što bi moglo privremeno usporiti uređaj."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"IT administrator zatražio je izvješće o programskoj pogrešci radi lakšeg rješavanja problema na uređaju. Moguće je da će se aplikacije i podaci dijeliti."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"To bi moglo privremeno usporiti uređaj"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"PRIHVATI"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ODBIJ"</string> <string name="select_input_method" msgid="8547250819326693584">"Promjena tipkovnice"</string> @@ -1562,8 +1556,7 @@ <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> odabrane</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> odabranih</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Razno"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Postavili ste važnost tih obavijesti."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Postavili ste važnost tih obavijesti."</string> <string name="importance_from_person" msgid="9160133597262938296">"Važno je zbog uključenih osoba."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Želite li dopustiti aplikaciji <xliff:g id="APP">%1$s</xliff:g> da izradi novog korisnika s računom <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Želite li dopustiti aplikaciji <xliff:g id="APP">%1$s</xliff:g> da izradi novog korisnika s računom <xliff:g id="ACCOUNT">%2$s</xliff:g> (korisnik s tim računom već postoji)?"</string> @@ -1590,4 +1583,5 @@ <string name="pin_target" msgid="3052256031352291362">"Prikvači"</string> <string name="unpin_target" msgid="3556545602439143442">"Otkvači"</string> <string name="app_info" msgid="6856026610594615344">"Informacije o aplikaciji"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml index be2a3fd9c1d2..ad049aa25e9c 100644 --- a/core/res/res/values-hu/strings.xml +++ b/core/res/res/values-hu/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"A hívóazonosító alapértelmezett értéke nem korlátozott. Következő hívás: nem korlátozott"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"A szolgáltatás nincs biztosítva."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Nem tudja módosítani a hívó fél azonosítója beállítást."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"A korlátozott hozzáférés módosítva"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Az adatszolgáltatás le van tiltva."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"A segélyszolgáltatás le van tiltva."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"A hangszolgáltatás letiltva."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Alkalmazás alaphelyzetbe állítása és újraindítása"</string> <string name="aerr_report" msgid="5371800241488400617">"Visszajelzés küldése"</string> <string name="aerr_close" msgid="2991640326563991340">"Bezárás"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Némítás"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Némítás az eszköz újraindulásáig"</string> <string name="aerr_wait" msgid="3199956902437040261">"Várakozás"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Alkalmazás bezárása"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Érintse meg a további lehetőségekhez."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB hibakereső csatlakoztatva"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Érintse meg az USB hibakeresés kikapcsolásához."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Megosztja a hibajelentést?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Hibajelentés megosztása…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"A rendszergazda hibajelentést kért, hogy segíthessen az eszközzel kapcsolatos probléma megoldásában. Előfordulhat, hogy a rendszer megosztja az alkalmazásokat és adatokat, továbbá eszköze átmenetileg lelassulhat."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"A rendszergazda hibajelentést kért, hogy segíthessen az eszközzel kapcsolatos probléma megoldásában. Előfordulhat, hogy a rendszer megosztja az alkalmazásokat és adatokat."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Előfordulhat, hogy eszköze emiatt átmenetileg lelassul"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ELFOGADOM"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ELUTASÍTOM"</string> <string name="select_input_method" msgid="8547250819326693584">"Billentyűzet megváltoztatása"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> kiválasztva</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kiválasztva</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Vegyes"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Ön állította be ezen értesítések fontossági szintjét."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Ön állította be ezen értesítések fontossági szintjét."</string> <string name="importance_from_person" msgid="9160133597262938296">"Ez az üzenet a résztvevők miatt fontos."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Engedélyezi a(z) <xliff:g id="APP">%1$s</xliff:g> számára, hogy új felhasználót hozzon létre a(z) <xliff:g id="ACCOUNT">%2$s</xliff:g> fiókkal?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Engedélyezi a(z) <xliff:g id="APP">%1$s</xliff:g> számára, hogy új felhasználót hozzon létre a(z) <xliff:g id="ACCOUNT">%2$s</xliff:g> fiókkal? (Már létezik felhasználó ezzel a fiókkal.)"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Rögzítés"</string> <string name="unpin_target" msgid="3556545602439143442">"Feloldás"</string> <string name="app_info" msgid="6856026610594615344">"Alkalmazásinformáció"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-hy-rAM/strings.xml b/core/res/res/values-hy-rAM/strings.xml index b436f3d74198..1e719870b090 100644 --- a/core/res/res/values-hy-rAM/strings.xml +++ b/core/res/res/values-hy-rAM/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Զանգողի ID-ն լռելյայն չսահմանափակված է: Հաջորդ զանգը` չսահմանափակված"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Ծառայությունը չի տրամադրվում:"</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Դուք չեք կարող փոխել զանգողի ID-ի կարգավորումները:"</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Սահմանափակված մուտքը փոխված է"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Տվյալների ծառայությունն արգելափակված է:"</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Արտակարգ իրավիճակի ծառայությունն արգելափակված է:"</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Ձայնային ծառայությունը արգելափակված է:"</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Վերակայել և վերագործարկել հավելվածը"</string> <string name="aerr_report" msgid="5371800241488400617">"Ուղարկել կարծիք"</string> <string name="aerr_close" msgid="2991640326563991340">"Փակել"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Անջատել ձայնը"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Անջատել ձայնը մինչև սարքի վերագործարկումը"</string> <string name="aerr_wait" msgid="3199956902437040261">"Սպասել"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Փակել հավելվածը"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Հպեք՝ լրացուցիչ ընտրանքների համար:"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB վրիպազերծումը միացված է"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Հպեք` USB կարգաբերումը կասեցնելու համար:"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Տրամադրե՞լ վրիպակի զեկույցը:"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Վրիպակի զեկույցի տրամադրում…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Այս սարքի անսարքությունների վերացման նպատակով ձեր ՏՏ ադմինիստրատորին անհրաժեշտ է վրիպակի զեկույց: Կարող են տրամադրվել տեղեկություններ ձեր հավելվածների մասին և այլ տվյալներ, իսկ սարքի աշխատանքը կարող է դանդաղել:"</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Այս սարքի անսարքությունների վերացման նպատակով ձեր ՏՏ ադմինիստրատորին անհրաժեշտ է վրիպակի զեկույց: Կարող են տրամադրվել տեղեկություններ ձեր հավելվածներնի մասին և այլ տվյալներ:"</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Այդ ընթացքում ձեր սարքի աշխատանքը կարող է դանդաղել"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ԸՆԴՈՒՆԵԼ"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ՄԵՐԺԵԼ"</string> <string name="select_input_method" msgid="8547250819326693584">"Փոխել ստեղնաշարը"</string> @@ -1543,8 +1537,7 @@ <item quantity="one">Ընտրված է՝ <xliff:g id="COUNT_1">%1$d</xliff:g></item> <item quantity="other">Ընտրված է՝ <xliff:g id="COUNT_1">%1$d</xliff:g></item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Զանազան"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Դուք սահմանել եք այս ծանուցումների կարևորությունը:"</string> + <string name="importance_from_user" msgid="7318955817386549931">"Դուք սահմանել եք այս ծանուցումների կարևորությունը:"</string> <string name="importance_from_person" msgid="9160133597262938296">"Կարևոր է, քանի որ որոշակի մարդիկ են ներգրավված:"</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Թույլ տա՞լ <xliff:g id="APP">%1$s</xliff:g> հավելվածին <xliff:g id="ACCOUNT">%2$s</xliff:g> հաշվով նոր Օգտվող ստեղծել:"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Թույլ տա՞լ <xliff:g id="APP">%1$s</xliff:g> հավելվածին <xliff:g id="ACCOUNT">%2$s</xliff:g> հաշվով նոր Օգտվող ստեղծել (նման հաշվով Օգտվող արդեն գոյություն ունի):"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Ամրացնել"</string> <string name="unpin_target" msgid="3556545602439143442">"Ապամրացնել"</string> <string name="app_info" msgid="6856026610594615344">"Հավելվածի տվյալներ"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml index 7c18d24c4cbe..5eacff7b3e6a 100644 --- a/core/res/res/values-in/strings.xml +++ b/core/res/res/values-in/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Nomor penelepon default tidak dibatasi. Panggilan selanjutnya: Tidak dibatasi"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Layanan tidak diperlengkapi."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Anda tidak dapat mengubah setelan nomor penelepon."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Akses terbatas berubah"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Layanan data dicekal."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Layanan darurat dicekal."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Layanan suara dicekal."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Setel ulang dan mulai ulang aplikasi"</string> <string name="aerr_report" msgid="5371800241488400617">"Kirim masukan"</string> <string name="aerr_close" msgid="2991640326563991340">"Tutup"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Bisukan"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Bisukan hingga perangkat dimulai ulang"</string> <string name="aerr_wait" msgid="3199956902437040261">"Tunggu"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Tutup aplikasi"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Sentuh untuk opsi lainnya."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Debugging USB terhubung"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Sentuh untuk menonaktifkan debugging USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Bagikan laporan bug?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Membagikan laporan bug..."</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Admin IT meminta laporan bug untuk membantu memecahkan masalah perangkat ini. Aplikasi dan data mungkin dibagikan dan untuk sementara perangkat mungkin menjadi lambat."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Admin IT meminta laporan bug untuk membantu memecahkan masalah perangkat ini. Aplikasi dan data mungkin dibagikan."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Tindakan ini mungkin memperlambat perangkat untuk sementara"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"SETUJU"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"TOLAK"</string> <string name="select_input_method" msgid="8547250819326693584">"Ubah keyboard"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> dipilih</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> dipilih</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Lain-Lain"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Anda menyetel tingkat kepentingan notifikasi ini."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Anda menyetel nilai penting notifikasi ini."</string> <string name="importance_from_person" msgid="9160133597262938296">"Ini penting karena orang-orang yang terlibat."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Izinkan <xliff:g id="APP">%1$s</xliff:g> membuat Pengguna baru dengan <xliff:g id="ACCOUNT">%2$s</xliff:g> ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Izinkan <xliff:g id="APP">%1$s</xliff:g> membuat Pengguna baru dengan <xliff:g id="ACCOUNT">%2$s</xliff:g> (Pengguna dengan akun ini sudah ada) ?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"Pasang pin"</string> <string name="unpin_target" msgid="3556545602439143442">"Lepas pin"</string> <string name="app_info" msgid="6856026610594615344">"Info aplikasi"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-is-rIS/strings.xml b/core/res/res/values-is-rIS/strings.xml index 79ef76bae671..6a64e944b248 100644 --- a/core/res/res/values-is-rIS/strings.xml +++ b/core/res/res/values-is-rIS/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Númerabirting er sjálfgefið án takmarkana. Næsta símtal: Án takmarkana"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Þjónustu ekki útdeilt."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Þú getur ekki breytt stillingu númerabirtingar."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Takmörkuðum aðgangi breytt"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Lokað er fyrir gagnaþjónustu."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Lokað er fyrir neyðarþjónustu."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Lokað er fyrir raddþjónustu."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Endurstilla og endurræsa forritið"</string> <string name="aerr_report" msgid="5371800241488400617">"Senda ábendingu"</string> <string name="aerr_close" msgid="2991640326563991340">"Loka"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Þagga"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Þagga þangað til tæki er endurræst"</string> <string name="aerr_wait" msgid="3199956902437040261">"Bíða"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Loka forriti"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Snertu til að fá fleiri valkosti."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-villuleit tengd"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Snertu til að slökkva á USB-villuleit."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Deila villutilkynningu?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Deilir villutilkynningu..."</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Kerfisstjórinn þinn óskaði eftir villutilkynningu til að auðvelda úrræðaleit á þessu tæki. Forritum og gögnum verður hugsanlega deilt og mögulegt er að þetta hægi tímabundið á tækinu."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Kerfisstjórinn þinn óskaði eftir villutilkynningu til að auðvelda úrræðaleit á þessu tæki. Forritum og gögnum verður hugsanlega deilt."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Hugsanlega hægir þetta tímabundið á tækinu þínu"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"SAMÞYKKJA"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"HAFNA"</string> <string name="select_input_method" msgid="8547250819326693584">"Skipta um lyklaborð"</string> @@ -1543,8 +1537,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> valið</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> valin</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Ýmislegt"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Þú stilltir mikilvægi þessara tilkynninga."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Þú stilltir mikilvægi þessara tilkynninga."</string> <string name="importance_from_person" msgid="9160133597262938296">"Þetta er mikilvægt vegna fólksins sem tekur þátt í þessu."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Leyfa <xliff:g id="APP">%1$s</xliff:g> að stofna nýjan notanda með <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Leyfa <xliff:g id="APP">%1$s</xliff:g> að stofna nýjan notanda með <xliff:g id="ACCOUNT">%2$s</xliff:g> (notandi með þennan reikning er þegar fyrir hendi)?"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Festa"</string> <string name="unpin_target" msgid="3556545602439143442">"Losa"</string> <string name="app_info" msgid="6856026610594615344">"Forritsupplýsingar"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml index 2ba335928794..55a6c86cea1f 100644 --- a/core/res/res/values-it/strings.xml +++ b/core/res/res/values-it/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"ID chiamante generalmente non limitato. Prossima chiamata: non limitato"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Servizio non fornito."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Non è possibile modificare l\'impostazione ID chiamante."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Accesso limitato modificato"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Il servizio dati è bloccato."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Il servizio di emergenza è bloccato."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Il servizio vocale è bloccato."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Reimposta e riavvia app"</string> <string name="aerr_report" msgid="5371800241488400617">"Invia feedback"</string> <string name="aerr_close" msgid="2991640326563991340">"Chiudi"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Disattiva"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Disattiva fino al riavvio del dispositivo"</string> <string name="aerr_wait" msgid="3199956902437040261">"Attendi"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Chiudi app"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Tocca per visualizzare più opzioni."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Debug USB collegato"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Tocca per disattivare il debug USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Condividere la segnalazione di bug?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Condivisione della segnalazione di bug…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"L\'amministratore IT ha richiesto una segnalazione di bug per poter risolvere più facilmente i problemi di questo dispositivo. Potrebbero essere condivisi dati e app e il dispositivo potrebbe rallentare temporaneamente."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"L\'amministratore IT ha richiesto una segnalazione di bug per poter risolvere più facilmente i problemi di questo dispositivo. Potrebbero essere condivisi dati e app."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Il dispositivo potrebbe rallentare temporaneamente"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ACCETTO"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"RIFIUTO"</string> <string name="select_input_method" msgid="8547250819326693584">"Cambia tastiera"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> elementi selezionati</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> elemento selezionato</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Vari"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Stabilisci tu l\'importanza di queste notifiche."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Stabilisci tu l\'importanza di queste notifiche."</string> <string name="importance_from_person" msgid="9160133597262938296">"Importante a causa delle persone coinvolte."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Consentire a <xliff:g id="APP">%1$s</xliff:g> di creare un nuovo utente con <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Consentire a <xliff:g id="APP">%1$s</xliff:g> di creare un nuovo utente con <xliff:g id="ACCOUNT">%2$s</xliff:g>? (Esiste già un utente con questo account)"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"Blocca"</string> <string name="unpin_target" msgid="3556545602439143442">"Sblocca"</string> <string name="app_info" msgid="6856026610594615344">"Informazioni app"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml index a67319c4d28c..5fe88421ea25 100644 --- a/core/res/res/values-iw/strings.xml +++ b/core/res/res/values-iw/strings.xml @@ -90,7 +90,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"זיהוי מתקשר עובר כברירת מחדל למצב לא מוגבל. השיחה הבאה: לא מוגבלת"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"השירות לא הוקצה."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"אינך יכול לשנות את הגדרת זיהוי המתקשר."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"גישה מוגבלת השתנתה"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"שירות הנתונים חסום."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"שירות חירום חסום."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"השירות הקולי חסום."</string> @@ -929,7 +928,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"אפס והפעל מחדש את האפליקציה"</string> <string name="aerr_report" msgid="5371800241488400617">"שלח משוב"</string> <string name="aerr_close" msgid="2991640326563991340">"סגור"</string> - <string name="aerr_mute" msgid="7698966346654789433">"השתק"</string> + <string name="aerr_mute" msgid="1974781923723235953">"השתק עד הפעלה מחדש של המכשיר"</string> <string name="aerr_wait" msgid="3199956902437040261">"המתן"</string> <string name="aerr_close_app" msgid="3269334853724920302">"סגור את האפליקציה"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1069,16 +1068,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"גע להצגת עוד אפשרויות."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"ניפוי באגים של USB מחובר"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"גע כדי להשבית ניפוי באגים בהתקן ה-USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"האם לשתף דוח על באג?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"שיתוף דוח על באג…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"מנהל ה-IT ביקש דוח על באג כדי לסייע בפתרון בעיות במכשיר זה. ייתכן שאפליקציות ונתונים ישותפו. פעילות המכשיר עשויה להאט באופן זמני."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"מנהל ה-IT שלך ביקש דוח על באג כדי לסייע בפתרון בעיות במכשיר זה. ייתכן שאפליקציות ונתונים ישותפו."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"קצב הפעולה של המכשיר עשוי להיות איטי יותר באופן זמני כתוצאה מכך"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"אישור"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"דחייה"</string> <string name="select_input_method" msgid="8547250819326693584">"שינוי מקלדת"</string> @@ -1581,8 +1575,7 @@ <item quantity="other">בחרת <xliff:g id="COUNT_1">%1$d</xliff:g></item> <item quantity="one">בחרת <xliff:g id="COUNT_0">%1$d</xliff:g></item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"שונות"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"אתה מגדיר את החשיבות של ההודעות האלה."</string> + <string name="importance_from_user" msgid="7318955817386549931">"אתה מגדיר את החשיבות של ההודעות האלה."</string> <string name="importance_from_person" msgid="9160133597262938296">"ההודעה חשובה בשל האנשים המעורבים."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"האם לאפשר ל-<xliff:g id="APP">%1$s</xliff:g> ליצור משתמש חדש לחשבון <xliff:g id="ACCOUNT">%2$s</xliff:g> ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"האם לאפשר ל-<xliff:g id="APP">%1$s</xliff:g> ליצור משתמש חדש לחשבון <xliff:g id="ACCOUNT">%2$s</xliff:g> (כבר קיים משתמש לחשבון הזה) ?"</string> @@ -1609,4 +1602,5 @@ <string name="pin_target" msgid="3052256031352291362">"הצמד"</string> <string name="unpin_target" msgid="3556545602439143442">"בטל הצמדה"</string> <string name="app_info" msgid="6856026610594615344">"פרטי אפליקציה"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml index 166eca74c430..e9dde2b042dd 100644 --- a/core/res/res/values-ja/strings.xml +++ b/core/res/res/values-ja/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"既定: 発信者番号通知、次の発信: 通知"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"提供可能なサービスがありません。"</string> <string name="CLIRPermanent" msgid="3377371145926835671">"発信者番号の設定は変更できません。"</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"アクセス制限が変更されました"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"データサービスがブロックされています。"</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"緊急サービスがブロックされています。"</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"音声サービスがブロックされています。"</string> @@ -918,7 +917,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"アプリをリセットして再起動"</string> <string name="aerr_report" msgid="5371800241488400617">"フィードバックを送信"</string> <string name="aerr_close" msgid="2991640326563991340">"閉じる"</string> - <string name="aerr_mute" msgid="7698966346654789433">"ミュート"</string> + <string name="aerr_mute" msgid="1974781923723235953">"端末が再起動するまでミュート"</string> <string name="aerr_wait" msgid="3199956902437040261">"待機"</string> <string name="aerr_close_app" msgid="3269334853724920302">"アプリを閉じる"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1054,16 +1053,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"タップしてその他のオプションを表示"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USBデバッグが接続されました"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"タップしてUSBデバッグを無効化"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"バグレポートを共有しますか?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"バグレポートの共有中…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"IT 管理者からこの端末のトラブルシューティングに役立てるためバグレポートを共有するようリクエストがありました。アプリやデータが共有され、端末の動作が一時的に遅くなる場合があります。"</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"IT 管理者からこの端末のトラブルシューティングに役立てるためバグレポートを共有するようリクエストがありました。アプリやデータが共有されることがあります。"</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"共有によって端末の動作が一時的に遅くなる場合があります"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"同意する"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"同意しない"</string> <string name="select_input_method" msgid="8547250819326693584">"キーボードの変更"</string> @@ -1544,8 +1538,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>件選択済み</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g>件選択済み</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"その他"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"このような通知の重要度を設定します。"</string> + <string name="importance_from_user" msgid="7318955817386549931">"このような通知の重要度を設定します。"</string> <string name="importance_from_person" msgid="9160133597262938296">"関係するユーザーのため、この設定は重要です。"</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g> が <xliff:g id="ACCOUNT">%2$s</xliff:g> で新しいユーザーを作成できるようにしますか?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="APP">%1$s</xliff:g> が <xliff:g id="ACCOUNT">%2$s</xliff:g> で新しいユーザーを作成できるようにしますか?(このアカウントのユーザーはすでに存在します)"</string> @@ -1577,4 +1570,5 @@ <string name="pin_target" msgid="3052256031352291362">"固定"</string> <string name="unpin_target" msgid="3556545602439143442">"固定を解除"</string> <string name="app_info" msgid="6856026610594615344">"アプリ情報"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-ka-rGE/strings.xml b/core/res/res/values-ka-rGE/strings.xml index 178e023ae980..fa6dac26d95e 100644 --- a/core/res/res/values-ka-rGE/strings.xml +++ b/core/res/res/values-ka-rGE/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"ნაგულისხმებად დაყენებულია ნომრის დაფარვის გამორთვა. შემდეგი ზარი: არ არის დაფარული."</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"სერვისი არ არის მიწოდებული."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"არ შეგიძლიათ აბონენტის ID პარამეტრების შეცვლა."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"წვდომის შეზღუდვები შეცვლილია"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"ინტერნეტი დაბლოკილია."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"გადაუდებელი სამსახური დაბლოკილია."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"ხმოვანი მომსახურება დაბლოკილია."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"გადაყენება და აპის გადატვირთვა"</string> <string name="aerr_report" msgid="5371800241488400617">"გამოხმაურება"</string> <string name="aerr_close" msgid="2991640326563991340">"დახურვა"</string> - <string name="aerr_mute" msgid="7698966346654789433">"დადუმება"</string> + <string name="aerr_mute" msgid="1974781923723235953">"დადუმება მოწყობილობის გადატვირთვამდე"</string> <string name="aerr_wait" msgid="3199956902437040261">"მოცდა"</string> <string name="aerr_close_app" msgid="3269334853724920302">"აპის დახურვა"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"შეეხეთ დამატებითი პარამეტრებისთვის."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB გამართვა შეერთებულია"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"შეეხეთ, რათა შეწყვიტოთ USB-ის გამართვა."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"გსურთ ხარვეზის შესახებ ანგარიშის გაზიარება?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"მიმდინარეობს ხარვეზის შესახებ ანგარიშის გაზიარება…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"ამ მოწყობილობის პრობლემების აღმოფხვრაში დასახმარებლად, თქვენი IT ადმინისტრატორი ხარვეზის შესახებ ანგარიშს ითხოვს, რა დროსაც შეიძლება გაზიარდეს აპები და მონაცემები, ხოლო თქვენი მოწყობილობა დროებით შენელდეს."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"ამ მოწყობილობის პრობლემების აღმოფხვრაში დასახმარებლად, თქვენი IT ადმინისტრატორი ხარვეზის შესახებ ანგარიშს ითხოვს, რა დროსაც შეიძლება გაზიარდეს აპები და მონაცემები."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"ამან შეიძლება დროებით შეანელოს თქვენი მოწყობილობა"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"მიღება"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"უარყოფა"</string> <string name="select_input_method" msgid="8547250819326693584">"კლავიატურის შეცვლა"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> შერჩეული</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> შერჩეული</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"სხვადასხვა"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"ამ შეტყობინებების მნიშვნელობის დონე განისაზღვრა თქვენ მიერ."</string> + <string name="importance_from_user" msgid="7318955817386549931">"ამ შეტყობინებების მნიშვნელობის დონე განისაზღვრა თქვენ მიერ."</string> <string name="importance_from_person" msgid="9160133597262938296">"მნიშვნელოვანია ჩართული მომხმარებლების გამო."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"მიეცეს უფლება <xliff:g id="APP">%1$s</xliff:g>-ს, <xliff:g id="ACCOUNT">%2$s</xliff:g>-ის მეშვეობით ახალი მომხმარებელი შექმნას ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"მიეცეს უფლება <xliff:g id="APP">%1$s</xliff:g>-ს, <xliff:g id="ACCOUNT">%2$s</xliff:g>-ის მეშვეობით ახალი მომხმარებელი შექმნას (ამ ანგარიშის მქონე მომხმარებელი უკვე არსებობს) ?"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"ჩამაგრება"</string> <string name="unpin_target" msgid="3556545602439143442">"ჩამაგრების მოხსნა"</string> <string name="app_info" msgid="6856026610594615344">"აპის შესახებ"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-kk-rKZ/strings.xml b/core/res/res/values-kk-rKZ/strings.xml index 259278ac37ab..81e8ecd3dc37 100644 --- a/core/res/res/values-kk-rKZ/strings.xml +++ b/core/res/res/values-kk-rKZ/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Қоңырау шалушының жеке анықтағышы бастапқы бойынша шектелмеген. Келесі қоңырау: Шектелмеген"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Қызмет ұсынылмаған."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Қоңырау шалушы идентификаторы параметрін өзгерту мүмкін емес."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Шектелген қол жетімділік өзгертілген"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Дерекқор қызметі бөгелген."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Төтенше қызмет бөгелген."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Дауыс қызметі бөгелген."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Ысырып, қолданбаны қайта іске қосу"</string> <string name="aerr_report" msgid="5371800241488400617">"Пікір жіберу"</string> <string name="aerr_close" msgid="2991640326563991340">"Жабу"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Үнсіз"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Құрылғы қайта іске қосылғанша дыбысын өшіру"</string> <string name="aerr_wait" msgid="3199956902437040261">"Күту"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Қолданбаны жабу"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Қосымша параметрлер үшін түртіңіз."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB жөндеу қосылған"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB жөндеуді өшіру үшін түртіңіз."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Қате туралы есепті бөлісу керек пе?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Қате туралы есеп бөлісілуде…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"АТ әкімшісі осы құрылғы ақауларын жоюға көмектесу үшін қате туралы есепті сұрады. Қолданбалар және деректер бөлісілуі әрі құрылғының жұмысы уақытша баяулауы мүмкін."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"АТ әкімшісі осы құрылғы ақауларын жоюға көмектесу үшін қате туралы есепті сұрады. Қолданбалар және деректер бөлісілуі мүмкін."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Бұл құрылғы жұмысын уақытша баяулатуы мүмкін"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ҚАБЫЛДАУ"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ҚАБЫЛДАМАУ"</string> <string name="select_input_method" msgid="8547250819326693584">"Пернетақтаны өзгерту"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> таңдалды</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> таңдалды</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Әр түрлі"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Сіз осы хабарландырулардың маңыздылығын орнатасасыз."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Сіз осы хабарландырулардың маңыздылығын орнатасыз."</string> <string name="importance_from_person" msgid="9160133597262938296">"Қатысты адамдарға байланысты бұл маңызды."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACCOUNT">%2$s</xliff:g> есептік жазбасы бар жаңа пайдаланушы жасауға рұқсат ету керек пе?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="APP">%1$s</xliff:g> <xliff:g id="ACCOUNT">%2$s</xliff:g> есептік жазбасында жаңа пайдаланушы жасауға рұқсат ету керек пе (осы есептік жазбасы бар пайдаланушы әлдеқашан бар) ?"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"PIN код"</string> <string name="unpin_target" msgid="3556545602439143442">"Босату"</string> <string name="app_info" msgid="6856026610594615344">"Қолданба ақпараты"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-km-rKH/strings.xml b/core/res/res/values-km-rKH/strings.xml index 7390b6b611c5..46a951ff7781 100644 --- a/core/res/res/values-km-rKH/strings.xml +++ b/core/res/res/values-km-rKH/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"មិនបានដាក់កម្រិតលំនាំដើមលេខសម្គាល់អ្នកហៅ។ ការហៅបន្ទាប់៖ មិនបានដាក់កម្រិត។"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"មិនបានផ្ដល់សេវាកម្ម។"</string> <string name="CLIRPermanent" msgid="3377371145926835671">"អ្នកមិនអាចប្ដូរការកំណត់លេខសម្គាល់អ្នកហៅបានទេ។"</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"បានប្ដូរការចូលដំណើរការដែលបានដាក់កម្រិត"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"បានទប់ស្កាត់សេវាកម្មទិន្នន័យ។"</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"បានទប់ស្កាត់សេវាកម្មពេលអាសន្ន។"</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"សេវាកម្មសំឡេងត្រូវបានទប់ស្កាត់។"</string> @@ -919,7 +918,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"កំណត់ និងចាប់ផ្តើមកម្មវិធីឡើងវិញ"</string> <string name="aerr_report" msgid="5371800241488400617">"ផ្ញើមតិ"</string> <string name="aerr_close" msgid="2991640326563991340">"បិទ"</string> - <string name="aerr_mute" msgid="7698966346654789433">"បិទ"</string> + <string name="aerr_mute" msgid="1974781923723235953">"បិទរហូតដល់ឧបករណ៍ចាប់ផ្តើមឡើងវិញ"</string> <string name="aerr_wait" msgid="3199956902437040261">"រង់ចាំ"</string> <string name="aerr_close_app" msgid="3269334853724920302">"បិទកម្មវិធី"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1055,16 +1054,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"ប៉ះដើម្បីបានជម្រើសថែមទៀត។"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"បានភ្ជាប់ការកែកំហុសយូអេសប៊ី"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"ប៉ះ ដើម្បីបិទការកែកំហុសយូអេសប៊ី។"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"ចែករំលែករបាយការណ៍កំហុសឬ?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"កំពុងចែករំលែករបាយកំហុស…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"អ្នកគ្រប់គ្រងផ្នែកព័ត៌មានវិទ្យារបស់អ្នកបានស្នើរបាយការណ៍កំហុសដើម្បីដោះស្រាយកំហុសឧបករណ៍នេះ។ កម្មវិធី និងទិន្នន័យអាចនឹងត្រូវបានចែករំលែក ហើយឧបករណ៍របស់អ្នកអាចនឹងយឺតជាបណ្តោះអាសន្ន។"</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"អ្នកគ្រប់គ្រងផ្នែកព័ត៌មានវិទ្យារបស់អ្នកបានស្នើរបាយការណ៍កំហុសដើម្បីដោះស្រាយកំហុសឧបករណ៍នេះ។ កម្មវិធី និងទិន្នន័យអាចនឹងត្រូវបានចែករំលែក។"</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"វាអាចនឹងធ្វើឲ្យឧបករណ៍របស់អ្នកយឺតជាបណ្តោះអាសន្ន។"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ព្រមទទួល"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"បដិសេធ"</string> <string name="select_input_method" msgid="8547250819326693584">"ប្ដូរក្ដារចុច"</string> @@ -1545,8 +1539,7 @@ <item quantity="other">បានជ្រើស <xliff:g id="COUNT_1">%1$d</xliff:g></item> <item quantity="one">បានជ្រើស <xliff:g id="COUNT_0">%1$d</xliff:g></item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"ផ្សេងៗ"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"អ្នកបានកំណត់សារៈសំខាន់នៃការជូនដំណឹងទាំងនេះ"</string> + <string name="importance_from_user" msgid="7318955817386549931">"អ្នកបានកំណត់សារៈសំខាន់នៃការជូនដំណឹងទាំងនេះ"</string> <string name="importance_from_person" msgid="9160133597262938296">"វាមានសារៈសំខាន់ដោយសារតែមនុស្សដែលពាក់ព័ន្ធ"</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"អនុញ្ញាតឲ្យ <xliff:g id="APP">%1$s</xliff:g> បង្កើតអ្នកប្រើថ្មីដោយប្រើ <xliff:g id="ACCOUNT">%2$s</xliff:g> ឬទេ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"អនុញ្ញាតឲ្យ <xliff:g id="APP">%1$s</xliff:g> បង្កើតអ្នកប្រើថ្មីដោយប្រើ <xliff:g id="ACCOUNT">%2$s</xliff:g> (មានអ្នកប្រើសម្រាប់គណនីនេះរួចហើយ) ឬទេ?"</string> @@ -1573,4 +1566,5 @@ <string name="pin_target" msgid="3052256031352291362">"ខ្ទាស់"</string> <string name="unpin_target" msgid="3556545602439143442">"មិនខ្ទាស់"</string> <string name="app_info" msgid="6856026610594615344">"ព័ត៌មានកម្មវិធី"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-kn-rIN/strings.xml b/core/res/res/values-kn-rIN/strings.xml index ff1d028a4fca..5a025e4004c6 100644 --- a/core/res/res/values-kn-rIN/strings.xml +++ b/core/res/res/values-kn-rIN/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"ಕರೆಮಾಡುವವರ ID ಅನ್ನು ನಿರ್ಬಂಧಿಸದಿರುವಂತೆ ಡೀಫಾಲ್ಟ್ ಮಾಡಲಾಗಿದೆ. ಮುಂದಿನ ಕರೆ: ನಿರ್ಬಂಧಿಸಲಾಗಿಲ್ಲ"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"ಸೇವೆಯನ್ನು ಪೂರೈಸಲಾಗಿಲ್ಲ."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"ನೀವು ಕಾಲರ್ ID ಸೆಟ್ಟಿಂಗ್ ಬದಲಾಯಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"ನಿರ್ಬಂಧಿತ ಪ್ರವೇಶವನ್ನು ಬದಲಿಸಲಾಗಿದೆ"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"ಡೇಟಾ ಸೇವೆಯನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"ತುರ್ತು ಸೇವೆಯನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"ಧ್ವನಿ ಸೇವೆಯನ್ನು ನಿರ್ಬಂಧಿಸಲಾಗಿದೆ."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"ಅಪ್ಲಿಕೇಶನ್ ಮರುಹೊಂದಿಸಿ ಮತ್ತು ಮರುಪ್ರಾರಂಭಿಸಿ"</string> <string name="aerr_report" msgid="5371800241488400617">"ಪ್ರತಿಕ್ರಿಯೆ ಕಳುಹಿಸು"</string> <string name="aerr_close" msgid="2991640326563991340">"ಮುಚ್ಚು"</string> - <string name="aerr_mute" msgid="7698966346654789433">"ಮ್ಯೂಟ್"</string> + <string name="aerr_mute" msgid="1974781923723235953">"ಸಾಧನವು ಮರುಪ್ರಾರಂಭವಾಗುವವರೆಗೂ ಮ್ಯೂಟ್ ಮಾಡಿ"</string> <string name="aerr_wait" msgid="3199956902437040261">"ನಿರೀಕ್ಷಿಸು"</string> <string name="aerr_close_app" msgid="3269334853724920302">"ಅಪ್ಲಿಕೇಶನ್ ಅನ್ನು ಮುಚ್ಚಿ"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"ಹೆಚ್ಚಿನ ಆಯ್ಕೆಗಳಿಗೆ ಸ್ಪರ್ಶಿಸಿ."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ಡೀಬಗಿಂಗ್ ಸಂಪರ್ಕ"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB ಡೀಬಗಿಂಗ್ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಸ್ಪರ್ಶಿಸಿ."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"ಬಗ್ ವರದಿಯನ್ನು ಹಂಚುವುದೇ?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"ಬಗ್ ವರದಿಯನ್ನು ಹಂಚಿಕೊಳ್ಳಲಾಗುತ್ತಿದೆ…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"ಈ ಸಾಧನದ ಸಮಸ್ಯೆ ನಿವಾರಿಸುವುದಕ್ಕೆ ಸಹಾಯ ಮಾಡಲು ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರು ಬಗ್ ವರದಿಯನ್ನು ವಿನಂತಿಸಿದ್ದಾರೆ. ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು ಹಾಗು ನಿಮ್ಮ ಸಾಧನವು ತಾತ್ಕಾಲಿಕವಾಗಿ ನಿಧಾನಗೊಳ್ಳಬಹುದು."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"ಈ ಸಾಧನದ ಸಮಸ್ಯೆ ನಿವಾರಿಸಲು ಸಹಾಯ ಮಾಡಲು ನಿಮ್ಮ IT ನಿರ್ವಾಹಕರು ಬಗ್ ವರದಿಯನ್ನು ವಿನಂತಿಸಿದ್ದಾರೆ. ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಹಂಚಿಕೊಳ್ಳಬಹುದು."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"ಇದು ನಿಮ್ಮ ಸಾಧನವನ್ನು ತಾತ್ಕಾಲಿಕವಾಗಿ ನಿಧಾನಗೊಳಿಸಬಹುದು"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ಸಮ್ಮತಿಸು"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ತಿರಸ್ಕರಿಸು"</string> <string name="select_input_method" msgid="8547250819326693584">"ಕೀಬೋರ್ಡ್ ಬದಲಿಸಿ"</string> @@ -1543,8 +1537,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ಆಯ್ಕೆಮಾಡಲಾಗಿದೆ</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"ಇತರೆ"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"ನೀವು ಈ ಅಧಿಸೂಚನೆಗಳ ಪ್ರಾಮುಖ್ಯತೆಯನ್ನು ಹೊಂದಿಸಿರುವಿರಿ."</string> + <string name="importance_from_user" msgid="7318955817386549931">"ನೀವು ಈ ಅಧಿಸೂಚನೆಗಳ ಪ್ರಾಮುಖ್ಯತೆಯನ್ನು ಹೊಂದಿಸಿರುವಿರಿ."</string> <string name="importance_from_person" msgid="9160133597262938296">"ಜನರು ತೊಡಗಿಕೊಂಡಿರುವ ಕಾರಣ ಇದು ಅತ್ಯಂತ ಪ್ರಮುಖವಾಗಿದೆ."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="ACCOUNT">%2$s</xliff:g> ಮೂಲಕ ಹೊಸ ಬಳಕೆದಾರರನ್ನು ರಚಿಸಲು <xliff:g id="APP">%1$s</xliff:g> ಗೆ ಅನುಮತಿಸುವುದೇ ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="ACCOUNT">%2$s</xliff:g> (ಈ ಖಾತೆಯ ಬಳಕೆದಾರರು ಈಗಾಗಲೇ ಅಸ್ತಿತ್ವದಲ್ಲಿದ್ದಾರೆ) ಮೂಲಕ ಹೊಸ ಬಳಕೆದಾರರನ್ನು ರಚಿಸಲು <xliff:g id="APP">%1$s</xliff:g> ಗೆ ಅನುಮತಿಸುವುದೇ ?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"ಪಿನ್ ಮಾಡು"</string> <string name="unpin_target" msgid="3556545602439143442">"ಅನ್ಪಿನ್"</string> <string name="app_info" msgid="6856026610594615344">"ಅಪ್ಲಿಕೇಶನ್ ಮಾಹಿತಿ"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml index bc0228acc708..908bacb058a7 100644 --- a/core/res/res/values-ko/strings.xml +++ b/core/res/res/values-ko/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"발신자 번호가 기본적으로 제한되지 않음으로 설정됩니다. 다음 통화: 제한되지 않음"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"서비스가 준비되지 않았습니다."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"발신자 번호 설정을 변경할 수 없습니다."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"제한된 액세스가 변경되었습니다."</string> <string name="RestrictedOnData" msgid="8653794784690065540">"데이터 서비스가 차단되었습니다."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"긴급 서비스가 차단되었습니다."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"음성 서비스가 차단되었습니다."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"앱 재설정 및 다시 시작"</string> <string name="aerr_report" msgid="5371800241488400617">"의견 보내기"</string> <string name="aerr_close" msgid="2991640326563991340">"닫기"</string> - <string name="aerr_mute" msgid="7698966346654789433">"숨기기"</string> + <string name="aerr_mute" msgid="1974781923723235953">"기기가 다시 시작될 때까지 알림 끄기"</string> <string name="aerr_wait" msgid="3199956902437040261">"대기"</string> <string name="aerr_close_app" msgid="3269334853724920302">"앱 닫기"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"더 많은 옵션을 확인하려면 터치하세요."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB 디버깅 연결됨"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB 디버깅을 사용하지 않으려면 터치하세요."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"버그 보고서를 공유하시겠습니까?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"버그 신고서 공유 중..."</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"IT 관리자가 이 기기의 문제해결을 위해 버그 신고서를 요청했습니다. 앱과 데이터가 공유될 수 있으며 기기 속도가 일시적으로 느려질 수 있습니다."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"IT 관리자가 이 기기의 문제해결을 위해 버그 보고서를 요청했습니다. 앱과 데이터가 공유될 수 있습니다."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"이로 인해 일시적으로 기기 속도가 느려질 수 있습니다."</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"수락"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"거절"</string> <string name="select_input_method" msgid="8547250819326693584">"키보드 변경"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g>개 선택됨</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g>개 선택됨</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"기타"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"이러한 알림의 중요도를 설정했습니다."</string> + <string name="importance_from_user" msgid="7318955817386549931">"이러한 알림의 중요도를 설정했습니다."</string> <string name="importance_from_person" msgid="9160133597262938296">"관련된 사용자가 있으므로 중요합니다."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g>이(가) <xliff:g id="ACCOUNT">%2$s</xliff:g>(으)로 신규 사용자를 만들도록 허용하시겠습니까?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="APP">%1$s</xliff:g>이(가) <xliff:g id="ACCOUNT">%2$s</xliff:g>(이 계정의 사용자가 이미 있음)(으)로 신규 사용자를 만들도록 허용하시겠습니까?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"고정"</string> <string name="unpin_target" msgid="3556545602439143442">"고정 해제"</string> <string name="app_info" msgid="6856026610594615344">"앱 정보"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-ky-rKG/strings.xml b/core/res/res/values-ky-rKG/strings.xml index 5fc6a624a178..2d466942d32d 100644 --- a/core/res/res/values-ky-rKG/strings.xml +++ b/core/res/res/values-ky-rKG/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Номурду аныктоонун демейки абалы \"чектелбейт\" деп коюлган. Кийинки чалуу: Чектелбейт"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Кызмат камсыздалган эмес."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Чалуучунун далдаштырма дайындары жөндөөлөрүн өзгөртө албайсыз."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Чектелген мүмкүнчүлүк өзгөртүлдү"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Мобилдик Интернет бөгөттөлгөн."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Өзгөчө кырдаал кызматы бөгөттөлгөн."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Үн кызматы бөгөттөлгөн."</string> @@ -918,7 +917,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Колдонмону баштапкы абалга келтирип, кайра жүргүзүү"</string> <string name="aerr_report" msgid="5371800241488400617">"Жооп пикир жөнөтүү"</string> <string name="aerr_close" msgid="2991640326563991340">"Жабуу"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Үнсүз"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Түзмөк өчүрүлүп-күйгүзүлгүчө үнүн өчүрүү"</string> <string name="aerr_wait" msgid="3199956902437040261">"Күтүү"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Колдонмону жабуу"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1054,16 +1053,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Көбүрөөк параметр үчүн тийип коюңуз."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB мүчүлүштүктөрдү оңдоо туташтырылган"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB мүчүлүштүктөрдү жоюу мүмкүнчүлүгүн өчүрүү үчүн тийип коюңуз."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Мүчүлүштүк тууралуу баяндама бөлүшүлсүнбү?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Мүчүлүштүк тууралуу баяндама бөлүшүлүүдө…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Бул түзмөктүн бузулууларын аныктап оңдоо үчүн IT администраторуңуз мүчүлүштүктөр тууралуу маалыматты сурап жатат. Колдонмолор менен дайындар бөлүшүлүп, түзмөгүңүз жайыраак иштеп калышы мүмкүн."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Бул түзмөктүн бузулууларын аныктап оңдоо үчүн IT администраторуңуз мүчүлүштүктөр тууралуу маалыматты сурап жатат. Колдонмолор менен дайындар бөлүшүлүшү мүмкүн."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Ушуну менен түзмөгүңүздүн ылдамдыгы убактылуу төмөндөйт"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"КАБЫЛ АЛУУ"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ЧЕТКЕ КАГУУ"</string> <string name="select_input_method" msgid="8547250819326693584">"Баскычтопту өзгөртүү"</string> @@ -1544,8 +1538,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> тандалды</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> тандалды</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Калган-каткандар"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Бул эскертмелердин маанилүүлүгүн белгиледиңиз."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Бул эскертмелердин маанилүүлүгүн белгиледиңиз."</string> <string name="importance_from_person" msgid="9160133597262938296">"Булар сиз үчүн маанилүү адамдар."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g> колдонмосу <xliff:g id="ACCOUNT">%2$s</xliff:g> каттоо эсеби менен жаңы колдонуучу түзө берсинби ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="APP">%1$s</xliff:g> колдонмосу <xliff:g id="ACCOUNT">%2$s</xliff:g> каттоо эсеби менен жаңы колдонуучу түзө берсинби (мындай каттоо эсеби бар колдонуучу мурунтан эле бар) ?"</string> @@ -1566,10 +1559,12 @@ <string name="user_encrypted_message" msgid="4923292604515744267">"Кулпусун ачуу үчүн таптаңыз"</string> <string name="user_encrypted_detail" msgid="5708447464349420392">"Колдончнн дайындары кулпуланды"</string> <string name="profile_encrypted_detail" msgid="3700965619978314974">"Жумуш профили кулпуланган"</string> - <string name="profile_encrypted_message" msgid="6964994232310195874">"Таптап, жумуш профилин ачыңыз"</string> + <string name="profile_encrypted_message" msgid="6964994232310195874">"Таптап жумуш профилин ачыңыз"</string> <string name="usb_mtp_launch_notification_title" msgid="8359219638312208932">"<xliff:g id="PRODUCT_NAME">%1$s</xliff:g> менен туташты"</string> <string name="usb_mtp_launch_notification_description" msgid="8541876176425411358">"Файлдарды көрүү үчүн таптап коюңуз"</string> <string name="pin_target" msgid="3052256031352291362">"Кадоо"</string> <string name="unpin_target" msgid="3556545602439143442">"Кадоодон алып коюу"</string> <string name="app_info" msgid="6856026610594615344">"Колдонмо тууралуу"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-ldrtl-television/config.xml b/core/res/res/values-ldrtl-television/config.xml new file mode 100644 index 000000000000..e237acc62746 --- /dev/null +++ b/core/res/res/values-ldrtl-television/config.xml @@ -0,0 +1,27 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2016, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ +--> + +<!-- These resources are around just to allow their values to be customized + for TV products. Do not translate. --> +<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + + <!-- Default bounds [left top right bottom] on screen for picture-in-picture windows. --> + <string translatable="false" name="config_defaultPictureInPictureBounds">"112 54 592 324"</string> + +</resources> diff --git a/core/res/res/values-lo-rLA/strings.xml b/core/res/res/values-lo-rLA/strings.xml index 0c146bdd4796..c0019435b649 100644 --- a/core/res/res/values-lo-rLA/strings.xml +++ b/core/res/res/values-lo-rLA/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"ໝາຍເລກຜູ່ໂທ ໄດ້ຮັບການຕັ້ງຄ່າເລີ່ມຕົ້ນເປັນ ບໍ່ຖືກຈຳກັດ. ການໂທຄັ້ງຕໍ່ໄປ: ບໍ່ຖືກຈຳກັດ."</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"ບໍ່ໄດ້ເປີດໃຊ້ບໍລິການ."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"ທ່ານບໍ່ສາມາດປ່ຽນແປງການຕັ້ງຄ່າ Caller ID"</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"ປ່ຽນການເຂົ້າເຖິງທີ່ຖືກຈຳກັດແລ້ວ"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"ບໍລິການຂໍ້ມູນຖືກບລັອກ."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"ບໍລິການສຸກເສີນຖືກບລັອກ."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"ບໍລິການການໂທຖືກປິດກັ້ນໄວ້."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"ຣີເຊັດ ແລະ ເລີ່ມແອັບໃໝ່"</string> <string name="aerr_report" msgid="5371800241488400617">"ສົ່ງຄຳຕິຊົມ"</string> <string name="aerr_close" msgid="2991640326563991340">"ປິດ"</string> - <string name="aerr_mute" msgid="7698966346654789433">"ປິດສຽງ"</string> + <string name="aerr_mute" msgid="1974781923723235953">"ປິດສຽງຈົນກວ່າວ່າອຸປະກອນເລີ່ມໃໝ່"</string> <string name="aerr_wait" msgid="3199956902437040261">"ລໍຖ້າ"</string> <string name="aerr_close_app" msgid="3269334853724920302">"ປິດແອັບ"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"ສຳພັດສຳລັບທາງເລືອກເພີ່ມເຕີມ."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"ເຊື່ອມຕໍ່ການດີບັ໊ກຜ່ານ USB ແລ້ວ"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"ແຕະເພື່ອປິດການດີບັ໊ກຜ່ານ USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"ແບ່ງປັນລາຍງານບັນຫາບໍ?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"ກຳລັງແບ່ງປັນລາຍງານບັນຫາ…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"ຜູ້ເບິ່ງແຍງລະບົບໄອທີຂອງທ່ານໄດ້ຮ້ອງຂໍລາຍງານຂໍ້ຜິດພາດເພື່ອຊ່ວຍແກ້ໄຂບັນຫາອຸປະກອນນີ້. ແອັບ ແລະ ຂໍ້ມູນອາດຖືກແບ່ງປັນ ແລະ ອຸປະກອນຂອງທ່ານອາດເຮັດວຽກຊ້າລົງຊົ່ວຄາວ."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"ຜູ້ເບິ່ງແຍງລະບົບໄອທີຂອງທ່ານໄດ້ຮ້ອງຂໍເອົາລາຍງານບັນຫາ ເພື່ອຊ່ວຍແກ້ໄຂບັນຫາໃຫ້ອຸປະກອນນີ້. ອາດຈະມີການແບ່ງປັນແອັບ ແລະ ຂໍ້ມູນນຳ."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"ນີ້ອາດຈະເຮັດໃຫ້ອຸປະກອນຂອງທ່ານຊ້າລົງຊົ່ວຄາວ"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ຍອມຮັບ"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ປະຕິເສດ"</string> <string name="select_input_method" msgid="8547250819326693584">"ປ່ຽນແປ້ນພິມ"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ຖືກເລືອກແລ້ວ</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ຖືກເລືອກແລ້ວ</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"ອື່ນໆ"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"ທ່ານຕັ້ງຄວາມສຳຄັນຂອງການແຈ້ງເຕືອນເຫຼົ່ານີ້."</string> + <string name="importance_from_user" msgid="7318955817386549931">"ທ່ານຕັ້ງຄວາມສຳຄັນຂອງການແຈ້ງເຕືອນເຫຼົ່ານີ້."</string> <string name="importance_from_person" msgid="9160133597262938296">"ຂໍ້ຄວາມນີ້ສຳຄັນເນື່ອງຈາກບຸກຄົນທີ່ກ່ຽວຂ້ອງ."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"ອະນຸຍາດໃຫ້ <xliff:g id="APP">%1$s</xliff:g> ສ້າງຜູ້ໃຊ້ໃໝ່ສຳລັບ <xliff:g id="ACCOUNT">%2$s</xliff:g> ບໍ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"ອະນຸຍາດໃຫ້ <xliff:g id="APP">%1$s</xliff:g> ສ້າງຜູ້ໃຊ້ໃໝ່ສຳລັບ <xliff:g id="ACCOUNT">%2$s</xliff:g> (ຜູ້ໃຊ້ສຳລັບບັນຊີນີ້ມີຢູ່ແລ້ວ) ບໍ?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"ປັກໝຸດ"</string> <string name="unpin_target" msgid="3556545602439143442">"ຖອນປັກໝຸດ"</string> <string name="app_info" msgid="6856026610594615344">"ຂໍ້ມູນແອັບ"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml index e4d10ae279ea..8805c5aeed4d 100644 --- a/core/res/res/values-lt/strings.xml +++ b/core/res/res/values-lt/strings.xml @@ -90,7 +90,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Skambintojo ID pagal numatytuosius nustatymus yra neapribotas. Kitas skambutis: neapribotas"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Paslauga neteikiama."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Negalima pakeisti skambinančiojo ID nustatymo."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Apribota prieiga pakeista"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Duomenų paslauga užblokuota."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Pagalbos paslauga užblokuota."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Balso paslauga užblokuota."</string> @@ -929,7 +928,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Nustatyti ir paleisti programą iš naujo"</string> <string name="aerr_report" msgid="5371800241488400617">"Siųsti atsiliepimą"</string> <string name="aerr_close" msgid="2991640326563991340">"Uždaryti"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Paslėpti"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Ignoruoti, kol įrenginys bus paleistas iš naujo"</string> <string name="aerr_wait" msgid="3199956902437040261">"Laukti"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Uždaryti programą"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1069,16 +1068,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Palieskite, kad būtų rodoma daugiau parinkčių."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB derinimas prijungtas"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Neleisti USB derinimo."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Bendrinti pranešimą apie riktą?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Bendrinamas pranešimas apie riktą..."</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Jūsų IT administratorius pateikė pranešimo apie riktą užklausą, kad galėtų padėti pašalinti triktis šiame įrenginyje. Programos bei duomenys gali būti bendrinami ir įrenginys gali laikinai lėčiau veikti."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Jūsų IT administratorius pateikė pranešimo apie riktą užklausą, kad galėtų padėti pašalinti triktis šiame įrenginyje. Programos ir duomenys gali būti bendrinami."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Dėl to įrenginys gali laikinai lėčiau veikti"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"SUTIKTI"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ATMESTI"</string> <string name="select_input_method" msgid="8547250819326693584">"Klaviatūros keitimas"</string> @@ -1581,8 +1575,7 @@ <item quantity="many">Pasir. <xliff:g id="COUNT_1">%1$d</xliff:g> elem.</item> <item quantity="other">Pasir. <xliff:g id="COUNT_1">%1$d</xliff:g> elem.</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Įvairūs"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Galite nustatyti šių pranešimų svarbą."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Galite nustatyti šių pranešimų svarbą."</string> <string name="importance_from_person" msgid="9160133597262938296">"Tai svarbu dėl susijusių žmonių."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Leisti „<xliff:g id="APP">%1$s</xliff:g>“ kurti naują <xliff:g id="ACCOUNT">%2$s</xliff:g> naudotoją?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Leisti „<xliff:g id="APP">%1$s</xliff:g>“ kurti naują <xliff:g id="ACCOUNT">%2$s</xliff:g> naudotoją (šią paskyrą naudojantis naudotojas jau yra)?"</string> @@ -1609,4 +1602,5 @@ <string name="pin_target" msgid="3052256031352291362">"Prisegti"</string> <string name="unpin_target" msgid="3556545602439143442">"Atsegti"</string> <string name="app_info" msgid="6856026610594615344">"Programos informacija"</string> + <string name="negative_duration" msgid="5688706061127375131">"–<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml index 2fda60c5e594..1646342849c9 100644 --- a/core/res/res/values-lv/strings.xml +++ b/core/res/res/values-lv/strings.xml @@ -89,7 +89,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Zvanītāja ID noklusējumi ir iestatīti uz Nav ierobežots. Nākamais zvans: nav ierobežots"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Pakalpojums netiek nodrošināts."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Zvanītāja ID iestatījumu nevar mainīt."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Ierobežotā piekļuve ir mainīta"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Datu pakalpojums ir bloķēts."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Ārkārtas pakalpojums ir bloķēts."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Balss pakalpojums ir bloķēts."</string> @@ -923,7 +922,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Atiestatīt un restartēt lietotni"</string> <string name="aerr_report" msgid="5371800241488400617">"Sūtīt atsauksmes"</string> <string name="aerr_close" msgid="2991640326563991340">"Aizvērt"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Nerādīt"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Nerādīt, līdz ierīce tiks restartēta"</string> <string name="aerr_wait" msgid="3199956902437040261">"Gaidīt"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Aizvērt lietotni"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1061,16 +1060,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Citas opcijas"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB atkļūdošana ir pievienota."</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Iespējot USB atkļūdošanu."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Vai kopīgot kļūdas pārskatu?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Notiek kļūdas pārskata kopīgošana…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Jūsu IT administrators pieprasīja kļūdas pārskatu, lai palīdzētu novērst problēmu šajā ierīcē. Var tikt kopīgotas lietotnes un dati, un jūsu ierīces darbība var īslaicīgi palēnināties."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Jūsu IT administrators pieprasīja kļūdas pārskatu, lai palīdzētu novērst problēmu šajā ierīcē. Var tikt kopīgotas lietotnes un dati."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Jūsu ierīces darbība var īslaicīgi palēnināties."</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"APSTIPRINĀT"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"NORAIDĪT"</string> <string name="select_input_method" msgid="8547250819326693584">"Tastatūras maiņa"</string> @@ -1562,8 +1556,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> atlasīts</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> atlasīti</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Dažādi"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Jūs iestatījāt šo paziņojumu svarīguma līmeni."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Jūs iestatījāt šo paziņojumu svarīguma līmeni."</string> <string name="importance_from_person" msgid="9160133597262938296">"Tas ir svarīgi iesaistīto personu dēļ."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Vai atļaut lietotnei <xliff:g id="APP">%1$s</xliff:g> izveidot jaunu lietotāju, izmantojot e-pasta adresi <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Vai atļaut lietotnei <xliff:g id="APP">%1$s</xliff:g> izveidot jaunu lietotāju, izmantojot e-pasta adresi <xliff:g id="ACCOUNT">%2$s</xliff:g> (lietotājs ar šādu kontu jau pastāv)?"</string> @@ -1590,4 +1583,6 @@ <string name="pin_target" msgid="3052256031352291362">"Piespraust"</string> <string name="unpin_target" msgid="3556545602439143442">"Atspraust"</string> <string name="app_info" msgid="6856026610594615344">"Lietotnes informācija"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-mk-rMK/strings.xml b/core/res/res/values-mk-rMK/strings.xml index d4f1722d87f2..ff35dfd0bba1 100644 --- a/core/res/res/values-mk-rMK/strings.xml +++ b/core/res/res/values-mk-rMK/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Стандардно, повикувачот со овој ИД не е ограничен. Следен повик: не е ограничен"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Услугата не е предвидена."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Не може да го промените поставувањето за ИД на повикувач."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Ограничениот пристап е изменет"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Услугата за податоци е блокирана."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Услугата за итни повици е блокирана."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Услугата за гласовно бирање е блокирана."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Ресетирај ја и рестартирај ја апликацијата"</string> <string name="aerr_report" msgid="5371800241488400617">"Испрати повратни информации"</string> <string name="aerr_close" msgid="2991640326563991340">"Затвори"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Исклучи звук"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Исклучи го звукот додека уредот не се рестартира"</string> <string name="aerr_wait" msgid="3199956902437040261">"Почекај"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Затвори ја апликацијата"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Допри за повеќе опции."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Поврзано е отстранување грешки преку УСБ"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Допрете за да се оневозможи отстранувањето грешки преку USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Да се сподели извештајот за грешки?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Се споделува извештај за грешки…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Администраторот за информатичка технологија побара извештај за грешки за да ви помогне во отстранувањето на грешките од уредот. Апликациите и податоците можеби ќе се споделат, а уредот можеби ќе биде привремено побавен при работата."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Вашиот администратор за информатичка технологија побара извештај за грешки за да помогне со отстранување на грешките на овој уред. Апликациите и податоците може да бидат споделени."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Ова може привремено да го забави уредот"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ПРИФАТИ"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ОДБИЈ"</string> <string name="select_input_method" msgid="8547250819326693584">"Измени тастатура"</string> @@ -1545,8 +1539,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> е избрана</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> се избрани</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Разно"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Ја поставивте важноста на известувањава."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Ја поставивте важноста на известувањава."</string> <string name="importance_from_person" msgid="9160133597262938296">"Ова е важно заради луѓето кои се вклучени."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Дозволувате ли <xliff:g id="APP">%1$s</xliff:g> да создаде нов корисник со <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Дозволувате ли <xliff:g id="APP">%1$s</xliff:g> да создаде нов корисник со <xliff:g id="ACCOUNT">%2$s</xliff:g> (веќе постои корисник со оваа сметка)?"</string> @@ -1573,4 +1566,6 @@ <string name="pin_target" msgid="3052256031352291362">"Прикачете"</string> <string name="unpin_target" msgid="3556545602439143442">"Откачете"</string> <string name="app_info" msgid="6856026610594615344">"Информации за апликација"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-ml-rIN/strings.xml b/core/res/res/values-ml-rIN/strings.xml index f4c724312509..633611ac1bc8 100644 --- a/core/res/res/values-ml-rIN/strings.xml +++ b/core/res/res/values-ml-rIN/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"നിയന്ത്രിക്കേണ്ടതല്ലാത്ത സ്ഥിര കോളർ ഐഡികൾ. അടുത്ത കോൾ: നിയന്ത്രിച്ചിട്ടില്ല"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"സേവനം വ്യവസ്ഥ ചെയ്തിട്ടില്ല."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"നിങ്ങൾക്ക് കോളർ ഐഡി ക്രമീകരണം മാറ്റാനാവില്ല."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"നിയന്ത്രിത ആക്സസ്സ് മാറ്റി"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"ഡാറ്റ സേവനം തടഞ്ഞു."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"അടിയന്തര സേവനം തടഞ്ഞു."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"വോയ്സ് സേവനം തടഞ്ഞു."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"ആപ്പ് പുനഃക്രമീകരിച്ച് പുനഃരാരംഭിക്കുക"</string> <string name="aerr_report" msgid="5371800241488400617">"ഫീഡ്ബാക്ക് അയയ്ക്കുക"</string> <string name="aerr_close" msgid="2991640326563991340">"അടയ്ക്കുക"</string> - <string name="aerr_mute" msgid="7698966346654789433">"മ്യൂട്ടുചെയ്യുക"</string> + <string name="aerr_mute" msgid="1974781923723235953">"ഉപകരണം പുനഃരാരംഭിക്കുന്നത് വരെ മ്യൂട്ടുചെയ്യുക"</string> <string name="aerr_wait" msgid="3199956902437040261">"കാത്തിരിക്കുക"</string> <string name="aerr_close_app" msgid="3269334853724920302">"ആപ്പ് അടയ്ക്കുക"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"കൂടുതൽ ഓപ്ഷനുകൾക്ക് സ്പർശിക്കൂ."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ഡീബഗ്ഗിംഗ് കണക്റ്റുചെയ്തു"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB ഡീബഗ്ഗിംഗ് ഓഫാക്കാൻ സ്പർശിക്കൂ."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"ബഗ് റിപ്പോർട്ട് പങ്കിടണോ?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"ബഗ് റിപ്പോർട്ട് പങ്കിടുന്നു…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"ഈ ഉപകരണവുമായി ബന്ധപ്പെട്ട പ്രശ്നം പരിഹരിക്കുന്നതിന് നിങ്ങളുടെ ഐടി അഡ്മിൻ ഒരു ബഗ് റിപ്പോർട്ട് അഭ്യർത്ഥിച്ചു. ആപ്സും ഡാറ്റയും പങ്കിടപ്പെട്ടേക്കും, നിങ്ങളുടെ ഉപകരണത്തെ ഇത് താൽക്കാലികമായി മന്ദഗതിയിലാക്കിയേക്കാം."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"ഈ ഉപകരണത്തിലെ പ്രശ്നം പരിഹരിക്കുന്നതിന് നിങ്ങളുടെ ഐടി അഡ്മിൻ ഒരു ബഗ് റിപ്പോർട്ട് അഭ്യർത്ഥിച്ചു. ആപ്സും ഡാറ്റയും പങ്കിടപ്പെട്ടേക്കും."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"നിങ്ങളുടെ ഉപകരണത്തെ ഇത് താൽക്കാലികമായി മന്ദഗതിയിലാക്കിയേക്കാം"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"അംഗീകരിക്കുക"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"നിരസിക്കുക"</string> <string name="select_input_method" msgid="8547250819326693584">"കീബോഡ് മാറ്റുക"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> തിരഞ്ഞെടുത്തു</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> തിരഞ്ഞെടുത്തു</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"പലവക"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"ഈ അറിയിപ്പുകളുടെ പ്രാധാന്യം നിങ്ങൾ സജ്ജീകരിച്ചു."</string> + <string name="importance_from_user" msgid="7318955817386549931">"ഈ അറിയിപ്പുകളുടെ പ്രാധാന്യം നിങ്ങൾ സജ്ജീകരിച്ചു."</string> <string name="importance_from_person" msgid="9160133597262938296">"ഉൾപ്പെട്ടിട്ടുള്ള ആളുകളെ കണക്കിലെടുക്കുമ്പോള് ഇത് പ്രധാനപ്പെട്ടതാണ്."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="ACCOUNT">%2$s</xliff:g> എന്ന അക്കൗണ്ട് ഉപയോഗിച്ച് പുതിയൊരു ഉപയോക്താവിനെ സൃഷ്ടിക്കാൻ <xliff:g id="APP">%1$s</xliff:g> എന്ന ആപ്പിനെ അനുവദിക്കണോ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="ACCOUNT">%2$s</xliff:g> എന്ന അക്കൗണ്ട് (ഈ അക്കൗണ്ട് ഉപയോഗിച്ചുള്ള ഒരു ഉപയോക്താവ് ഇതിനകം തന്നെ നിലവിലുണ്ട്) ഉപയോഗിച്ച് പുതിയൊരു ഉപയോക്താവിനെ സൃഷ്ടിക്കാൻ <xliff:g id="APP">%1$s</xliff:g> എന്ന ആപ്പിനെ അനുവദിക്കണോ?"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"പിൻ ചെയ്യുക"</string> <string name="unpin_target" msgid="3556545602439143442">"അൺപിൻ ചെയ്യുക"</string> <string name="app_info" msgid="6856026610594615344">"ആപ്പ് വിവരം"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-mn-rMN/strings.xml b/core/res/res/values-mn-rMN/strings.xml index aba5bc03a578..4d75b0733aa9 100644 --- a/core/res/res/values-mn-rMN/strings.xml +++ b/core/res/res/values-mn-rMN/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Дуудлага хийгчийн ID хязгаарлагдсан. Дараагийн дуудлага: Хязгаарлагдсан"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Үйлчилгээ провишн хийгдээгүй ."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Та дуудлага хийгчийн ID тохиргоог солиж чадахгүй."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Хязгаарлагдсан хандалт өөрчлөгдөв"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Дата үйлчилгээ хаагдсан."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Яаралтай үйлчилгээ хаагдсан."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Дуут үйлчилгээ хориглогдсон."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Апп-ыг шинэчилж, дахин эхлүүлэх"</string> <string name="aerr_report" msgid="5371800241488400617">"Санал хүсэлт илгээх"</string> <string name="aerr_close" msgid="2991640326563991340">"Хаах"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Дуу хаах"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Төхөөрөмжийг дахин эхлүүлэх хүртэл дууг нь хаах"</string> <string name="aerr_wait" msgid="3199956902437040261">"Хүлээх"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Апп-ыг хаах"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Нэмэлт сонголтыг харахын тулд дарна."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB дебаг холбогдсон"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB дебагийг идэвхгүй болгох бол хүрнэ үү."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Алдааны тайланг хуваалцах уу?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Алдааны тайланг хуваалцаж байна..."</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Энэ төхөөрөмжийн асуудлыг шийдвэрлэхийнт тулд таны IT админ алдааны тайланг хүслээ. Апп болон өгөгдлийг хуваалцаж, таны төхөөрөмж бага зэрэг удаан ажиллаж болзошгүй."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Энэ төхөөрөмжийн асуудлыг шийдвэрлэхийн тулд таны IT админ алдааны тайланг хүслээ. Апп болон өгөгдлийг хуваалцсан байж болзошгүй."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Энэ нь таны төхөөрөмжийг түр хугацаанд удаашруулж болзошгүй"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ЗӨВШӨӨРӨХ"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ТАТГАЛЗАХ"</string> <string name="select_input_method" msgid="8547250819326693584">"Гарыг өөрчлөх"</string> @@ -1541,8 +1535,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> сонгосон</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> сонгосон</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Бусад"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Та эдгээр мэдэгдлийн ач холбогдлыг тогтоосон."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Та эдгээр мэдэгдлийн ач холбогдлыг тогтоосон."</string> <string name="importance_from_person" msgid="9160133597262938296">"Оролцсон хүмүүсээс шалтгаалан энэ нь өндөр ач холбогдолтой."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g>-г <xliff:g id="ACCOUNT">%2$s</xliff:g>-р шинэ Хэрэглэгч үүсгэхийг зөвшөөрөх үү?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="APP">%1$s</xliff:g>-г <xliff:g id="ACCOUNT">%2$s</xliff:g>-р шинэ хэрэглэгч үүсгэхийг зөвшөөрөх үү (ийм бүртгэлтэй хэрэглэгч аль хэдийн байна) ?"</string> @@ -1569,4 +1562,5 @@ <string name="pin_target" msgid="3052256031352291362">"PIN"</string> <string name="unpin_target" msgid="3556545602439143442">"Unpin"</string> <string name="app_info" msgid="6856026610594615344">"Апп-н мэдээлэл"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-mr-rIN/strings.xml b/core/res/res/values-mr-rIN/strings.xml index 1b1c7a875aed..228daa5e8849 100644 --- a/core/res/res/values-mr-rIN/strings.xml +++ b/core/res/res/values-mr-rIN/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"कॉलर ID डीफॉल्ट रूपात प्रतिबंधित नाही वर सेट असतो. पुढील कॉल: प्रतिबंधित नाही"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"सेवेची तरतूद केलेली नाही."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"आपण कॉलर ID सेटिंग बदलू शकत नाही."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"प्रतिबंधित प्रवेश बदलला"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"डेटा सेवा अवरोधित केली आहे."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"आणीबाणी सेवा अवरोधित केली आहे."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"व्हॉइस सेवा अवरोधित केली आहे."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"अॅप रीसेट आणि रीस्टार्ट करा"</string> <string name="aerr_report" msgid="5371800241488400617">"अभिप्राय पाठवा"</string> <string name="aerr_close" msgid="2991640326563991340">"बंद करा"</string> - <string name="aerr_mute" msgid="7698966346654789433">"नि:शब्द करा"</string> + <string name="aerr_mute" msgid="1974781923723235953">"डिव्हाइस रीस्टार्ट होईपर्यंत नि:शब्द करा"</string> <string name="aerr_wait" msgid="3199956902437040261">"प्रतीक्षा करा"</string> <string name="aerr_close_app" msgid="3269334853724920302">"अॅप बंद करा"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"अधिक पर्यायांसाठी स्पर्श करा."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB डीबग करणे कनेक्ट केले"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB डीबग करणे अक्षम करण्यासाठी स्पर्श करा."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"बग अहवाल सामायिक करायचा?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"दोष अहवाल सामायिक करीत आहे..."</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"आपल्या IT प्रशासकाने या डिव्हाइसची समस्या निवारण करण्यात मदत करण्यासाठी एका दोष अहवालाची विनंती केली. अॅप्स आणि डेटा सामायिक केले जाऊ शकतात आणि आपले डिव्हाइस तात्पुरते धीमे होऊ शकते."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"आपल्या IT प्रशासकाने या डिव्हाइसच्या समस्येचे निवारण करण्यात मदत करण्यासाठी दोष अहवालाची विनंती केली. अॅप्स आणि डेटा सामायिक केला जाऊ शकतो."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"हे तात्पुरता आपले डिव्हाइस धिमे करू शकते."</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"स्वीकार करा"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"नकार द्या"</string> <string name="select_input_method" msgid="8547250819326693584">"कीबोर्ड बदला"</string> @@ -1543,8 +1537,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> निवडला</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> निवडले</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"संकीर्ण"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"आपण या सूचनांचे महत्त्व सेट केले."</string> + <string name="importance_from_user" msgid="7318955817386549931">"आपण या सूचनांचे महत्त्व सेट केले."</string> <string name="importance_from_person" msgid="9160133597262938296">"सामील असलेल्या लोकांमुळे हे महत्वाचे आहे."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="ACCOUNT">%2$s</xliff:g> सह नवीन वापरकर्ता तयार करण्याची <xliff:g id="APP">%1$s</xliff:g> ला अनुमती द्यायची?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="ACCOUNT">%2$s</xliff:g> सह नवीन वापरकर्ता तयार करण्याची (हे खाते असलेला वापरकर्ता आधीपासून विद्यमान आहे) <xliff:g id="APP">%1$s</xliff:g> ला अनुमती द्यायची?"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"पिन"</string> <string name="unpin_target" msgid="3556545602439143442">"अनपिन करा"</string> <string name="app_info" msgid="6856026610594615344">"अॅप माहिती"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms-rMY/strings.xml index f174b7c5b291..9ad89997d3d9 100644 --- a/core/res/res/values-ms-rMY/strings.xml +++ b/core/res/res/values-ms-rMY/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"ID pemanggil secara lalainya ditetapkan kepada tidak dihadkan. Panggilan seterusnya: Tidak terhad"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Perkhidmatan yang tidak diuntukkan."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Anda tidak boleh mengubah tetapan ID pemanggil."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Akses terhad diubah"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Perkhidmatan data disekat."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Perkhidmatan kecemasan disekat."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Perkhidmatan suara disekat."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Tetapkan semula dan mulakan semula apl"</string> <string name="aerr_report" msgid="5371800241488400617">"Hantar maklum balas"</string> <string name="aerr_close" msgid="2991640326563991340">"Tutup"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Redam"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Redam sehingga peranti dimulakan semula"</string> <string name="aerr_wait" msgid="3199956902437040261">"Tunggu"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Tutup apl"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Sentuh untuk mendapatkan lagi pilihan."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Penyahpepijatan USB disambungkan"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Sentuh untuk melumpuhkan penyahpepijatan USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Kongsi laporan pepijat?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Berkongsi laporan pepijat…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Pentadbir IT anda meminta laporan pepijat untuk membantu menyelesaikan masalah peranti ini. Apl dan data mungkin dikongsi dan peranti anda mungkin menjadi perlahan untuk sementara waktu."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Pentadbir IT anda meminta laporan pepijat untuk membantu menyelesaikan masalah peranti ini. Apl dan data mungkin dikongsi."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Proses ini mungkin memperlahankan peranti anda untuk sementara waktu"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"TERIMA"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"TOLAK"</string> <string name="select_input_method" msgid="8547250819326693584">"Tukar papan kekunci"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> dipilih</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> dipilih</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Pelbagai"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Anda menetapkan kepentingan pemberitahuan ini."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Anda menetapkan kepentingan pemberitahuan ini."</string> <string name="importance_from_person" msgid="9160133597262938296">"Mesej ini penting disebabkan orang yang terlibat."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Benarkan <xliff:g id="APP">%1$s</xliff:g> membuat Pengguna baharu dengan <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Benarkan <xliff:g id="APP">%1$s</xliff:g> membuat Pengguna baharu dengan <xliff:g id="ACCOUNT">%2$s</xliff:g> (Pengguna dengan akaun ini sudah wujud)?"</string> @@ -1561,7 +1554,7 @@ <string name="suspended_package_message" msgid="6341091587106868601">"Dilumpuhkan oleh pentadbir %1$s. Hubungi mereka untuk mengetahui lebih lanjut."</string> <string name="new_sms_notification_title" msgid="8442817549127555977">"Anda mempunyai mesej baharu"</string> <string name="new_sms_notification_content" msgid="7002938807812083463">"Buka apl SMS untuk melihat"</string> - <string name="user_encrypted_title" msgid="9054897468831672082">"Beberapa fungsi mungkin terhad"</string> + <string name="user_encrypted_title" msgid="9054897468831672082">"Sesetengah fungsi mungkin terhad"</string> <string name="user_encrypted_message" msgid="4923292604515744267">"Ketik untuk membuka kunci"</string> <string name="user_encrypted_detail" msgid="5708447464349420392">"Data pengguna dikunci"</string> <string name="profile_encrypted_detail" msgid="3700965619978314974">"Profil kerja dikunci"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Semat"</string> <string name="unpin_target" msgid="3556545602439143442">"Nyahsemat"</string> <string name="app_info" msgid="6856026610594615344">"Maklumat apl"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-my-rMM/strings.xml b/core/res/res/values-my-rMM/strings.xml index 6fe0c882666b..22fd8215a475 100644 --- a/core/res/res/values-my-rMM/strings.xml +++ b/core/res/res/values-my-rMM/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"ပုံသေအားဖြင့် ခေါ်ဆိုသူအိုင်ဒီ(Caller ID)အား ကန့်သတ်မထားပါ။ နောက်ထပ်အဝင်ခေါ်ဆိုမှု-ကန့်သတ်မထားပါ။"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"ဝန်ဆောင်မှုအား ကန့်သတ်မထားပါ"</string> <string name="CLIRPermanent" msgid="3377371145926835671">"သင်သည် ခေါ်ဆိုသူ ID ဆက်တင်ကို မပြောင်းလဲနိုင်ပါ။"</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"ဝင်ရောက်ကြည့်ရှုခြင်းကန့်သတ်ချက်အားပြောင်းထားသည်"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"ဒေတာဝန်ဆောင်မှုပိတ်ထားသည်။"</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"အရေးပေါ်ဝန်ဆောင်မှုပိတ်ထားသည်။"</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"အသံဝန်ဆောင်မှုပိတ်ထားသည်။"</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"အက်ပ်ကို ပြန်လည်ပြင်ဆင်သတ်မှတ်ပြီး ပြန်လည်စတင်ပါ"</string> <string name="aerr_report" msgid="5371800241488400617">"တုံ့ပြန်ချက်ပို့ပါ"</string> <string name="aerr_close" msgid="2991640326563991340">"ပိတ်ပါ"</string> - <string name="aerr_mute" msgid="7698966346654789433">"အသံတိတ်ပါ"</string> + <string name="aerr_mute" msgid="1974781923723235953">"စက်ပစ္စည်း ပြန်လည်စတင်သည့်တိုင် အသံတိတ်ပါ"</string> <string name="aerr_wait" msgid="3199956902437040261">"စောင့်ပါ"</string> <string name="aerr_close_app" msgid="3269334853724920302">"အက်ပ်ကိုပိတ်ပါ"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"ထပ်မံရွေးချယ်စရာများအတွက် ထိပါ"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB အမှားစစ်ခြင်းအား ချိတ်ဆက်ထားသည်"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB ဒီဘာဂင် ပိတ်ရန် ထိပါ။"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"ချွတ်ယွင်းချက် အစီရင်ခံစာကို မျှဝေမလား။"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"ချွတ်ယွင်းမှုအစီရင်ခံစာ မျှဝေနေသည်…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"ဤစက်ပစ္စည်းကို ပြဿနာအဖြေရှာရာတွင် ကူညီရန် သင့်အိုင်တီစီမံခန့်ခွဲသူသည် ချွတ်ယွင်းချက်အစီရင်ခံစာကို တောင်းဆိုထားသည်။ အက်ပ်များနှင့် ဒေတာကိုမျှဝေထားနိုင်ပြီး သင့်စက်ပစ္စည်းကို ခေတ္တနှေးကွေးသွားစေနိုင်သည်။"</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"ဤစက်ပစ္စည်းကို ပြဿနာအဖြေရှာရာတွင် ကူညီရန် သင့်အိုင်တီစီမံခန့်ခွဲသူသည် ချွတ်ယွင်းချက်အစီရင်ခံစာကို တောင်းဆိုထားသည်။ အက်ပ်များနှင့် ဒေတာကိုမျှဝေထားနိုင်ပါသည်။"</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"၎င်းသည်သင့်စက်ပစ္စည်းကို ခေတ္တနှေးကွေးသွားစေနိုင်သည်"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"လက်ခံပါ"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ငြင်းပယ်ပါ"</string> <string name="select_input_method" msgid="8547250819326693584">"ကီးဘုတ် ပြောင်းလဲရန်"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ရွေးချယ်ပြီးပါပြီ</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ရွေးချယ်ပြီးပါပြီ</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"အထွေထွေ"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"ဤအသိပေးချက်များ၏ အရေးပါမှုကိုသင်သတ်မှတ်ပြီးပါပြီ။"</string> + <string name="importance_from_user" msgid="7318955817386549931">"ဤသတိပေးချက်များ၏ အရေးပါမှုကိုသတ်မှတ်ပြီးပါပြီ။"</string> <string name="importance_from_person" msgid="9160133597262938296">"ပါဝင်သည့်လူများကြောင့် အရေးပါပါသည်။"</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g> ကို <xliff:g id="ACCOUNT">%2$s</xliff:g> ဖြင့်အသုံးပြုသူအသစ်ဖန်တီးခွင့်ပြုမလား။"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="APP">%1$s</xliff:g> ကို <xliff:g id="ACCOUNT">%2$s</xliff:g> ဖြင့်အသုံးပြုသူအသစ် ဖန်တီးခွင့်ပြုမလား (ဤအကောင့်ဖြင့် အသုံးပြုသူ ရှိနှင့်ပြီးဖြစ်သည်)။"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"တွဲပါ"</string> <string name="unpin_target" msgid="3556545602439143442">"ဖြုတ်ပါ"</string> <string name="app_info" msgid="6856026610594615344">"အက်ပ်အချက်အလက်"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml index 3c7bfe337769..44b55993dc31 100644 --- a/core/res/res/values-nb/strings.xml +++ b/core/res/res/values-nb/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Nummervisning er ikke begrenset som standard. Neste anrop: Ikke begrenset"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"SIM-kortet er ikke tilrettelagt for tjenesten."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Du kan ikke endre innstillingen for anrops-ID."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Tilgangsbegrensning endret"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Datatjenesten er blokkert."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Nødtjenesten er blokkert."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Taletjenesten er blokkert."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Tilbakestill appen, og start den på nytt"</string> <string name="aerr_report" msgid="5371800241488400617">"Send tilbakemelding"</string> <string name="aerr_close" msgid="2991640326563991340">"Lukk"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Ignorer"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Ignorer frem til enheten starter på nytt"</string> <string name="aerr_wait" msgid="3199956902437040261">"Vent"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Lukk app"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Trykk for å se flere alternativer."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-feilsøking tilkoblet"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Trykk for å slå av USB-feilsøking."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Vil du dele feilrapporten?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Deler feilrapporten …"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"IT-administratoren har bedt om en feilrapport for å hjelpe med feilsøkingen på denne enheten. Appene og dataene kan bli delt. Dette kan midlertidig gjøre enheten din tregere."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"IT-administratoren har bedt om en feilrapport for å hjelpe med feilsøkingen på denne enheten. Appene og dataene kan bli delt."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Dette kan midlertidig gjøre enheten din tregere"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"GODTA"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"AVSLÅ"</string> <string name="select_input_method" msgid="8547250819326693584">"Endre tastatur"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> er valgt</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> er valgt</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Diverse"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Du angir viktigheten for disse varslene."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Du angir viktigheten for disse varslene."</string> <string name="importance_from_person" msgid="9160133597262938296">"Dette er viktig på grunn av folkene som er involvert."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Vil du la <xliff:g id="APP">%1$s</xliff:g> opprette en ny bruker med <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Vil du la <xliff:g id="APP">%1$s</xliff:g> opprette en ny bruker med <xliff:g id="ACCOUNT">%2$s</xliff:g>? (Det finnes allerede en bruker med denne kontoen.)"</string> @@ -1573,4 +1566,6 @@ <string name="pin_target" msgid="3052256031352291362">"Fest"</string> <string name="unpin_target" msgid="3556545602439143442">"Løsne"</string> <string name="app_info" msgid="6856026610594615344">"Info om appen"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-ne-rNP/strings.xml b/core/res/res/values-ne-rNP/strings.xml index 3379af79e713..aa50778b7ecd 100644 --- a/core/res/res/values-ne-rNP/strings.xml +++ b/core/res/res/values-ne-rNP/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"कलर ID पूर्वनिर्धारितको लागि रोकावट छैन। अर्को कल: रोकावट छैन"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"सेवाको व्यवस्था छैन।"</string> <string name="CLIRPermanent" msgid="3377371145926835671">"तपाईँ कलर ID सेटिङ परिवर्तन गर्न सक्नुहुन्न।"</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"प्रतिबन्धित पहुँच परिवर्तन भएको छ"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"डेटा सेवा रोकिएको छ।"</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"आपतकालीन सेवा रोकिएको छ।"</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"भ्वाइस सेवा ब्लक भएको छ।"</string> @@ -923,7 +922,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"अनुप्रयोगलाई रिसेट गरी पुन: सुरु गर्नुहोस्"</string> <string name="aerr_report" msgid="5371800241488400617">"प्रतिक्रिया पठाउनुहोस्"</string> <string name="aerr_close" msgid="2991640326563991340">"बन्द गर्नुहोस्"</string> - <string name="aerr_mute" msgid="7698966346654789433">"म्यूट गर्नुहोस्"</string> + <string name="aerr_mute" msgid="1974781923723235953">"यन्त्र पुनः सुरु नभएसम्म म्यूट गर्नुहोस्"</string> <string name="aerr_wait" msgid="3199956902437040261">"पर्खनुहोस्"</string> <string name="aerr_close_app" msgid="3269334853724920302">"अनुप्रयोग बन्द गर्नुहोस्"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1059,16 +1058,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"थप विकल्पहरूका लागि छुनुहोस्।"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB डिबग गर्ने जडित छ"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB डिबग गर्ने असक्षम पार्न छुनुहोस्।"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"बग रिपोर्टलाई साझेदारी गर्ने हो?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"बग रिपोर्टलाई साझेदारी गर्दै ..."</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"तपाईंको IT प्रशासकले यो यन्त्रको समस्या निवारण गर्नमा मद्दत गर्न बग रिपोर्टहरूका लागि अनुरोध गर्नु भएको छ । अनुप्रयोगहरू र डेटा साझेदारी गर्न सकिन्छ र तपाईंको यन्त्र अस्थायी रूपमा सुस्त हुन सक्छ।"</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"तपाईंको IT प्रशासकले यो यन्त्रको समस्या निवारण गर्नमा मदत गर्न बग रिपोर्टहरूका लागि अनुरोध गर्नु भएको छ । Apps र डेटा साझेदारी गर्न सक्नुहुन्छ ।"</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"यसले अस्थायी रूपमा तपाईंको यन्त्रलाई सुस्त बनाउन सक्छ"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"स्वीकार गर्नुहोस्"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"अस्वीकार गर्नुहोस्"</string> <string name="select_input_method" msgid="8547250819326693584">"कुञ्जीपाटी परिवर्तन गर्नुहोस्"</string> @@ -1549,8 +1543,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> चयन गरियो</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> चयन गरियो</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"विविध"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"तपाईंले यी सूचनाहरूको महत्त्व सेट गर्नुहुन्छ।"</string> + <string name="importance_from_user" msgid="7318955817386549931">"तपाईंले यी सूचनाहरूको महत्त्व सेट गर्नुहोस् ।"</string> <string name="importance_from_person" msgid="9160133597262938296">"यसमा सङ्लग्न भएका मानिसहरूको कारणले गर्दा यो महत्वपूर्ण छ।"</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="ACCOUNT">%2$s</xliff:g> सँगै नयाँ प्रयोगकर्ता सिर्जना गर्न <xliff:g id="APP">%1$s</xliff:g> लाई अनुमति दिने हो?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="ACCOUNT">%2$s</xliff:g> सँगै नयाँ प्रयोगकर्ता सिर्जना गर्न <xliff:g id="APP">%1$s</xliff:g> लाई अनुमति दिने (यस खाताको प्रयोगकर्ता पहिले नै अवस्थित छ) ?"</string> @@ -1570,11 +1563,13 @@ <string name="user_encrypted_title" msgid="9054897468831672082">"केही कार्य सीमित हुनसक्छ"</string> <string name="user_encrypted_message" msgid="4923292604515744267">"अनलक गर्न ट्याप गर्नुहोस्"</string> <string name="user_encrypted_detail" msgid="5708447464349420392">"प्रयोगकर्ताको डेटा लक गरियो"</string> - <string name="profile_encrypted_detail" msgid="3700965619978314974">"कार्य प्रोफाइल बन्द भयो"</string> + <string name="profile_encrypted_detail" msgid="3700965619978314974">"कार्य प्रोफाइल लक भयो"</string> <string name="profile_encrypted_message" msgid="6964994232310195874">"कार्य प्रोफाइल अनलक गर्न ट्याप गर्नुहोस्"</string> <string name="usb_mtp_launch_notification_title" msgid="8359219638312208932">"<xliff:g id="PRODUCT_NAME">%1$s</xliff:g> मा जडान गरिएको छ"</string> <string name="usb_mtp_launch_notification_description" msgid="8541876176425411358">"फाइलहरू हेर्न ट्याप गर्नुहोस्"</string> <string name="pin_target" msgid="3052256031352291362">"पिन गर्नुहोस्"</string> <string name="unpin_target" msgid="3556545602439143442">"अनपिन गर्नुहोस्"</string> <string name="app_info" msgid="6856026610594615344">"अनुप्रयोगका बारे जानकारी"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml index ad987a21f4f4..5f0c12340437 100644 --- a/core/res/res/values-nl/strings.xml +++ b/core/res/res/values-nl/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Beller-id standaard ingesteld op \'onbeperkt\'. Volgende oproep: onbeperkt."</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Service niet voorzien."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"U kunt de instelling voor de beller-id niet wijzigen."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Beperkte toegang gewijzigd"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Gegevensservice is geblokkeerd."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Alarmservice is geblokkeerd."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Spraakservice is geblokkeerd."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"App resetten en opnieuw starten"</string> <string name="aerr_report" msgid="5371800241488400617">"Feedback verzenden"</string> <string name="aerr_close" msgid="2991640326563991340">"Sluiten"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Negeren"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Verbergen tot apparaat opnieuw wordt opgestart"</string> <string name="aerr_wait" msgid="3199956902437040261">"Wachten"</string> <string name="aerr_close_app" msgid="3269334853724920302">"App sluiten"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Tik voor meer opties."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-foutopsporing verbonden"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Tik om USB-foutopsporing uit te schakelen."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Bugrapport delen?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Bugrapport delen…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Je IT-beheerder heeft een bugrapport aangevraagd om problemen met dit apparaat op te lossen. Apps en gegevens kunnen worden gedeeld en je apparaat kan hierdoor tijdelijk worden vertraagd."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Je IT-beheerder heeft een bugrapport aangevraagd om problemen met dit apparaat op te lossen. Apps en gegevens kunnen worden gedeeld."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Dit kan je apparaat tijdelijk vertragen"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ACCEPTEREN"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"WEIGEREN"</string> <string name="select_input_method" msgid="8547250819326693584">"Toetsenbord wijzigen"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> geselecteerd</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> geselecteerd</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Diversen"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Je stelt het belang van deze meldingen in."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Je stelt het belang van deze meldingen in."</string> <string name="importance_from_person" msgid="9160133597262938296">"Dit is belangrijk vanwege de betrokken mensen."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Toestaan dat <xliff:g id="APP">%1$s</xliff:g> een nieuwe gebruiker met <xliff:g id="ACCOUNT">%2$s</xliff:g> maakt?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Toestaan dat <xliff:g id="APP">%1$s</xliff:g> een nieuwe gebruiker met <xliff:g id="ACCOUNT">%2$s</xliff:g> maakt (er is al een gebruiker met dit account)?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"Vastzetten"</string> <string name="unpin_target" msgid="3556545602439143442">"Losmaken"</string> <string name="app_info" msgid="6856026610594615344">"App-info"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-pa-rIN/strings.xml b/core/res/res/values-pa-rIN/strings.xml index be6ddde6b8a5..80edf518b7e9 100644 --- a/core/res/res/values-pa-rIN/strings.xml +++ b/core/res/res/values-pa-rIN/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"ਪ੍ਰਤਿਬੰਧਿਤ ਨਾ ਕਰਨ ਲਈ ਕਾਲਰ ID ਡਿਫੌਲਟਸ। ਅਗਲੀ ਕਾਲ: ਪ੍ਰਤਿਬੰਧਿਤ ਨਹੀਂ"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"ਸੇਵਾ ਪ੍ਰਬੰਧਿਤ ਨਹੀਂ ਹੈ।"</string> <string name="CLIRPermanent" msgid="3377371145926835671">"ਤੁਸੀਂ ਕਾਲਰ ID ਸੈਟਿੰਗ ਨਹੀਂ ਬਦਲ ਸਕਦੇ।"</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"ਪ੍ਰਤਿਬੰਧਿਤ ਪਹੁੰਚ ਬਦਲੀ ਗਈ"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"ਡਾਟਾ ਸੇਵਾ ਬਲੌਕ ਕੀਤੀ ਹੋਈ ਹੈ।"</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"ਐਮਰਜੈਂਸੀ ਸੇਵਾ ਬਲੌਕ ਕੀਤੀ ਹੋਈ ਹੈ।"</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"ਵੌਇਸ ਸੇਵਾ ਬਲੌਕ ਕੀਤੀ ਹੋਈ ਹੈ।"</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"ਐਪ ਨੂੰ ਰੀਸੈੱਟ ਅਤੇ ਮੁੜ-ਚਾਲੂ ਕਰੋ"</string> <string name="aerr_report" msgid="5371800241488400617">"ਪ੍ਰਤੀਕਰਮ ਭੇਜੋ"</string> <string name="aerr_close" msgid="2991640326563991340">"ਬੰਦ ਕਰੋ"</string> - <string name="aerr_mute" msgid="7698966346654789433">"ਮਿਊਟ ਕਰੋ"</string> + <string name="aerr_mute" msgid="1974781923723235953">"ਡੀਵਾਈਸ ਦੇ ਮੁੜ-ਚਾਲੂ ਹੋਣ ਤੱਕ ਮਿਊਟ ਕਰੋ"</string> <string name="aerr_wait" msgid="3199956902437040261">"ਉਡੀਕ ਕਰੋ"</string> <string name="aerr_close_app" msgid="3269334853724920302">"ਐਪ ਬੰਦ ਕਰੋ"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"ਹੋਰ ਵਿਕਲਪਾਂ ਲਈ ਸਪਰਸ਼ ਕਰੋ।"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ਡੀਬਗਿੰਗ ਕਨੈਕਟ ਕੀਤੀ"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB ਡੀਬਗਿੰਗ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਉਣ ਲਈ ਛੋਹਵੋ।"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"ਕੀ ਬੱਗ ਰਿਪੋਰਟ ਸਾਂਝੀ ਕਰਨੀ ਹੈ?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"ਬੱਗ ਰਿਪੋਰਟ ਸਾਂਝੀ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"ਤੁਹਾਡੇ IT ਪ੍ਰਸ਼ਾਸਕ ਨੇ ਇਸ ਡੀਵਾਈਸ ਦੀ ਸਮੱਸਿਆ ਨੂੰ ਠੀਕ ਕਰਨ ਵਿੱਚ ਮਦਦ ਲਈ ਬੱਗ ਰਿਪੋਰਟ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ। ਐਪਾਂ ਅਤੇ ਡੈਟੇ ਨੂੰ ਸਾਂਝਾ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ ਅਤੇ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਆਰਜ਼ੀ ਤੌਰ \'ਤੇ ਹੌਲੀ ਹੋ ਸਕਦੀ ਹੈ।"</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"ਤੁਹਾਡੇ IT ਪ੍ਰਸ਼ਾਸਕ ਨੇ ਇਸ ਡੀਵਾਈਸ ਦੀ ਸਮੱਸਿਆ ਨੂੰ ਠੀਕ ਕਰਨ ਵਿੱੱਚ ਮਦਦ ਲਈ ਬੱਗ ਰਿਪੋਰਟ ਦੀ ਬੇਨਤੀ ਕੀਤੀ ਹੈ। ਐਪਾਂ ਅਤੇ ਡੈਟੇ ਨੂੰ ਸਾਂਝਾ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ।"</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"ਇਹ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਨੂੰ ਆਰਜ਼ੀ ਤੌਰ \'ਤੇ ਹੌਲੀ ਕਰ ਸਕਦਾ ਹੈ"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ਸਵੀਕਾਰ ਕਰੋ"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ਅਸਵੀਕਾਰ ਕਰੋ"</string> <string name="select_input_method" msgid="8547250819326693584">"ਕੀਬੋਰਡ ਬਦਲੋ"</string> @@ -1543,8 +1537,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ਚੁਣਿਆ ਗਿਆ</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ਚੁਣਿਆ ਗਿਆ</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"ਵਿਵਿਧ"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"ਤੁਸੀਂ ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਦੀ ਮਹੱਤਤਾ ਸੈੱਟ ਕੀਤੀ।"</string> + <string name="importance_from_user" msgid="7318955817386549931">"ਤੁਸੀਂ ਇਹਨਾਂ ਸੂਚਨਾਵਾਂ ਦੀ ਮਹੱਤਤਾ ਸੈੱਟ ਕੀਤੀ।"</string> <string name="importance_from_person" msgid="9160133597262938296">"ਇਹ ਸ਼ਾਮਲ ਲੋਕਾਂ ਦੇ ਕਾਰਨ ਮਹੱਤਵਪੂਰਨ ਹੈ।"</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"ਕੀ <xliff:g id="APP">%1$s</xliff:g> ਨੂੰ <xliff:g id="ACCOUNT">%2$s</xliff:g> ਨਾਲ ਇੱਕ ਨਵਾਂ ਵਰਤੋਂਕਾਰ ਬਣਾਉਣ ਦੀ ਮਨਜ਼ੂਰੀ ਦੇਣੀ ਹੈ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"ਕੀ <xliff:g id="APP">%1$s</xliff:g> ਨੂੰ <xliff:g id="ACCOUNT">%2$s</xliff:g> ਨਾਲ ਇੱਕ ਨਵਾਂ ਵਰਤੋਂਕਾਰ ਬਣਾਉਣ ਦੀ ਮਨਜ਼ੂਰੀ ਦੇਣੀ ਹੈ (ਇਸ ਖਾਤੇ ਨਾਲ ਇੱਕ ਵਰਤੋਂਕਾਰ ਪਹਿਲਾਂ ਤੋਂ ਹੀ ਮੌਜੂਦ ਹੈ) ?"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"ਪਿੰਨ ਕਰੋ"</string> <string name="unpin_target" msgid="3556545602439143442">"ਅਨਪਿੰਨ ਕਰੋ"</string> <string name="app_info" msgid="6856026610594615344">"ਐਪ ਜਾਣਕਾਰੀ"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml index 47008739a40a..968151c7415c 100644 --- a/core/res/res/values-pl/strings.xml +++ b/core/res/res/values-pl/strings.xml @@ -90,7 +90,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"ID rozmówcy ustawiony jest domyślnie na „nie zastrzeżony”. Następne połączenie: nie zastrzeżony"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Usługa nie jest świadczona."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Nie możesz zmienić ustawienia ID rozmówcy."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Zmieniono ograniczenie dostępu"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Usługa transmisji danych jest zablokowana."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Usługa połączeń alarmowych jest zablokowana."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Usługa głosowa jest zablokowana."</string> @@ -929,7 +928,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Zresetuj aplikację i uruchom ją ponownie"</string> <string name="aerr_report" msgid="5371800241488400617">"Prześlij opinię"</string> <string name="aerr_close" msgid="2991640326563991340">"Zamknij"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Ignoruj"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Ignoruj do momentu ponownego uruchomienia urządzenia"</string> <string name="aerr_wait" msgid="3199956902437040261">"Zaczekaj"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Zamknij aplikację"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1069,16 +1068,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Kliknij, by zobaczyć więcej opcji."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Podłączono moduł debugowania USB"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Dotknij, aby wyłączyć debugowanie USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Udostępnić raport o błędzie?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Udostępniam raport o błędzie…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Administrator poprosił o raport o błędzie, by szybciej rozwiązać problemy na tym urządzeniu. Raport może zawierać informacje o aplikacjach i inne dane. Urządzenie może przez chwilę działać wolniej."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Administrator poprosił o raport o błędzie, który pomoże w rozwiązaniu problemów na tym urządzeniu. Mogą zostać udostępnione aplikacje i dane."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Urządzenie może przez chwilę działać wolniej"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"AKCEPTUJ"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ODRZUĆ"</string> <string name="select_input_method" msgid="8547250819326693584">"Zmień klawiaturę"</string> @@ -1581,8 +1575,7 @@ <item quantity="other">Wybrano <xliff:g id="COUNT_1">%1$d</xliff:g></item> <item quantity="one">Wybrano <xliff:g id="COUNT_0">%1$d</xliff:g></item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Inne"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Ustawiłeś ważność tych powiadomień."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Ustawiłeś ważność tych powiadomień."</string> <string name="importance_from_person" msgid="9160133597262938296">"Ta wiadomość jest ważna ze względu na osoby uczestniczące w wątku."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Zezwalasz aplikacji <xliff:g id="APP">%1$s</xliff:g> na utworzenie nowego użytkownika dla konta <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Zezwalasz aplikacji <xliff:g id="APP">%1$s</xliff:g> na utworzenie nowego użytkownika dla konta <xliff:g id="ACCOUNT">%2$s</xliff:g>)? Użytkownik z tym kontem już istnieje."</string> @@ -1609,4 +1602,6 @@ <string name="pin_target" msgid="3052256031352291362">"Przypnij"</string> <string name="unpin_target" msgid="3556545602439143442">"Odepnij"</string> <string name="app_info" msgid="6856026610594615344">"O aplikacji"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml index 478165cd3523..434934fdbd41 100644 --- a/core/res/res/values-pt-rBR/strings.xml +++ b/core/res/res/values-pt-rBR/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"O ID do chamador assume o padrão de não restrito. Próxima chamada: Não restrita"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"O serviço não foi habilitado."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Não é possível alterar a configuração de identificação de chamadas."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Acesso restrito alterado"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"O serviço de dados está bloqueado."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"O serviço de emergência está bloqueado."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"O serviço de voz está bloqueado."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Redefinir e reiniciar app"</string> <string name="aerr_report" msgid="5371800241488400617">"Enviar feedback"</string> <string name="aerr_close" msgid="2991640326563991340">"Fechar"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Ignorar"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Desativar até que dispositivo seja reiniciado"</string> <string name="aerr_wait" msgid="3199956902437040261">"Aguarde"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Fechar app"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Toque para ver mais opções."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Depuração USB conectada"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Toque para desativar a depuração do USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Compartilhar relatório do bug?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Compartilhando relatório do bug…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Seu administrador de TI solicitou um relatório de bug para ajudar a resolver problemas deste dispositivo. É possível que apps e dados sejam compartilhados, o que pode deixar seu dispositivo temporariamente mais lento."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Seu administrador de TI solicitou um relatório de bug para ajudar a resolver problemas deste dispositivo. É possível que apps e dados sejam compartilhados."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Isso pode deixar seu dispositivo temporariamente mais lento"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ACEITAR"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"RECUSAR"</string> <string name="select_input_method" msgid="8547250819326693584">"Alterar teclado"</string> @@ -1543,8 +1537,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> selecionados</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> selecionados</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Diversos"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Você definiu a importância dessas notificações."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Você definiu a importância dessas notificações."</string> <string name="importance_from_person" msgid="9160133597262938296">"Isso é importante por causa das pessoas envolvidas."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Permitir que <xliff:g id="APP">%1$s</xliff:g> crie um novo usuário com <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Permitir que <xliff:g id="APP">%1$s</xliff:g> crie um novo usuário com <xliff:g id="ACCOUNT">%2$s</xliff:g> (já existe um usuário com essa conta)?"</string> @@ -1565,10 +1558,12 @@ <string name="user_encrypted_message" msgid="4923292604515744267">"Toque para desbloquear"</string> <string name="user_encrypted_detail" msgid="5708447464349420392">"Dados do usuário bloqueados"</string> <string name="profile_encrypted_detail" msgid="3700965619978314974">"Perfil de trabalho bloqueado"</string> - <string name="profile_encrypted_message" msgid="6964994232310195874">"Toque para desbloquear perfil de trabalho"</string> + <string name="profile_encrypted_message" msgid="6964994232310195874">"Toque p/ desbl. perfil de trab."</string> <string name="usb_mtp_launch_notification_title" msgid="8359219638312208932">"Conectado a <xliff:g id="PRODUCT_NAME">%1$s</xliff:g>"</string> <string name="usb_mtp_launch_notification_description" msgid="8541876176425411358">"Toque para ver os arquivos"</string> <string name="pin_target" msgid="3052256031352291362">"Fixar guia"</string> <string name="unpin_target" msgid="3556545602439143442">"Liberar guia"</string> <string name="app_info" msgid="6856026610594615344">"Informações do app"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml index 038bfe98a895..318afe431710 100644 --- a/core/res/res/values-pt-rPT/strings.xml +++ b/core/res/res/values-pt-rPT/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"ID do autor da chamada é predefinido com não restrito. Chamada seguinte: Não restrita"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Serviço não fornecido."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Não pode alterar a definição da identificação de chamadas."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Acesso restrito modificado"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"O serviço de dados está bloqueado."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"O serviço de emergência está bloqueado."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"O serviço de voz está bloqueado."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Repor e reiniciar aplicação"</string> <string name="aerr_report" msgid="5371800241488400617">"Enviar comentários"</string> <string name="aerr_close" msgid="2991640326563991340">"Fechar"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Ignorar"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Desativar som até o dispositivo reiniciar"</string> <string name="aerr_wait" msgid="3199956902437040261">"Aguardar"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Fechar aplicação"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Toque para ver mais opções."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Depuração USB ligada"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Toque para desat. a depuração USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Pretende partilhar o relatório de erro?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"A partilhar relatório de erro…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"O seu administrador de TI solicitou um relatório de erro para ajudar na resolução de problemas deste dispositivo. As aplicações e os dados podem ser partilhados e o dispositivo pode tornar-se temporariamente mais lento."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"O seu administrador de TI solicitou um relatório de erro para ajudar na resolução de problemas deste dispositivo. As aplicações e os dados podem ser partilhados."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Esta ação pode tornar o dispositivo mais lento temporariamente"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ACEITAR"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"RECUSAR"</string> <string name="select_input_method" msgid="8547250819326693584">"Alterar teclado"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> selecionados</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> selecionado</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Diversos"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Definiu a importância destas notificações."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Definiu a importância destas notificações."</string> <string name="importance_from_person" msgid="9160133597262938296">"É importante devido às pessoas envolvidas."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Pretende permitir que o <xliff:g id="APP">%1$s</xliff:g> crie um novo utilizador com <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Pretende permitir que o <xliff:g id="APP">%1$s</xliff:g> crie um novo utilizador com <xliff:g id="ACCOUNT">%2$s</xliff:g> (já existe um utilizador com esta conta)?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"Fixar"</string> <string name="unpin_target" msgid="3556545602439143442">"Soltar"</string> <string name="app_info" msgid="6856026610594615344">"Informações da aplicação"</string> + <string name="negative_duration" msgid="5688706061127375131">"-<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml index 478165cd3523..434934fdbd41 100644 --- a/core/res/res/values-pt/strings.xml +++ b/core/res/res/values-pt/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"O ID do chamador assume o padrão de não restrito. Próxima chamada: Não restrita"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"O serviço não foi habilitado."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Não é possível alterar a configuração de identificação de chamadas."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Acesso restrito alterado"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"O serviço de dados está bloqueado."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"O serviço de emergência está bloqueado."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"O serviço de voz está bloqueado."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Redefinir e reiniciar app"</string> <string name="aerr_report" msgid="5371800241488400617">"Enviar feedback"</string> <string name="aerr_close" msgid="2991640326563991340">"Fechar"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Ignorar"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Desativar até que dispositivo seja reiniciado"</string> <string name="aerr_wait" msgid="3199956902437040261">"Aguarde"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Fechar app"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Toque para ver mais opções."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Depuração USB conectada"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Toque para desativar a depuração do USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Compartilhar relatório do bug?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Compartilhando relatório do bug…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Seu administrador de TI solicitou um relatório de bug para ajudar a resolver problemas deste dispositivo. É possível que apps e dados sejam compartilhados, o que pode deixar seu dispositivo temporariamente mais lento."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Seu administrador de TI solicitou um relatório de bug para ajudar a resolver problemas deste dispositivo. É possível que apps e dados sejam compartilhados."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Isso pode deixar seu dispositivo temporariamente mais lento"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ACEITAR"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"RECUSAR"</string> <string name="select_input_method" msgid="8547250819326693584">"Alterar teclado"</string> @@ -1543,8 +1537,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> selecionados</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> selecionados</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Diversos"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Você definiu a importância dessas notificações."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Você definiu a importância dessas notificações."</string> <string name="importance_from_person" msgid="9160133597262938296">"Isso é importante por causa das pessoas envolvidas."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Permitir que <xliff:g id="APP">%1$s</xliff:g> crie um novo usuário com <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Permitir que <xliff:g id="APP">%1$s</xliff:g> crie um novo usuário com <xliff:g id="ACCOUNT">%2$s</xliff:g> (já existe um usuário com essa conta)?"</string> @@ -1565,10 +1558,12 @@ <string name="user_encrypted_message" msgid="4923292604515744267">"Toque para desbloquear"</string> <string name="user_encrypted_detail" msgid="5708447464349420392">"Dados do usuário bloqueados"</string> <string name="profile_encrypted_detail" msgid="3700965619978314974">"Perfil de trabalho bloqueado"</string> - <string name="profile_encrypted_message" msgid="6964994232310195874">"Toque para desbloquear perfil de trabalho"</string> + <string name="profile_encrypted_message" msgid="6964994232310195874">"Toque p/ desbl. perfil de trab."</string> <string name="usb_mtp_launch_notification_title" msgid="8359219638312208932">"Conectado a <xliff:g id="PRODUCT_NAME">%1$s</xliff:g>"</string> <string name="usb_mtp_launch_notification_description" msgid="8541876176425411358">"Toque para ver os arquivos"</string> <string name="pin_target" msgid="3052256031352291362">"Fixar guia"</string> <string name="unpin_target" msgid="3556545602439143442">"Liberar guia"</string> <string name="app_info" msgid="6856026610594615344">"Informações do app"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml index f70782238656..e85ee2dbe2be 100644 --- a/core/res/res/values-ro/strings.xml +++ b/core/res/res/values-ro/strings.xml @@ -45,7 +45,7 @@ <string name="defaultVoiceMailAlphaTag" msgid="2660020990097733077">"Mesaj vocal"</string> <string name="defaultMsisdnAlphaTag" msgid="2850889754919584674">"MSISDN1"</string> <string name="mmiError" msgid="5154499457739052907">"Problemă de conexiune sau cod MMI nevalid."</string> - <string name="mmiFdnError" msgid="5224398216385316471">"Operația este limitată la numerele cu apelări restricţionate."</string> + <string name="mmiFdnError" msgid="5224398216385316471">"Operația este limitată la numerele cu apelări restricționate."</string> <string name="serviceEnabled" msgid="8147278346414714315">"Serviciul a fost activat."</string> <string name="serviceEnabledFor" msgid="6856228140453471041">"Serviciul a fost activat pentru:"</string> <string name="serviceDisabled" msgid="1937553226592516411">"Serviciul a fost dezactivat."</string> @@ -56,9 +56,9 @@ <string name="badPin" msgid="9015277645546710014">"Codul PIN vechi introdus nu este corect."</string> <string name="badPuk" msgid="5487257647081132201">"Codul PUK introdus nu este corect."</string> <string name="mismatchPin" msgid="609379054496863419">"Codurile PIN introduse nu se potrivesc."</string> - <string name="invalidPin" msgid="3850018445187475377">"Introduceţi un cod PIN alcătuit din 4 până la 8 cifre."</string> - <string name="invalidPuk" msgid="8761456210898036513">"Introduceţi un cod PUK care să aibă 8 cifre sau mai mult."</string> - <string name="needPuk" msgid="919668385956251611">"Cardul SIM este blocat cu codul PUK. Introduceţi codul PUK pentru a-l debloca."</string> + <string name="invalidPin" msgid="3850018445187475377">"Introduceți un cod PIN alcătuit din 4 până la 8 cifre."</string> + <string name="invalidPuk" msgid="8761456210898036513">"Introduceți un cod PUK care să aibă 8 cifre sau mai mult."</string> + <string name="needPuk" msgid="919668385956251611">"Cardul SIM este blocat cu codul PUK. Introduceți codul PUK pentru a-l debloca."</string> <string name="needPuk2" msgid="4526033371987193070">"Introduceți codul PUK2 pentru a debloca cardul SIM."</string> <string name="enablePin" msgid="209412020907207950">"Operațiunea nu a reușit. Activați blocarea cardului SIM/RUIM."</string> <plurals name="pinpuk_attempts" formatted="false" msgid="1251012001539225582"> @@ -78,18 +78,17 @@ <string name="PwdMmi" msgid="7043715687905254199">"Modificare parolă"</string> <string name="PinMmi" msgid="3113117780361190304">"Cod PIN modificat"</string> <string name="CnipMmi" msgid="3110534680557857162">"Se apelează numărul prezent"</string> - <string name="CnirMmi" msgid="3062102121430548731">"Se apelează un număr restricţionat"</string> + <string name="CnirMmi" msgid="3062102121430548731">"Se apelează un număr restricționat"</string> <string name="ThreeWCMmi" msgid="9051047170321190368">"Apelare de tip conferință"</string> <string name="RuacMmi" msgid="7827887459138308886">"Respingere apeluri supărătoare nedorite"</string> <string name="CndMmi" msgid="3116446237081575808">"Se apelează serviciul de furnizare a numerelor"</string> <string name="DndMmi" msgid="1265478932418334331">"Nu deranjați"</string> - <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"ID-ul apelantului este restricţionat în mod prestabilit. Apelul următor: restricţionat"</string> + <string name="CLIRDefaultOnNextCallOn" msgid="429415409145781923">"ID-ul apelantului este restricționat în mod prestabilit. Apelul următor: restricționat"</string> <string name="CLIRDefaultOnNextCallOff" msgid="3092918006077864624">"ID-ul apelantului este restricționat în mod prestabilit. Apelul următor: nerestricționat"</string> <string name="CLIRDefaultOffNextCallOn" msgid="6179425182856418465">"ID-ul apelantului este nerestricționat în mod prestabilit. Apelul următor: Restricționat."</string> <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"ID-ul apelantului este nerestricționat în mod prestabilit. Apelul următor: nerestricționat"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Nu se asigură accesul la acest serviciu."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Nu puteți să modificați setarea pentru ID-ul apelantului."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Acces restricționat modificat"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Serviciul de date este blocat."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Serviciul de urgență este blocat."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Serviciul de voce este blocat."</string> @@ -119,8 +118,8 @@ <string name="roamingText6" msgid="2059440825782871513">"Roaming - sistem disponibil"</string> <string name="roamingText7" msgid="7112078724097233605">"Roaming - partenerAlliance"</string> <string name="roamingText8" msgid="5989569778604089291">"Roaming - partener Premium"</string> - <string name="roamingText9" msgid="7969296811355152491">"Roaming - funcţionalitate completă a serviciului"</string> - <string name="roamingText10" msgid="3992906999815316417">"Roaming - funcţionalitate parțială a serviciului"</string> + <string name="roamingText9" msgid="7969296811355152491">"Roaming - funcționalitate completă a serviciului"</string> + <string name="roamingText10" msgid="3992906999815316417">"Roaming - funcționalitate parțială a serviciului"</string> <string name="roamingText11" msgid="4154476854426920970">"Banner roaming activat"</string> <string name="roamingText12" msgid="1189071119992726320">"Banner roaming dezactivat"</string> <string name="roamingTextSearching" msgid="8360141885972279963">"Se caută serviciul"</string> @@ -155,13 +154,13 @@ <string name="httpErrorUnsupportedScheme" msgid="5015730812906192208">"Protocolul nu este acceptat."</string> <string name="httpErrorFailedSslHandshake" msgid="96549606000658641">"Nu s-a putut stabili o conexiune securizată."</string> <string name="httpErrorBadUrl" msgid="3636929722728881972">"Pagina nu a putut fi deschisă, deoarece adresa URL nu este validă."</string> - <string name="httpErrorFile" msgid="2170788515052558676">"Fişierul nu a putut fi accesat."</string> - <string name="httpErrorFileNotFound" msgid="6203856612042655084">"Nu s-a putut găsi fişierul solicitat."</string> + <string name="httpErrorFile" msgid="2170788515052558676">"Fișierul nu a putut fi accesat."</string> + <string name="httpErrorFileNotFound" msgid="6203856612042655084">"Nu s-a putut găsi fișierul solicitat."</string> <string name="httpErrorTooManyRequests" msgid="1235396927087188253">"Există prea multe solicitări în curs de procesare. Încercați din nou mai târziu."</string> <string name="notification_title" msgid="8967710025036163822">"Eroare de conectare pentru <xliff:g id="ACCOUNT">%1$s</xliff:g>"</string> <string name="contentServiceSync" msgid="8353523060269335667">"Sincronizare"</string> <string name="contentServiceSyncNotificationTitle" msgid="397743349191901458">"Sincronizare"</string> - <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Prea multe ştergeri <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string> + <string name="contentServiceTooManyDeletesNotificationDesc" msgid="8100981435080696431">"Prea multe ștergeri <xliff:g id="CONTENT_TYPE">%s</xliff:g>."</string> <string name="low_memory" product="tablet" msgid="6494019234102154896">"Stocarea pe tabletă este plină. Ștergeți câteva fișiere pentru a elibera spațiu."</string> <string name="low_memory" product="watch" msgid="4415914910770005166">"Spațiul de stocare de pe ceas este plin! Ștergeți câteva fișiere pentru a elibera spațiu."</string> <string name="low_memory" product="tv" msgid="516619861191025923">"Spațiul de stocare al televizorului este plin. Ștergeți câteva fișiere pentru a elibera spațiu."</string> @@ -177,9 +176,9 @@ <string name="factory_reset_warning" msgid="5423253125642394387">"Datele de pe dispozitiv vor fi șterse"</string> <string name="factory_reset_message" msgid="4905025204141900666">"Aplicația de administrare nu poate fi utilizată, deoarece este deteriorată sau îi lipsesc componente. Datele de pe dispozitiv vor fi șterse. Pentru asistență, contactați administratorul."</string> <string name="me" msgid="6545696007631404292">"Eu"</string> - <string name="power_dialog" product="tablet" msgid="8545351420865202853">"Opţiuni tablet PC"</string> + <string name="power_dialog" product="tablet" msgid="8545351420865202853">"Opțiuni tablet PC"</string> <string name="power_dialog" product="tv" msgid="6153888706430556356">"Opțiuni TV"</string> - <string name="power_dialog" product="default" msgid="1319919075463988638">"Opţiuni telefon"</string> + <string name="power_dialog" product="default" msgid="1319919075463988638">"Opțiuni telefon"</string> <string name="silent_mode" msgid="7167703389802618663">"Mod Silențios"</string> <string name="turn_on_radio" msgid="3912793092339962371">"Activați funcția wireless"</string> <string name="turn_off_radio" msgid="8198784949987062346">"Dezactivați funcția wireless"</string> @@ -200,11 +199,11 @@ <string name="shutdown_confirm" product="watch" msgid="3490275567476369184">"Ceasul dvs. se va închide."</string> <string name="shutdown_confirm" product="default" msgid="649792175242821353">"Telefonul dvs. se va închide."</string> <string name="shutdown_confirm_question" msgid="2906544768881136183">"Doriți să închideți?"</string> - <string name="reboot_safemode_title" msgid="7054509914500140361">"Reporniţi în modul sigur"</string> - <string name="reboot_safemode_confirm" msgid="55293944502784668">"Doriți să reporniţi în modul sigur? Astfel vor fi dezactivate toate aplicațiile terță parte pe care le-ați instalat. Acestea vor fi restabilite când reporniţi din nou."</string> + <string name="reboot_safemode_title" msgid="7054509914500140361">"Reporniți în modul sigur"</string> + <string name="reboot_safemode_confirm" msgid="55293944502784668">"Doriți să reporniți în modul sigur? Astfel vor fi dezactivate toate aplicațiile terță parte pe care le-ați instalat. Acestea vor fi restabilite când reporniți din nou."</string> <string name="recent_tasks_title" msgid="3691764623638127888">"Recente"</string> <string name="no_recent_tasks" msgid="8794906658732193473">"Nu există aplicații recente."</string> - <string name="global_actions" product="tablet" msgid="408477140088053665">"Opţiuni tablet PC"</string> + <string name="global_actions" product="tablet" msgid="408477140088053665">"Opțiuni tablet PC"</string> <string name="global_actions" product="tv" msgid="7240386462508182976">"Opțiuni TV"</string> <string name="global_actions" product="default" msgid="2406416831541615258">"Opțiuni telefon"</string> <string name="global_action_lock" msgid="2844945191792119712">"Blocați ecranul"</string> @@ -281,30 +280,30 @@ <string name="permdesc_uninstall_shortcut" msgid="6745743474265057975">"Permite aplicației să elimine comenzi rapide de pe ecranul de pornire, fără intervenția utilizatorului."</string> <string name="permlab_processOutgoingCalls" msgid="3906007831192990946">"redirecționează apelurile efectuate"</string> <string name="permdesc_processOutgoingCalls" msgid="5156385005547315876">"Permite aplicației să vadă numărul format în timpul unui apel de ieșire, cu opțiunea de a redirecționa apelul către un alt număr sau de a întrerupe apelul."</string> - <string name="permlab_receiveSms" msgid="8673471768947895082">"primeşte mesaje text (SMS)"</string> + <string name="permlab_receiveSms" msgid="8673471768947895082">"primește mesaje text (SMS)"</string> <string name="permdesc_receiveSms" msgid="6424387754228766939">"Permite aplicației să primească și să proceseze mesaje SMS. Acest lucru înseamnă că aplicația ar putea monitoriza sau șterge mesajele trimise pe dispozitivul dvs. fără a vi le arăta."</string> - <string name="permlab_receiveMms" msgid="1821317344668257098">"primeşte mesaje text (MMS)"</string> + <string name="permlab_receiveMms" msgid="1821317344668257098">"primește mesaje text (MMS)"</string> <string name="permdesc_receiveMms" msgid="533019437263212260">"Permite aplicației să primească și să proceseze mesaje MMS. Acest lucru înseamnă că aplicația ar putea monitoriza sau șterge mesajele trimise pe dispozitivul dvs. fără a vi le arăta."</string> <string name="permlab_readCellBroadcasts" msgid="1598328843619646166">"citește mesajele cu transmisie celulară"</string> - <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Permite aplicației să citească mesajele primite prin transmisie celulară de dispozitivul dvs. Alertele cu transmisie celulară sunt difuzate în unele locații pentru a vă avertiza cu privire la situațiile de urgenţă. Aplicațiile rău intenţionate pot afecta performanța sau funcționarea dispozitivului dvs. când este primită o transmisie celulară de urgenţă."</string> + <string name="permdesc_readCellBroadcasts" msgid="6361972776080458979">"Permite aplicației să citească mesajele primite prin transmisie celulară de dispozitivul dvs. Alertele cu transmisie celulară sunt difuzate în unele locații pentru a vă avertiza cu privire la situațiile de urgență. Aplicațiile rău intenționate pot afecta performanța sau funcționarea dispozitivului dvs. când este primită o transmisie celulară de urgență."</string> <string name="permlab_subscribedFeedsRead" msgid="4756609637053353318">"citire feeduri abonat"</string> - <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Permite aplicației să obţină detalii despre feedurile sincronizate în prezent."</string> + <string name="permdesc_subscribedFeedsRead" msgid="5557058907906144505">"Permite aplicației să obțină detalii despre feedurile sincronizate în prezent."</string> <string name="permlab_sendSms" msgid="7544599214260982981">"trimită și să vadă mesajele SMS"</string> - <string name="permdesc_sendSms" msgid="7094729298204937667">"Permite aplicației să trimită mesaje SMS, ceea ce ar putea determina apariția unor taxe neașteptate. Aplicațiile rău intenţionate pot acumula costuri prin trimiterea mesajelor fără confirmarea dvs."</string> + <string name="permdesc_sendSms" msgid="7094729298204937667">"Permite aplicației să trimită mesaje SMS, ceea ce ar putea determina apariția unor taxe neașteptate. Aplicațiile rău intenționate pot acumula costuri prin trimiterea mesajelor fără confirmarea dvs."</string> <string name="permlab_readSms" msgid="8745086572213270480">"citește mesajele text (SMS sau MMS)"</string> - <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"Permite aplicației să citească mesajele SMS stocate pe tabletă sau pe cardul SIM. În acest fel, aplicația poate citi toate mesajele SMS, indiferent de conţinutul sau de gradul de confidențialitate al acestora."</string> + <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"Permite aplicației să citească mesajele SMS stocate pe tabletă sau pe cardul SIM. În acest fel, aplicația poate citi toate mesajele SMS, indiferent de conținutul sau de gradul de confidențialitate al acestora."</string> <string name="permdesc_readSms" product="tv" msgid="5102425513647038535">"Permite aplicației să citească mesajele SMS stocate pe televizor sau pe cardul SIM. Cu această permisiune, aplicația poate citi toate mesajele SMS, indiferent de conținutul sau de gradul de confidențialitate al acestora."</string> - <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"Permite aplicației să citească mesajele SMS stocate pe telefon sau pe cardul SIM. În acest fel, aplicația poate citi toate mesajele SMS, indiferent de conţinutul sau de gradul de confidențialitate al acestora."</string> - <string name="permlab_receiveWapPush" msgid="5991398711936590410">"primeşte mesaje text (WAP)"</string> + <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"Permite aplicației să citească mesajele SMS stocate pe telefon sau pe cardul SIM. În acest fel, aplicația poate citi toate mesajele SMS, indiferent de conținutul sau de gradul de confidențialitate al acestora."</string> + <string name="permlab_receiveWapPush" msgid="5991398711936590410">"primește mesaje text (WAP)"</string> <string name="permdesc_receiveWapPush" msgid="748232190220583385">"Permite aplicației să primească și să proceseze mesaje WAP. Această permisiune include capacitatea de a monitoriza sau șterge mesajele care v-au fost trimise fără a vi le arăta."</string> <string name="permlab_getTasks" msgid="6466095396623933906">"preluare aplicații care rulează"</string> - <string name="permdesc_getTasks" msgid="7454215995847658102">"Permite aplicației să preia informațiile despre activităţile care rulează în prezent și care au rulat recent. În acest fel, aplicația poate descoperi informații despre aplicațiile care sunt utilizate pe dispozitiv."</string> + <string name="permdesc_getTasks" msgid="7454215995847658102">"Permite aplicației să preia informațiile despre activitățile care rulează în prezent și care au rulat recent. În acest fel, aplicația poate descoperi informații despre aplicațiile care sunt utilizate pe dispozitiv."</string> <string name="permlab_manageProfileAndDeviceOwners" msgid="7918181259098220004">"să gestioneze profilul și proprietarii dispozitivului"</string> <string name="permdesc_manageProfileAndDeviceOwners" msgid="106894851498657169">"Permite aplicațiilor să seteze proprietarii de profiluri și proprietarul dispozitivului."</string> <string name="permlab_reorderTasks" msgid="2018575526934422779">"reordonare aplicații care rulează"</string> - <string name="permdesc_reorderTasks" msgid="7734217754877439351">"Permite aplicației să mute activităţile în prim-plan și în fundal. Aplicația poate face acest lucru fără aportul dvs."</string> - <string name="permlab_enableCarMode" msgid="5684504058192921098">"activare mod Maşină"</string> - <string name="permdesc_enableCarMode" msgid="4853187425751419467">"Permite aplicației să activeze modul Maşină."</string> + <string name="permdesc_reorderTasks" msgid="7734217754877439351">"Permite aplicației să mute activitățile în prim-plan și în fundal. Aplicația poate face acest lucru fără aportul dvs."</string> + <string name="permlab_enableCarMode" msgid="5684504058192921098">"activare mod Mașină"</string> + <string name="permdesc_enableCarMode" msgid="4853187425751419467">"Permite aplicației să activeze modul Mașină."</string> <string name="permlab_killBackgroundProcesses" msgid="3914026687420177202">"închide alte aplicații"</string> <string name="permdesc_killBackgroundProcesses" msgid="4593353235959733119">"Permite aplicației să oprească procesele derulate în fundal de alte aplicații. Acest lucru poate face ca respectivele aplicații să nu mai ruleze."</string> <string name="permlab_systemAlertWindow" msgid="3543347980839518613">"suprapune elemente vizuale peste alte aplicații"</string> @@ -316,7 +315,7 @@ <string name="permlab_getPackageSize" msgid="7472921768357981986">"măsurare spațiu de stocare al aplicației"</string> <string name="permdesc_getPackageSize" msgid="3921068154420738296">"Permite aplicației să preia dimensiunile codului, ale datelor și ale memoriei cache"</string> <string name="permlab_writeSettings" msgid="2226195290955224730">"modifică setări de sistem"</string> - <string name="permdesc_writeSettings" msgid="7775723441558907181">"Permite aplicației să modifice datele din setările sistemului. Aplicațiile rău intenţionate pot corupe configuraţia sistemului dvs."</string> + <string name="permdesc_writeSettings" msgid="7775723441558907181">"Permite aplicației să modifice datele din setările sistemului. Aplicațiile rău intenționate pot corupe configurația sistemului dvs."</string> <string name="permlab_receiveBootCompleted" msgid="5312965565987800025">"rulează la pornire"</string> <string name="permdesc_receiveBootCompleted" product="tablet" msgid="7390304664116880704">"Permite aplicației să pornească imediat ce s-a terminat încărcarea sistemului. Din acest motiv, pornirea tabletei poate dura mai mult timp, iar rularea continuă a aplicației poate încetini dispozitivul."</string> <string name="permdesc_receiveBootCompleted" product="tv" msgid="4525890122209673621">"Permite aplicației să pornească imediat ce s-a terminat încărcarea sistemului. Din acest motiv, pornirea televizorului poate dura mai mult timp, iar funcționarea continuă a aplicației poate încetini televizorul."</string> @@ -326,27 +325,27 @@ <string name="permdesc_broadcastSticky" product="tv" msgid="6839285697565389467">"Permite aplicației să trimită mesaje difuzate persistente, care se păstrează după terminarea difuzării mesajului. Utilizarea excesivă a acestei funcții poate să încetinească sau să destabilizeze televizorul, determinându-l să utilizeze prea multă memorie."</string> <string name="permdesc_broadcastSticky" product="default" msgid="2825803764232445091">"Permite aplicației să trimită mesaje difuzate persistente, care se păstrează după terminarea difuzării mesajului. Utilizarea excesivă a acestei funcții poate să încetinească sau să destabilizeze telefonul, determinându-l să utilizeze prea multă memorie."</string> <string name="permlab_readContacts" msgid="8348481131899886131">"citește agenda"</string> - <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"Permite aplicației să citească datele despre persoanele din agenda stocată pe tabletă, inclusiv frecvența cu care ați apelat, ați trimis e-mailuri sau ați comunicat în alte moduri cu anumite persoane. Cu această permisiune aplicația salvează datele dvs. de contact, iar aplicațiile rău intenţionate pot distribui datele de contact fără știrea dvs."</string> + <string name="permdesc_readContacts" product="tablet" msgid="5294866856941149639">"Permite aplicației să citească datele despre persoanele din agenda stocată pe tabletă, inclusiv frecvența cu care ați apelat, ați trimis e-mailuri sau ați comunicat în alte moduri cu anumite persoane. Cu această permisiune aplicația salvează datele dvs. de contact, iar aplicațiile rău intenționate pot distribui datele de contact fără știrea dvs."</string> <string name="permdesc_readContacts" product="tv" msgid="1839238344654834087">"Permite aplicației să citească datele despre persoanele de contact salvate pe televizor, inclusiv frecvența cu care ați apelat, ați trimis e-mailuri sau ați comunicat în alte moduri cu anumite persoane. Cu această permisiune, aplicațiile pot salva datele de contact, iar aplicațiile rău-intenționate pot permite accesul la datele de contact fără cunoștința dvs."</string> - <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"Permite aplicației să citească datele despre persoanele din agenda stocată pe telefon, inclusiv frecvența cu care ați apelat, ați trimis e-mailuri sau ați comunicat în alte moduri cu anumite persoane. Cu această permisiune aplicația salvează datele dvs. de contact, iar aplicațiile rău intenţionate pot distribui datele de contact fără știrea dvs."</string> + <string name="permdesc_readContacts" product="default" msgid="8440654152457300662">"Permite aplicației să citească datele despre persoanele din agenda stocată pe telefon, inclusiv frecvența cu care ați apelat, ați trimis e-mailuri sau ați comunicat în alte moduri cu anumite persoane. Cu această permisiune aplicația salvează datele dvs. de contact, iar aplicațiile rău intenționate pot distribui datele de contact fără știrea dvs."</string> <string name="permlab_writeContacts" msgid="5107492086416793544">"modifică agenda"</string> <string name="permdesc_writeContacts" product="tablet" msgid="897243932521953602">"Permite aplicației să modifice datele despre persoanele din agenda stocată pe tabletă, inclusiv frecvența cu care ați apelat, ați trimis e-mailuri sau ați comunicat în alte moduri cu anumite persoane din agendă. Cu această permisiune aplicația poate șterge datele de contact."</string> <string name="permdesc_writeContacts" product="tv" msgid="5438230957000018959">"Permite aplicației să modifice datele despre persoanele de contact salvate pe televizor, inclusiv frecvența cu care ați apelat, ați trimis e-mailuri sau ați comunicat în alte moduri cu anumite persoane de contact. Cu această permisiune, aplicația poate șterge datele de contact."</string> <string name="permdesc_writeContacts" product="default" msgid="589869224625163558">"Permite aplicației să modifice datele despre persoanele din agenda stocată pe telefon, inclusiv frecvența cu care ați apelat, ați trimis e-mailuri sau ați comunicat în alte moduri cu anumite persoane din agendă. Cu această permisiune aplicația poate șterge datele de contact."</string> <string name="permlab_readCallLog" msgid="3478133184624102739">"citește jurnalul de apeluri"</string> - <string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"Permite aplicației să citească jurnalul de apeluri al tabletei, inclusiv datele despre apelurile primite și efectuate. Cu această permisiune aplicația salvează datele dvs. din jurnalul de apeluri, iar aplicațiile rău intenţionate pot distribui aceste date fără știrea dvs."</string> + <string name="permdesc_readCallLog" product="tablet" msgid="3700645184870760285">"Permite aplicației să citească jurnalul de apeluri al tabletei, inclusiv datele despre apelurile primite și efectuate. Cu această permisiune aplicația salvează datele dvs. din jurnalul de apeluri, iar aplicațiile rău intenționate pot distribui aceste date fără știrea dvs."</string> <string name="permdesc_readCallLog" product="tv" msgid="5611770887047387926">"Permite aplicației să citească jurnalul de apeluri al televizorului, inclusiv datele despre apelurile primite și efectuate. Cu această permisiune, aplicațiile pot să salveze datele din jurnalul de apeluri, iar aplicațiile rău-intenționate pot permite accesul la datele din jurnalul de apeluri fără cunoștința dvs."</string> - <string name="permdesc_readCallLog" product="default" msgid="5777725796813217244">"Permite aplicației să citească jurnalul de apeluri al telefonului, inclusiv datele despre apelurile primite și efectuate. Cu această permisiune aplicația salvează datele dvs. din jurnalul de apeluri, iar aplicațiile rău intenţionate pot distribui aceste date fără știrea dvs."</string> + <string name="permdesc_readCallLog" product="default" msgid="5777725796813217244">"Permite aplicației să citească jurnalul de apeluri al telefonului, inclusiv datele despre apelurile primite și efectuate. Cu această permisiune aplicația salvează datele dvs. din jurnalul de apeluri, iar aplicațiile rău intenționate pot distribui aceste date fără știrea dvs."</string> <string name="permlab_writeCallLog" msgid="8552045664743499354">"scrie jurnalul de apeluri"</string> - <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"Permite aplicației să modifice jurnalul de apeluri al tabletei dvs., inclusiv datele despre apelurile primite sau efectuate. Aplicațiile rău intenţionate pot utiliza această permisiune pentru a șterge sau pentru a modifica jurnalul dvs. de apeluri."</string> + <string name="permdesc_writeCallLog" product="tablet" msgid="6661806062274119245">"Permite aplicației să modifice jurnalul de apeluri al tabletei dvs., inclusiv datele despre apelurile primite sau efectuate. Aplicațiile rău intenționate pot utiliza această permisiune pentru a șterge sau pentru a modifica jurnalul dvs. de apeluri."</string> <string name="permdesc_writeCallLog" product="tv" msgid="4225034892248398019">"Permite aplicației să modifice jurnalul de apeluri al televizorului, inclusiv datele despre apelurile primite sau efectuate. Aplicațiile rău-intenționate pot utiliza această permisiune pentru a șterge sau pentru a modifica jurnalul de apeluri."</string> - <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Permite aplicației să modifice jurnalul de apeluri al telefonului dvs., inclusiv datele despre apelurile primite sau efectuate. Aplicațiile rău intenţionate pot utiliza această permisiune pentru a șterge sau pentru a modifica jurnalul dvs. de apeluri."</string> + <string name="permdesc_writeCallLog" product="default" msgid="683941736352787842">"Permite aplicației să modifice jurnalul de apeluri al telefonului dvs., inclusiv datele despre apelurile primite sau efectuate. Aplicațiile rău intenționate pot utiliza această permisiune pentru a șterge sau pentru a modifica jurnalul dvs. de apeluri."</string> <string name="permlab_bodySensors" msgid="4683341291818520277">"să acceseze senzorii corporali (cum ar fi monitoarele cardiace)"</string> <string name="permdesc_bodySensors" product="default" msgid="4380015021754180431">"Permite aplicației să acceseze date de la senzorii care vă monitorizează starea fizică, cum ar fi ritmul cardiac."</string> - <string name="permlab_readCalendar" msgid="5972727560257612398">"citirea evenimentelor din calendar și a informațiilor confidenţiale"</string> - <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"Permite aplicației să citească toate evenimentele din calendar stocate pe tabletă, inclusiv cele ale prietenilor sau colegilor. Acest lucru poate permite aplicației să distribuie sau să salveze datele din calendar, indiferent dacă acestea sunt confidenţiale sau sensibile."</string> + <string name="permlab_readCalendar" msgid="5972727560257612398">"citirea evenimentelor din calendar și a informațiilor confidențiale"</string> + <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"Permite aplicației să citească toate evenimentele din calendar stocate pe tabletă, inclusiv cele ale prietenilor sau colegilor. Acest lucru poate permite aplicației să distribuie sau să salveze datele din calendar, indiferent dacă acestea sunt confidențiale sau sensibile."</string> <string name="permdesc_readCalendar" product="tv" msgid="3191352452242394196">"Permite aplicației să citească toate evenimentele din calendar stocate pe televizor, inclusiv cele ale prietenilor sau colegilor. Cu această permisiune, aplicația poate să permită accesul la datele din calendar sau să le salveze, indiferent dacă acestea sunt confidențiale sau sensibile."</string> - <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"Permite aplicației să citească toate evenimentele din calendar stocate pe telefon, inclusiv cele ale prietenilor sau colegilor. Acest lucru poate permite aplicației să distribuie sau să salveze datele din calendar, indiferent dacă acestea sunt confidenţiale sau sensibile."</string> + <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"Permite aplicației să citească toate evenimentele din calendar stocate pe telefon, inclusiv cele ale prietenilor sau colegilor. Acest lucru poate permite aplicației să distribuie sau să salveze datele din calendar, indiferent dacă acestea sunt confidențiale sau sensibile."</string> <string name="permlab_writeCalendar" msgid="8438874755193825647">"adăugarea sau modificarea evenimentelor din calendar și trimiterea de e-mailuri invitaților fără știrea proprietarului"</string> <string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"Permite aplicației să adauge, să elimine și să modifice evenimentele pe care le puteți modifica pe tabletă, inclusiv cele ale prietenilor sau colegilor dvs. În acest fel, aplicația poate trimite mesaje care par să vină de la proprietarii calendarelor sau să modifice evenimentele fără știrea proprietarilor."</string> <string name="permdesc_writeCalendar" product="tv" msgid="1273290605500902507">"Permite aplicației să adauge, să elimine și să modifice evenimentele pe care le puteți modifica pe televizor, inclusiv pe cele ale prietenilor sau ale colegilor. Cu această permisiune, aplicația poate să trimită mesaje care par că vin din partea proprietarilor calendarului sau să modifice evenimentele fără cunoștința acestora."</string> @@ -354,9 +353,9 @@ <string name="permlab_accessLocationExtraCommands" msgid="2836308076720553837">"accesare comenzi suplimentare ale furnizorului locației"</string> <string name="permdesc_accessLocationExtraCommands" msgid="6078307221056649927">"Permite aplicației să acceseze comenzi suplimentare pentru furnizorul locației. Aplicația ar putea să utilizeze această permisiune pentru a influența operațiile GPS sau ale altor surse de locații."</string> <string name="permlab_accessFineLocation" msgid="251034415460950944">"să acceseze locația exactă (bazată pe GPS și pe rețea)"</string> - <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"Permite aplicației să obţină locația dvs. exactă utilizând sistemul GPS (Global Positioning System) sau surse de localizare prin rețele, cum ar fi cele prin turn de celule și Wi-Fi. Pentru a fi utilizate de aplicație, aceste servicii de localizare trebuie să fie activate și disponibile pe dispozitivul dvs. Aplicațiile pot utiliza această permisiune pentru a determina locația dvs. și pot să consume mai multă energie a bateriei."</string> + <string name="permdesc_accessFineLocation" msgid="5295047563564981250">"Permite aplicației să obțină locația dvs. exactă utilizând sistemul GPS (Global Positioning System) sau surse de localizare prin rețele, cum ar fi cele prin turn de celule și Wi-Fi. Pentru a fi utilizate de aplicație, aceste servicii de localizare trebuie să fie activate și disponibile pe dispozitivul dvs. Aplicațiile pot utiliza această permisiune pentru a determina locația dvs. și pot să consume mai multă energie a bateriei."</string> <string name="permlab_accessCoarseLocation" msgid="7715277613928539434">"să acceseze locația aproximativă (bazată pe rețea)"</string> - <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"Permite aplicației să obţină locația dvs. aproximativă. Această locație este dedusă de serviciile de localizare utilizând surse de localizare prin rețele, cum ar fi cele prin turn de celule și Wi-Fi. Pentru a fi utilizate de aplicație, aceste servicii de localizare trebuie să fie activate și disponibile pe dispozitivul dvs. Aplicațiile pot utiliza această permisiune pentru a determina locația dvs. aproximativă."</string> + <string name="permdesc_accessCoarseLocation" msgid="2538200184373302295">"Permite aplicației să obțină locația dvs. aproximativă. Această locație este dedusă de serviciile de localizare utilizând surse de localizare prin rețele, cum ar fi cele prin turn de celule și Wi-Fi. Pentru a fi utilizate de aplicație, aceste servicii de localizare trebuie să fie activate și disponibile pe dispozitivul dvs. Aplicațiile pot utiliza această permisiune pentru a determina locația dvs. aproximativă."</string> <string name="permlab_modifyAudioSettings" msgid="6095859937069146086">"modificare setări audio"</string> <string name="permdesc_modifyAudioSettings" msgid="3522565366806248517">"Permite aplicației să modifice setările audio globale, cum ar fi volumul și difuzorul care este utilizat pentru ieșire."</string> <string name="permlab_recordAudio" msgid="3876049771427466323">"înregistreze sunet"</string> @@ -368,11 +367,11 @@ <string name="permlab_vibrate" msgid="7696427026057705834">"controlează vibrarea"</string> <string name="permdesc_vibrate" msgid="6284989245902300945">"Permite aplicației să controleze mecanismul de vibrare."</string> <string name="permlab_callPhone" msgid="3925836347681847954">"apelare directă numere de telefon"</string> - <string name="permdesc_callPhone" msgid="3740797576113760827">"Permite aplicației să apeleze numere de telefon fără intervenţia dvs. Acest lucru poate determina apariția unor taxe sau a unor apeluri neașteptate. Cu această permisiune aplicația nu poate apela numerele de urgenţă. Aplicațiile rău intenţionate pot acumula costuri prin efectuarea unor apeluri fără confirmare."</string> + <string name="permdesc_callPhone" msgid="3740797576113760827">"Permite aplicației să apeleze numere de telefon fără intervenția dvs. Acest lucru poate determina apariția unor taxe sau a unor apeluri neașteptate. Cu această permisiune aplicația nu poate apela numerele de urgență. Aplicațiile rău intenționate pot acumula costuri prin efectuarea unor apeluri fără confirmare."</string> <string name="permlab_accessImsCallService" msgid="3574943847181793918">"accesează serviciul de apelare IMS"</string> <string name="permdesc_accessImsCallService" msgid="8992884015198298775">"Permite aplicației să folosească serviciul IMS pentru apeluri, fără intervenția dvs."</string> <string name="permlab_readPhoneState" msgid="9178228524507610486">"citește starea și identitatea telefonului"</string> - <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permite aplicației să acceseze funcţiile de telefon ale dispozitivului. Cu această permisiune aplicația stabilește numărul de telefon și ID-urile de dispozitiv, dacă un apel este activ, precum și numărul de la distanță conectat printr-un apel."</string> + <string name="permdesc_readPhoneState" msgid="1639212771826125528">"Permite aplicației să acceseze funcțiile de telefon ale dispozitivului. Cu această permisiune aplicația stabilește numărul de telefon și ID-urile de dispozitiv, dacă un apel este activ, precum și numărul de la distanță conectat printr-un apel."</string> <string name="permlab_wakeLock" product="tablet" msgid="1531731435011495015">"împiedicarea computerului tablet PC să intre în repaus"</string> <string name="permlab_wakeLock" product="tv" msgid="2601193288949154131">"împiedică intrarea televizorului în stare de inactivitate"</string> <string name="permlab_wakeLock" product="default" msgid="573480187941496130">"împiedicare intrare telefon în repaus"</string> @@ -392,11 +391,11 @@ <string name="permdesc_setTimeZone" product="tv" msgid="888864653946175955">"Permite aplicației să modifice fusul orar al televizorului."</string> <string name="permdesc_setTimeZone" product="default" msgid="4499943488436633398">"Permite aplicației să schimbe fusul orar al telefonului."</string> <string name="permlab_getAccounts" msgid="1086795467760122114">"găsește conturi pe dispozitiv"</string> - <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"Permite aplicației să obţină lista de conturi cunoscute de tabletă. Aceasta poate include conturile create de aplicațiile pe care le-ați instalat."</string> + <string name="permdesc_getAccounts" product="tablet" msgid="2741496534769660027">"Permite aplicației să obțină lista de conturi cunoscute de tabletă. Aceasta poate include conturile create de aplicațiile pe care le-ați instalat."</string> <string name="permdesc_getAccounts" product="tv" msgid="4190633395633907543">"Permite aplicației să obțină lista de conturi cunoscute de televizor. Aceasta poate include conturile create de aplicațiile pe care le-ați instalat."</string> - <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"Permite aplicației să obţină lista de conturi cunoscute de telefon. Aceasta poate include conturile create de aplicațiile pe care le-ați instalat."</string> + <string name="permdesc_getAccounts" product="default" msgid="3448316822451807382">"Permite aplicației să obțină lista de conturi cunoscute de telefon. Aceasta poate include conturile create de aplicațiile pe care le-ați instalat."</string> <string name="permlab_accessNetworkState" msgid="4951027964348974773">"vizualizează conexiunile la rețea"</string> - <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"Permite aplicației să vadă informațiile despre conexiunile la rețea, cum ar fi reţelele existente și cele care sunt conectate."</string> + <string name="permdesc_accessNetworkState" msgid="8318964424675960975">"Permite aplicației să vadă informațiile despre conexiunile la rețea, cum ar fi rețelele existente și cele care sunt conectate."</string> <string name="permlab_createNetworkSockets" msgid="7934516631384168107">"să aibă acces deplin la rețea"</string> <string name="permdesc_createNetworkSockets" msgid="3403062187779724185">"Permite aplicației să creeze socluri de rețea și să utilizeze protocoale de rețea personalizate. Browserul și alte aplicații oferă mijloacele de trimitere a datelor pe internet, astfel încât această permisiune nu este necesară pentru trimiterea datelor pe internet."</string> <string name="permlab_changeNetworkState" msgid="958884291454327309">"modificare conectivitate în rețea"</string> @@ -404,9 +403,9 @@ <string name="permlab_changeTetherState" msgid="5952584964373017960">"modificare conectivitate tethering"</string> <string name="permdesc_changeTetherState" msgid="1524441344412319780">"Permite aplicației să modifice starea de conectivitate prin tethering la rețea."</string> <string name="permlab_accessWifiState" msgid="5202012949247040011">"vizualizează conexiunile Wi-Fi"</string> - <string name="permdesc_accessWifiState" msgid="5002798077387803726">"Permite aplicației să vadă informațiile despre reţelele Wi-Fi, de ex. dacă o rețea Wi-Fi este activată, precum și numele dispozitivelor conectate la rețeaua Wi-Fi."</string> + <string name="permdesc_accessWifiState" msgid="5002798077387803726">"Permite aplicației să vadă informațiile despre rețelele Wi-Fi, de ex. dacă o rețea Wi-Fi este activată, precum și numele dispozitivelor conectate la rețeaua Wi-Fi."</string> <string name="permlab_changeWifiState" msgid="6550641188749128035">"se conectează și se deconectează de la Wi-Fi"</string> - <string name="permdesc_changeWifiState" msgid="7137950297386127533">"Permite aplicației să se conecteze și să se deconecteze de la punctele de acces Wi-Fi, precum și să efectueze modificări în configuraţia dispozitivului pentru reţelele Wi-Fi."</string> + <string name="permdesc_changeWifiState" msgid="7137950297386127533">"Permite aplicației să se conecteze și să se deconecteze de la punctele de acces Wi-Fi, precum și să efectueze modificări în configurația dispozitivului pentru rețelele Wi-Fi."</string> <string name="permlab_changeWifiMulticastState" msgid="1368253871483254784">"permitere recepționare difuzare multiplă Wi-Fi"</string> <string name="permdesc_changeWifiMulticastState" product="tablet" msgid="7969774021256336548">"Permite aplicației să primească pachetele trimise către toate dispozitivele dintr-o rețea Wi-Fi, utilizând adrese cu difuzare multiplă, nu doar tableta dvs. Această funcție utilizează mai multă energie decât modul fără difuzare multiplă."</string> <string name="permdesc_changeWifiMulticastState" product="tv" msgid="9031975661145014160">"Permite aplicației să primească pachetele trimise către toate dispozitivele dintr-o rețea Wi-Fi, utilizând adrese cu difuzare multiplă, nu doar televizorul dvs. Această funcție utilizează mai multă energie decât modul fără difuzare multiplă."</string> @@ -416,19 +415,19 @@ <string name="permdesc_bluetoothAdmin" product="tv" msgid="3373125682645601429">"Permite aplicației să configureze televizorul Bluetooth local, precum și să descopere și să se asocieze cu dispozitive la distanță."</string> <string name="permdesc_bluetoothAdmin" product="default" msgid="8931682159331542137">"Permite aplicației să configureze telefonul Bluetooth local, să descopere și să se împerecheze cu dispozitive la distanță."</string> <string name="permlab_accessWimaxState" msgid="4195907010610205703">"se conectează și se deconectează de la WiMAX"</string> - <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Permite aplicației să stabilească dacă o rețea WiMAX este activată și să vadă informațiile cu privire la toate reţelele WiMAX conectate."</string> + <string name="permdesc_accessWimaxState" msgid="6360102877261978887">"Permite aplicației să stabilească dacă o rețea WiMAX este activată și să vadă informațiile cu privire la toate rețelele WiMAX conectate."</string> <string name="permlab_changeWimaxState" msgid="340465839241528618">"schimbați starea WiMAX"</string> - <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Permite aplicației să conecteze și să deconecteze tableta la și de la reţelele WiMAX."</string> + <string name="permdesc_changeWimaxState" product="tablet" msgid="3156456504084201805">"Permite aplicației să conecteze și să deconecteze tableta la și de la rețelele WiMAX."</string> <string name="permdesc_changeWimaxState" product="tv" msgid="6022307083934827718">"Permite aplicației să conecteze și să deconecteze televizorul la și de la rețelele WiMAX."</string> - <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Permite aplicației să conecteze și să deconecteze telefonul la și de la reţelele WiMAX."</string> + <string name="permdesc_changeWimaxState" product="default" msgid="697025043004923798">"Permite aplicației să conecteze și să deconecteze telefonul la și de la rețelele WiMAX."</string> <string name="permlab_bluetooth" msgid="6127769336339276828">"conectează dispozitive Bluetooth"</string> - <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Permite aplicației să vadă configuraţia tabletei Bluetooth, să efectueze și să accepte conexiuni cu dispozitive împerecheate."</string> + <string name="permdesc_bluetooth" product="tablet" msgid="3480722181852438628">"Permite aplicației să vadă configurația tabletei Bluetooth, să efectueze și să accepte conexiuni cu dispozitive împerecheate."</string> <string name="permdesc_bluetooth" product="tv" msgid="3974124940101104206">"Permite aplicației să vadă configurația funcției Bluetooth a televizorului, precum și să efectueze și să accepte conexiuni cu dispozitive asociate."</string> - <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Permite aplicației să vadă configuraţia telefonului Bluetooth, să efectueze și să accepte conexiuni cu dispozitive împerecheate."</string> + <string name="permdesc_bluetooth" product="default" msgid="3207106324452312739">"Permite aplicației să vadă configurația telefonului Bluetooth, să efectueze și să accepte conexiuni cu dispozitive împerecheate."</string> <string name="permlab_nfc" msgid="4423351274757876953">"controlare schimb de date prin Near Field Communication"</string> <string name="permdesc_nfc" msgid="7120611819401789907">"Permite aplicației să comunice cu etichetele, cardurile și cititoarele NFC (Near Field Communication)."</string> <string name="permlab_disableKeyguard" msgid="3598496301486439258">"dezactivează blocarea ecranului"</string> - <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"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."</string> + <string name="permdesc_disableKeyguard" msgid="6034203065077122992">"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."</string> <string name="permlab_manageFingerprint" msgid="5640858826254575638">"gestionează hardware-ul pentru amprentă"</string> <string name="permdesc_manageFingerprint" msgid="178208705828055464">"Permite aplicației să invoce metode pentru a adăuga și pentru a șterge șabloane de amprentă pentru utilizare."</string> <string name="permlab_useFingerprint" msgid="3150478619915124905">"folosește hardware-ul pentru amprentă"</string> @@ -456,12 +455,12 @@ <string name="permdesc_writeSyncSettings" msgid="8956262591306369868">"Permite unei aplicații să modifice setările de sincronizare ale unui cont. De exemplu, cu această permisiune aplicația poate activa sincronizarea aplicației Persoane cu un anumit cont."</string> <string name="permlab_readSyncStats" msgid="7396577451360202448">"citire statistici privind sincronizarea"</string> <string name="permdesc_readSyncStats" msgid="1510143761757606156">"Permite unei aplicații să citească statisticile de sincronizare ale unui cont, inclusiv istoricul evenimentelor de sincronizare și volumul datelor sincronizate."</string> - <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"citește conţinutul stocării USB"</string> - <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"citește conţinutul cardului SD"</string> + <string name="permlab_sdcardRead" product="nosdcard" msgid="367275095159405468">"citește conținutul stocării USB"</string> + <string name="permlab_sdcardRead" product="default" msgid="2188156462934977940">"citește conținutul cardului SD"</string> <string name="permdesc_sdcardRead" product="nosdcard" msgid="3446988712598386079">"Permite aplic. citirea conținutului stoc. USB."</string> <string name="permdesc_sdcardRead" product="default" msgid="2607362473654975411">"Permite aplicației citirea conținutul cardului SD."</string> - <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"modifică sau șterge conţinutul stocării USB"</string> - <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"modifică sau șterge conţinutul cardului SD"</string> + <string name="permlab_sdcardWrite" product="nosdcard" msgid="8485979062254666748">"modifică sau șterge conținutul stocării USB"</string> + <string name="permlab_sdcardWrite" product="default" msgid="8805693630050458763">"modifică sau șterge conținutul cardului SD"</string> <string name="permdesc_sdcardWrite" product="nosdcard" msgid="6175406299445710888">"Permite scriere în stoc. USB."</string> <string name="permdesc_sdcardWrite" product="default" msgid="4337417790936632090">"Permite aplicației să scrie pe cardul SD."</string> <string name="permlab_use_sip" msgid="2052499390128979920">"efectuarea/primirea apelurilor SIP"</string> @@ -483,7 +482,7 @@ <string name="permlab_manageNetworkPolicy" msgid="2562053592339859990">"gestionează politica de rețea"</string> <string name="permdesc_manageNetworkPolicy" msgid="7537586771559370668">"Permite aplicației să gestioneze politicile de rețea și să definească regulile specifice aplicațiilor."</string> <string name="permlab_modifyNetworkAccounting" msgid="5088217309088729650">"modificați modul de calcul al utilizării rețelei"</string> - <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"Permite aplicației să modifice modul în care este calculată utilizarea rețelei pentru aplicații. Nu se utilizează de aplicațiile obişnuite."</string> + <string name="permdesc_modifyNetworkAccounting" msgid="5443412866746198123">"Permite aplicației să modifice modul în care este calculată utilizarea rețelei pentru aplicații. Nu se utilizează de aplicațiile obișnuite."</string> <string name="permlab_accessNotifications" msgid="7673416487873432268">"accesare notificări"</string> <string name="permdesc_accessNotifications" msgid="458457742683431387">"Permite aplicației să recupereze, să examineze și să șteargă notificări, inclusiv pe cele postate de alte aplicații."</string> <string name="permlab_bindNotificationListenerService" msgid="7057764742211656654">"conectare la un serviciu de citire a notificărilor"</string> @@ -513,7 +512,7 @@ <string name="policylab_limitPassword" msgid="4497420728857585791">"Setați reguli pentru parolă"</string> <string name="policydesc_limitPassword" msgid="2502021457917874968">"Stabiliți lungimea și tipul de caractere permise pentru parolele și codurile PIN de blocare a ecranului."</string> <string name="policylab_watchLogin" msgid="914130646942199503">"Monitorizați încercările de deblocare a ecranului"</string> - <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Monitorizați numărul de parole incorecte introduse la deblocarea ecranului și blocaţi tableta sau ștergeți datele acesteia dacă sunt introduse prea multe parole incorecte."</string> + <string name="policydesc_watchLogin" product="tablet" msgid="3215729294215070072">"Monitorizați numărul de parole incorecte introduse la deblocarea ecranului și blocați tableta sau ștergeți datele acesteia dacă sunt introduse prea multe parole incorecte."</string> <string name="policydesc_watchLogin" product="TV" msgid="2707817988309890256">"Monitorizați numărul de parole incorecte introduse la deblocarea ecranului și blocați televizorul sau ștergeți toate datele acestuia dacă sunt introduse prea multe parole incorecte."</string> <string name="policydesc_watchLogin" product="default" msgid="5712323091846761073">"Monitorizați numărul de parole incorecte introduse la deblocarea ecranului și blocați telefonul sau ștergeți toate datele acestuia dacă sunt introduse prea multe parole incorecte."</string> <string name="policydesc_watchLogin_secondaryUser" product="tablet" msgid="4280246270601044505">"Monitorizați numărul de parole incorecte introduse la deblocarea ecranului și blocați tableta sau ștergeți toate datele acestui utilizator dacă se introduc prea multe parole incorecte."</string> @@ -593,7 +592,7 @@ <string name="phoneTypePager" msgid="7582359955394921732">"Pager"</string> <string name="phoneTypeOther" msgid="1544425847868765990">"Altele"</string> <string name="phoneTypeCallback" msgid="2712175203065678206">"Apelare inversă"</string> - <string name="phoneTypeCar" msgid="8738360689616716982">"Maşină"</string> + <string name="phoneTypeCar" msgid="8738360689616716982">"Mașină"</string> <string name="phoneTypeCompanyMain" msgid="540434356461478916">"Numărul de telefon principal al companiei"</string> <string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string> <string name="phoneTypeMain" msgid="6766137010628326916">"Număr de telefon principal"</string> @@ -606,7 +605,7 @@ <string name="phoneTypeAssistant" msgid="5596772636128562884">"Asistent"</string> <string name="phoneTypeMms" msgid="7254492275502768992">"MMS"</string> <string name="eventTypeCustom" msgid="7837586198458073404">"Personalizate"</string> - <string name="eventTypeBirthday" msgid="2813379844211390740">"Zi de naştere"</string> + <string name="eventTypeBirthday" msgid="2813379844211390740">"Zi de naștere"</string> <string name="eventTypeAnniversary" msgid="3876779744518284000">"Zi aniversară"</string> <string name="eventTypeOther" msgid="7388178939010143077">"Altul"</string> <string name="emailTypeCustom" msgid="8525960257804213846">"Personalizat"</string> @@ -655,13 +654,13 @@ <string name="sipAddressTypeWork" msgid="6920725730797099047">"Serviciu"</string> <string name="sipAddressTypeOther" msgid="4408436162950119849">"Altul"</string> <string name="quick_contacts_not_available" msgid="746098007828579688">"Nu s-a găsit nicio aplicație pentru a afișa această persoană de contact."</string> - <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Introduceţi codul PIN"</string> - <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Introduceţi codul PUK și noul cod PIN"</string> + <string name="keyguard_password_enter_pin_code" msgid="3037685796058495017">"Introduceți codul PIN"</string> + <string name="keyguard_password_enter_puk_code" msgid="4800725266925845333">"Introduceți codul PUK și noul cod PIN"</string> <string name="keyguard_password_enter_puk_prompt" msgid="1341112146710087048">"Codul PUK"</string> <string name="keyguard_password_enter_pin_prompt" msgid="8027680321614196258">"Noul cod PIN"</string> - <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Atingeți și introduceţi parola"</font></string> - <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Introduceţi parola pentru a debloca"</string> - <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Introduceţi codul PIN pentru a debloca"</string> + <string name="keyguard_password_entry_touch_hint" msgid="7858547464982981384"><font size="17">"Atingeți și introduceți parola"</font></string> + <string name="keyguard_password_enter_password_code" msgid="1054721668279049780">"Introduceți parola pentru a debloca"</string> + <string name="keyguard_password_enter_pin_password_code" msgid="6391755146112503443">"Introduceți codul PIN pentru a debloca"</string> <string name="keyguard_password_wrong_pin_code" msgid="2422225591006134936">"Cod PIN incorect."</string> <string name="keyguard_label_text" msgid="861796461028298424">"Pentru a debloca, apăsați Meniu, apoi 0."</string> <string name="emergency_call_dialog_number_for_display" msgid="696192103195090970">"Număr de urgență"</string> @@ -669,43 +668,43 @@ <string name="lockscreen_screen_locked" msgid="7288443074806832904">"Ecranul este blocat."</string> <string name="lockscreen_instructions_when_pattern_enabled" msgid="46154051614126049">"Apăsați Meniu pentru a debloca sau pentru a efectua apeluri de urgență."</string> <string name="lockscreen_instructions_when_pattern_disabled" msgid="686260028797158364">"Apăsați Meniu pentru deblocare."</string> - <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Desenaţi modelul pentru a debloca"</string> + <string name="lockscreen_pattern_instructions" msgid="7478703254964810302">"Desenați modelul pentru a debloca"</string> <string name="lockscreen_emergency_call" msgid="5298642613417801888">"Urgență"</string> - <string name="lockscreen_return_to_call" msgid="5244259785500040021">"Reveniţi la apel"</string> + <string name="lockscreen_return_to_call" msgid="5244259785500040021">"Reveniți la apel"</string> <string name="lockscreen_pattern_correct" msgid="9039008650362261237">"Corect!"</string> <string name="lockscreen_pattern_wrong" msgid="4317955014948108794">"Încercați din nou"</string> <string name="lockscreen_password_wrong" msgid="5737815393253165301">"Încercați din nou"</string> - <string name="faceunlock_multiple_failures" msgid="754137583022792429">"S-a depăşit numărul maxim de încercări pentru Deblocare facială"</string> + <string name="faceunlock_multiple_failures" msgid="754137583022792429">"S-a depășit numărul maxim de încercări pentru Deblocare facială"</string> <string name="lockscreen_missing_sim_message_short" msgid="5099439277819215399">"Niciun card SIM"</string> <string name="lockscreen_missing_sim_message" product="tablet" msgid="151659196095791474">"Nu există card SIM în computerul tablet PC."</string> <string name="lockscreen_missing_sim_message" product="tv" msgid="1943633865476989599">"Niciun card SIM în televizor."</string> <string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"Telefonul nu are card SIM."</string> - <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Introduceţi un card SIM."</string> - <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Cardul SIM lipsește sau nu poate fi citit. Introduceţi un card SIM."</string> + <string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Introduceți un card SIM."</string> + <string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"Cardul SIM lipsește sau nu poate fi citit. Introduceți un card SIM."</string> <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Card SIM inutilizabil."</string> - <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Cardul dvs. SIM este dezactivat definitiv.\n Contactaţi furnizorul de servicii wireless pentru a obţine un alt card SIM."</string> + <string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Cardul dvs. SIM este dezactivat definitiv.\n Contactați furnizorul de servicii wireless pentru a obține un alt card SIM."</string> <string name="lockscreen_transport_prev_description" msgid="6300840251218161534">"Melodia anterioară"</string> <string name="lockscreen_transport_next_description" msgid="573285210424377338">"Melodia următoare"</string> <string name="lockscreen_transport_pause_description" msgid="3980308465056173363">"Pauză"</string> <string name="lockscreen_transport_play_description" msgid="1901258823643886401">"Redați"</string> <string name="lockscreen_transport_stop_description" msgid="5907083260651210034">"Opriți"</string> - <string name="lockscreen_transport_rew_description" msgid="6944412838651990410">"Derulaţi"</string> - <string name="lockscreen_transport_ffw_description" msgid="42987149870928985">"Derulaţi rapid înainte"</string> + <string name="lockscreen_transport_rew_description" msgid="6944412838651990410">"Derulați"</string> + <string name="lockscreen_transport_ffw_description" msgid="42987149870928985">"Derulați rapid înainte"</string> <string name="emergency_calls_only" msgid="6733978304386365407">"Numai apeluri de urgență"</string> <string name="lockscreen_network_locked_message" msgid="143389224986028501">"Rețea blocată"</string> <string name="lockscreen_sim_puk_locked_message" msgid="7441797339976230">"Cardul SIM este blocat cu codul PUK."</string> - <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"Consultați Ghidul de utilizare sau contactaţi Serviciul de relații cu clienții."</string> + <string name="lockscreen_sim_puk_locked_instructions" msgid="8127916255245181063">"Consultați Ghidul de utilizare sau contactați Serviciul de relații cu clienții."</string> <string name="lockscreen_sim_locked_message" msgid="8066660129206001039">"Cardul SIM este blocat."</string> <string name="lockscreen_sim_unlock_progress_dialog_message" msgid="595323214052881264">"Se deblochează cardul SIM..."</string> <string name="lockscreen_too_many_failed_attempts_dialog_message" msgid="6481623830344107222">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. \n\nÎncercați din nou peste <xliff:g id="NUMBER_1">%2$d</xliff:g> (de) secunde."</string> <string name="lockscreen_too_many_failed_password_attempts_dialog_message" msgid="2725973286239344555">"Ați introdus incorect parola de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. \n\nÎncercați din nou peste <xliff:g id="NUMBER_1">%2$d</xliff:g> (de) secunde."</string> <string name="lockscreen_too_many_failed_pin_attempts_dialog_message" msgid="6216672706545696955">"Ați introdus incorect codul PIN de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori.\n\nÎncercați din nou peste <xliff:g id="NUMBER_1">%2$d</xliff:g> (de) secunde."</string> - <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereuşite, vi se va solicita să deblocați tableta cu ajutorul datelor de conectare la Google.\n\n Încercați din nou peste <xliff:g id="NUMBER_2">%3$d</xliff:g> (de) secunde."</string> + <string name="lockscreen_failed_attempts_almost_glogin" product="tablet" msgid="9191611984625460820">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, vi se va solicita să deblocați tableta cu ajutorul datelor de conectare la Google.\n\n Încercați din nou peste <xliff:g id="NUMBER_2">%3$d</xliff:g> (de) secunde."</string> <string name="lockscreen_failed_attempts_almost_glogin" product="tv" msgid="5316664559603394684">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, vi se va solicita să deblocați televizorul cu ajutorul datelor de conectare la Google.\n\n Încercați din nou peste <xliff:g id="NUMBER_2">%3$d</xliff:g> (de) secunde."</string> - <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereuşite, vi se va solicita să deblocați telefonul cu ajutorul datelor de conectare la Google.\n\n Încercați din nou peste <xliff:g id="NUMBER_2">%3$d</xliff:g> (de) secunde."</string> - <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Ați efectuat <xliff:g id="NUMBER_0">%1$d</xliff:g> încercări incorecte de deblocare a tabletei. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereuşite, aceasta va fi resetată la setările prestabilite din fabrică, iar toate datele de utilizator vor fi pierdute."</string> + <string name="lockscreen_failed_attempts_almost_glogin" product="default" msgid="2590227559763762751">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, vi se va solicita să deblocați telefonul cu ajutorul datelor de conectare la Google.\n\n Încercați din nou peste <xliff:g id="NUMBER_2">%3$d</xliff:g> (de) secunde."</string> + <string name="lockscreen_failed_attempts_almost_at_wipe" product="tablet" msgid="6128106399745755604">"Ați efectuat <xliff:g id="NUMBER_0">%1$d</xliff:g> încercări incorecte de deblocare a tabletei. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, aceasta va fi resetată la setările prestabilite din fabrică, iar toate datele de utilizator vor fi pierdute."</string> <string name="lockscreen_failed_attempts_almost_at_wipe" product="tv" msgid="950408382418270260">"Ați efectuat <xliff:g id="NUMBER_0">%1$d</xliff:g> încercări incorecte de deblocare a televizorului. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, televizorul va reveni la setările prestabilite din fabrică, iar toate datele de utilizator se vor pierde."</string> - <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Ați efectuat <xliff:g id="NUMBER_0">%1$d</xliff:g> încercări incorecte de deblocare a telefonului. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereuşite, acesta va fi resetat la setările prestabilite din fabrică, iar toate datele de utilizator vor fi pierdute."</string> + <string name="lockscreen_failed_attempts_almost_at_wipe" product="default" msgid="8603565142156826565">"Ați efectuat <xliff:g id="NUMBER_0">%1$d</xliff:g> încercări incorecte de deblocare a telefonului. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, acesta va fi resetat la setările prestabilite din fabrică, iar toate datele de utilizator vor fi pierdute."</string> <string name="lockscreen_failed_attempts_now_wiping" product="tablet" msgid="280873516493934365">"Ați efectuat <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a tabletei. Tableta va fi acum resetată la setările prestabilite din fabrică."</string> <string name="lockscreen_failed_attempts_now_wiping" product="tv" msgid="3195755534096192191">"Ați efectuat <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a televizorului. Televizorul va reveni acum la setările prestabilite din fabrică."</string> <string name="lockscreen_failed_attempts_now_wiping" product="default" msgid="3025504721764922246">"Ați efectuat <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a telefonului. Acesta va fi acum resetat la setările prestabilite din fabrică."</string> @@ -713,14 +712,14 @@ <string name="lockscreen_forgot_pattern_button_text" msgid="2626999449610695930">"Ați uitat modelul?"</string> <string name="lockscreen_glogin_forgot_pattern" msgid="2588521501166032747">"Deblocare cont"</string> <string name="lockscreen_glogin_too_many_attempts" msgid="2751368605287288808">"Prea multe încercări de desenare a modelului"</string> - <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"Pentru a debloca, conectaţi-vă folosind Contul Google."</string> + <string name="lockscreen_glogin_instructions" msgid="3931816256100707784">"Pentru a debloca, conectați-vă folosind Contul Google."</string> <string name="lockscreen_glogin_username_hint" msgid="8846881424106484447">"Nume de utilizator (e-mail)"</string> <string name="lockscreen_glogin_password_hint" msgid="5958028383954738528">"Parolă"</string> <string name="lockscreen_glogin_submit_button" msgid="7130893694795786300">"Conectați-vă"</string> <string name="lockscreen_glogin_invalid_input" msgid="1364051473347485908">"Nume de utilizator sau parolă nevalide."</string> <string name="lockscreen_glogin_account_recovery_hint" msgid="1696924763690379073">"Ați uitat numele de utilizator sau parola?\nAccesați "<b>"google.com/accounts/recovery"</b>"."</string> <string name="lockscreen_glogin_checking_password" msgid="7114627351286933867">"Se verifică..."</string> - <string name="lockscreen_unlock_label" msgid="737440483220667054">"Deblocaţi"</string> + <string name="lockscreen_unlock_label" msgid="737440483220667054">"Deblocați"</string> <string name="lockscreen_sound_on_label" msgid="9068877576513425970">"Sunet activat"</string> <string name="lockscreen_sound_off_label" msgid="996822825154319026">"Sunet dezactivat"</string> <string name="lockscreen_access_pattern_start" msgid="3941045502933142847">"Desenarea modelului a început"</string> @@ -758,7 +757,7 @@ <string name="granularity_label_link" msgid="5815508880782488267">"link"</string> <string name="granularity_label_line" msgid="5764267235026120888">"rând"</string> <string name="factorytest_failed" msgid="5410270329114212041">"Testarea de fabrică nu a reușit"</string> - <string name="factorytest_not_system" msgid="4435201656767276723">"Acţiunea FACTORY_TEST este acceptată doar pentru pachetele instalate în /system/app."</string> + <string name="factorytest_not_system" msgid="4435201656767276723">"Acțiunea FACTORY_TEST este acceptată doar pentru pachetele instalate în /system/app."</string> <string name="factorytest_no_action" msgid="872991874799998561">"Nu s-a găsit niciun pachet care să ofere acțiunea FACTORY_TEST."</string> <string name="factorytest_reboot" msgid="6320168203050791643">"Reporniți"</string> <string name="js_dialog_title" msgid="1987483977834603872">"La pagina de la „<xliff:g id="TITLE">%s</xliff:g>” apare:"</string> @@ -776,7 +775,7 @@ <string name="autofill_address_summary_separator" msgid="7483307893170324129">", "</string> <string name="autofill_address_summary_format" msgid="4874459455786827344">"$1$2$3"</string> <string name="autofill_province" msgid="2231806553863422300">"Provincie"</string> - <string name="autofill_postal_code" msgid="4696430407689377108">"Cod poştal"</string> + <string name="autofill_postal_code" msgid="4696430407689377108">"Cod poștal"</string> <string name="autofill_state" msgid="6988894195520044613">"Stat"</string> <string name="autofill_zip_code" msgid="8697544592627322946">"Cod ZIP"</string> <string name="autofill_county" msgid="237073771020362891">"Județ"</string> @@ -798,10 +797,10 @@ <string name="permlab_addVoicemail" msgid="5525660026090959044">"adăugare mesagerie vocală"</string> <string name="permdesc_addVoicemail" msgid="6604508651428252437">"Permite aplicației să adauge mesaje în Mesaje primite în mesageria vocală."</string> <string name="permlab_writeGeolocationPermissions" msgid="5962224158955273932">"modificare permisiuni pentru locația geografică a browserului"</string> - <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"Permite aplicației să modifice permisiunile privind locația geografică a browserului. Aplicațiile rău intenţionate pot utiliza această permisiune pentru a permite trimiterea informațiilor privind locația către site-uri web arbitrare."</string> + <string name="permdesc_writeGeolocationPermissions" msgid="1083743234522638747">"Permite aplicației să modifice permisiunile privind locația geografică a browserului. Aplicațiile rău intenționate pot utiliza această permisiune pentru a permite trimiterea informațiilor privind locația către site-uri web arbitrare."</string> <string name="save_password_message" msgid="767344687139195790">"Doriți ca browserul să rețină această parolă?"</string> <string name="save_password_notnow" msgid="6389675316706699758">"Nu acum"</string> - <string name="save_password_remember" msgid="6491879678996749466">"Reţineţi"</string> + <string name="save_password_remember" msgid="6491879678996749466">"Rețineți"</string> <string name="save_password_never" msgid="8274330296785855105">"Niciodată"</string> <string name="open_permission_deny" msgid="7374036708316629800">"Nu aveți permisiunea de a deschide această pagină."</string> <string name="text_copied" msgid="4985729524670131385">"Text copiat în clipboard."</string> @@ -818,8 +817,8 @@ <string name="searchview_description_submit" msgid="2688450133297983542">"Trimiteți interogarea"</string> <string name="searchview_description_voice" msgid="2453203695674994440">"Căutare vocală"</string> <string name="enable_explore_by_touch_warning_title" msgid="7460694070309730149">"Activați Explorați prin atingere?"</string> - <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> dorește să activeze funcția Explorați prin atingere. Când această funcție este activată, puteți auzi sau vedea descrieri pentru ceea ce se află sub degetul dvs. sau puteți efectua gesturi pentru a interacţiona cu tableta."</string> - <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> dorește să activeze funcția Explorați prin atingere. Când această funcție este activată, puteți auzi sau vedea descrieri pentru ceea ce se află sub degetul dvs. sau puteți efectua gesturi pentru a interacţiona cu telefonul."</string> + <string name="enable_explore_by_touch_warning_message" product="tablet" msgid="8655887539089910577">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> dorește să activeze funcția Explorați prin atingere. Când această funcție este activată, puteți auzi sau vedea descrieri pentru ceea ce se află sub degetul dvs. sau puteți efectua gesturi pentru a interacționa cu tableta."</string> + <string name="enable_explore_by_touch_warning_message" product="default" msgid="2708199672852373195">"<xliff:g id="ACCESSIBILITY_SERVICE_NAME">%1$s</xliff:g> dorește să activeze funcția Explorați prin atingere. Când această funcție este activată, puteți auzi sau vedea descrieri pentru ceea ce se află sub degetul dvs. sau puteți efectua gesturi pentru a interacționa cu telefonul."</string> <string name="oneMonthDurationPast" msgid="7396384508953779925">"cu 1 lună în urmă"</string> <string name="beforeOneMonthDurationPast" msgid="909134546836499826">"Cu mai mult de 1 lună în urmă"</string> <plurals name="last_num_days" formatted="false" msgid="5104533550723932025"> @@ -866,8 +865,8 @@ <string name="relative_time" msgid="1818557177829411417">"<xliff:g id="DATE">%1$s</xliff:g>, <xliff:g id="TIME">%2$s</xliff:g>"</string> <string name="noon" msgid="7245353528818587908">"prânz"</string> <string name="Noon" msgid="3342127745230013127">"Prânz"</string> - <string name="midnight" msgid="7166259508850457595">"miezul nopţii"</string> - <string name="Midnight" msgid="5630806906897892201">"Miezul nopţii"</string> + <string name="midnight" msgid="7166259508850457595">"miezul nopții"</string> + <string name="Midnight" msgid="5630806906897892201">"Miezul nopții"</string> <string name="elapsed_time_short_format_mm_ss" msgid="4431555943828711473">"<xliff:g id="MINUTES">%1$02d</xliff:g>:<xliff:g id="SECONDS">%2$02d</xliff:g>"</string> <string name="elapsed_time_short_format_h_mm_ss" msgid="1846071997616654124">"<xliff:g id="HOURS">%1$d</xliff:g>:<xliff:g id="MINUTES">%2$02d</xliff:g>:<xliff:g id="SECONDS">%3$02d</xliff:g>"</string> <string name="selectAll" msgid="6876518925844129331">"Selectați-le pe toate"</string> @@ -882,12 +881,12 @@ <string name="undo" msgid="7905788502491742328">"Anulați"</string> <string name="redo" msgid="7759464876566803888">"Repetați"</string> <string name="textSelectionCABTitle" msgid="5236850394370820357">"Selectare text"</string> - <string name="addToDictionary" msgid="4352161534510057874">"Adăugați în dicţionar"</string> + <string name="addToDictionary" msgid="4352161534510057874">"Adăugați în dicționar"</string> <string name="deleteText" msgid="6979668428458199034">"Ștergeți"</string> <string name="inputMethod" msgid="1653630062304567879">"Metodă de intrare"</string> - <string name="editTextMenuTitle" msgid="4909135564941815494">"Acţiuni pentru text"</string> - <string name="low_internal_storage_view_title" msgid="5576272496365684834">"Spaţiul de stocare aproape ocupat"</string> - <string name="low_internal_storage_view_text" msgid="6640505817617414371">"Este posibil ca unele funcții de sistem să nu funcţioneze"</string> + <string name="editTextMenuTitle" msgid="4909135564941815494">"Acțiuni pentru text"</string> + <string name="low_internal_storage_view_title" msgid="5576272496365684834">"Spațiul de stocare aproape ocupat"</string> + <string name="low_internal_storage_view_text" msgid="6640505817617414371">"Este posibil ca unele funcții de sistem să nu funcționeze"</string> <string name="low_internal_storage_view_text_no_boot" msgid="6935190099204693424">"Spațiu de stocare insuficient pentru sistem. Asigurați-vă că aveți 250 MB de spațiu liber și reporniți."</string> <string name="app_running_notification_title" msgid="8718335121060787914">"<xliff:g id="APP_NAME">%1$s</xliff:g> rulează acum"</string> <string name="app_running_notification_text" msgid="4653586947747330058">"Atingeți pentru mai multe informații sau pentru a opri aplicația."</string> @@ -923,7 +922,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Resetați și reporniți aplicația"</string> <string name="aerr_report" msgid="5371800241488400617">"Trimiteți feedback"</string> <string name="aerr_close" msgid="2991640326563991340">"Închideți"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Dezactivați"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Dezactivați până la repornirea dispozitivului"</string> <string name="aerr_wait" msgid="3199956902437040261">"Așteptați"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Închideți aplicația"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -933,11 +932,11 @@ <string name="anr_process" msgid="6156880875555921105">"Procesul <xliff:g id="PROCESS">%1$s</xliff:g> nu răspunde"</string> <string name="force_close" msgid="8346072094521265605">"OK"</string> <string name="report" msgid="4060218260984795706">"Raportați"</string> - <string name="wait" msgid="7147118217226317732">"Aşteptaţi"</string> + <string name="wait" msgid="7147118217226317732">"Așteptați"</string> <string name="webpage_unresponsive" msgid="3272758351138122503">"Pagina a devenit inactivă.\n\nDoriți să o închideți?"</string> - <string name="launch_warning_title" msgid="1547997780506713581">"Aplicaţie redirecționată"</string> - <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> funcţionează acum."</string> - <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> a fost lansată iniţial."</string> + <string name="launch_warning_title" msgid="1547997780506713581">"Aplicație redirecționată"</string> + <string name="launch_warning_replace" msgid="6202498949970281412">"<xliff:g id="APP_NAME">%1$s</xliff:g> funcționează acum."</string> + <string name="launch_warning_original" msgid="188102023021668683">"<xliff:g id="APP_NAME">%1$s</xliff:g> a fost lansată inițial."</string> <string name="screen_compat_mode_scale" msgid="3202955667675944499">"Scară"</string> <string name="screen_compat_mode_show" msgid="4013878876486655892">"Afișați întotdeauna"</string> <string name="screen_compat_mode_hint" msgid="1064524084543304459">"Reactivați acest mod din Setări de sistem > Aplicații > Descărcate."</string> @@ -952,11 +951,11 @@ <string name="android_upgrading_complete" msgid="1405954754112999229">"Se finalizează pornirea."</string> <string name="heavy_weight_notification" msgid="9087063985776626166">"Rulează <xliff:g id="APP">%1$s</xliff:g>"</string> <string name="heavy_weight_notification_detail" msgid="1721681741617898865">"Atingeți pentru a comuta la aplicație"</string> - <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"Comutaţi între aplicații?"</string> + <string name="heavy_weight_switcher_title" msgid="7153167085403298169">"Comutați între aplicații?"</string> <string name="heavy_weight_switcher_text" msgid="7022631924534406403">"O altă aplicație rulează deja și trebuie oprită înainte a putea porni o aplicație nouă."</string> - <string name="old_app_action" msgid="493129172238566282">"Reveniţi la <xliff:g id="OLD_APP">%1$s</xliff:g>"</string> + <string name="old_app_action" msgid="493129172238566282">"Reveniți la <xliff:g id="OLD_APP">%1$s</xliff:g>"</string> <string name="old_app_description" msgid="2082094275580358049">"Nu porniți aplicația nouă."</string> - <string name="new_app_action" msgid="5472756926945440706">"Porniţi <xliff:g id="OLD_APP">%1$s</xliff:g>"</string> + <string name="new_app_action" msgid="5472756926945440706">"Porniți <xliff:g id="OLD_APP">%1$s</xliff:g>"</string> <string name="new_app_description" msgid="1932143598371537340">"Opriți vechea aplicație fără să salvați."</string> <string name="dump_heap_notification" msgid="2618183274836056542">"<xliff:g id="PROC">%1$s</xliff:g> a depășit limita de memorie"</string> <string name="dump_heap_notification_detail" msgid="2075673362317481664">"Datele privind memoria au fost culese; atingeți pentru a trimite"</string> @@ -992,7 +991,7 @@ <item quantity="other">Rețele Wi-Fi deschise disponibile</item> <item quantity="one">Rețea Wi-Fi deschisă disponibilă</item> </plurals> - <string name="wifi_available_sign_in" msgid="9157196203958866662">"Conectați-vă la reţeaua Wi-Fi"</string> + <string name="wifi_available_sign_in" msgid="9157196203958866662">"Conectați-vă la rețeaua Wi-Fi"</string> <string name="network_available_sign_in" msgid="1848877297365446605">"Conectați-vă la rețea"</string> <!-- no translation found for network_available_sign_in_detailed (8000081941447976118) --> <skip /> @@ -1004,26 +1003,26 @@ <string name="wifi_connect_alert_message" msgid="6451273376815958922">"Aplicația %1$s dorește să se conecteze la rețeaua Wi-Fi %2$s"</string> <string name="wifi_connect_default_application" msgid="7143109390475484319">"O aplicație"</string> <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string> - <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"Porniţi Wi-Fi Direct. Acest lucru va dezactiva clientul/hotspotul Wi-Fi."</string> + <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"Porniți Wi-Fi Direct. Acest lucru va dezactiva clientul/hotspotul Wi-Fi."</string> <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"Wi-Fi Direct nu a putut porni."</string> <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct este activat"</string> <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Atingeți pentru setări"</string> - <string name="accept" msgid="1645267259272829559">"Acceptaţi"</string> - <string name="decline" msgid="2112225451706137894">"Refuzaţi"</string> + <string name="accept" msgid="1645267259272829559">"Acceptați"</string> + <string name="decline" msgid="2112225451706137894">"Refuzați"</string> <string name="wifi_p2p_invitation_sent_title" msgid="1318975185112070734">"Invitația a fost trimisă."</string> <string name="wifi_p2p_invitation_to_connect_title" msgid="4958803948658533637">"Invitație pentru conectare"</string> <string name="wifi_p2p_from_message" msgid="570389174731951769">"De la:"</string> <string name="wifi_p2p_to_message" msgid="248968974522044099">"Către:"</string> - <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"Introduceţi codul PIN necesar:"</string> + <string name="wifi_p2p_enter_pin_message" msgid="5920929550367828970">"Introduceți codul PIN necesar:"</string> <string name="wifi_p2p_show_pin_message" msgid="8530563323880921094">"Cod PIN:"</string> <string name="wifi_p2p_frequency_conflict_message" product="tablet" msgid="8012981257742232475">"Tableta se va deconecta temporar de la rețeaua Wi-Fi cât timp este conectată la <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string> <string name="wifi_p2p_frequency_conflict_message" product="tv" msgid="3087858235069421128">"Televizorul se va deconecta temporar de la rețeaua Wi-Fi cât timp este conectat la <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string> - <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"Telefonul se va deconecta temporar de la reţeaua Wi-Fi cât timp este conectat la <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string> - <string name="select_character" msgid="3365550120617701745">"Introduceţi caracterul"</string> + <string name="wifi_p2p_frequency_conflict_message" product="default" msgid="7363907213787469151">"Telefonul se va deconecta temporar de la rețeaua Wi-Fi cât timp este conectat la <xliff:g id="DEVICE_NAME">%1$s</xliff:g>"</string> + <string name="select_character" msgid="3365550120617701745">"Introduceți caracterul"</string> <string name="sms_control_title" msgid="7296612781128917719">"Se trimit mesaje SMS"</string> <string name="sms_control_message" msgid="3867899169651496433">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> trimite un număr mare de mesaje SMS. Permiteți acestei aplicații să trimită în continuare mesaje?"</string> <string name="sms_control_yes" msgid="3663725993855816807">"Permiteți"</string> - <string name="sms_control_no" msgid="625438561395534982">"Refuzaţi"</string> + <string name="sms_control_no" msgid="625438561395534982">"Refuzați"</string> <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> intenționează să trimită un mesaj la <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>."</string> <string name="sms_short_code_details" msgid="5873295990846059400">"Acest lucru "<b>"poate genera costuri"</b>" în contul dvs. mobil."</string> <string name="sms_premium_short_code_details" msgid="7869234868023975"><b>"Acest lucru va genera costuri în contul dvs. mobil."</b></string> @@ -1038,14 +1037,14 @@ <string name="sim_done_button" msgid="827949989369963775">"Terminat"</string> <string name="sim_added_title" msgid="3719670512889674693">"Card SIM adăugat"</string> <string name="sim_added_message" msgid="7797975656153714319">"Reporniți dispozitivul pentru a accesa rețeaua mobilă."</string> - <string name="sim_restart_button" msgid="4722407842815232347">"Reporniţi"</string> + <string name="sim_restart_button" msgid="4722407842815232347">"Reporniți"</string> <string name="carrier_app_dialog_message" msgid="7066156088266319533">"Pentru ca noul SIM să funcționeze corect, va trebui să instalați și să deschideți o aplicație de la operatorul dvs."</string> <string name="carrier_app_dialog_button" msgid="7900235513678617329">"DESCĂRCAȚI APLICAȚIA"</string> <string name="carrier_app_dialog_not_now" msgid="6361378684292268027">"NU ACUM"</string> <string name="carrier_app_notification_title" msgid="8921767385872554621">"S-a introdus un card SIM nou"</string> <string name="carrier_app_notification_text" msgid="1132487343346050225">"Atingeți pentru a-l configura"</string> - <string name="time_picker_dialog_title" msgid="8349362623068819295">"Setaţi ora"</string> - <string name="date_picker_dialog_title" msgid="5879450659453782278">"Setaţi data"</string> + <string name="time_picker_dialog_title" msgid="8349362623068819295">"Setați ora"</string> + <string name="date_picker_dialog_title" msgid="5879450659453782278">"Setați data"</string> <string name="date_time_set" msgid="5777075614321087758">"Setați"</string> <string name="date_time_done" msgid="2507683751759308828">"Terminat"</string> <string name="perms_new_perm_prefix" msgid="8257740710754301407"><font size="12" fgcolor="#ff33b5e5">"NOU: "</font></string> @@ -1061,16 +1060,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Atingeți pentru mai multe opțiuni."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Depanarea USB este conectată"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Atingeți pentru a dezactiva depanarea USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Trimiteți raportul de eroare?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Se trimite raportul de eroare…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Administratorul IT a solicitat un raport de eroare pentru a remedia problemele acestui dispozitiv. Este posibil să se permită accesul la date și aplicații, iar funcționarea dispozitivului poate fi încetinită temporar."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Administratorul IT a solicitat un raport de eroare pentru a remedia problemele acestui dispozitiv. Este posibil să se permită accesul la date și aplicații."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Acest proces poate încetini temporar funcționarea dispozitivului"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ACCEPTAȚI"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"REFUZAȚI"</string> <string name="select_input_method" msgid="8547250819326693584">"Schimbați tastatura"</string> @@ -1125,7 +1119,7 @@ <string name="permdesc_readInstallSessions" msgid="2049771699626019849">"Permite unei aplicații accesul la citirea sesiunilor de instalare. Aceasta poate vedea detalii despre instalările de pachete active."</string> <string name="permlab_requestInstallPackages" msgid="5782013576218172577">"să solicite pachete de instalare"</string> <string name="permdesc_requestInstallPackages" msgid="5740101072486783082">"Permite unei aplicații să solicite instalarea pachetelor."</string> - <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Atingeți de două ori pentru a mări/micşora"</string> + <string name="tutorial_double_tap_to_zoom_message_short" msgid="4070433208160063538">"Atingeți de două ori pentru a mări/micșora"</string> <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Nu s-a putut adăuga widgetul."</string> <string name="ime_action_go" msgid="8320845651737369027">"Accesați"</string> <string name="ime_action_search" msgid="658110271822807811">"Căutați"</string> @@ -1134,13 +1128,13 @@ <string name="ime_action_done" msgid="8971516117910934605">"Terminat"</string> <string name="ime_action_previous" msgid="1443550039250105948">"Înapoi"</string> <string name="ime_action_default" msgid="2840921885558045721">"Executați"</string> - <string name="dial_number_using" msgid="5789176425167573586">"Formaţi numărul\nutilizând <xliff:g id="NUMBER">%s</xliff:g>"</string> + <string name="dial_number_using" msgid="5789176425167573586">"Formați numărul\nutilizând <xliff:g id="NUMBER">%s</xliff:g>"</string> <string name="create_contact_using" msgid="4947405226788104538">"Creați contactul\nutilizând <xliff:g id="NUMBER">%s</xliff:g>"</string> <string name="grant_credentials_permission_message_header" msgid="2106103817937859662">"Următoarele aplicații solicită permisiunea de a accesa contul dvs. acum și în viitor."</string> <string name="grant_credentials_permission_message_footer" msgid="3125211343379376561">"Permiteți această solicitare?"</string> <string name="grant_permissions_header_text" msgid="6874497408201826708">"Solicitare de acces"</string> <string name="allow" msgid="7225948811296386551">"Permiteți"</string> - <string name="deny" msgid="2081879885755434506">"Refuzaţi"</string> + <string name="deny" msgid="2081879885755434506">"Refuzați"</string> <string name="permission_request_notification_title" msgid="6486759795926237907">"Permisiune solicitată"</string> <string name="permission_request_notification_with_subtitle" msgid="8530393139639560189">"Permisiune solicitată\npentru contul <xliff:g id="ACCOUNT">%s</xliff:g>."</string> <string name="forward_intent_to_owner" msgid="1207197447013960896">"Utilizați această aplicație în afara profilului de serviciu"</string> @@ -1149,29 +1143,29 @@ <string name="sync_binding_label" msgid="3687969138375092423">"Sincronizare"</string> <string name="accessibility_binding_label" msgid="4148120742096474641">"Accesibilitate"</string> <string name="wallpaper_binding_label" msgid="1240087844304687662">"Imagine de fundal"</string> - <string name="chooser_wallpaper" msgid="7873476199295190279">"Modificaţi imaginea de fundal"</string> + <string name="chooser_wallpaper" msgid="7873476199295190279">"Modificați imaginea de fundal"</string> <string name="notification_listener_binding_label" msgid="2014162835481906429">"Serviciu de citire a notificărilor"</string> <string name="condition_provider_service_binding_label" msgid="1321343352906524564">"Furnizor de condiții"</string> <string name="notification_assistant_binding_label" msgid="909456055569102952">"Asistent pentru notificări"</string> <string name="vpn_title" msgid="19615213552042827">"VPN activat"</string> <string name="vpn_title_long" msgid="6400714798049252294">"VPN este activată de <xliff:g id="APP">%s</xliff:g>"</string> - <string name="vpn_text" msgid="3011306607126450322">"Atingeți pentru a gestiona reţeaua."</string> - <string name="vpn_text_long" msgid="6407351006249174473">"Conectat la <xliff:g id="SESSION">%s</xliff:g>. Atingeți pentru a gestiona reţeaua."</string> - <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"Se efectuează conectarea la reţeaua VPN activată permanent…"</string> - <string name="vpn_lockdown_connected" msgid="8202679674819213931">"Conectat(ă) la reţeaua VPN activată permanent"</string> + <string name="vpn_text" msgid="3011306607126450322">"Atingeți pentru a gestiona rețeaua."</string> + <string name="vpn_text_long" msgid="6407351006249174473">"Conectat la <xliff:g id="SESSION">%s</xliff:g>. Atingeți pentru a gestiona rețeaua."</string> + <string name="vpn_lockdown_connecting" msgid="6443438964440960745">"Se efectuează conectarea la rețeaua VPN activată permanent…"</string> + <string name="vpn_lockdown_connected" msgid="8202679674819213931">"Conectat(ă) la rețeaua VPN activată permanent"</string> <string name="vpn_lockdown_error" msgid="6009249814034708175">"Eroare de rețea VPN activată permanent"</string> <string name="vpn_lockdown_config" msgid="6415899150671537970">"Atingeți pentru a configura"</string> <string name="upload_file" msgid="2897957172366730416">"Alegeți un fișier"</string> <string name="no_file_chosen" msgid="6363648562170759465">"Nu au fost găsite fișiere"</string> - <string name="reset" msgid="2448168080964209908">"Resetaţi"</string> + <string name="reset" msgid="2448168080964209908">"Resetați"</string> <string name="submit" msgid="1602335572089911941">"Trimiteți"</string> - <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Mod Maşină activat"</string> - <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"Atingeți pentru a ieşi din modul Maşină."</string> + <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Mod Mașină activat"</string> + <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"Atingeți pentru a ieși din modul Mașină."</string> <string name="tethered_notification_title" msgid="3146694234398202601">"Tethering sau hotspot activ"</string> <string name="tethered_notification_message" msgid="6857031760103062982">"Atingeți pentru a configura."</string> <string name="back_button_label" msgid="2300470004503343439">"Înapoi"</string> <string name="next_button_label" msgid="1080555104677992408">"Înainte"</string> - <string name="skip_button_label" msgid="1275362299471631819">"Omiteţi"</string> + <string name="skip_button_label" msgid="1275362299471631819">"Omiteți"</string> <string name="no_matches" msgid="8129421908915840737">"Nicio potrivire"</string> <string name="find_on_page" msgid="1946799233822820384">"Găsiți pe pagină"</string> <plurals name="matches_found" formatted="false" msgid="1210884353962081884"> @@ -1192,10 +1186,10 @@ <string name="gpsNotifMessage" msgid="1374718023224000702">"Solicitat de <xliff:g id="NAME">%1$s</xliff:g> (<xliff:g id="SERVICE">%2$s</xliff:g>)"</string> <string name="gpsVerifYes" msgid="2346566072867213563">"Da"</string> <string name="gpsVerifNo" msgid="1146564937346454865">"Nu"</string> - <string name="sync_too_many_deletes" msgid="5296321850662746890">"Limita pentru ştergere a fost depăşită"</string> - <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"Există <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> (de) elemente şterse pentru <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>, contul <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g>. Ce doriți să faceți?"</string> + <string name="sync_too_many_deletes" msgid="5296321850662746890">"Limita pentru ștergere a fost depășită"</string> + <string name="sync_too_many_deletes_desc" msgid="496551671008694245">"Există <xliff:g id="NUMBER_OF_DELETED_ITEMS">%1$d</xliff:g> (de) elemente șterse pentru <xliff:g id="TYPE_OF_SYNC">%2$s</xliff:g>, contul <xliff:g id="ACCOUNT_NAME">%3$s</xliff:g>. Ce doriți să faceți?"</string> <string name="sync_really_delete" msgid="2572600103122596243">"Ștergeți elementele"</string> - <string name="sync_undo_deletes" msgid="2941317360600338602">"Anulați aceste ştergeri"</string> + <string name="sync_undo_deletes" msgid="2941317360600338602">"Anulați aceste ștergeri"</string> <string name="sync_do_nothing" msgid="3743764740430821845">"Nu trebuie să luați nicio măsură deocamdată"</string> <string name="choose_account_label" msgid="5655203089746423927">"Alegeți un cont"</string> <string name="add_account_label" msgid="2935267344849993553">"Adăugați un cont"</string> @@ -1203,13 +1197,13 @@ <string name="number_picker_increment_button" msgid="2412072272832284313">"Creșteți"</string> <string name="number_picker_decrement_button" msgid="476050778386779067">"Reduceți"</string> <string name="number_picker_increment_scroll_mode" msgid="3073101067441638428">"Atingeți și țineți apăsat <xliff:g id="VALUE">%s</xliff:g>."</string> - <string name="number_picker_increment_scroll_action" msgid="9101473045891835490">"Glisaţi în sus pentru a creşte și în jos pentru a reduce."</string> + <string name="number_picker_increment_scroll_action" msgid="9101473045891835490">"Glisați în sus pentru a crește și în jos pentru a reduce."</string> <string name="time_picker_increment_minute_button" msgid="8865885114028614321">"Creșteți valoarea pentru minute"</string> <string name="time_picker_decrement_minute_button" msgid="6246834937080684791">"Reduceți valoarea pentru minute"</string> <string name="time_picker_increment_hour_button" msgid="3652056055810223139">"Creșteți valoarea pentru oră"</string> <string name="time_picker_decrement_hour_button" msgid="1377479863429214792">"Reduceți valoarea pentru oră"</string> - <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"Setaţi valoarea PM"</string> - <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"Setaţi valoarea AM"</string> + <string name="time_picker_increment_set_pm_button" msgid="4147590696151230863">"Setați valoarea PM"</string> + <string name="time_picker_decrement_set_am_button" msgid="8302140353539486752">"Setați valoarea AM"</string> <string name="date_picker_increment_month_button" msgid="5369998479067934110">"Creșteți valoarea pentru lună"</string> <string name="date_picker_decrement_month_button" msgid="1832698995541726019">"Reduceți valoarea pentru lună"</string> <string name="date_picker_increment_day_button" msgid="7130465412308173903">"Creșteți valoarea pentru zi"</string> @@ -1230,11 +1224,11 @@ <string name="shareactionprovider_share_with" msgid="806688056141131819">"Permiteți accesul pentru"</string> <string name="shareactionprovider_share_with_application" msgid="5627411384638389738">"Permiteți accesul pentru <xliff:g id="APPLICATION_NAME">%s</xliff:g>"</string> <string name="content_description_sliding_handle" msgid="415975056159262248">"Mâner glisant. Atingeți și țineți apăsat."</string> - <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Glisaţi pentru a debloca."</string> - <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Conectaţi un set căşti-microfon pentru a auzi tastele apăsate când introduceţi parola."</string> + <string name="description_target_unlock_tablet" msgid="3833195335629795055">"Glisați pentru a debloca."</string> + <string name="keyboard_headset_required_to_hear_password" msgid="7011927352267668657">"Conectați un set căști-microfon pentru a auzi tastele apăsate când introduceți parola."</string> <string name="keyboard_password_character_no_headset" msgid="2859873770886153678">"Punct."</string> - <string name="action_bar_home_description" msgid="5293600496601490216">"Navigaţi la ecranul de pornire"</string> - <string name="action_bar_up_description" msgid="2237496562952152589">"Navigaţi în sus"</string> + <string name="action_bar_home_description" msgid="5293600496601490216">"Navigați la ecranul de pornire"</string> + <string name="action_bar_up_description" msgid="2237496562952152589">"Navigați în sus"</string> <string name="action_menu_overflow_description" msgid="2295659037509008453">"Mai multe opțiuni"</string> <string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s, %2$s"</string> <string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s, %2$s, %3$s"</string> @@ -1252,12 +1246,12 @@ <string name="data_usage_mobile_limit_title" msgid="557158376602636112">"Ați atins limita de date mobile"</string> <string name="data_usage_wifi_limit_title" msgid="5803363779034792676">"Ați atins limita de date Wi-Fi"</string> <string name="data_usage_limit_body" msgid="291731708279614081">"S-au întrerupt datele pentru restul ciclului"</string> - <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"S-a depăşit limita de date 2G-3G"</string> - <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"S-a depăşit limita de date 4G"</string> + <string name="data_usage_3g_limit_snoozed_title" msgid="7026739121138005231">"S-a depășit limita de date 2G-3G"</string> + <string name="data_usage_4g_limit_snoozed_title" msgid="1106562779311209039">"S-a depășit limita de date 4G"</string> <string name="data_usage_mobile_limit_snoozed_title" msgid="4941346653729943789">"Limită de date mobile depășită"</string> - <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"S-a depăşit limita de date Wi-Fi"</string> + <string name="data_usage_wifi_limit_snoozed_title" msgid="8743856006384825974">"S-a depășit limita de date Wi-Fi"</string> <string name="data_usage_limit_snoozed_body" msgid="7035490278298441767">"<xliff:g id="SIZE">%s</xliff:g> peste limita specificată."</string> - <string name="data_usage_restricted_title" msgid="5965157361036321914">"Datele de fundal restricţionate"</string> + <string name="data_usage_restricted_title" msgid="5965157361036321914">"Datele de fundal restricționate"</string> <string name="data_usage_restricted_body" msgid="6741521330997452990">"Atingeți pt. a elimina limita."</string> <string name="ssl_certificate" msgid="6510040486049237639">"Certificat de securitate"</string> <string name="ssl_certificate_is_valid" msgid="6825263250774569373">"Certificatul este valid."</string> @@ -1308,25 +1302,25 @@ <string name="display_manager_overlay_display_title" msgid="652124517672257172">"<xliff:g id="NAME">%1$s</xliff:g>: <xliff:g id="WIDTH">%2$d</xliff:g>x<xliff:g id="HEIGHT">%3$d</xliff:g>, <xliff:g id="DPI">%4$d</xliff:g> dpi"</string> <string name="display_manager_overlay_display_secure_suffix" msgid="6022119702628572080">", securizat"</string> <string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Model uitat"</string> - <string name="kg_wrong_pattern" msgid="1850806070801358830">"Model greşit"</string> + <string name="kg_wrong_pattern" msgid="1850806070801358830">"Model greșit"</string> <string name="kg_wrong_password" msgid="2333281762128113157">"Parolă greșită"</string> - <string name="kg_wrong_pin" msgid="1131306510833563801">"Cod PIN greşit"</string> + <string name="kg_wrong_pin" msgid="1131306510833563801">"Cod PIN greșit"</string> <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Încercați din nou peste <xliff:g id="NUMBER">%1$d</xliff:g> (de) secunde."</string> - <string name="kg_pattern_instructions" msgid="398978611683075868">"Desenaţi modelul"</string> - <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Introduceţi codul PIN al cardului SIM"</string> - <string name="kg_pin_instructions" msgid="2377242233495111557">"Introduceţi codul PIN"</string> - <string name="kg_password_instructions" msgid="5753646556186936819">"Introduceţi parola"</string> - <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"Cardul SIM este acum dezactivat. Introduceţi codul PUK pentru a continua. Contactaţi operatorul pentru mai multe detalii."</string> - <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Introduceţi codul PIN dorit"</string> + <string name="kg_pattern_instructions" msgid="398978611683075868">"Desenați modelul"</string> + <string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Introduceți codul PIN al cardului SIM"</string> + <string name="kg_pin_instructions" msgid="2377242233495111557">"Introduceți codul PIN"</string> + <string name="kg_password_instructions" msgid="5753646556186936819">"Introduceți parola"</string> + <string name="kg_puk_enter_puk_hint" msgid="453227143861735537">"Cardul SIM este acum dezactivat. Introduceți codul PUK pentru a continua. Contactați operatorul pentru mai multe detalii."</string> + <string name="kg_puk_enter_pin_hint" msgid="7871604527429602024">"Introduceți codul PIN dorit"</string> <string name="kg_enter_confirm_pin_hint" msgid="325676184762529976">"Confirmați codul PIN dorit"</string> <string name="kg_sim_unlock_progress_dialog_message" msgid="8950398016976865762">"Se deblochează cardul SIM..."</string> <string name="kg_password_wrong_pin_code" msgid="1139324887413846912">"Cod PIN incorect."</string> - <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Introduceţi un cod PIN format din 4 până la 8 cifre."</string> + <string name="kg_invalid_sim_pin_hint" msgid="8795159358110620001">"Introduceți un cod PIN format din 4 până la 8 cifre."</string> <string name="kg_invalid_sim_puk_hint" msgid="6025069204539532000">"Codul PUK trebuie să conțină 8 numere."</string> - <string name="kg_invalid_puk" msgid="3638289409676051243">"Reintroduceţi codul PUK corect. Încercările repetate vor dezactiva definitiv cardul SIM."</string> + <string name="kg_invalid_puk" msgid="3638289409676051243">"Reintroduceți codul PUK corect. Încercările repetate vor dezactiva definitiv cardul SIM."</string> <string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Codurile PIN nu coincid"</string> <string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Prea multe încercări de desenare a modelului"</string> - <string name="kg_login_instructions" msgid="1100551261265506448">"Pentru a debloca, conectaţi-vă cu Contul dvs. Google."</string> + <string name="kg_login_instructions" msgid="1100551261265506448">"Pentru a debloca, conectați-vă cu Contul dvs. Google."</string> <string name="kg_login_username_hint" msgid="5718534272070920364">"Nume de utilizator (e-mail)"</string> <string name="kg_login_password_hint" msgid="9057289103827298549">"Parolă"</string> <string name="kg_login_submit_button" msgid="5355904582674054702">"Conectați-vă"</string> @@ -1336,17 +1330,17 @@ <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Ați introdus incorect codul PIN de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori.\n\nÎncercați din nou peste <xliff:g id="NUMBER_1">%2$d</xliff:g> (de) secunde."</string> <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Ați introdus incorect parola de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. \n\nÎncercați din nou peste <xliff:g id="NUMBER_1">%2$d</xliff:g> (de) secunde."</string> <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. \n\nÎncercați din nou peste <xliff:g id="NUMBER_1">%2$d</xliff:g> (de) secunde."</string> - <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Ați efectuat <xliff:g id="NUMBER_0">%1$d</xliff:g> încercări incorecte de deblocare a tabletei. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereuşite, aceasta va fi resetată la setările prestabilite din fabrică, iar toate datele de utilizator se vor pierde."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="1575557200627128949">"Ați efectuat <xliff:g id="NUMBER_0">%1$d</xliff:g> încercări incorecte de deblocare a tabletei. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, aceasta va fi resetată la setările prestabilite din fabrică, iar toate datele de utilizator se vor pierde."</string> <string name="kg_failed_attempts_almost_at_wipe" product="tv" msgid="5621231220154419413">"Ați efectuat <xliff:g id="NUMBER_0">%1$d</xliff:g> încercări incorecte de deblocare a televizorului. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, televizorul va reveni la setările prestabilite din fabrică, iar toate datele de utilizator se vor pierde."</string> - <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Ați efectuat <xliff:g id="NUMBER_0">%1$d</xliff:g> încercări incorecte de deblocare a telefonului. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereuşite, acesta va fi resetat la setările prestabilite din fabrică, iar toate datele de utilizator se vor pierde."</string> + <string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="4051015943038199910">"Ați efectuat <xliff:g id="NUMBER_0">%1$d</xliff:g> încercări incorecte de deblocare a telefonului. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, acesta va fi resetat la setările prestabilite din fabrică, iar toate datele de utilizator se vor pierde."</string> <string name="kg_failed_attempts_now_wiping" product="tablet" msgid="2072996269148483637">"Ați efectuat <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a tabletei. Tableta va fi acum resetată la setările prestabilite din fabrică."</string> <string name="kg_failed_attempts_now_wiping" product="tv" msgid="4987878286750741463">"Ați efectuat <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a televizorului. Televizorul va reveni acum la setările prestabilite din fabrică."</string> <string name="kg_failed_attempts_now_wiping" product="default" msgid="4817627474419471518">"Ați efectuat <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a telefonului. Telefonul va fi acum resetat la setările prestabilite din fabrică."</string> - <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereuşite, vi se va solicita să deblocați tableta cu ajutorul unui cont de e-mail.\n\n Încercați din nou peste <xliff:g id="NUMBER_2">%3$d</xliff:g> (de) secunde."</string> + <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, vi se va solicita să deblocați tableta cu ajutorul unui cont de e-mail.\n\n Încercați din nou peste <xliff:g id="NUMBER_2">%3$d</xliff:g> (de) secunde."</string> <string name="kg_failed_attempts_almost_at_login" product="tv" msgid="4224651132862313471">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, vi se va solicita să deblocați televizorul cu ajutorul unui cont de e-mail.\n\n Încercați din nou peste <xliff:g id="NUMBER_2">%3$d</xliff:g> (de) secunde."</string> - <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereuşite, vi se va solicita să deblocați telefonul cu ajutorul unui cont de e-mail.\n\n Încercați din nou peste <xliff:g id="NUMBER_2">%3$d</xliff:g> (de) secunde."</string> + <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, vi se va solicita să deblocați telefonul cu ajutorul unui cont de e-mail.\n\n Încercați din nou peste <xliff:g id="NUMBER_2">%3$d</xliff:g> (de) secunde."</string> <string name="kg_text_message_separator" product="default" msgid="4160700433287233771">" — "</string> - <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Eliminaţi"</string> + <string name="kg_reordering_delete_drop_target_text" msgid="7899202978204438708">"Eliminați"</string> <string name="safe_media_volume_warning" product="default" msgid="2276318909314492312">"Ridicați volumul mai sus de nivelul recomandat?\n\nAscultarea la volum ridicat pe perioade lungi de timp vă poate afecta auzul."</string> <string name="continue_to_enable_accessibility" msgid="1626427372316070258">"Mențineți două degete pe ecran pentru a activa accesibilitatea."</string> <string name="accessibility_enabled" msgid="1381972048564547685">"S-a activat accesibilitatea."</string> @@ -1562,8 +1556,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> selectate</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> selectat</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Diverse"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Dvs. setați importanța acestor notificări."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Dvs. setați importanța acestor notificări."</string> <string name="importance_from_person" msgid="9160133597262938296">"Notificarea este importantă având în vedere persoanele implicate."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Permiteți ca <xliff:g id="APP">%1$s</xliff:g> să creeze un nou utilizator folosind <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Permiteți ca <xliff:g id="APP">%1$s</xliff:g> să creeze un nou utilizator folosind <xliff:g id="ACCOUNT">%2$s</xliff:g>? (există deja un utilizator cu acest cont)"</string> @@ -1584,10 +1577,12 @@ <string name="user_encrypted_message" msgid="4923292604515744267">"Atingeți pentru a debloca"</string> <string name="user_encrypted_detail" msgid="5708447464349420392">"Datele utilizatorului: blocate"</string> <string name="profile_encrypted_detail" msgid="3700965619978314974">"Profil de serviciu blocat"</string> - <string name="profile_encrypted_message" msgid="6964994232310195874">"Atingeți ca să deblocați profilul de serviciu"</string> + <string name="profile_encrypted_message" msgid="6964994232310195874">"Atingeți ca să deblocați"</string> <string name="usb_mtp_launch_notification_title" msgid="8359219638312208932">"Conectat la <xliff:g id="PRODUCT_NAME">%1$s</xliff:g>"</string> <string name="usb_mtp_launch_notification_description" msgid="8541876176425411358">"Atingeți pentru a vedea fișierele"</string> <string name="pin_target" msgid="3052256031352291362">"Fixați"</string> <string name="unpin_target" msgid="3556545602439143442">"Anulați fixarea"</string> <string name="app_info" msgid="6856026610594615344">"Informații despre aplicație"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml index 8ed321fa412f..b7d264ca7a32 100644 --- a/core/res/res/values-ru/strings.xml +++ b/core/res/res/values-ru/strings.xml @@ -90,7 +90,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Идентификация абонента по умолчанию не запрещена. След. вызов: разрешена"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Услуга не предоставляется."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Невозможно изменить параметр идентификатора вызывающего абонента."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Ограничения доступа изменены"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Служба данных заблокирована."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Служба экстренной помощи заблокирована."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Служба передачи голосовых сообщений заблокирована."</string> @@ -929,7 +928,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Сбросить и перезапустить"</string> <string name="aerr_report" msgid="5371800241488400617">"Отправить отзыв"</string> <string name="aerr_close" msgid="2991640326563991340">"Закрыть"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Скрыть"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Отключить до перезагрузки устройства"</string> <string name="aerr_wait" msgid="3199956902437040261">"Подождать"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Закрыть приложение"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1069,16 +1068,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Нажмите, чтобы настроить."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Отладка по USB разрешена"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Нажмите, чтобы отключить отладку по USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Разрешить доступ к информации об ошибке?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Отправка отчета об ошибке"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Администратор запросил отчет об ошибке, чтобы устранить неполадку. Он может получить доступ к приложениям и данным. Возможно временное снижение скорости работы вашего устройства."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Администратор запросил отчет об ошибке, чтобы устранить неполадку. Он может получить доступ к приложениям и данным."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Скорость работы устройства может быть временно снижена."</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ПРИНЯТЬ"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ОТКЛОНИТЬ"</string> <string name="select_input_method" msgid="8547250819326693584">"Выбор раскладки"</string> @@ -1581,8 +1575,7 @@ <item quantity="many">Выбрано: <xliff:g id="COUNT_1">%1$d</xliff:g></item> <item quantity="other">Выбрано: <xliff:g id="COUNT_1">%1$d</xliff:g></item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Другое"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Вы определяете важность этих уведомлений."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Вы определяете важность этих уведомлений."</string> <string name="importance_from_person" msgid="9160133597262938296">"Важное (люди)"</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Разрешить приложению \"<xliff:g id="APP">%1$s</xliff:g>\" создать пользователя для аккаунта <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Разрешить приложению \"<xliff:g id="APP">%1$s</xliff:g>\" создать нового пользователя для аккаунта <xliff:g id="ACCOUNT">%2$s</xliff:g> (пользователь c таким аккаунтом уже есть)?"</string> @@ -1609,4 +1602,6 @@ <string name="pin_target" msgid="3052256031352291362">"Закрепить"</string> <string name="unpin_target" msgid="3556545602439143442">"Открепить"</string> <string name="app_info" msgid="6856026610594615344">"О приложении"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-si-rLK/strings.xml b/core/res/res/values-si-rLK/strings.xml index ee0afadf6b7a..7daba816587f 100644 --- a/core/res/res/values-si-rLK/strings.xml +++ b/core/res/res/values-si-rLK/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"අමතන්නාගේ ID සුපුරුදු අනුව සීමා වී නැත. මීළඟ ඇමතුම: සීමා කර ඇත"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"සේවාවන් සපයා නැත."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"අමතන්නාගේ ID සැකසීම ඔබට වෙනස්කල නොහැක."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"සීමිත ප්රවේශය වෙනස් කෙරිණි"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"දත්ත සේවාව අවහිර කර ඇත."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"හදිසි සේවාව අවහිර කර ඇත."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"හඬ සේවාව බාධා කර ඇත."</string> @@ -919,7 +918,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"යෙදුම නැවත සකසා නැවත ආරම්භ කරන්න"</string> <string name="aerr_report" msgid="5371800241488400617">"ප්රතිපෝෂණය යවන්න"</string> <string name="aerr_close" msgid="2991640326563991340">"වසන්න"</string> - <string name="aerr_mute" msgid="7698966346654789433">"නිහඬ කරන්න"</string> + <string name="aerr_mute" msgid="1974781923723235953">"උපාංගය නැවත ආරම්භ වන තෙක් නිහඬ කරන්න"</string> <string name="aerr_wait" msgid="3199956902437040261">"රැඳී සිටින්න"</string> <string name="aerr_close_app" msgid="3269334853724920302">"යෙදුම වසන්න"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1055,16 +1054,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"වඩා වැඩි විකල්ප සඳහා ස්පර්ශ කරන්න."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB නිදොස්කරණය සම්බන්ධිතයි"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB නිදොස්කරණය අබල කිරීමට ස්පර්ශ කරන්න."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"දෝෂ වාර්තාව බෙදා ගන්නද?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"දෝෂ වාර්තාවක් බෙදා ගනිමින්..."</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"මෙම උපාංගය දෝෂාවේක්ෂණය සඳහා උදවු කිරීමට ඔබේ IT පරිපාලක දෝෂ වාර්තාවක් ඉල්ලා ඇත. යෙදුම් සහ දත්ත බෙදා ගත හැකි අතර ඔබේ උපාංගය තාවකාලිකව මන්දගාමී විය හැකිය."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"මෙම උපාංගය දෝෂාවේක්ෂණය සඳහා උදවු කිරීමට ඔබේ IT පරිපාලක දෝෂ වාර්තාවක් ඉල්ලා ඇත. යෙදුම් සහ දත්ත බෙදා ගත හැකිය."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"මෙය ඔබේ උපාංගය තාවකාලිකව මන්දගාමී කළ හැකිය"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"පිළිගන්න"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ප්රතික්ෂේප කරන්න"</string> <string name="select_input_method" msgid="8547250819326693584">"යතුරු පුවරු වෙනස් කිරීම"</string> @@ -1545,8 +1539,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ක් තෝරන ලදි</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ක් තෝරන ලදි</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"විවිධාකාර"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"ඔබ මෙම දැනුම්දීම්වල වැදගත්කම සකසා ඇත."</string> + <string name="importance_from_user" msgid="7318955817386549931">"ඔබ මෙම දැනුම්දීම්වල වැදගත්කම සකසා ඇත."</string> <string name="importance_from_person" msgid="9160133597262938296">"සම්බන්ධ වූ පුද්ගලයන් නිසා මෙය වැදගත් වේ."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g> හට <xliff:g id="ACCOUNT">%2$s</xliff:g> සමගින් නව පරිශීලකයෙකු සෑදීමට ඉඩ දෙන්නද?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="APP">%1$s</xliff:g> හට <xliff:g id="ACCOUNT">%2$s</xliff:g> සමගින් නව පරිශීලකයෙකු සෑදීමට ඉඩ දෙන්නද (මෙම ගිණුම සහිත පරිශීලකයෙකු දැනටමත් සිටී) ?"</string> @@ -1573,4 +1566,6 @@ <string name="pin_target" msgid="3052256031352291362">"අමුණන්න"</string> <string name="unpin_target" msgid="3556545602439143442">"ගලවන්න"</string> <string name="app_info" msgid="6856026610594615344">"යෙදුම් තොරතුරු"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml index 88e3939130b1..d3c1da2f2a9d 100644 --- a/core/res/res/values-sk/strings.xml +++ b/core/res/res/values-sk/strings.xml @@ -90,7 +90,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"V predvolenom nastavení nie je identifikácia volajúceho obmedzená. Ďalší hovor: Bez obmedzenia"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Služba nie je poskytovaná."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Nemôžete meniť nastavenia identifikácie volajúceho."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Obmedzený prístup bol zmenený"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Údajová služba je zablokovaná."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Tiesňová služba je zablokovaná."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Hlasová služba je zablokovaná."</string> @@ -929,7 +928,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Resetovať a reštartovať aplikáciu"</string> <string name="aerr_report" msgid="5371800241488400617">"Odoslať spätnú väzbu"</string> <string name="aerr_close" msgid="2991640326563991340">"Zavrieť"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Ignorovať"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Ignorovať do reštartu zariadenia"</string> <string name="aerr_wait" msgid="3199956902437040261">"Čakať"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Zavrieť aplikáciu"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1069,16 +1068,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Ďalšie možnosti zobrazíte klepnutím."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Ladenie cez USB pripojené"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Klepnutím zakážete ladenie cez USB"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Chcete zdieľať hlásenie chyby?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Zdieľa sa hlásenie chyby…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Správca IT si vyžiadal hlásenie chyby, aby mohol vyriešiť problém na tomto zariadení. Aplikácie a dáta môžu byť zdieľané. Môže to dočasne spomaliť vaše zariadenie."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Správca IT si vyžiadal hlásenie chyby, aby mohol vyriešiť problém na tomto zariadení. Aplikácie a dáta môžu byť zdieľané."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Môže to dočasne spomaliť vaše zariadenie."</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"PRIJAŤ"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ODMIETNUŤ"</string> <string name="select_input_method" msgid="8547250819326693584">"Zmeniť klávesnicu"</string> @@ -1581,8 +1575,7 @@ <item quantity="other">Vybrané: <xliff:g id="COUNT_1">%1$d</xliff:g></item> <item quantity="one">Vybrané: <xliff:g id="COUNT_0">%1$d</xliff:g></item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Rôzne"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Nastavili ste dôležitosť týchto upozornení."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Nastavili ste dôležitosť týchto upozornení."</string> <string name="importance_from_person" msgid="9160133597262938296">"Táto správa je dôležitá vzhľadom na osoby, ktorých sa to týka."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Povoliť aplikácii <xliff:g id="APP">%1$s</xliff:g> vytvoriť nového používateľa pomocou účtu <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Povoliť aplikácii <xliff:g id="APP">%1$s</xliff:g> vytvoriť nového používateľa pomocou účtu <xliff:g id="ACCOUNT">%2$s</xliff:g> (používateľ s týmto účtom už existuje)?"</string> @@ -1609,4 +1602,6 @@ <string name="pin_target" msgid="3052256031352291362">"Pripnúť"</string> <string name="unpin_target" msgid="3556545602439143442">"Uvoľniť"</string> <string name="app_info" msgid="6856026610594615344">"Info o aplikácii"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml index e821a7fbeed3..bf0c9619c10e 100644 --- a/core/res/res/values-sl/strings.xml +++ b/core/res/res/values-sl/strings.xml @@ -90,7 +90,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"ID klicatelja je ponastavljen na neomejeno. Naslednji klic: ni omejeno"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Storitev ni nastavljena in omogočena."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Ne morete spremeniti nastavitve ID-ja klicatelja."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Omejen dostop je spremenjen"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Podatkovna storitev je blokirana."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Klic v sili je blokiran."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Glasovna storitev je blokirana."</string> @@ -929,7 +928,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Ponastavitev in vnovični zagon aplikacije"</string> <string name="aerr_report" msgid="5371800241488400617">"Pošlji povratne informacije"</string> <string name="aerr_close" msgid="2991640326563991340">"Zapri"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Prezri"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Prezri do vnovičnega zagona naprave"</string> <string name="aerr_wait" msgid="3199956902437040261">"Počakajte"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Zapri aplikacijo"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1069,16 +1068,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Za več možnosti se dotaknite."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Iskanje in odpravljanje napak USB je povezano"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Dotaknite se, če želite onemogočiti iskanje in odpravljanje napak prek vrat USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Želite poslati poročilo o napakah?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Pošiljanje poročila o napakah …"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Skrbnik za IT je zahteval poročilo o napakah za pomoč pri odpravljanju napak v tej napravi. Aplikacije in podatki bodo morda dani v skupno rabo in delovanje naprave bo morda začasno upočasnjeno."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Skrbnik za IT je zahteval poročilo o napakah za pomoč pri odpravljanju napak v tej napravi. Aplikacije in podatki bodo morda dani v skupno rabo."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"To bo morda začasno upočasnilo delovanje naprave"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"SPREJMEM"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"NE SPREJMEM"</string> <string name="select_input_method" msgid="8547250819326693584">"Sprememba tipkovnice"</string> @@ -1581,8 +1575,7 @@ <item quantity="few"><xliff:g id="COUNT_1">%1$d</xliff:g> izbrani</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> izbranih</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Razno"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Vi določite raven pomembnosti teh obvestil."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Vi določite raven pomembnosti teh obvestil."</string> <string name="importance_from_person" msgid="9160133597262938296">"Pomembno zaradi udeleženih ljudi."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Dovolite, da aplikacija <xliff:g id="APP">%1$s</xliff:g> ustvari novega uporabnika za račun <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Dovolite aplikaciji <xliff:g id="APP">%1$s</xliff:g>, da ustvari novega uporabnika za račun <xliff:g id="ACCOUNT">%2$s</xliff:g> (uporabnik s tem računom že obstaja)?"</string> @@ -1609,4 +1602,6 @@ <string name="pin_target" msgid="3052256031352291362">"Pripenjanje"</string> <string name="unpin_target" msgid="3556545602439143442">"Odpenjanje"</string> <string name="app_info" msgid="6856026610594615344">"Podatki o aplikaciji"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-sq-rAL/strings.xml b/core/res/res/values-sq-rAL/strings.xml index ed2c0662d2ad..f200acd05f3a 100644 --- a/core/res/res/values-sq-rAL/strings.xml +++ b/core/res/res/values-sq-rAL/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"ID-ja e telefonuesit kalon me paracaktim në listën e të telefonuesve të pakufizuar. Telefonata e radhës: e pakufizuar!"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Shërbimi nuk është përgatitur."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Nuk mund ta ndryshosh cilësimin e ID-së së telefonuesit."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Qasja e kufizuar u ndryshua"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Shërbimi i të dhënave është i bllokuar."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Shërbimi i urgjencës është i bllokuar."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Shërbimi me zë është bllokuar."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Rivendos dhe rinis aplikacionin"</string> <string name="aerr_report" msgid="5371800241488400617">"Dërgo komentin"</string> <string name="aerr_close" msgid="2991640326563991340">"Mbyll"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Çaktivizo audion"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Vendose në heshtje deri kur të riniset pajisja"</string> <string name="aerr_wait" msgid="3199956902437040261">"Prit!"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Mbyll aplikacionin"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Prek për më shumë opsione."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Korrigjuesi i USB-së i lidhur"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Prek për të çaktivizuar korrigjimin e gabimeve të USB-së."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Të ndahet raporti i defektit në kod?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Po ndan raportin e defekteve në kod..."</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Administratori i teknologjisë së informacionit kërkoi një raport të defekteve në kod për të ndihmuar me zgjidhjen e problemeve. Aplikacioni dhe të dhënat mund të ndahen dhe kjo mund të ngadalësojë përkohësisht pajisjen tënde."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Administratori i teknologjisë së informacionit kërkoi një raport të defekteve në kod për të ndihmuar me zgjidhjen e problemeve. Aplikacioni dhe të dhënat mund të ndahen."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Kjo mund të ngadalësojë përkohësisht pajisjen tënde"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"PRANO"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"REFUZO"</string> <string name="select_input_method" msgid="8547250819326693584">"Ndërro tastierë"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> të zgjedhura</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> i zgjedhur</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Të ndryshme"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Ke caktuar rëndësinë e këtyre njoftimeve."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Ke caktuar rëndësinë e këtyre njoftimeve."</string> <string name="importance_from_person" msgid="9160133597262938296">"Është i rëndësishëm për shkak të personave të përfshirë."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Dëshiron të lejosh <xliff:g id="APP">%1$s</xliff:g> që të krijojë një përdorues të ri me <xliff:g id="ACCOUNT">%2$s</xliff:g> ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Dëshiron të lejosh <xliff:g id="APP">%1$s</xliff:g> që të krijojë një përdorues të ri me <xliff:g id="ACCOUNT">%2$s</xliff:g> (një përdorues me këtë llogari ekziston tashmë) ?"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Gozhdo"</string> <string name="unpin_target" msgid="3556545602439143442">"Zhgozhdo"</string> <string name="app_info" msgid="6856026610594615344">"Informacioni mbi aplikacionin"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml index 2212c98f8082..c870c0516cca 100644 --- a/core/res/res/values-sr/strings.xml +++ b/core/res/res/values-sr/strings.xml @@ -89,7 +89,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"ИД позиваоца подразумевано није ограничен. Следећи позив: Није ограничен."</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Услуга није добављена."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Не можете да промените подешавање ИД-а корисника."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Ограничени приступ је промењен"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Услуга за податке је блокирана."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Услуга за хитне случајеве је блокирана."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Гласовна услуга је блокирана."</string> @@ -923,7 +922,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Ресетуј и поново покрени апликацију"</string> <string name="aerr_report" msgid="5371800241488400617">"Пошаљите повратне информације"</string> <string name="aerr_close" msgid="2991640326563991340">"Затвори"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Игнориши"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Игнориши док се уређај не покрене поново"</string> <string name="aerr_wait" msgid="3199956902437040261">"Чекај"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Затвори апликацију"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1061,16 +1060,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Додирните за још опција."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Отклањање грешака са USB-а је успостављено"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Додирните да бисте онемогућили отклањање грешака са USB-а."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Желите ли да поделите извештај о грешци?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Дели се извештај о грешци…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"ИТ администратор је затражио извештај о грешци ради лакшег решавања проблема у вези са овим уређајем. Апликације и подаци могу да се деле, а уређај ће се привремено успорити."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"ИТ администратор је затражио извештај о грешци ради лакшег решавања проблема у вези са овим уређајем. Апликације и подаци могу да се деле."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Ово ће привремено успорити уређај"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ПРИХВАТИ"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ОДБИЈ"</string> <string name="select_input_method" msgid="8547250819326693584">"Промените тастатуру"</string> @@ -1562,8 +1556,7 @@ <item quantity="few">Изабране су <xliff:g id="COUNT_1">%1$d</xliff:g> ставке</item> <item quantity="other">Изабрано је <xliff:g id="COUNT_1">%1$d</xliff:g> ставки</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Разно"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Ви подешавате важност ових обавештења."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Ви подешавате важност ових обавештења."</string> <string name="importance_from_person" msgid="9160133597262938296">"Ово је важно због људи који учествују."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Желите ли да дозволите апликацији <xliff:g id="APP">%1$s</xliff:g> да направи новог корисника за <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Желите ли да дозволите апликацији <xliff:g id="APP">%1$s</xliff:g> да направи новог корисника за <xliff:g id="ACCOUNT">%2$s</xliff:g> (корисник са овим налогом већ постоји)?"</string> @@ -1590,4 +1583,6 @@ <string name="pin_target" msgid="3052256031352291362">"Закачи"</string> <string name="unpin_target" msgid="3556545602439143442">"Откачи"</string> <string name="app_info" msgid="6856026610594615344">"Информације о апликацији"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml index 8483eaa62666..2ef1ac8a38eb 100644 --- a/core/res/res/values-sv/strings.xml +++ b/core/res/res/values-sv/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Nummerpresentatörens standardinställning är inte begränsad. Nästa samtal: Inte begränsad"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Tjänsten är inte etablerad."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Det går inte att ändra inställningen för nummerpresentatör."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Begränsad åtkomst har ändrats"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Datatjänsten är blockerad."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Räddningstjänsten är blockerad."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Rösttjänsten är blockerad."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Återställ och starta om appen"</string> <string name="aerr_report" msgid="5371800241488400617">"Skicka feedback"</string> <string name="aerr_close" msgid="2991640326563991340">"Stäng"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Dölj"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Ignorera tills enheten har startat om"</string> <string name="aerr_wait" msgid="3199956902437040261">"Vänta"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Stäng appen"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Visa fler alternativ genom att trycka."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB-felsökning ansluten"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Tryck om du vill inaktivera USB-felsökning."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Vill du dela felrapporten?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Felrapporten delas …"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"IT-administratören har bett om en felrapport som hjälp vid felsökningen av den här enheten. Appar och data kan komma att delas. Detta kan tillfälligt göra enheten långsammare."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"IT-administratören har bett om en felrapport som hjälp vid felsökningen av den här enheten. Appar och data kan komma att delas."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Detta kan tillfälligt göra enheten långsammare"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"GODKÄNN"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"AVVISA"</string> <string name="select_input_method" msgid="8547250819326693584">"Byt tangentbord"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> har valts</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> har valts</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Diverse"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Du anger hur viktiga aviseringarna är."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Du anger hur viktiga aviseringarna är."</string> <string name="importance_from_person" msgid="9160133597262938296">"Detta är viktigt på grund av personerna som deltar."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Tillåter du att <xliff:g id="APP">%1$s</xliff:g> skapar en ny användare för <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Tillåter du att <xliff:g id="APP">%1$s</xliff:g> skapar en ny användare för <xliff:g id="ACCOUNT">%2$s</xliff:g> (det finns redan en användare med det här kontot)?"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Fäst"</string> <string name="unpin_target" msgid="3556545602439143442">"Lossa"</string> <string name="app_info" msgid="6856026610594615344">"Info om appen"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml index 856476473380..f3bd2d38cc87 100644 --- a/core/res/res/values-sw/strings.xml +++ b/core/res/res/values-sw/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Chaguo-msingi za ID ya mpigaji simu za kutozuia. Simu ifuatayo: Haijazuiliwa"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Huduma haitathminiwi."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Hauwezi kubadilisha mpangilio wa kitambulisho cha anayepiga."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Ufikiaji uliozuiwa umebadilishwa"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Huduma ya data imezuiwa."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Huduma ya dharura imezuiwa."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Huduma ya sauti imezuiwa."</string> @@ -919,7 +918,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Weka na uanzishe upya programu"</string> <string name="aerr_report" msgid="5371800241488400617">"Tuma maoni yako"</string> <string name="aerr_close" msgid="2991640326563991340">"Funga"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Komesha"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Komesha hadi kifaa kianze upya"</string> <string name="aerr_wait" msgid="3199956902437040261">"Subiri"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Funga programu"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1055,16 +1054,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Gusa kwa chaguo zaidi."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Utatuaji wa USB umeunganishwa"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Gusa ili uzime utatuaji wa USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Ungependa kushiriki ripoti ya hitilafu?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Inashiriki ripoti ya hitilafu…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Msimamizi wako wa Teknolojia ya Habari ameomba ripoti ya hitilafu ili kusaidia katika utatuzi wa kifaa hiki. Huenda hatua hii ikasababisha programu na data kushirikiwa na kupunguza kasi ya kifaa chako kwa muda."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Msimamizi wako wa TEHAMA ameomba ripoti ya hitilafu ili kusaidia katika utatuzi wa hitilafu kwenye kifaa hiki. Programu na data zinaweza kushirikiwa."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Hatua hii inaweza kupunguza kasi ya kifaa chako kwa muda"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"KUBALI"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"KATAA"</string> <string name="select_input_method" msgid="8547250819326693584">"Badilisha kibodi"</string> @@ -1545,8 +1539,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> vimechaguliwa</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> kimechaguliwa</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Anuwai"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Uliweka umuhimu wa arifa hizi."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Uliweka mipangilio ya umuhimu wa arifa hizi."</string> <string name="importance_from_person" msgid="9160133597262938296">"Hii ni muhimu kwa sababu ya watu waliohusika."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Ungependa kuruhusu <xliff:g id="APP">%1$s</xliff:g> iunde Mtumiaji mpya ikitumia <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Ungependa kuruhusu <xliff:g id="APP">%1$s</xliff:g> iunde Mtumiaji mpya ikitumia <xliff:g id="ACCOUNT">%2$s</xliff:g> (Je, akaunti hii tayari ina Mtumiaji)?"</string> @@ -1573,4 +1566,6 @@ <string name="pin_target" msgid="3052256031352291362">"Bandika"</string> <string name="unpin_target" msgid="3556545602439143442">"Bandua"</string> <string name="app_info" msgid="6856026610594615344">"Maelezo ya programu"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-ta-rIN/strings.xml b/core/res/res/values-ta-rIN/strings.xml index b5f36737c118..f4c2ef0dbbf6 100644 --- a/core/res/res/values-ta-rIN/strings.xml +++ b/core/res/res/values-ta-rIN/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"அழைப்பாளர் ஐடி ஆனது வரையறுக்கப்படவில்லை என்பதற்கு இயல்பாக அமைக்கப்பட்டது. அடுத்த அழைப்பு: வரையறுக்கப்படவில்லை"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"சேவை ஒதுக்கப்படவில்லை."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"அழைப்பாளர் ஐடி அமைப்பை மாற்ற முடியாது."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"வரையறுக்கப்பட்ட அணுகல் மாற்றப்பட்டது"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"தரவு சேவை தடைசெய்யப்பட்டுள்ளது."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"அவசர சேவை தடைசெய்யப்பட்டுள்ளது."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"குரல் சேவை தடைசெய்யப்பட்டுள்ளது."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"பயன்பாட்டை மீட்டமைத்து மீண்டும் தொடங்கு"</string> <string name="aerr_report" msgid="5371800241488400617">"கருத்து தெரிவி"</string> <string name="aerr_close" msgid="2991640326563991340">"மூடு"</string> - <string name="aerr_mute" msgid="7698966346654789433">"முடக்கு"</string> + <string name="aerr_mute" msgid="1974781923723235953">"சாதனம் மீண்டும் தொடங்கும் வரை முடக்கு"</string> <string name="aerr_wait" msgid="3199956902437040261">"காத்திரு"</string> <string name="aerr_close_app" msgid="3269334853724920302">"பயன்பாட்டை மூடு"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"கூடுதல் விருப்பங்களுக்காகத் தொடவும்."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB பிழைதிருத்தம் இணைக்கப்பட்டது"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB பிழைத்திருத்தத்தை முடக்க, தொடவும்."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"பிழை அறிக்கையைப் பகிரவா?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"பிழை அறிக்கையைப் பகிர்கிறது…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"இந்தச் சாதனத்தின் பிழைகாண்பதற்கு உதவ, உங்கள் ஐடி நிர்வாகி பிழை அறிக்கையைக் கோரியுள்ளார். பயன்பாடுகளும் தரவும் பகிரப்படலாம். தற்காலிகமாக சாதனத்தின் வேகம் குறையலாம்."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"இந்தச் சாதனத்தின் பிழைகாண்பதற்கு உதவ, உங்கள் ஐடி நிர்வாகி பிழை அறிக்கையைக் கோரியுள்ளார். பயன்பாடுகளும் தரவும் பகிரப்படலாம்."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"இது தற்காலிகமாக சாதனத்தின் வேகத்தைக் குறைக்கலாம்"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"சரி"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"வேண்டாம்"</string> <string name="select_input_method" msgid="8547250819326693584">"விசைப்பலகையை மாற்று"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> தேர்ந்தெடுக்கப்பட்டன</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> தேர்ந்தெடுக்கப்பட்டது</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"இதர அமைப்பு"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"இந்த அறிவிப்புகளின் முக்கியத்துவத்தை அமைத்துள்ளீர்கள்."</string> + <string name="importance_from_user" msgid="7318955817386549931">"இந்த அறிவிப்புகளின் முக்கியத்துவத்தை அமைத்துள்ளீர்கள்."</string> <string name="importance_from_person" msgid="9160133597262938296">"ஈடுபட்டுள்ளவர்களின் காரணமாக, இது முக்கியமானது."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="ACCOUNT">%2$s</xliff:g> மூலம் புதிய பயனரை உருவாக்க <xliff:g id="APP">%1$s</xliff:g>ஐ அனுமதிக்கவா?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="ACCOUNT">%2$s</xliff:g> (இந்தக் கணக்கில் ஏற்கனவே ஒரு பயனர் உள்ளார்) மூலம் புதிய பயனரை உருவாக்க <xliff:g id="APP">%1$s</xliff:g>ஐ அனுமதிக்கவா?"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"பின் செய்"</string> <string name="unpin_target" msgid="3556545602439143442">"பின்னை அகற்று"</string> <string name="app_info" msgid="6856026610594615344">"பயன்பாட்டுத் தகவல்"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-te-rIN/strings.xml b/core/res/res/values-te-rIN/strings.xml index e7d0fa886d42..cbd7776582f7 100644 --- a/core/res/res/values-te-rIN/strings.xml +++ b/core/res/res/values-te-rIN/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"కాలర్ ID డిఫాల్ట్గా అపరిమితానికి ఉంటుంది. తదుపరి కాల్: అపరిమితం"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"సేవ కేటాయించబడలేదు."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"మీరు కాలర్ ID సెట్టింగ్ను మార్చలేరు."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"పరిమితం చేయబడిన ప్రాప్యత మార్చబడింది"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"డేటా సేవ బ్లాక్ చేయబడింది."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"అత్యవసర సేవ బ్లాక్ చేయబడింది."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"వాయిస్ సేవ బ్లాక్ చేయబడింది."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"రీసెట్ చేసి, అనువర్తనాన్ని పునఃప్రారంభించు"</string> <string name="aerr_report" msgid="5371800241488400617">"అభిప్రాయాన్ని పంపు"</string> <string name="aerr_close" msgid="2991640326563991340">"మూసివేయి"</string> - <string name="aerr_mute" msgid="7698966346654789433">"మ్యూట్ చేయి"</string> + <string name="aerr_mute" msgid="1974781923723235953">"పరికరం పునఃప్రారంభమయ్యే వరకు మ్యూట్ చేయి"</string> <string name="aerr_wait" msgid="3199956902437040261">"వేచి ఉండండి"</string> <string name="aerr_close_app" msgid="3269334853724920302">"అనువర్తనాన్ని మూసివేయి"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"మరిన్ని ఎంపికల కోసం తాకండి."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB డీబగ్గింగ్ కనెక్ట్ చేయబడింది"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB డీబగ్గింగ్ను నిలిపివేయడానికి తాకండి."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"బగ్ నివేదికను భాగస్వామ్యం చేయాలా?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"బగ్ నివేదికను భాగస్వామ్యం చేస్తోంది..."</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"మీ ఐటి నిర్వాహకులు ఈ పరికరం సమస్యకు పరిష్కారాన్ని కనుగొనడంలో సహాయం కోసం బగ్ నివేదికను అభ్యర్థించారు. అనువర్తనాలు మరియు డేటా భాగస్వామ్యం చేయబడవచ్చు మరియు మీ పరికరం పనితీరు తాత్కాలికంగా నెమ్మదించవచ్చు."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"మీ ఐటి నిర్వాహకులు ఈ పరికరం సమస్యకు పరిష్కారాన్ని కనుగొనడంలో సహాయం కోసం బగ్ నివేదికను అభ్యర్థించారు. అనువర్తనాలు మరియు డేటా భాగస్వామ్యం చేయబడవచ్చు."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"దీని వల్ల మీ పరికరం పనితీరు తాత్కాలికంగా నెమ్మదించవచ్చు"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ఆమోదిస్తున్నాను"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"తిరస్కరిస్తున్నాను"</string> <string name="select_input_method" msgid="8547250819326693584">"కీబోర్డ్ను మార్చు"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ఎంచుకోబడ్డాయి</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ఎంచుకోబడింది</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"ఇతరాలు"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"మీరు ఈ నోటిఫికేషన్ల ప్రాముఖ్యతను సెట్ చేసారు."</string> + <string name="importance_from_user" msgid="7318955817386549931">"మీరు ఈ నోటిఫికేషన్ల ప్రాముఖ్యతను సెట్ చేసారు."</string> <string name="importance_from_person" msgid="9160133597262938296">"ఇందులో పేర్కొనబడిన వ్యక్తులను బట్టి ఇది చాలా ముఖ్యమైనది."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="ACCOUNT">%2$s</xliff:g>తో కొత్త వినియోగదారుని సృష్టించడానికి <xliff:g id="APP">%1$s</xliff:g>ని అనుమతించాలా ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="ACCOUNT">%2$s</xliff:g>తో (ఈ ఖాతాతో ఇప్పటికే ఒక వినియోగదారు ఉన్నారు) కొత్త వినియోగదారుని సృష్టించడానికి <xliff:g id="APP">%1$s</xliff:g>ని అనుమతించాలా?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"పిన్ చేయి"</string> <string name="unpin_target" msgid="3556545602439143442">"అన్పిన్ చేయి"</string> <string name="app_info" msgid="6856026610594615344">"అనువర్తన సమాచారం"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-television/config.xml b/core/res/res/values-television/config.xml index 0f98cfba478f..f24f67deee4e 100644 --- a/core/res/res/values-television/config.xml +++ b/core/res/res/values-television/config.xml @@ -25,10 +25,10 @@ <bool name="config_defaultWindowFeatureOptionsPanel">false</bool> <!-- Default bounds [left top right bottom] on screen for picture-in-picture windows. --> - <string translatable="false" name="config_defaultPictureInPictureBounds">"1420 100 1820 325"</string> + <string translatable="false" name="config_defaultPictureInPictureBounds">"1328 54 1808 324"</string> <!-- Bounds [left top right bottom] on screen for picture-in-picture (PIP) windows, when the PIP is located in center. --> - <string translatable="false" name="config_centeredPictureInPictureBounds">"600 331 1320 749"</string> + <string translatable="false" name="config_centeredPictureInPictureBounds">"596 280 1324 690"</string> </resources> diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml index 8486c7be291f..ca08fd532eb0 100644 --- a/core/res/res/values-th/strings.xml +++ b/core/res/res/values-th/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"หมายเลขผู้โทรได้รับการตั้งค่าเริ่มต้นเป็นไม่จำกัด การโทรครั้งต่อไป: ไม่จำกัด"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"ไม่มีการนำเสนอบริการ"</string> <string name="CLIRPermanent" msgid="3377371145926835671">"คุณไม่สามารถเปลี่ยนการตั้งค่าหมายเลขผู้โทร"</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"เปลี่ยนแปลงการเข้าถึงอย่างจำกัดแล้ว"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"บริการข้อมูลถูกปิดกั้น"</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"บริการฉุกเฉินถูกปิดกั้น"</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"บริการเสียงถูกปิดกั้น"</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"รีเซ็ตแอปและเปิดใหม่"</string> <string name="aerr_report" msgid="5371800241488400617">"ส่งความคิดเห็น"</string> <string name="aerr_close" msgid="2991640326563991340">"ปิด"</string> - <string name="aerr_mute" msgid="7698966346654789433">"ปิด"</string> + <string name="aerr_mute" msgid="1974781923723235953">"ปิดการแจ้งเตือนจนกว่าอุปกรณ์จะรีสตาร์ท"</string> <string name="aerr_wait" msgid="3199956902437040261">"รอ"</string> <string name="aerr_close_app" msgid="3269334853724920302">"ปิดแอป"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"แตะเพื่อดูตัวเลือกเพิ่มเติม"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"เชื่อมต่อการแก้ไขข้อบกพร่อง USB แล้ว"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"แตะเพื่อปิดใช้งานการแก้ไขข้อบกพร่อง USB"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"แชร์รายงานข้อบกพร่องไหม"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"กำลังแชร์รายงานข้อบกพร่อง…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"ผู้ดูแลระบบไอทีของคุณขอรายงานข้อบกพร่องเพื่อช่วยในการแก้ปัญหาอุปกรณ์นี้ อาจมีการแชร์แอปและข้อมูล ซึ่งอาจทำให้อุปกรณ์ทำงานช้าลงชั่วคราว"</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"ผู้ดูแลระบบไอทีของคุณขอรายงานข้อบกพร่องเพื่อช่วยในการแก้ปัญหาอุปกรณ์นี้ อาจมีการแชร์แอปและข้อมูล"</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"การดำเนินการนี้อาจทำให้อุปกรณ์ทำงานช้าลงชั่วคราว"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ยอมรับ"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ปฏิเสธ"</string> <string name="select_input_method" msgid="8547250819326693584">"เปลี่ยนแป้นพิมพ์"</string> @@ -1543,8 +1537,7 @@ <item quantity="other">เลือกไว้ <xliff:g id="COUNT_1">%1$d</xliff:g> รายการ</item> <item quantity="one">เลือกไว้ <xliff:g id="COUNT_0">%1$d</xliff:g> รายการ</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"เบ็ดเตล็ด"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"คุณตั้งค่าความสำคัญของการแจ้งเตือนเหล่านี้"</string> + <string name="importance_from_user" msgid="7318955817386549931">"คุณตั้งค่าความสำคัญของการแจ้งเตือนเหล่านี้"</string> <string name="importance_from_person" msgid="9160133597262938296">"ข้อความนี้สำคัญเนื่องจากบุคคลที่เกี่ยวข้อง"</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"อนุญาตให้ <xliff:g id="APP">%1$s</xliff:g> สร้างผู้ใช้ใหม่ด้วย <xliff:g id="ACCOUNT">%2$s</xliff:g> ไหม"</string> <string name="user_creation_adding" msgid="4482658054622099197">"อนุญาตให้ <xliff:g id="APP">%1$s</xliff:g> สร้างผู้ใช้ใหม่ด้วย <xliff:g id="ACCOUNT">%2$s</xliff:g> (มีผู้ใช้ที่มีบัญชีนี้อยู่แล้ว) ไหม"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"ปักหมุด"</string> <string name="unpin_target" msgid="3556545602439143442">"เลิกปักหมุด"</string> <string name="app_info" msgid="6856026610594615344">"ข้อมูลแอป"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml index 70b32c737717..72034d174ad3 100644 --- a/core/res/res/values-tl/strings.xml +++ b/core/res/res/values-tl/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Naka-default na hindi pinaghihigpitan ang Caller ID. Susunod na tawag: Hindi pinaghihigpitan"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Hindi naprobisyon ang serbisyo."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Hindi mo mababago ang setting ng caller ID."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Nabago ang pinaghihigpitang access"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Naka-block ang serbisyo ng data."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Naka-block ang pang-emergency na serbisyo."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Naka-block ang serbisyo ng voice."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"I-reset at i-restart ang app"</string> <string name="aerr_report" msgid="5371800241488400617">"Magpadala ng feedback"</string> <string name="aerr_close" msgid="2991640326563991340">"Isara"</string> - <string name="aerr_mute" msgid="7698966346654789433">"I-mute"</string> + <string name="aerr_mute" msgid="1974781923723235953">"I-mute hanggang sa mag-restart ang device"</string> <string name="aerr_wait" msgid="3199956902437040261">"Maghintay"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Isara ang app"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Pindutin para sa higit pang mga opsyon."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Konektado ang debugging ng USB"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Pindutin upang i-disable ang pagde-debug ng USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Gusto mo bang ibahagi ang ulat ng bug?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Ibinabahagi ang ulat ng bug…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Humiling ang iyong IT admin ng isang ulat ng bug upang makatulong sa pag-troubleshoot sa device na ito. Maaaring ibahagi ang mga app at data at maaaring pansamantalang bumagal ang iyong device."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Humiling ang iyong IT admin ng isang ulat ng bug upang makatulong sa pag-troubleshoot sa device na ito. Maaaring ibahagi ang mga app at data."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Maaaring pansamantalang bumagal ang iyong device dahil dito"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"TANGGAPIN"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"TANGGIHAN"</string> <string name="select_input_method" msgid="8547250819326693584">"Baguhin ang keyboard"</string> @@ -1543,8 +1537,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ang napili</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ang napili</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Iba Pa"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Ikaw ang magtatakda ng kahalagahan ng mga notification na ito."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Ikaw ang magtatakda sa kahalagahan ng mga notification na ito."</string> <string name="importance_from_person" msgid="9160133597262938296">"Mahalaga ito dahil sa mga taong kasangkot."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Payagan ang <xliff:g id="APP">%1$s</xliff:g> na gumawa ng bagong User sa <xliff:g id="ACCOUNT">%2$s</xliff:g> ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Payagan ang <xliff:g id="APP">%1$s</xliff:g> na gumawa ng bagong User sa <xliff:g id="ACCOUNT">%2$s</xliff:g> (mayroon nang User sa account na ito) ?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"I-pin"</string> <string name="unpin_target" msgid="3556545602439143442">"I-unpin"</string> <string name="app_info" msgid="6856026610594615344">"Impormasyon ng app"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml index ee5527739571..e2c751e7f4b9 100644 --- a/core/res/res/values-tr/strings.xml +++ b/core/res/res/values-tr/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Arayan kimliği varsayılanları kısıtlanmamıştır. Sonraki çağrı: Kısıtlanmamış"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Hizmet sağlanamadı."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Arayanın kimliği ayarını değiştiremezsiniz."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Kısıtlanmış erişim değiştirildi"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Veri hizmeti engellendi."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Acil durum hizmeti engellendi."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Ses hizmeti engellendi."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Uygulamayı sıfırla ve yeniden başlat"</string> <string name="aerr_report" msgid="5371800241488400617">"Geri bildirim gönder"</string> <string name="aerr_close" msgid="2991640326563991340">"Kapat"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Yok say"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Cihaz yeniden başlatılana kadar bir daha gösterme"</string> <string name="aerr_wait" msgid="3199956902437040261">"Bekle"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Uygulamayı kapat"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Daha fazla seçenek için dokunun."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB hata ayıklaması bağlandı"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB hata ayıklama özelliğini devre dışı bırakmak için dokunun."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Hata raporu paylaşılsın mı?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Hata raporu paylaşılıyor..."</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"BT yöneticiniz, bu cihazda sorun gidermeye yardımcı olması için bir hata raporu istedi. Uygulamalar ve veriler paylaşılabilir. Bu durum, cihazınızı geçici olarak yavaşlatabilir."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"BT yöneticiniz, bu cihazda sorun gidermeye yardımcı olması için bir hata raporu istedi. Uygulamalar ve veriler paylaşılabilir."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Bu durum, cihazınızı geçici olarak yavaşlatabilir"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"KABUL ET"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"REDDET"</string> <string name="select_input_method" msgid="8547250819326693584">"Klavyeyi değiştir"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> öğe seçildi</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> öğe seçildi</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Çeşitli"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Bu bildirimlerin önem derecesini ayarladınız."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Bu bildirimlerin önem derecesini ayarladınız."</string> <string name="importance_from_person" msgid="9160133597262938296">"Bu, dahil olan kişiler nedeniyle önemlidir."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g> uygulamasının <xliff:g id="ACCOUNT">%2$s</xliff:g> hesabına sahip yeni bir Kullanıcı eklemesine izin verilsin mi?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="APP">%1$s</xliff:g> uygulamasının <xliff:g id="ACCOUNT">%2$s</xliff:g> hesabına sahip yeni bir Kullanıcı eklemesine izin verilsin mi (bu hesaba sahip bir kullanıcı zaten var)?"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Sabitle"</string> <string name="unpin_target" msgid="3556545602439143442">"Sabitlemeyi kaldır"</string> <string name="app_info" msgid="6856026610594615344">"Uygulama bilgileri"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml index f546d56492fd..e805a99ab0ea 100644 --- a/core/res/res/values-uk/strings.xml +++ b/core/res/res/values-uk/strings.xml @@ -90,7 +90,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Ідентиф. абонента за умовч. не обмеж. Наст. дзвінок: не обмежений"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Службу не ініціалізовано."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Ви не можете змінювати налаштування ідентифікатора абонента."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Обмежений доступ змінено"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Службу даних заблоковано."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Аварійну службу заблоковано."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Голосову службу заблоковано."</string> @@ -929,7 +928,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Скинути та перезапустити додаток"</string> <string name="aerr_report" msgid="5371800241488400617">"Надіслати відгук"</string> <string name="aerr_close" msgid="2991640326563991340">"Закрити"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Вимкнути звук"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Вимкнути звук до перезавантаження пристрою"</string> <string name="aerr_wait" msgid="3199956902437040261">"Чекати"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Закрити додаток"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1069,16 +1068,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Торкніться, щоб побачити більше опцій."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Налагодження USB завершено"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Торкніться, щоб вимкнути налагодження USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Надіслати звіт про помилку?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Надсилається звіт про помилку…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Ваш IT-адміністратор просить надіслати повідомлення про помилку, щоб вирішити проблему з пристроєм. Він може отримати доступ до ваших додатків і даних. Це також може тимчасово сповільнити роботу вашого пристрою."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Ваш IT-адміністратор просить надіслати повідомлення про помилку, щоб вирішити проблему з пристроєм. Він може отримати доступ до ваших додатків і даних."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Це може тимчасово сповільнити роботу вашого пристрою"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"ПРИЙНЯТИ"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"ВІДХИЛИТИ"</string> <string name="select_input_method" msgid="8547250819326693584">"Змінити клавіатуру"</string> @@ -1581,8 +1575,7 @@ <item quantity="many">Вибрано <xliff:g id="COUNT_1">%1$d</xliff:g></item> <item quantity="other">Вибрано <xliff:g id="COUNT_1">%1$d</xliff:g></item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Інше"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Ви вказуєте пріоритет цих сповіщень."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Ви вказуєте пріоритет цих сповіщень."</string> <string name="importance_from_person" msgid="9160133597262938296">"Важливе з огляду на учасників."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Дозволити додатку <xliff:g id="APP">%1$s</xliff:g> створити нового користувача з обліковим записом <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Дозволити додатку <xliff:g id="APP">%1$s</xliff:g> створити нового користувача з обліковим записом <xliff:g id="ACCOUNT">%2$s</xliff:g> (користувач із таким обліковим записом уже існує)?"</string> @@ -1609,4 +1602,5 @@ <string name="pin_target" msgid="3052256031352291362">"Закріпити"</string> <string name="unpin_target" msgid="3556545602439143442">"Відкріпити"</string> <string name="app_info" msgid="6856026610594615344">"Про додаток"</string> + <string name="negative_duration" msgid="5688706061127375131">"-<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-ur-rPK/strings.xml b/core/res/res/values-ur-rPK/strings.xml index 80d4c85af858..b33cde028978 100644 --- a/core/res/res/values-ur-rPK/strings.xml +++ b/core/res/res/values-ur-rPK/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"کالر ID کی ڈیفالٹ ترتیب غیر محدود کردہ ہے۔ اگلی کال: غیر محدود کردہ"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"سروس فراہم نہیں کی گئی۔"</string> <string name="CLIRPermanent" msgid="3377371145926835671">"آپ کالر ID کی ترتیبات تبدیل نہیں کر سکتے ہیں۔"</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"محدود رسائی تبدیل ہو گئی"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"ڈیٹا سروس مسدود ہے۔"</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"ہنگامی سروس مسدود ہے۔"</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"صوتی سروس مسدود ہے۔"</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"ایپ کو دوبارہ ترتیب دیں اور دوبارہ شروع کریں"</string> <string name="aerr_report" msgid="5371800241488400617">"تاثرات بھیجیں"</string> <string name="aerr_close" msgid="2991640326563991340">"بند کریں"</string> - <string name="aerr_mute" msgid="7698966346654789433">"خاموش کریں"</string> + <string name="aerr_mute" msgid="1974781923723235953">"آلہ دوبارہ اسٹارٹ ہونے تک خاموش رکھیں"</string> <string name="aerr_wait" msgid="3199956902437040261">"انتظار کریں"</string> <string name="aerr_close_app" msgid="3269334853724920302">"ایپ بند کریں"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"مزید اختیارات کیلئے ٹچ کریں۔"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB ڈیبگ کرنا مربوط ہو گیا"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"USB ڈیبگنگ کو غیر فعال کرنے کیلئے ٹچ کریں۔"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"بگ رپورٹ کا اشتراک کریں؟"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"بگ رپورٹ کا اشتراک ہو رہا ہے…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"آپ کے IT منتظم نے اس آلہ کا مسئلہ حل کرنے میں مدد کیلئے ایک بگ رپورٹ کی درخواست کی ہے۔ ایپس اور ڈیٹا کا اشتراک ہو سکتا ہے اور آپ کا آلہ عارضی طور پر سست ہو سکتا ہے۔"</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"آپ کے IT منتظم نے اس آلہ کا مسئلہ حل کرنے میں مدد کیلئے ایک بگ رپورٹ کی درخواست کی ہے۔ ایپس اور ڈیٹا کا اشتراک ہو سکتا ہے۔"</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"اس سے آپ کا آلہ عارضی طور پر سست ہو سکتا ہے"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"قبول کریں"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"مسترد کریں"</string> <string name="select_input_method" msgid="8547250819326693584">"کی بورڈ تبدیل کریں"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> منتخب کردہ</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> منتخب کردہ</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"متفرقات"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"ان اطلاعات کی اہمیت آپ مقرر کرتے ہیں۔"</string> + <string name="importance_from_user" msgid="7318955817386549931">"ان اطلاعات کی اہمیت آپ مقرر کرتے ہیں۔"</string> <string name="importance_from_person" msgid="9160133597262938296">"اس میں موجود لوگوں کی وجہ سے یہ اہم ہے۔"</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g> کو <xliff:g id="ACCOUNT">%2$s</xliff:g> کے ساتھ ایک نیا صارف بنانے کی اجازت دیں؟"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="APP">%1$s</xliff:g> کو <xliff:g id="ACCOUNT">%2$s</xliff:g> کے ساتھ ایک نیا صارف بنانے کی اجازت دیں (اس اکاؤنٹ کے ساتھ ایک صارف پہلے سے موجود ہے) ؟"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"پن کریں"</string> <string name="unpin_target" msgid="3556545602439143442">"پن ہٹائیں"</string> <string name="app_info" msgid="6856026610594615344">"ایپ کی معلومات"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-uz-rUZ/strings.xml b/core/res/res/values-uz-rUZ/strings.xml index 8b5e2308b17e..655821455f60 100644 --- a/core/res/res/values-uz-rUZ/strings.xml +++ b/core/res/res/values-uz-rUZ/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Qo‘ng‘iroq qiluvchi ma’lumotlari cheklanmagan. Keyingi qo‘ng‘iroq: cheklanmagan"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Xizmat ishalamaydi."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Qo‘ng‘iroq qiluvchining ID raqami sozlamasini o‘zgartirib bo‘lmaydi."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Cheklangan ruxsatlar o‘zgartirildi"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Ma’lumot xizmati bloklandi."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Favqulodda xizmati bloklandi."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Ovoz xizmati bloklandi."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Ilovani qayta tiklash va qayta ishga tushirish"</string> <string name="aerr_report" msgid="5371800241488400617">"Fikr-mulohaza yuborish"</string> <string name="aerr_close" msgid="2991640326563991340">"Yopish"</string> - <string name="aerr_mute" msgid="7698966346654789433">"E’tiborsiz qoldirish"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Qurilma o‘chib yonguncha e’tiborsiz qoldirish"</string> <string name="aerr_wait" msgid="3199956902437040261">"Kuting"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Ilovani yopish"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -998,7 +997,7 @@ <string name="wifi_p2p_dialog_title" msgid="97611782659324517">"Wi-Fi Direct"</string> <string name="wifi_p2p_turnon_message" msgid="2909250942299627244">"Wi-Fi Direct’ni ishga tushirish. Bu Wi-Fi mijoz/ulanish nuqtasini o‘chiradi."</string> <string name="wifi_p2p_failed_message" msgid="3763669677935623084">"Wi-Fi Direct ishga tushirilmadi."</string> - <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct yoqilgan"</string> + <string name="wifi_p2p_enabled_notification_title" msgid="2068321881673734886">"Wi-Fi Direct yoniq"</string> <string name="wifi_p2p_enabled_notification_message" msgid="1638949953993894335">"Sozlamalarga kirish uchun bosing"</string> <string name="accept" msgid="1645267259272829559">"Qabul qilish"</string> <string name="decline" msgid="2112225451706137894">"Rad qilish"</string> @@ -1019,7 +1018,7 @@ <string name="sms_short_code_confirm_message" msgid="1645436466285310855">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> <b><xliff:g id="DEST_ADDRESS">%2$s</xliff:g></b>ga xabar jo‘natishni xohlaydi."</string> <string name="sms_short_code_details" msgid="5873295990846059400">"Bunda, mobil hisobingizdan "<b>"to‘lov olinishi mumkin"</b>"."</string> <string name="sms_premium_short_code_details" msgid="7869234868023975"><b>"Bunda, mobil hisobingizdan to‘lov olinishi mumkin."</b></string> - <string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Jo‘natish"</string> + <string name="sms_short_code_confirm_allow" msgid="4458878637111023413">"Yuborish"</string> <string name="sms_short_code_confirm_deny" msgid="2927389840209170706">"Bekor qilish"</string> <string name="sms_short_code_remember_choice" msgid="5289538592272218136">"Tanlovim eslab qolinsin"</string> <string name="sms_short_code_remember_undo_instruction" msgid="4960944133052287484">"Siz buni keyinroq sozlamalar > ilovalar menusidan o‘zgartirishingiz mumkin"</string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Sozlash uchun bosing."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"USB orqali nosozliklarni tuzatish"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"O‘chirib qo‘yish uchun bosing."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Xatoliklar hisoboti yuborilsinmi?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Xatoliklar hisoboti yuborilmoqda…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Administratoringiz bu qurilma nosozliklarini tuzatish uchun xatoliklar hisobotini so‘ramoqda. Ilova va ma’lumotlardan foydalanilishi va bu vaqtincha qurilmangizni sekinlashtirishi ham mumkin."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Administratoringiz bu qurilma nosozliklarini tuzatish uchun xatoliklar hisobotini so‘ramoqda. Ilova va ma’lumotlardan foydalanilishi mumkin."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Qurilmaning ishlash tezligi vaqtincha pasayishi mumkin."</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"QABUL QILISH"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"RAD ETISH"</string> <string name="select_input_method" msgid="8547250819326693584">"Klaviaturani o‘zgartirish"</string> @@ -1121,7 +1115,7 @@ <string name="gadget_host_error_inflating" msgid="4882004314906466162">"Vidjet qo‘shilmadi."</string> <string name="ime_action_go" msgid="8320845651737369027">"O‘tish"</string> <string name="ime_action_search" msgid="658110271822807811">"Qidirish"</string> - <string name="ime_action_send" msgid="2316166556349314424">"Jo‘natish"</string> + <string name="ime_action_send" msgid="2316166556349314424">"Yuborish"</string> <string name="ime_action_next" msgid="3138843904009813834">"Keyingi"</string> <string name="ime_action_done" msgid="8971516117910934605">"Tayyor"</string> <string name="ime_action_previous" msgid="1443550039250105948">"Old."</string> @@ -1156,7 +1150,7 @@ <string name="upload_file" msgid="2897957172366730416">"Faylni tanlash"</string> <string name="no_file_chosen" msgid="6363648562170759465">"Hech qanday fayl tanlanmadi"</string> <string name="reset" msgid="2448168080964209908">"Tiklash"</string> - <string name="submit" msgid="1602335572089911941">"Jo‘natish"</string> + <string name="submit" msgid="1602335572089911941">"Yuborish"</string> <string name="car_mode_disable_notification_title" msgid="3164768212003864316">"Mashina usuli yoqilgan"</string> <string name="car_mode_disable_notification_message" msgid="8035230537563503262">"Avtomashina rejimidan chiqish uchun bosing."</string> <string name="tethered_notification_title" msgid="3146694234398202601">"Modem rejimi yoniq"</string> @@ -1543,8 +1537,7 @@ <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ta tanlandi</item> <item quantity="one"><xliff:g id="COUNT_0">%1$d</xliff:g> ta tanlandi</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Boshqa belgilar"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Siz ushbu bildirishnomalarning muhimligini belgilagansiz."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Siz ushbu bildirishnomalarning muhimligini belgilagansiz."</string> <string name="importance_from_person" msgid="9160133597262938296">"Bu odamlar siz uchun muhim."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"<xliff:g id="APP">%1$s</xliff:g> ilovasiga <xliff:g id="ACCOUNT">%2$s</xliff:g> hisobi bilan yangi foydalanuvchi yaratishiga ruxsat berilsinmi ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"<xliff:g id="APP">%1$s</xliff:g> ilovasiga <xliff:g id="ACCOUNT">%2$s</xliff:g> hisobi bilan yangi foydalanuvchi yaratishiga ruxsat berilsinmi (bunday hisobdagi foydalanuvchi allaqachon mavjud) ?"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Qadash"</string> <string name="unpin_target" msgid="3556545602439143442">"Olib tashlash"</string> <string name="app_info" msgid="6856026610594615344">"Ilova haqida"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml index 7d4e43fdcce7..0133d48ae3aa 100644 --- a/core/res/res/values-vi/strings.xml +++ b/core/res/res/values-vi/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"Số gọi đến mặc định thành không bị giới hạn. Cuộc gọi tiếp theo. Không bị giới hạn"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Dịch vụ không được cấp phép."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Bạn không thể thay đổi cài đặt ID người gọi."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Quyền truy cập bị giới hạn đã thay đổi"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Dịch vụ dữ liệu bị chặn."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Dịch vụ khẩn cấp đã bị chặn."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Dịch vụ thoại đã bị chặn."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Đặt lại và khởi động lại ứng dụng"</string> <string name="aerr_report" msgid="5371800241488400617">"Gửi phản hồi"</string> <string name="aerr_close" msgid="2991640326563991340">"Đóng"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Bỏ qua"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Tắt tiếng cho đến khi thiết bị khởi động lại"</string> <string name="aerr_wait" msgid="3199956902437040261">"Đợi"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Đóng ứng dụng"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Chạm để có các tùy chọn khác."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Gỡ lỗi USB đã được kết nối"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Chạm để vô hiệu hóa gỡ lỗi USB."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Chia sẻ báo cáo lỗi?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Đang chia sẻ báo cáo lỗi…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Quản trị viên CNTT của bạn đã yêu cầu báo cáo lỗi để giúp khắc phục sự cố thiết bị này. Bạn có thể chia sẻ ứng dụng, đồng thời dữ liệu và thiết bị của bạn tạm thời có thể bị chậm."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Quản trị viên CNTT của bạn đã yêu cầu báo cáo lỗi để giúp khắc phục sự cố thiết bị này. Bạn có thể chia sẻ ứng dụng và dữ liệu."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Tác vụ này tạm thời có thể làm chậm thiết bị của bạn"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"CHẤP NHẬN"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"TỪ CHỐI"</string> <string name="select_input_method" msgid="8547250819326693584">"Thay đổi bàn phím"</string> @@ -1543,8 +1537,7 @@ <item quantity="other">Đã chọn <xliff:g id="COUNT_1">%1$d</xliff:g></item> <item quantity="one">Đã chọn <xliff:g id="COUNT_0">%1$d</xliff:g></item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Khác"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Bạn đặt tầm quan trọng của các thông báo này."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Bạn đặt tầm quan trọng của các thông báo này."</string> <string name="importance_from_person" msgid="9160133597262938296">"Thông báo này quan trọng vì những người có liên quan."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Cho phép <xliff:g id="APP">%1$s</xliff:g> tạo người dùng mới bằng <xliff:g id="ACCOUNT">%2$s</xliff:g>?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Cho phép <xliff:g id="APP">%1$s</xliff:g> tạo người dùng mới bằng <xliff:g id="ACCOUNT">%2$s</xliff:g> (người dùng có tài khoản này đã tồn tại)?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"Ghim"</string> <string name="unpin_target" msgid="3556545602439143442">"Bỏ ghim"</string> <string name="app_info" msgid="6856026610594615344">"Thông tin ứng dụng"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml index b8ea8986e0e6..532413241df3 100644 --- a/core/res/res/values-zh-rCN/strings.xml +++ b/core/res/res/values-zh-rCN/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"默认显示本机号码,在下一次通话中也显示"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"未提供服务。"</string> <string name="CLIRPermanent" msgid="3377371145926835671">"您无法更改来电显示设置。"</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"网络可用情况发生变化"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"数据网络服务已停用。"</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"紧急服务已停用。"</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"语音服务已停用。"</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"重置并重启应用"</string> <string name="aerr_report" msgid="5371800241488400617">"发送反馈"</string> <string name="aerr_close" msgid="2991640326563991340">"关闭"</string> - <string name="aerr_mute" msgid="7698966346654789433">"忽略"</string> + <string name="aerr_mute" msgid="1974781923723235953">"忽略(直到设备重启)"</string> <string name="aerr_wait" msgid="3199956902437040261">"等待"</string> <string name="aerr_close_app" msgid="3269334853724920302">"关闭应用"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"触摸以查看更多选项。"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"已连接到USB调试"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"触摸可停用USB调试。"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"要分享错误报告吗?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"正在分享错误报告…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"您的 IT 管理员希望获取错误报告,以便排查此设备的问题。报告可能会透露您设备上的应用和数据,设备运行速度也可能会因此而暂时减慢。"</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"您的 IT 管理员希望获取错误报告,以便排查此设备的问题。报告可能会透露您设备上的应用和数据。"</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"这可能会暂时减慢您设备的运行速度"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"接受"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"拒绝"</string> <string name="select_input_method" msgid="8547250819326693584">"更改键盘"</string> @@ -1543,8 +1537,7 @@ <item quantity="other">已选择 <xliff:g id="COUNT_1">%1$d</xliff:g> 项</item> <item quantity="one">已选择 <xliff:g id="COUNT_0">%1$d</xliff:g> 项</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"其他"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"这些通知的重要性由您来设置。"</string> + <string name="importance_from_user" msgid="7318955817386549931">"这些通知的重要性由您来设置。"</string> <string name="importance_from_person" msgid="9160133597262938296">"这条通知涉及特定的人,因此被归为重要通知。"</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"允许<xliff:g id="APP">%1$s</xliff:g>使用 <xliff:g id="ACCOUNT">%2$s</xliff:g> 创建新用户吗?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"允许<xliff:g id="APP">%1$s</xliff:g>使用 <xliff:g id="ACCOUNT">%2$s</xliff:g>(目前已有用户使用此帐号)创建新用户吗?"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"固定"</string> <string name="unpin_target" msgid="3556545602439143442">"取消固定"</string> <string name="app_info" msgid="6856026610594615344">"应用信息"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml index 5464fbf22bad..c80e4ba8ea83 100644 --- a/core/res/res/values-zh-rHK/strings.xml +++ b/core/res/res/values-zh-rHK/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"預設顯示來電號碼,下一通電話也繼續顯示。"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"未提供此服務。"</string> <string name="CLIRPermanent" msgid="3377371145926835671">"您無法更改來電顯示設定。"</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"受限存取已更改"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"已封鎖數據傳輸服務。"</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"已封鎖緊急服務。"</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"已封鎖語音服務。"</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"重設並重新啟動應用程式"</string> <string name="aerr_report" msgid="5371800241488400617">"傳送意見反映"</string> <string name="aerr_close" msgid="2991640326563991340">"關閉"</string> - <string name="aerr_mute" msgid="7698966346654789433">"忽略"</string> + <string name="aerr_mute" msgid="1974781923723235953">"忽略直至裝置重新啟動"</string> <string name="aerr_wait" msgid="3199956902437040261">"等一下"</string> <string name="aerr_close_app" msgid="3269334853724920302">"關閉應用程式"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"輕觸以瀏覽更多選項。"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"已連接 USB 偵錯工具"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"輕觸即可停用 USB 偵錯。"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"要分享錯誤報告嗎?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"正在分享錯誤報告…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"您的 IT 管理員要求您提供錯誤報告,以協助解決此裝置的問題。報告可能包含應用程式和相關資料,裝置的運作速度也可能暫時減慢。"</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"您的 IT 管理員要求您提供錯誤報告,以協助解決此裝置的問題。報告可能會披露裝置中的應用程式和相關資料。"</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"裝置的運作速度可能因而減慢"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"接受"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"拒絕"</string> <string name="select_input_method" msgid="8547250819326693584">"變更鍵盤"</string> @@ -1543,8 +1537,7 @@ <item quantity="other">已選取 <xliff:g id="COUNT_1">%1$d</xliff:g> 個項目</item> <item quantity="one">已選取 <xliff:g id="COUNT_0">%1$d</xliff:g> 個項目</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"其他"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"您可以為這些通知設定重要性。"</string> + <string name="importance_from_user" msgid="7318955817386549931">"您可以設定這些通知的重要性。"</string> <string name="importance_from_person" msgid="9160133597262938296">"列為重要的原因:涉及的人。"</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"要允許 <xliff:g id="APP">%1$s</xliff:g> 使用 <xliff:g id="ACCOUNT">%2$s</xliff:g> 建立新使用者嗎?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"要允許 <xliff:g id="APP">%1$s</xliff:g> 使用 <xliff:g id="ACCOUNT">%2$s</xliff:g> 建立新使用者 (此帳戶目前已有此使用者) 嗎?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"固定"</string> <string name="unpin_target" msgid="3556545602439143442">"取消固定"</string> <string name="app_info" msgid="6856026610594615344">"應用程式資料"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml index ff6dc23b2706..ba4923246685 100644 --- a/core/res/res/values-zh-rTW/strings.xml +++ b/core/res/res/values-zh-rTW/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"預設顯示本機號碼,下一通電話也繼續顯示。"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"無法提供此服務。"</string> <string name="CLIRPermanent" msgid="3377371145926835671">"您無法變更來電顯示設定。"</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"受限存取已變更"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"已封鎖數據傳輸服務。"</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"已封鎖緊急服務。"</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"已封鎖語音服務。"</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"重設並重新啟動應用程式"</string> <string name="aerr_report" msgid="5371800241488400617">"提供意見"</string> <string name="aerr_close" msgid="2991640326563991340">"關閉"</string> - <string name="aerr_mute" msgid="7698966346654789433">"忽略"</string> + <string name="aerr_mute" msgid="1974781923723235953">"略過直到裝置重新啟動"</string> <string name="aerr_wait" msgid="3199956902437040261">"等候"</string> <string name="aerr_close_app" msgid="3269334853724920302">"關閉應用程式"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"輕觸即可顯示更多選項。"</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"已連接 USB 偵錯工具"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"輕觸即可停用 USB 偵錯。"</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"要分享錯誤報告嗎?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"正在分享錯誤報告…"</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"您的 IT 管理員要求您提供錯誤報告,以便排解這個裝置發生的問題。報告可能會揭露裝置中的應用程式和相關資料,裝置運行速度也可能會因此暫時減慢。"</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"您的 IT 管理員要求您提供錯誤報告,以便排解這個裝置發生的問題。報告可能會揭露裝置中的應用程式和相關資料。"</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"這可能會暫時減慢裝置運行速度"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"接受"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"拒絕"</string> <string name="select_input_method" msgid="8547250819326693584">"變更鍵盤"</string> @@ -1543,8 +1537,7 @@ <item quantity="other">已選取 <xliff:g id="COUNT_1">%1$d</xliff:g> 個項目</item> <item quantity="one">已選取 <xliff:g id="COUNT_0">%1$d</xliff:g> 個項目</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"其他"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"這些通知的重要性由您決定。"</string> + <string name="importance_from_user" msgid="7318955817386549931">"這些通知的重要性由您決定。"</string> <string name="importance_from_person" msgid="9160133597262938296">"這則通知涉及特定人士,因此被歸為重要通知。"</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"要允許 <xliff:g id="APP">%1$s</xliff:g> 為 <xliff:g id="ACCOUNT">%2$s</xliff:g> 建立新使用者嗎?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"要允許 <xliff:g id="APP">%1$s</xliff:g> 為 <xliff:g id="ACCOUNT">%2$s</xliff:g> 建立新使用者嗎 (這個帳戶目前已有使用者)?"</string> @@ -1571,4 +1564,5 @@ <string name="pin_target" msgid="3052256031352291362">"固定"</string> <string name="unpin_target" msgid="3556545602439143442">"取消固定"</string> <string name="app_info" msgid="6856026610594615344">"應用程式資訊"</string> + <string name="negative_duration" msgid="5688706061127375131">"−<xliff:g id="TIME">%1$s</xliff:g>"</string> </resources> diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml index 6793a9a8d905..22d167dc77bd 100644 --- a/core/res/res/values-zu/strings.xml +++ b/core/res/res/values-zu/strings.xml @@ -88,7 +88,6 @@ <string name="CLIRDefaultOffNextCallOff" msgid="2567998633124408552">"I-ID Yomshayeli ishintshela kokungavinjelwe. Ucingo olulandelayo: Aluvinjelwe"</string> <string name="serviceNotProvisioned" msgid="8614830180508686666">"Isevisi ayilungiselelwe."</string> <string name="CLIRPermanent" msgid="3377371145926835671">"Ngeke ukwazi ukuguqul izilungiselelo zemininingwane yoshayayo."</string> - <string name="RestrictedChangedTitle" msgid="5592189398956187498">"Ukufinyelela okuvinjelwe kushintshiwe"</string> <string name="RestrictedOnData" msgid="8653794784690065540">"Isevisi yedatha ivaliwe."</string> <string name="RestrictedOnEmergency" msgid="6581163779072833665">"Isevisi ephuthumayo ivimbelwe."</string> <string name="RestrictedOnNormal" msgid="4953867011389750673">"Isevisi yezwi ivimbelwe."</string> @@ -917,7 +916,7 @@ <string name="aerr_reset" msgid="7645427603514220451">"Setha kabusha uphinde uqalise kabusha uhlelo lokusebenza"</string> <string name="aerr_report" msgid="5371800241488400617">"Thumela impendulo"</string> <string name="aerr_close" msgid="2991640326563991340">"Vala"</string> - <string name="aerr_mute" msgid="7698966346654789433">"Thulisa"</string> + <string name="aerr_mute" msgid="1974781923723235953">"Thulisa ize iqalise kabusha idivayisi"</string> <string name="aerr_wait" msgid="3199956902437040261">"Linda"</string> <string name="aerr_close_app" msgid="3269334853724920302">"Vala uhlelo lokusebenza"</string> <string name="anr_title" msgid="4351948481459135709"></string> @@ -1053,16 +1052,11 @@ <string name="usb_notification_message" msgid="7347368030849048437">"Thinta ukuze uthole ezinye izinketho."</string> <string name="adb_active_notification_title" msgid="6729044778949189918">"Ukulungisa iphutha le-USB kuxhunyiwe"</string> <string name="adb_active_notification_message" msgid="1016654627626476142">"Thinta ukwenza ukuthi ukudibhaga kwe-USB kungasebenzi."</string> - <!-- no translation found for share_remote_bugreport_notification_title (4987095013583691873) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_title (7692523022154791488) --> - <skip /> - <!-- no translation found for share_remote_bugreport_notification_message (8643704339578372992) --> - <skip /> - <!-- no translation found for share_finished_remote_bugreport_notification_message (4627312060769912353) --> - <skip /> - <!-- no translation found for sharing_remote_bugreport_notification_message (673106383408474893) --> - <skip /> + <string name="share_remote_bugreport_notification_title" msgid="4987095013583691873">"Yabelana ngombiko wesiphazamisi?"</string> + <string name="sharing_remote_bugreport_notification_title" msgid="7572089031496651372">"Yabelana ngombiko wesiphazamisi..."</string> + <string name="share_remote_bugreport_notification_message" msgid="752583906074230920">"Umlawuli wakho we-IT ucele umbiko wesiphazamisi ukusiza ukuxazulula inkinga yale divayisi. Izinhlelo zokusebenza zingabelwana futhi idivayisi yakho ingahle yehle kancane."</string> + <string name="share_finished_remote_bugreport_notification_message" msgid="4627312060769912353">"Umqondisi wakho we-IT ucele umbiko wesiphazamisi ukukusiza ukuxazulula inkinga kule divayisi. Izinhlelo zokusebenza nedatha ingabiwa."</string> + <string name="sharing_remote_bugreport_notification_message" msgid="673106383408474893">"Lokhu kungahambisa kancane idivayisi yakho okwesikhashana"</string> <string name="share_remote_bugreport_notification_accept" msgid="8203856129078669677">"YAMUKELA"</string> <string name="share_remote_bugreport_notification_decline" msgid="6337969352057443969">"YENQABA"</string> <string name="select_input_method" msgid="8547250819326693584">"Shintsha ikhibhodi"</string> @@ -1543,8 +1537,7 @@ <item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> okukhethiwe</item> <item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> okukhethiwe</item> </plurals> - <string name="default_notification_topic_label" msgid="227586145791870829">"Okwahlukahlukene"</string> - <string name="importance_from_topic" msgid="3572280439880023233">"Usethe ukubaluleka kwalezi zaziso."</string> + <string name="importance_from_user" msgid="7318955817386549931">"Usethe ukubaluleka kwalezi zaziso."</string> <string name="importance_from_person" msgid="9160133597262938296">"Lokhu kubalulekile ngenxa yabantu ababandakanyekayo."</string> <string name="user_creation_account_exists" msgid="1942606193570143289">"Vumela i-<xliff:g id="APP">%1$s</xliff:g> ukudala umsebenzisi omusha nge-<xliff:g id="ACCOUNT">%2$s</xliff:g> ?"</string> <string name="user_creation_adding" msgid="4482658054622099197">"Vumela i-<xliff:g id="APP">%1$s</xliff:g> ukudala umsebenzisi omusha nge-<xliff:g id="ACCOUNT">%2$s</xliff:g> (umsebenzisi onale akhawunti usuvel ukhona) ?"</string> @@ -1571,4 +1564,6 @@ <string name="pin_target" msgid="3052256031352291362">"Phina"</string> <string name="unpin_target" msgid="3556545602439143442">"Susa ukuphina"</string> <string name="app_info" msgid="6856026610594615344">"Ulwazi lohlelo lokusebenza"</string> + <!-- no translation found for negative_duration (5688706061127375131) --> + <skip /> </resources> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index 448094447ce4..3a45da9ba3ab 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -3539,6 +3539,9 @@ i If no format string is specified, the Chronometer will simply display "MM:SS" or "H:MM:SS". --> <attr name="format" format="string" localization="suggested" /> + <!-- Specifies whether this Chronometer counts down or counts up from the base. + If not specified this is false and the Chronometer counts up. --> + <attr name="countDown" format="boolean" /> </declare-styleable> <declare-styleable name="CompoundButton"> <!-- Indicates the initial checked state of this button. --> @@ -8045,12 +8048,19 @@ i {@link android.media.tv.TvInputService#SERVICE_META_DATA} meta-data entry. Described here are the attributes that can be included in that tag. --> <declare-styleable name="TvInputService"> - <!-- Component name of an activity for setup of this service. - The setup includes scanning channels and registering EPG data. --> + <!-- Component name of an activity that allows the user to set up this service. --> <attr name="setupActivity" format="string" /> - <!-- Component name of an activity that allows the user to modify - the settings for this service. --> + <!-- Component name of an activity that allows the user to modify the settings for this + service. --> <attr name="settingsActivity" /> + <!-- Attribute whether the TV input service can record programs. This value can be changed + at runtime by calling + {@link android.media.tv.TvInputService#updateTvInputInfo(android.content.Context, android.media.tv.TvInputInfo)}. --> + <attr name="canRecord" format="boolean" /> + <!-- The number of tuners that the TV input service is associated with. This value can be + changed at runtime by calling + {@link android.media.tv.TvInputService#updateTvInputInfo(android.content.Context, android.media.tv.TvInputInfo)}. --> + <attr name="tunerCount" format="integer" /> </declare-styleable> <!-- Attributes that can be used with <code>rating-system-definition</code> tags inside of the diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml index 4b81987f353e..d0d1d5a0b694 100644 --- a/core/res/res/values/attrs_manifest.xml +++ b/core/res/res/values/attrs_manifest.xml @@ -248,9 +248,12 @@ may cost the user money. Such permissions may be highlighted when shown to the user with this additional information. --> <flag name="costsMoney" value="0x0001" /> - <!-- Additional flag from base permission type: this permission is hidden - and should not show in the UI. --> - <flag name="hidden" value="0x2" /> + <!-- Additional flag from base permission type: this permission has been + removed and it is no longer enforced. It shouldn't be shown in the + UI. Removed permissions are kept as normal permissions for backwards + compatibility as apps may be checking them before calling an API. + --> + <flag name="removed" value="0x2" /> </attr> <!-- Specified the name of a group that this permission is associated diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 3a185d60fda5..54f9093f07da 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -29,6 +29,7 @@ <string-array name="config_statusBarIcons"> <item><xliff:g id="id">@string/status_bar_rotate</xliff:g></item> <item><xliff:g id="id">@string/status_bar_headset</xliff:g></item> + <item><xliff:g id="id">@string/status_bar_data_saver</xliff:g></item> <item><xliff:g id="id">@string/status_bar_managed_profile</xliff:g></item> <item><xliff:g id="id">@string/status_bar_ime</xliff:g></item> <item><xliff:g id="id">@string/status_bar_sync_failing</xliff:g></item> @@ -56,6 +57,7 @@ <string translatable="false" name="status_bar_rotate">rotate</string> <string translatable="false" name="status_bar_headset">headset</string> + <string translatable="false" name="status_bar_data_saver">data_saver</string> <string translatable="false" name="status_bar_managed_profile">managed_profile</string> <string translatable="false" name="status_bar_ime">ime</string> <string translatable="false" name="status_bar_sync_failing">sync_failing</string> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 13812630a0d1..06e2248bbb5a 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -2702,6 +2702,9 @@ <public type="attr" name="hotSpotY" /> <public type="attr" name="version" /> <public type="attr" name="backupInForeground" /> + <public type="attr" name="countDown" /> + <public type="attr" name="canRecord" /> + <public type="attr" name="tunerCount" /> <public type="style" name="Theme.Material.Light.DialogWhenLarge.DarkActionBar" /> <public type="style" name="Widget.Material.SeekBar.Discrete" /> diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index da881462618c..7b113023d194 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -185,8 +185,6 @@ <!-- Displayed to tell the user that they cannot change the caller ID setting. --> <string name="CLIRPermanent">You can\'t change the caller ID setting.</string> - <!-- Notification title to tell the user that restricted state is changed by access control. --> - <string name="RestrictedChangedTitle">Restricted access changed</string> <!-- Displayed to tell the user that data service is blocked by access control. --> <string name="RestrictedOnData">Data service is blocked.</string> <!-- Displayed to tell the user that emergency service is blocked by access control. --> @@ -4016,8 +4014,8 @@ <string name="lock_to_app_unlock_password">Ask for password before unpinning</string> <!-- Multi-Window strings --> - <!-- Warning message when a non-resizeble tasks is docked whose display windows are cropped. --> - <string name="dock_cropped_windows_text">App is not resizeable, scroll it with two fingers.</string> + <!-- Warning message when an app that got forced to be resizable gets shown in split-screen --> + <string name="dock_forced_resizable">App may not work with split-screen.</string> <!-- Warning message when we try to dock a non-resizeble tasks and launch it in fullscreen instead. --> <string name="dock_non_resizeble_failed_to_dock_text">App does not support split-screen.</string> @@ -4173,7 +4171,7 @@ <!-- Locale picker strings --> <!-- Title for the language selection screen [CHAR LIMIT=25] --> - <string name="language_selection_title">Language preference</string> + <string name="language_selection_title">Add a language</string> <!-- Title for the region selection screen [CHAR LIMIT=25] --> <string name="country_selection_title">Region preference</string> <!-- Hint text in a search edit box (used to filter long language / country lists) [CHAR LIMIT=25] --> @@ -4230,4 +4228,7 @@ <!-- View application info for a target. --> <string name="app_info">App info</string> + <!-- The representation of a time duration when negative. An example is -1:14. This can be used with a countdown timer for example.--> + <string name="negative_duration">\u2212<xliff:g id="time" example="1:14">%1$s</xliff:g></string> + </resources> diff --git a/core/res/res/values/styles_material.xml b/core/res/res/values/styles_material.xml index 9efcfdace11b..db418f7947b9 100644 --- a/core/res/res/values/styles_material.xml +++ b/core/res/res/values/styles_material.xml @@ -996,7 +996,6 @@ please see styles_device_defaults.xml. <item name="alpha">.87</item> <item name="textColor">@color/black</item> <item name="drawablePadding">8dip</item> - <item name="ellipsize">marquee</item> <item name="gravity">start|center_vertical</item> <item name="layout_gravity">start|center_vertical</item> <item name="layout_height">48dip</item> @@ -1017,7 +1016,6 @@ please see styles_device_defaults.xml. <item name="alpha">.87</item> <item name="textColor">#009688</item> <item name="drawablePadding">8dip</item> - <item name="ellipsize">marquee</item> <item name="gravity">start|center_vertical</item> <item name="layout_gravity">start|center_vertical</item> <item name="layout_height">48dip</item> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 746e7fdf1d0a..3c81028c19b0 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -484,7 +484,6 @@ <java-symbol type="string" name="Noon" /> <java-symbol type="string" name="PinMmi" /> <java-symbol type="string" name="PwdMmi" /> - <java-symbol type="string" name="RestrictedChangedTitle" /> <java-symbol type="string" name="RestrictedOnAllVoice" /> <java-symbol type="string" name="RestrictedOnData" /> <java-symbol type="string" name="RestrictedOnEmergency" /> @@ -610,7 +609,7 @@ <java-symbol type="string" name="display_manager_overlay_display_name" /> <java-symbol type="string" name="display_manager_overlay_display_secure_suffix" /> <java-symbol type="string" name="display_manager_overlay_display_title" /> - <java-symbol type="string" name="dock_cropped_windows_text" /> + <java-symbol type="string" name="dock_forced_resizable" /> <java-symbol type="string" name="dock_non_resizeble_failed_to_dock_text" /> <java-symbol type="string" name="double_tap_toast" /> <java-symbol type="string" name="durationDays" /> @@ -2460,6 +2459,7 @@ <java-symbol type="string" name="status_bar_rotate" /> <java-symbol type="string" name="status_bar_headset" /> + <java-symbol type="string" name="status_bar_data_saver" /> <java-symbol type="string" name="status_bar_managed_profile" /> <java-symbol type="string" name="status_bar_ime" /> <java-symbol type="string" name="status_bar_sync_failing" /> @@ -2485,7 +2485,6 @@ <java-symbol type="string" name="status_bar_clock" /> <!-- Locale picker --> - <java-symbol type="id" name="l10nWarn" /> <java-symbol type="id" name="locale_search_menu" /> <java-symbol type="layout" name="language_picker_item" /> <java-symbol type="layout" name="language_picker_section_header" /> @@ -2540,4 +2539,5 @@ <java-symbol type="string" name="carrier_app_dialog_not_now" /> <java-symbol type="string" name="carrier_app_notification_title" /> <java-symbol type="string" name="carrier_app_notification_text" /> + <java-symbol type="string" name="negative_duration" /> </resources> diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsServTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsServTest.java new file mode 100644 index 000000000000..1c3cd3872d78 --- /dev/null +++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsServTest.java @@ -0,0 +1,745 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.os; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.ArrayList; + +import android.os.BatteryStats; +import android.os.Parcel; +import android.test.suitebuilder.annotation.SmallTest; +import android.util.Log; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.android.internal.os.BatteryStatsImpl; + +/** + * Provides test cases for android.os.BatteryStats. + */ +public class BatteryStatsServTest extends TestCase { + private static final String TAG = "BatteryStatsServTest"; + + public static class TestServ extends BatteryStatsImpl.Uid.Pkg.Serv { + TestServ(MockBatteryStatsImpl bsi) { + super(bsi); + } + + void populate() { + mStartTime = 1010; + mRunningSince = 2021; + mRunning = true; + mStarts = 4042; + mLaunchedTime = 5053; + mLaunchedSince = 6064; + mLaunched = true; + mLaunches = 8085; + mLoadedStartTime = 9096; + mLoadedStarts = 10017; + mLoadedLaunches = 11118; + mLastStartTime = 12219; + mLastStarts = 13310; + mLastLaunches = 14411; + mUnpluggedStartTime = 15512; + mUnpluggedStarts = 16613; + mUnpluggedLaunches = 17714; + } + + long getStartTime() { + return mStartTime; + } + + long getRunningSince() { + return mRunningSince; + } + + void setRunning(boolean val) { + mRunning = val; + } + + boolean getRunning() { + return mRunning; + } + + int getStarts() { + return mStarts; + } + + long getLaunchedTime() { + return mLaunchedTime; + } + + long getLaunchedSince() { + return mLaunchedSince; + } + + void setLaunched(boolean val) { + mLaunched = val; + } + + boolean getLaunched() { + return mLaunched; + } + + int getLaunches() { + return mLaunches; + } + + long getLoadedStartTime() { + return mLoadedStartTime; + } + + int getLoadedStarts() { + return mLoadedStarts; + } + + int getLoadedLaunches() { + return mLoadedLaunches; + } + + long getLastStartTime() { + return mLastStartTime; + } + + int getLastStarts() { + return mLastStarts; + } + + int getLastLaunches() { + return mLastLaunches; + } + + long getUnpluggedStartTime() { + return mUnpluggedStartTime; + } + + int getUnpluggedStarts() { + return mUnpluggedStarts; + } + + int getUnpluggedLaunches() { + return mUnpluggedLaunches; + } + } + + /** + * Test that the constructor and detach methods touch the time bast observer list. + */ + @SmallTest + public void testConstructAndDetach() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl(); + + TestServ serv = new TestServ(bsi); + Assert.assertTrue(bsi.getOnBatteryTimeBase().hasObserver(serv)); + + serv.detach(); + Assert.assertFalse(bsi.getOnBatteryTimeBase().hasObserver(serv)); + } + + /** + * Test OnTimeStarted + */ + @SmallTest + public void testOnTimeStarted() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl(); + TestServ serv = new TestServ(bsi); + + serv.populate(); + serv.setRunning(true); + serv.onTimeStarted(111111, 20000, 222222); + Assert.assertEquals(18989, serv.getUnpluggedStartTime()); + Assert.assertEquals(4042, serv.getUnpluggedStarts()); + Assert.assertEquals(8085, serv.getUnpluggedLaunches()); + + serv.populate(); + serv.setRunning(false); + serv.onTimeStarted(111111, 20000, 222222); + Assert.assertEquals(1010, serv.getUnpluggedStartTime()); + Assert.assertEquals(4042, serv.getUnpluggedStarts()); + Assert.assertEquals(8085, serv.getUnpluggedLaunches()); + } + + /** + * Test parceling and unparceling. + */ + @SmallTest + public void testParceling() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl(); + TestServ orig = new TestServ(bsi); + orig.populate(); + + Parcel parcel = Parcel.obtain(); + orig.writeToParcelLocked(parcel); + + parcel.setDataPosition(0); + + TestServ serv = new TestServ(bsi); + serv.readFromParcelLocked(parcel); + + Assert.assertEquals(1010, serv.getStartTime()); + Assert.assertEquals(2021, serv.getRunningSince()); + Assert.assertTrue(serv.getRunning()); + Assert.assertEquals(4042, serv.getStarts()); + Assert.assertEquals(5053, serv.getLaunchedTime()); + Assert.assertEquals(6064, serv.getLaunchedSince()); + Assert.assertTrue(serv.getLaunched()); + Assert.assertEquals(8085, serv.getLaunches()); + Assert.assertEquals(9096, serv.getLoadedStartTime()); + Assert.assertEquals(10017, serv.getLoadedStarts()); + Assert.assertEquals(11118, serv.getLoadedLaunches()); + Assert.assertEquals(0, serv.getLastStartTime()); + Assert.assertEquals(0, serv.getLastStarts()); + Assert.assertEquals(0, serv.getLastLaunches()); + Assert.assertEquals(15512, serv.getUnpluggedStartTime()); + Assert.assertEquals(16613, serv.getUnpluggedStarts()); + Assert.assertEquals(17714, serv.getUnpluggedLaunches()); + } + + /** + * Test getLaunchTimeToNow() + */ + @SmallTest + public void testLaunchTimeToNow() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl(); + TestServ serv = new TestServ(bsi); + + serv.populate(); + serv.setLaunched(true); + Assert.assertEquals(8989, serv.getLaunchTimeToNowLocked(10000)); + + serv.populate(); + serv.setLaunched(false); + Assert.assertEquals(5053, serv.getLaunchTimeToNowLocked(10000)); + + } + + /** + * Test getStartTimeToNow() + */ + @SmallTest + public void testStartTimeToNow() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl(); + TestServ serv = new TestServ(bsi); + + serv.populate(); + serv.setRunning(true); + Assert.assertEquals(18989, serv.getStartTimeToNowLocked(20000)); + + serv.populate(); + serv.setRunning(false); + Assert.assertEquals(1010, serv.getStartTimeToNowLocked(20000)); + } + + /** + * Test startLaunchedLocked while not previously launched + */ + @SmallTest + public void testStartLaunchedLockedWhileLaunched() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl() { + @Override + public long getBatteryUptimeLocked() { + return 777777L; + } + }; + + TestServ serv = new TestServ(bsi); + + serv.populate(); + serv.setLaunched(true); + serv.startLaunchedLocked(); + + // No changes + Assert.assertEquals(1010, serv.getStartTime()); + Assert.assertEquals(2021, serv.getRunningSince()); + Assert.assertTrue(serv.getRunning()); + Assert.assertEquals(4042, serv.getStarts()); + Assert.assertEquals(5053, serv.getLaunchedTime()); + Assert.assertEquals(6064, serv.getLaunchedSince()); + Assert.assertTrue(serv.getLaunched()); + Assert.assertEquals(8085, serv.getLaunches()); + Assert.assertEquals(9096, serv.getLoadedStartTime()); + Assert.assertEquals(10017, serv.getLoadedStarts()); + Assert.assertEquals(11118, serv.getLoadedLaunches()); + Assert.assertEquals(12219, serv.getLastStartTime()); + Assert.assertEquals(13310, serv.getLastStarts()); + Assert.assertEquals(14411, serv.getLastLaunches()); + Assert.assertEquals(15512, serv.getUnpluggedStartTime()); + Assert.assertEquals(16613, serv.getUnpluggedStarts()); + Assert.assertEquals(17714, serv.getUnpluggedLaunches()); + } + + /** + * Test startLaunchedLocked while previously launched + */ + @SmallTest + public void testStartLaunchedLockedWhileNotLaunched() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl() { + @Override + public long getBatteryUptimeLocked() { + return 777777L; + } + }; + + TestServ serv = new TestServ(bsi); + + serv.populate(); + serv.setLaunched(false); + serv.startLaunchedLocked(); + Assert.assertEquals(1010, serv.getStartTime()); + Assert.assertEquals(2021, serv.getRunningSince()); + Assert.assertTrue(serv.getRunning()); + Assert.assertEquals(4042, serv.getStarts()); + Assert.assertEquals(5053, serv.getLaunchedTime()); + Assert.assertEquals(777777L, serv.getLaunchedSince()); // <-- changed + Assert.assertTrue(serv.getLaunched()); // <-- changed + Assert.assertEquals(8086, serv.getLaunches()); // <-- changed + Assert.assertEquals(9096, serv.getLoadedStartTime()); + Assert.assertEquals(10017, serv.getLoadedStarts()); + Assert.assertEquals(11118, serv.getLoadedLaunches()); + Assert.assertEquals(12219, serv.getLastStartTime()); + Assert.assertEquals(13310, serv.getLastStarts()); + Assert.assertEquals(14411, serv.getLastLaunches()); + Assert.assertEquals(15512, serv.getUnpluggedStartTime()); + Assert.assertEquals(16613, serv.getUnpluggedStarts()); + Assert.assertEquals(17714, serv.getUnpluggedLaunches()); + } + + /** + * Test stopLaunchedLocked when not previously launched. + */ + @SmallTest + public void testStopLaunchedLockedWhileNotLaunched() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl() { + @Override + public long getBatteryUptimeLocked() { + return 777777L; + } + }; + TestServ serv = new TestServ(bsi); + + serv.populate(); + serv.setLaunched(false); + + serv.stopLaunchedLocked(); + + // No changes + Assert.assertEquals(1010, serv.getStartTime()); + Assert.assertEquals(2021, serv.getRunningSince()); + Assert.assertTrue(serv.getRunning()); + Assert.assertEquals(4042, serv.getStarts()); + Assert.assertEquals(5053, serv.getLaunchedTime()); + Assert.assertEquals(6064, serv.getLaunchedSince()); + Assert.assertFalse(serv.getLaunched()); + Assert.assertEquals(8085, serv.getLaunches()); + Assert.assertEquals(9096, serv.getLoadedStartTime()); + Assert.assertEquals(10017, serv.getLoadedStarts()); + Assert.assertEquals(11118, serv.getLoadedLaunches()); + Assert.assertEquals(12219, serv.getLastStartTime()); + Assert.assertEquals(13310, serv.getLastStarts()); + Assert.assertEquals(14411, serv.getLastLaunches()); + Assert.assertEquals(15512, serv.getUnpluggedStartTime()); + Assert.assertEquals(16613, serv.getUnpluggedStarts()); + Assert.assertEquals(17714, serv.getUnpluggedLaunches()); + } + + /** + * Test stopLaunchedLocked when previously launched, with measurable time between + * start and stop. + */ + @SmallTest + public void testStopLaunchedLockedWhileLaunchedNormal() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl() { + @Override + public long getBatteryUptimeLocked() { + return 777777L; + } + }; + TestServ serv = new TestServ(bsi); + + serv.populate(); + serv.setLaunched(true); + + serv.stopLaunchedLocked(); + + Assert.assertEquals(1010, serv.getStartTime()); + Assert.assertEquals(2021, serv.getRunningSince()); + Assert.assertTrue(serv.getRunning()); + Assert.assertEquals(4042, serv.getStarts()); + Assert.assertEquals(777777L-6064+5053, serv.getLaunchedTime()); // <-- changed + Assert.assertEquals(6064, serv.getLaunchedSince()); + Assert.assertFalse(serv.getLaunched()); + Assert.assertEquals(8085, serv.getLaunches()); + Assert.assertEquals(9096, serv.getLoadedStartTime()); + Assert.assertEquals(10017, serv.getLoadedStarts()); + Assert.assertEquals(11118, serv.getLoadedLaunches()); + Assert.assertEquals(12219, serv.getLastStartTime()); + Assert.assertEquals(13310, serv.getLastStarts()); + Assert.assertEquals(14411, serv.getLastLaunches()); + Assert.assertEquals(15512, serv.getUnpluggedStartTime()); + Assert.assertEquals(16613, serv.getUnpluggedStarts()); + Assert.assertEquals(17714, serv.getUnpluggedLaunches()); + } + + /** + * Test stopLaunchedLocked when previously launched, with no measurable time between + * start and stop. + */ + @SmallTest + public void testStopLaunchedLockedWhileLaunchedTooQuick() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl() { + @Override + public long getBatteryUptimeLocked() { + return 6064L; + } + }; + TestServ serv = new TestServ(bsi); + + serv.populate(); + serv.setLaunched(true); + + serv.stopLaunchedLocked(); + + Assert.assertEquals(1010, serv.getStartTime()); + Assert.assertEquals(2021, serv.getRunningSince()); + Assert.assertTrue(serv.getRunning()); + Assert.assertEquals(4042, serv.getStarts()); + Assert.assertEquals(5053, serv.getLaunchedTime()); + Assert.assertEquals(6064, serv.getLaunchedSince()); + Assert.assertFalse(serv.getLaunched()); + Assert.assertEquals(8085-1, serv.getLaunches()); // <-- changed + Assert.assertEquals(9096, serv.getLoadedStartTime()); + Assert.assertEquals(10017, serv.getLoadedStarts()); + Assert.assertEquals(11118, serv.getLoadedLaunches()); + Assert.assertEquals(12219, serv.getLastStartTime()); + Assert.assertEquals(13310, serv.getLastStarts()); + Assert.assertEquals(14411, serv.getLastLaunches()); + Assert.assertEquals(15512, serv.getUnpluggedStartTime()); + Assert.assertEquals(16613, serv.getUnpluggedStarts()); + Assert.assertEquals(17714, serv.getUnpluggedLaunches()); + } + + /** + * Test startRunningLocked while previously running + */ + @SmallTest + public void testStartRunningLockedWhileRunning() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl() { + @Override + public long getBatteryUptimeLocked() { + return 777777L; + } + }; + TestServ serv = new TestServ(bsi); + + serv.populate(); + serv.setRunning(true); + + serv.startRunningLocked(); + + // no change + Assert.assertEquals(1010, serv.getStartTime()); + Assert.assertEquals(2021, serv.getRunningSince()); + Assert.assertTrue(serv.getRunning()); + Assert.assertEquals(4042, serv.getStarts()); + Assert.assertEquals(5053, serv.getLaunchedTime()); + Assert.assertEquals(6064, serv.getLaunchedSince()); + Assert.assertTrue(serv.getLaunched()); + Assert.assertEquals(8085, serv.getLaunches()); + Assert.assertEquals(9096, serv.getLoadedStartTime()); + Assert.assertEquals(10017, serv.getLoadedStarts()); + Assert.assertEquals(11118, serv.getLoadedLaunches()); + Assert.assertEquals(12219, serv.getLastStartTime()); + Assert.assertEquals(13310, serv.getLastStarts()); + Assert.assertEquals(14411, serv.getLastLaunches()); + Assert.assertEquals(15512, serv.getUnpluggedStartTime()); + Assert.assertEquals(16613, serv.getUnpluggedStarts()); + Assert.assertEquals(17714, serv.getUnpluggedLaunches()); + } + + /** + * Test startRunningLocked while not previously launched + */ + @SmallTest + public void testStartRunningLockedWhileNotRunning() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl() { + @Override + public long getBatteryUptimeLocked() { + return 777777L; + } + }; + TestServ serv = new TestServ(bsi); + + serv.populate(); + serv.setRunning(false); + + serv.startRunningLocked(); + + Assert.assertEquals(1010, serv.getStartTime()); + Assert.assertEquals(777777L, serv.getRunningSince()); + Assert.assertTrue(serv.getRunning()); + Assert.assertEquals(4042+1, serv.getStarts()); + Assert.assertEquals(5053, serv.getLaunchedTime()); + Assert.assertEquals(6064, serv.getLaunchedSince()); + Assert.assertTrue(serv.getLaunched()); + Assert.assertEquals(8085, serv.getLaunches()); + Assert.assertEquals(9096, serv.getLoadedStartTime()); + Assert.assertEquals(10017, serv.getLoadedStarts()); + Assert.assertEquals(11118, serv.getLoadedLaunches()); + Assert.assertEquals(12219, serv.getLastStartTime()); + Assert.assertEquals(13310, serv.getLastStarts()); + Assert.assertEquals(14411, serv.getLastLaunches()); + Assert.assertEquals(15512, serv.getUnpluggedStartTime()); + Assert.assertEquals(16613, serv.getUnpluggedStarts()); + Assert.assertEquals(17714, serv.getUnpluggedLaunches()); + } + + /** + * Test stopRunningLocked when previously launched, with measurable time between + * start and stop. + */ + @SmallTest + public void testStopRunningLockedWhileRunningNormal() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl() { + @Override + public long getBatteryUptimeLocked() { + return 777777L; + } + }; + TestServ serv = new TestServ(bsi); + + serv.populate(); + serv.setRunning(true); + + serv.stopRunningLocked(); + + Assert.assertEquals(777777L-2021+1010, serv.getStartTime()); // <-- changed + Assert.assertEquals(2021, serv.getRunningSince()); + Assert.assertFalse(serv.getRunning()); // <-- changed + Assert.assertEquals(4042, serv.getStarts()); + Assert.assertEquals(5053, serv.getLaunchedTime()); + Assert.assertEquals(6064, serv.getLaunchedSince()); + Assert.assertTrue(serv.getLaunched()); + Assert.assertEquals(8085, serv.getLaunches()); + Assert.assertEquals(9096, serv.getLoadedStartTime()); + Assert.assertEquals(10017, serv.getLoadedStarts()); + Assert.assertEquals(11118, serv.getLoadedLaunches()); + Assert.assertEquals(12219, serv.getLastStartTime()); + Assert.assertEquals(13310, serv.getLastStarts()); + Assert.assertEquals(14411, serv.getLastLaunches()); + Assert.assertEquals(15512, serv.getUnpluggedStartTime()); + Assert.assertEquals(16613, serv.getUnpluggedStarts()); + Assert.assertEquals(17714, serv.getUnpluggedLaunches()); + } + + /** + * Test stopRunningLocked when previously launched, with measurable time between + * start and stop. + */ + @SmallTest + public void testStopRunningLockedWhileRunningTooQuick() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl() { + @Override + public long getBatteryUptimeLocked() { + return 2021; + } + }; + TestServ serv = new TestServ(bsi); + + serv.populate(); + serv.setRunning(true); + + serv.stopRunningLocked(); + + Assert.assertEquals(1010, serv.getStartTime()); + Assert.assertEquals(2021, serv.getRunningSince()); + Assert.assertFalse(serv.getRunning()); // <-- changed + Assert.assertEquals(4042-1, serv.getStarts()); // <-- changed + Assert.assertEquals(5053, serv.getLaunchedTime()); + Assert.assertEquals(6064, serv.getLaunchedSince()); + Assert.assertTrue(serv.getLaunched()); + Assert.assertEquals(8085, serv.getLaunches()); + Assert.assertEquals(9096, serv.getLoadedStartTime()); + Assert.assertEquals(10017, serv.getLoadedStarts()); + Assert.assertEquals(11118, serv.getLoadedLaunches()); + Assert.assertEquals(12219, serv.getLastStartTime()); + Assert.assertEquals(13310, serv.getLastStarts()); + Assert.assertEquals(14411, serv.getLastLaunches()); + Assert.assertEquals(15512, serv.getUnpluggedStartTime()); + Assert.assertEquals(16613, serv.getUnpluggedStarts()); + Assert.assertEquals(17714, serv.getUnpluggedLaunches()); + } + + /** + * Test that getBatteryStats returns the BatteryStatsImpl passed in to the contstructor. + */ + @SmallTest + public void testGetBatteryStats() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl(); + TestServ serv = new TestServ(bsi); + + Assert.assertEquals(bsi, serv.getBatteryStats()); + } + + /** + * Test getLaunches + */ + @SmallTest + public void testGetLaunches() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl(); + TestServ serv = new TestServ(bsi); + serv.populate(); + + Assert.assertEquals(8085, serv.getLaunches(BatteryStats.STATS_SINCE_CHARGED)); + Assert.assertEquals(8085-11118, serv.getLaunches(BatteryStats.STATS_CURRENT)); + Assert.assertEquals(8085-17714, serv.getLaunches(BatteryStats.STATS_SINCE_UNPLUGGED)); + + // No change to fields + Assert.assertEquals(1010, serv.getStartTime()); + Assert.assertEquals(2021, serv.getRunningSince()); + Assert.assertTrue(serv.getRunning()); + Assert.assertEquals(4042, serv.getStarts()); + Assert.assertEquals(5053, serv.getLaunchedTime()); + Assert.assertEquals(6064, serv.getLaunchedSince()); + Assert.assertTrue(serv.getLaunched()); + Assert.assertEquals(8085, serv.getLaunches()); + Assert.assertEquals(9096, serv.getLoadedStartTime()); + Assert.assertEquals(10017, serv.getLoadedStarts()); + Assert.assertEquals(11118, serv.getLoadedLaunches()); + Assert.assertEquals(12219, serv.getLastStartTime()); + Assert.assertEquals(13310, serv.getLastStarts()); + Assert.assertEquals(14411, serv.getLastLaunches()); + Assert.assertEquals(15512, serv.getUnpluggedStartTime()); + Assert.assertEquals(16613, serv.getUnpluggedStarts()); + Assert.assertEquals(17714, serv.getUnpluggedLaunches()); + } + + /** + * Test getStartTime while running + */ + @SmallTest + public void testGetStartTimeRunning() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl(); + TestServ serv = new TestServ(bsi); + serv.populate(); + serv.setRunning(true); + + final long startTimeToNow = 1010 + 20000 - 2021; + + Assert.assertEquals(startTimeToNow, + serv.getStartTime(20000, BatteryStats.STATS_SINCE_CHARGED)); + Assert.assertEquals(startTimeToNow-9096, + serv.getStartTime(20000, BatteryStats.STATS_CURRENT)); + Assert.assertEquals(startTimeToNow-15512, + serv.getStartTime(20000, BatteryStats.STATS_SINCE_UNPLUGGED)); + + // No change to fields + Assert.assertEquals(1010, serv.getStartTime()); + Assert.assertEquals(2021, serv.getRunningSince()); + Assert.assertTrue(serv.getRunning()); + Assert.assertEquals(4042, serv.getStarts()); + Assert.assertEquals(5053, serv.getLaunchedTime()); + Assert.assertEquals(6064, serv.getLaunchedSince()); + Assert.assertTrue(serv.getLaunched()); + Assert.assertEquals(8085, serv.getLaunches()); + Assert.assertEquals(9096, serv.getLoadedStartTime()); + Assert.assertEquals(10017, serv.getLoadedStarts()); + Assert.assertEquals(11118, serv.getLoadedLaunches()); + Assert.assertEquals(12219, serv.getLastStartTime()); + Assert.assertEquals(13310, serv.getLastStarts()); + Assert.assertEquals(14411, serv.getLastLaunches()); + Assert.assertEquals(15512, serv.getUnpluggedStartTime()); + Assert.assertEquals(16613, serv.getUnpluggedStarts()); + Assert.assertEquals(17714, serv.getUnpluggedLaunches()); + } + + /** + * Test getStartTime while not running + */ + @SmallTest + public void testGetStartTimeNotRunning() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl(); + TestServ serv = new TestServ(bsi); + serv.populate(); + serv.setRunning(false); + + final long startTimeToNow = 1010; + + Assert.assertEquals(startTimeToNow, + serv.getStartTime(20000, BatteryStats.STATS_SINCE_CHARGED)); + Assert.assertEquals(startTimeToNow-9096, + serv.getStartTime(20000, BatteryStats.STATS_CURRENT)); + Assert.assertEquals(startTimeToNow-15512, + serv.getStartTime(20000, BatteryStats.STATS_SINCE_UNPLUGGED)); + + // No change to fields + Assert.assertEquals(1010, serv.getStartTime()); + Assert.assertEquals(2021, serv.getRunningSince()); + Assert.assertFalse(serv.getRunning()); + Assert.assertEquals(4042, serv.getStarts()); + Assert.assertEquals(5053, serv.getLaunchedTime()); + Assert.assertEquals(6064, serv.getLaunchedSince()); + Assert.assertTrue(serv.getLaunched()); + Assert.assertEquals(8085, serv.getLaunches()); + Assert.assertEquals(9096, serv.getLoadedStartTime()); + Assert.assertEquals(10017, serv.getLoadedStarts()); + Assert.assertEquals(11118, serv.getLoadedLaunches()); + Assert.assertEquals(12219, serv.getLastStartTime()); + Assert.assertEquals(13310, serv.getLastStarts()); + Assert.assertEquals(14411, serv.getLastLaunches()); + Assert.assertEquals(15512, serv.getUnpluggedStartTime()); + Assert.assertEquals(16613, serv.getUnpluggedStarts()); + Assert.assertEquals(17714, serv.getUnpluggedLaunches()); + } + + + /** + * Test getStarts + */ + @SmallTest + public void testGetStarts() throws Exception { + MockBatteryStatsImpl bsi = new MockBatteryStatsImpl(); + TestServ serv = new TestServ(bsi); + serv.populate(); + + Assert.assertEquals(4042, serv.getStarts(BatteryStats.STATS_SINCE_CHARGED)); + Assert.assertEquals(4042-10017, serv.getStarts(BatteryStats.STATS_CURRENT)); + Assert.assertEquals(4042-16613, serv.getStarts(BatteryStats.STATS_SINCE_UNPLUGGED)); + + // No change to fields + Assert.assertEquals(1010, serv.getStartTime()); + Assert.assertEquals(2021, serv.getRunningSince()); + Assert.assertTrue(serv.getRunning()); + Assert.assertEquals(4042, serv.getStarts()); + Assert.assertEquals(5053, serv.getLaunchedTime()); + Assert.assertEquals(6064, serv.getLaunchedSince()); + Assert.assertTrue(serv.getLaunched()); + Assert.assertEquals(8085, serv.getLaunches()); + Assert.assertEquals(9096, serv.getLoadedStartTime()); + Assert.assertEquals(10017, serv.getLoadedStarts()); + Assert.assertEquals(11118, serv.getLoadedLaunches()); + Assert.assertEquals(12219, serv.getLastStartTime()); + Assert.assertEquals(13310, serv.getLastStarts()); + Assert.assertEquals(14411, serv.getLastLaunches()); + Assert.assertEquals(15512, serv.getUnpluggedStartTime()); + Assert.assertEquals(16613, serv.getUnpluggedStarts()); + Assert.assertEquals(17714, serv.getUnpluggedLaunches()); + } + +} + diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java new file mode 100644 index 000000000000..05aa53cacbc5 --- /dev/null +++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java @@ -0,0 +1,15 @@ +package com.android.internal.os; + +import org.junit.runner.RunWith; +import org.junit.runners.Suite; + +@RunWith(Suite.class) +@Suite.SuiteClasses({ + BatteryStatsServTest.class, + BatteryStatsTimeBaseTest.class, + BatteryStatsTimerTest.class, + BatteryStatsUidTest.class, + }) +public class BatteryStatsTests { +} + diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsTimeBaseTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsTimeBaseTest.java new file mode 100644 index 000000000000..ab92f158db84 --- /dev/null +++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsTimeBaseTest.java @@ -0,0 +1,339 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.os; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.ArrayList; + +import android.os.BatteryStats; +import android.os.Parcel; +import android.test.suitebuilder.annotation.SmallTest; +import android.util.Log; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import org.mockito.Mockito; + +/** + * Provides test cases for android.os.BatteryStats. + */ +public class BatteryStatsTimeBaseTest extends TestCase { + private static final String TAG = "BatteryStatsTimeBaseTest"; + + static class TestTimeBase extends BatteryStatsImpl.TimeBase { + + public void populate(long uptime, long realtime, boolean running, long pastUptime, + long uptimeStart, long pastRealtime, long realtimeStart, + long unpluggedUptime, long unpluggedRealtime) { + mUptime = uptime; + mRealtime = realtime; + mRunning = running; + mPastUptime = pastUptime; + mUptimeStart = uptimeStart; + mPastRealtime = pastRealtime; + mRealtimeStart = realtimeStart; + mUnpluggedUptime = unpluggedUptime; + mUnpluggedRealtime = unpluggedRealtime; + } + + public void verify(long uptime, long realtime, boolean running, long pastUptime, + long uptimeStart, long pastRealtime, long realtimeStart, + long unpluggedUptime, long unpluggedRealtime) { + Assert.assertEquals(uptime, mUptime); + Assert.assertEquals(realtime, mRealtime); + Assert.assertEquals(running, mRunning); + Assert.assertEquals(pastUptime, mPastUptime); + Assert.assertEquals(uptimeStart, mUptimeStart); + Assert.assertEquals(pastRealtime, mPastRealtime); + Assert.assertEquals(realtimeStart, mRealtimeStart); + Assert.assertEquals(unpluggedUptime, mUnpluggedUptime); + Assert.assertEquals(unpluggedRealtime, mUnpluggedRealtime); + } + } + + /** + * Test the observers and the setRunning call. + */ + @SmallTest + public void testRunning() throws Exception { + TestTimeBase tb = new TestTimeBase(); + + // Toggle running once, to accumulate past uptime and past realtime + // so the test values aren't 0. + tb.setRunning(true, 100, 10000); + tb.setRunning(false, 200, 11000); + Assert.assertEquals(100, tb.getUptimeStart()); + Assert.assertEquals(10000, tb.getRealtimeStart()); + + // Create some observers + BatteryStatsImpl.TimeBaseObs observer1 = Mockito.mock(BatteryStatsImpl.TimeBaseObs.class); + BatteryStatsImpl.TimeBaseObs observer2 = Mockito.mock(BatteryStatsImpl.TimeBaseObs.class); + BatteryStatsImpl.TimeBaseObs observer3 = Mockito.mock(BatteryStatsImpl.TimeBaseObs.class); + + // Add them + tb.add(observer1); + tb.add(observer2); + tb.add(observer3); + Assert.assertTrue(tb.hasObserver(observer1)); + Assert.assertTrue(tb.hasObserver(observer2)); + Assert.assertTrue(tb.hasObserver(observer3)); + + // Remove one + tb.remove(observer3); + Assert.assertTrue(tb.hasObserver(observer1)); + Assert.assertTrue(tb.hasObserver(observer2)); + Assert.assertFalse(tb.hasObserver(observer3)); + + // Start running, make sure we get a started call on the two active observers + // and not the third. + tb.setRunning(true, 250, 14000); + + Assert.assertTrue(tb.isRunning()); + + if (false) { + Log.d(TAG, "mUptimeStart=" + tb.getUptimeStart() + + " mRealtimeStart=" + tb.getRealtimeStart() + + " mUptime=" + tb.getUptime(250) + + " mRealtime=" + tb.getRealtime(14000) + + " isRunning=" + tb.isRunning()); + } + + Assert.assertEquals(250, tb.getUptimeStart()); + Assert.assertEquals(14000, tb.getRealtimeStart()); + Assert.assertEquals(100, tb.getUptime(250)); + Assert.assertEquals(1000, tb.getRealtime(14000)); + + Mockito.verify(observer1).onTimeStarted(14000, 100, 1000); + Mockito.verify(observer1, Mockito.never()).onTimeStopped(-1, -1, -1); + Mockito.verifyNoMoreInteractions(observer1); + Mockito.verify(observer2).onTimeStarted(14000, 100, 1000); + Mockito.verify(observer2, Mockito.never()).onTimeStopped(-1, -1, -1); + Mockito.verifyNoMoreInteractions(observer2); + + Mockito.reset(observer1); + Mockito.reset(observer2); + Mockito.reset(observer3); + + // Advance the "timer" and make sure the getters account for the current time passed in + Assert.assertEquals(400, tb.getUptime(550)); + Assert.assertEquals(1555, tb.getRealtime(14555)); + + // Stop running, make sure we get a stopped call on the two active observers + // and not the third. + tb.setRunning(false, 402, 14002); + + Assert.assertFalse(tb.isRunning()); + + if (false) { + Log.d(TAG, "mUptimeStart=" + tb.getUptimeStart() + + " mRealtimeStart=" + tb.getRealtimeStart() + + " mUptime=" + tb.getUptime(250) + + " mRealtime=" + tb.getRealtime(14000) + + " isRunning=" + tb.isRunning()); + } + + Assert.assertEquals(252, tb.getUptime(402)); + Assert.assertEquals(1002, tb.getRealtime(14002)); + + Mockito.verify(observer1).onTimeStopped(14002, 252, 1002); + Mockito.verify(observer1, Mockito.never()).onTimeStopped(-1, -1, -1); + Mockito.verifyNoMoreInteractions(observer1); + Mockito.verify(observer2).onTimeStopped(14002, 252, 1002); + Mockito.verify(observer2, Mockito.never()).onTimeStopped(-1, -1, -1); + Mockito.verifyNoMoreInteractions(observer2); + + // Advance the "timer" and make sure the getters account for the current time passed in + // is the same as the time when running went to false. + Assert.assertEquals(252, tb.getUptime(600)); + Assert.assertEquals(1002, tb.getRealtime(17000)); + } + + /** + * Test that reset while running updates the plugged and unplugged times + */ + @SmallTest + public void testResetWhileRunning() throws Exception { + TestTimeBase tb = new TestTimeBase(); + tb.populate(100, 200, true, 300, 400, 500, 600, 700, 800); + + tb.reset(666, 6666); + + // Not sure if this is a bug: reset while running does not + // reset mPastUptime, but while it is running it does. + tb.verify(100, 200, true, 300, 666, 500, 6666, 300, 500); + } + + /** + * Test that reset while running updates the plugged and unplugged times + */ + @SmallTest + public void testResetWhileNotRunning() throws Exception { + TestTimeBase tb = new TestTimeBase(); + tb.populate(100, 200, false, 300, 400, 500, 600, 700, 800); + + tb.reset(666, 6666); + + tb.verify(100, 200, false, 0, 400, 0, 600, 700, 800); + } + + /** + * Test init + */ + @SmallTest + public void testInit() throws Exception { + TestTimeBase tb = new TestTimeBase(); + tb.populate(100, 200, false, 300, 400, 500, 600, 700, 800); + + tb.init(666, 6666); + + tb.verify(0, 0, false, 0, 666, 0, 6666, 0, 0); + } + + /** + * Test writeToParcel and readFromParcel + */ + @SmallTest + public void testParcellingWhileRunning() throws Exception { + TestTimeBase tb1 = new TestTimeBase(); + + tb1.populate(100, 200, true, 300, 400, 500, 600, 700, 800); + + Parcel parcel = Parcel.obtain(); + tb1.writeToParcel(parcel, 666, 6666); + + parcel.setDataPosition(0); + + TestTimeBase tb2 = new TestTimeBase(); + tb2.readFromParcel(parcel); + + // Running is not preserved across parceling + tb2.verify(100, 200, false, 300+666-400, 400, 500+6666-600, 600, 700, 800); + } + + /** + * Test writeToParcel and readFromParcel + */ + @SmallTest + public void testParcellingWhileNotRunning() throws Exception { + TestTimeBase tb1 = new TestTimeBase(); + + tb1.populate(100, 200, false, 300, 400, 500, 600, 700, 800); + + Parcel parcel = Parcel.obtain(); + tb1.writeToParcel(parcel, 666, 6666); + + parcel.setDataPosition(0); + + TestTimeBase tb2 = new TestTimeBase(); + tb2.readFromParcel(parcel); + + tb2.verify(100, 200, false, 300, 400, 500, 600, 700, 800); + } + + /** + * Test writeSummaryToParcel and readSummaryFromParcel + */ + @SmallTest + public void testSummary() throws Exception { + TestTimeBase tb1 = new TestTimeBase(); + + tb1.populate(100, 200, true, 300, 400, 500, 600, 700, 800); + + Parcel parcel = Parcel.obtain(); + tb1.writeSummaryToParcel(parcel, 666, 6666); + + parcel.setDataPosition(0); + + TestTimeBase tb2 = new TestTimeBase(); + + // readSummaryFromParcel doesn't affect the other fields. + // Not sure if this is deliberate + tb2.populate(1, 2, true, 3, 4, 5, 6, 7, 8); + + tb2.readSummaryFromParcel(parcel); + + tb2.verify(666, 6766, true, 3, 4, 5, 6, 7, 8); + } + + /** + * Test computeUptime + */ + @SmallTest + public void testComputeUptime() throws Exception { + TestTimeBase tb = new TestTimeBase(); + + tb.populate(100, 200, true, 300, 400, 500, 600, 50, 60); + + Assert.assertEquals(100+300+666-400, + tb.computeUptime(666, BatteryStats.STATS_SINCE_CHARGED)); + Assert.assertEquals(300+666-400, + tb.computeUptime(666, BatteryStats.STATS_CURRENT)); + Assert.assertEquals(300+666-400-50, + tb.computeUptime(666, BatteryStats.STATS_SINCE_UNPLUGGED)); + + Assert.assertEquals(0, tb.computeUptime(666, 6000)); + } + + /** + * Test computeUptime + */ + @SmallTest + public void testComputeRealtime() throws Exception { + TestTimeBase tb = new TestTimeBase(); + + tb.populate(100, 200, true, 300, 400, 500, 600, 50, 60); + + Assert.assertEquals(200+500+6666-600, + tb.computeRealtime(6666, BatteryStats.STATS_SINCE_CHARGED)); + Assert.assertEquals(500+6666-600, + tb.computeRealtime(6666, BatteryStats.STATS_CURRENT)); + Assert.assertEquals(500+6666-600-60, + tb.computeRealtime(6666, BatteryStats.STATS_SINCE_UNPLUGGED)); + + Assert.assertEquals(0, tb.computeUptime(666, 6000)); + } + + /** + * Test dump + */ + @SmallTest + public void testDump() throws Exception { + TestTimeBase tb = new TestTimeBase(); + + tb.populate(100, 200, true, 300, 400, 500, 600, 50, 60); + + StringWriter sw = new StringWriter(); + PrintWriter pw = new PrintWriter(sw); + + tb.dump(pw, "+++++ "); + + pw.close(); + + // note the spaces at the ends of the lines which come from formatTimeMs. + final String CORRECT = "+++++ mRunning=true\n" + + "+++++ mUptime=0ms \n" + + "+++++ mRealtime=0ms \n" + + "+++++ mPastUptime=0ms mUptimeStart=0ms mUnpluggedUptime=0ms \n" + + "+++++ mPastRealtime=0ms mRealtimeStart=0ms mUnpluggedRealtime=0ms \n"; + + Assert.assertEquals(CORRECT, sw.toString()); + } + +} + diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsTimerTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsTimerTest.java new file mode 100644 index 000000000000..3e17fcb8843d --- /dev/null +++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsTimerTest.java @@ -0,0 +1,487 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.os; + +import android.os.BatteryStats; +import android.os.Parcel; +import android.test.suitebuilder.annotation.SmallTest; +import android.util.Log; +import android.util.StringBuilderPrinter; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.android.internal.os.BatteryStatsImpl.Clocks; +import com.android.internal.os.BatteryStatsImpl.TimeBase; +import com.android.internal.os.BatteryStatsImpl.Timer; + +/** + * Provides test cases for android.os.BatteryStats. + */ +public class BatteryStatsTimerTest extends TestCase { + private static final String TAG = "BatteryStatsTest"; + + class TestTimer extends Timer { + long nextComputeRunTime; + long lastComputeRunTimeRealtime; + + int nextComputeCurrentCount; + + TestTimer(Clocks clocks, int type, TimeBase timeBase, Parcel in) { + super(clocks, type, timeBase, in); + } + + TestTimer(Clocks clocks, int type, TimeBase timeBase) { + super(clocks, type, timeBase); + } + + protected long computeRunTimeLocked(long curBatteryRealtime) { + lastComputeRunTimeRealtime = curBatteryRealtime; + return nextComputeRunTime; + } + + protected int computeCurrentCountLocked() { + return nextComputeCurrentCount; + } + + public int getCount() { + return mCount; + } + + public void setCount(int val) { + mCount = val; + } + + public int getLoadedCount() { + return mLoadedCount; + } + + public void setLoadedCount(int val) { + mLoadedCount = val; + } + + public int getLastCount() { + return mLastCount; + } + + public void setLastCount(int val) { + mLastCount = val; + } + + public int getUnpluggedCount() { + return mUnpluggedCount; + } + + public void setUnpluggedCount(int val) { + mUnpluggedCount = val; + } + + public long getTotalTime() { + return mTotalTime; + } + + public void setTotalTime(long val) { + mTotalTime = val; + } + + public long getLoadedTime() { + return mLoadedTime; + } + + public void setLoadedTime(long val) { + mLoadedTime = val; + } + + public long getLastTime() { + return mLastTime; + } + + public void setLastTime(long val) { + mLastTime = val; + } + + public long getUnpluggedTime() { + return mUnpluggedTime; + } + + public void setUnpluggedTime(long val) { + mUnpluggedTime = val; + } + + public long getTimeBeforeMark() { + return mTimeBeforeMark; + } + + public void setTimeBeforeMark(long val) { + mTimeBeforeMark = val; + } + } + + /** + * Tests that the flow through TimeBase.setRunning propagates through + * to the timer. + */ + @SmallTest + public void testRunning() throws Exception { + TimeBase timeBase = new TimeBase(); + MockClocks clocks = new MockClocks(); + + TestTimer timer = new TestTimer(clocks, 0, timeBase); + timer.nextComputeCurrentCount = 3000; + + // Test that starting the timer counts the unplugged time and counters + timer.nextComputeRunTime = 4; + timer.onTimeStarted(10, 20, 50); + Assert.assertEquals(50, timer.lastComputeRunTimeRealtime); + Assert.assertEquals(4, timer.getUnpluggedTime()); + Assert.assertEquals(0, timer.getUnpluggedCount()); + + // Test that stopping the timer updates mTotalTime and mCount + timer.nextComputeRunTime = 17; + timer.onTimeStopped(100, 130, 170); + Assert.assertEquals(17, timer.getTotalTime()); + Assert.assertEquals(3000, timer.getCount()); + } + + /** + * Tests that the parcel can be parceled and unparceled without losing anything. + */ + @SmallTest + public void testParceling() throws Exception { + TimeBase timeBase = new TimeBase(); + MockClocks clocks = new MockClocks(); + + // Test write then read + TestTimer timer1 = new TestTimer(clocks, 0, timeBase); + timer1.setCount(1); + timer1.setLoadedCount(2); + timer1.setLastCount(3); + timer1.setUnpluggedCount(4); + timer1.setTotalTime(9223372036854775807L); + timer1.setLoadedTime(9223372036854775806L); + timer1.setLastTime(9223372036854775805L); + timer1.setUnpluggedTime(9223372036854775804L); + timer1.setTimeBeforeMark(9223372036854775803L); + timer1.nextComputeRunTime = 201; + + Parcel parcel = Parcel.obtain(); + Timer.writeTimerToParcel(parcel, timer1, 77); + + parcel.setDataPosition(0); + Assert.assertTrue("parcel null object", parcel.readInt() != 0); + + TestTimer timer2 = new TestTimer(clocks, 0, timeBase, parcel); + Assert.assertEquals(1, timer2.getCount()); + Assert.assertEquals(2, timer2.getLoadedCount()); + Assert.assertEquals(0, timer2.getLastCount()); // NOT saved + Assert.assertEquals(4, timer2.getUnpluggedCount()); + Assert.assertEquals(201, timer2.getTotalTime()); // from computeRunTimeLocked() + Assert.assertEquals(9223372036854775806L, timer2.getLoadedTime()); + Assert.assertEquals(0, timer2.getLastTime()); // NOT saved + Assert.assertEquals(9223372036854775804L, timer2.getUnpluggedTime()); + Assert.assertEquals(9223372036854775803L, timer2.getTimeBeforeMark()); + + parcel.recycle(); + } + + /** + * Tests that the parcel can be parceled and unparceled without losing anything. + */ + @SmallTest + public void testParcelingNull() throws Exception { + // Test writing null + Parcel parcel = Parcel.obtain(); + Timer.writeTimerToParcel(parcel, null, 88); + + parcel.setDataPosition(0); + Assert.assertEquals(0, parcel.readInt()); + + parcel.recycle(); + } + + /** + * Tests that reset() clears the correct times. + */ + @SmallTest + public void testResetNoDetach() throws Exception { + TimeBase timeBase = new TimeBase(); + MockClocks clocks = new MockClocks(); + + TestTimer timer = new TestTimer(clocks, 0, timeBase); + timer.setCount(1); + timer.setLoadedCount(2); + timer.setLastCount(3); + timer.setUnpluggedCount(4); + timer.setTotalTime(9223372036854775807L); + timer.setLoadedTime(9223372036854775806L); + timer.setLastTime(9223372036854775805L); + timer.setUnpluggedTime(9223372036854775804L); + timer.setTimeBeforeMark(9223372036854775803L); + + timer.reset(false); + + Assert.assertEquals(0, timer.getCount()); + Assert.assertEquals(0, timer.getLoadedCount()); + Assert.assertEquals(0, timer.getLastCount()); + Assert.assertEquals(4, timer.getUnpluggedCount()); + Assert.assertEquals(0, timer.getTotalTime()); + Assert.assertEquals(0, timer.getLoadedTime()); + Assert.assertEquals(0, timer.getLastTime()); + Assert.assertEquals(9223372036854775804L, timer.getUnpluggedTime()); + Assert.assertEquals(0, timer.getTimeBeforeMark()); + + // reset(false) shouldn't remove it from the list + Assert.assertEquals(true, timeBase.hasObserver(timer)); + } + + /** + * Tests that reset() clears the correct times. + */ + @SmallTest + public void testResetDetach() throws Exception { + TimeBase timeBase = new TimeBase(); + MockClocks clocks = new MockClocks(); + + TestTimer timer = new TestTimer(clocks, 0, timeBase); + timer.setCount(1); + timer.setLoadedCount(2); + timer.setLastCount(3); + timer.setUnpluggedCount(4); + timer.setTotalTime(9223372036854775807L); + timer.setLoadedTime(9223372036854775806L); + timer.setLastTime(9223372036854775805L); + timer.setUnpluggedTime(9223372036854775804L); + timer.setTimeBeforeMark(9223372036854775803L); + + timer.reset(true); + + Assert.assertEquals(0, timer.getCount()); + Assert.assertEquals(0, timer.getLoadedCount()); + Assert.assertEquals(0, timer.getLastCount()); + Assert.assertEquals(4, timer.getUnpluggedCount()); + Assert.assertEquals(0, timer.getTotalTime()); + Assert.assertEquals(0, timer.getLoadedTime()); + Assert.assertEquals(0, timer.getLastTime()); + Assert.assertEquals(9223372036854775804L, timer.getUnpluggedTime()); + Assert.assertEquals(0, timer.getTimeBeforeMark()); + + // reset(true) should remove it from the list + Assert.assertEquals(false, timeBase.hasObserver(timer)); + } + + /** + * Tests reading and writing the summary to a parcel + */ + @SmallTest + public void testSummaryParceling() throws Exception { + TimeBase timeBase = new TimeBase(); + timeBase.setRunning(true, 10, 20); + timeBase.setRunning(false, 45, 60); + Assert.assertEquals(40, timeBase.getRealtime(200)); + // the past uptime is 35 and the past runtime is 40 + + MockClocks clocks = new MockClocks(); + + TestTimer timer1 = new TestTimer(clocks, 0, timeBase); + timer1.setCount(1); + timer1.setLoadedCount(2); + timer1.setLastCount(3); + timer1.setUnpluggedCount(4); + timer1.setTotalTime(9223372036854775807L); + timer1.setLoadedTime(9223372036854775806L); + timer1.setLastTime(9223372036854775805L); + timer1.setUnpluggedTime(9223372036854775804L); + timer1.setTimeBeforeMark(9223372036854775803L); + + Parcel parcel = Parcel.obtain(); + timer1.nextComputeRunTime = 9223372036854775800L; + timer1.writeSummaryFromParcelLocked(parcel, 201); + Assert.assertEquals(40, timer1.lastComputeRunTimeRealtime); + + TestTimer timer2 = new TestTimer(clocks, 0, timeBase); + + // Make sure that all the values get touched + timer2.setCount(666); + timer2.setLoadedCount(666); + timer2.setLastCount(666); + timer2.setUnpluggedCount(666); + timer2.setTotalTime(666); + timer2.setLoadedTime(666); + timer2.setLastTime(666); + timer2.setUnpluggedTime(666); + timer2.setTimeBeforeMark(666); + + parcel.setDataPosition(0); + + parcel.setDataPosition(0); + timer2.readSummaryFromParcelLocked(parcel); + + Assert.assertEquals(1, timer2.getCount()); + Assert.assertEquals(1, timer2.getLoadedCount()); + Assert.assertEquals(0, timer2.getLastCount()); + Assert.assertEquals(1, timer2.getUnpluggedCount()); + Assert.assertEquals(9223372036854775800L, timer2.getTotalTime()); + Assert.assertEquals(9223372036854775800L, timer2.getLoadedTime()); + Assert.assertEquals(0, timer2.getLastTime()); + Assert.assertEquals(9223372036854775800L, timer2.getUnpluggedTime()); + Assert.assertEquals(9223372036854775800L, timer2.getTimeBeforeMark()); + + parcel.recycle(); + } + + /** + * Tests getTotalTimeLocked + */ + @SmallTest + public void testGetTotalTimeLocked() throws Exception { + TimeBase timeBase = new TimeBase(); + timeBase.setRunning(true, 10, 20); + timeBase.setRunning(false, 45, 60); + Assert.assertEquals(40, timeBase.getRealtime(200)); + + MockClocks clocks = new MockClocks(); + + TestTimer timer = new TestTimer(clocks, 0, timeBase); + timer.setCount(1); + timer.setLoadedCount(2); + timer.setLastCount(3); + timer.setUnpluggedCount(4); + timer.setTotalTime(100); + timer.setLoadedTime(200); + timer.setLastTime(300); + timer.setUnpluggedTime(400); + timer.setTimeBeforeMark(500); + + timer.nextComputeRunTime = 10000; + + // Timer.getTotalTimeLocked(STATS_SINCE_CHARGED) + timer.lastComputeRunTimeRealtime = -1; + Assert.assertEquals(10000, + timer.getTotalTimeLocked(66, BatteryStats.STATS_SINCE_CHARGED)); + Assert.assertEquals(40, timer.lastComputeRunTimeRealtime); + + // Timer.getTotalTimeLocked(STATS_CURRENT) + timer.lastComputeRunTimeRealtime = -1; + Assert.assertEquals(9800, timer.getTotalTimeLocked(66, BatteryStats.STATS_CURRENT)); + Assert.assertEquals(40, timer.lastComputeRunTimeRealtime); + + // Timer.getTotalTimeLocked(STATS_SINCE_UNPLUGGED) + timer.lastComputeRunTimeRealtime = -1; + Assert.assertEquals(9600, timer.getTotalTimeLocked(66, BatteryStats.STATS_SINCE_UNPLUGGED)); + Assert.assertEquals(40, timer.lastComputeRunTimeRealtime); + } + + /** + * Tests getCountLocked + */ + @SmallTest + public void testGetCountLocked() throws Exception { + TimeBase timeBase = new TimeBase(); + timeBase.setRunning(true, 10, 20); + timeBase.setRunning(false, 45, 60); + Assert.assertEquals(40, timeBase.getRealtime(200)); + + MockClocks clocks = new MockClocks(); + + TestTimer timer = new TestTimer(clocks, 0, timeBase); + timer.setCount(1); + timer.setLoadedCount(2); + timer.setLastCount(3); + timer.setUnpluggedCount(4); + timer.setTotalTime(100); + timer.setLoadedTime(200); + timer.setLastTime(300); + timer.setUnpluggedTime(400); + timer.setTimeBeforeMark(500); + + // Timer.getCountLocked(STATS_SINCE_CHARGED) + timer.nextComputeCurrentCount = 10000; + Assert.assertEquals(10000, timer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED)); + + // Timer.getCountLocked(STATS_CURRENT) + timer.nextComputeCurrentCount = 10000; + Assert.assertEquals(9998, timer.getCountLocked(BatteryStats.STATS_CURRENT)); + + // Timer.getCountLocked(STATS_SINCE_UNPLUGGED) + timer.nextComputeCurrentCount = 10000; + Assert.assertEquals(9996, timer.getCountLocked(BatteryStats.STATS_SINCE_UNPLUGGED)); + } + + /** + * Tests getTimeSinceMarkLocked + */ + @SmallTest + public void testGetTimeSinceMarked() throws Exception { + TimeBase timeBase = new TimeBase(); + timeBase.setRunning(true, 10, 20); + timeBase.setRunning(false, 45, 60); + Assert.assertEquals(40, timeBase.getRealtime(200)); + + MockClocks clocks = new MockClocks(); + + TestTimer timer = new TestTimer(clocks, 0, timeBase); + timer.setCount(1); + timer.setLoadedCount(2); + timer.setLastCount(3); + timer.setUnpluggedCount(4); + timer.setTotalTime(100); + timer.setLoadedTime(200); + timer.setLastTime(300); + timer.setUnpluggedTime(400); + timer.setTimeBeforeMark(500); + + timer.nextComputeRunTime = 10000; + Assert.assertEquals(9500, timer.getTimeSinceMarkLocked(666)); + } + + /** + * Tests logState + */ + @SmallTest + public void testLogState() throws Exception { + TimeBase timeBase = new TimeBase(); + MockClocks clocks = new MockClocks(); + + TestTimer timer = new TestTimer(clocks, 0, timeBase); + timer.setTotalTime(100); + timer.setLoadedTime(200); + timer.setLastTime(300); + timer.setUnpluggedTime(400); + timer.setTimeBeforeMark(500); + timer.setCount(1); + timer.setLoadedCount(2); + timer.setLastCount(3); + timer.setUnpluggedCount(4); + timer.setTotalTime(9223372036854775807L); + timer.setLoadedTime(9223372036854775806L); + timer.setLastTime(9223372036854775805L); + timer.setUnpluggedTime(9223372036854775804L); + timer.setTimeBeforeMark(9223372036854775803L); + + StringBuilder sb = new StringBuilder(); + StringBuilderPrinter pw = new StringBuilderPrinter(sb); + + timer.logState(pw, " "); + + Assert.assertEquals( + " mCount=1 mLoadedCount=2 mLastCount=3 mUnpluggedCount=4\n" + + " mTotalTime=9223372036854775807 mLoadedTime=9223372036854775806\n" + + " mLastTime=9223372036854775805 mUnpluggedTime=9223372036854775804\n", + sb.toString()); + } +} + diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsUidTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsUidTest.java new file mode 100644 index 000000000000..a7e75a248eda --- /dev/null +++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsUidTest.java @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.os; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.ArrayList; + +import android.os.BatteryStats; +import android.os.Parcel; +import android.test.suitebuilder.annotation.SmallTest; +import android.util.Log; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.android.internal.os.BatteryStatsImpl; + +import org.mockito.Mockito; + +/** + * Provides test cases for android.os.BatteryStats. + */ +public class BatteryStatsUidTest extends TestCase { + private static final String TAG = "BatteryStatsTimeBaseTest"; + + static class TestBsi extends BatteryStatsImpl { + TestBsi(MockClocks clocks) { + super(clocks); + } + } + + /** + * Test the observers and the setRunning call. + */ + @SmallTest + public void testParceling() throws Exception { + } +} + diff --git a/core/tests/coretests/src/com/android/internal/os/MockBatteryStatsImpl.java b/core/tests/coretests/src/com/android/internal/os/MockBatteryStatsImpl.java new file mode 100644 index 000000000000..392448976229 --- /dev/null +++ b/core/tests/coretests/src/com/android/internal/os/MockBatteryStatsImpl.java @@ -0,0 +1,51 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.os; + +import java.io.PrintWriter; +import java.io.StringWriter; +import java.util.ArrayList; + +import android.os.BatteryStats; +import android.os.Parcel; +import android.test.suitebuilder.annotation.SmallTest; +import android.util.Log; + +import junit.framework.Assert; +import junit.framework.TestCase; + +import com.android.internal.os.BatteryStatsImpl; + +import org.mockito.Mockito; + +/** + * Mocks a BatteryStatsImpl object. + */ +public class MockBatteryStatsImpl extends BatteryStatsImpl { + public BatteryStatsImpl.Clocks clocks; + + MockBatteryStatsImpl() { + super(new MockClocks()); + this.clocks = mClocks; + } + + public TimeBase getOnBatteryTimeBase() { + return mOnBatteryTimeBase; + } + +} + diff --git a/core/tests/coretests/src/com/android/internal/os/MockClocks.java b/core/tests/coretests/src/com/android/internal/os/MockClocks.java new file mode 100644 index 000000000000..f750c3746d26 --- /dev/null +++ b/core/tests/coretests/src/com/android/internal/os/MockClocks.java @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.os; + +public class MockClocks implements BatteryStatsImpl.Clocks { + public long realtime; + public long uptime; + + @Override + public long elapsedRealtime() { + return realtime; + } + + @Override + public long uptimeMillis() { + return uptime; + } +} diff --git a/core/tests/utiltests/src/com/android/internal/util/MessageUtilsTest.java b/core/tests/utiltests/src/com/android/internal/util/MessageUtilsTest.java new file mode 100644 index 000000000000..32b969a8d1b5 --- /dev/null +++ b/core/tests/utiltests/src/com/android/internal/util/MessageUtilsTest.java @@ -0,0 +1,97 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.util; + +import static org.junit.Assert.*; + +import com.android.internal.util.MessageUtils; +import android.test.suitebuilder.annotation.SmallTest; +import android.util.SparseArray; + +import org.junit.Test; + + +class A { + // Should not see these. + private int mMember; + public final int CMD_NOT_STATIC = 7; + private static final String CMD_NOT_INT = "not an integer"; + public static int CMD_NOT_FINAL = 34; + public static final int kWrongPrefix = 99; + + // Should see these. + private static final int CMD_DO_SOMETHING = 12; + public static final int EVENT_SOMETHING_HAPPENED = 45; +} + +class B { + public static final int CMD_FOO = 56; + public static final int EVENT_BAR = 55; + public static final int NOTIFICATION_BAZ = 12; +} + +/** + * Unit tests for {@link com.android.util.MessageUtils}. + */ +@SmallTest +public class MessageUtilsTest { + + private static final Class[] CLASSES = { A.class, B.class }; + + private SparseArray<String> makeSparseArray(int[] keys, String[] values) throws Exception { + assertEquals("Must specify same number of keys and values", keys.length, values.length); + SparseArray<String> out = new SparseArray<>(); + for (int i = 0; i < keys.length; i++) { + out.put(keys[i], values[i]); + } + return out; + } + + private void assertSparseArrayEquals( + SparseArray<String> a1, SparseArray<String> a2) throws Exception { + String msg = String.format("%s != %s", a1.toString(), a2.toString()); + assertEquals(msg, a1.size(), a2.size()); + int size = a1.size(); + for (int i = 0; i < size; i++) { + assertEquals(msg, a1.keyAt(i), a2.keyAt(i)); + assertEquals(msg, a1.valueAt(i), a2.valueAt(i)); + } + } + + @Test + public void basicOperation() throws Exception { + SparseArray<String> expected = makeSparseArray( + new int[]{12, 45, 55, 56}, + new String[]{"CMD_DO_SOMETHING", "EVENT_SOMETHING_HAPPENED", "EVENT_BAR", "CMD_FOO"}); + assertSparseArrayEquals(expected, MessageUtils.findMessageNames(CLASSES)); + } + + @Test + public void withPrefixes() throws Exception { + SparseArray<String> expected = makeSparseArray( + new int[]{45, 55}, + new String[]{"EVENT_SOMETHING_HAPPENED", "EVENT_BAR"}); + assertSparseArrayEquals(expected, MessageUtils.findMessageNames(CLASSES, + new String[]{"EVENT_"})); + } + + @Test(expected=MessageUtils.DuplicateConstantError.class) + public void duplicateConstants() { + MessageUtils.findMessageNames(CLASSES, new String[]{"CMD_", "NOTIFICATION_"}); + } + +} diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs index f3f2e5e7e780..e99c15a14e6f 100644 --- a/docs/html/guide/guide_toc.cs +++ b/docs/html/guide/guide_toc.cs @@ -631,6 +631,16 @@ </ul> </li> + <li class="nav-section"> + <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/security/index.html"> + <span class="en">Security</span> + </a></div> + <ul> + <li><a href="<?cs var:toroot ?>guide/topics/security/security-config.html"> + <span class="en">Network Security Config</span> + </a></li> + </ul> + </li> </ul> diff --git a/docs/html/guide/topics/security/index.jd b/docs/html/guide/topics/security/index.jd new file mode 100644 index 000000000000..22fb775c47f8 --- /dev/null +++ b/docs/html/guide/topics/security/index.jd @@ -0,0 +1,7 @@ +page.title=Security +page.landing=true +page.landing.intro=Configure the security of your application. + +@jd:body +<div class="landing-docs"> +</div> diff --git a/docs/html/guide/topics/security/security-config.jd b/docs/html/guide/topics/security/security-config.jd new file mode 100644 index 000000000000..4cee2536b904 --- /dev/null +++ b/docs/html/guide/topics/security/security-config.jd @@ -0,0 +1,539 @@ +page.title=Network Security Config +@jd:body + +<div id="qv-wrapper"> +<div id="qv"> + +<h2>In this document</h2> +<ol> +<li><a href="#SupportedFeatures">Features</a></li> +<li><a href="#Examples">Examples</a> + <ol> + <li><a href="#TrustingCustomCas">Trusting Custom CAs</a> + <ol> + <li><a href="#TrustingACustomCa">Trusting a Custom CA</a></li> + <li><a href="#LimitingCas">Limiting the Set of Trusted CAs</a></li> + <li><a href="#TrustingAdditionalCas">Trusting Additional CAs</a></li> + </ol> + </li> + <li><a href="#TrustingDebugCa">Debugging-only CAs</a></li> + <li><a href="#UsesCleartextTraffic">Cleartext Traffic Opt-Out</a></li> + <li><a href="#CertificatePinning">Certificate Pinning</a></li> + <li><a href="#ConfigInheritance">Configuration Inheritance</a></li> + </ol> +</li> +<li><a href="#FileFormat">Configuration File Format</a></li> +</ol> +</div> +</div> + +<p>The Android Network Security Config lets apps customize their network security settings +in a safe, declarative configuration file without modifying application code. +These settings can be configured for specific domains and app-wide.</p> + +<h2 id="SupportedFeatures">Features</h2> +<ul> +<li><b>Custom trust anchors.</b> Lets an application customize which Certificate Authorities (CA) are trusted +for its secure connections. For example, trusting particular self-signed certificates or restricting the set of public +CAs that the app trusts. +</li> +<li><b>Debug-only overrides.</b> Lets an application developer safely debug secure connections of their +application without added risk to the installed base. +</li> +<li><b>Cleartext traffic opt-out.</b> Lets an application protect itself from accidental usage of cleartext traffic.</li> +<li><b>Certificate pinning.</b> An advanced feature that lets an application restrict pin its secure connection +to particular certificates.</li> +</ul> + +<h2 id="Examples">Examples</h2> +<h3 id="TrustingCustomCas">Trusting Custom CAs</h3> +<p>An application may want to trust a custom set of CAs instead of the platform +default. The most common reasons of this are: +<ul> +<li>Connecting to a host with a custom certificate authority(self-signed, issued by an internal corporate CA, etc).</li> +<li>Limiting the set of CAs to only the CAs you trust instead of every preinstalled CA.</li> +<li>Trusting additional CAs not included in the system.</li> +</ul> +</p> +<p>By default secure (e.g. TLS, HTTPS) connections from all applications trust the pre-installed system CAs, and +applications targeting API level 23 (Android M) and below also trust the user-added CA store by default. +An application can customize its own connections using {@code base-config} (for app-wide customization) or +{@code domain-config} (for per-domain customization).</p> + +<h4 id="TrustingACustomCa">Trusting a Custom CA</h4> +<p>Assume you want to connect to your host which uses a self-signed SSL certificate or to +a host whose SSL certificate is issued by a non-public CA which you trust, e.g., your company's internal +CA.</p> +<p> +<code>res/xml/network_security_config.xml</code>: +<pre> +<?xml version="1.0" encoding="utf-8"?> +<network-security-config> + <domain-config> + <domain includeSubdomains="true">example.com</domain> + <trust-anchors> + <certificates src="@raw/my_ca"/> + </trust-anchors> + </domain-config> +</network-security-config> +</pre> +</p> +<p>Add the self-signed or non-public CA certificate, in PEM or DER format, to {@code res/raw/my_ca}.</p> +<p> +In <code>AndroidManifest.xml</code> reference the above config +<pre> +<?xml version="1.0" encoding="utf-8"?> +... +<application ...> + <meta-data android:name="android.security.net.config" + android:resource="@xml/network_security_config" /> + ... +</pre> +</p> +<h4 id="LimitingCas">Limiting the Set of Trusted CAs</h4> +<p>An application that does not want to trust all CAs trusted by system can instead specify its own +reduced set of CAs to trust. This protects the application from fradulent certificates issued by any +of the other CAs.</p> + +<p>The config to limit the set of trusted CAs is similar to <a href="#TrustingACustomCa">trusting a custom CA</a> +for a specific domain except that multiple CAs are provided in the resource.</p> + +<p> +<code>res/xml/network_security_config.xml</code>: +<pre> +<?xml version="1.0" encoding="utf-8"?> +<network-security-config> + <domain-config> + <domain includeSubdomains="true">secure.example.com</domain> + <domain includeSubdomains="true">cdn.example.com</domain> + <trust-anchors> + <certificates src="@raw/trusted_roots"/> + </trust-anchors> + </domain-config> +</network-security-config> +</pre> +</p> +<p>Add the trusted CAs, in PEM or DER format, to {@code res/raw/trusted_roots}. +Note that if using PEM format the file must contain <em>only</em> PEM data and no extra text. +You can also provide multiple <a href="certificates"><code><certificates></code></a> elements instead +of one.</p> +<p> +In <code>AndroidManifest.xml</code> reference the above config +<pre> +<?xml version="1.0" encoding="utf-8"?> +... +<application ...> + <meta-data android:name="android.security.net.config" + android:resource="@xml/network_security_config" /> + ... +</pre> +</p> + +<h4 id="TrustingAdditionalCas">Trusting Additional CAs</h4> +<p>An application may want to trust additional CAs not trusted by the system, this could be due to +the system not yet including the CA or a CA that does not meet the requirements for inclusion into +the Android system. An application can do this by specifying multiple certificate sources for a configuration. +</p> +<p> +<code>res/xml/network_security_config.xml</code>: +<pre> +<?xml version="1.0" encoding="utf-8"?> +<network-security-config> + <base-config> + <trust-anchors> + <certificates src="@raw/extracas"/> + <certificates src="system"/> + </trust-anchors> + </base-config> +</network-security-config> +</pre> +</p> +<p> +In <code>AndroidManifest.xml</code> reference the above config +<pre> +<?xml version="1.0" encoding="utf-8"?> +... +<application ...> + <meta-data android:name="android.security.net.config" + android:resource="@xml/network_security_config" /> + ... +</pre> +</p> + +<h3 id="TrustingDebugCa">Debugging-only CAs</h3> +<p>When debugging an application that connects over HTTPS you may want to connect to a local development +server, which does not have the SSL certificate for your production server. In order to support this +without any modification to your application's code you can specify debug-only CAs that are +<i>only</i> trusted when <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a> +is {@code true} by using {@code debug-overrides}. Normally IDEs and build tools set this flag automatically for non-release builds.</p> +<p>This is safer than the usual conditional code because, as a security precaution, application stores +do not accept applications which are marked debuggable.</p> + +<p> +<code>res/xml/network_security_config.xml</code>: +<pre> +<?xml version="1.0" encoding="utf-8"?> +<network-security-config> + <debug-overrides> + <trust-anchors> + <certificates src="@raw/debug_cas"/> + </trust-anchors> + </debug-overrides> +</network-security-config> +</pre> +</p> +<p> +In <code>AndroidManifest.xml</code> reference the above config +<pre> +<?xml version="1.0" encoding="utf-8"?> +... +<application ...> + <meta-data android:name="android.security.net.config" + android:resource="@xml/network_security_config" /> + ... +</pre> +</p> + +<h3 id="UsesCleartextTraffic">Cleartext Traffic Opt-Out</h3> +<p>Applications which intend to connect to destinations using only secure connections can opt-out +of supporting cleartext (i.e. plain HTTP instead of HTTPS) to those destinations. This helps prevent +accidental regressions in applications due to changes in URLs provided by external sources such as +backend servers.</p> +<p>See {a href="{@docRoot}reference/android/security/NetworkSecurityPolicy.html#isCleartextTrafficPermitted()} for more details.</p> + +<p>For example, an application may want to ensure that all connections to {@code secure.example.com} are always +done over HTTPS to protect sensitive traffic from hostile networks.</p> + +<p> +<code>res/xml/network_security_config.xml</code>: +<pre> +<?xml version="1.0" encoding="utf-8"?> +<network-security-config> + <domain-config usesCleartextTraffic="false"> + <domain includeSubdomains="true">secure.example.com</domain> + </domain-config> +</network-security-config> +</pre> +</p> +<p> +In <code>AndroidManifest.xml</code> reference the above config +<pre> +<?xml version="1.0" encoding="utf-8"?> +... +<application ...> + <meta-data android:name="android.security.net.config" + android:resource="@xml/network_security_config" /> + ... +</pre> +</p> + +<h3 id="CertificatePinning">Certificate Pinning</h3> +<p>Normally an application trusts all preinstalled CAs. If any of these CAs were to issue a fradulent certificate +the application would be at risk from a MiTM attack. Some applications choose to limit the set of +certificates they accept by either limiting the set of CAs they trust or by certificate pinning.</p> + +<p>Certificate pinning is done by providing a set of certificates by hash of the public key (SubjectPublicKeyInfo +of the X.509 certificate). A certificate chain is then only valid if the certificate chain contains at least +one of the pinned public keys.</p> + +<p>Note that when using certificate pinning you should always include a backup key so that if you +are forced to switch to new keys, or change CAs (when pinning to a CA certificate or an intermediate of that CA), +your application's connectivity is unaffected. Otherwise you will have to push out an update to the +application to restore connectivity.</p> + +<p>Additionally it is possible to set an expiration time for pins after which pinning will not be +performed. This helps prevent connectivity issues in applications which have not been updated. +However, setting an expiration time on pins may enable pinning bypass. +</p> + +<p> +<code>res/xml/network_security_config.xml</code>: +<pre> +<?xml version="1.0" encoding="utf-8"?> +<network-security-config> + <domain-config> + <domain includeSubdomains="true">example.com</domain> + <pin-set expiration="2018-01-01"> + <pin digest="SHA-256">7HIpactkIAq2Y49orFOOQKurWxmmSFZhBCoQYcRhJ3Y=</pin> + <!-- backup pin --> + <pin digest="SHA-256">fwza0LRMXouZHRC8Ei+4PyuldPDcf3UKgO/04cDM1oE=</pin> + </domain-config> +</network-security-config> +</pre> +</p> +<p> +In <code>AndroidManifest.xml</code> reference the above config +<pre> +<?xml version="1.0" encoding="utf-8"?> +... +<application ...> + <meta-data android:name="android.security.net.config" + android:resource="@xml/network_security_config" /> + ... +</pre> +</p> + +<h3 id="ConfigInheritance">Configuration Inheritance</h3> +<p>Values not set in a specific config will be inherited. +This allows more complex configurations while keeping the configuration file readable.</p> + +<p>If a value is not set in a specific entry then value from the next more general entry will be used. +Values not set in a {@code domain-config} will be taken from the parent {@code domain-config}, if nested, or +from the {@code base-config} if not. Values not set in the {@code base-config} will use +the platform default values. + +<p>For example consider, where all connections to subdomains of {@code example.com} +must use a custom set of CAs. Additonally cleartext traffic to these domains is permitted +<em>except</em> when connecting to {@code secure.example.com}. By nesting the configuration +for {@code secure.example.com} inside the configuration for {@code example.com} the +{@code trust-anchors} does not need to be duplicated.</p> + +<p> +<code>res/xml/network_security_config.xml</code>: +<pre> +<?xml version="1.0" encoding="utf-8"?> +<network-security-config> + <domain-config> + <domain includeSubdomains="true">example.com</domain> + <trust-anchors> + <certificates src="@raw/my_ca"/> + </trust-anchors> + <domain-config cleartextTrafficPermitted="false"> + <domain includeSubdomains="true">secure.example.com</domain> + </domain-config> + </domain-config> +</network-security-config> +</pre> +</p> +<p> +In <code>AndroidManifest.xml</code> reference the above config +<pre> +<?xml version="1.0" encoding="utf-8"?> +... +<application ...> + <meta-data android:name="android.security.net.config" + android:resource="@xml/network_security_config" /> + ... +</pre> +</p> + +<h2 id="FileFormat">Configuration File Format</h2> +<p>The configuration file is XML. Here is what it can contain:</p> +</p> +<pre> +<?xml version="1.0" encoding="utf-8"?> +<network-security-config> + <base-config> + <trust-anchors> + <certificates src="..."/> + ... + </trust-anchors> + </base-config> + + <domain-config> + <domain>android.com</domain> + ... + <trust-anchors> + <certificates src="..."/> + ... + </trust-anchors> + <pin-set> + <pin digest="...">...</pin> + ... + </pin-set> + </domain-config> + ... + <debug-overrides> + <trust-anchors> + <certificates src="..."/> + ... + </trust-anchors> + </debug-overrides> +</network-security-config> +</pre> + +<h3 id="network-security-config"><network-security-config></h3> +<dl class="xml"> +<dt>can contain:</dt> +<dd>0 or 1 <code><a href="#base-config"><base-config></a></code> +<br/>Any number of <code><a href="#domain-config"><domain-config></a></code> +<br/>0 or 1<code><a href="#debug-overrides"><debug-overrides></a></code> +</dd> +</dl> + + +<h3 id="base-config"><base-config></h3> +<dl class="xml"> +<dt>syntax:</dt> +<dd><pre class="stx"><base-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]> + ... +</base-config></pre></dd> +<dt>can contain:</dt> +<dd><code><a href="#trust-anchors"><trust-anchors></a></code></dd> +<dt>descrption:</dt> +<dd> +The default configuration used by all connections whose destination is not covered by a +<a href="#domain-config"><code>domain-config</code></a>. + +<p>Any values that are not set will use the platform default values. +The default configuration for applications targeting above API level 24 and above: +<pre> +<base-config usesCleartextTraffic="true"> + <trust-anchors> + <certificates src="system" /> + </trust-anchors> +</base-config> +</pre> +The default configuration for applications targeting API level 23 and below is: +<pre> +<base-config usesCleartextTraffic="true"> + <trust-anchors> + <certificates src="system" /> + <certificates src="user" /> + </trust-anchors> +</base-config> +</pre> +</p> +</dd> +</dl> + +<h3 id="domain-config"><domain-config></h3> +<dl class="xml"> +<dt>syntax:</dt> +<dd><pre class="stx"><domain-config <a href="#usesCleartextTraffic">usesCleartextTraffic</a>=["true" | "false"]> + ... +</domain-config></pre></dd> +<dt>Can Contain:</dt> + +<dd> +1 or more <code><a href="#domain"><domain></a></code> +<br/>0 or 1 <code><a href="#trust-anchors"><trust-anchors></a></code> +<br/>0 or 1 <code><a href="#pin-set"><pin-set></code></a> +<br/>Any number of nested <code><domain-config></code></dd> + +<dt>Descrption</dt> +<dd>Configuration used for connections to specific destinations as the defined by {@code domain} elements. + +<p>Note that if multiple {@code domain-config} elements cover a destination the config with the most specific (longest) +matching domain rule will be used.</p></dd> +</dl> + +<h3 id="domain"><domain></h3> +<dl class="xml"> +<dt>syntax:</dt> +<dd><pre class="stx"><domain includeSubdomains=["true" | "false"]>example.com</domain></pre></dd> +<dt>Attributes:</dt> +<dd><dl class="attr"> +<dt>{@code includeSubdomains}</dt> +<dd>If {@code "true"} then this domain rule will match the domain and all subdomains, including +subdomains of subdomains, otherwise the rule only applies to exact matches.</dd> +</dl> +</dd> + +<dt>Descrption:</dt> +</dl> + +<h3 id="debug-overrides"><debug-overrides></h3> +<dl class="xml"> +<dt>syntax:</dt> +<dd><pre class="stx"><debug-overrides> + ... +</debug-overrides></pre></dd> +<dt>Can Contain:</dt> +<dd>0 or 1 <code><a href="#trust-anchors"><trust-anchors></a></code></dd> +<dt>Description:</dt> +<dd>Overrides to be applied when +<a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a> is +{@code "true"} which is normally the case for non-release builds generated by IDEs and build tools. +Trust anchors specified in {@code debug-overrides} are added to all other configurations and certificate +pinning is not performed when the server's certificate chain uses one of these debug-only trust anchors. +If <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a> is +{@code "false"} then this section is completely ignored. +</dd> +</dl> + +<h3 id="trust-anchors"><trust-anchors></h3> +<dl class="xml"> +<dt>syntax:</dt> +<dd> +<pre class="stx"><trust-anchors> +... +</trust-anchors> +</pre></dd> +<dt>Can Contain:</dt> +<dd>Any number of <code><a href="#certificates"><certificates></a></code></dd> +<dt>Description:</dt> +<dd>Set of trust anchors for secure connections.</dd> +</dl> + + +<h3 id="certificates"><certificates></h3> +<dl class="xml"> +<dt>syntax:</dt> +<dd><pre class="stx"><certificates src=["system" | "user" | "<i>raw resource</i>"] + overridePins=["true" | "false"] /> +</pre></dd> +<dt>description:</dt> +<dd>Set of X.509 certificates for {@code trust-anchors} elements.</dd> + +<dt>attributes:</dt> +<dd><dl class="attr"> +<dt>{@code src}</dt> +<dd> +The source of CA certificates, can be one of +<ul> + <li>a raw resource id pointing to a file containing X.509 certificates. Certificates must be encoded in DER or PEM format. + In the case of PEM certificates the file <em>must not</em> contain extra non-PEM data such as comments.</li> + <li>{@code "system"} for the pre-installed system CA certificates</li> + <li>{@code "user"} for user-added CA certificates</li> +</ul> +</dd> + +<dt>{@code overridePins}</dt> +<dd> +Specifies if the CAs from this source bypass certificate pinning. If {@code "true"} then certificate chains which +chain through one of the CAs from this source then pinning will not be performed. This can be useful +for debug CAs or to support letting the user MiTM your app's secure traffic. +<p> +Default is {@code "false"} unless specified in a {@code debug-overrides} element, in which case the default is {@code "true"}. +</p> +</dd> +</dl> +</dd> + +<h3 id="pin-set"><pin-set></h3> +<dl class="xml"> +<dt>syntax:</dt> +<dd> +<pre class="stx"><pin-set expiration="date"> +... +</pin-set> +</pre></dd> +<dt>Can Contain:</dt> +<dd>Any number of <code><a href="#pin"><pin></a></code></dd> +<dt>Description:</dt> +<dd>A set of public key pins. For a secure connection to be trusted, one of the public keys in the chain of trust must +be in the set of pins. See <code><a href="#pin"><pin></a></code> for the format of pins.</dd> +<dt>Attributes:</dt> +<dd><dl class="attr"> +<dt>{@code expiration}</dt> +<dd>The date, in {@code yyyy-MM-dd} format, at and after which the pins expire, thus disabling pinning. +If the attribute is not set then the pins do not expire. +<p>Expiration helps prevent connectivity issues in applications which do not get updates to their +pin set, for example because the user disabled application updates.</p> +</dd> +</dl> +</dd> + +<h3 id="pin"><pin></h3> +<dl class="xml"> +<dt>syntax:</dt> +<dd> +<pre class="stx"><pin digest=["SHA-256"]>base64 encoded digest of X.509 SubjectPublicKeyInfo (SPKI)</pin></pre></dd> +<dt>Attributes:</dt> +<dd><dl class="attr"> +<dt>{@code digest}</dt> +<dd>The digest algorithm used to generate the pin. Currently only {@code "SHA-256"} is supported.</dd> +</dl> +</dd> +</dl> diff --git a/docs/html/preview/behavior-changes.jd b/docs/html/preview/behavior-changes.jd index cab416341685..264e7410be07 100644 --- a/docs/html/preview/behavior-changes.jd +++ b/docs/html/preview/behavior-changes.jd @@ -393,7 +393,7 @@ affect camera apps running on the primary user.</li> only affects notifications generated by applications in the managed profile.</li> </ul> </li> - <li>The {@link android.app.admin.DevicePolicyManager#createAndInitializeUser(android.content.ComponentName, java.lang.String, java.lang.String, android.content.ComponentName, android.os.Bundle) createAndInitializeUser()} and {@link android.app.admin.DevicePolicyManager#createUser(android.content.ComponentName, java.lang.String) createUser()} methods have been deprecated.</li> + <li>The {@link android.app.admin.DevicePolicyManager#createAndManageUser(android.content.ComponentName, java.lang.String, android.content.ComponentName, android.os.PersistableBundle, int) createAndManageUser()} method replaces createAndInitializeUser(), which has been removed.</li> <li>The {@link android.app.admin.DevicePolicyManager#setScreenCaptureDisabled(android.content.ComponentName, boolean) setScreenCaptureDisabled()} method now also blocks the assist structure when an app of the given user is in the foreground. </li> <li>{@link android.app.admin.DevicePolicyManager#EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM} diff --git a/graphics/java/android/graphics/Outline.java b/graphics/java/android/graphics/Outline.java index aa404082715e..99fa9fe2b3b2 100644 --- a/graphics/java/android/graphics/Outline.java +++ b/graphics/java/android/graphics/Outline.java @@ -18,6 +18,7 @@ package android.graphics; import android.annotation.FloatRange; import android.annotation.NonNull; +import android.annotation.Nullable; import android.graphics.drawable.Drawable; /** @@ -176,6 +177,34 @@ public final class Outline { } /** + * Populates {@code outBounds} with the outline bounds, if set, and returns + * {@code true}. If no outline bounds are set, or if a path has been set + * via {@link #setConvexPath(Path)}, returns {@code false}. + * + * @param outRect the rect to populate with the outline bounds, if set + * @return {@code true} if {@code outBounds} was populated with outline + * bounds, or {@code false} if no outline bounds are set + */ + public boolean getRect(@NonNull Rect outRect) { + if (mRect == null) { + return false; + } + outRect.set(mRect); + return true; + } + + /** + * Returns the rounded rect radius, if set, or {@code -1} if a path has + * been set via {@link #setConvexPath(Path)}. A return value of {@code 0} + * indicates a non-rounded rect. + * + * @return the rounded rect radius or {@code -1} + */ + public float getRadius() { + return mRadius; + } + + /** * Sets the outline to the oval defined by input rect. */ public void setOval(int left, int top, int right, int bottom) { diff --git a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java index c486c1fe17f0..3901af36be83 100644 --- a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java +++ b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java @@ -154,7 +154,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { private static final boolean DBG_ANIMATION_VECTOR_DRAWABLE = false; /** Local, mutable animator set. */ - private final VectorDrawableAnimator mAnimatorSet = new VectorDrawableAnimator(this); + private VectorDrawableAnimator mAnimatorSet = new VectorDrawableAnimatorRT(this); /** * The resources against which this drawable was created. Used to attempt @@ -164,8 +164,8 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { private AnimatedVectorDrawableState mAnimatedVectorState; - /** Whether the animator set has been prepared. */ - private boolean mHasAnimatorSet; + /** The animator set that is parsed from the xml. */ + private AnimatorSet mAnimatorSetFromXml = null; private boolean mMutated; @@ -234,9 +234,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { @Override public void draw(Canvas canvas) { - if (canvas.isHardwareAccelerated()) { - mAnimatorSet.recordLastSeenTarget((DisplayListCanvas) canvas); - } + mAnimatorSet.onDraw(canvas); mAnimatedVectorState.mVectorDrawable.draw(canvas); } @@ -392,6 +390,24 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { mRes = state.mPendingAnims == null ? null : res; } + /** + * Force to animate on UI thread. + * @hide + */ + public void forceAnimationOnUI() { + if (mAnimatorSet instanceof VectorDrawableAnimatorRT) { + VectorDrawableAnimatorRT animator = (VectorDrawableAnimatorRT) mAnimatorSet; + if (animator.isRunning()) { + throw new UnsupportedOperationException("Cannot force Animated Vector Drawable to" + + " run on UI thread when the animation has started on RenderThread."); + } + mAnimatorSet = new VectorDrawableAnimatorUI(this); + if (mAnimatorSetFromXml != null) { + mAnimatorSet.init(mAnimatorSetFromXml); + } + } + } + @Override public boolean canApplyTheme() { return (mAnimatedVectorState != null && mAnimatedVectorState.canApplyTheme()) @@ -612,6 +628,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { * Resets the AnimatedVectorDrawable to the start state as specified in the animators. */ public void reset() { + ensureAnimatorSet(); mAnimatorSet.reset(); } @@ -623,13 +640,12 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { @NonNull private void ensureAnimatorSet() { - if (!mHasAnimatorSet) { + if (mAnimatorSetFromXml == null) { // TODO: Skip the AnimatorSet creation and init the VectorDrawableAnimator directly // with a list of LocalAnimators. - AnimatorSet set = new AnimatorSet(); - mAnimatedVectorState.prepareLocalAnimators(set, mRes); - mHasAnimatorSet = true; - mAnimatorSet.initWithAnimatorSet(set); + mAnimatorSetFromXml = new AnimatorSet(); + mAnimatedVectorState.prepareLocalAnimators(mAnimatorSetFromXml, mRes); + mAnimatorSet.init(mAnimatorSetFromXml); mRes = null; } } @@ -724,7 +740,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { // A helper function to clean up the animator listener in the mAnimatorSet. private void removeAnimatorSetListener() { if (mAnimatorListener != null) { - mAnimatorSet.removeListener(); + mAnimatorSet.removeListener(mAnimatorListener); mAnimatorListener = null; } } @@ -754,10 +770,100 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { mAnimationCallbacks.clear(); } + private interface VectorDrawableAnimator { + void init(AnimatorSet set); + void start(); + void end(); + void reset(); + void reverse(); + boolean canReverse(); + void setListener(AnimatorListener listener); + void removeListener(AnimatorListener listener); + void onDraw(Canvas canvas); + boolean isStarted(); + boolean isRunning(); + } + + private static class VectorDrawableAnimatorUI implements VectorDrawableAnimator { + private AnimatorSet mSet = new AnimatorSet(); + private final Drawable mDrawable; + + VectorDrawableAnimatorUI(AnimatedVectorDrawable drawable) { + mDrawable = drawable; + } + + @Override + public void init(AnimatorSet set) { + mSet = set; + } + + @Override + public void start() { + if (mSet.isStarted()) { + return; + } + mSet.start(); + invalidateOwningView(); + } + + @Override + public void end() { + mSet.end(); + } + + @Override + public void reset() { + start(); + mSet.cancel(); + } + + @Override + public void reverse() { + mSet.reverse(); + invalidateOwningView(); + } + + @Override + public boolean canReverse() { + return mSet.canReverse(); + } + + @Override + public void setListener(AnimatorListener listener) { + mSet.addListener(listener); + } + + @Override + public void removeListener(AnimatorListener listener) { + mSet.removeListener(listener); + } + + @Override + public void onDraw(Canvas canvas) { + if (mSet.isStarted()) { + invalidateOwningView(); + } + } + + @Override + public boolean isStarted() { + return mSet.isStarted(); + } + + @Override + public boolean isRunning() { + return mSet.isRunning(); + } + + private void invalidateOwningView() { + mDrawable.invalidateSelf(); + } + } + /** * @hide */ - public static class VectorDrawableAnimator { + public static class VectorDrawableAnimatorRT implements VectorDrawableAnimator { private static final int NONE = 0; private static final int START_ANIMATION = 1; private static final int REVERSE_ANIMATION = 2; @@ -779,7 +885,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { private int mPendingAnimationAction = NONE; private final Drawable mDrawable; - VectorDrawableAnimator(AnimatedVectorDrawable drawable) { + VectorDrawableAnimatorRT(AnimatedVectorDrawable drawable) { mDrawable = drawable; mSetPtr = nCreateAnimatorSet(); // Increment ref count on native AnimatorSet, so it doesn't get released before Java @@ -787,7 +893,8 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { mSetRefBasePtr = new VirtualRefBasePtr(mSetPtr); } - private void initWithAnimatorSet(AnimatorSet set) { + @Override + public void init(AnimatorSet set) { if (mInitialized) { // Already initialized throw new UnsupportedOperationException("VectorDrawableAnimator cannot be " + @@ -816,7 +923,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { ArrayList<Animator> animators = set.getChildAnimations(); boolean playTogether = set.shouldPlayTogether(); - // Convert AnimatorSet to VectorDrawableAnimator + // Convert AnimatorSet to VectorDrawableAnimatorRT for (int i = 0; i < animators.size(); i++) { Animator animator = animators.get(i); // Here we only support ObjectAnimator @@ -1060,6 +1167,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { mDrawable.invalidateSelf(); } + @Override public void start() { if (!mInitialized) { return; @@ -1083,6 +1191,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { } } + @Override public void end() { if (mInitialized && useLastSeenTarget()) { // If no target has ever been set, no-op @@ -1091,6 +1200,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { } } + @Override public void reset() { if (mInitialized && useLastSeenTarget()) { // If no target has ever been set, no-op @@ -1101,7 +1211,8 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { // Current (imperfect) Java AnimatorSet cannot be reversed when the set contains sequential // animators or when the animator set has a start delay - void reverse() { + @Override + public void reverse() { if (!mIsReversible || !mInitialized) { return; } @@ -1125,29 +1236,41 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { return mSetPtr; } - boolean canReverse() { + @Override + public boolean canReverse() { return mIsReversible; } - boolean isStarted() { + @Override + public boolean isStarted() { return mStarted; } - boolean isRunning() { + @Override + public boolean isRunning() { if (!mInitialized) { return false; } return mStarted; } - void setListener(AnimatorListener listener) { + @Override + public void setListener(AnimatorListener listener) { mListener = listener; } - void removeListener() { + @Override + public void removeListener(AnimatorListener listener) { mListener = null; } + @Override + public void onDraw(Canvas canvas) { + if (canvas.isHardwareAccelerated()) { + recordLastSeenTarget((DisplayListCanvas) canvas); + } + } + private void onAnimationEnd(int listenerId) { if (listenerId != mLastListenerId) { return; @@ -1162,7 +1285,7 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { } // onFinished: should be called from native - private static void callOnFinished(VectorDrawableAnimator set, int id) { + private static void callOnFinished(VectorDrawableAnimatorRT set, int id) { set.onAnimationEnd(id); } } @@ -1183,8 +1306,8 @@ public class AnimatedVectorDrawable extends Drawable implements Animatable2 { private static native long nCreateRootAlphaPropertyHolder(long nativePtr, float startValue, float endValue); private static native void nSetPropertyHolderData(long nativePtr, float[] data, int length); - private static native void nStart(long animatorSetPtr, VectorDrawableAnimator set, int id); - private static native void nReverse(long animatorSetPtr, VectorDrawableAnimator set, int id); + private static native void nStart(long animatorSetPtr, VectorDrawableAnimatorRT set, int id); + private static native void nReverse(long animatorSetPtr, VectorDrawableAnimatorRT set, int id); private static native void nEnd(long animatorSetPtr); private static native void nReset(long animatorSetPtr); } diff --git a/graphics/java/android/graphics/drawable/NinePatchDrawable.java b/graphics/java/android/graphics/drawable/NinePatchDrawable.java index bfbdfa5f5255..681653967aa1 100644 --- a/graphics/java/android/graphics/drawable/NinePatchDrawable.java +++ b/graphics/java/android/graphics/drawable/NinePatchDrawable.java @@ -66,11 +66,16 @@ import java.util.Collection; public class NinePatchDrawable extends Drawable { // dithering helps a lot, and is pretty cheap, so default is true private static final boolean DEFAULT_DITHER = false; + + /** Temporary rect used for density scaling. */ + private Rect mTempRect; + private NinePatchState mNinePatchState; - private NinePatch mNinePatch; private PorterDuffColorFilter mTintFilter; private Rect mPadding; private Insets mOpticalInsets = Insets.NONE; + private Rect mOutlineInsets; + private float mOutlineRadius; private Paint mPaint; private boolean mMutated; @@ -86,8 +91,9 @@ public class NinePatchDrawable extends Drawable { /** * Create drawable from raw nine-patch data, not dealing with density. + * * @deprecated Use {@link #NinePatchDrawable(Resources, Bitmap, byte[], Rect, String)} - * to ensure that the drawable has correctly set its target density. + * to ensure that the drawable has correctly set its target density. */ @Deprecated public NinePatchDrawable(Bitmap bitmap, byte[] chunk, Rect padding, String srcName) { @@ -101,7 +107,6 @@ public class NinePatchDrawable extends Drawable { public NinePatchDrawable(Resources res, Bitmap bitmap, byte[] chunk, Rect padding, String srcName) { this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding), res); - mNinePatchState.mTargetDensity = mTargetDensity; } /** @@ -114,16 +119,17 @@ public class NinePatchDrawable extends Drawable { Rect padding, Rect opticalInsets, String srcName) { this(new NinePatchState(new NinePatch(bitmap, chunk, srcName), padding, opticalInsets), res); - mNinePatchState.mTargetDensity = mTargetDensity; } /** * Create drawable from existing nine-patch, not dealing with density. + * * @deprecated Use {@link #NinePatchDrawable(Resources, NinePatch)} - * to ensure that the drawable has correctly set its target density. + * to ensure that the drawable has correctly set its target + * density. */ @Deprecated - public NinePatchDrawable(NinePatch patch) { + public NinePatchDrawable(@NonNull NinePatch patch) { this(new NinePatchState(patch, new Rect()), null); } @@ -131,9 +137,8 @@ public class NinePatchDrawable extends Drawable { * Create drawable from existing nine-patch, setting initial target density * based on the display metrics of the resources. */ - public NinePatchDrawable(Resources res, NinePatch patch) { + public NinePatchDrawable(@Nullable Resources res, @NonNull NinePatch patch) { this(new NinePatchState(patch, new Rect()), res); - mNinePatchState.mTargetDensity = mTargetDensity; } /** @@ -146,7 +151,7 @@ public class NinePatchDrawable extends Drawable { * @see android.graphics.Bitmap#setDensity(int) * @see android.graphics.Bitmap#getDensity() */ - public void setTargetDensity(Canvas canvas) { + public void setTargetDensity(@NonNull Canvas canvas) { setTargetDensity(canvas.getDensity()); } @@ -158,7 +163,7 @@ public class NinePatchDrawable extends Drawable { * @see android.graphics.Bitmap#setDensity(int) * @see android.graphics.Bitmap#getDensity() */ - public void setTargetDensity(DisplayMetrics metrics) { + public void setTargetDensity(@NonNull DisplayMetrics metrics) { setTargetDensity(metrics.densityDpi); } @@ -171,78 +176,24 @@ public class NinePatchDrawable extends Drawable { * @see android.graphics.Bitmap#getDensity() */ public void setTargetDensity(int density) { - if (density != mTargetDensity) { - mTargetDensity = density == 0 ? DisplayMetrics.DENSITY_DEFAULT : density; - if (mNinePatch != null) { - computeBitmapSize(); - } - invalidateSelf(); + if (density == 0) { + density = DisplayMetrics.DENSITY_DEFAULT; } - } - - private static Insets scaleFromDensity(Insets insets, int sdensity, int tdensity) { - int left = Drawable.scaleFromDensity(insets.left, sdensity, tdensity, true); - int top = Drawable.scaleFromDensity(insets.top, sdensity, tdensity, true); - int right = Drawable.scaleFromDensity(insets.right, sdensity, tdensity, true); - int bottom = Drawable.scaleFromDensity(insets.bottom, sdensity, tdensity, true); - return Insets.of(left, top, right, bottom); - } - private void computeBitmapSize() { - final int sdensity = mNinePatch.getDensity(); - final int tdensity = mTargetDensity; - if (sdensity == tdensity) { - mBitmapWidth = mNinePatch.getWidth(); - mBitmapHeight = mNinePatch.getHeight(); - mOpticalInsets = mNinePatchState.mOpticalInsets; - } else { - mBitmapWidth = Drawable.scaleFromDensity( - mNinePatch.getWidth(), sdensity, tdensity, true); - mBitmapHeight = Drawable.scaleFromDensity( - mNinePatch.getHeight(), sdensity, tdensity, true); - if (mNinePatchState.mPadding != null && mPadding != null) { - Rect dest = mPadding; - Rect src = mNinePatchState.mPadding; - if (dest == src) { - mPadding = dest = new Rect(src); - } - dest.left = Drawable.scaleFromDensity(src.left, sdensity, tdensity, true); - dest.top = Drawable.scaleFromDensity(src.top, sdensity, tdensity, true); - dest.right = Drawable.scaleFromDensity(src.right, sdensity, tdensity, true); - dest.bottom = Drawable.scaleFromDensity(src.bottom, sdensity, tdensity, true); - } - mOpticalInsets = scaleFromDensity(mNinePatchState.mOpticalInsets, sdensity, tdensity); - } - } + if (mTargetDensity != density) { + mTargetDensity = density; - /** - * Sets the nine patch used by this drawable. - * - * @param ninePatch the nine patch for this drawable - */ - public void setNinePatch(NinePatch ninePatch) { - if (mNinePatch != ninePatch) { - mNinePatch = ninePatch; - if (ninePatch != null) { - computeBitmapSize(); - } else { - mBitmapWidth = mBitmapHeight = -1; - mOpticalInsets = Insets.NONE; - } + computeBitmapSize(); invalidateSelf(); } } - /** - * @return the nine patch used by this drawable - */ - public NinePatch getNinePatch() { - return mNinePatch; - } - @Override public void draw(Canvas canvas) { - final Rect bounds = getBounds(); + final NinePatchState state = mNinePatchState; + + Rect bounds = getBounds(); + int restoreToCount = -1; final boolean clearColorFilter; if (mTintFilter != null && getPaint().getColorFilter() == null) { @@ -252,22 +203,52 @@ public class NinePatchDrawable extends Drawable { clearColorFilter = false; } - final boolean needsMirroring = needsMirroring(); - if (needsMirroring) { - // Mirror the 9patch - canvas.translate(bounds.right - bounds.left, 0); - canvas.scale(-1.0f, 1.0f); - } - final int restoreAlpha; - if (mNinePatchState.mBaseAlpha != 1.0f) { - restoreAlpha = mPaint.getAlpha(); - mPaint.setAlpha((int) (restoreAlpha * mNinePatchState.mBaseAlpha + 0.5f)); + if (state.mBaseAlpha != 1.0f) { + restoreAlpha = getPaint().getAlpha(); + mPaint.setAlpha((int) (restoreAlpha * state.mBaseAlpha + 0.5f)); } else { restoreAlpha = -1; } - mNinePatch.draw(canvas, bounds, mPaint); + final boolean needsDensityScaling = canvas.getDensity() == 0; + if (needsDensityScaling) { + restoreToCount = restoreToCount >= 0 ? restoreToCount : canvas.save(); + + // Apply density scaling. + final float scale = mTargetDensity / (float) state.mNinePatch.getDensity(); + final float px = bounds.left; + final float py = bounds.top; + canvas.scale(scale, scale, px, py); + + if (mTempRect == null) { + mTempRect = new Rect(); + } + + // Scale the bounds to match. + final Rect scaledBounds = mTempRect; + scaledBounds.left = bounds.left; + scaledBounds.top = bounds.top; + scaledBounds.right = bounds.left + Math.round(bounds.width() / scale); + scaledBounds.bottom = bounds.top + Math.round(bounds.height() / scale); + bounds = scaledBounds; + } + + final boolean needsMirroring = needsMirroring(); + if (needsMirroring) { + restoreToCount = restoreToCount >= 0 ? restoreToCount : canvas.save(); + + // Mirror the 9patch. + final float cx = (bounds.left + bounds.right) / 2.0f; + final float cy = (bounds.top + bounds.bottom) / 2.0f; + canvas.scale(-1.0f, 1.0f, cx, cy); + } + + state.mNinePatch.draw(canvas, bounds, mPaint); + + if (restoreToCount >= 0) { + canvas.restoreToCount(restoreToCount); + } if (clearColorFilter) { mPaint.setColorFilter(null); @@ -284,38 +265,36 @@ public class NinePatchDrawable extends Drawable { } @Override - public boolean getPadding(Rect padding) { - final Rect scaledPadding = mPadding; - if (scaledPadding != null) { - if (needsMirroring()) { - padding.set(scaledPadding.right, scaledPadding.top, - scaledPadding.left, scaledPadding.bottom); - } else { - padding.set(scaledPadding); - } + public boolean getPadding(@NonNull Rect padding) { + if (mPadding != null) { + padding.set(mPadding); return (padding.left | padding.top | padding.right | padding.bottom) != 0; + } else { + return super.getPadding(padding); } - return false; } @Override public void getOutline(@NonNull Outline outline) { final Rect bounds = getBounds(); - if (bounds.isEmpty()) return; + if (bounds.isEmpty()) { + return; + } - if (mNinePatchState != null) { - NinePatch.InsetStruct insets = mNinePatchState.mNinePatch.getBitmap().getNinePatchInsets(); + if (mNinePatchState != null && mOutlineInsets != null) { + final NinePatch.InsetStruct insets = + mNinePatchState.mNinePatch.getBitmap().getNinePatchInsets(); if (insets != null) { - final Rect outlineInsets = insets.outlineRect; - outline.setRoundRect(bounds.left + outlineInsets.left, - bounds.top + outlineInsets.top, - bounds.right - outlineInsets.right, - bounds.bottom - outlineInsets.bottom, - insets.outlineRadius); + outline.setRoundRect(bounds.left + mOutlineInsets.left, + bounds.top + mOutlineInsets.top, + bounds.right - mOutlineInsets.right, + bounds.bottom - mOutlineInsets.bottom, + mOutlineRadius); outline.setAlpha(insets.outlineAlpha * (getAlpha() / 255.0f)); return; } } + super.getOutline(outline); } @@ -324,11 +303,12 @@ public class NinePatchDrawable extends Drawable { */ @Override public Insets getOpticalInsets() { + final Insets opticalInsets = mOpticalInsets; if (needsMirroring()) { - return Insets.of(mOpticalInsets.right, mOpticalInsets.top, - mOpticalInsets.left, mOpticalInsets.bottom); + return Insets.of(opticalInsets.right, opticalInsets.top, + opticalInsets.left, opticalInsets.bottom); } else { - return mOpticalInsets; + return opticalInsets; } } @@ -352,7 +332,7 @@ public class NinePatchDrawable extends Drawable { } @Override - public void setColorFilter(ColorFilter colorFilter) { + public void setColorFilter(@Nullable ColorFilter colorFilter) { if (mPaint == null && colorFilter == null) { // Fast common case -- leave at no color filter. return; @@ -362,14 +342,14 @@ public class NinePatchDrawable extends Drawable { } @Override - public void setTintList(ColorStateList tint) { + public void setTintList(@Nullable ColorStateList tint) { mNinePatchState.mTint = tint; mTintFilter = updateTintFilter(mTintFilter, tint, mNinePatchState.mTintMode); invalidateSelf(); } @Override - public void setTintMode(PorterDuff.Mode tintMode) { + public void setTintMode(@Nullable PorterDuff.Mode tintMode) { mNinePatchState.mTintMode = tintMode; mTintFilter = updateTintFilter(mTintFilter, mNinePatchState.mTint, tintMode); invalidateSelf(); @@ -409,10 +389,7 @@ public class NinePatchDrawable extends Drawable { @Override public boolean isFilterBitmap() { - if (mPaint == null) { - return false; - } - return getPaint().isFilterBitmap(); + return mPaint != null && getPaint().isFilterBitmap(); } @Override @@ -430,7 +407,7 @@ public class NinePatchDrawable extends Drawable { /** * Updates the constant state from the values in the typed array. */ - private void updateStateFromTypedArray(TypedArray a) throws XmlPullParserException { + private void updateStateFromTypedArray(@NonNull TypedArray a) throws XmlPullParserException { final Resources r = a.getResources(); final NinePatchState state = mNinePatchState; @@ -491,12 +468,10 @@ public class NinePatchDrawable extends Drawable { if (tint != null) { state.mTint = tint; } - - state.mTargetDensity = Drawable.resolveDensity(r, state.mTargetDensity); } @Override - public void applyTheme(Theme t) { + public void applyTheme(@NonNull Theme t) { super.applyTheme(t); final NinePatchState state = mNinePatchState; @@ -528,6 +503,7 @@ public class NinePatchDrawable extends Drawable { return mNinePatchState != null && mNinePatchState.canApplyTheme(); } + @NonNull public Paint getPaint() { if (mPaint == null) { mPaint = new Paint(); @@ -536,45 +512,26 @@ public class NinePatchDrawable extends Drawable { return mPaint; } - /** - * Retrieves the width of the source .png file (before resizing). - */ @Override public int getIntrinsicWidth() { return mBitmapWidth; } - /** - * Retrieves the height of the source .png file (before resizing). - */ @Override public int getIntrinsicHeight() { return mBitmapHeight; } @Override - public int getMinimumWidth() { - return mBitmapWidth; - } - - @Override - public int getMinimumHeight() { - return mBitmapHeight; - } - - /** - * Returns a {@link android.graphics.PixelFormat graphics.PixelFormat} - * value of OPAQUE or TRANSLUCENT. - */ - @Override public int getOpacity() { - return mNinePatch.hasAlpha() || (mPaint != null && mPaint.getAlpha() < 255) ? - PixelFormat.TRANSLUCENT : PixelFormat.OPAQUE; + return mNinePatchState.mNinePatch.hasAlpha() + || (mPaint != null && mPaint.getAlpha() < 255) ? + PixelFormat.TRANSLUCENT : PixelFormat.OPAQUE; } @Override public Region getTransparentRegion() { - return mNinePatch.getTransparentRegion(getBounds()); + return mNinePatchState.mNinePatch.getTransparentRegion(getBounds()); } @Override @@ -587,7 +544,6 @@ public class NinePatchDrawable extends Drawable { public Drawable mutate() { if (!mMutated && super.mutate() == this) { mNinePatchState = new NinePatchState(mNinePatchState); - mNinePatch = mNinePatchState.mNinePatch; mMutated = true; } return this; @@ -619,8 +575,9 @@ public class NinePatchDrawable extends Drawable { } final static class NinePatchState extends ConstantState { + int mChangingConfigurations; + // Values loaded during inflation. - int[] mThemeAttrs = null; NinePatch mNinePatch = null; ColorStateList mTint = null; Mode mTintMode = DEFAULT_TINT_MODE; @@ -628,10 +585,9 @@ public class NinePatchDrawable extends Drawable { Insets mOpticalInsets = Insets.NONE; float mBaseAlpha = 1.0f; boolean mDither = DEFAULT_DITHER; - int mTargetDensity = DisplayMetrics.DENSITY_DEFAULT; boolean mAutoMirrored = false; - int mChangingConfigurations; + int[] mThemeAttrs; NinePatchState() { // Empty constructor. @@ -655,27 +611,24 @@ public class NinePatchDrawable extends Drawable { mAutoMirrored = autoMirror; } - // Copy constructor - - NinePatchState(@NonNull NinePatchState state) { - // We don't deep-copy any fields because they are all immutable. - mNinePatch = state.mNinePatch; - mTint = state.mTint; - mTintMode = state.mTintMode; - mThemeAttrs = state.mThemeAttrs; - mPadding = state.mPadding; - mOpticalInsets = state.mOpticalInsets; - mBaseAlpha = state.mBaseAlpha; - mDither = state.mDither; - mChangingConfigurations = state.mChangingConfigurations; - mTargetDensity = state.mTargetDensity; - mAutoMirrored = state.mAutoMirrored; + NinePatchState(@NonNull NinePatchState orig) { + mChangingConfigurations = orig.mChangingConfigurations; + mNinePatch = orig.mNinePatch; + mTint = orig.mTint; + mTintMode = orig.mTintMode; + mPadding = orig.mPadding; + mOpticalInsets = orig.mOpticalInsets; + mBaseAlpha = orig.mBaseAlpha; + mDither = orig.mDither; + mAutoMirrored = orig.mAutoMirrored; + mThemeAttrs = orig.mThemeAttrs; } @Override public boolean canApplyTheme() { return mThemeAttrs != null - || (mTint != null && mTint.canApplyTheme()); + || (mTint != null && mTint.canApplyTheme()) + || super.canApplyTheme(); } @Override @@ -704,44 +657,98 @@ public class NinePatchDrawable extends Drawable { } } + private void computeBitmapSize() { + final NinePatch ninePatch = mNinePatchState.mNinePatch; + if (ninePatch == null) { + return; + } + + final int sourceDensity = ninePatch.getDensity(); + final int targetDensity = mTargetDensity; + + final Insets sourceOpticalInsets = mNinePatchState.mOpticalInsets; + if (sourceOpticalInsets != Insets.NONE) { + final int left = Drawable.scaleFromDensity( + sourceOpticalInsets.left, sourceDensity, targetDensity, true); + final int top = Drawable.scaleFromDensity( + sourceOpticalInsets.top, sourceDensity, targetDensity, true); + final int right = Drawable.scaleFromDensity( + sourceOpticalInsets.right, sourceDensity, targetDensity, true); + final int bottom = Drawable.scaleFromDensity( + sourceOpticalInsets.bottom, sourceDensity, targetDensity, true); + mOpticalInsets = Insets.of(left, top, right, bottom); + } else { + mOpticalInsets = Insets.NONE; + } + + final Rect sourcePadding = mNinePatchState.mPadding; + if (sourcePadding != null) { + if (mPadding == null) { + mPadding = new Rect(); + } + mPadding.left = Drawable.scaleFromDensity( + sourcePadding.left, sourceDensity, targetDensity, false); + mPadding.top = Drawable.scaleFromDensity( + sourcePadding.top, sourceDensity, targetDensity, false); + mPadding.right = Drawable.scaleFromDensity( + sourcePadding.right, sourceDensity, targetDensity, false); + mPadding.bottom = Drawable.scaleFromDensity( + sourcePadding.bottom, sourceDensity, targetDensity, false); + } else { + mPadding = null; + } + + mBitmapHeight = Drawable.scaleFromDensity( + ninePatch.getHeight(), sourceDensity, targetDensity, true); + mBitmapWidth = Drawable.scaleFromDensity( + ninePatch.getWidth(), sourceDensity, targetDensity, true); + + final NinePatch.InsetStruct insets = ninePatch.getBitmap().getNinePatchInsets(); + if (insets != null) { + if (mOutlineInsets == null) { + mOutlineInsets = new Rect(); + } + final Rect outlineInsets = insets.outlineRect; + mOutlineInsets.left = Drawable.scaleFromDensity( + outlineInsets.left, sourceDensity, targetDensity, false); + mOutlineInsets.top = Drawable.scaleFromDensity( + outlineInsets.top, sourceDensity, targetDensity, false); + mOutlineInsets.right = Drawable.scaleFromDensity( + outlineInsets.right, sourceDensity, targetDensity, false); + mOutlineInsets.bottom = Drawable.scaleFromDensity( + outlineInsets.bottom, sourceDensity, targetDensity, false); + mOutlineRadius = Drawable.scaleFromDensity( + insets.outlineRadius, sourceDensity, targetDensity); + } else { + mOutlineInsets = null; + } + } + /** * The one constructor to rule them all. This is called by all public * constructors to set the state and initialize local properties. + * + * @param state constant state to assign to the new drawable */ - private NinePatchDrawable(NinePatchState state, Resources res) { + private NinePatchDrawable(@NonNull NinePatchState state, @Nullable Resources res) { mNinePatchState = state; updateLocalState(res); - - // Push density applied by setNinePatchState into state. - mNinePatchState.mTargetDensity = mTargetDensity; } /** * Initializes local dynamic properties from state. */ - private void updateLocalState(Resources res) { + private void updateLocalState(@Nullable Resources res) { final NinePatchState state = mNinePatchState; - if (res != null) { - final int densityDpi = res.getDisplayMetrics().densityDpi; - mTargetDensity = densityDpi == 0 ? DisplayMetrics.DENSITY_DEFAULT : densityDpi; - } else { - mTargetDensity = state.mTargetDensity; - } - - // If we can, avoid calling any methods that initialize Paint. if (state.mDither != DEFAULT_DITHER) { setDither(state.mDither); } - // Make a local copy of the padding. - if (state.mPadding != null) { - mPadding = new Rect(state.mPadding); - } - + mTargetDensity = Drawable.resolveDensity(res, mTargetDensity); mTintFilter = updateTintFilter(mTintFilter, state.mTint, state.mTintMode); - setNinePatch(state.mNinePatch); + computeBitmapSize(); } } diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreKeyGeneratorSpi.java b/keystore/java/android/security/keystore/AndroidKeyStoreKeyGeneratorSpi.java index 1321a833acad..b234d0f81a89 100644 --- a/keystore/java/android/security/keystore/AndroidKeyStoreKeyGeneratorSpi.java +++ b/keystore/java/android/security/keystore/AndroidKeyStoreKeyGeneratorSpi.java @@ -234,7 +234,8 @@ public abstract class AndroidKeyStoreKeyGeneratorSpi extends KeyGeneratorSpi { KeymasterUtils.addUserAuthArgs(new KeymasterArguments(), spec.isUserAuthenticationRequired(), spec.getUserAuthenticationValidityDurationSeconds(), - spec.isUserAuthenticationValidWhileOnBody()); + spec.isUserAuthenticationValidWhileOnBody(), + spec.isInvalidatedByBiometricEnrollment()); } catch (IllegalStateException | IllegalArgumentException e) { throw new InvalidAlgorithmParameterException(e); } @@ -273,7 +274,8 @@ public abstract class AndroidKeyStoreKeyGeneratorSpi extends KeyGeneratorSpi { KeymasterUtils.addUserAuthArgs(args, spec.isUserAuthenticationRequired(), spec.getUserAuthenticationValidityDurationSeconds(), - spec.isUserAuthenticationValidWhileOnBody()); + spec.isUserAuthenticationValidWhileOnBody(), + spec.isInvalidatedByBiometricEnrollment()); KeymasterUtils.addMinMacLengthAuthorizationIfNecessary( args, mKeymasterAlgorithm, diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi.java b/keystore/java/android/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi.java index 830402a6a383..1818f52c4fda 100644 --- a/keystore/java/android/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi.java +++ b/keystore/java/android/security/keystore/AndroidKeyStoreKeyPairGeneratorSpi.java @@ -345,7 +345,8 @@ public abstract class AndroidKeyStoreKeyPairGeneratorSpi extends KeyPairGenerato KeymasterUtils.addUserAuthArgs(new KeymasterArguments(), mSpec.isUserAuthenticationRequired(), mSpec.getUserAuthenticationValidityDurationSeconds(), - mSpec.isUserAuthenticationValidWhileOnBody()); + mSpec.isUserAuthenticationValidWhileOnBody(), + mSpec.isInvalidatedByBiometricEnrollment()); } catch (IllegalArgumentException | IllegalStateException e) { throw new InvalidAlgorithmParameterException(e); } @@ -531,7 +532,8 @@ public abstract class AndroidKeyStoreKeyPairGeneratorSpi extends KeyPairGenerato KeymasterUtils.addUserAuthArgs(args, mSpec.isUserAuthenticationRequired(), mSpec.getUserAuthenticationValidityDurationSeconds(), - mSpec.isUserAuthenticationValidWhileOnBody()); + mSpec.isUserAuthenticationValidWhileOnBody(), + mSpec.isInvalidatedByBiometricEnrollment()); args.addDateIfNotNull(KeymasterDefs.KM_TAG_ACTIVE_DATETIME, mSpec.getKeyValidityStart()); args.addDateIfNotNull(KeymasterDefs.KM_TAG_ORIGINATION_EXPIRE_DATETIME, mSpec.getKeyValidityForOriginationEnd()); diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreSecretKeyFactorySpi.java b/keystore/java/android/security/keystore/AndroidKeyStoreSecretKeyFactorySpi.java index 5f5f2c244116..0379863e8ca1 100644 --- a/keystore/java/android/security/keystore/AndroidKeyStoreSecretKeyFactorySpi.java +++ b/keystore/java/android/security/keystore/AndroidKeyStoreSecretKeyFactorySpi.java @@ -17,10 +17,12 @@ package android.security.keystore; import android.security.Credentials; +import android.security.GateKeeper; import android.security.KeyStore; import android.security.keymaster.KeyCharacteristics; import android.security.keymaster.KeymasterDefs; +import java.math.BigInteger; import java.security.InvalidKeyException; import java.security.ProviderException; import java.security.spec.InvalidKeySpecException; @@ -91,6 +93,7 @@ public class AndroidKeyStoreSecretKeyFactorySpi extends SecretKeyFactorySpi { @KeyProperties.BlockModeEnum String[] blockModes; int keymasterSwEnforcedUserAuthenticators; int keymasterHwEnforcedUserAuthenticators; + List<BigInteger> keymasterSecureUserIds; try { if (keyCharacteristics.hwEnforced.containsTag(KeymasterDefs.KM_TAG_ORIGIN)) { insideSecureHardware = true; @@ -147,6 +150,8 @@ public class AndroidKeyStoreSecretKeyFactorySpi extends SecretKeyFactorySpi { keyCharacteristics.swEnforced.getEnum(KeymasterDefs.KM_TAG_USER_AUTH_TYPE, 0); keymasterHwEnforcedUserAuthenticators = keyCharacteristics.hwEnforced.getEnum(KeymasterDefs.KM_TAG_USER_AUTH_TYPE, 0); + keymasterSecureUserIds = + keyCharacteristics.getUnsignedLongs(KeymasterDefs.KM_TAG_USER_SECURE_ID); } catch (IllegalArgumentException e) { throw new ProviderException("Unsupported key characteristic", e); } @@ -170,6 +175,15 @@ public class AndroidKeyStoreSecretKeyFactorySpi extends SecretKeyFactorySpi { boolean userAuthenticationValidWhileOnBody = keyCharacteristics.hwEnforced.getBoolean(KeymasterDefs.KM_TAG_ALLOW_WHILE_ON_BODY); + boolean invalidatedByBiometricEnrollment = false; + if (keymasterSwEnforcedUserAuthenticators == KeymasterDefs.HW_AUTH_FINGERPRINT + || keymasterHwEnforcedUserAuthenticators == KeymasterDefs.HW_AUTH_FINGERPRINT) { + // Fingerprint-only key; will be invalidated if the root SID isn't in the SID list. + invalidatedByBiometricEnrollment = keymasterSecureUserIds != null + && !keymasterSecureUserIds.isEmpty() + && !keymasterSecureUserIds.contains(getGateKeeperSecureUserId()); + } + return new KeyInfo(entryAlias, insideSecureHardware, origin, @@ -185,7 +199,16 @@ public class AndroidKeyStoreSecretKeyFactorySpi extends SecretKeyFactorySpi { userAuthenticationRequired, (int) userAuthenticationValidityDurationSeconds, userAuthenticationRequirementEnforcedBySecureHardware, - userAuthenticationValidWhileOnBody); + userAuthenticationValidWhileOnBody, + invalidatedByBiometricEnrollment); + } + + private static BigInteger getGateKeeperSecureUserId() throws ProviderException { + try { + return BigInteger.valueOf(GateKeeper.getSecureUserId()); + } catch (IllegalStateException e) { + throw new ProviderException("Failed to get GateKeeper secure user ID", e); + } } @Override diff --git a/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java b/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java index d6600208ecee..d7d4f1c50e32 100644 --- a/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java +++ b/keystore/java/android/security/keystore/AndroidKeyStoreSpi.java @@ -499,7 +499,8 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi { KeymasterUtils.addUserAuthArgs(importArgs, spec.isUserAuthenticationRequired(), spec.getUserAuthenticationValidityDurationSeconds(), - spec.isUserAuthenticationValidWhileOnBody()); + spec.isUserAuthenticationValidWhileOnBody(), + spec.isInvalidatedByBiometricEnrollment()); importArgs.addDateIfNotNull(KeymasterDefs.KM_TAG_ACTIVE_DATETIME, spec.getKeyValidityStart()); importArgs.addDateIfNotNull(KeymasterDefs.KM_TAG_ORIGINATION_EXPIRE_DATETIME, @@ -694,7 +695,8 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi { KeymasterUtils.addUserAuthArgs(args, params.isUserAuthenticationRequired(), params.getUserAuthenticationValidityDurationSeconds(), - params.isUserAuthenticationValidWhileOnBody()); + params.isUserAuthenticationValidWhileOnBody(), + params.isInvalidatedByBiometricEnrollment()); KeymasterUtils.addMinMacLengthAuthorizationIfNecessary( args, keymasterAlgorithm, diff --git a/keystore/java/android/security/keystore/KeyGenParameterSpec.java b/keystore/java/android/security/keystore/KeyGenParameterSpec.java index a84e7f34be8d..127d756a2cff 100644 --- a/keystore/java/android/security/keystore/KeyGenParameterSpec.java +++ b/keystore/java/android/security/keystore/KeyGenParameterSpec.java @@ -253,6 +253,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec { private final byte[] mAttestationChallenge; private final boolean mUniqueIdIncluded; private final boolean mUserAuthenticationValidWhileOnBody; + private final boolean mInvalidatedByBiometricEnrollment; /** * @hide should be built with Builder @@ -279,7 +280,8 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec { int userAuthenticationValidityDurationSeconds, byte[] attestationChallenge, boolean uniqueIdIncluded, - boolean userAuthenticationValidWhileOnBody) { + boolean userAuthenticationValidWhileOnBody, + boolean invalidatedByBiometricEnrollment) { if (TextUtils.isEmpty(keyStoreAlias)) { throw new IllegalArgumentException("keyStoreAlias must not be empty"); } @@ -324,6 +326,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec { mAttestationChallenge = Utils.cloneIfNotNull(attestationChallenge); mUniqueIdIncluded = uniqueIdIncluded; mUserAuthenticationValidWhileOnBody = userAuthenticationValidWhileOnBody; + mInvalidatedByBiometricEnrollment = invalidatedByBiometricEnrollment; } /** @@ -607,6 +610,19 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec { } /** + * Returns {@code true} if the key is irreversibly invalidated when a new fingerprint is + * enrolled or all enrolled fingerprints are removed. This has effect only for keys that + * require fingerprint user authentication for every use. + * + * @see #isUserAuthenticationRequired() + * @see #getUserAuthenticationValidityDurationSeconds() + * @see Builder#setInvalidatedByBiometricEnrollment(boolean) + */ + public boolean isInvalidatedByBiometricEnrollment() { + return mInvalidatedByBiometricEnrollment; + } + + /** * Builder of {@link KeyGenParameterSpec} instances. */ public final static class Builder { @@ -633,6 +649,7 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec { private byte[] mAttestationChallenge = null; private boolean mUniqueIdIncluded = false; private boolean mUserAuthenticationValidWhileOnBody; + private boolean mInvalidatedByBiometricEnrollment = true; /** * Creates a new instance of the {@code Builder}. @@ -966,8 +983,10 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec { * or when the secure lock screen is forcibly reset (e.g., by a Device Administrator). * Additionally, if the key requires that user authentication takes place for every use of * the key, it is also irreversibly invalidated once a new fingerprint is enrolled or once\ - * no more fingerprints are enrolled. Attempts to initialize cryptographic operations using - * such keys will throw {@link KeyPermanentlyInvalidatedException}.</li> + * no more fingerprints are enrolled, unless {@link + * #setInvalidatedByBiometricEnrollment(boolean)} is used to allow validity after + * enrollment. Attempts to initialize cryptographic operations using such keys will throw + * {@link KeyPermanentlyInvalidatedException}.</li> * </ul> * * <p>This authorization applies only to secret key and private key operations. Public key @@ -1110,6 +1129,30 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec { } /** + * Sets whether this key should be invalidated on fingerprint enrollment. This + * applies only to keys which require user authentication (see {@link + * #setUserAuthenticationRequired(boolean)}) and if no positive validity duration has been + * set (see {@link #setUserAuthenticationValidityDurationSeconds(int)}, meaning the key is + * valid for fingerprint authentication only. + * + * <p>By default, {@code invalidateKey} is {@code true}, so keys that are valid for + * fingerprint authentication only are <em>irreversibly invalidated</em> when a new + * fingerprint is enrolled, or when all existing fingerprints are deleted. That may be + * changed by calling this method with {@code invalidateKey} set to {@code false}. + * + * <p>Invalidating keys on enrollment of a new finger or unenrollment of all fingers + * improves security by ensuring that an unauthorized person who obtains the password can't + * gain the use of fingerprint-authenticated keys by enrolling their own finger. However, + * invalidating keys makes key-dependent operations impossible, requiring some fallback + * procedure to authenticate the user and set up a new key. + */ + @NonNull + public Builder setInvalidatedByBiometricEnrollment(boolean invalidateKey) { + mInvalidatedByBiometricEnrollment = invalidateKey; + return this; + } + + /** * Builds an instance of {@code KeyGenParameterSpec}. */ @NonNull @@ -1136,7 +1179,8 @@ public final class KeyGenParameterSpec implements AlgorithmParameterSpec { mUserAuthenticationValidityDurationSeconds, mAttestationChallenge, mUniqueIdIncluded, - mUserAuthenticationValidWhileOnBody); + mUserAuthenticationValidWhileOnBody, + mInvalidatedByBiometricEnrollment); } } } diff --git a/keystore/java/android/security/keystore/KeyInfo.java b/keystore/java/android/security/keystore/KeyInfo.java index f77b5bac0363..fa6d8b3517f6 100644 --- a/keystore/java/android/security/keystore/KeyInfo.java +++ b/keystore/java/android/security/keystore/KeyInfo.java @@ -80,6 +80,7 @@ public class KeyInfo implements KeySpec { private final int mUserAuthenticationValidityDurationSeconds; private final boolean mUserAuthenticationRequirementEnforcedBySecureHardware; private final boolean mUserAuthenticationValidWhileOnBody; + private final boolean mInvalidatedByBiometricEnrollment; /** * @hide @@ -99,7 +100,8 @@ public class KeyInfo implements KeySpec { boolean userAuthenticationRequired, int userAuthenticationValidityDurationSeconds, boolean userAuthenticationRequirementEnforcedBySecureHardware, - boolean userAuthenticationValidWhileOnBody) { + boolean userAuthenticationValidWhileOnBody, + boolean invalidatedByBiometricEnrollment) { mKeystoreAlias = keystoreKeyAlias; mInsideSecureHardware = insideSecureHardware; mOrigin = origin; @@ -119,6 +121,7 @@ public class KeyInfo implements KeySpec { mUserAuthenticationRequirementEnforcedBySecureHardware = userAuthenticationRequirementEnforcedBySecureHardware; mUserAuthenticationValidWhileOnBody = userAuthenticationValidWhileOnBody; + mInvalidatedByBiometricEnrollment = invalidatedByBiometricEnrollment; } /** @@ -290,4 +293,12 @@ public class KeyInfo implements KeySpec { public boolean isUserAuthenticationValidWhileOnBody() { return mUserAuthenticationValidWhileOnBody; } + + /** + * Returns {@code true} if the key will be invalidated by enrollment of a new fingerprint or + * removal of all fingerprints. + */ + public boolean isInvalidatedByBiometricEnrollment() { + return mInvalidatedByBiometricEnrollment; + } } diff --git a/keystore/java/android/security/keystore/KeyProtection.java b/keystore/java/android/security/keystore/KeyProtection.java index 4700b68261db..fa57bdb52b32 100644 --- a/keystore/java/android/security/keystore/KeyProtection.java +++ b/keystore/java/android/security/keystore/KeyProtection.java @@ -215,6 +215,7 @@ public final class KeyProtection implements ProtectionParameter { private final boolean mUserAuthenticationRequired; private final int mUserAuthenticationValidityDurationSeconds; private final boolean mUserAuthenticationValidWhileOnBody; + private final boolean mInvalidatedByBiometricEnrollment; private KeyProtection( Date keyValidityStart, @@ -228,7 +229,8 @@ public final class KeyProtection implements ProtectionParameter { boolean randomizedEncryptionRequired, boolean userAuthenticationRequired, int userAuthenticationValidityDurationSeconds, - boolean userAuthenticationValidWhileOnBody) { + boolean userAuthenticationValidWhileOnBody, + boolean invalidatedByBiometricEnrollment) { mKeyValidityStart = Utils.cloneIfNotNull(keyValidityStart); mKeyValidityForOriginationEnd = Utils.cloneIfNotNull(keyValidityForOriginationEnd); mKeyValidityForConsumptionEnd = Utils.cloneIfNotNull(keyValidityForConsumptionEnd); @@ -243,6 +245,7 @@ public final class KeyProtection implements ProtectionParameter { mUserAuthenticationRequired = userAuthenticationRequired; mUserAuthenticationValidityDurationSeconds = userAuthenticationValidityDurationSeconds; mUserAuthenticationValidWhileOnBody = userAuthenticationValidWhileOnBody; + mInvalidatedByBiometricEnrollment = invalidatedByBiometricEnrollment; } /** @@ -412,6 +415,19 @@ public final class KeyProtection implements ProtectionParameter { } /** + * Returns {@code true} if the key is irreversibly invalidated when a new fingerprint is + * enrolled or all enrolled fingerprints are removed. This has effect only for keys that + * require fingerprint user authentication for every use. + * + * @see #isUserAuthenticationRequired() + * @see #getUserAuthenticationValidityDurationSeconds() + * @see Builder#setInvalidatedByBiometricEnrollment(boolean) + */ + public boolean isInvalidatedByBiometricEnrollment() { + return mInvalidatedByBiometricEnrollment; + } + + /** * Builder of {@link KeyProtection} instances. */ public final static class Builder { @@ -428,6 +444,7 @@ public final class KeyProtection implements ProtectionParameter { private boolean mUserAuthenticationRequired; private int mUserAuthenticationValidityDurationSeconds = -1; private boolean mUserAuthenticationValidWhileOnBody; + private boolean mInvalidatedByBiometricEnrollment = true; /** * Creates a new instance of the {@code Builder}. @@ -638,9 +655,10 @@ public final class KeyProtection implements ProtectionParameter { * or when the secure lock screen is forcibly reset (e.g., by a Device Administrator). * Additionally, if the key requires that user authentication takes place for every use of * the key, it is also irreversibly invalidated once a new fingerprint is enrolled or once\ - * no more fingerprints are enrolled. Attempts to initialize cryptographic operations using - * such keys will throw {@link KeyPermanentlyInvalidatedException}.</li> - * </ul> + * no more fingerprints are enrolled, unless {@link + * #setInvalidatedByBiometricEnrollment(boolean)} is used to allow validity after + * enrollment. Attempts to initialize cryptographic operations using such keys will throw + * {@link KeyPermanentlyInvalidatedException}.</li> </ul> * * <p>This authorization applies only to secret key and private key operations. Public key * operations are not restricted. @@ -729,6 +747,30 @@ public final class KeyProtection implements ProtectionParameter { } /** + * Sets whether this key should be invalidated on fingerprint enrollment. This + * applies only to keys which require user authentication (see {@link + * #setUserAuthenticationRequired(boolean)}) and if no positive validity duration has been + * set (see {@link #setUserAuthenticationValidityDurationSeconds(int)}, meaning the key is + * valid for fingerprint authentication only. + * + * <p>By default, {@code invalidateKey} is {@code true}, so keys that are valid for + * fingerprint authentication only are <em>irreversibly invalidated</em> when a new + * fingerprint is enrolled, or when all existing fingerprints are deleted. That may be + * changed by calling this method with {@code invalidateKey} set to {@code false}. + * + * <p>Invalidating keys on enrollment of a new finger or unenrollment of all fingers + * improves security by ensuring that an unauthorized person who obtains the password can't + * gain the use of fingerprint-authenticated keys by enrolling their own finger. However, + * invalidating keys makes key-dependent operations impossible, requiring some fallback + * procedure to authenticate the user and set up a new key. + */ + @NonNull + public Builder setInvalidatedByBiometricEnrollment(boolean invalidateKey) { + mInvalidatedByBiometricEnrollment = invalidateKey; + return this; + } + + /** * Builds an instance of {@link KeyProtection}. * * @throws IllegalArgumentException if a required field is missing @@ -747,7 +789,8 @@ public final class KeyProtection implements ProtectionParameter { mRandomizedEncryptionRequired, mUserAuthenticationRequired, mUserAuthenticationValidityDurationSeconds, - mUserAuthenticationValidWhileOnBody); + mUserAuthenticationValidWhileOnBody, + mInvalidatedByBiometricEnrollment); } } } diff --git a/keystore/java/android/security/keystore/KeymasterUtils.java b/keystore/java/android/security/keystore/KeymasterUtils.java index 3a008bcf6832..f5272aa233e9 100644 --- a/keystore/java/android/security/keystore/KeymasterUtils.java +++ b/keystore/java/android/security/keystore/KeymasterUtils.java @@ -97,7 +97,8 @@ public abstract class KeymasterUtils { public static void addUserAuthArgs(KeymasterArguments args, boolean userAuthenticationRequired, int userAuthenticationValidityDurationSeconds, - boolean userAuthenticationValidWhileOnBody) { + boolean userAuthenticationValidWhileOnBody, + boolean invalidatedByBiometricEnrollment) { if (!userAuthenticationRequired) { args.addBoolean(KeymasterDefs.KM_TAG_NO_AUTH_REQUIRED); return; @@ -117,8 +118,20 @@ public abstract class KeymasterUtils { "At least one fingerprint must be enrolled to create keys requiring user" + " authentication for every use"); } - args.addUnsignedLong(KeymasterDefs.KM_TAG_USER_SECURE_ID, - KeymasterArguments.toUint64(fingerprintOnlySid)); + + long sid; + if (invalidatedByBiometricEnrollment) { + // The fingerprint-only SID will change on fingerprint enrollment or removal of all, + // enrolled fingerprints, invalidating the key. + sid = fingerprintOnlySid; + } else { + // The root SID will *not* change on fingerprint enrollment, or removal of all + // enrolled fingerprints, allowing the key to remain valid. + sid = getRootSid(); + } + + args.addUnsignedLong( + KeymasterDefs.KM_TAG_USER_SECURE_ID, KeymasterArguments.toUint64(sid)); args.addEnum(KeymasterDefs.KM_TAG_USER_AUTH_TYPE, KeymasterDefs.HW_AUTH_FINGERPRINT); if (userAuthenticationValidWhileOnBody) { throw new ProviderException("Key validity extension while device is on-body is not " @@ -127,11 +140,7 @@ public abstract class KeymasterUtils { } else { // The key is authorized for use for the specified amount of time after the user has // authenticated. Whatever unlocks the secure lock screen should authorize this key. - long rootSid = GateKeeper.getSecureUserId(); - if (rootSid == 0) { - throw new IllegalStateException("Secure lock screen must be enabled" - + " to create keys requiring user authentication"); - } + long rootSid = getRootSid(); args.addUnsignedLong(KeymasterDefs.KM_TAG_USER_SECURE_ID, KeymasterArguments.toUint64(rootSid)); args.addEnum(KeymasterDefs.KM_TAG_USER_AUTH_TYPE, @@ -184,4 +193,13 @@ public abstract class KeymasterUtils { break; } } + + private static long getRootSid() { + long rootSid = GateKeeper.getSecureUserId(); + if (rootSid == 0) { + throw new IllegalStateException("Secure lock screen must be enabled" + + " to create keys requiring user authentication"); + } + return rootSid; + } } diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk index 8660b75e702e..da7b7fb55330 100644 --- a/libs/hwui/Android.mk +++ b/libs/hwui/Android.mk @@ -119,6 +119,7 @@ ifeq (true, $(HWUI_NEW_OPS)) BakedOpState.cpp \ FrameBuilder.cpp \ LayerBuilder.cpp \ + OpDumper.cpp \ RecordingCanvas.cpp hwui_cflags += -DHWUI_NEW_OPS @@ -253,6 +254,7 @@ ifeq (true, $(HWUI_NEW_OPS)) tests/unit/BakedOpStateTests.cpp \ tests/unit/FrameBuilderTests.cpp \ tests/unit/LeakCheckTests.cpp \ + tests/unit/OpDumperTests.cpp \ tests/unit/RecordingCanvasTests.cpp endif diff --git a/libs/hwui/Animator.cpp b/libs/hwui/Animator.cpp index 294edb6ecd46..bd71e0d579f8 100644 --- a/libs/hwui/Animator.cpp +++ b/libs/hwui/Animator.cpp @@ -160,6 +160,10 @@ void BaseRenderNodeAnimator::pushStaging(AnimationContext& context) { } if (!mStagingRequests.empty()) { + // No interpolator was set, use the default + if (mPlayState == PlayState::NotStarted && !mInterpolator) { + mInterpolator.reset(Interpolator::createDefaultInterpolator()); + } // Keep track of the play state and play time before they are changed when // staging requests are resolved. nsecs_t currentPlayTime = mPlayTime; @@ -222,10 +226,6 @@ void BaseRenderNodeAnimator::transitionToRunning(AnimationContext& context) { // Set to 0 so that the animate() basically instantly finishes mStartTime = 0; } - // No interpolator was set, use the default - if (!mInterpolator) { - mInterpolator.reset(Interpolator::createDefaultInterpolator()); - } if (mDuration < 0 || mDuration > 50000) { ALOGW("Your duration is strange and confusing: %" PRId64, mDuration); } diff --git a/libs/hwui/BakedOpDispatcher.cpp b/libs/hwui/BakedOpDispatcher.cpp index f83e1faf9c8a..78764b5f4448 100644 --- a/libs/hwui/BakedOpDispatcher.cpp +++ b/libs/hwui/BakedOpDispatcher.cpp @@ -334,15 +334,15 @@ static void renderConvexPath(BakedOpRenderer& renderer, const BakedOpState& stat } static void renderPathTexture(BakedOpRenderer& renderer, const BakedOpState& state, - PathTexture& texture, const RecordedOp& op) { + float xOffset, float yOffset, PathTexture& texture, const SkPaint& paint) { Rect dest(texture.width(), texture.height()); - dest.translate(texture.left - texture.offset, - texture.top - texture.offset); + dest.translate(xOffset + texture.left - texture.offset, + yOffset + texture.top - texture.offset); Glop glop; GlopBuilder(renderer.renderState(), renderer.caches(), &glop) .setRoundRectClipState(state.roundRectClipState) .setMeshTexturedUnitQuad(nullptr) - .setFillPathTexturePaint(texture, *(op.paint), state.alpha) + .setFillPathTexturePaint(texture, paint, state.alpha) .setTransform(state.computedState.transform, TransformFlags::None) .setModelViewMapUnitToRect(dest) .build(); @@ -368,7 +368,8 @@ void BakedOpDispatcher::onArcOp(BakedOpRenderer& renderer, const ArcOp& op, cons op.startAngle, op.sweepAngle, op.useCenter, op.paint); const AutoTexture holder(texture); if (CC_LIKELY(holder.texture)) { - renderPathTexture(renderer, state, *texture, op); + renderPathTexture(renderer, state, op.unmappedBounds.left, op.unmappedBounds.right, + *texture, *(op.paint)); } } else { SkRect rect = getBoundsOfFill(op); @@ -519,7 +520,8 @@ void BakedOpDispatcher::onOvalOp(BakedOpRenderer& renderer, const OvalOp& op, co op.unmappedBounds.getWidth(), op.unmappedBounds.getHeight(), op.paint); const AutoTexture holder(texture); if (CC_LIKELY(holder.texture)) { - renderPathTexture(renderer, state, *texture, op); + renderPathTexture(renderer, state, op.unmappedBounds.left, op.unmappedBounds.right, + *texture, *(op.paint)); } } else { SkPath path; @@ -562,7 +564,9 @@ void BakedOpDispatcher::onPathOp(BakedOpRenderer& renderer, const PathOp& op, co PathTexture* texture = renderer.caches().pathCache.get(op.path, op.paint); const AutoTexture holder(texture); if (CC_LIKELY(holder.texture)) { - renderPathTexture(renderer, state, *texture, op); + // Unlike other callers to renderPathTexture, no offsets are used because PathOp doesn't + // have any translate built in, other than what's in the SkPath itself + renderPathTexture(renderer, state, 0, 0, *texture, *(op.paint)); } } @@ -588,7 +592,8 @@ void BakedOpDispatcher::onRectOp(BakedOpRenderer& renderer, const RectOp& op, co op.unmappedBounds.getWidth(), op.unmappedBounds.getHeight(), op.paint); const AutoTexture holder(texture); if (CC_LIKELY(holder.texture)) { - renderPathTexture(renderer, state, *texture, op); + renderPathTexture(renderer, state, op.unmappedBounds.left, op.unmappedBounds.top, + *texture, *(op.paint)); } } else { SkPath path; @@ -622,7 +627,8 @@ void BakedOpDispatcher::onRoundRectOp(BakedOpRenderer& renderer, const RoundRect op.rx, op.ry, op.paint); const AutoTexture holder(texture); if (CC_LIKELY(holder.texture)) { - renderPathTexture(renderer, state, *texture, op); + renderPathTexture(renderer, state, op.unmappedBounds.left, op.unmappedBounds.top, + *texture, *(op.paint)); } } else { const VertexBuffer* buffer = renderer.caches().tessellationCache.getRoundRect( diff --git a/libs/hwui/LayerBuilder.cpp b/libs/hwui/LayerBuilder.cpp index 1ba3bf26c0d4..c5d7191f1b62 100644 --- a/libs/hwui/LayerBuilder.cpp +++ b/libs/hwui/LayerBuilder.cpp @@ -239,7 +239,7 @@ void LayerBuilder::flushLayerClears(LinearAllocator& allocator) { // put the verts in the frame allocator, since // 1) SimpleRectsOps needs verts, not rects // 2) even if mClearRects stored verts, std::vectors will move their contents - Vertex* const verts = (Vertex*) allocator.alloc<Vertex>(vertCount * sizeof(Vertex)); + Vertex* const verts = (Vertex*) allocator.create_trivial_array<Vertex>(vertCount); Vertex* currentVert = verts; Rect bounds = mClearRects[0]; diff --git a/libs/hwui/Matrix.h b/libs/hwui/Matrix.h index 1c25f26c0c25..36007cd5dc0e 100644 --- a/libs/hwui/Matrix.h +++ b/libs/hwui/Matrix.h @@ -14,14 +14,14 @@ * limitations under the License. */ -#ifndef ANDROID_HWUI_MATRIX_H -#define ANDROID_HWUI_MATRIX_H +#pragma once -#include <SkMatrix.h> +#include "Rect.h" #include <cutils/compiler.h> - -#include "Rect.h" +#include <iomanip> +#include <ostream> +#include <SkMatrix.h> namespace android { namespace uirenderer { @@ -218,6 +218,22 @@ public: void dump(const char* label = nullptr) const; + friend std::ostream& operator<<(std::ostream& os, const Matrix4& matrix) { + if (matrix.isSimple()) { + os << "offset " << matrix.getTranslateX() << "x" << matrix.getTranslateY(); + if (!matrix.isPureTranslate()) { + os << ", scale " << matrix[kScaleX] << "x" << matrix[kScaleY]; + } + } else { + os << "[" << matrix[0]; + for (int i = 1; i < 16; i++) { + os << ", " << matrix[i]; + } + os << "]"; + } + return os; + } + static const Matrix4& identity(); private: @@ -244,4 +260,3 @@ typedef Matrix4 mat4; }; // namespace uirenderer }; // namespace android -#endif // ANDROID_HWUI_MATRIX_H diff --git a/libs/hwui/OpDumper.cpp b/libs/hwui/OpDumper.cpp new file mode 100644 index 000000000000..c34cfbe1b259 --- /dev/null +++ b/libs/hwui/OpDumper.cpp @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "OpDumper.h" + +#include "RecordedOp.h" + +namespace android { +namespace uirenderer { + +#define STRINGIFY(n) #n, +static const char* sOpNameLut[] = BUILD_FULL_OP_LUT(STRINGIFY); + +void OpDumper::dump(const RecordedOp& op, std::ostream& output, int level) { + for (int i = 0; i < level; i++) { + output << " "; + } + + Rect localBounds(op.unmappedBounds); + op.localMatrix.mapRect(localBounds); + output << sOpNameLut[op.opId] << " " << localBounds; + + if (op.localClip && !op.localClip->rect.contains(localBounds)) { + output << std::fixed << std::setprecision(0) + << " clip=" << op.localClip->rect + << " mode=" << (int)op.localClip->mode; + } +} + +} // namespace uirenderer +} // namespace android diff --git a/libs/hwui/OpDumper.h b/libs/hwui/OpDumper.h new file mode 100644 index 000000000000..c99b51796b5c --- /dev/null +++ b/libs/hwui/OpDumper.h @@ -0,0 +1,32 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#pragma once + +#include <ostream> + +namespace android { +namespace uirenderer { + +struct RecordedOp; + +class OpDumper { +public: + static void dump(const RecordedOp& op, std::ostream& output, int level = 0); +}; + +}; // namespace uirenderer +}; // namespace android diff --git a/libs/hwui/PixelBuffer.cpp b/libs/hwui/PixelBuffer.cpp index 6df994c623f2..165c7db4c85f 100644 --- a/libs/hwui/PixelBuffer.cpp +++ b/libs/hwui/PixelBuffer.cpp @@ -36,12 +36,14 @@ public: CpuPixelBuffer(GLenum format, uint32_t width, uint32_t height); uint8_t* map(AccessMode mode = kAccessMode_ReadWrite) override; - void unmap() override; uint8_t* getMappedPointer() const override; void upload(uint32_t x, uint32_t y, uint32_t width, uint32_t height, int offset) override; +protected: + void unmap() override; + private: std::unique_ptr<uint8_t[]> mBuffer; }; @@ -81,12 +83,14 @@ public: ~GpuPixelBuffer(); uint8_t* map(AccessMode mode = kAccessMode_ReadWrite) override; - void unmap() override; uint8_t* getMappedPointer() const override; void upload(uint32_t x, uint32_t y, uint32_t width, uint32_t height, int offset) override; +protected: + void unmap() override; + private: GLuint mBuffer; uint8_t* mMappedPointer; @@ -118,6 +122,7 @@ uint8_t* GpuPixelBuffer::map(AccessMode mode) { LOG_ALWAYS_FATAL("Failed to map PBO"); } mAccessMode = mode; + mCaches.pixelBufferState().unbind(); } return mMappedPointer; @@ -147,6 +152,7 @@ void GpuPixelBuffer::upload(uint32_t x, uint32_t y, uint32_t width, uint32_t hei unmap(); glTexSubImage2D(GL_TEXTURE_2D, 0, x, y, width, height, mFormat, GL_UNSIGNED_BYTE, reinterpret_cast<void*>(offset)); + mCaches.pixelBufferState().unbind(); } /////////////////////////////////////////////////////////////////////////////// diff --git a/libs/hwui/PixelBuffer.h b/libs/hwui/PixelBuffer.h index aac5ec4777ee..bbef36b72e4f 100644 --- a/libs/hwui/PixelBuffer.h +++ b/libs/hwui/PixelBuffer.h @@ -91,14 +91,6 @@ public: virtual uint8_t* map(AccessMode mode = kAccessMode_ReadWrite) = 0; /** - * Unmaps this buffer, if needed. After the buffer is unmapped, - * the pointer previously returned by map() becomes invalid and - * should not be used. After calling this method, getMappedPointer() - * will always return NULL. - */ - virtual void unmap() = 0; - - /** * Returns the current access mode for this buffer. If the buffer * is not mapped, this method returns kAccessMode_None. */ @@ -204,6 +196,14 @@ protected: mFormat(format), mWidth(width), mHeight(height), mAccessMode(kAccessMode_None) { } + /** + * Unmaps this buffer, if needed. After the buffer is unmapped, + * the pointer previously returned by map() becomes invalid and + * should not be used. After calling this method, getMappedPointer() + * will always return NULL. + */ + virtual void unmap() = 0; + GLenum mFormat; uint32_t mWidth; diff --git a/libs/hwui/RecordedOp.h b/libs/hwui/RecordedOp.h index bb26e2ec67a8..c37458d31029 100644 --- a/libs/hwui/RecordedOp.h +++ b/libs/hwui/RecordedOp.h @@ -119,6 +119,9 @@ class Tree; #define BUILD_RENDERABLE_OP_LUT(OP_FN) \ { MAP_OPS_BASED_ON_TYPE(NULLPTR_OP_FN, OP_FN, OP_FN, OP_FN) } +#define BUILD_FULL_OP_LUT(OP_FN) \ + { MAP_OPS_BASED_ON_TYPE(OP_FN, OP_FN, OP_FN, OP_FN) } + /** * Op mapping functions, which skip unsupported ops. * diff --git a/libs/hwui/RecordingCanvas.cpp b/libs/hwui/RecordingCanvas.cpp index 0adb21cd8884..31de305d5246 100644 --- a/libs/hwui/RecordingCanvas.cpp +++ b/libs/hwui/RecordingCanvas.cpp @@ -241,10 +241,13 @@ void RecordingCanvas::drawColor(int color, SkXfermode::Mode mode) { } void RecordingCanvas::drawPaint(const SkPaint& paint) { + const ClipBase* clip = getRecordedClip(); + // if there's no current clip, draw a big rect and hope we cover the eventual clip bounds + Rect bounds = clip ? clip->rect : Rect(-10000, -10000, 10000, 10000); addOp(alloc().create_trivial<RectOp>( - mState.getRenderTargetClipBounds(), // OK, since we've not passed transform + bounds, Matrix4::identity(), - getRecordedClip(), + clip, refPaint(&paint))); } @@ -290,7 +293,7 @@ void RecordingCanvas::drawRect(float left, float top, float right, float bottom, void RecordingCanvas::drawSimpleRects(const float* rects, int vertexCount, const SkPaint* paint) { if (rects == nullptr) return; - Vertex* rectData = (Vertex*) mDisplayList->allocator.alloc<Vertex>(vertexCount * sizeof(Vertex)); + Vertex* rectData = (Vertex*) mDisplayList->allocator.create_trivial_array<Vertex>(vertexCount); Vertex* vertex = rectData; float left = FLT_MAX; diff --git a/libs/hwui/Rect.h b/libs/hwui/Rect.h index 30c925c8775b..d9fce9b2c824 100644 --- a/libs/hwui/Rect.h +++ b/libs/hwui/Rect.h @@ -14,16 +14,17 @@ * limitations under the License. */ -#ifndef ANDROID_HWUI_RECT_H -#define ANDROID_HWUI_RECT_H +#pragma once -#include <cmath> -#include <algorithm> -#include <SkRect.h> +#include "Vertex.h" #include <utils/Log.h> -#include "Vertex.h" +#include <algorithm> +#include <cmath> +#include <iomanip> +#include <ostream> +#include <SkRect.h> namespace android { namespace uirenderer { @@ -282,9 +283,23 @@ public: void dump(const char* label = nullptr) const { ALOGD("%s[l=%.2f t=%.2f r=%.2f b=%.2f]", label ? label : "Rect", left, top, right, bottom); } + + friend std::ostream& operator<<(std::ostream& os, const Rect& rect) { + if (rect.isEmpty()) { + return os << "empty"; + } + + if (rect.left == 0 && rect.top == 0) { + return os << "[" << rect.right << " x " << rect.bottom << "]"; + } + + return os << "[" << rect.left + << " " << rect.top + << " " << rect.right + << " " << rect.bottom << "]"; + } }; // class Rect }; // namespace uirenderer }; // namespace android -#endif // ANDROID_HWUI_RECT_H diff --git a/libs/hwui/RenderNode.cpp b/libs/hwui/RenderNode.cpp index 9ac76a4339e1..61441ce9b16e 100644 --- a/libs/hwui/RenderNode.cpp +++ b/libs/hwui/RenderNode.cpp @@ -19,8 +19,9 @@ #include "DamageAccumulator.h" #include "Debug.h" #if HWUI_NEW_OPS -#include "RecordedOp.h" #include "BakedOpRenderer.h" +#include "RecordedOp.h" +#include "OpDumper.h" #endif #include "DisplayListOp.h" #include "LayerRenderer.h" @@ -95,6 +96,34 @@ void RenderNode::setStagingDisplayList(DisplayList* displayList) { * This function is a simplified version of replay(), where we simply retrieve and log the * display list. This function should remain in sync with the replay() function. */ +#if HWUI_NEW_OPS +void RenderNode::output(uint32_t level, const char* label) { + ALOGD("%s (%s %p%s%s%s%s%s)", + label, + getName(), + this, + (MathUtils::isZero(properties().getAlpha()) ? ", zero alpha" : ""), + (properties().hasShadow() ? ", casting shadow" : ""), + (isRenderable() ? "" : ", empty"), + (properties().getProjectBackwards() ? ", projected" : ""), + (mLayer != nullptr ? ", on HW Layer" : "")); + properties().debugOutputProperties(level + 1); + + if (mDisplayList) { + for (auto&& op : mDisplayList->getOps()) { + std::stringstream strout; + OpDumper::dump(*op, strout, level + 1); + if (op->opId == RecordedOpId::RenderNodeOp) { + auto rnOp = reinterpret_cast<const RenderNodeOp*>(op); + rnOp->renderNode->output(level + 1, strout.str().c_str()); + } else { + ALOGD("%s", strout.str().c_str()); + } + } + } + ALOGD("%*s/RenderNode(%s %p)", level * 2, "", getName(), this); +} +#else void RenderNode::output(uint32_t level) { ALOGD("%*sStart display list (%p, %s%s%s%s%s%s)", (level - 1) * 2, "", this, getName(), @@ -104,22 +133,16 @@ void RenderNode::output(uint32_t level) { (properties().getProjectBackwards() ? ", projected" : ""), (mLayer != nullptr ? ", on HW Layer" : "")); ALOGD("%*s%s %d", level * 2, "", "Save", SaveFlags::MatrixClip); - properties().debugOutputProperties(level); - if (mDisplayList) { -#if HWUI_NEW_OPS - LOG_ALWAYS_FATAL("op dumping unsupported"); -#else // TODO: consider printing the chunk boundaries here for (auto&& op : mDisplayList->getOps()) { op->output(level, DisplayListOp::kOpLogFlag_Recurse); } -#endif } - ALOGD("%*sDone (%p, %s)", (level - 1) * 2, "", this, getName()); -} + } +#endif void RenderNode::copyTo(proto::RenderNode *pnode) { pnode->set_id(static_cast<uint64_t>( diff --git a/libs/hwui/RenderNode.h b/libs/hwui/RenderNode.h index e0376450178f..838192552127 100644 --- a/libs/hwui/RenderNode.h +++ b/libs/hwui/RenderNode.h @@ -123,7 +123,11 @@ public: void defer(DeferStateStruct& deferStruct, const int level); void replay(ReplayStateStruct& replayStruct, const int level); +#if HWUI_NEW_OPS + ANDROID_API void output(uint32_t level = 0, const char* label = "Root"); +#else ANDROID_API void output(uint32_t level = 1); +#endif ANDROID_API int getDebugSize(); void copyTo(proto::RenderNode* node); diff --git a/libs/hwui/RenderProperties.cpp b/libs/hwui/RenderProperties.cpp index b848af4e7b1e..0b0f0fa4f304 100644 --- a/libs/hwui/RenderProperties.cpp +++ b/libs/hwui/RenderProperties.cpp @@ -102,22 +102,23 @@ RenderProperties& RenderProperties::operator=(const RenderProperties& other) { void RenderProperties::debugOutputProperties(const int level) const { if (mPrimitiveFields.mLeft != 0 || mPrimitiveFields.mTop != 0) { - ALOGD("%*sTranslate (left, top) %d, %d", level * 2, "", mPrimitiveFields.mLeft, mPrimitiveFields.mTop); + ALOGD("%*s(Translate (left, top) %d, %d)", level * 2, "", + mPrimitiveFields.mLeft, mPrimitiveFields.mTop); } if (mStaticMatrix) { - ALOGD("%*sConcatMatrix (static) %p: " SK_MATRIX_STRING, + ALOGD("%*s(ConcatMatrix (static) %p: " SK_MATRIX_STRING ")", level * 2, "", mStaticMatrix, SK_MATRIX_ARGS(mStaticMatrix)); } if (mAnimationMatrix) { - ALOGD("%*sConcatMatrix (animation) %p: " SK_MATRIX_STRING, + ALOGD("%*s(ConcatMatrix (animation) %p: " SK_MATRIX_STRING ")", level * 2, "", mAnimationMatrix, SK_MATRIX_ARGS(mAnimationMatrix)); } if (hasTransformMatrix()) { if (isTransformTranslateOnly()) { - ALOGD("%*sTranslate %.2f, %.2f, %.2f", + ALOGD("%*s(Translate %.2f, %.2f, %.2f)", level * 2, "", getTranslationX(), getTranslationY(), getZ()); } else { - ALOGD("%*sConcatMatrix %p: " SK_MATRIX_STRING, + ALOGD("%*s(ConcatMatrix %p: " SK_MATRIX_STRING ")", level * 2, "", mComputedFields.mTransformMatrix, SK_MATRIX_ARGS(mComputedFields.mTransformMatrix)); } } @@ -132,7 +133,7 @@ void RenderProperties::debugOutputProperties(const int level) const { if (CC_LIKELY(isLayer || !getHasOverlappingRendering())) { // simply scale rendering content's alpha - ALOGD("%*sScaleAlpha %.2f", level * 2, "", mPrimitiveFields.mAlpha); + ALOGD("%*s(ScaleAlpha %.2f)", level * 2, "", mPrimitiveFields.mAlpha); } else { // savelayeralpha to create an offscreen buffer to apply alpha Rect layerBounds(0, 0, getWidth(), getHeight()); @@ -140,19 +141,18 @@ void RenderProperties::debugOutputProperties(const int level) const { getClippingRectForFlags(clipFlags, &layerBounds); clipFlags = 0; // all clipping done by savelayer } - ALOGD("%*sSaveLayerAlpha %d, %d, %d, %d, %d, 0x%x", level * 2, "", + ALOGD("%*s(SaveLayerAlpha %d, %d, %d, %d, %d, 0x%x)", level * 2, "", (int)layerBounds.left, (int)layerBounds.top, (int)layerBounds.right, (int)layerBounds.bottom, (int)(mPrimitiveFields.mAlpha * 255), SaveFlags::HasAlphaLayer | SaveFlags::ClipToLayer); } - - } + if (clipFlags) { Rect clipRect; getClippingRectForFlags(clipFlags, &clipRect); - ALOGD("%*sClipRect %d, %d, %d, %d", level * 2, "", + ALOGD("%*s(ClipRect %d, %d, %d, %d)", level * 2, "", (int)clipRect.left, (int)clipRect.top, (int)clipRect.right, (int)clipRect.bottom); } } diff --git a/libs/hwui/Snapshot.h b/libs/hwui/Snapshot.h index 0ac2f1411140..b03643f06f1c 100644 --- a/libs/hwui/Snapshot.h +++ b/libs/hwui/Snapshot.h @@ -44,7 +44,7 @@ namespace uirenderer { */ class RoundRectClipState { public: - /** static void* operator new(size_t size); PURPOSELY OMITTED, allocator only **/ + static void* operator new(size_t size) = delete; static void* operator new(size_t size, LinearAllocator& allocator) { return allocator.alloc<RoundRectClipState>(size); } @@ -65,7 +65,7 @@ public: class ProjectionPathMask { public: - /** static void* operator new(size_t size); PURPOSELY OMITTED, allocator only **/ + static void* operator new(size_t size) = delete; static void* operator new(size_t size, LinearAllocator& allocator) { return allocator.alloc<ProjectionPathMask>(size); } diff --git a/libs/hwui/tests/unit/OpDumperTests.cpp b/libs/hwui/tests/unit/OpDumperTests.cpp new file mode 100644 index 000000000000..01840d72b766 --- /dev/null +++ b/libs/hwui/tests/unit/OpDumperTests.cpp @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include <gtest/gtest.h> + +#include "tests/common/TestUtils.h" +#include "OpDumper.h" + +using namespace android; +using namespace android::uirenderer; + +TEST(OpDumper, dump) { + SkPaint paint; + RectOp op(uirenderer::Rect(100, 100), Matrix4::identity(), nullptr, &paint); + + std::stringstream stream; + OpDumper::dump(op, stream); + EXPECT_STREQ("RectOp [100 x 100]", stream.str().c_str()); + + stream.str(""); + OpDumper::dump(op, stream, 2); + EXPECT_STREQ(" RectOp [100 x 100]", stream.str().c_str()); + + ClipRect clipRect(uirenderer::Rect(50, 50)); + op.localClip = &clipRect; + + stream.str(""); + OpDumper::dump(op, stream, 2); + EXPECT_STREQ(" RectOp [100 x 100] clip=[50 x 50] mode=0", stream.str().c_str()); +} diff --git a/libs/hwui/tests/unit/RecordingCanvasTests.cpp b/libs/hwui/tests/unit/RecordingCanvasTests.cpp index cd9ffc5590f8..f988da399665 100644 --- a/libs/hwui/tests/unit/RecordingCanvasTests.cpp +++ b/libs/hwui/tests/unit/RecordingCanvasTests.cpp @@ -19,6 +19,7 @@ #include <RecordedOp.h> #include <RecordingCanvas.h> #include <tests/common/TestUtils.h> +#include <utils/Color.h> namespace android { namespace uirenderer { @@ -185,6 +186,19 @@ TEST(RecordingCanvas, drawText_forceAlignLeft) { ASSERT_EQ(3, count); } +TEST(RecordingCanvas, drawColor) { + auto dl = TestUtils::createDisplayList<RecordingCanvas>(200, 200, [](RecordingCanvas& canvas) { + canvas.drawColor(Color::Black, SkXfermode::kSrcOver_Mode); + }); + + ASSERT_EQ(1u, dl->getOps().size()) << "Must be exactly one op"; + auto op = *(dl->getOps()[0]); + EXPECT_EQ(RecordedOpId::RectOp, op.opId); + EXPECT_EQ(nullptr, op.localClip); + EXPECT_TRUE(op.unmappedBounds.contains(Rect(-1000, -1000, 1000, 1000))) + << "no clip, unmappedBounds should resolve to be much larger than DL bounds"; +} + TEST(RecordingCanvas, backgroundAndImage) { auto dl = TestUtils::createDisplayList<RecordingCanvas>(100, 200, [](RecordingCanvas& canvas) { SkBitmap bitmap; diff --git a/libs/hwui/utils/LinearAllocator.h b/libs/hwui/utils/LinearAllocator.h index 0a0e1858cd91..34c8c6beea81 100644 --- a/libs/hwui/utils/LinearAllocator.h +++ b/libs/hwui/utils/LinearAllocator.h @@ -84,6 +84,13 @@ public: return new (allocImpl(sizeof(T))) T(std::forward<Params>(params)...); } + template<class T> + T* create_trivial_array(int count) { + static_assert(std::is_trivially_destructible<T>::value, + "Error, called create_trivial_array on a non-trivial type"); + return reinterpret_cast<T*>(allocImpl(sizeof(T) * count)); + } + /** * Attempt to deallocate the given buffer, with the LinearAllocator attempting to rewind its * state if possible. diff --git a/libs/hwui/utils/StringUtils.h b/libs/hwui/utils/StringUtils.h index 05a3d5931e5d..5add95711f2d 100644 --- a/libs/hwui/utils/StringUtils.h +++ b/libs/hwui/utils/StringUtils.h @@ -42,7 +42,7 @@ struct SizePrinter { static const char* SUFFIXES[] = {"B", "KiB", "MiB"}; size_t suffix = 0; double temp = d.bytes; - while (temp > 1000 && suffix < 2) { + while (temp > 1024 && suffix < 2) { temp /= 1024.0; suffix++; } diff --git a/media/java/android/media/AudioDeviceInfo.java b/media/java/android/media/AudioDeviceInfo.java index 45529efec0d9..9922b7237b74 100644 --- a/media/java/android/media/AudioDeviceInfo.java +++ b/media/java/android/media/AudioDeviceInfo.java @@ -111,6 +111,10 @@ public final class AudioDeviceInfo { * A device type connected over IP. */ public static final int TYPE_IP = 20; + /** + * A type-agnostic device used for communication with external audio systems + */ + public static final int TYPE_BUS = 21; private final AudioDevicePort mPort; @@ -279,6 +283,7 @@ public final class AudioDeviceInfo { INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_OUT_FM, TYPE_FM); INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_OUT_AUX_LINE, TYPE_AUX_LINE); INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_OUT_IP, TYPE_IP); + INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_OUT_BUS, TYPE_BUS); INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_IN_BUILTIN_MIC, TYPE_BUILTIN_MIC); INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_IN_BLUETOOTH_SCO_HEADSET, TYPE_BLUETOOTH_SCO); @@ -296,6 +301,7 @@ public final class AudioDeviceInfo { INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_IN_SPDIF, TYPE_LINE_DIGITAL); INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_IN_BLUETOOTH_A2DP, TYPE_BLUETOOTH_A2DP); INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_IN_IP, TYPE_IP); + INT_TO_EXT_DEVICE_MAPPING.put(AudioSystem.DEVICE_IN_BUS, TYPE_BUS); // not covered here, legacy //AudioSystem.DEVICE_OUT_REMOTE_SUBMIX @@ -323,6 +329,7 @@ public final class AudioDeviceInfo { EXT_TO_INT_DEVICE_MAPPING.put(TYPE_TELEPHONY, AudioSystem.DEVICE_OUT_TELEPHONY_TX); EXT_TO_INT_DEVICE_MAPPING.put(TYPE_AUX_LINE, AudioSystem.DEVICE_OUT_AUX_LINE); EXT_TO_INT_DEVICE_MAPPING.put(TYPE_IP, AudioSystem.DEVICE_OUT_IP); + EXT_TO_INT_DEVICE_MAPPING.put(TYPE_BUS, AudioSystem.DEVICE_OUT_BUS); } } diff --git a/media/java/android/media/AudioFormat.aidl b/media/java/android/media/AudioFormat.aidl new file mode 100644 index 000000000000..8613f550e3c8 --- /dev/null +++ b/media/java/android/media/AudioFormat.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.media; + +parcelable AudioFormat; diff --git a/media/java/android/media/AudioFormat.java b/media/java/android/media/AudioFormat.java index 000a56d186b5..22f4f04bcea8 100644 --- a/media/java/android/media/AudioFormat.java +++ b/media/java/android/media/AudioFormat.java @@ -18,10 +18,13 @@ package android.media; import android.annotation.IntDef; import android.annotation.NonNull; +import android.os.Parcel; +import android.os.Parcelable; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.Arrays; +import java.util.Objects; /** * The {@link AudioFormat} class is used to access a number of audio format and @@ -209,7 +212,7 @@ import java.util.Arrays; * AudioTrack.getPlaybackHeadPosition()}), * depending on the context where audio frame is used. */ -public class AudioFormat { +public class AudioFormat implements Parcelable { //--------------------------------------------------------- // Constants @@ -874,6 +877,44 @@ public class AudioFormat { } @Override + public int hashCode() { + return Objects.hash(mPropertySetMask, mSampleRate, mEncoding, mChannelMask, + mChannelIndexMask); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(mPropertySetMask); + dest.writeInt(mEncoding); + dest.writeInt(mSampleRate); + dest.writeInt(mChannelMask); + dest.writeInt(mChannelIndexMask); + } + + private AudioFormat(Parcel in) { + mPropertySetMask = in.readInt(); + mEncoding = in.readInt(); + mSampleRate = in.readInt(); + mChannelMask = in.readInt(); + mChannelIndexMask = in.readInt(); + } + + public static final Parcelable.Creator<AudioFormat> CREATOR = + new Parcelable.Creator<AudioFormat>() { + public AudioFormat createFromParcel(Parcel p) { + return new AudioFormat(p); + } + public AudioFormat[] newArray(int size) { + return new AudioFormat[size]; + } + }; + + @Override public String toString () { return new String("AudioFormat:" + " props=" + mPropertySetMask diff --git a/media/java/android/media/AudioRecordConfiguration.java b/media/java/android/media/AudioRecordConfiguration.java index 69df88f3cfe3..61d239c0e70b 100644 --- a/media/java/android/media/AudioRecordConfiguration.java +++ b/media/java/android/media/AudioRecordConfiguration.java @@ -41,11 +41,12 @@ public class AudioRecordConfiguration implements Parcelable { /** * @hide */ - public AudioRecordConfiguration(int session, int source) { + public AudioRecordConfiguration(int session, int source, + AudioFormat clientFormat, AudioFormat deviceFormat) { mSessionId = session; mClientSource = source; - mDeviceFormat = new AudioFormat.Builder().build(); - mClientFormat = new AudioFormat.Builder().build(); + mDeviceFormat = deviceFormat; + mClientFormat = clientFormat; mRecDevice = null; } @@ -129,13 +130,17 @@ public class AudioRecordConfiguration implements Parcelable { public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mSessionId); dest.writeInt(mClientSource); + mClientFormat.writeToParcel(dest, 0); + mDeviceFormat.writeToParcel(dest, 0); + //TODO marshall device info } private AudioRecordConfiguration(Parcel in) { mSessionId = in.readInt(); mClientSource = in.readInt(); - mDeviceFormat = new AudioFormat.Builder().build(); - mClientFormat = new AudioFormat.Builder().build(); + mClientFormat = AudioFormat.CREATOR.createFromParcel(in); + mDeviceFormat = AudioFormat.CREATOR.createFromParcel(in); + //TODO unmarshall device info mRecDevice = null; } diff --git a/media/java/android/media/AudioSystem.java b/media/java/android/media/AudioSystem.java index aa0d78dacd7e..59782cb99a46 100644 --- a/media/java/android/media/AudioSystem.java +++ b/media/java/android/media/AudioSystem.java @@ -273,7 +273,17 @@ public class AudioSystem */ public interface AudioRecordingCallback { - void onRecordingConfigurationChanged(int event, int session, int source); + /** + * Callback for recording activity notifications events + * @param event + * @param session + * @param source + * @param recordingFormat an array of ints containing respectively the client and device + * recording configuration. Each set of parameters contains the following parameters + * in this order: format, channel mask, sample rate + */ + void onRecordingConfigurationChanged(int event, int session, int source, + int[] recordingFormat); } private static AudioRecordingCallback sRecordingCallback; @@ -285,13 +295,23 @@ public class AudioSystem } } - private static void recordingCallbackFromNative(int event, int session, int source) { + /** + * Callback from native for recording configuration updates. + * @param event + * @param session + * @param source + * @param recordingFormat see + * {@link AudioRecordingCallback#onRecordingConfigurationChanged(int, int, int, int[])} for + * the description of the record format. + */ + private static void recordingCallbackFromNative(int event, int session, int source, + int[] recordingFormat) { AudioRecordingCallback cb = null; synchronized (AudioSystem.class) { cb = sRecordingCallback; } if (cb != null) { - cb.onRecordingConfigurationChanged(event, session, source); + cb.onRecordingConfigurationChanged(event, session, source, recordingFormat); } } @@ -346,6 +366,7 @@ public class AudioSystem public static final int DEVICE_OUT_AUX_LINE = 0x200000; public static final int DEVICE_OUT_SPEAKER_SAFE = 0x400000; public static final int DEVICE_OUT_IP = 0x800000; + public static final int DEVICE_OUT_BUS = 0x1000000; public static final int DEVICE_OUT_DEFAULT = DEVICE_BIT_DEFAULT; @@ -373,6 +394,7 @@ public class AudioSystem DEVICE_OUT_AUX_LINE | DEVICE_OUT_SPEAKER_SAFE | DEVICE_OUT_IP | + DEVICE_OUT_BUS | DEVICE_OUT_DEFAULT); public static final int DEVICE_OUT_ALL_A2DP = (DEVICE_OUT_BLUETOOTH_A2DP | DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES | @@ -412,6 +434,7 @@ public class AudioSystem public static final int DEVICE_IN_BLUETOOTH_A2DP = DEVICE_BIT_IN | 0x20000; public static final int DEVICE_IN_LOOPBACK = DEVICE_BIT_IN | 0x40000; public static final int DEVICE_IN_IP = DEVICE_BIT_IN | 0x80000; + public static final int DEVICE_IN_BUS = DEVICE_BIT_IN | 0x100000; public static final int DEVICE_IN_DEFAULT = DEVICE_BIT_IN | DEVICE_BIT_DEFAULT; public static final int DEVICE_IN_ALL = (DEVICE_IN_COMMUNICATION | @@ -434,6 +457,7 @@ public class AudioSystem DEVICE_IN_BLUETOOTH_A2DP | DEVICE_IN_LOOPBACK | DEVICE_IN_IP | + DEVICE_IN_BUS | DEVICE_IN_DEFAULT); public static final int DEVICE_IN_ALL_SCO = DEVICE_IN_BLUETOOTH_SCO_HEADSET; public static final int DEVICE_IN_ALL_USB = (DEVICE_IN_USB_ACCESSORY | @@ -469,6 +493,7 @@ public class AudioSystem public static final String DEVICE_OUT_AUX_LINE_NAME = "aux_line"; public static final String DEVICE_OUT_SPEAKER_SAFE_NAME = "speaker_safe"; public static final String DEVICE_OUT_IP_NAME = "ip"; + public static final String DEVICE_OUT_BUS_NAME = "bus"; public static final String DEVICE_IN_COMMUNICATION_NAME = "communication"; public static final String DEVICE_IN_AMBIENT_NAME = "ambient"; @@ -490,6 +515,7 @@ public class AudioSystem public static final String DEVICE_IN_BLUETOOTH_A2DP_NAME = "bt_a2dp"; public static final String DEVICE_IN_LOOPBACK_NAME = "loopback"; public static final String DEVICE_IN_IP_NAME = "ip"; + public static final String DEVICE_IN_BUS_NAME = "bus"; public static String getOutputDeviceName(int device) { @@ -542,6 +568,8 @@ public class AudioSystem return DEVICE_OUT_SPEAKER_SAFE_NAME; case DEVICE_OUT_IP: return DEVICE_OUT_IP_NAME; + case DEVICE_OUT_BUS: + return DEVICE_OUT_BUS_NAME; case DEVICE_OUT_DEFAULT: default: return Integer.toString(device); @@ -591,6 +619,8 @@ public class AudioSystem return DEVICE_IN_LOOPBACK_NAME; case DEVICE_IN_IP: return DEVICE_IN_IP_NAME; + case DEVICE_IN_BUS: + return DEVICE_IN_BUS_NAME; case DEVICE_IN_DEFAULT: default: return Integer.toString(device); diff --git a/media/java/android/media/ImageReader.java b/media/java/android/media/ImageReader.java index 397ab15c5aba..c08f4bf0eb19 100644 --- a/media/java/android/media/ImageReader.java +++ b/media/java/android/media/ImageReader.java @@ -153,6 +153,7 @@ public class ImageReader implements AutoCloseable { mSurface = nativeGetSurface(); + mIsReaderValid = true; // Estimate the native buffer allocation size and register it so it gets accounted for // during GC. Note that this doesn't include the buffers required by the buffer queue // itself and the buffers requested by the producer. @@ -326,7 +327,11 @@ public class ImageReader implements AutoCloseable { */ private int acquireNextSurfaceImage(SurfaceImage si) { synchronized (mCloseLock) { - int status = nativeImageSetup(si); + // A null image will eventually be returned if ImageReader is already closed. + int status = ACQUIRE_NO_BUFS; + if (mIsReaderValid) { + status = nativeImageSetup(si); + } switch (status) { case ACQUIRE_SUCCESS: @@ -498,6 +503,7 @@ public class ImageReader implements AutoCloseable { * acquire operations. */ synchronized (mCloseLock) { + mIsReaderValid = false; for (Image image : mAcquiredImages) { image.close(); } @@ -613,6 +619,7 @@ public class ImageReader implements AutoCloseable { private final Object mListenerLock = new Object(); private final Object mCloseLock = new Object(); + private boolean mIsReaderValid = false; private OnImageAvailableListener mListener; private ListenerHandler mListenerHandler; // Keep track of the successfully acquired Images. This need to be thread safe as the images @@ -638,7 +645,14 @@ public class ImageReader implements AutoCloseable { synchronized (mListenerLock) { listener = mListener; } - if (listener != null) { + + // It's dangerous to fire onImageAvailable() callback when the ImageReader is being + // closed, as application could acquire next image in the onImageAvailable() callback. + boolean isReaderValid = false; + synchronized (mCloseLock) { + isReaderValid = mIsReaderValid; + } + if (listener != null && isReaderValid) { listener.onImageAvailable(ImageReader.this); } } diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java index 26e466e181d9..adf85517c344 100644 --- a/media/java/android/media/MediaPlayer.java +++ b/media/java/android/media/MediaPlayer.java @@ -57,6 +57,7 @@ import android.media.SubtitleTrack.RenderingWidget; import android.media.SyncParams; import com.android.internal.app.IAppOpsService; +import com.android.internal.util.Preconditions; import libcore.io.IoBridge; import libcore.io.Libcore; @@ -964,8 +965,8 @@ public class MediaPlayer implements SubtitleController.Listener * @param uri the Content URI of the data you want to play * @throws IllegalStateException if it is called in an invalid state */ - public void setDataSource(Context context, Uri uri) - throws IOException, IllegalArgumentException, SecurityException, IllegalStateException { + public void setDataSource(@NonNull Context context, @NonNull Uri uri) + throws IOException, IllegalArgumentException, SecurityException, IllegalStateException { setDataSource(context, uri, null); } @@ -981,47 +982,46 @@ public class MediaPlayer implements SubtitleController.Listener * to disallow or allow cross domain redirection. * @throws IllegalStateException if it is called in an invalid state */ - public void setDataSource(Context context, Uri uri, Map<String, String> headers) - throws IOException, IllegalArgumentException, SecurityException, IllegalStateException { + public void setDataSource(@NonNull Context context, @NonNull Uri uri, + @Nullable Map<String, String> headers) throws IOException, IllegalArgumentException, + SecurityException, IllegalStateException { + final ContentResolver resolver = context.getContentResolver(); final String scheme = uri.getScheme(); if (ContentResolver.SCHEME_FILE.equals(scheme)) { setDataSource(uri.getPath()); return; } else if (ContentResolver.SCHEME_CONTENT.equals(scheme) && Settings.AUTHORITY.equals(uri.getAuthority())) { - // Redirect ringtones to go directly to underlying provider - uri = RingtoneManager.getActualDefaultRingtoneUri(context, - RingtoneManager.getDefaultType(uri)); - if (uri == null) { - throw new FileNotFoundException("Failed to resolve default ringtone"); - } - } - - AssetFileDescriptor fd = null; - try { - ContentResolver resolver = context.getContentResolver(); - fd = resolver.openAssetFileDescriptor(uri, "r"); - if (fd == null) { + // Try cached ringtone first since the actual provider may not be + // encryption aware, or it may be stored on CE media storage + final int type = RingtoneManager.getDefaultType(uri); + final Uri cacheUri = RingtoneManager.getCacheForType(type); + final Uri actualUri = RingtoneManager.getActualDefaultRingtoneUri(context, type); + if (attemptDataSource(resolver, cacheUri)) { + return; + } else if (attemptDataSource(resolver, actualUri)) { return; - } - // Note: using getDeclaredLength so that our behavior is the same - // as previous versions when the content provider is returning - // a full file. - if (fd.getDeclaredLength() < 0) { - setDataSource(fd.getFileDescriptor()); } else { - setDataSource(fd.getFileDescriptor(), fd.getStartOffset(), fd.getDeclaredLength()); + setDataSource(uri.toString(), headers); } - return; - } catch (SecurityException | IOException ex) { - Log.w(TAG, "Couldn't open file on client side; trying server side: " + ex); - } finally { - if (fd != null) { - fd.close(); + } else { + // Try requested Uri locally first, or fallback to media server + if (attemptDataSource(resolver, uri)) { + return; + } else { + setDataSource(uri.toString(), headers); } } + } - setDataSource(uri.toString(), headers); + private boolean attemptDataSource(ContentResolver resolver, Uri uri) { + try (AssetFileDescriptor afd = resolver.openAssetFileDescriptor(uri, "r")) { + setDataSource(afd); + return true; + } catch (NullPointerException | SecurityException | IOException ex) { + Log.w(TAG, "Couldn't open " + uri + ": " + ex); + return false; + } } /** @@ -1102,6 +1102,26 @@ public class MediaPlayer implements SubtitleController.Listener throws IOException, IllegalArgumentException, SecurityException, IllegalStateException; /** + * Sets the data source (AssetFileDescriptor) to use. It is the caller's + * responsibility to close the file descriptor. It is safe to do so as soon + * as this call returns. + * + * @param afd the AssetFileDescriptor for the file you want to play + */ + public void setDataSource(@NonNull AssetFileDescriptor afd) + throws IOException, IllegalArgumentException, IllegalStateException { + Preconditions.checkNotNull(afd); + // Note: using getDeclaredLength so that our behavior is the same + // as previous versions when the content provider is returning + // a full file. + if (afd.getDeclaredLength() < 0) { + setDataSource(afd.getFileDescriptor()); + } else { + setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getDeclaredLength()); + } + } + + /** * Sets the data source (FileDescriptor) to use. It is the caller's responsibility * to close the file descriptor. It is safe to do so as soon as this call returns. * diff --git a/media/java/android/media/RingtoneManager.java b/media/java/android/media/RingtoneManager.java index 025029e75ec1..feb490de2c3e 100644 --- a/media/java/android/media/RingtoneManager.java +++ b/media/java/android/media/RingtoneManager.java @@ -18,9 +18,12 @@ package android.media; import com.android.internal.database.SortCursor; +import libcore.io.Streams; + import android.annotation.SdkConstant; import android.annotation.SdkConstant.SdkConstantType; import android.app.Activity; +import android.content.ContentResolver; import android.content.ContentUris; import android.content.Context; import android.content.pm.PackageManager; @@ -33,6 +36,9 @@ import android.provider.Settings; import android.provider.Settings.System; import android.util.Log; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; import java.util.ArrayList; import java.util.List; @@ -654,8 +660,21 @@ public class RingtoneManager { if (setting == null) return; Settings.System.putString(context.getContentResolver(), setting, ringtoneUri != null ? ringtoneUri.toString() : null); + + // Stream selected ringtone into cache so it's available for playback + // when CE storage is still locked + if (ringtoneUri != null) { + final ContentResolver cr = context.getContentResolver(); + final Uri cacheUri = getCacheForType(type); + try (InputStream in = cr.openInputStream(ringtoneUri); + OutputStream out = cr.openOutputStream(cacheUri)) { + Streams.copy(in, out); + } catch (IOException e) { + Log.w(TAG, "Failed to cache ringtone: " + e); + } + } } - + private static String getSettingForType(int type) { if ((type & TYPE_RINGTONE) != 0) { return Settings.System.RINGTONE; @@ -667,7 +686,20 @@ public class RingtoneManager { return null; } } - + + /** {@hide} */ + public static Uri getCacheForType(int type) { + if ((type & TYPE_RINGTONE) != 0) { + return Settings.System.RINGTONE_CACHE_URI; + } else if ((type & TYPE_NOTIFICATION) != 0) { + return Settings.System.NOTIFICATION_SOUND_CACHE_URI; + } else if ((type & TYPE_ALARM) != 0) { + return Settings.System.ALARM_ALERT_CACHE_URI; + } else { + return null; + } + } + /** * Returns whether the given {@link Uri} is one of the default ringtones. * diff --git a/media/java/android/media/session/ISessionCallback.aidl b/media/java/android/media/session/ISessionCallback.aidl index adb6b0600f97..893bd3c8cbb1 100644 --- a/media/java/android/media/session/ISessionCallback.aidl +++ b/media/java/android/media/session/ISessionCallback.aidl @@ -29,6 +29,10 @@ oneway interface ISessionCallback { void onMediaButton(in Intent mediaButtonIntent, int sequenceNumber, in ResultReceiver cb); // These callbacks are for the TransportPerformer + void onPrepare(); + void onPrepareFromMediaId(String mediaId, in Bundle extras); + void onPrepareFromSearch(String query, in Bundle extras); + void onPrepareFromUri(in Uri uri, in Bundle extras); void onPlay(); void onPlayFromMediaId(String mediaId, in Bundle extras); void onPlayFromSearch(String query, in Bundle extras); diff --git a/media/java/android/media/session/ISessionController.aidl b/media/java/android/media/session/ISessionController.aidl index 285e5f7a0880..249bcdc802ce 100644 --- a/media/java/android/media/session/ISessionController.aidl +++ b/media/java/android/media/session/ISessionController.aidl @@ -50,6 +50,10 @@ interface ISessionController { void setVolumeTo(int value, int flags, String packageName); // These commands are for the TransportControls + void prepare(); + void prepareFromMediaId(String mediaId, in Bundle extras); + void prepareFromSearch(String string, in Bundle extras); + void prepareFromUri(in Uri uri, in Bundle extras); void play(); void playFromMediaId(String mediaId, in Bundle extras); void playFromSearch(String string, in Bundle extras); diff --git a/media/java/android/media/session/MediaController.java b/media/java/android/media/session/MediaController.java index 3d9b60deed2f..13db00ef3cd1 100644 --- a/media/java/android/media/session/MediaController.java +++ b/media/java/android/media/session/MediaController.java @@ -592,6 +592,90 @@ public final class MediaController { } /** + * Request that the player prepare its playback. Once the preparation is done, the session + * will change its playback state to {@link PlaybackState#STATE_PAUSED}. Afterwards, + * {@link #play} can be called to start playback. If the preparation is not needed, + * {@link #play} can be directly called without this method. + */ + public void prepare() { + try { + mSessionBinder.prepare(); + } catch (RemoteException e) { + Log.wtf(TAG, "Error calling prepare.", e); + } + } + + /** + * Request that the player prepare playback for a specific media id. Once the preparation is + * done, the session will change its playback state to {@link PlaybackState#STATE_PAUSED}. + * Afterwards, {@link #play} can be called to start playback. If the preparation is not + * needed, {@link #playFromMediaId} can be directly called without this method. + * + * @param mediaId The id of the requested media. + * @param extras Optional extras that can include extra information about the media item + * to be prepared. + */ + public void prepareFromMediaId(String mediaId, Bundle extras) { + if (TextUtils.isEmpty(mediaId)) { + throw new IllegalArgumentException( + "You must specify a non-empty String for prepareFromMediaId."); + } + try { + mSessionBinder.prepareFromMediaId(mediaId, extras); + } catch (RemoteException e) { + Log.wtf(TAG, "Error calling prepare(" + mediaId + ").", e); + } + } + + /** + * Request that the player prepare playback for a specific search query. + * An empty or null query should be treated as a request to prepare any + * music. Once the preparation is done, the session will change its playback state to + * {@link PlaybackState#STATE_PAUSED}. Afterwards, {@link #play} can be called to start + * playback. If the preparation is not needed, {@link #playFromSearch} can be directly + * called without this method. + * + * @param query The search query. + * @param extras Optional extras that can include extra information + * about the query. + */ + public void prepareFromSearch(String query, Bundle extras) { + if (query == null) { + // This is to remain compatible with + // INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH + query = ""; + } + try { + mSessionBinder.prepareFromSearch(query, extras); + } catch (RemoteException e) { + Log.wtf(TAG, "Error calling prepare(" + query + ").", e); + } + } + + /** + * Request that the player prepare playback for a specific {@link Uri}. + * Once the preparation is done, the session will change its playback state to + * {@link PlaybackState#STATE_PAUSED}. Afterwards, {@link #play} can be called to start + * playback. If the preparation is not needed, {@link #playFromUri} can be directly + * called without this method. + * + * @param uri The URI of the requested media. + * @param extras Optional extras that can include extra information about the media item + * to be prepared. + */ + public void prepareFromUri(Uri uri, Bundle extras) { + if (uri == null || Uri.EMPTY.equals(uri)) { + throw new IllegalArgumentException( + "You must specify a non-empty Uri for prepareFromUri."); + } + try { + mSessionBinder.prepareFromUri(uri, extras); + } catch (RemoteException e) { + Log.wtf(TAG, "Error calling prepare(" + uri + ").", e); + } + } + + /** * Request that the player start its playback at its current position. */ public void play() { @@ -605,7 +689,6 @@ public final class MediaController { /** * Request that the player start playback for a specific media id. * - * @see PlaybackState#EXTRA_PREPARE_ONLY * @param mediaId The id of the requested media. * @param extras Optional extras that can include extra information about the media item * to be played. @@ -627,10 +710,9 @@ public final class MediaController { * An empty or null query should be treated as a request to play any * music. * - * @see PlaybackState#EXTRA_PREPARE_ONLY * @param query The search query. * @param extras Optional extras that can include extra information - * about the query. + * about the query. */ public void playFromSearch(String query, Bundle extras) { if (query == null) { @@ -648,8 +730,7 @@ public final class MediaController { /** * Request that the player start playback for a specific {@link Uri}. * - * @see PlaybackState#EXTRA_PREPARE_ONLY - * @param uri The URI of the requested media. + * @param uri The URI of the requested media. * @param extras Optional extras that can include extra information about the media item * to be played. */ diff --git a/media/java/android/media/session/MediaSession.java b/media/java/android/media/session/MediaSession.java index 8c5b19c36f11..3b1b6c86ffcb 100644 --- a/media/java/android/media/session/MediaSession.java +++ b/media/java/android/media/session/MediaSession.java @@ -87,12 +87,6 @@ public final class MediaSession { public static final int FLAG_HANDLES_TRANSPORT_CONTROLS = 1 << 1; /** - * Set this flag on the session to indicate that it can handle - * the {@link PlaybackState#EXTRA_PREPARE_ONLY} field. - */ - public static final int FLAG_HANDLES_PREPARE_ONLY = 1 << 2; - - /** * System only flag for a session that needs to have priority over all other * sessions. This flag ensures this session will receive media button events * regardless of the current ordering in the system. @@ -106,7 +100,6 @@ public final class MediaSession { @IntDef(flag = true, value = { FLAG_HANDLES_MEDIA_BUTTONS, FLAG_HANDLES_TRANSPORT_CONTROLS, - FLAG_HANDLES_PREPARE_ONLY, FLAG_EXCLUSIVE_GLOBAL_PRIORITY }) public @interface SessionFlags { } @@ -519,6 +512,22 @@ public final class MediaSession { } } + private void dispatchPrepare() { + postToCallback(CallbackMessageHandler.MSG_PREPARE); + } + + private void dispatchPrepareFromMediaId(String mediaId, Bundle extras) { + postToCallback(CallbackMessageHandler.MSG_PREPARE_MEDIA_ID, mediaId, extras); + } + + private void dispatchPrepareFromSearch(String query, Bundle extras) { + postToCallback(CallbackMessageHandler.MSG_PREPARE_SEARCH, query, extras); + } + + private void dispatchPrepareFromUri(Uri uri, Bundle extras) { + postToCallback(CallbackMessageHandler.MSG_PREPARE_URI, uri, extras); + } + private void dispatchPlay() { postToCallback(CallbackMessageHandler.MSG_PLAY); } @@ -805,16 +814,49 @@ public final class MediaSession { } /** - * Override to handle requests to begin playback. + * Override to handle requests to prepare playback. The state of playback should be updated + * to {@link PlaybackState#STATE_PAUSED} after the preparation is done. Override + * {@link #onPlay} to handle requests for starting playback of prepared content. */ - public void onPlay() { + public void onPrepare() { } /** - * Override to handle requests to play a specific mediaId that was - * provided by your app's {@link MediaBrowserService}. + * Override to handle requests to prepare for playing a specific mediaId that was provided + * by your app's {@link MediaBrowserService}. The state of playback should be updated + * to {@link PlaybackState#STATE_PAUSED} after the preparation is done. The playback of + * the prepared content should start in the implementation of {@link #onPlay}. Override + * {@link #onPlayFromMediaId} to handle requests for starting playback without preparation. */ - public void onPlayFromMediaId(String mediaId, Bundle extras) { + public void onPrepareFromMediaId(String mediaId, Bundle extras) { + } + + /** + * Override to handle requests to prepare playback from a search query. An + * empty query indicates that the app may prepare any music. The + * implementation should attempt to make a smart choice about what to + * play. The state of playback should be updated to {@link PlaybackState#STATE_PAUSED} + * after the preparation is done. The playback of the prepared content should start + * in the implementation of {@link #onPlay}. Override {@link #onPlayFromSearch} + * to handle requests for starting playback without preparation. + */ + public void onPrepareFromSearch(String query, Bundle extras) { + } + + /** + * Override to handle requests to prepare a specific media item represented by a URI. + * The state of playback should be updated to {@link PlaybackState#STATE_PAUSED} + * after the preparation is done. The playback of the prepared content should start in + * the implementation of {@link #onPlay}. Override {@link #onPlayFromUri} to handle requests + * for starting playback without preparation. + */ + public void onPrepareFromUri(Uri uri, Bundle extras) { + } + + /** + * Override to handle requests to begin playback. + */ + public void onPlay() { } /** @@ -827,6 +869,13 @@ public final class MediaSession { } /** + * Override to handle requests to play a specific mediaId that was + * provided by your app's {@link MediaBrowserService}. + */ + public void onPlayFromMediaId(String mediaId, Bundle extras) { + } + + /** * Override to handle requests to play a specific media item represented by a URI. */ public void onPlayFromUri(Uri uri, Bundle extras) { @@ -937,6 +986,38 @@ public final class MediaSession { } @Override + public void onPrepare() { + MediaSession session = mMediaSession.get(); + if (session != null) { + session.dispatchPrepare(); + } + } + + @Override + public void onPrepareFromMediaId(String mediaId, Bundle extras) { + MediaSession session = mMediaSession.get(); + if (session != null) { + session.dispatchPrepareFromMediaId(mediaId, extras); + } + } + + @Override + public void onPrepareFromSearch(String query, Bundle extras) { + MediaSession session = mMediaSession.get(); + if (session != null) { + session.dispatchPrepareFromSearch(query, extras); + } + } + + @Override + public void onPrepareFromUri(Uri uri, Bundle extras) { + MediaSession session = mMediaSession.get(); + if (session != null) { + session.dispatchPrepareFromUri(uri, extras); + } + } + + @Override public void onPlay() { MediaSession session = mMediaSession.get(); if (session != null) { @@ -1162,24 +1243,28 @@ public final class MediaSession { private class CallbackMessageHandler extends Handler { - private static final int MSG_PLAY = 1; - private static final int MSG_PLAY_MEDIA_ID = 2; - private static final int MSG_PLAY_SEARCH = 3; - private static final int MSG_SKIP_TO_ITEM = 4; - private static final int MSG_PAUSE = 5; - private static final int MSG_STOP = 6; - private static final int MSG_NEXT = 7; - private static final int MSG_PREVIOUS = 8; - private static final int MSG_FAST_FORWARD = 9; - private static final int MSG_REWIND = 10; - private static final int MSG_SEEK_TO = 11; - private static final int MSG_RATE = 12; - private static final int MSG_CUSTOM_ACTION = 13; - private static final int MSG_MEDIA_BUTTON = 14; - private static final int MSG_COMMAND = 15; - private static final int MSG_ADJUST_VOLUME = 16; - private static final int MSG_SET_VOLUME = 17; - private static final int MSG_PLAY_URI = 18; + private static final int MSG_COMMAND = 1; + private static final int MSG_MEDIA_BUTTON = 2; + private static final int MSG_PREPARE = 3; + private static final int MSG_PREPARE_MEDIA_ID = 4; + private static final int MSG_PREPARE_SEARCH = 5; + private static final int MSG_PREPARE_URI = 6; + private static final int MSG_PLAY = 7; + private static final int MSG_PLAY_MEDIA_ID = 8; + private static final int MSG_PLAY_SEARCH = 9; + private static final int MSG_PLAY_URI = 10; + private static final int MSG_SKIP_TO_ITEM = 11; + private static final int MSG_PAUSE = 12; + private static final int MSG_STOP = 13; + private static final int MSG_NEXT = 14; + private static final int MSG_PREVIOUS = 15; + private static final int MSG_FAST_FORWARD = 16; + private static final int MSG_REWIND = 17; + private static final int MSG_SEEK_TO = 18; + private static final int MSG_RATE = 19; + private static final int MSG_CUSTOM_ACTION = 20; + private static final int MSG_ADJUST_VOLUME = 21; + private static final int MSG_SET_VOLUME = 22; private MediaSession.Callback mCallback; @@ -1210,6 +1295,25 @@ public final class MediaSession { public void handleMessage(Message msg) { VolumeProvider vp; switch (msg.what) { + case MSG_COMMAND: + Command cmd = (Command) msg.obj; + mCallback.onCommand(cmd.command, cmd.extras, cmd.stub); + break; + case MSG_MEDIA_BUTTON: + mCallback.onMediaButtonEvent((Intent) msg.obj); + break; + case MSG_PREPARE: + mCallback.onPrepare(); + break; + case MSG_PREPARE_MEDIA_ID: + mCallback.onPrepareFromMediaId((String) msg.obj, msg.getData()); + break; + case MSG_PREPARE_SEARCH: + mCallback.onPrepareFromSearch((String) msg.obj, msg.getData()); + break; + case MSG_PREPARE_URI: + mCallback.onPrepareFromUri((Uri) msg.obj, msg.getData()); + break; case MSG_PLAY: mCallback.onPlay(); break; @@ -1252,13 +1356,6 @@ public final class MediaSession { case MSG_CUSTOM_ACTION: mCallback.onCustomAction((String) msg.obj, msg.getData()); break; - case MSG_MEDIA_BUTTON: - mCallback.onMediaButtonEvent((Intent) msg.obj); - break; - case MSG_COMMAND: - Command cmd = (Command) msg.obj; - mCallback.onCommand(cmd.command, cmd.extras, cmd.stub); - break; case MSG_ADJUST_VOLUME: synchronized (mLock) { vp = mVolumeProvider; diff --git a/media/java/android/media/session/PlaybackState.java b/media/java/android/media/session/PlaybackState.java index 1079a1f9a107..1485cd782605 100644 --- a/media/java/android/media/session/PlaybackState.java +++ b/media/java/android/media/session/PlaybackState.java @@ -133,19 +133,32 @@ public final class PlaybackState implements Parcelable { public static final long ACTION_PLAY_FROM_URI = 1 << 13; /** - * Used as an optional boolean extra field in - * {@link MediaController.TransportControls#playFromMediaId}, - * {@link MediaController.TransportControls#playFromSearch}, and - * {@link MediaController.TransportControls#playFromUri}. Value of {@code true} overrides - * the default behavior of starting the playback after preparing. Check - * {@link MediaSession#FLAG_HANDLES_PREPARE_ONLY} to see if the media session supports this. + * Indicates this session supports the prepare command. * - * @see MediaSession#FLAG_HANDLES_PREPARE_ONLY - * @see MediaController.TransportControls#playFromMediaId - * @see MediaController.TransportControls#playFromSearch - * @see MediaController.TransportControls#playFromUri + * @see Builder#setActions(long) + */ + public static final long ACTION_PREPARE = 1 << 14; + + /** + * Indicates this session supports the prepare from media id command. + * + * @see Builder#setActions(long) + */ + public static final long ACTION_PREPARE_FROM_MEDIA_ID = 1 << 15; + + /** + * Indicates this session supports the prepare from search command. + * + * @see Builder#setActions(long) + */ + public static final long ACTION_PREPARE_FROM_SEARCH = 1 << 16; + + /** + * Indicates this session supports the prepare from URI command. + * + * @see Builder#setActions(long) */ - public static final String EXTRA_PREPARE_ONLY = "android.media.session.extra.PREPARE_ONLY"; + public static final long ACTION_PREPARE_FROM_URI = 1 << 17; /** * This is the default playback state and indicates that no media has been @@ -330,6 +343,10 @@ public final class PlaybackState implements Parcelable { * <li> {@link PlaybackState#STATE_REWINDING}</li> * <li> {@link PlaybackState#STATE_BUFFERING}</li> * <li> {@link PlaybackState#STATE_ERROR}</li> + * <li> {@link PlaybackState#STATE_CONNECTING}</li> + * <li> {@link PlaybackState#STATE_SKIPPING_TO_PREVIOUS}</li> + * <li> {@link PlaybackState#STATE_SKIPPING_TO_NEXT}</li> + * <li> {@link PlaybackState#STATE_SKIPPING_TO_QUEUE_ITEM}</li> * </ul> */ public int getState() { @@ -380,6 +397,10 @@ public final class PlaybackState implements Parcelable { * <li> {@link PlaybackState#ACTION_PLAY_FROM_SEARCH}</li> * <li> {@link PlaybackState#ACTION_SKIP_TO_QUEUE_ITEM}</li> * <li> {@link PlaybackState#ACTION_PLAY_FROM_URI}</li> + * <li> {@link PlaybackState#ACTION_PREPARE}</li> + * <li> {@link PlaybackState#ACTION_PREPARE_FROM_MEDIA_ID}</li> + * <li> {@link PlaybackState#ACTION_PREPARE_FROM_SEARCH}</li> + * <li> {@link PlaybackState#ACTION_PREPARE_FROM_URI}</li> * </ul> */ public long getActions() { @@ -831,6 +852,10 @@ public final class PlaybackState implements Parcelable { * <li> {@link PlaybackState#STATE_REWINDING}</li> * <li> {@link PlaybackState#STATE_BUFFERING}</li> * <li> {@link PlaybackState#STATE_ERROR}</li> + * <li> {@link PlaybackState#STATE_CONNECTING}</li> + * <li> {@link PlaybackState#STATE_SKIPPING_TO_PREVIOUS}</li> + * <li> {@link PlaybackState#STATE_SKIPPING_TO_NEXT}</li> + * <li> {@link PlaybackState#STATE_SKIPPING_TO_QUEUE_ITEM}</li> * </ul> * * @param state The current state of playback. @@ -870,6 +895,10 @@ public final class PlaybackState implements Parcelable { * <li> {@link PlaybackState#STATE_REWINDING}</li> * <li> {@link PlaybackState#STATE_BUFFERING}</li> * <li> {@link PlaybackState#STATE_ERROR}</li> + * <li> {@link PlaybackState#STATE_CONNECTING}</li> + * <li> {@link PlaybackState#STATE_SKIPPING_TO_PREVIOUS}</li> + * <li> {@link PlaybackState#STATE_SKIPPING_TO_NEXT}</li> + * <li> {@link PlaybackState#STATE_SKIPPING_TO_QUEUE_ITEM}</li> * </ul> * * @param state The current state of playback. @@ -900,6 +929,10 @@ public final class PlaybackState implements Parcelable { * <li> {@link PlaybackState#ACTION_PLAY_FROM_SEARCH}</li> * <li> {@link PlaybackState#ACTION_SKIP_TO_QUEUE_ITEM}</li> * <li> {@link PlaybackState#ACTION_PLAY_FROM_URI}</li> + * <li> {@link PlaybackState#ACTION_PREPARE}</li> + * <li> {@link PlaybackState#ACTION_PREPARE_FROM_MEDIA_ID}</li> + * <li> {@link PlaybackState#ACTION_PREPARE_FROM_SEARCH}</li> + * <li> {@link PlaybackState#ACTION_PREPARE_FROM_URI}</li> * </ul> * * @param actions The set of actions allowed. diff --git a/media/java/android/media/soundtrigger/SoundTriggerDetector.java b/media/java/android/media/soundtrigger/SoundTriggerDetector.java index 8f022db5b02e..df0961bd17d4 100644 --- a/media/java/android/media/soundtrigger/SoundTriggerDetector.java +++ b/media/java/android/media/soundtrigger/SoundTriggerDetector.java @@ -289,8 +289,8 @@ public final class SoundTriggerDetector { * @hide */ @Override - public void onDetected(SoundTrigger.RecognitionEvent event) { - Slog.d(TAG, "onDetected()" + event); + public void onGenericSoundTriggerDetected(SoundTrigger.GenericRecognitionEvent event) { + Slog.d(TAG, "onGenericSoundTriggerDetected()" + event); Message.obtain(mHandler, MSG_SOUND_TRIGGER_DETECTED, new EventPayload(event.triggerInData, event.captureAvailable, @@ -298,6 +298,11 @@ public final class SoundTriggerDetector { .sendToTarget(); } + @Override + public void onKeyphraseDetected(SoundTrigger.KeyphraseRecognitionEvent event) { + Slog.e(TAG, "Ignoring onKeyphraseDetected() called for " + event); + } + /** * @hide */ diff --git a/media/java/android/media/tv/TvContract.java b/media/java/android/media/tv/TvContract.java index 1c11842cf01c..a33219583e3c 100644 --- a/media/java/android/media/tv/TvContract.java +++ b/media/java/android/media/tv/TvContract.java @@ -16,6 +16,7 @@ package android.media.tv; +import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.SystemApi; import android.content.ComponentName; @@ -25,6 +26,7 @@ import android.content.Intent; import android.net.Uri; import android.os.IBinder; import android.provider.BaseColumns; +import android.text.TextUtils; import android.util.ArraySet; import java.util.ArrayList; @@ -53,6 +55,13 @@ public final class TvContract { /** The authority for the TV provider. */ public static final String AUTHORITY = "android.media.tv"; + /** + * Permission to read TV listings. This is required to read all the TV channel and program + * information available on the system. + * @hide + */ + public static final String PERMISSION_READ_TV_LISTINGS = "android.permission.READ_TV_LISTINGS"; + private static final String PATH_CHANNEL = "channel"; private static final String PATH_PROGRAM = "program"; private static final String PATH_RECORDED_PROGRAM = "recorded_program"; @@ -304,33 +313,28 @@ public final class TvContract { } /** - * Returns true, if {@code uri} is a channel URI. - * @hide + * Returns {@code true}, if {@code uri} is a channel URI. */ public static final boolean isChannelUri(Uri uri) { return isChannelUriForTunerInput(uri) || isChannelUriForPassthroughInput(uri); } /** - * Returns true, if {@code uri} is a channel URI for a tuner input. - * @hide + * Returns {@code true}, if {@code uri} is a channel URI for a tuner input. */ public static final boolean isChannelUriForTunerInput(Uri uri) { return isTvUri(uri) && isTwoSegmentUriStartingWith(uri, PATH_CHANNEL); } /** - * Returns true, if {@code uri} is a channel URI for a passthrough input. - * @hide + * Returns {@code true}, if {@code uri} is a channel URI for a pass-through input. */ - @SystemApi public static final boolean isChannelUriForPassthroughInput(Uri uri) { return isTvUri(uri) && isTwoSegmentUriStartingWith(uri, PATH_PASSTHROUGH); } /** - * Returns true, if {@code uri} is a program URI. - * @hide + * Returns {@code true}, if {@code uri} is a program URI. */ public static final boolean isProgramUri(Uri uri) { return isTvUri(uri) && isTwoSegmentUriStartingWith(uri, PATH_PROGRAM); @@ -962,8 +966,9 @@ public final class TvContract { * The title of this TV program. * * <p>If this program is an episodic TV show, it is recommended that the title is the series - * title and its related fields ({@link #COLUMN_SEASON_NUMBER}, - * {@link #COLUMN_EPISODE_NUMBER}, and {@link #COLUMN_EPISODE_TITLE}) are filled in. + * title and its related fields ({@link #COLUMN_SEASON_TITLE} and/or + * {@link #COLUMN_SEASON_DISPLAY_NUMBER}, {@link #COLUMN_SEASON_DISPLAY_NUMBER}, + * {@link #COLUMN_EPISODE_DISPLAY_NUMBER}, and {@link #COLUMN_EPISODE_TITLE}) are filled in. * * <p>Type: TEXT */ @@ -975,19 +980,65 @@ public final class TvContract { * <p>Can be empty. * * <p>Type: INTEGER + * + * @deprecated Use {@link #COLUMN_SEASON_DISPLAY_NUMBER} instead. */ + @Deprecated public static final String COLUMN_SEASON_NUMBER = "season_number"; /** + * The season display number of this TV program for episodic TV shows. + * + * <p>This is used to indicate the season number. (e.g. 1, 2 or 3) Note that the value + * does not necessarily be numeric. (e.g. 12B) + * + * <p>Can be empty. + * + * <p>Type: TEXT + */ + public static final String COLUMN_SEASON_DISPLAY_NUMBER = "season_display_number"; + + /** + * The title of the season for this TV program for episodic TV shows. + * + * <p>This is an optional field supplied only when the season has a special title + * (e.g. The Final Season). If provided, the applications should display it instead of + * {@link #COLUMN_SEASON_DISPLAY_NUMBER}, and should display it without alterations. + * (e.g. for "The Final Season", displayed string should be "The Final Season", not + * "Season The Final Season"). When displaying multiple programs, the order should be based + * on {@link #COLUMN_SEASON_DISPLAY_NUMBER}, even when {@link #COLUMN_SEASON_TITLE} exists. + * + * <p>Can be empty. + * + * <p>Type: TEXT + */ + public static final String COLUMN_SEASON_TITLE = "season_title"; + + /** * The episode number of this TV program for episodic TV shows. * * <p>Can be empty. * * <p>Type: INTEGER + * + * @deprecated Use {@link #COLUMN_EPISODE_DISPLAY_NUMBER} instead. */ + @Deprecated public static final String COLUMN_EPISODE_NUMBER = "episode_number"; /** + * The episode display number of this TV program for episodic TV shows. + * + * <p>This is used to indicate the episode number. (e.g. 1, 2 or 3) Note that the value + * does not necessarily be numeric. (e.g. 12B) + * + * <p>Can be empty. + * + * <p>Type: TEXT + */ + public static final String COLUMN_EPISODE_DISPLAY_NUMBER = "episode_display_number"; + + /** * The episode title of this TV program for episodic TV shows. * * <p>Can be empty. @@ -1325,7 +1376,11 @@ public final class TvContract { * @return an encoded genre string that can be inserted into the * {@link #COLUMN_BROADCAST_GENRE} or {@link #COLUMN_CANONICAL_GENRE} column. */ - public static String encode(String... genres) { + public static String encode(@NonNull String... genres) { + if (genres == null) { + // MNC and before will throw a NPE. + return null; + } StringBuilder sb = new StringBuilder(); String separator = ""; for (String genre : genres) { @@ -1360,8 +1415,9 @@ public final class TvContract { * {@link #COLUMN_BROADCAST_GENRE} or {@link #COLUMN_CANONICAL_GENRE} column. * @return genre strings. */ - public static String[] decode(String genres) { - if (genres.isEmpty()) { + public static String[] decode(@NonNull String genres) { + if (TextUtils.isEmpty(genres)) { + // MNC and before will throw a NPE for {@code null} genres. return EMPTY_STRING_ARRAY; } if (genres.indexOf(COMMA) == -1 && genres.indexOf(DOUBLE_QUOTE) == -1) { @@ -1458,8 +1514,9 @@ public final class TvContract { * The title of this recorded TV program. * * <p>If this recorded program is an episodic TV show, it is recommended that the title is - * the series title and its related fields ({@link #COLUMN_SEASON_NUMBER}, - * {@link #COLUMN_EPISODE_NUMBER}, and {@link #COLUMN_EPISODE_TITLE}) are filled in. + * the series title and its related fields ({@link #COLUMN_SEASON_TITLE} and/or + * {@link #COLUMN_SEASON_DISPLAY_NUMBER}, {@link #COLUMN_EPISODE_DISPLAY_NUMBER}, + * and {@link #COLUMN_EPISODE_TITLE}) are filled in. * * <p>Type: TEXT * @see Programs#COLUMN_TITLE @@ -1467,24 +1524,46 @@ public final class TvContract { public static final String COLUMN_TITLE = Programs.COLUMN_TITLE; /** - * The season number of this recorded TV program for episodic TV shows. + * The season display number of this recorded TV program for episodic TV shows. + * + * <p>This is used to indicate the season number. (e.g. 1, 2 or 3) Note that the value + * does not necessarily be numeric. (e.g. 12B) * * <p>Can be empty. * - * <p>Type: INTEGER - * @see Programs#COLUMN_SEASON_NUMBER + * <p>Type: TEXT */ - public static final String COLUMN_SEASON_NUMBER = Programs.COLUMN_SEASON_NUMBER; + public static final String COLUMN_SEASON_DISPLAY_NUMBER = + Programs.COLUMN_SEASON_DISPLAY_NUMBER; /** - * The episode number of this recorded TV program for episodic TV shows. + * The title of the season for this recorded TV program for episodic TV shows. + * + * <p>This is an optional field supplied only when the season has a special title + * (e.g. The Final Season). If provided, the applications should display it instead of + * {@link #COLUMN_SEASON_DISPLAY_NUMBER} without alterations. + * (e.g. for "The Final Season", displayed string should be "The Final Season", not + * "Season The Final Season"). When displaying multiple programs, the order should be based + * on {@link #COLUMN_SEASON_DISPLAY_NUMBER}, even when {@link #COLUMN_SEASON_TITLE} exists. * * <p>Can be empty. * - * <p>Type: INTEGER - * @see Programs#COLUMN_EPISODE_NUMBER + * <p>Type: TEXT + */ + public static final String COLUMN_SEASON_TITLE = Programs.COLUMN_SEASON_TITLE; + + /** + * The episode display number of this recorded TV program for episodic TV shows. + * + * <p>This is used to indicate the episode number. (e.g. 1, 2 or 3) Note that the value + * does not necessarily be numeric. (e.g. 12B) + * + * <p>Can be empty. + * + * <p>Type: TEXT */ - public static final String COLUMN_EPISODE_NUMBER = Programs.COLUMN_EPISODE_NUMBER; + public static final String COLUMN_EPISODE_DISPLAY_NUMBER = + Programs.COLUMN_EPISODE_DISPLAY_NUMBER; /** * The episode title of this recorded TV program for episodic TV shows. diff --git a/media/java/android/media/tv/TvInputInfo.java b/media/java/android/media/tv/TvInputInfo.java index f0a94268d533..b8a1374ff077 100644 --- a/media/java/android/media/tv/TvInputInfo.java +++ b/media/java/android/media/tv/TvInputInfo.java @@ -113,14 +113,14 @@ public final class TvInputInfo implements Parcelable { private final String mId; private final String mParentId; private final int mType; - private final int mTunerCount; - private final boolean mCanRecord; private final boolean mIsHardwareInput; private final Bundle mExtras; // Attributes from XML meta data. private String mSetupActivity; private String mSettingsActivity; + private boolean mCanRecord; + private int mTunerCount; private HdmiDeviceInfo mHdmiDeviceInfo; private int mLabelResId; @@ -250,21 +250,17 @@ public final class TvInputInfo implements Parcelable { * {@code false} otherwise. * @param isConnectedToHdmiSwitch Whether a CEC device for this TV input is connected to an HDMI * switch, i.e., the device isn't directly connected to a HDMI port. - * @param tunerCount The number of tuners this TV input has. - * @param canRecord Whether this TV input can record TV programs. */ private TvInputInfo(ResolveInfo service, String id, String parentId, int type, - boolean isHardwareInput, boolean isConnectedToHdmiSwitch, int tunerCount, - boolean canRecord, Bundle extras) { + boolean isHardwareInput, boolean isConnectedToHdmiSwitch, Bundle extras) { mService = service; mId = id; mParentId = parentId; mType = type; mIsHardwareInput = isHardwareInput; mIsConnectedToHdmiSwitch = isConnectedToHdmiSwitch; - mTunerCount = tunerCount; - mCanRecord = canRecord; mExtras = extras; + mTunerCount = type == TYPE_TUNER ? 1 : 0; } /** @@ -791,19 +787,17 @@ public final class TvInputInfo implements Parcelable { type = TYPE_HDMI; isHardwareInput = true; isConnectedToHdmiSwitch = (mHdmiDeviceInfo.getPhysicalAddress() & 0x0FFF) != 0; - mTunerCount = 0; } else if (mTvInputHardwareInfo != null) { id = generateInputId(componentName, mTvInputHardwareInfo); type = sHardwareTypeToTvInputType.get(mTvInputHardwareInfo.getType(), TYPE_TUNER); isHardwareInput = true; - mTunerCount = 0; } else { id = generateInputId(componentName); type = TYPE_TUNER; } TvInputInfo info = new TvInputInfo(mResolveInfo, id, mParentId, type, isHardwareInput, - isConnectedToHdmiSwitch, mTunerCount, mCanRecord, mExtras); + isConnectedToHdmiSwitch, mExtras); return parseServiceMetadata(type, info); } @@ -868,6 +862,12 @@ public final class TvInputInfo implements Parcelable { Log.d(TAG, "Settings activity loaded. [" + info.mSettingsActivity + "] for " + si.name); } + info.mCanRecord = sa.getBoolean( + com.android.internal.R.styleable.TvInputService_canRecord, false); + info.mTunerCount = sa.getInt( + com.android.internal.R.styleable.TvInputService_tunerCount, + info.mTunerCount); + sa.recycle(); } catch (NameNotFoundException e) { throw new XmlPullParserException("Unable to create context for: " + si.packageName); diff --git a/media/java/android/media/tv/TvInputManager.java b/media/java/android/media/tv/TvInputManager.java index 51aae9083fad..7089c0074c76 100644 --- a/media/java/android/media/tv/TvInputManager.java +++ b/media/java/android/media/tv/TvInputManager.java @@ -731,9 +731,7 @@ public final class TvInputManager { * * <p>Because the system automatically creates a <code>TvInputInfo</code> object for each TV * input based on the information collected from the <code>AndroidManifest.xml</code>, this - * method is only called back when such information has changed dynamically or when the TV - * input service implementation wants to pass additional information that is not specified - * by the manifest file, such as ability to record and tuner count. + * method is only called back when such information has changed dynamically. * * @param inputInfo The <code>TvInputInfo</code> object that contains new information. */ diff --git a/media/java/android/media/tv/TvInputService.java b/media/java/android/media/tv/TvInputService.java index da4a03832191..db851a31d363 100644 --- a/media/java/android/media/tv/TvInputService.java +++ b/media/java/android/media/tv/TvInputService.java @@ -262,10 +262,8 @@ public abstract class TvInputService extends Service { * * <p>The system automatically creates a <code>TvInputInfo</code> object for each TV input, * based on the information collected from the <code>AndroidManifest.xml</code>, thus it is not - * necessary to call this method unless such information has changed dynamically. This may be - * also used to pass additional information that is not specified by the manifest file, such as - * ability to record and tuner count. Use {@link TvInputInfo.Builder} to build a new - * <code>TvInputInfo</code> object. + * necessary to call this method unless such information has changed dynamically. + * Use {@link TvInputInfo.Builder} to build a new <code>TvInputInfo</code> object. * * <p>Attempting to change information about a TV input that the calling package does not own * does nothing. diff --git a/media/jni/android_media_ImageReader.cpp b/media/jni/android_media_ImageReader.cpp index 4ac62f57a719..9e90a19f00cc 100644 --- a/media/jni/android_media_ImageReader.cpp +++ b/media/jni/android_media_ImageReader.cpp @@ -1264,6 +1264,14 @@ static jint Image_getFormat(JNIEnv* env, jobject thiz, jint readerFormat) int readerHalFormat = android_view_Surface_mapPublicFormatToHalFormat( static_cast<PublicFormat>(readerFormat)); int32_t fmt = applyFormatOverrides(buffer->flexFormat, readerHalFormat); + // Override the image format to HAL_PIXEL_FORMAT_YCbCr_420_888 if the actual format is + // NV21 or YV12. This could only happen when the Gralloc HAL version is v0.1 thus doesn't + // support lockycbcr(), the CpuConsumer need to use the lock() method in the + // lockNextBuffer() call. For Gralloc HAL v0.2 or newer, this format should already be + // overridden to HAL_PIXEL_FORMAT_YCbCr_420_888 for the flexible YUV compatible formats. + if (fmt == HAL_PIXEL_FORMAT_YCrCb_420_SP || fmt == HAL_PIXEL_FORMAT_YV12) { + fmt = HAL_PIXEL_FORMAT_YCbCr_420_888; + } PublicFormat publicFmt = android_view_Surface_mapHalFormatDataspaceToPublicFormat( fmt, buffer->dataSpace); return static_cast<jint>(publicFmt); diff --git a/packages/DocumentsUI/AndroidManifest.xml b/packages/DocumentsUI/AndroidManifest.xml index 58e77094a7c0..637e06e1668d 100644 --- a/packages/DocumentsUI/AndroidManifest.xml +++ b/packages/DocumentsUI/AndroidManifest.xml @@ -1,6 +1,7 @@ <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.documentsui"> + <uses-permission android:name="android.permission.GET_APP_GRANTED_URI_PERMISSIONS" /> <uses-permission android:name="android.permission.MANAGE_DOCUMENTS" /> <uses-permission android:name="android.permission.REMOVE_TASKS" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> diff --git a/packages/DocumentsUI/res/layout/item_dir_grid.xml b/packages/DocumentsUI/res/layout/item_dir_grid.xml index d866145dc4a6..a4f06d1cefe8 100644 --- a/packages/DocumentsUI/res/layout/item_dir_grid.xml +++ b/packages/DocumentsUI/res/layout/item_dir_grid.xml @@ -62,7 +62,7 @@ android:id="@android:id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:ellipsize="middle" + android:ellipsize="end" android:singleLine="true" android:textAlignment="viewStart" android:textAppearance="@android:style/TextAppearance.Material.Subhead" diff --git a/packages/DocumentsUI/res/layout/item_doc_grid.xml b/packages/DocumentsUI/res/layout/item_doc_grid.xml index 1890f2fd1089..af1703fbe423 100644 --- a/packages/DocumentsUI/res/layout/item_doc_grid.xml +++ b/packages/DocumentsUI/res/layout/item_doc_grid.xml @@ -90,7 +90,7 @@ android:layout_alignParentTop="true" android:layout_toEndOf="@id/icon_mime_sm" android:singleLine="true" - android:ellipsize="middle" + android:ellipsize="end" android:textAlignment="viewStart" android:textAppearance="@android:style/TextAppearance.Material.Subhead" android:textColor="@*android:color/primary_text_default_material_light" /> diff --git a/packages/DocumentsUI/res/layout/item_doc_list.xml b/packages/DocumentsUI/res/layout/item_doc_list.xml index 8d9837719fd7..b169ec89320a 100644 --- a/packages/DocumentsUI/res/layout/item_doc_list.xml +++ b/packages/DocumentsUI/res/layout/item_doc_list.xml @@ -80,7 +80,7 @@ android:layout_width="wrap_content" android:layout_height="0dp" android:layout_weight="1" - android:ellipsize="middle" + android:ellipsize="end" android:singleLine="true" android:textAlignment="viewStart" android:textAppearance="@android:style/TextAppearance.Material.Subhead" diff --git a/packages/DocumentsUI/res/layout/item_subdir.xml b/packages/DocumentsUI/res/layout/item_subdir.xml index 821432d96799..b8251d1eb865 100644 --- a/packages/DocumentsUI/res/layout/item_subdir.xml +++ b/packages/DocumentsUI/res/layout/item_subdir.xml @@ -40,7 +40,7 @@ android:layout_height="wrap_content" android:layout_weight="1" android:singleLine="true" - android:ellipsize="middle" + android:ellipsize="end" android:textAlignment="viewStart" android:textAppearance="@android:style/TextAppearance.Material.Subhead" android:textColor="?android:attr/textColorPrimary" /> diff --git a/packages/DocumentsUI/res/layout/item_subdir_title.xml b/packages/DocumentsUI/res/layout/item_subdir_title.xml index 4c839d0ace20..de6c5234b47b 100644 --- a/packages/DocumentsUI/res/layout/item_subdir_title.xml +++ b/packages/DocumentsUI/res/layout/item_subdir_title.xml @@ -26,7 +26,7 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" - android:ellipsize="middle" + android:ellipsize="end" android:textAlignment="viewStart" android:textAppearance="@android:style/TextAppearance.DeviceDefault.Widget.ActionBar.Title" /> diff --git a/packages/DocumentsUI/res/values-ro/strings.xml b/packages/DocumentsUI/res/values-ro/strings.xml index 565a4e97f01c..ee0e8834df64 100644 --- a/packages/DocumentsUI/res/values-ro/strings.xml +++ b/packages/DocumentsUI/res/values-ro/strings.xml @@ -117,5 +117,5 @@ <string name="rename_error" msgid="4203041674883412606">"Documentul nu a putut fi redenumit"</string> <string name="notification_copy_files_converted_title" msgid="3153573223054275181">"Unele fișiere au fost convertite"</string> <string name="allow" msgid="7225948811296386551">"Permiteți"</string> - <string name="deny" msgid="2081879885755434506">"Refuzaţi"</string> + <string name="deny" msgid="2081879885755434506">"Refuzați"</string> </resources> diff --git a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java index b67a6915add9..95c49ffe8a92 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/BaseActivity.java @@ -23,15 +23,16 @@ import static com.android.documentsui.dirlist.DirectoryFragment.ANIM_LEAVE; import static com.android.documentsui.dirlist.DirectoryFragment.ANIM_NONE; import static com.android.documentsui.dirlist.DirectoryFragment.ANIM_SIDE; import static com.android.internal.util.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkState; import android.app.Activity; import android.app.Fragment; +import android.app.FragmentManager; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ProviderInfo; -import android.database.Cursor; import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; @@ -46,7 +47,7 @@ import android.view.Menu; import android.view.MenuItem; import android.widget.Spinner; -import com.android.documentsui.SearchManager.SearchManagerListener; +import com.android.documentsui.SearchViewManager.SearchManagerListener; import com.android.documentsui.State.ViewMode; import com.android.documentsui.dirlist.DirectoryFragment; import com.android.documentsui.dirlist.Model; @@ -64,14 +65,9 @@ import java.util.concurrent.Executor; public abstract class BaseActivity extends Activity implements SearchManagerListener, NavigationView.Environment { - static final String EXTRA_STATE = "state"; - - // See comments where this const is referenced for details. - private static final int DRAWER_NO_FIDDLE_DELAY = 1500; - State mState; RootsCache mRoots; - SearchManager mSearchManager; + SearchViewManager mSearchManager; DrawerController mDrawer; NavigationView mNavigator; @@ -80,10 +76,6 @@ public abstract class BaseActivity extends Activity @LayoutRes private int mLayoutId; - // Track the time we opened the drawer in response to back being pressed. - // We use the time gap to figure out whether to close app or reopen the drawer. - private long mDrawerLastFiddled; - private boolean mNavDrawerHasFocus; public abstract void onDocumentPicked(DocumentInfo doc, Model model); @@ -121,7 +113,7 @@ public abstract class BaseActivity extends Activity } }); - mSearchManager = new SearchManager(this); + mSearchManager = new SearchViewManager(this, icicle); DocumentsToolbar toolbar = (DocumentsToolbar) findViewById(R.id.toolbar); setActionBar(toolbar); @@ -141,6 +133,7 @@ public abstract class BaseActivity extends Activity boolean showMenu = super.onCreateOptionsMenu(menu); getMenuInflater().inflate(R.menu.activity, menu); + mNavigator.update(); mSearchManager.install((DocumentsToolbar) findViewById(R.id.toolbar)); return showMenu; @@ -188,7 +181,7 @@ public abstract class BaseActivity extends Activity private State getState(@Nullable Bundle icicle) { if (icicle != null) { - State state = icicle.<State>getParcelable(EXTRA_STATE); + State state = icicle.<State>getParcelable(Shared.EXTRA_STATE); if (DEBUG) Log.d(mTag, "Recovered existing state object: " + state); return state; } @@ -224,6 +217,9 @@ public abstract class BaseActivity extends Activity } void onRootPicked(RootInfo root) { + // Clicking on the current root removes search + mSearchManager.cancelSearch(); + // Skip refreshing if root nor directory didn't change if (root.equals(getCurrentRoot()) && mState.stack.size() == 1) { return; @@ -233,7 +229,6 @@ public abstract class BaseActivity extends Activity // Clear entire backstack and start in new root mState.onRootChanged(root); - mSearchManager.update(root); // Recents is always in memory, so we just load it directly. // Otherwise we delegate loading data from disk to a task @@ -314,6 +309,12 @@ public abstract class BaseActivity extends Activity CreateDirectoryFragment.show(getFragmentManager()); } + void onDirectoryCreated(DocumentInfo doc) { + // By default we do nothing, just let the new directory appear. + // DocumentsActivity auto-opens directories after creating them + // As that is more attuned to the "picker" use cases it supports. + } + /** * Returns true if a directory can be created in the current location. * @return @@ -328,11 +329,6 @@ public abstract class BaseActivity extends Activity && !root.isDownloads(); } - void onDirectoryCreated(DocumentInfo doc) { - checkArgument(doc.isDirectory()); - openContainerDocument(doc); - } - void openContainerDocument(DocumentInfo doc) { checkArgument(doc.isContainer()); mState.pushDocument(doc); @@ -364,24 +360,29 @@ public abstract class BaseActivity extends Activity invalidateOptionsMenu(); } + final void loadRoot(final Uri uri) { + new LoadRootTask(this, uri).executeOnExecutor( + ProviderExecutor.forAuthority(uri.getAuthority())); + } + /** * Called when search results changed. * Refreshes the content of the directory. It doesn't refresh elements on the action bar. * e.g. The current directory name displayed on the action bar won't get updated. */ @Override - public void onSearchChanged() { - refreshDirectory(ANIM_NONE); + public void onSearchChanged(@Nullable String query) { + // We should not get here if root is not searchable + checkState(canSearchRoot()); + reloadSearch(query); } - /** - * Called when search query changed. - * Updates the state object. - * @param query - New query - */ - @Override - public void onSearchQueryChanged(String query) { - mState.currentSearch = query; + private void reloadSearch(String query) { + FragmentManager fm = getFragmentManager(); + RootInfo root = getCurrentRoot(); + DocumentInfo cwd = getCurrentDirectory(); + + DirectoryFragment.reloadSearch(fm, root, cwd, query); } final List<String> getExcludedAuthorities() { @@ -486,7 +487,8 @@ public abstract class BaseActivity extends Activity @Override protected void onSaveInstanceState(Bundle state) { super.onSaveInstanceState(state); - state.putParcelable(EXTRA_STATE, mState); + state.putParcelable(Shared.EXTRA_STATE, mState); + mSearchManager.onSaveInstanceState(state); } @Override @@ -538,36 +540,18 @@ public abstract class BaseActivity extends Activity return; } - int size = mState.stack.size(); - - // Do some "do what a I want" drawer fiddling, but don't - // do it if user already hit back recently and we recently - // did some fiddling. - if (mDrawer.isPresent() - && (System.currentTimeMillis() - mDrawerLastFiddled) > DRAWER_NO_FIDDLE_DELAY) { - // Close drawer if it is open. - if (mDrawer.isOpen()) { - mDrawer.setOpen(false); - mDrawerLastFiddled = System.currentTimeMillis(); - return; - } - - // Open the Close drawer if it is closed and we're at the top of a root. - if (size == 1) { - mDrawer.setOpen(true); - // Remember so we don't just close it again if back is pressed again. - mDrawerLastFiddled = System.currentTimeMillis(); - return; - } - } - - if (popDir()) { + if (onBeforePopDir() || popDir()) { return; } super.onBackPressed(); } + boolean onBeforePopDir() { + // Files app overrides this with some fancy logic. + return false; + } + public void onStackPicked(DocumentStack stack) { try { // Update the restored stack to ensure we have freshest data diff --git a/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java b/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java index b0542b9eb5be..13b7b14600eb 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DirectoryLoader.java @@ -53,19 +53,22 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { private final RootInfo mRoot; private final Uri mUri; private final int mUserSortOrder; + private final boolean mSearchMode; private DocumentInfo mDoc; private CancellationSignal mSignal; private DirectoryResult mResult; + public DirectoryLoader(Context context, int type, RootInfo root, DocumentInfo doc, Uri uri, - int userSortOrder) { + int userSortOrder, boolean inSearchMode) { super(context, ProviderExecutor.forAuthority(root.authority)); mType = type; mRoot = root; mUri = uri; mUserSortOrder = userSortOrder; mDoc = doc; + mSearchMode = inSearchMode; } @Override @@ -83,7 +86,7 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { final DirectoryResult result = new DirectoryResult(); // Use default document when searching - if (mType == DirectoryFragment.TYPE_SEARCH) { + if (mSearchMode) { final Uri docUri = DocumentsContract.buildDocumentUri( mRoot.authority, mRoot.documentId); try { @@ -106,7 +109,7 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { } // Search always uses ranking from provider - if (mType == DirectoryFragment.TYPE_SEARCH) { + if (mSearchMode) { result.sortOrder = State.SORT_ORDER_UNKNOWN; } @@ -127,7 +130,7 @@ public class DirectoryLoader extends AsyncTaskLoader<DirectoryResult> { cursor = new RootCursorWrapper(mUri.getAuthority(), mRoot.rootId, cursor, -1); - if (mType == DirectoryFragment.TYPE_SEARCH) { + if (mSearchMode) { // Filter directories out of search results, for now cursor = new FilteringCursorWrapper(cursor, null, SEARCH_REJECT_MIMES); } diff --git a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java index ec7dde9230c4..ed531a8e1be3 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DocumentsActivity.java @@ -23,6 +23,7 @@ import static com.android.documentsui.State.ACTION_OPEN; import static com.android.documentsui.State.ACTION_OPEN_TREE; import static com.android.documentsui.State.ACTION_PICK_COPY_DESTINATION; import static com.android.documentsui.dirlist.DirectoryFragment.ANIM_NONE; +import static com.android.internal.util.Preconditions.checkArgument; import android.app.Activity; import android.app.Fragment; @@ -94,13 +95,27 @@ public class DocumentsActivity extends BaseActivity { RootsFragment.show(getFragmentManager(), null); } - if (!mState.restored) { - // In this case, we set the activity title in AsyncTask.onPostExecute(). To prevent - // talkback from reading aloud the default title, we clear it here. - setTitle(""); - new RestoreStackTask(this).execute(); - } else { + if (mState.restored) { refreshCurrentRootAndDirectory(ANIM_NONE); + } else { + // We set the activity title in AsyncTask.onPostExecute(). + // To prevent talkback from reading aloud the default title, we clear it here. + setTitle(""); + + // As a matter of policy we don't load the last used stack for the copy + // destination picker (user is already in Files app). + // Concensus was that the experice was too confusing. + // In all other cases, where the user is visiting us from another app + // we restore the stack as last used from that app. + if (mState.action == ACTION_PICK_COPY_DESTINATION) { + if (DEBUG) Log.d(TAG, "Launching directly into Home directory."); + Uri homeUri = DocumentsContract.buildHomeUri(); + new LoadRootTask(this, homeUri).executeOnExecutor( + ProviderExecutor.forAuthority(homeUri.getAuthority())); + } else { + if (DEBUG) Log.d(TAG, "Attempting to load last used stack for calling package."); + new LoadLastUsedStackTask(this).execute(); + } } } @@ -290,13 +305,8 @@ public class DocumentsActivity extends BaseActivity { mState.derivedMode = visualMimes ? State.MODE_GRID : State.MODE_LIST; } } else { - if (mSearchManager.isSearching()) { - // Ongoing search - DirectoryFragment.showSearch(fm, root, mState.currentSearch, anim); - } else { // Normal boring directory DirectoryFragment.showDirectory(fm, root, cwd, anim); - } } // Forget any replacement target @@ -321,6 +331,12 @@ public class DocumentsActivity extends BaseActivity { .executeOnExecutor(getExecutorForCurrentDirectory()); } + @Override + void onDirectoryCreated(DocumentInfo doc) { + checkArgument(doc.isDirectory()); + openContainerDocument(doc); + } + void onSaveRequested(String mimeType, String displayName) { new CreateFinishTask(this, mimeType, displayName) .executeOnExecutor(getExecutorForCurrentDirectory()); @@ -441,16 +457,19 @@ public class DocumentsActivity extends BaseActivity { } /** - * Restores the stack from Recents for the specified package. + * Loads the last used path (stack) from Recents (history). + * The path selected is based on the calling package name. So the last + * path for an app like Gmail can be different than the last path + * for an app like DropBox. */ - private static final class RestoreStackTask + private static final class LoadLastUsedStackTask extends PairedTask<DocumentsActivity, Void, Void> { private volatile boolean mRestoredStack; private volatile boolean mExternal; private State mState; - public RestoreStackTask(DocumentsActivity activity) { + public LoadLastUsedStackTask(DocumentsActivity activity) { super(activity); mState = activity.mState; } diff --git a/packages/DocumentsUI/src/com/android/documentsui/DownloadsActivity.java b/packages/DocumentsUI/src/com/android/documentsui/DownloadsActivity.java index f7a45e218a82..536feeb4ecc8 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/DownloadsActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/DownloadsActivity.java @@ -16,8 +16,10 @@ package com.android.documentsui; +import static com.android.documentsui.Shared.DEBUG; import static com.android.documentsui.State.ACTION_MANAGE; import static com.android.documentsui.dirlist.DirectoryFragment.ANIM_NONE; +import static com.android.internal.util.Preconditions.checkState; import android.app.Activity; import android.app.Fragment; @@ -69,7 +71,7 @@ public class DownloadsActivity extends BaseActivity { // talkback from reading aloud the default title, we clear it here. setTitle(""); final Uri rootUri = getIntent().getData(); - new RestoreRootTask(this, rootUri).executeOnExecutor(getExecutorForCurrentDirectory()); + new LoadRootTask(this, rootUri).executeOnExecutor(getExecutorForCurrentDirectory()); } else { refreshCurrentRootAndDirectory(ANIM_NONE); } @@ -119,17 +121,14 @@ public class DownloadsActivity extends BaseActivity { final RootInfo root = getCurrentRoot(); final DocumentInfo cwd = getCurrentDirectory(); + if (DEBUG) checkState(!mSearchManager.isSearching()); + // If started in manage roots mode, there has to be a cwd (i.e. the root dir of the managed // root). Preconditions.checkNotNull(cwd); - if (mState.currentSearch != null) { - // Ongoing search - DirectoryFragment.showSearch(fm, root, mState.currentSearch, anim); - } else { - // Normal boring directory - DirectoryFragment.showDirectory(fm, root, cwd, anim); - } + // Normal boring directory + DirectoryFragment.showDirectory(fm, root, cwd, anim); } @Override diff --git a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java index c0faba306f6e..a3378ad7e3bd 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java @@ -33,7 +33,6 @@ import android.net.Uri; import android.os.Bundle; import android.os.Parcelable; import android.provider.DocumentsContract; -import android.support.annotation.Nullable; import android.support.design.widget.Snackbar; import android.util.Log; import android.view.KeyEvent; @@ -63,6 +62,12 @@ public class FilesActivity extends BaseActivity { public static final String TAG = "FilesActivity"; + // See comments where this const is referenced for details. + private static final int DRAWER_NO_FIDDLE_DELAY = 1500; + + // Track the time we opened the drawer in response to back being pressed. + // We use the time gap to figure out whether to close app or reopen the drawer. + private long mDrawerLastFiddled; private DocumentClipper mClipper; public FilesActivity() { @@ -82,7 +87,6 @@ public class FilesActivity extends BaseActivity { if (mState.restored) { if (DEBUG) Log.d(TAG, "Stack already resolved for uri: " + intent.getData()); - refreshCurrentRootAndDirectory(ANIM_NONE); } else if (!mState.stack.isEmpty()) { // If a non-empty stack is present in our state it was read (presumably) // from EXTRA_STACK intent extra. In this case, we'll skip other means of @@ -104,14 +108,12 @@ public class FilesActivity extends BaseActivity { if (DEBUG) Log.d(TAG, "Launching with root URI."); // If we've got a specific root to display, restore that root using a dedicated // authority. That way a misbehaving provider won't result in an ANR. - new RestoreRootTask(this, uri).executeOnExecutor( - ProviderExecutor.forAuthority(uri.getAuthority())); + loadRoot(uri); } else { if (DEBUG) Log.d(TAG, "Launching into Home directory."); // If all else fails, try to load "Home" directory. final Uri homeUri = DocumentsContract.buildHomeUri(); - new RestoreRootTask(this, homeUri).executeOnExecutor( - ProviderExecutor.forAuthority(homeUri.getAuthority())); + loadRoot(homeUri); } final @DialogType int dialogType = intent.getIntExtra( @@ -248,16 +250,13 @@ public class FilesActivity extends BaseActivity { final RootInfo root = getCurrentRoot(); final DocumentInfo cwd = getCurrentDirectory(); + if (DEBUG) checkState(!mSearchManager.isSearching()); + if (cwd == null) { DirectoryFragment.showRecentsOpen(fm, anim); } else { - if (mState.currentSearch != null) { - // Ongoing search - DirectoryFragment.showSearch(fm, root, mState.currentSearch, anim); - } else { - // Normal boring directory - DirectoryFragment.showDirectory(fm, root, cwd, anim); - } + // Normal boring directory + DirectoryFragment.showDirectory(fm, root, cwd, anim); } } @@ -345,6 +344,34 @@ public class FilesActivity extends BaseActivity { } } + // Do some "do what a I want" drawer fiddling, but don't + // do it if user already hit back recently and we recently + // did some fiddling. + @Override + boolean onBeforePopDir() { + int size = mState.stack.size(); + + if (mDrawer.isPresent() + && (System.currentTimeMillis() - mDrawerLastFiddled) > DRAWER_NO_FIDDLE_DELAY) { + // Close drawer if it is open. + if (mDrawer.isOpen()) { + mDrawer.setOpen(false); + mDrawerLastFiddled = System.currentTimeMillis(); + return true; + } + + // Open the Close drawer if it is closed and we're at the top of a root. + if (size == 1) { + mDrawer.setOpen(true); + // Remember so we don't just close it again if back is pressed again. + mDrawerLastFiddled = System.currentTimeMillis(); + return true; + } + } + + return false; + } + // Turns out only DocumentsActivity was ever calling saveStackBlocking. // There may be a case where we want to contribute entries from // Behavior here in FilesActivity, but it isn't yet obvious. diff --git a/packages/DocumentsUI/src/com/android/documentsui/RestoreRootTask.java b/packages/DocumentsUI/src/com/android/documentsui/LoadRootTask.java index 9048b9d45ee7..c5d359b1246b 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/RestoreRootTask.java +++ b/packages/DocumentsUI/src/com/android/documentsui/LoadRootTask.java @@ -22,12 +22,12 @@ import android.util.Log; import com.android.documentsui.model.RootInfo; -final class RestoreRootTask extends PairedTask<BaseActivity, Void, RootInfo> { +final class LoadRootTask extends PairedTask<BaseActivity, Void, RootInfo> { private static final String TAG = "RestoreRootTask"; private final Uri mRootUri; - public RestoreRootTask(BaseActivity activity, Uri rootUri) { + public LoadRootTask(BaseActivity activity, Uri rootUri) { super(activity); mRootUri = rootUri; } diff --git a/packages/DocumentsUI/src/com/android/documentsui/OpenExternalDirectoryActivity.java b/packages/DocumentsUI/src/com/android/documentsui/OpenExternalDirectoryActivity.java index 025faea78ce6..27d6797fdce6 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/OpenExternalDirectoryActivity.java +++ b/packages/DocumentsUI/src/com/android/documentsui/OpenExternalDirectoryActivity.java @@ -22,6 +22,7 @@ import static android.os.storage.StorageVolume.EXTRA_STORAGE_VOLUME; import static com.android.documentsui.Shared.DEBUG; import android.app.Activity; +import android.app.ActivityManager; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; @@ -33,6 +34,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.DialogInterface.OnClickListener; import android.content.Intent; +import android.content.UriPermission; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.net.Uri; @@ -62,6 +64,8 @@ public class OpenExternalDirectoryActivity extends Activity { private static final String EXTRA_APP_LABEL = "com.android.documentsui.APP_LABEL"; private static final String EXTRA_VOLUME_LABEL = "com.android.documentsui.VOLUME_LABEL"; + private ContentProviderClient mExternalStorageClient; + @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); @@ -98,12 +102,20 @@ public class OpenExternalDirectoryActivity extends Activity { } } + @Override + public void onDestroy() { + super.onDestroy(); + if (mExternalStorageClient != null) { + mExternalStorageClient.close(); + } + } + /** * Validates the given path (volume + directory) and display the appropriate dialog asking the * user to grant access to it. */ - private static boolean showFragment(Activity activity, int userId, StorageVolume storageVolume, - String directoryName) { + private static boolean showFragment(OpenExternalDirectoryActivity activity, int userId, + StorageVolume storageVolume, String directoryName) { if (DEBUG) Log.d(TAG, "showFragment() for volume " + storageVolume.dump() + ", directory " + directoryName + ", and user " + userId); @@ -129,7 +141,7 @@ public class OpenExternalDirectoryActivity extends Activity { return false; } - // Gets volume label and converted path + // Gets volume label and converted path. String volumeLabel = null; final List<VolumeInfo> volumes = sm.getVolumes(); if (DEBUG) Log.d(TAG, "Number of volumes: " + volumes.size()); @@ -143,6 +155,15 @@ public class OpenExternalDirectoryActivity extends Activity { break; } } + + // Checks if the user has granted the permission already. + final Intent intent = getIntentForExistingPermission(activity, file); + if (intent != null) { + activity.setResult(RESULT_OK, intent); + activity.finish(); + return true; + } + if (volumeLabel == null) { Log.e(TAG, "Could not get volume for " + file); return false; @@ -196,8 +217,7 @@ public class OpenExternalDirectoryActivity extends Activity { return volume.isVisibleForWrite(userId) && root.equals(path); } - private static Intent createGrantedUriPermissionsIntent(ContentProviderClient provider, - File file) { + private static Uri getGrantedUriPermission(ContentProviderClient provider, File file) { // Calls ExternalStorageProvider to get the doc id for the file final Bundle bundle; try { @@ -218,8 +238,17 @@ public class OpenExternalDirectoryActivity extends Activity { Log.e(TAG, "Could not get URI for doc id " + docId); return null; } - if (DEBUG) Log.d(TAG, "URI for " + file + ": " + uri); + return uri; + } + + private static Intent createGrantedUriPermissionsIntent(ContentProviderClient provider, + File file) { + final Uri uri = getGrantedUriPermission(provider, file); + return createGrantedUriPermissionsIntent(uri); + } + + private static Intent createGrantedUriPermissionsIntent(Uri uri) { final Intent intent = new Intent(); intent.setData(uri); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION @@ -229,13 +258,31 @@ public class OpenExternalDirectoryActivity extends Activity { return intent; } + private static Intent getIntentForExistingPermission(OpenExternalDirectoryActivity activity, + File file) { + final String packageName = activity.getCallingPackage(); + final Uri grantedUri = getGrantedUriPermission(activity.getExternalStorageClient(), file); + if (DEBUG) + Log.d(TAG, "checking if " + packageName + " already has permission for " + grantedUri); + final ActivityManager am = + (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE); + for (UriPermission uriPermission : am.getGrantedUriPermissions(packageName).getList()) { + final Uri uri = uriPermission.getUri(); + if (uri.equals(grantedUri)) { + if (DEBUG) Log.d(TAG, packageName + " already has permission: " + uriPermission); + return createGrantedUriPermissionsIntent(uri); + } + } + if (DEBUG) Log.d(TAG, packageName + " does not have permission for " + grantedUri); + return null; + } + public static class OpenExternalDirectoryDialogFragment extends DialogFragment { private File mFile; private String mVolumeLabel; private String mAppLabel; - private ContentProviderClient mExternalStorageClient; - private ContentResolver mResolver; + private OpenExternalDirectoryActivity mActivity; @Override public void onCreate(Bundle savedInstanceState) { @@ -245,16 +292,8 @@ public class OpenExternalDirectoryActivity extends Activity { mFile = new File(args.getString(EXTRA_FILE)); mVolumeLabel = args.getString(EXTRA_VOLUME_LABEL); mAppLabel = args.getString(EXTRA_APP_LABEL); - mResolver = getContext().getContentResolver(); - } - } - - @Override - public void onDestroy() { - super.onDestroy(); - if (mExternalStorageClient != null) { - mExternalStorageClient.close(); } + mActivity = (OpenExternalDirectoryActivity) getActivity(); } @Override @@ -267,8 +306,8 @@ public class OpenExternalDirectoryActivity extends Activity { public void onClick(DialogInterface dialog, int which) { Intent intent = null; if (which == DialogInterface.BUTTON_POSITIVE) { - intent = createGrantedUriPermissionsIntent(getExternalStorageClient(), - mFile); + intent = createGrantedUriPermissionsIntent( + mActivity.getExternalStorageClient(), mFile); } if (which == DialogInterface.BUTTON_NEGATIVE || intent == null) { activity.setResult(RESULT_CANCELED); @@ -297,13 +336,13 @@ public class OpenExternalDirectoryActivity extends Activity { activity.setResult(RESULT_CANCELED); activity.finish(); } + } - private synchronized ContentProviderClient getExternalStorageClient() { - if (mExternalStorageClient == null) { - mExternalStorageClient = - mResolver.acquireContentProviderClient(EXTERNAL_STORAGE_AUTH); - } - return mExternalStorageClient; + private synchronized ContentProviderClient getExternalStorageClient() { + if (mExternalStorageClient == null) { + mExternalStorageClient = + getContentResolver().acquireContentProviderClient(EXTERNAL_STORAGE_AUTH); } + return mExternalStorageClient; } } diff --git a/packages/DocumentsUI/src/com/android/documentsui/RecentsProvider.java b/packages/DocumentsUI/src/com/android/documentsui/RecentsProvider.java index 92ffb93365d2..e1b1c09be364 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/RecentsProvider.java +++ b/packages/DocumentsUI/src/com/android/documentsui/RecentsProvider.java @@ -95,6 +95,7 @@ public class RecentsProvider extends ContentProvider { public static final String PACKAGE_NAME = "package_name"; public static final String STACK = "stack"; public static final String TIMESTAMP = "timestamp"; + // Indicates handler was an external app, like photos. public static final String EXTERNAL = "external"; } diff --git a/packages/DocumentsUI/src/com/android/documentsui/SearchManager.java b/packages/DocumentsUI/src/com/android/documentsui/SearchViewManager.java index 69f54c77fe8b..049686289eee 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/SearchManager.java +++ b/packages/DocumentsUI/src/com/android/documentsui/SearchViewManager.java @@ -16,6 +16,8 @@ package com.android.documentsui; +import android.annotation.Nullable; +import android.os.Bundle; import android.provider.DocumentsContract.Root; import android.text.TextUtils; import android.util.Log; @@ -31,28 +33,27 @@ import com.android.documentsui.model.RootInfo; /** * Manages searching UI behavior. */ -final class SearchManager implements +final class SearchViewManager implements SearchView.OnCloseListener, OnQueryTextListener, OnClickListener, OnFocusChangeListener { public interface SearchManagerListener { - void onSearchChanged(); - - void onSearchQueryChanged(String query); + void onSearchChanged(@Nullable String query); } public static final String TAG = "SearchManger"; private SearchManagerListener mListener; - private String currentSearch; private boolean mSearchExpanded; + private String mCurrentSearch; private boolean mIgnoreNextClose; private DocumentsToolbar mActionBar; private MenuItem mMenu; private SearchView mView; - public SearchManager(SearchManagerListener listener) { + public SearchViewManager(SearchManagerListener listener, @Nullable Bundle savedState) { mListener = listener; + mCurrentSearch = savedState != null ? savedState.getString(Shared.EXTRA_QUERY) : null; } public void setSearchMangerListener(SearchManagerListener listener) { @@ -69,6 +70,8 @@ final class SearchManager implements mView.setOnCloseListener(this); mView.setOnSearchClickListener(this); mView.setOnQueryTextFocusChangeListener(this); + + restoreSearch(); } /** @@ -80,12 +83,12 @@ final class SearchManager implements return; } - if (currentSearch != null) { + if (mCurrentSearch != null) { mMenu.expandActionView(); mView.setIconified(false); mView.clearFocus(); - mView.setQuery(currentSearch, false); + mView.setQuery(mCurrentSearch, false); } else { mView.clearFocus(); if (!mView.isIconified()) { @@ -108,13 +111,11 @@ final class SearchManager implements return; } - mMenu.setVisible(visible); if (!visible) { - currentSearch = null; - if (mListener != null) { - mListener.onSearchQueryChanged(currentSearch); - } + mCurrentSearch = null; } + + mMenu.setVisible(visible); } /** @@ -133,8 +134,23 @@ final class SearchManager implements return false; } + private void restoreSearch() { + if (isSearching()) { + onSearchExpanded(); + mView.setIconified(false); + mView.setQuery(mCurrentSearch, false); + mView.clearFocus(); + } + } + + private void onSearchExpanded() { + mSearchExpanded = true; + mView.setBackgroundColor( + mView.getResources().getColor(R.color.menu_search_background, null)); + } + boolean isSearching() { - return currentSearch != null; + return mCurrentSearch != null; } boolean isExpanded() { @@ -142,6 +158,14 @@ final class SearchManager implements } /** + * Called when owning activity is saving state to be used to restore state during creation. + * @param state Bundle to save state too + */ + public void onSaveInstanceState(Bundle state) { + state.putString(Shared.EXTRA_QUERY, mCurrentSearch); + } + + /** * Clears the search. Clears the SearchView background color. Triggers refreshing of the * directory content. * @return True if the default behavior of clearing/dismissing SearchView should be overridden. @@ -159,11 +183,10 @@ final class SearchManager implements mView.getResources().getColor(android.R.color.transparent, null)); // Refresh the directory if a search was done - if (currentSearch != null) { - currentSearch = null; + if (mCurrentSearch != null) { + mCurrentSearch = null; if (mListener != null) { - mListener.onSearchQueryChanged(currentSearch); - mListener.onSearchChanged(); + mListener.onSearchChanged(mCurrentSearch); } } return false; @@ -176,18 +199,15 @@ final class SearchManager implements */ @Override public void onClick(View v) { - mSearchExpanded = true; - mView.setBackgroundColor( - mView.getResources().getColor(R.color.menu_search_background, null)); + onSearchExpanded(); } @Override public boolean onQueryTextSubmit(String query) { - currentSearch = query; + mCurrentSearch = query; mView.clearFocus(); if (mListener != null) { - mListener.onSearchQueryChanged(currentSearch); - mListener.onSearchChanged(); + mListener.onSearchChanged(mCurrentSearch); } return true; } @@ -195,7 +215,7 @@ final class SearchManager implements @Override public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { - if (currentSearch == null) { + if (mCurrentSearch == null) { mView.setIconified(true); } else if (TextUtils.isEmpty(mView.getQuery())) { cancelSearch(); @@ -207,4 +227,9 @@ final class SearchManager implements public boolean onQueryTextChange(String newText) { return false; } + + String getCurrentSearch() { + return mCurrentSearch; + } + } diff --git a/packages/DocumentsUI/src/com/android/documentsui/Shared.java b/packages/DocumentsUI/src/com/android/documentsui/Shared.java index b90a1194596a..a288fe8f30ab 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/Shared.java +++ b/packages/DocumentsUI/src/com/android/documentsui/Shared.java @@ -37,10 +37,50 @@ public final class Shared { * specifies if the destination directory needs to create new directory or not. */ public static final String EXTRA_DIRECTORY_COPY = "com.android.documentsui.DIRECTORY_COPY"; + public static final String EXTRA_STACK = "com.android.documentsui.STACK"; + + /** + * Extra flag used to store query of type String in the bundle. + */ + public static final String EXTRA_QUERY = "query"; + + /** + * Extra flag used to store state of type State in the bundle. + */ + public static final String EXTRA_STATE = "state"; + + /** + * Extra flag used to store type of DirectoryFragment's type ResultType type in the bundle. + */ + public static final String EXTRA_TYPE = "type"; + + /** + * Extra flag used to store root of type RootInfo in the bundle. + */ + public static final String EXTRA_ROOT = "root"; + + /** + * Extra flag used to store document of DocumentInfo type in the bundle. + */ + public static final String EXTRA_DOC = "document"; + + /** + * Extra flag used to store DirectoryFragment's selection of Selection type in the bundle. + */ + public static final String EXTRA_SELECTION = "selection"; + + /** + * Extra flag used to store DirectoryFragment's search mode of boolean type in the bundle. + */ + public static final String EXTRA_SEARCH_MODE = "searchMode"; + + /** + * Extra flag used to store DirectoryFragment's ignore state of boolean type in the bundle. + */ + public static final String EXTRA_IGNORE_STATE = "ignoreState"; public static final boolean DEBUG = true; public static final String TAG = "Documents"; - public static final String EXTRA_STACK = "com.android.documentsui.STACK"; /** diff --git a/packages/DocumentsUI/src/com/android/documentsui/State.java b/packages/DocumentsUI/src/com/android/documentsui/State.java index 0948ab1e7571..62f9ea7ed804 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/State.java +++ b/packages/DocumentsUI/src/com/android/documentsui/State.java @@ -105,9 +105,6 @@ public class State implements android.os.Parcelable { private boolean mInitialRootChanged; private boolean mInitialDocChanged; - /** Currently active search, overriding any stack. */ - public String currentSearch; - /** Instance state for every shown directory */ public HashMap<String, SparseArray<Parcelable>> dirState = new HashMap<>(); @@ -160,11 +157,13 @@ public class State implements android.os.Parcelable { mStackTouched = true; } + // This will return true even when the initial location is set. + // To get a read on if the user has changed something, use #hasInitialLocationChanged. public boolean hasLocationChanged() { return mStackTouched; } - public boolean initialLocationHasChanged() { + public boolean hasInitialLocationChanged() { return mInitialRootChanged || mInitialDocChanged; } @@ -186,7 +185,6 @@ public class State implements android.os.Parcelable { out.writeInt(showAdvanced ? 1 : 0); out.writeInt(restored ? 1 : 0); DurableUtils.writeToParcel(out, stack); - out.writeString(currentSearch); out.writeMap(dirState); out.writeParcelable(selectedDocuments, 0); out.writeList(selectedDocumentsForCopy); @@ -217,7 +215,6 @@ public class State implements android.os.Parcelable { state.showAdvanced = in.readInt() != 0; state.restored = in.readInt() != 0; DurableUtils.readFromParcel(in, state.stack); - state.currentSearch = in.readString(); in.readMap(state.dirState, loader); state.selectedDocuments = in.readParcelable(loader); in.readList(state.selectedDocumentsForCopy, loader); diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java index 4583decc14a8..cb6cf8dc7e28 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java +++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java @@ -113,19 +113,26 @@ import java.util.List; /** * Display the documents inside a single directory. */ -public class DirectoryFragment extends Fragment implements DocumentsAdapter.Environment { +public class DirectoryFragment extends Fragment + implements DocumentsAdapter.Environment, LoaderCallbacks<DirectoryResult> { @IntDef(flag = true, value = { TYPE_NORMAL, - TYPE_SEARCH, TYPE_RECENT_OPEN }) @Retention(RetentionPolicy.SOURCE) public @interface ResultType {} public static final int TYPE_NORMAL = 1; - public static final int TYPE_SEARCH = 2; - public static final int TYPE_RECENT_OPEN = 3; + public static final int TYPE_RECENT_OPEN = 2; + @IntDef(flag = true, value = { + ANIM_NONE, + ANIM_SIDE, + ANIM_LEAVE, + ANIM_ENTER + }) + @Retention(RetentionPolicy.SOURCE) + public @interface AnimationType {} public static final int ANIM_NONE = 1; public static final int ANIM_SIDE = 2; public static final int ANIM_LEAVE = 3; @@ -146,12 +153,6 @@ public class DirectoryFragment extends Fragment implements DocumentsAdapter.Envi private static final int DELETE_JOB_DELAY = 5500; private static final int EMPTY_REVEAL_DURATION = 250; - private static final String EXTRA_TYPE = "type"; - private static final String EXTRA_ROOT = "root"; - private static final String EXTRA_DOC = "doc"; - private static final String EXTRA_QUERY = "query"; - private static final String EXTRA_IGNORE_STATE = "ignoreState"; - private Model mModel; private MultiSelectManager mSelectionManager; private Model.UpdateListener mModelUpdateListener = new ModelUpdateListener(); @@ -164,12 +165,10 @@ public class DirectoryFragment extends Fragment implements DocumentsAdapter.Envi private RecyclerView mRecView; private ListeningGestureDetector mGestureDetector; - private @ResultType int mType = TYPE_NORMAL; private String mStateKey; private int mLastSortOrder = SORT_ORDER_UNKNOWN; private DocumentsAdapter mAdapter; - private LoaderCallbacks<DirectoryResult> mCallbacks; private FragmentTuner mTuner; private DocumentClipper mClipper; private GridLayoutManager mLayout; @@ -178,6 +177,14 @@ public class DirectoryFragment extends Fragment implements DocumentsAdapter.Envi private MessageBar mMessageBar; private View mProgressBar; + // Directory fragment state is defined by: root, document, query, type, selection + private @ResultType int mType = TYPE_NORMAL; + private RootInfo mRoot; + private DocumentInfo mDocument; + private String mQuery = null; + private Selection mSelection = null; + private boolean mSearchMode = false; + @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -226,9 +233,16 @@ public class DirectoryFragment extends Fragment implements DocumentsAdapter.Envi final Context context = getActivity(); final State state = getDisplayState(); - final RootInfo root = getArguments().getParcelable(EXTRA_ROOT); - final DocumentInfo doc = getArguments().getParcelable(EXTRA_DOC); - mStateKey = buildStateKey(root, doc); + // Read arguments when object created for the first time. + // Restore state if fragment recreated. + Bundle args = savedInstanceState == null ? getArguments() : savedInstanceState; + mRoot = args.getParcelable(Shared.EXTRA_ROOT); + mDocument = args.getParcelable(Shared.EXTRA_DOC); + mStateKey = buildStateKey(mRoot, mDocument); + mQuery = args.getString(Shared.EXTRA_QUERY); + mType = args.getInt(Shared.EXTRA_TYPE); + mSelection = args.getParcelable(Shared.EXTRA_SELECTION); + mSearchMode = args.getBoolean(Shared.EXTRA_SEARCH_MODE); mIconHelper = new IconHelper(context, MODE_GRID); @@ -248,13 +262,6 @@ public class DirectoryFragment extends Fragment implements DocumentsAdapter.Envi mRecView.addOnItemTouchListener(mGestureDetector); - // final here because we'll manually bump the listener iwhen we had an initial selection, - // but only after the model is fully loaded. - final SelectionModeListener selectionListener = new SelectionModeListener(); - final Selection initialSelection = state.selectedDocuments.hasDirectoryKey(mStateKey) - ? state.selectedDocuments - : null; - // TODO: instead of inserting the view into the constructor, extract listener-creation code // and set the listener on the view after the fact. Then the view doesn't need to be passed // into the selection manager. @@ -264,9 +271,9 @@ public class DirectoryFragment extends Fragment implements DocumentsAdapter.Envi state.allowMultiple ? MultiSelectManager.MODE_MULTIPLE : MultiSelectManager.MODE_SINGLE, - initialSelection); + null); - mSelectionManager.addCallback(selectionListener); + mSelectionManager.addCallback(new SelectionModeListener()); mModel = new Model(); mModel.addUpdateListener(mAdapter); @@ -275,8 +282,6 @@ public class DirectoryFragment extends Fragment implements DocumentsAdapter.Envi // Make sure this is done after the RecyclerView is set up. mFocusManager = new FocusManager(context, mRecView, mModel); - mType = getArguments().getInt(EXTRA_TYPE); - mTuner = FragmentTuner.pick(getContext(), state); mClipper = new DocumentClipper(context); @@ -286,7 +291,7 @@ public class DirectoryFragment extends Fragment implements DocumentsAdapter.Envi hideGridTitles = MimePredicate.mimeMatches( MimePredicate.VISUAL_MIMES, state.acceptMimes); } else { - hideGridTitles = (doc != null) && doc.isGridTitlesHidden(); + hideGridTitles = (mDocument != null) && mDocument.isGridTitlesHidden(); } GridDocumentHolder.setHideTitles(hideGridTitles); @@ -295,86 +300,20 @@ public class DirectoryFragment extends Fragment implements DocumentsAdapter.Envi boolean svelte = am.isLowRamDevice() && (mType == TYPE_RECENT_OPEN); mIconHelper.setThumbnailsEnabled(!svelte); - mCallbacks = new LoaderCallbacks<DirectoryResult>() { - @Override - public Loader<DirectoryResult> onCreateLoader(int id, Bundle args) { - final String query = getArguments().getString(EXTRA_QUERY); - - Uri contentsUri; - switch (mType) { - case TYPE_NORMAL: - contentsUri = DocumentsContract.buildChildDocumentsUri( - doc.authority, doc.documentId); - if (state.action == ACTION_MANAGE) { - contentsUri = DocumentsContract.setManageMode(contentsUri); - } - return new DirectoryLoader( - context, mType, root, doc, contentsUri, state.userSortOrder); - case TYPE_SEARCH: - contentsUri = DocumentsContract.buildSearchDocumentsUri( - root.authority, root.rootId, query); - if (state.action == ACTION_MANAGE) { - contentsUri = DocumentsContract.setManageMode(contentsUri); - } - return new DirectoryLoader( - context, mType, root, doc, contentsUri, state.userSortOrder); - case TYPE_RECENT_OPEN: - final RootsCache roots = DocumentsApplication.getRootsCache(context); - return new RecentsLoader(context, roots, state); - default: - throw new IllegalStateException("Unknown type " + mType); - } - } - - @Override - public void onLoadFinished(Loader<DirectoryResult> loader, DirectoryResult result) { - if (!isAdded()) return; - - mModel.update(result); - state.derivedSortOrder = result.sortOrder; - - updateDisplayState(); - - if (initialSelection != null) { - selectionListener.onSelectionChanged(); - } - - // Restore any previous instance state - final SparseArray<Parcelable> container = state.dirState.remove(mStateKey); - if (container != null && !getArguments().getBoolean(EXTRA_IGNORE_STATE, false)) { - getView().restoreHierarchyState(container); - } else if (mLastSortOrder != state.derivedSortOrder) { - // The derived sort order takes the user sort order into account, but applies - // directory-specific defaults when the user doesn't explicitly set the sort - // order. Scroll to the top if the sort order actually changed. - mRecView.smoothScrollToPosition(0); - } - - mLastSortOrder = state.derivedSortOrder; - - mTuner.onModelLoaded(mModel, mType); - } - - @Override - public void onLoaderReset(Loader<DirectoryResult> loader) { - mModel.update(null); - } - }; - // Kick off loader at least once - getLoaderManager().restartLoader(LOADER_ID, null, mCallbacks); + getLoaderManager().restartLoader(LOADER_ID, null, this); } @Override public void onSaveInstanceState(Bundle outState) { - State state = getDisplayState(); - if (mSelectionManager.hasSelection()) { - mSelectionManager.getSelection(state.selectedDocuments); - state.selectedDocuments.setDirectoryKey(mStateKey); - if (!state.selectedDocuments.isEmpty()) { - if (DEBUG) Log.d(TAG, "Persisted selection: " + state.selectedDocuments); - } - } + super.onSaveInstanceState(outState); + + outState.putInt(Shared.EXTRA_TYPE, mType); + outState.putParcelable(Shared.EXTRA_ROOT, mRoot); + outState.putParcelable(Shared.EXTRA_DOC, mDocument); + outState.putString(Shared.EXTRA_QUERY, mQuery); + outState.putParcelable(Shared.EXTRA_SELECTION, mSelectionManager.getSelection()); + outState.putBoolean(Shared.EXTRA_SEARCH_MODE, mSearchMode); } @Override @@ -449,7 +388,7 @@ public class DirectoryFragment extends Fragment implements DocumentsAdapter.Envi public void onSortOrderChanged() { // Sort order is implemented as a sorting wrapper around directory // results. So when sort order changes, we force a reload of the directory. - getLoaderManager().restartLoader(LOADER_ID, null, mCallbacks); + getLoaderManager().restartLoader(LOADER_ID, null, this); } public void onViewModeChanged() { @@ -552,7 +491,8 @@ public class DirectoryFragment extends Fragment implements DocumentsAdapter.Envi // triggered on "silent" selection updates (i.e. we might be reacting to unfinalized // selection changes here) final int docFlags = getCursorInt(cursor, Document.COLUMN_FLAGS); - if ((docFlags & Document.FLAG_SUPPORTS_DELETE) == 0) { + if ((docFlags & Document.FLAG_SUPPORTS_DELETE) == 0 + && (docFlags & Document.FLAG_SUPPORTS_DELETE) == 0) { mNoDeleteCount += selected ? 1 : -1; } if ((docFlags & Document.FLAG_SUPPORTS_RENAME) != 0) { @@ -1296,6 +1236,11 @@ public class DirectoryFragment extends Fragment implements DocumentsAdapter.Envi return false; } + // Ignore tab key events. Those should be handled by the top-level key handler. + if (keyCode == KeyEvent.KEYCODE_TAB) { + return false; + } + if (mFocusManager.handleKey(doc, keyCode, event)) { // Handle range selection adjustments. Extending the selection will adjust the // bounds of the in-progress range selection. Each time an unshifted navigation @@ -1342,7 +1287,7 @@ public class DirectoryFragment extends Fragment implements DocumentsAdapter.Envi mProgressBar.setVisibility(model.isLoading() ? View.VISIBLE : View.GONE); if (model.isEmpty()) { - if (getDisplayState().currentSearch != null) { + if (mSearchMode) { showNoResults(getDisplayState().stack.root); } else { showEmptyDirectory(); @@ -1468,32 +1413,50 @@ public class DirectoryFragment extends Fragment implements DocumentsAdapter.Envi public static void showDirectory( FragmentManager fm, RootInfo root, DocumentInfo doc, int anim) { - show(fm, TYPE_NORMAL, root, doc, null, anim); + create(fm, TYPE_NORMAL, root, doc, null, anim); } - public static void showSearch(FragmentManager fm, RootInfo root, String query, int anim) { - show(fm, TYPE_SEARCH, root, null, query, anim); + public static void showRecentsOpen(FragmentManager fm, int anim) { + create(fm, TYPE_RECENT_OPEN, null, null, null, anim); } - public static void showRecentsOpen(FragmentManager fm, int anim) { - show(fm, TYPE_RECENT_OPEN, null, null, null, anim); + public static void reloadSearch(FragmentManager fm, RootInfo root, DocumentInfo doc, + String query) { + DirectoryFragment df = get(fm); + + df.mQuery = query; + df.mRoot = root; + df.mDocument = doc; + df.mSearchMode = query != null; + df.getLoaderManager().restartLoader(LOADER_ID, null, df); + } + + public static void reload(FragmentManager fm, int type, RootInfo root, DocumentInfo doc, + String query) { + DirectoryFragment df = get(fm); + df.mType = type; + df.mQuery = query; + df.mRoot = root; + df.mDocument = doc; + df.mSearchMode = query != null; + df.getLoaderManager().restartLoader(LOADER_ID, null, df); } - private static void show(FragmentManager fm, int type, RootInfo root, DocumentInfo doc, + public static void create(FragmentManager fm, int type, RootInfo root, DocumentInfo doc, String query, int anim) { final Bundle args = new Bundle(); - args.putInt(EXTRA_TYPE, type); - args.putParcelable(EXTRA_ROOT, root); - args.putParcelable(EXTRA_DOC, doc); - args.putString(EXTRA_QUERY, query); + args.putInt(Shared.EXTRA_TYPE, type); + args.putParcelable(Shared.EXTRA_ROOT, root); + args.putParcelable(Shared.EXTRA_DOC, doc); + args.putString(Shared.EXTRA_QUERY, query); final FragmentTransaction ft = fm.beginTransaction(); switch (anim) { case ANIM_SIDE: - args.putBoolean(EXTRA_IGNORE_STATE, true); + args.putBoolean(Shared.EXTRA_IGNORE_STATE, true); break; case ANIM_ENTER: - args.putBoolean(EXTRA_IGNORE_STATE, true); + args.putBoolean(Shared.EXTRA_IGNORE_STATE, true); ft.setCustomAnimations(R.animator.dir_enter, R.animator.dir_frozen); break; case ANIM_LEAVE: @@ -1504,7 +1467,7 @@ public class DirectoryFragment extends Fragment implements DocumentsAdapter.Envi final DirectoryFragment fragment = new DirectoryFragment(); fragment.setArguments(args); - ft.replace(R.id.container_directory, fragment); + ft.replace(getFragmentId(), fragment); ft.commitAllowingStateLoss(); } @@ -1518,9 +1481,78 @@ public class DirectoryFragment extends Fragment implements DocumentsAdapter.Envi public static @Nullable DirectoryFragment get(FragmentManager fm) { // TODO: deal with multiple directories shown at once - Fragment fragment = fm.findFragmentById(R.id.container_directory); + Fragment fragment = fm.findFragmentById(getFragmentId()); return fragment instanceof DirectoryFragment ? (DirectoryFragment) fragment : null; } -} + + private static int getFragmentId() { + return R.id.container_directory; + } + + @Override + public Loader<DirectoryResult> onCreateLoader(int id, Bundle args) { + Context context = getActivity(); + State state = getDisplayState(); + + Uri contentsUri; + switch (mType) { + case TYPE_NORMAL: + contentsUri = mSearchMode ? DocumentsContract.buildSearchDocumentsUri( + mRoot.authority, mRoot.rootId, mQuery) + : DocumentsContract.buildChildDocumentsUri( + mDocument.authority, mDocument.documentId); + if (state.action == ACTION_MANAGE) { + contentsUri = DocumentsContract.setManageMode(contentsUri); + } + return new DirectoryLoader( + context, mType, mRoot, mDocument, contentsUri, state.userSortOrder, + mSearchMode); + case TYPE_RECENT_OPEN: + final RootsCache roots = DocumentsApplication.getRootsCache(context); + return new RecentsLoader(context, roots, state); + default: + throw new IllegalStateException("Unknown type " + mType); + } + } + + @Override + public void onLoadFinished(Loader<DirectoryResult> loader, DirectoryResult result) { + if (!isAdded()) return; + + State state = getDisplayState(); + + mAdapter.notifyDataSetChanged(); + mModel.update(result); + + state.derivedSortOrder = result.sortOrder; + + updateLayout(state.derivedMode); + + if (mSelection != null) { + mSelectionManager.setItemsSelected(mSelection.toList(), true); + } + + // Restore any previous instance state + final SparseArray<Parcelable> container = state.dirState.remove(mStateKey); + if (container != null && !getArguments().getBoolean(Shared.EXTRA_IGNORE_STATE, false)) { + getView().restoreHierarchyState(container); + } else if (mLastSortOrder != state.derivedSortOrder) { + // The derived sort order takes the user sort order into account, but applies + // directory-specific defaults when the user doesn't explicitly set the sort + // order. Scroll to the top if the sort order actually changed. + mRecView.smoothScrollToPosition(0); + } + + mLastSortOrder = state.derivedSortOrder; + + mTuner.onModelLoaded(mModel, mType, mSearchMode); + + } + + @Override + public void onLoaderReset(Loader<DirectoryResult> loader) { + mModel.update(null); + } + } diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/FocusManager.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/FocusManager.java index 7f867d521c43..ac05c0570a46 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/FocusManager.java +++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/FocusManager.java @@ -18,7 +18,11 @@ package com.android.documentsui.dirlist; import static com.android.documentsui.model.DocumentInfo.getCursorString; +import android.annotation.Nullable; import android.content.Context; +import android.os.Handler; +import android.os.Looper; +import android.os.SystemClock; import android.provider.DocumentsContract.Document; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; @@ -38,6 +42,8 @@ import com.android.documentsui.R; import java.util.ArrayList; import java.util.List; +import java.util.Timer; +import java.util.TimerTask; /** * A class that handles navigation and focus within the DirectoryFragment. @@ -113,6 +119,11 @@ class FocusManager implements View.OnFocusChangeListener { * Requests focus on the item that last had focus. Scrolls to that item if necessary. */ public void restoreLastFocus() { + if (mAdapter.getItemCount() == 0) { + // Nothing to focus. + return; + } + if (mLastFocusPosition != RecyclerView.NO_POSITION) { // The system takes care of situations when a view is no longer on screen, etc, focusItem(mLastFocusPosition); @@ -254,10 +265,23 @@ class FocusManager implements View.OnFocusChangeListener { * @param pos */ private void focusItem(final int pos) { + focusItem(pos, null); + } + + /** + * Requests focus for the item in the given adapter position, scrolling the RecyclerView if + * necessary. + * + * @param pos + * @param callback A callback to call after the given item has been focused. + */ + private void focusItem(final int pos, @Nullable final FocusCallback callback) { // If the item is already in view, focus it; otherwise, scroll to it and focus it. RecyclerView.ViewHolder vh = mView.findViewHolderForAdapterPosition(pos); if (vh != null) { - vh.itemView.requestFocus(); + if (vh.itemView.requestFocus() && callback != null) { + callback.onFocus(vh.itemView); + } } else { // Set a one-time listener to request focus when the scroll has completed. mView.addOnScrollListener( @@ -269,7 +293,9 @@ class FocusManager implements View.OnFocusChangeListener { RecyclerView.ViewHolder vh = view.findViewHolderForAdapterPosition(pos); if (vh != null) { - vh.itemView.requestFocus(); + if (vh.itemView.requestFocus() && callback != null) { + callback.onFocus(vh.itemView); + } } else { // This might happen in weird corner cases, e.g. if the user is // scrolling while a delete operation is in progress. In that @@ -291,6 +317,10 @@ class FocusManager implements View.OnFocusChangeListener { return mLayout.getSpanCount() > 1; } + private interface FocusCallback { + public void onFocus(View view); + } + /** * A helper class for handling type-to-focus. Instantiate this class, and pass it KeyEvents via * the {@link #handleKey(DocumentHolder, int, KeyEvent)} method. The class internally will build @@ -299,15 +329,24 @@ class FocusManager implements View.OnFocusChangeListener { * highlights instances of the search term found in the view. */ private class TitleSearchHelper { - final private KeyListener mTextListener = new TextKeyListener(Capitalize.NONE, false); - final private Editable mSearchString = Editable.Factory.getInstance().newEditable(""); - final private Highlighter mHighlighter = new Highlighter(); - final private BackgroundColorSpan mSpan; + static private final int SEARCH_TIMEOUT = 500; // ms + + private final KeyListener mTextListener = new TextKeyListener(Capitalize.NONE, false); + private final Editable mSearchString = Editable.Factory.getInstance().newEditable(""); + private final Highlighter mHighlighter = new Highlighter(); + private final BackgroundColorSpan mSpan; + private List<String> mIndex; private boolean mActive; + private Timer mTimer; + private KeyEvent mLastEvent; + private Handler mUiRunner; public TitleSearchHelper(Context context) { mSpan = new BackgroundColorSpan(context.getColor(R.color.accent_dark)); + // Handler for running things on the main UI thread. Needed for updating the UI from a + // timer (see #activate, below). + mUiRunner = new Handler(Looper.getMainLooper()); } /** @@ -325,7 +364,7 @@ class FocusManager implements View.OnFocusChangeListener { case KeyEvent.KEYCODE_ENTER: if (mActive) { // These keys end any active searches. - deactivate(); + endSearch(); return true; } else { // Don't handle these key events if there is no active search. @@ -333,7 +372,9 @@ class FocusManager implements View.OnFocusChangeListener { } case KeyEvent.KEYCODE_SPACE: // This allows users to search for files with spaces in their names, but ignores - // spacebar events when a text search is not active. + // spacebar events when a text search is not active. Ignoring the spacebar + // event is necessary because other handlers (see FocusManager#handleKey) also + // listen for and handle it. if (!mActive) { return false; } @@ -341,7 +382,7 @@ class FocusManager implements View.OnFocusChangeListener { // Navigation keys also end active searches. if (Events.isNavigationKeyCode(keyCode)) { - deactivate(); + endSearch(); // Don't handle the keycode, so navigation still occurs. return false; } @@ -350,20 +391,17 @@ class FocusManager implements View.OnFocusChangeListener { boolean handled = mTextListener.onKeyDown(doc.itemView, mSearchString, keyCode, event); // Delete is processed by the text listener, but not "handled". Check separately for it. - if (handled || keyCode == KeyEvent.KEYCODE_DEL) { - String searchString = mSearchString.toString(); - if (searchString.length() == 0) { + if (keyCode == KeyEvent.KEYCODE_DEL) { + handled = true; + } + + if (handled) { + mLastEvent = event; + if (mSearchString.length() == 0) { // Don't perform empty searches. return false; } - activate(); - for (int pos = 0; pos < mIndex.size(); pos++) { - String title = mIndex.get(pos); - if (title != null && title.startsWith(searchString)) { - focusItem(pos); - break; - } - } + search(); } return handled; @@ -373,10 +411,17 @@ class FocusManager implements View.OnFocusChangeListener { * Activates the search helper, which changes its key handling and updates the search index * and highlights if necessary. Call this each time the search term is updated. */ - private void activate() { + private void search() { if (!mActive) { - // Install listeners. + // The model listener invalidates the search index when the model changes. mModel.addUpdateListener(mModelListener); + + // Used to keep the current search alive until the timeout expires. If the user + // presses another key within that time, that keystroke is added to the current + // search. Otherwise, the current search ends, and subsequent keystrokes start a new + // search. + mTimer = new Timer(); + mActive = true; } // If the search index was invalidated, rebuild it @@ -384,23 +429,38 @@ class FocusManager implements View.OnFocusChangeListener { buildIndex(); } - // TODO: Uncomment this to enable search term highlighting in the UI. -// mHighlighter.activate(); - - mActive = true; + // Search for the current search term. + // Perform case-insensitive search. + String searchString = mSearchString.toString().toLowerCase(); + for (int pos = 0; pos < mIndex.size(); pos++) { + String title = mIndex.get(pos); + if (title != null && title.startsWith(searchString)) { + focusItem(pos, new FocusCallback() { + @Override + public void onFocus(View view) { + mHighlighter.applyHighlight(view); + // Using a timer repeat period of SEARCH_TIMEOUT/2 means the amount of + // time between the last keystroke and a search expiring is actually + // between 500 and 750 ms. A smaller timer period results in less + // variability but does more polling. + mTimer.schedule(new TimeoutTask(), 0, SEARCH_TIMEOUT / 2); + } + }); + break; + } + } } /** - * Deactivates the search helper (see {@link #activate()}). Call this when a search ends. + * Ends the current search (see {@link #search()}. */ - private void deactivate() { + private void endSearch() { if (mActive) { - // Remove listeners. mModel.removeUpdateListener(mModelListener); + mTimer.cancel(); } - // TODO: Uncomment this when search-term highlighting is enabled in the UI. -// mHighlighter.deactivate(); + mHighlighter.removeHighlight(); mIndex = null; mSearchString.clear(); @@ -408,50 +468,6 @@ class FocusManager implements View.OnFocusChangeListener { } /** - * Applies title highlights to the given view. The view must have a title field that is a - * spannable text field. If this condition is not met, this function does nothing. - * - * @param view - */ - private void applyHighlight(View view) { - TextView titleView = (TextView) view.findViewById(android.R.id.title); - if (titleView == null) { - return; - } - - String searchString = mSearchString.toString(); - CharSequence tmpText = titleView.getText(); - if (tmpText instanceof Spannable) { - Spannable title = (Spannable) tmpText; - String titleString = title.toString(); - if (titleString.startsWith(searchString)) { - title.setSpan(mSpan, 0, searchString.length(), - Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); - } else { - title.removeSpan(mSpan); - } - } - } - - /** - * Removes title highlights from the given view. The view must have a title field that is a - * spannable text field. If this condition is not met, this function does nothing. - * - * @param view - */ - private void removeHighlight(View view) { - TextView titleView = (TextView) view.findViewById(android.R.id.title); - if (titleView == null) { - return; - } - - CharSequence tmpText = titleView.getText(); - if (tmpText instanceof Spannable) { - ((Spannable) tmpText).removeSpan(mSpan); - } - } - - /** * Builds a search index for finding items by title. Queries the model and adapter, so both * must be set up before calling this method. */ @@ -461,8 +477,10 @@ class FocusManager implements View.OnFocusChangeListener { for (int i = 0; i < itemCount; i++) { String modelId = mAdapter.getModelId(i); if (modelId != null) { - index.add( - getCursorString(mModel.getItem(modelId), Document.COLUMN_DISPLAY_NAME)); + String title = + getCursorString(mModel.getItem(modelId), Document.COLUMN_DISPLAY_NAME); + // Perform case-insensitive search. + index.add(title.toLowerCase()); } else { index.add(""); } @@ -484,43 +502,58 @@ class FocusManager implements View.OnFocusChangeListener { } }; - private class Highlighter implements RecyclerView.OnChildAttachStateChangeListener { - /** - * Starts highlighting instances of the current search term in the UI. - */ - public void activate() { - // Update highlights on all views - int itemCount = mView.getChildCount(); - for (int i = 0; i < itemCount; i++) { - applyHighlight(mView.getChildAt(i)); + private class TimeoutTask extends TimerTask { + @Override + public void run() { + long last = mLastEvent.getEventTime(); + long now = SystemClock.uptimeMillis(); + if ((now - last) > SEARCH_TIMEOUT) { + // endSearch must run on the main thread because it does UI work + mUiRunner.post(new Runnable() { + @Override + public void run() { + endSearch(); + } + }); } - // Keep highlights up-to-date as items come in and out of view. - mView.addOnChildAttachStateChangeListener(this); } + }; + + private class Highlighter { + private Spannable mCurrentHighlight; /** - * Stops highlighting instances of the current search term in the UI. + * Applies title highlights to the given view. The view must have a title field that is a + * spannable text field. If this condition is not met, this function does nothing. + * + * @param view */ - public void deactivate() { - // Remove highlights on all views - int itemCount = mView.getChildCount(); - for (int i = 0; i < itemCount; i++) { - removeHighlight(mView.getChildAt(i)); + private void applyHighlight(View view) { + TextView titleView = (TextView) view.findViewById(android.R.id.title); + if (titleView == null) { + return; } - // Stop updating highlights. - mView.removeOnChildAttachStateChangeListener(this); - } - @Override - public void onChildViewAttachedToWindow(View view) { - applyHighlight(view); + CharSequence tmpText = titleView.getText(); + if (tmpText instanceof Spannable) { + if (mCurrentHighlight != null) { + mCurrentHighlight.removeSpan(mSpan); + } + mCurrentHighlight = (Spannable) tmpText; + mCurrentHighlight.setSpan( + mSpan, 0, mSearchString.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); + } } - @Override - public void onChildViewDetachedFromWindow(View view) { - TextView titleView = (TextView) view.findViewById(android.R.id.title); - if (titleView != null) { - removeHighlight(titleView); + /** + * Removes title highlights from the given view. The view must have a title field that is a + * spannable text field. If this condition is not met, this function does nothing. + * + * @param view + */ + private void removeHighlight() { + if (mCurrentHighlight != null) { + mCurrentHighlight.removeSpan(mSpan); } } }; diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/FragmentTuner.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/FragmentTuner.java index a9b0fd181d8b..8ef891033901 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/FragmentTuner.java +++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/FragmentTuner.java @@ -16,7 +16,6 @@ package com.android.documentsui.dirlist; -import static com.android.documentsui.Shared.DEBUG; import static com.android.documentsui.State.ACTION_BROWSE; import static com.android.documentsui.State.ACTION_CREATE; import static com.android.documentsui.State.ACTION_GET_CONTENT; @@ -26,14 +25,11 @@ import static com.android.documentsui.State.ACTION_OPEN_TREE; import static com.android.internal.util.Preconditions.checkArgument; import android.content.Context; -import android.os.SystemProperties; import android.provider.DocumentsContract.Document; -import android.util.Log; import android.view.Menu; import android.view.MenuItem; -import com.android.documentsui.DocumentsActivity; -import com.android.documentsui.FilesActivity; +import com.android.documentsui.BaseActivity; import com.android.documentsui.Menus; import com.android.documentsui.MimePredicate; import com.android.documentsui.R; @@ -66,8 +62,8 @@ public abstract class FragmentTuner { } - public abstract void updateActionMenu(Menu menu, int dirType, boolean canDelete, - boolean canRename); + public abstract void updateActionMenu( + Menu menu, @ResultType int dirType, boolean canDelete, boolean canRename); // Subtly different from isDocumentEnabled. The reason may be illuminated as follows. // A folder is enabled such that it may be double clicked, even in settings @@ -84,7 +80,7 @@ public abstract class FragmentTuner { return MimePredicate.mimeMatches(mState.acceptMimes, docMimeType); } - abstract void onModelLoaded(Model model, @ResultType int resultType); + abstract void onModelLoaded(Model model, @ResultType int resultType, boolean isSearch); /** * Provides support for Platform specific specializations of DirectoryFragment. @@ -140,38 +136,26 @@ public abstract class FragmentTuner { } @Override - public void updateActionMenu(Menu menu, int dirType, boolean canDelete, - boolean canRename) { + public void updateActionMenu( + Menu menu, @ResultType int dirType, boolean canDelete, boolean canRename) { - boolean copyEnabled = dirType != DirectoryFragment.TYPE_RECENT_OPEN; - boolean moveEnabled = - SystemProperties.getBoolean("debug.documentsui.enable_move", false); - menu.findItem(R.id.menu_copy_to_clipboard).setEnabled(copyEnabled); - - final MenuItem open = menu.findItem(R.id.menu_open); - final MenuItem share = menu.findItem(R.id.menu_share); - final MenuItem delete = menu.findItem(R.id.menu_delete); - final MenuItem copyTo = menu.findItem(R.id.menu_copy_to); - final MenuItem moveTo = menu.findItem(R.id.menu_move_to); - final MenuItem rename = menu.findItem(R.id.menu_rename); + MenuItem open = menu.findItem(R.id.menu_open); + MenuItem share = menu.findItem(R.id.menu_share); + MenuItem delete = menu.findItem(R.id.menu_delete); + MenuItem rename = menu.findItem(R.id.menu_rename); open.setVisible(true); share.setVisible(false); delete.setVisible(false); - copyTo.setVisible(copyEnabled); - copyTo.setEnabled(copyEnabled); - moveTo.setVisible(moveEnabled); - moveTo.setEnabled(moveEnabled); rename.setVisible(false); } @Override - void onModelLoaded(Model model, @ResultType int resultType) { - // When launched into empty recents, show drawer - if (resultType == DirectoryFragment.TYPE_RECENT_OPEN - && model.isEmpty() - && !mState.hasLocationChanged()) { - ((DocumentsActivity) mContext).setRootsDrawerOpen(true); + void onModelLoaded(Model model, @ResultType int resultType, boolean isSearch) { + // When launched into empty root, open drawer. + if (model.isEmpty() && !mState.hasInitialLocationChanged() && !isSearch) { + // This noops on layouts without drawer, so no need to guard. + ((BaseActivity) mContext).setRootsDrawerOpen(true); } } } @@ -186,32 +170,29 @@ public abstract class FragmentTuner { } @Override - public void updateActionMenu(Menu menu, int dirType, boolean canDelete, - boolean canRename) { - checkArgument(dirType != DirectoryFragment.TYPE_RECENT_OPEN); - - boolean moveEnabled = - SystemProperties.getBoolean("debug.documentsui.enable_move", false); - menu.findItem(R.id.menu_copy_to_clipboard).setEnabled(true); - - final MenuItem open = menu.findItem(R.id.menu_open); - final MenuItem share = menu.findItem(R.id.menu_share); - final MenuItem delete = menu.findItem(R.id.menu_delete); - final MenuItem copyTo = menu.findItem(R.id.menu_copy_to); - final MenuItem moveTo = menu.findItem(R.id.menu_move_to); - final MenuItem rename = menu.findItem(R.id.menu_rename); + public void updateActionMenu( + Menu menu, @ResultType int resultType, boolean canDelete, boolean canRename) { + checkArgument(resultType != DirectoryFragment.TYPE_RECENT_OPEN); + + MenuItem open = menu.findItem(R.id.menu_open); + MenuItem delete = menu.findItem(R.id.menu_delete); + MenuItem copyTo = menu.findItem(R.id.menu_copy_to); + MenuItem moveTo = menu.findItem(R.id.menu_move_to); + MenuItem rename = menu.findItem(R.id.menu_rename); + MenuItem copy = menu.findItem(R.id.menu_copy_to_clipboard); open.setVisible(false); delete.setVisible(canDelete); + copy.setEnabled(true); // to clipboard copyTo.setVisible(true); copyTo.setEnabled(true); - moveTo.setVisible(moveEnabled); - moveTo.setEnabled(moveEnabled); + moveTo.setVisible(true); + moveTo.setEnabled(true); rename.setVisible(false); } @Override - void onModelLoaded(Model model, @ResultType int resultType) {} + void onModelLoaded(Model model, @ResultType int resultType, boolean isSearch) {} } /** @@ -219,15 +200,13 @@ public abstract class FragmentTuner { */ private static final class FilesTuner extends FragmentTuner { - private static final String TAG = "FilesTuner"; - public FilesTuner(Context context, State state) { super(context, state); } @Override - public void updateActionMenu(Menu menu, int dirType, boolean canDelete, - boolean canRename) { + public void updateActionMenu( + Menu menu, @ResultType int dirType, boolean canDelete, boolean canRename) { MenuItem copy = menu.findItem(R.id.menu_copy_to_clipboard); MenuItem paste = menu.findItem(R.id.menu_paste_from_clipboard); @@ -239,31 +218,25 @@ public abstract class FragmentTuner { menu.findItem(R.id.menu_share).setVisible(true); menu.findItem(R.id.menu_delete).setVisible(canDelete); - menu.findItem(R.id.menu_open).setVisible(false); menu.findItem(R.id.menu_copy_to).setVisible(true); menu.findItem(R.id.menu_move_to).setVisible(true); + menu.findItem(R.id.menu_move_to).setEnabled(canDelete); Menus.disableHiddenItems(menu, copy, paste); } @Override - void onModelLoaded(Model model, @ResultType int resultType) { - if (DEBUG) Log.d(TAG, "Handling model loaded. Has Location shcnage: " + mState.initialLocationHasChanged()); + void onModelLoaded(Model model, @ResultType int resultType, boolean isSearch) { // When launched into empty root, open drawer. - if (model.isEmpty() && !mState.initialLocationHasChanged() - && resultType != DirectoryFragment.TYPE_SEARCH) { - if (DEBUG) Log.d(TAG, "Showing roots drawer cuz stuffs empty."); - + if (model.isEmpty() && !mState.hasInitialLocationChanged() && !isSearch) { // This noops on layouts without drawer, so no need to guard. - ((FilesActivity) mContext).setRootsDrawerOpen(true); + ((BaseActivity) mContext).setRootsDrawerOpen(true); } - if (DEBUG) Log.d(TAG, "Donezo."); } } private static boolean isDirectory(String mimeType) { return Document.MIME_TYPE_DIR.equals(mimeType); } - } diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/GridDirectoryHolder.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/GridDirectoryHolder.java index e672327dfdae..a0ff1b5812ae 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/GridDirectoryHolder.java +++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/GridDirectoryHolder.java @@ -63,6 +63,7 @@ final class GridDirectoryHolder extends DocumentHolder { this.modelId = modelId; final String docDisplayName = getCursorString(cursor, Document.COLUMN_DISPLAY_NAME); - mTitle.setText(docDisplayName); + mTitle.setText(docDisplayName, TextView.BufferType.SPANNABLE); + } } diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/MultiSelectManager.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/MultiSelectManager.java index c8b6f8528272..4cf1048b6ab4 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/MultiSelectManager.java +++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/MultiSelectManager.java @@ -657,15 +657,22 @@ public final class MultiSelectManager { // item A is tapped (and selected), then an in-progress band select covers A then uncovers // A, A should still be selected as it has been saved. To ensure this behavior, the saved // selection must be tracked separately. - private Set<String> mSelection = new HashSet<>(); - private Set<String> mProvisionalSelection = new HashSet<>(); + private final Set<String> mSelection; + private final Set<String> mProvisionalSelection; private String mDirectoryKey; - @VisibleForTesting - public Selection(String... ids) { - for (int i = 0; i < ids.length; i++) { - add(ids[i]); - } + public Selection() { + mSelection = new HashSet<String>(); + mProvisionalSelection = new HashSet<String>(); + } + + /** + * Used by CREATOR. + */ + private Selection(String directoryKey, List<String> selection) { + mDirectoryKey = directoryKey; + mSelection = new HashSet<String>(selection); + mProvisionalSelection = new HashSet<String>(); } /** @@ -687,7 +694,7 @@ public final class MultiSelectManager { * Returns an unordered array of selected positions (including any * provisional selections current in effect). */ - private List<String> toList() { + public List<String> toList() { ArrayList<String> selection = new ArrayList<String>(mSelection); selection.addAll(mProvisionalSelection); return selection; @@ -810,8 +817,11 @@ public final class MultiSelectManager { @VisibleForTesting void copyFrom(Selection source) { - mSelection = new HashSet<>(source.mSelection); - mProvisionalSelection = new HashSet<>(source.mProvisionalSelection); + mSelection.clear(); + mSelection.addAll(source.mSelection); + + mProvisionalSelection.clear(); + mProvisionalSelection.addAll(source.mProvisionalSelection); } @Override @@ -878,6 +888,26 @@ public final class MultiSelectManager { // We don't include provisional selection since it is // typically coupled to some other runtime state (like a band). } + + public static final ClassLoaderCreator<Selection> CREATOR = + new ClassLoaderCreator<Selection>() { + @Override + public Selection createFromParcel(Parcel in) { + return createFromParcel(in, null); + } + + @Override + public Selection createFromParcel(Parcel in, ClassLoader loader) { + return new Selection( + in.readString(), + (ArrayList<String>) in.readArrayList(loader)); + } + + @Override + public Selection[] newArray(int size) { + return new Selection[size]; + } + }; } /** diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/RenameDocumentFragment.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/RenameDocumentFragment.java index 7394c12558f8..38a71ec2d149 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/RenameDocumentFragment.java +++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/RenameDocumentFragment.java @@ -46,6 +46,7 @@ import android.widget.TextView.OnEditorActionListener; import com.android.documentsui.BaseActivity; import com.android.documentsui.DocumentsApplication; import com.android.documentsui.R; +import com.android.documentsui.Shared; import com.android.documentsui.Snackbars; import com.android.documentsui.model.DocumentInfo; @@ -55,6 +56,7 @@ import com.android.documentsui.model.DocumentInfo; public class RenameDocumentFragment extends DialogFragment { private static final String TAG_RENAME_DOCUMENT = "rename_document"; private DocumentInfo mDocument; + private EditText mEditText; public static void show(FragmentManager fm, DocumentInfo document) { final RenameDocumentFragment dialog = new RenameDocumentFragment(); @@ -62,6 +64,11 @@ public class RenameDocumentFragment extends DialogFragment { dialog.show(fm, TAG_RENAME_DOCUMENT); } + /** + * Creates the dialog UI. + * @param savedInstanceState + * @return + */ @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Context context = getActivity(); @@ -69,8 +76,7 @@ public class RenameDocumentFragment extends DialogFragment { LayoutInflater dialogInflater = LayoutInflater.from(builder.getContext()); View view = dialogInflater.inflate(R.layout.dialog_file_name, null, false); - final EditText editText = (EditText) view.findViewById(android.R.id.text1); - fillWithFileName(editText, mDocument.displayName); + mEditText = (EditText) view.findViewById(android.R.id.text1); builder.setTitle(R.string.menu_rename); builder.setView(view); @@ -79,7 +85,7 @@ public class RenameDocumentFragment extends DialogFragment { new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { - renameDocuments(editText.getText().toString()); + renameDocuments(mEditText.getText().toString()); } }); @@ -87,7 +93,7 @@ public class RenameDocumentFragment extends DialogFragment { final AlertDialog dialog = builder.create(); - editText.setOnEditorActionListener( + mEditText.setOnEditorActionListener( new OnEditorActionListener() { @Override public boolean onEditorAction( @@ -95,18 +101,51 @@ public class RenameDocumentFragment extends DialogFragment { if ((actionId == EditorInfo.IME_ACTION_DONE) || (event != null && event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.hasNoModifiers())) { - renameDocuments(editText.getText().toString()); + renameDocuments(mEditText.getText().toString()); dialog.dismiss(); return true; } return false; } }); - return dialog; } /** + * Sets/Restores the data. + * @param savedInstanceState + * @return + */ + @Override + public void onActivityCreated(Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + + if(savedInstanceState == null) { + // Fragment created for the first time, we set the text. + // mDocument value was set in show + mEditText.setText(mDocument.displayName); + } + else { + // Fragment restored, text was restored automatically. + // mDocument value needs to be restored. + mDocument = savedInstanceState.getParcelable(Shared.EXTRA_DOC); + } + // Do selection in both cases, because we cleared it. + selectFileName(mEditText); + } + + @Override + public void onSaveInstanceState(Bundle outState) { + // Clear selection before storing state and restore it manually, + // because otherwise after rotation selection is displayed with cut/copy menu visible :/ + clearFileNameSelection(mEditText); + + super.onSaveInstanceState(outState); + + outState.putParcelable(Shared.EXTRA_DOC, mDocument); + } + + /** * Validates if string is a proper document name. * Checks if string is not empty. More rules might be added later. * @param docName string representing document name @@ -120,12 +159,21 @@ public class RenameDocumentFragment extends DialogFragment { * Fills text field with the file name and selects the name without extension. * * @param editText text field to be filled - * @param name full name of the file */ - private void fillWithFileName(EditText editText, String name) { - editText.setText(name); - int separatorIndex = name.indexOf("."); - editText.setSelection(0, separatorIndex == -1 ? name.length() : separatorIndex); + private void selectFileName(EditText editText) { + String text = editText.getText().toString(); + int separatorIndex = text.indexOf("."); + editText.setSelection(0, + (separatorIndex == -1 || mDocument.isDirectory()) ? text.length() : separatorIndex); + } + + /** + * Clears selection in text field. + * + * @param editText text field to be cleared. + */ + private void clearFileNameSelection(EditText editText) { + editText.setSelection(0, 0); } private void renameDocuments(String newDisplayName) { diff --git a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java b/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java index e9fdab090c18..d74121e536bd 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java +++ b/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java @@ -207,7 +207,13 @@ public class DocumentInfo implements Durable, Parcelable { return "Document{" + "docId=" + documentId + ", name=" + displayName + + ", isContainer=" + isContainer() + ", isDirectory=" + isDirectory() + + ", isArchive=" + isArchive() + + ", isVirtualDocument=" + isVirtualDocument() + + ", isDeleteSupported=" + isDeleteSupported() + + ", isCreateSupported=" + isCreateSupported() + + ", isRenameSupported=" + isRenameSupported() + "}"; } @@ -231,6 +237,10 @@ public class DocumentInfo implements Durable, Parcelable { return (flags & Document.FLAG_SUPPORTS_DELETE) != 0; } + public boolean isRemoveSupported() { + return (flags & Document.FLAG_SUPPORTS_REMOVE) != 0; + } + public boolean isRenameSupported() { return (flags & Document.FLAG_SUPPORTS_RENAME) != 0; } diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/CopyJob.java b/packages/DocumentsUI/src/com/android/documentsui/services/CopyJob.java index dad86977c7a2..844d07ad1721 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/services/CopyJob.java +++ b/packages/DocumentsUI/src/com/android/documentsui/services/CopyJob.java @@ -129,10 +129,19 @@ class CopyJob extends Job { } Notification getProgressNotification(@StringRes int msgId) { - double completed = (double) this.mBytesCopied / mBatchSize; - mProgressBuilder.setProgress(100, (int) (completed * 100), false); - mProgressBuilder.setContentInfo( - NumberFormat.getPercentInstance().format(completed)); + if (mBatchSize >= 0) { + double completed = (double) this.mBytesCopied / mBatchSize; + mProgressBuilder.setProgress(100, (int) (completed * 100), false); + mProgressBuilder.setContentInfo( + NumberFormat.getPercentInstance().format(completed)); + } else { + // If the total file size failed to compute on some files, then show + // an indeterminate spinner. CopyJob would most likely fail on those + // files while copying, but would continue with another files. + // Also, if the total size is 0 bytes, show an indeterminate spinner. + mProgressBuilder.setProgress(0, 0, true); + } + if (mRemainingTime > 0) { mProgressBuilder.setContentText(service.getString(msgId, DateUtils.formatDuration(mRemainingTime))); @@ -208,11 +217,15 @@ class CopyJob extends Job { } @Override - void start() throws RemoteException { + void start() { mStartTime = elapsedRealtime(); - // client - mBatchSize = calculateSize(mSrcs); + try { + mBatchSize = calculateSize(mSrcs); + } catch (ResourceException e) { + Log.w(TAG, "Failed to calculate total size. Copying without progress."); + mBatchSize = -1; + } DocumentInfo srcInfo; DocumentInfo dstInfo = stack.peek(); @@ -220,9 +233,13 @@ class CopyJob extends Job { srcInfo = mSrcs.get(i); // Guard unsupported recursive operation. - if (dstInfo.equals(srcInfo) || isDescendentOf(srcInfo, dstInfo)) { - onFileFailed(srcInfo, - "Skipping recursive operation on directory " + dstInfo.derivedUri + "."); + try { + if (dstInfo.equals(srcInfo) || isDescendentOf(srcInfo, dstInfo)) { + throw new ResourceException("Cannot copy to itself recursively."); + } + } catch (ResourceException e) { + Log.e(TAG, e.toString()); + onFileFailed(srcInfo); continue; } @@ -230,7 +247,12 @@ class CopyJob extends Job { "Copying " + srcInfo.displayName + " (" + srcInfo.derivedUri + ")" + " to " + dstInfo.displayName + " (" + dstInfo.derivedUri + ")"); - processDocument(srcInfo, null, dstInfo); + try { + processDocument(srcInfo, null, dstInfo); + } catch (ResourceException e) { + Log.e(TAG, e.toString()); + onFileFailed(srcInfo); + } } Metrics.logFileOperation(service, operationType, mSrcs, dstInfo); } @@ -259,13 +281,12 @@ class CopyJob extends Job { * @param src DocumentInfos for the documents to copy. * @param srcParent DocumentInfo for the parent of the document to process. * @param dstDirInfo The destination directory. - * @return True on success, false on failure. - * @throws RemoteException + * @throws ResourceException * * TODO: Stop passing srcParent, as it's not used for copy, but for move only. */ - boolean processDocument(DocumentInfo src, DocumentInfo srcParent, - DocumentInfo dstDirInfo) throws RemoteException { + void processDocument(DocumentInfo src, DocumentInfo srcParent, + DocumentInfo dstDirInfo) throws ResourceException { // TODO: When optimized copy kicks in, we'll not making any progress updates. // For now. Local storage isn't using optimized copy. @@ -274,22 +295,28 @@ class CopyJob extends Job { // If not supported, then fallback to byte-by-byte copy/move. if (src.authority.equals(dstDirInfo.authority)) { if ((src.flags & Document.FLAG_SUPPORTS_COPY) != 0) { - if (DocumentsContract.copyDocument(getClient(src), src.derivedUri, - dstDirInfo.derivedUri) == null) { - onFileFailed(src, - "Provider side copy failed for documents: " + src.derivedUri + "."); - return false; + try { + if (DocumentsContract.copyDocument(getClient(src), src.derivedUri, + dstDirInfo.derivedUri) == null) { + throw new ResourceException("Provider side copy failed for document %s.", + src.derivedUri); + } + } catch (ResourceException e) { + throw e; + } catch (RemoteException | RuntimeException e) { + throw new ResourceException( + "Provider side copy failed for document %s due to an exception.", + src.derivedUri, e); } - return true; + return; } } // If we couldn't do an optimized copy...we fall back to vanilla byte copy. - return byteCopyDocument(src, dstDirInfo); + byteCopyDocument(src, dstDirInfo); } - boolean byteCopyDocument(DocumentInfo src, DocumentInfo dest) - throws RemoteException { + void byteCopyDocument(DocumentInfo src, DocumentInfo dest) throws ResourceException { final String dstMimeType; final String dstDisplayName; @@ -297,8 +324,14 @@ class CopyJob extends Job { // If the file is virtual, but can be converted to another format, then try to copy it // as such format. Also, append an extension for the target mime type (if known). if (src.isVirtualDocument()) { - final String[] streamTypes = getContentResolver().getStreamTypes( - src.derivedUri, "*/*"); + String[] streamTypes = null; + try { + streamTypes = getContentResolver().getStreamTypes(src.derivedUri, "*/*"); + } catch (RuntimeException e) { + throw new ResourceException( + "Failed to obtain streamable types for %s due to an exception.", + src.derivedUri, e); + } if (streamTypes != null && streamTypes.length > 0) { dstMimeType = streamTypes[0]; final String extension = MimeTypeMap.getSingleton(). @@ -306,8 +339,8 @@ class CopyJob extends Job { dstDisplayName = src.displayName + (extension != null ? "." + extension : src.displayName); } else { - onFileFailed(src, "Cannot copy virtual file. No streamable formats available."); - return false; + throw new ResourceException("Cannot copy virtual file %s. No streamable formats " + + "available.", src.derivedUri); } } else { dstMimeType = src.mimeType; @@ -316,33 +349,35 @@ class CopyJob extends Job { // Create the target document (either a file or a directory), then copy recursively the // contents (bytes or children). - final Uri dstUri = DocumentsContract.createDocument( - getClient(dest), dest.derivedUri, dstMimeType, dstDisplayName); + Uri dstUri = null; + try { + dstUri = DocumentsContract.createDocument( + getClient(dest), dest.derivedUri, dstMimeType, dstDisplayName); + } catch (RemoteException | RuntimeException e) { + throw new ResourceException( + "Couldn't create destination document " + dstDisplayName + " in directory %s " + + "due to an exception.", dest.derivedUri, e); + } if (dstUri == null) { // If this is a directory, the entire subdir will not be copied over. - onFileFailed(src, - "Couldn't create destination document " + dstDisplayName - + " in directory " + dest.displayName + "."); - return false; + throw new ResourceException( + "Couldn't create destination document " + dstDisplayName + " in directory %s.", + dest.derivedUri); } DocumentInfo dstInfo = null; try { dstInfo = DocumentInfo.fromUri(getContentResolver(), dstUri); - } catch (FileNotFoundException e) { - onFileFailed(src, - "Could not load DocumentInfo for newly created file: " + dstUri + "."); - return false; + } catch (FileNotFoundException | RuntimeException e) { + throw new ResourceException("Could not load DocumentInfo for newly created file %s.", + dstUri); } - final boolean success; if (Document.MIME_TYPE_DIR.equals(src.mimeType)) { - success = copyDirectoryHelper(src, dstInfo); + copyDirectoryHelper(src, dstInfo); } else { - success = copyFileHelper(src, dstInfo, dstMimeType); + copyFileHelper(src, dstInfo, dest, dstMimeType); } - - return success; } /** @@ -352,11 +387,10 @@ class CopyJob extends Job { * @param srcDir Info of the directory to copy from. The routine will copy the directory's * contents, not the directory itself. * @param destDir Info of the directory to copy to. Must be created beforehand. - * @return True on success, false if some of the children failed to copy. - * @throws RemoteException + * @throws ResourceException */ - private boolean copyDirectoryHelper(DocumentInfo srcDir, DocumentInfo destDir) - throws RemoteException { + private void copyDirectoryHelper(DocumentInfo srcDir, DocumentInfo destDir) + throws ResourceException { // Recurse into directories. Copy children into the new subdirectory. final String queryColumns[] = new String[] { Document.COLUMN_DISPLAY_NAME, @@ -367,106 +401,143 @@ class CopyJob extends Job { }; Cursor cursor = null; boolean success = true; + // Iterate over srcs in the directory; copy to the destination directory. + final Uri queryUri = buildChildDocumentsUri(srcDir.authority, srcDir.documentId); try { - // Iterate over srcs in the directory; copy to the destination directory. - final Uri queryUri = buildChildDocumentsUri(srcDir.authority, srcDir.documentId); - cursor = getClient(srcDir).query(queryUri, queryColumns, null, null, null); + try { + cursor = getClient(srcDir).query(queryUri, queryColumns, null, null, null); + } catch (RemoteException | RuntimeException e) { + throw new ResourceException("Failed to query children of %s due to an exception.", + srcDir.derivedUri, e); + } + + DocumentInfo src; while (cursor.moveToNext() && !isCanceled()) { - DocumentInfo src = DocumentInfo.fromCursor(cursor, srcDir.authority); - success &= processDocument(src, srcDir, destDir); + try { + src = DocumentInfo.fromCursor(cursor, srcDir.authority); + processDocument(src, srcDir, destDir); + } catch (RuntimeException e) { + Log.e(TAG, "Failed to recursively process a file %s due to an exception." + .format(srcDir.derivedUri.toString()), e); + success = false; + } } + } catch (RuntimeException e) { + Log.e(TAG, "Failed to copy a file %s to %s. " + .format(srcDir.derivedUri.toString(), destDir.derivedUri.toString()), e); + success = false; } finally { IoUtils.closeQuietly(cursor); } - return success; + if (!success) { + throw new RuntimeException("Some files failed to copy during a recursive " + + "directory copy."); + } } /** * Handles copying a single file. * - * @param srcUriInfo Info of the file to copy from. - * @param dstUriInfo Info of the *file* to copy to. Must be created beforehand. + * @param src Info of the file to copy from. + * @param dest Info of the *file* to copy to. Must be created beforehand. + * @param destParent Info of the parent of the destination. * @param mimeType Mime type for the target. Can be different than source for virtual files. - * @return True on success, false on error. - * @throws RemoteException + * @throws ResourceException */ - private boolean copyFileHelper(DocumentInfo src, DocumentInfo dest, String mimeType) - throws RemoteException { + private void copyFileHelper(DocumentInfo src, DocumentInfo dest, DocumentInfo destParent, + String mimeType) throws ResourceException { CancellationSignal canceller = new CancellationSignal(); + AssetFileDescriptor srcFileAsAsset = null; ParcelFileDescriptor srcFile = null; ParcelFileDescriptor dstFile = null; InputStream in = null; OutputStream out = null; + boolean success = false; - boolean success = true; try { // If the file is virtual, but can be converted to another format, then try to copy it // as such format. if (src.isVirtualDocument()) { - final AssetFileDescriptor srcFileAsAsset = - getClient(src).openTypedAssetFileDescriptor( + try { + srcFileAsAsset = getClient(src).openTypedAssetFileDescriptor( src.derivedUri, mimeType, null, canceller); + } catch (FileNotFoundException | RemoteException | RuntimeException e) { + throw new ResourceException("Failed to open a file as asset for %s due to an " + + "exception.", src.derivedUri, e); + } srcFile = srcFileAsAsset.getParcelFileDescriptor(); - in = new AssetFileDescriptor.AutoCloseInputStream(srcFileAsAsset); + try { + in = new AssetFileDescriptor.AutoCloseInputStream(srcFileAsAsset); + } catch (IOException e) { + throw new ResourceException("Failed to open a file input stream for %s due " + + "an exception.", src.derivedUri, e); + } } else { - srcFile = getClient(src).openFile(src.derivedUri, "r", canceller); + try { + srcFile = getClient(src).openFile(src.derivedUri, "r", canceller); + } catch (FileNotFoundException | RemoteException | RuntimeException e) { + throw new ResourceException( + "Failed to open a file for %s due to an exception.", src.derivedUri, e); + } in = new ParcelFileDescriptor.AutoCloseInputStream(srcFile); } - dstFile = getClient(dest).openFile(dest.derivedUri, "w", canceller); + try { + dstFile = getClient(dest).openFile(dest.derivedUri, "w", canceller); + } catch (FileNotFoundException | RemoteException | RuntimeException e) { + throw new ResourceException("Failed to open the destination file %s for writing " + + "due to an exception.", dest.derivedUri, e); + } out = new ParcelFileDescriptor.AutoCloseOutputStream(dstFile); byte[] buffer = new byte[32 * 1024]; int len; - while ((len = in.read(buffer)) != -1) { - if (isCanceled()) { - if (DEBUG) Log.d(TAG, "Canceled copy mid-copy. Id:" + id); - success = false; - break; + try { + while ((len = in.read(buffer)) != -1) { + if (isCanceled()) { + throw new ResourceException("Canceled copy mid-copy of %s", + src.derivedUri); + } + out.write(buffer, 0, len); + makeCopyProgress(len); } - out.write(buffer, 0, len); - makeCopyProgress(len); + + srcFile.checkError(); + } catch (IOException e) { + throw new ResourceException( + "Failed to copy bytes from %s to %s due to an IO exception.", + src.derivedUri, dest.derivedUri, e); } - srcFile.checkError(); - } catch (IOException e) { - success = false; - onFileFailed(src, "Exception thrown while copying from " - + src.derivedUri + " to " + dest.derivedUri + "."); + if (src.isVirtualDocument()) { + convertedFiles.add(src); + } - if (dstFile != null) { + success = true; + } finally { + if (!success) { + if (dstFile != null) { + try { + dstFile.closeWithError("Error copying bytes."); + } catch (IOException closeError) { + Log.w(TAG, "Error closing destination.", closeError); + } + } + + if (DEBUG) Log.d(TAG, "Cleaning up failed operation leftovers."); + canceller.cancel(); try { - dstFile.closeWithError(e.getMessage()); - } catch (IOException closeError) { - Log.e(TAG, "Error closing destination", closeError); + deleteDocument(dest, destParent); + } catch (ResourceException e) { + Log.w(TAG, "Failed to cleanup after copy error: " + src.derivedUri, e); } } - } finally { + // This also ensures the file descriptors are closed. IoUtils.closeQuietly(in); IoUtils.closeQuietly(out); } - - if (!success) { - if (DEBUG) Log.d(TAG, "Cleaning up failed operation leftovers."); - canceller.cancel(); - try { - DocumentsContract.deleteDocument(getClient(dest), dest.derivedUri); - } catch (RemoteException e) { - // RemoteExceptions usually signal that the connection is dead, so there's no - // point attempting to continue. Propagate the exception up so the copy job is - // cancelled. - Log.w(TAG, "Failed to cleanup after copy error: " + src.derivedUri, e); - throw e; - } - } - - if (src.isVirtualDocument() && success) { - convertedFiles.add(src); - } - - return success; } /** @@ -475,16 +546,20 @@ class CopyJob extends Job { * * @param srcs * @return Size in bytes. - * @throws RemoteException + * @throws ResourceException */ - private long calculateSize(List<DocumentInfo> srcs) - throws RemoteException { + private long calculateSize(List<DocumentInfo> srcs) throws ResourceException { long result = 0; for (DocumentInfo src : srcs) { if (src.isDirectory()) { // Directories need to be recursed into. - result += calculateFileSizesRecursively(getClient(src), src.derivedUri); + try { + result += calculateFileSizesRecursively(getClient(src), src.derivedUri); + } catch (RemoteException e) { + throw new ResourceException("Failed to obtain the client for %s.", + src.derivedUri); + } } else { result += src.size; } @@ -495,10 +570,10 @@ class CopyJob extends Job { /** * Calculates (recursively) the cumulative size of all the files under the given directory. * - * @throws RemoteException + * @throws ResourceException */ private static long calculateFileSizesRecursively( - ContentProviderClient client, Uri uri) throws RemoteException { + ContentProviderClient client, Uri uri) throws ResourceException { final String authority = uri.getAuthority(); final Uri queryUri = buildChildDocumentsUri(authority, getDocumentId(uri)); final String queryColumns[] = new String[] { @@ -524,6 +599,9 @@ class CopyJob extends Job { result += size > 0 ? size : 0; } } + } catch (RemoteException | RuntimeException e) { + throw new ResourceException( + "Failed to calculate size for %s due to an exception.", uri, e); } finally { IoUtils.closeQuietly(cursor); } @@ -533,21 +611,22 @@ class CopyJob extends Job { /** * Returns true if {@code doc} is a descendant of {@code parentDoc}. - * @throws RemoteException + * @throws ResourceException */ boolean isDescendentOf(DocumentInfo doc, DocumentInfo parent) - throws RemoteException { + throws ResourceException { if (parent.isDirectory() && doc.authority.equals(parent.authority)) { - return isChildDocument(getClient(doc), doc.derivedUri, parent.derivedUri); + try { + return isChildDocument(getClient(doc), doc.derivedUri, parent.derivedUri); + } catch (RemoteException | RuntimeException e) { + throw new ResourceException( + "Failed to check if %s is a child of %s due to an exception.", + doc.derivedUri, parent.derivedUri, e); + } } return false; } - private void onFileFailed(DocumentInfo file, String msg) { - Log.w(TAG, msg); - onFileFailed(file); - } - @Override public String toString() { return new StringBuilder() diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/DeleteJob.java b/packages/DocumentsUI/src/com/android/documentsui/services/DeleteJob.java index 11c3a29fe319..25bca4f3df25 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/services/DeleteJob.java +++ b/packages/DocumentsUI/src/com/android/documentsui/services/DeleteJob.java @@ -22,7 +22,6 @@ import static com.android.documentsui.services.FileOperationService.OPERATION_DE import android.app.Notification; import android.app.Notification.Builder; import android.content.Context; -import android.os.RemoteException; import android.util.Log; import com.android.documentsui.Metrics; @@ -81,13 +80,13 @@ final class DeleteJob extends Job { } @Override - void start() throws RemoteException { + void start() { for (DocumentInfo doc : mSrcs) { if (DEBUG) Log.d(TAG, "Deleting document @ " + doc.derivedUri); - // TODO: Start using mSrcParent as soon as DocumentsProvider::removeDocument() is - // implemented. - if (!deleteDocument(doc)) { - Log.w(TAG, "Failed to delete document @ " + doc.derivedUri); + try { + deleteDocument(doc, mSrcParent); + } catch (ResourceException e) { + Log.e(TAG, "Failed to delete document @ " + doc.derivedUri); onFileFailed(doc); } } diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/Job.java b/packages/DocumentsUI/src/com/android/documentsui/services/Job.java index 77517ca9085b..afb3374699c9 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/services/Job.java +++ b/packages/DocumentsUI/src/com/android/documentsui/services/Job.java @@ -116,19 +116,17 @@ abstract public class Job implements Runnable { listener.onStart(this); try { start(); - } catch (Exception e) { - // In the case of an unmanaged failure, we still want - // to resolve business in an orderly fashion. That'll - // ensure the service is shut down and notifications - // shown/closed. - Log.e(TAG, "Operation failed due to an exception.", e); + } catch (RuntimeException e) { + // No exceptions should be thrown here, as all calls to the provider must be + // handled within Job implementations. However, just in case catch them here. + Log.e(TAG, "Operation failed due to an unhandled runtime exception.", e); Metrics.logFileOperationErrors(service, operationType, failedFiles); } finally { listener.onFinished(this); } } - abstract void start() throws RemoteException; + abstract void start(); abstract Notification getSetupNotification(); // TODO: Progress notification for deletes. @@ -186,15 +184,20 @@ abstract public class Job implements Runnable { return false; } - final boolean deleteDocument(DocumentInfo doc) { + final void deleteDocument(DocumentInfo doc, DocumentInfo parent) throws ResourceException { try { - DocumentsContract.deleteDocument(getClient(doc), doc.derivedUri); - } catch (RemoteException e) { - Log.w(TAG, "Failed to delete file: " + doc.derivedUri, e); - return false; + if (doc.isRemoveSupported()) { + DocumentsContract.removeDocument(getClient(doc), doc.derivedUri, parent.derivedUri); + } else if (doc.isDeleteSupported()) { + DocumentsContract.deleteDocument(getClient(doc), doc.derivedUri); + } else { + throw new ResourceException("Unable to delete source document as the file is " + + "not deletable nor removable: %s.", doc.derivedUri); + } + } catch (RemoteException | RuntimeException e) { + throw new ResourceException("Failed to delete file %s due to an exception.", + doc.derivedUri, e); } - - return true; // victory dance! } Notification getSetupNotification(String content) { diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java b/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java index 9b7207726256..b5826a46ea84 100644 --- a/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java +++ b/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java @@ -80,8 +80,8 @@ final class MoveJob extends CopyJob { R.plurals.move_error_notification_title, R.drawable.ic_menu_copy); } - boolean processDocument(DocumentInfo src, DocumentInfo srcParent, DocumentInfo dest) - throws RemoteException { + void processDocument(DocumentInfo src, DocumentInfo srcParent, DocumentInfo dest) + throws ResourceException { // TODO: When optimized move kicks in, we're not making any progress updates. FIX IT! @@ -89,13 +89,19 @@ final class MoveJob extends CopyJob { // If not supported, then fallback to byte-by-byte copy/move. if (src.authority.equals(dest.authority)) { if ((src.flags & Document.FLAG_SUPPORTS_MOVE) != 0) { - if (DocumentsContract.moveDocument(getClient(src), src.derivedUri, - srcParent != null ? srcParent.derivedUri : mSrcParent.derivedUri, - dest.derivedUri) == null) { - onFileFailed(src); - return false; + try { + if (DocumentsContract.moveDocument(getClient(src), src.derivedUri, + srcParent != null ? srcParent.derivedUri : mSrcParent.derivedUri, + dest.derivedUri) == null) { + throw new ResourceException("Provider side move failed for document %s.", + src.derivedUri); + } + } catch (RuntimeException | RemoteException e) { + throw new ResourceException( + "Provider side move failed for document %s due to an exception.", + src.derivedUri, e); } - return true; + return; } } @@ -103,16 +109,15 @@ final class MoveJob extends CopyJob { // conversion, and the source file should not be deleted in such case (as it's a different // file). if (src.isVirtualDocument()) { - Log.w(TAG, "Cannot move virtual files byte by byte."); - onFileFailed(src); - return false; + throw new ResourceException("Cannot move virtual file %s byte by byte.", + src.derivedUri); } // If we couldn't do an optimized copy...we fall back to vanilla byte copy. - boolean copied = byteCopyDocument(src, dest); + byteCopyDocument(src, dest); - // TODO: Replace deleteDocument() with removeDocument() once implemented. - return copied && !isCanceled() && deleteDocument(src); + // Remove the source document. + deleteDocument(src, srcParent); } @Override diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/ResourceException.java b/packages/DocumentsUI/src/com/android/documentsui/services/ResourceException.java new file mode 100644 index 000000000000..7d3d91a2d50d --- /dev/null +++ b/packages/DocumentsUI/src/com/android/documentsui/services/ResourceException.java @@ -0,0 +1,45 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.documentsui.services; + +import android.net.Uri; + +public class ResourceException extends Exception { + public ResourceException(String message, Exception e) { + super(message, e); + } + + public ResourceException(String message, Uri uri1, Exception e) { + super(String.format(message, uri1.toString()), e); + } + + public ResourceException(String message, Uri uri1, Uri uri2, Exception e) { + super(String.format(message, uri1.toString(), uri2.toString()), e); + } + + public ResourceException(String message) { + super(message); + } + + public ResourceException(String message, Uri uri1) { + super(String.format(message, uri1.toString())); + } + + public ResourceException(String message, Uri uri1, Uri uri2) { + super(message.format(uri1.toString(), uri2.toString())); + } +} diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/ActivityTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/ActivityTest.java index 34f11207b006..adcfef333def 100644 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/ActivityTest.java +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/ActivityTest.java @@ -20,22 +20,24 @@ import static com.android.documentsui.StubProvider.DEFAULT_AUTHORITY; import static com.android.documentsui.StubProvider.ROOT_0_ID; import static com.android.documentsui.StubProvider.ROOT_1_ID; +import android.annotation.Nullable; import android.app.Activity; -import android.app.Instrumentation; import android.content.ContentProviderClient; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.os.RemoteException; import android.provider.DocumentsContract.Document; -import android.support.test.uiautomator.By; import android.support.test.uiautomator.Configurator; import android.support.test.uiautomator.UiDevice; import android.support.test.uiautomator.UiObjectNotFoundException; -import android.support.test.uiautomator.Until; import android.test.ActivityInstrumentationTestCase2; import android.view.MotionEvent; +import com.android.documentsui.bots.DirectoryListBot; +import com.android.documentsui.bots.KeyboardBot; +import com.android.documentsui.bots.RootsListBot; +import com.android.documentsui.bots.UiBot; import com.android.documentsui.model.RootInfo; /** @@ -56,7 +58,7 @@ public abstract class ActivityTest<T extends Activity> extends ActivityInstrumen public static final String fileName4 = "poodles.text"; public static final String fileNameNoRename = "NO_RENAMEfile.txt"; - public UiBot bot; + public Bots bots; public UiDevice device; public Context context; @@ -71,15 +73,27 @@ public abstract class ActivityTest<T extends Activity> extends ActivityInstrumen super(activityClass); } + /* + * Returns the root that will be opened within the activity. + * By default tests are started with one of the test roots. + * Override the method if you want to open different root on start. + * @return Root that will be opened. Return null if you want to open activity's default root. + */ + @Nullable + protected RootInfo getInitialRoot() { + return rootDir0; + } + @Override public void setUp() throws Exception { device = UiDevice.getInstance(getInstrumentation()); // NOTE: Must be the "target" context, else security checks in content provider will fail. context = getInstrumentation().getTargetContext(); - bot = new UiBot(device, context, TIMEOUT); + + bots = new Bots(device, context, TIMEOUT); Configurator.getInstance().setToolType(MotionEvent.TOOL_TYPE_MOUSE); - bot.revealLauncher(); + bots.main.revealLauncher(); mResolver = context.getContentResolver(); mClient = mResolver.acquireUnstableContentProviderClient(DEFAULT_AUTHORITY); @@ -90,7 +104,7 @@ public abstract class ActivityTest<T extends Activity> extends ActivityInstrumen launchActivity(); - bot.revealApp(); + bots.main.revealApp(); resetStorage(); } @@ -104,6 +118,9 @@ public abstract class ActivityTest<T extends Activity> extends ActivityInstrumen final Intent intent = context.getPackageManager().getLaunchIntentForPackage( UiBot.TARGET_PKG); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); + if (getInitialRoot() != null) { + intent.setData(getInitialRoot().getUri()); + } setActivityIntent(intent); getActivity(); // Launch the activity. } @@ -125,12 +142,29 @@ public abstract class ActivityTest<T extends Activity> extends ActivityInstrumen } void assertDefaultContentOfTestDir0() throws UiObjectNotFoundException { - bot.assertDocumentsCount(ROOT_0_ID, 4); - bot.assertHasDocuments(fileName1, fileName2, dirName1, fileNameNoRename); + bots.directory.assertDocumentsCount(4); + bots.directory.assertDocumentsPresent(fileName1, fileName2, dirName1, fileNameNoRename); } void assertDefaultContentOfTestDir1() throws UiObjectNotFoundException { - bot.assertDocumentsCount(ROOT_1_ID, 2); - bot.assertHasDocuments(fileName3, fileName4); + bots.directory.assertDocumentsCount(2); + bots.directory.assertDocumentsPresent(fileName3, fileName4); + } + + /** + * Handy collection of bots for working with Files app. + */ + public static final class Bots { + public final UiBot main; + public final RootsListBot roots; + public final DirectoryListBot directory; + public final KeyboardBot keyboard; + + private Bots(UiDevice device, Context context, int timeout) { + this.main = new UiBot(device, context, TIMEOUT); + this.roots = new RootsListBot(device, context, TIMEOUT); + this.directory = new DirectoryListBot(device, context, TIMEOUT); + this.keyboard = new KeyboardBot(device, context, TIMEOUT); + } } } diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/DownloadsActivityUiTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/DownloadsActivityUiTest.java index c51f92756012..79d7887198b5 100644 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/DownloadsActivityUiTest.java +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/DownloadsActivityUiTest.java @@ -52,13 +52,13 @@ public class DownloadsActivityUiTest extends ActivityTest<DownloadsActivity> { public void testWindowTitle() throws Exception { initTestFiles(); - bot.assertWindowTitle(ROOT_0_ID); + bots.main.assertWindowTitle(ROOT_0_ID); } public void testFilesListed() throws Exception { initTestFiles(); - bot.assertHasDocuments("file0.log", "file1.png", "file2.csv"); + bots.directory.assertDocumentsPresent("file0.log", "file1.png", "file2.csv"); } public void testFilesList_LiveUpdate() throws Exception { @@ -66,30 +66,31 @@ public class DownloadsActivityUiTest extends ActivityTest<DownloadsActivity> { mDocsHelper.createDocument(rootDir0, "yummers/sandwich", "Ham & Cheese.sandwich"); - bot.waitForDocument("Ham & Cheese.sandwich"); - bot.assertHasDocuments("file0.log", "file1.png", "file2.csv", "Ham & Cheese.sandwich"); + bots.directory.waitForDocument("Ham & Cheese.sandwich"); + bots.directory.assertDocumentsPresent( + "file0.log", "file1.png", "file2.csv", "Ham & Cheese.sandwich"); } public void testDeleteDocument() throws Exception { initTestFiles(); - bot.clickDocument("file1.png"); + bots.directory.clickDocument("file1.png"); device.waitForIdle(); - bot.menuDelete().click(); + bots.main.menuDelete().click(); - bot.waitForDeleteSnackbar(); - assertFalse(bot.hasDocuments("file1.png")); + bots.directory.waitForDeleteSnackbar(); + bots.directory.assertDocumentsAbsent("file1.png"); - bot.waitForDeleteSnackbarGone(); - assertFalse(bot.hasDocuments("file1.png")); + bots.directory.waitForDeleteSnackbarGone(); + bots.directory.assertDocumentsAbsent("file1.png"); } public void testSupportsShare() throws Exception { initTestFiles(); - bot.clickDocument("file1.png"); + bots.directory.clickDocument("file1.png"); device.waitForIdle(); - assertNotNull(bot.menuShare()); + assertNotNull(bots.main.menuShare()); } public void testClosesOnBack() throws Exception { diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/FilesActivityUiTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/FilesActivityUiTest.java index 95515dbd6d75..38e125704f76 100644 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/FilesActivityUiTest.java +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/FilesActivityUiTest.java @@ -23,6 +23,8 @@ import android.os.RemoteException; import android.test.suitebuilder.annotation.LargeTest; import android.view.KeyEvent; +import com.android.documentsui.model.RootInfo; + @LargeTest public class FilesActivityUiTest extends ActivityTest<FilesActivity> { @@ -31,6 +33,11 @@ public class FilesActivityUiTest extends ActivityTest<FilesActivity> { } @Override + protected RootInfo getInitialRoot() { + return null; + } + + @Override public void initTestFiles() throws RemoteException { mDocsHelper.createDocument(rootDir0, "text/plain", "file0.log"); mDocsHelper.createDocument(rootDir0, "image/png", "file1.png"); @@ -43,11 +50,11 @@ public class FilesActivityUiTest extends ActivityTest<FilesActivity> { public void testRootsListed() throws Exception { initTestFiles(); - bot.openRoot(ROOT_0_ID); + bots.roots.openRoot(ROOT_0_ID); // Should also have Drive, but that requires pre-configuration of devices // We omit for now. - bot.assertHasRoots( + bots.roots.assertHasRoots( "Images", "Videos", "Audio", @@ -60,93 +67,108 @@ public class FilesActivityUiTest extends ActivityTest<FilesActivity> { public void testFilesListed() throws Exception { initTestFiles(); - bot.openRoot(ROOT_0_ID); - bot.assertHasDocuments("file0.log", "file1.png", "file2.csv"); + bots.roots.openRoot(ROOT_0_ID); + bots.directory.assertDocumentsPresent("file0.log", "file1.png", "file2.csv"); } public void testLoadsHomeDirectoryByDefault() throws Exception { initTestFiles(); device.waitForIdle(); - bot.assertWindowTitle("Documents"); + bots.main.assertWindowTitle("Documents"); } public void testRootClickSetsWindowTitle() throws Exception { initTestFiles(); - bot.openRoot("Downloads"); - bot.assertWindowTitle("Downloads"); + bots.roots.openRoot("Downloads"); + bots.main.assertWindowTitle("Downloads"); } public void testFilesList_LiveUpdate() throws Exception { initTestFiles(); - bot.openRoot(ROOT_0_ID); + bots.roots.openRoot(ROOT_0_ID); mDocsHelper.createDocument(rootDir0, "yummers/sandwich", "Ham & Cheese.sandwich"); - bot.waitForDocument("Ham & Cheese.sandwich"); - bot.assertHasDocuments("file0.log", "file1.png", "file2.csv", "Ham & Cheese.sandwich"); + bots.directory.waitForDocument("Ham & Cheese.sandwich"); + bots.directory.assertDocumentsPresent( + "file0.log", "file1.png", "file2.csv", "Ham & Cheese.sandwich"); + } + + public void testCreateDirectory() throws Exception { + initTestFiles(); + + bots.roots.openRoot(ROOT_0_ID); + + bots.main.openOverflowMenu(); + bots.main.menuNewFolder().click(); + bots.main.setDialogText("Kung Fu Panda"); + + bots.keyboard.pressEnter(); + + bots.directory.assertDocumentsPresent("Kung Fu Panda"); } public void testDeleteDocument() throws Exception { initTestFiles(); - bot.openRoot(ROOT_0_ID); + bots.roots.openRoot(ROOT_0_ID); - bot.clickDocument("file1.png"); + bots.directory.clickDocument("file1.png"); device.waitForIdle(); - bot.menuDelete().click(); + bots.main.menuDelete().click(); - bot.waitForDeleteSnackbar(); - assertFalse(bot.hasDocuments("file1.png")); + bots.directory.waitForDeleteSnackbar(); + bots.directory.assertDocumentsAbsent("file1.png"); - bot.waitForDeleteSnackbarGone(); - assertFalse(bot.hasDocuments("file1.png")); + bots.directory.waitForDeleteSnackbarGone(); + bots.directory.assertDocumentsAbsent("file1.png"); // Now delete from another root. - bot.openRoot(ROOT_1_ID); + bots.roots.openRoot(ROOT_1_ID); - bot.clickDocument("poodles.text"); + bots.directory.clickDocument("poodles.text"); device.waitForIdle(); - bot.menuDelete().click(); + bots.main.menuDelete().click(); - bot.waitForDeleteSnackbar(); - assertFalse(bot.hasDocuments("poodles.text")); + bots.directory.waitForDeleteSnackbar(); + bots.directory.assertDocumentsAbsent("poodles.text"); - bot.waitForDeleteSnackbarGone(); - assertFalse(bot.hasDocuments("poodles.text")); + bots.directory.waitForDeleteSnackbarGone(); + bots.directory.assertDocumentsAbsent("poodles.text"); } // Tests that pressing tab switches focus between the roots and directory listings. public void testKeyboard_tab() throws Exception { - bot.pressKey(KeyEvent.KEYCODE_TAB); - bot.assertHasFocus("com.android.documentsui:id/roots_list"); - bot.pressKey(KeyEvent.KEYCODE_TAB); - bot.assertHasFocus("com.android.documentsui:id/dir_list"); + bots.main.pressKey(KeyEvent.KEYCODE_TAB); + bots.roots.assertHasFocus(); + bots.main.pressKey(KeyEvent.KEYCODE_TAB); + bots.directory.assertHasFocus(); } // Tests that arrow keys do not switch focus away from the dir list. public void testKeyboard_arrowsDirList() throws Exception { for (int i = 0; i < 10; i++) { - bot.pressKey(KeyEvent.KEYCODE_DPAD_LEFT); - bot.assertHasFocus("com.android.documentsui:id/dir_list"); + bots.main.pressKey(KeyEvent.KEYCODE_DPAD_LEFT); + bots.directory.assertHasFocus(); } for (int i = 0; i < 10; i++) { - bot.pressKey(KeyEvent.KEYCODE_DPAD_RIGHT); - bot.assertHasFocus("com.android.documentsui:id/dir_list"); + bots.main.pressKey(KeyEvent.KEYCODE_DPAD_RIGHT); + bots.directory.assertHasFocus(); } } // Tests that arrow keys do not switch focus away from the roots list. public void testKeyboard_arrowsRootsList() throws Exception { - bot.pressKey(KeyEvent.KEYCODE_TAB); + bots.main.pressKey(KeyEvent.KEYCODE_TAB); for (int i = 0; i < 10; i++) { - bot.pressKey(KeyEvent.KEYCODE_DPAD_RIGHT); - bot.assertHasFocus("com.android.documentsui:id/roots_list"); + bots.main.pressKey(KeyEvent.KEYCODE_DPAD_RIGHT); + bots.roots.assertHasFocus(); } for (int i = 0; i < 10; i++) { - bot.pressKey(KeyEvent.KEYCODE_DPAD_LEFT); - bot.assertHasFocus("com.android.documentsui:id/roots_list"); + bots.main.pressKey(KeyEvent.KEYCODE_DPAD_LEFT); + bots.roots.assertHasFocus(); } } } diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/RenameDocumentUiTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/RenameDocumentUiTest.java index 770bc2c2fd4b..2833418b11d6 100644 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/RenameDocumentUiTest.java +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/RenameDocumentUiTest.java @@ -23,8 +23,6 @@ import android.test.suitebuilder.annotation.LargeTest; @LargeTest public class RenameDocumentUiTest extends ActivityTest<FilesActivity> { - private static final String TAG = "RenamDocumentUiTest"; - private final String newName = "kitties.log"; public RenameDocumentUiTest() { @@ -35,125 +33,118 @@ public class RenameDocumentUiTest extends ActivityTest<FilesActivity> { public void setUp() throws Exception { super.setUp(); initTestFiles(); - bot.openRoot(ROOT_0_ID); } public void testRenameEnabled_SingleSelection() throws Exception { - bot.selectDocument(fileName1); - bot.openOverflowMenu(); - bot.assertMenuEnabled(R.string.menu_rename, true); + bots.directory.selectDocument(fileName1); + bots.main.openOverflowMenu(); + bots.main.assertMenuEnabled(R.string.menu_rename, true); // Dismiss more options window device.pressBack(); } public void testNoRenameSupport_SingleSelection() throws Exception { - bot.selectDocument(fileNameNoRename); - bot.openOverflowMenu(); - bot.assertMenuEnabled(R.string.menu_rename, false); + bots.directory.selectDocument(fileNameNoRename); + bots.main.openOverflowMenu(); + bots.main.assertMenuEnabled(R.string.menu_rename, false); // Dismiss more options window device.pressBack(); } public void testOneHasRenameSupport_MultipleSelection() throws Exception { - bot.selectDocument(fileName1); - bot.selectDocument(fileNameNoRename); - bot.openOverflowMenu(); - bot.assertMenuEnabled(R.string.menu_rename, false); + bots.directory.selectDocument(fileName1); + bots.directory.selectDocument(fileNameNoRename); + bots.main.openOverflowMenu(); + bots.main.assertMenuEnabled(R.string.menu_rename, false); // Dismiss more options window device.pressBack(); } public void testRenameDisabled_MultipleSelection() throws Exception { - bot.selectDocument(fileName1); - bot.selectDocument(fileName2); - bot.openOverflowMenu(); - bot.assertMenuEnabled(R.string.menu_rename, false); + bots.directory.selectDocument(fileName1); + bots.directory.selectDocument(fileName2); + bots.main.openOverflowMenu(); + bots.main.assertMenuEnabled(R.string.menu_rename, false); // Dismiss more options window device.pressBack(); } public void testRenameFile_OkButton() throws Exception { - bot.selectDocument(fileName1); - bot.openOverflowMenu(); - bot.openDialog(R.string.menu_rename); - bot.setDialogText(newName); + bots.directory.selectDocument(fileName1); + bots.main.openOverflowMenu(); + bots.main.menuRename().click(); + bots.main.setDialogText(newName); device.waitForIdle(TIMEOUT); - bot.findRenameDialogOkButton().click(); + bots.main.findRenameDialogOkButton().click(); device.waitForIdle(TIMEOUT); - bot.assertDocument(fileName1, false); - bot.assertDocument(newName, true); - bot.assertDocumentsCount(4); + bots.directory.assertDocumentsAbsent(fileName1); + bots.directory.assertDocumentsPresent(newName); + bots.directory.assertDocumentsCount(4); } public void testRenameFile_Enter() throws Exception { - bot.selectDocument(fileName1); - bot.openOverflowMenu(); - bot.openDialog(R.string.menu_rename); - bot.setDialogText(newName); + bots.directory.selectDocument(fileName1); + bots.main.openOverflowMenu(); + bots.main.menuRename().click(); + bots.main.setDialogText(newName); - pressEnter(); + bots.keyboard.pressEnter(); - bot.assertDocument(fileName1, false); - bot.assertDocument(newName, true); - bot.assertDocumentsCount(4); + bots.directory.assertDocumentsAbsent(fileName1); + bots.directory.assertDocumentsPresent(newName); + bots.directory.assertDocumentsCount(4); } public void testRenameFile_Cancel() throws Exception { - bot.selectDocument(fileName1); - bot.openOverflowMenu(); - bot.openDialog(R.string.menu_rename); - bot.setDialogText(newName); + bots.directory.selectDocument(fileName1); + bots.main.openOverflowMenu(); + bots.main.menuRename().click(); + bots.main.setDialogText(newName); device.waitForIdle(TIMEOUT); - bot.findRenameDialogCancelButton().click(); + bots.main.findRenameDialogCancelButton().click(); device.waitForIdle(TIMEOUT); - bot.assertDocument(fileName1, true); - bot.assertDocument(newName, false); - bot.assertDocumentsCount(4); + bots.directory.assertDocumentsPresent(fileName1); + bots.directory.assertDocumentsAbsent(newName); + bots.directory.assertDocumentsCount(4); } public void testRenameDir() throws Exception { String oldName = "Dir1"; String newName = "Dir123"; - bot.selectDocument(oldName); - bot.openOverflowMenu(); - bot.openDialog(R.string.menu_rename); - bot.setDialogText(newName); + bots.directory.selectDocument(oldName); + bots.main.openOverflowMenu(); + bots.main.menuRename().click(); + bots.main.setDialogText(newName); - pressEnter(); + bots.keyboard.pressEnter(); - bot.assertDocument(oldName, false); - bot.assertDocument(newName, true); - bot.assertDocumentsCount(4); + bots.directory.assertDocumentsAbsent(oldName); + bots.directory.assertDocumentsPresent(newName); + bots.directory.assertDocumentsCount(4); } public void testRename_NameExists() throws Exception { // Check that document with the new name exists - bot.assertDocument(fileName2, true); - bot.selectDocument(fileName1); - bot.openOverflowMenu(); - bot.openDialog(R.string.menu_rename); - bot.setDialogText(fileName2); - - pressEnter(); - - bot.assertSnackbar(R.string.rename_error); - bot.assertDocument(fileName1, true); - bot.assertDocument(fileName2, true); - bot.assertDocumentsCount(4); - } - - private void pressEnter() { - device.waitForIdle(TIMEOUT); - device.pressEnter(); - device.waitForIdle(TIMEOUT); + bots.directory.assertDocumentsPresent(fileName2); + bots.directory.selectDocument(fileName1); + bots.main.openOverflowMenu(); + bots.main.menuRename().click(); + bots.main.setDialogText(fileName2); + + bots.keyboard.pressEnter(); + + bots.directory.assertSnackbar(R.string.rename_error); + bots.directory.assertDocumentsPresent(fileName1); + bots.directory.assertDocumentsPresent(fileName2); + bots.directory.assertDocumentsCount(4); } } diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/RootUiTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/RootsUiTest.java index 1d1d3b5abd64..6141832a4499 100644 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/RootUiTest.java +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/RootsUiTest.java @@ -18,19 +18,14 @@ package com.android.documentsui; import static com.android.documentsui.StubProvider.ROOT_0_ID; -import android.support.test.uiautomator.Configurator; -import android.support.test.uiautomator.UiObject; -import android.support.test.uiautomator.UiObjectNotFoundException; -import android.test.InstrumentationTestCase; import android.test.suitebuilder.annotation.LargeTest; -import android.view.MotionEvent; @LargeTest -public class RootUiTest extends ActivityTest<FilesActivity> { +public class RootsUiTest extends ActivityTest<FilesActivity> { private static final String TAG = "RootUiTest"; - public RootUiTest() { + public RootsUiTest() { super(FilesActivity.class); } @@ -38,14 +33,13 @@ public class RootUiTest extends ActivityTest<FilesActivity> { public void setUp() throws Exception { super.setUp(); initTestFiles(); - bot.openRoot(ROOT_0_ID); } public void testRootTapped_GoToRootFromChildDir() throws Exception { - bot.openDocument(dirName1); - bot.assertWindowTitle(dirName1); - bot.openRoot(ROOT_0_ID); - bot.assertWindowTitle(ROOT_0_ID); + bots.directory.openDocument(dirName1); + bots.main.assertWindowTitle(dirName1); + bots.roots.openRoot(ROOT_0_ID); + bots.main.assertWindowTitle(ROOT_0_ID); assertDefaultContentOfTestDir0(); } } diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/SearchViewUiTest.java b/packages/DocumentsUI/tests/src/com/android/documentsui/SearchViewUiTest.java index b8d8795d864c..8c3fd904762a 100644 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/SearchViewUiTest.java +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/SearchViewUiTest.java @@ -24,61 +24,57 @@ import android.test.suitebuilder.annotation.LargeTest; @LargeTest public class SearchViewUiTest extends ActivityTest<FilesActivity> { - private static final String TAG = "SearchViewUiTest"; - public SearchViewUiTest() { super(FilesActivity.class); } public void testSearchView_ExpandsOnClick() throws Exception { - bot.openSearchView(); - bot.assertSearchTextFiledAndIcon(true, false); + bots.main.openSearchView(); + bots.main.assertSearchTextFiledAndIcon(true, false); } public void testSearchView_CollapsesOnBack() throws Exception { - bot.openSearchView(); + bots.main.openSearchView(); device.pressBack(); - bot.assertSearchTextFiledAndIcon(false, true); + bots.main.assertSearchTextFiledAndIcon(false, true); } public void testSearchView_ClearsTextOnBack() throws Exception { String query = "file2"; - bot.openSearchView(); - bot.setSearchQuery(query); + bots.main.openSearchView(); + bots.main.setSearchQuery(query); device.pressBack(); - bot.assertSearchTextFiledAndIcon(false, true); + bots.main.assertSearchTextFiledAndIcon(false, true); } public void testSearch_ResultsFound() throws Exception { initTestFiles(); - bot.openRoot(ROOT_0_ID); assertDefaultContentOfTestDir0(); String query = "file1"; - bot.openSearchView(); - bot.setSearchQuery(query); - bot.assertSearchTextField(true, query); + bots.main.openSearchView(); + bots.main.setSearchQuery(query); + bots.main.assertSearchTextField(true, query); device.pressEnter(); - bot.assertDocumentsCountOnList(true, 2); - bot.assertHasDocuments(fileName1, fileName2); + bots.directory.assertDocumentsCountOnList(true, 2); + bots.directory.assertDocumentsPresent(fileName1, fileName2); - bot.assertSearchTextField(false, query); + bots.main.assertSearchTextField(false, query); } public void testSearchResultsFound_ClearsOnBack() throws Exception { initTestFiles(); - bot.openRoot(ROOT_0_ID); assertDefaultContentOfTestDir0(); String query = fileName1; - bot.openSearchView(); - bot.setSearchQuery(query); + bots.main.openSearchView(); + bots.main.setSearchQuery(query); device.pressEnter(); device.pressBack(); @@ -88,32 +84,30 @@ public class SearchViewUiTest extends ActivityTest<FilesActivity> { public void testSearch_NoResults() throws Exception { initTestFiles(); - bot.openRoot(ROOT_0_ID); assertDefaultContentOfTestDir0(); String query = "chocolate"; - bot.openSearchView(); - bot.setSearchQuery(query); + bots.main.openSearchView(); + bots.main.setSearchQuery(query); device.pressEnter(); - bot.assertDocumentsCountOnList(false, 0); + bots.directory.assertDocumentsCountOnList(false, 0); device.waitForIdle(); String msg = String.valueOf(context.getString(R.string.no_results)); - bot.assertMessageTextView(String.format(msg, "TEST_ROOT_0")); + bots.directory.assertMessageTextView(String.format(msg, "TEST_ROOT_0")); - bot.assertSearchTextField(false, query); + bots.main.assertSearchTextField(false, query); } public void testSearchNoResults_ClearsOnBack() throws Exception { initTestFiles(); - bot.openRoot(ROOT_0_ID); assertDefaultContentOfTestDir0(); String query = "chocolate"; - bot.openSearchView(); - bot.setSearchQuery(query); + bots.main.openSearchView(); + bots.main.setSearchQuery(query); device.pressEnter(); device.pressBack(); @@ -124,30 +118,29 @@ public class SearchViewUiTest extends ActivityTest<FilesActivity> { public void testSearchResultsFound_ClearsOnDirectoryChange() throws Exception { initTestFiles(); - bot.openRoot(ROOT_0_ID); assertDefaultContentOfTestDir0(); String query = fileName1; - bot.openSearchView(); - bot.setSearchQuery(query); + bots.main.openSearchView(); + bots.main.setSearchQuery(query); device.pressEnter(); - bot.openRoot(ROOT_1_ID); + bots.roots.openRoot(ROOT_1_ID); assertDefaultContentOfTestDir1(); - bot.openRoot(ROOT_0_ID); + bots.roots.openRoot(ROOT_0_ID); assertDefaultContentOfTestDir0(); } public void testSearchIconVisible_RootWithSearchSupport() throws Exception { - bot.openRoot(ROOT_0_ID); - bot.assertSearchTextFiledAndIcon(false, true); + bots.roots.openRoot(ROOT_0_ID); + bots.main.assertSearchTextFiledAndIcon(false, true); } public void testSearchIconHidden_RootNoSearchSupport() throws Exception { - bot.openRoot(ROOT_1_ID); - bot.assertSearchTextFiledAndIcon(false, false); + bots.roots.openRoot(ROOT_1_ID); + bots.main.assertSearchTextFiledAndIcon(false, false); } } diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/UiBot.java b/packages/DocumentsUI/tests/src/com/android/documentsui/UiBot.java deleted file mode 100644 index d2f84034593c..000000000000 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/UiBot.java +++ /dev/null @@ -1,432 +0,0 @@ -/* - * Copyright (C) 2015 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.documentsui; - -import static junit.framework.Assert.assertEquals; -import static junit.framework.Assert.assertNotNull; -import static junit.framework.Assert.assertTrue; -import static junit.framework.Assert.assertFalse; - -import android.app.Activity; -import android.content.Context; -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.BySelector; -import android.support.test.uiautomator.Configurator; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.UiObject; -import android.support.test.uiautomator.UiObject2; -import android.support.test.uiautomator.UiObjectNotFoundException; -import android.support.test.uiautomator.UiScrollable; -import android.support.test.uiautomator.UiSelector; -import android.support.test.uiautomator.Until; -import android.util.Log; -import android.view.MotionEvent; -import android.view.inputmethod.InputMethodManager; - -import junit.framework.Assert; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Iterator; -import java.util.List; -import java.util.regex.Pattern; - -/** - * A test helper class that provides support for controlling DocumentsUI activities - * programmatically, and making assertions against the state of the UI. - */ -class UiBot { - public static final String TARGET_PKG = "com.android.documentsui"; - - private static final String TAG = "UiBot"; - private static final String LAUNCHER_PKG = "com.android.launcher"; - - private static final BySelector SNACK_DELETE = - By.desc(Pattern.compile("^Deleting [0-9]+ file.+")); - - private UiDevice mDevice; - private Context mContext; - private int mTimeout; - - public UiBot(UiDevice device, Context context, int timeout) { - mDevice = device; - mContext = context; - mTimeout = timeout; - } - - UiObject findRoot(String label) throws UiObjectNotFoundException { - final UiSelector rootsList = new UiSelector().resourceId( - "com.android.documentsui:id/container_roots").childSelector( - new UiSelector().resourceId("com.android.documentsui:id/roots_list")); - - // We might need to expand drawer if not visible - if (!new UiObject(rootsList).waitForExists(mTimeout)) { - Log.d(TAG, "Failed to find roots list; trying to expand"); - final UiSelector hamburger = new UiSelector().resourceId( - "com.android.documentsui:id/toolbar").childSelector( - new UiSelector().className("android.widget.ImageButton").clickable(true)); - new UiObject(hamburger).click(); - } - - // Wait for the first list item to appear - new UiObject(rootsList.childSelector(new UiSelector())).waitForExists(mTimeout); - - // Now scroll around to find our item - new UiScrollable(rootsList).scrollIntoView(new UiSelector().text(label)); - return new UiObject(rootsList.childSelector(new UiSelector().text(label))); - } - - void openRoot(String label) throws UiObjectNotFoundException { - findRoot(label).click(); - mDevice.waitForIdle(); - } - - void assertWindowTitle(String expected) { - // Turns out the title field on a window does not have - // an id associated with it at runtime (which confuses the hell out of me) - // In code we address this via "android.R.id.title". - UiObject2 o = find(By.text(expected)); - // It's a bit of a conceit that we then *assert* that the title - // is the value that we used to identify the UiObject2. - // If the preceeding lookup fails, this'll choke with an NPE. - // But given the issue described in the comment above, we're - // going to do it anyway. Because we shouldn't be looking up - // the uiobject by it's expected content :| - assertEquals(expected, o.getText()); - } - - void assertHasRoots(String... labels) throws UiObjectNotFoundException { - List<String> missing = new ArrayList<>(); - for (String label : labels) { - if (!findRoot(label).exists()) { - missing.add(label); - } - } - if (!missing.isEmpty()) { - Assert.fail( - "Expected roots " + Arrays.asList(labels) + ", but missing " + missing); - } - } - - void assertMenuEnabled(int id, boolean enabled) { - UiObject2 menu= findMenuWithName(mContext.getString(id)); - assertNotNull(menu); - assertEquals(enabled, menu.isEnabled()); - } - - void assertDocumentsCount(int count) throws UiObjectNotFoundException { - UiObject docsList = findDocumentsList(); - assertEquals(count, docsList.getChildCount()); - } - - void assertDocumentsCount(String dir, int count) throws UiObjectNotFoundException { - openRoot(dir); - UiObject docsList = findDocumentsList(); - assertEquals(count, docsList.getChildCount()); - } - - void assertSearchTextField(boolean isFocused, String query) - throws UiObjectNotFoundException { - UiObject textField = findSearchViewTextField(); - UiObject searchIcon = findSearchViewIcon(); - - assertFalse(searchIcon.exists()); - assertTrue(textField.exists()); - assertEquals(isFocused, textField.isFocused()); - if(query != null) { - assertEquals(query, textField.getText()); - } - } - - void assertSearchTextFiledAndIcon(boolean searchTextFieldExists, boolean searchIconExists) { - assertEquals(searchTextFieldExists, findSearchViewTextField().exists()); - assertEquals(searchIconExists, findSearchViewIcon().exists()); - } - - void assertHasDocuments(String... labels) throws UiObjectNotFoundException { - List<String> missing = new ArrayList<>(); - for (String label : labels) { - if (!findDocument(label).exists()) { - missing.add(label); - } - } - if (!missing.isEmpty()) { - Assert.fail( - "Expected documents " + Arrays.asList(labels) + ", but missing " + missing); - } - } - - void assertDocument(String name, boolean exists) throws UiObjectNotFoundException { - UiObject doc = findDocument(name); - assertEquals(exists, doc.exists()); - } - - void assertDocumentsCountOnList(boolean exists, int count) throws UiObjectNotFoundException { - UiObject docsList = findDocumentsList(); - assertEquals(exists, docsList.exists()); - if(docsList.exists()) { - assertEquals(count, docsList.getChildCount()); - } - } - - void assertMessageTextView(String message) throws UiObjectNotFoundException { - UiObject messageTextView = findMessageTextView(); - assertTrue(messageTextView.exists()); - - String msg = String.valueOf(message); - assertEquals(String.format(msg, "TEST_ROOT_0"), messageTextView.getText()); - - } - void assertSnackbar(int id) { - assertNotNull(getSnackbar(mContext.getString(id))); - } - - /** - * Asserts that the specified view or one of its descendents has focus. - */ - void assertHasFocus(String resourceName) { - UiObject2 candidate = mDevice.findObject(By.res(resourceName)); - assertNotNull("Expected " + resourceName + " to have focus, but it didn't.", - candidate.findObject(By.focused(true))); - } - - void openDocument(String label) throws UiObjectNotFoundException { - int toolType = Configurator.getInstance().getToolType(); - Configurator.getInstance().setToolType(MotionEvent.TOOL_TYPE_FINGER); - UiObject doc = findDocument(label); - doc.click(); - Configurator.getInstance().setToolType(toolType); - } - - void clickDocument(String label) throws UiObjectNotFoundException { - findDocument(label).click(); - } - - void openSearchView() throws UiObjectNotFoundException { - UiObject searchView = findSearchView(); - searchView.click(); - assertTrue(searchView.exists()); - } - - void setSearchQuery(String query) throws UiObjectNotFoundException { - UiObject searchView = findSearchView(); - assertTrue(searchView.exists()); - UiObject searchTextField = findSearchViewTextField(); - searchTextField.setText(query); - assertSearchTextField(true, query); - } - - UiObject openOverflowMenu() throws UiObjectNotFoundException { - UiObject obj = findMenuMoreOptions(); - obj.click(); - mDevice.waitForIdle(mTimeout); - return obj; - } - - void openDialog(int id) { - UiObject2 menu= findMenuWithName(mContext.getString(id)); - assertNotNull(menu); - assertEquals(true, menu.isEnabled()); - menu.click(); - } - - void setDialogText(String text) throws UiObjectNotFoundException { - findDialogEditText().setText(text); - } - - UiObject selectDocument(String label) throws UiObjectNotFoundException { - UiObject doc = findDocument(label); - doc.longClick(); - return doc; - } - - UiObject2 getSnackbar(String message) { - return mDevice.wait(Until.findObject(By.text(message)), mTimeout); - } - - void waitForDeleteSnackbar() { - mDevice.wait(Until.findObject(SNACK_DELETE), mTimeout); - } - - void waitForDeleteSnackbarGone() { - // wait a little longer for snackbar to go away, as it disappears after a timeout. - mDevice.wait(Until.gone(SNACK_DELETE), mTimeout * 2); - } - - void waitForDocument(String label) throws UiObjectNotFoundException { - findDocument(label).waitForExists(mTimeout); - } - - void switchViewMode() { - UiObject2 mode = menuGridMode(); - if (mode != null) { - mode.click(); - } else { - menuListMode().click(); - } - } - - UiObject2 menuGridMode() { - // Note that we're using By.desc rather than By.res, because of b/25285770 - return find(By.desc("Grid view")); - } - - UiObject2 menuListMode() { - // Note that we're using By.desc rather than By.res, because of b/25285770 - return find(By.desc("List view")); - } - - UiObject2 menuDelete() { - return find(By.res("com.android.documentsui:id/menu_delete")); - } - - UiObject2 menuShare() { - return find(By.res("com.android.documentsui:id/menu_share")); - } - - private UiObject2 find(BySelector selector) { - mDevice.wait(Until.findObject(selector), mTimeout); - return mDevice.findObject(selector); - } - - private UiObject findObject(String resourceId) { - final UiSelector object = new UiSelector().resourceId(resourceId); - return mDevice.findObject(object); - } - - private UiObject findObject(String parentResourceId, String childResourceId) { - final UiSelector selector = new UiSelector() - .resourceId(parentResourceId) - .childSelector(new UiSelector().resourceId(childResourceId)); - return mDevice.findObject(selector); - } - - UiObject findDocument(String label) throws UiObjectNotFoundException { - final UiSelector docList = new UiSelector().resourceId( - "com.android.documentsui:id/container_directory").childSelector( - new UiSelector().resourceId("com.android.documentsui:id/dir_list")); - - // Wait for the first list item to appear - new UiObject(docList.childSelector(new UiSelector())).waitForExists(mTimeout); - - // new UiScrollable(docList).scrollIntoView(new UiSelector().text(label)); - return mDevice.findObject(docList.childSelector(new UiSelector().text(label))); - } - - boolean hasDocuments(String... labels) throws UiObjectNotFoundException { - for (String label : labels) { - if (!findDocument(label).exists()) { - return false; - } - } - return true; - } - - UiObject findDocumentsList() { - return findObject( - "com.android.documentsui:id/container_directory", - "com.android.documentsui:id/dir_list"); - } - - UiObject findSearchView() { - return findObject("com.android.documentsui:id/menu_search"); - } - - UiObject findSearchViewTextField() { - return findObject("com.android.documentsui:id/menu_search", "android:id/search_src_text"); - } - - UiObject findSearchViewIcon() { - return findObject("com.android.documentsui:id/menu_search", "android:id/search_button"); - } - - UiObject findMessageTextView() { - return findObject( - "com.android.documentsui:id/container_directory", - "com.android.documentsui:id/message"); - } - - UiObject findActionModeBar() { - return findObject("android:id/action_mode_bar"); - } - - UiObject findDialogEditText() { - return findObject("android:id/content", "android:id/text1"); - } - - UiObject findRenameDialogOkButton() { - return findObject("android:id/content", "android:id/button1"); - } - - UiObject findRenameDialogCancelButton() { - return findObject("android:id/content", "android:id/button2"); - } - - UiObject findMenuLabelWithName(String label) { - UiSelector selector = new UiSelector().text(label); - return mDevice.findObject(selector); - } - - UiObject2 findMenuWithName(String label) { - List<UiObject2> menuItems = mDevice.findObjects(By.clazz("android.widget.LinearLayout")); - Iterator<UiObject2> it = menuItems.iterator(); - - UiObject2 menuItem = null; - while(it.hasNext()) { - menuItem = it.next(); - UiObject2 text = menuItem.findObject(By.text(label)); - if(text != null) { - break; - } - } - return menuItem; - } - - UiObject findMenuMoreOptions() { - UiSelector selector = new UiSelector().className("android.widget.ImageButton") - .descriptionContains("More options"); - //TODO: use the system string ? android.R.string.action_menu_overflow_description - return mDevice.findObject(selector); - } - - // Indirect way to detect the keyboard. - boolean isKeyboardPresent() { - InputMethodManager inputManager = (InputMethodManager) mContext - .getSystemService(Context.INPUT_METHOD_SERVICE); - return inputManager.isAcceptingText(); - } - - void dismissKeyboardIfPresent() { - if(isKeyboardPresent()) { - mDevice.pressBack(); - } - } - - void revealLauncher() { - mDevice.pressHome(); - mDevice.wait(Until.hasObject(By.pkg(LAUNCHER_PKG).depth(0)), mTimeout); - } - - void revealApp() { - mDevice.wait(Until.hasObject(By.pkg(TARGET_PKG).depth(0)), mTimeout); - mDevice.waitForIdle(); - } - - void pressKey(int keyCode) { - mDevice.pressKeyCode(keyCode); - } -} diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/BaseBot.java b/packages/DocumentsUI/tests/src/com/android/documentsui/bots/BaseBot.java new file mode 100644 index 000000000000..1d2b47f2f286 --- /dev/null +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/bots/BaseBot.java @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2015 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.documentsui.bots; + +import static junit.framework.Assert.assertNotNull; + +import android.content.Context; +import android.support.test.uiautomator.By; +import android.support.test.uiautomator.BySelector; +import android.support.test.uiautomator.UiDevice; +import android.support.test.uiautomator.UiObject; +import android.support.test.uiautomator.UiObject2; +import android.support.test.uiautomator.UiSelector; +import android.support.test.uiautomator.Until; + +/** + * A test helper class that provides support for controlling directory list + * and making assertions against the state of it. + */ +abstract class BaseBot { + final UiDevice mDevice; + final Context mContext; + final int mTimeout; + + BaseBot(UiDevice device, Context context, int timeout) { + mDevice = device; + mContext = context; + mTimeout = timeout; + } + + /** + * Asserts that the specified view or one of its descendents has focus. + */ + protected void assertHasFocus(String resourceName) { + UiObject2 candidate = mDevice.findObject(By.res(resourceName)); + assertNotNull("Expected " + resourceName + " to have focus, but it didn't.", + candidate.findObject(By.focused(true))); + } + + protected UiObject2 find(BySelector selector) { + mDevice.wait(Until.findObject(selector), mTimeout); + return mDevice.findObject(selector); + } + + protected UiObject findObject(String resourceId) { + final UiSelector object = new UiSelector().resourceId(resourceId); + return mDevice.findObject(object); + } + + protected UiObject findObject(String parentResourceId, String childResourceId) { + final UiSelector selector = new UiSelector() + .resourceId(parentResourceId) + .childSelector(new UiSelector().resourceId(childResourceId)); + return mDevice.findObject(selector); + } + + protected void waitForIdle() { + mDevice.waitForIdle(mTimeout); + } +} diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/DirectoryListBot.java b/packages/DocumentsUI/tests/src/com/android/documentsui/bots/DirectoryListBot.java new file mode 100644 index 000000000000..da9f9c30261a --- /dev/null +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/bots/DirectoryListBot.java @@ -0,0 +1,179 @@ +/* + * Copyright (C) 2015 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.documentsui.bots; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertNotNull; +import static junit.framework.Assert.assertTrue; + +import android.content.Context; +import android.support.test.uiautomator.By; +import android.support.test.uiautomator.BySelector; +import android.support.test.uiautomator.Configurator; +import android.support.test.uiautomator.UiDevice; +import android.support.test.uiautomator.UiObject; +import android.support.test.uiautomator.UiObject2; +import android.support.test.uiautomator.UiObjectNotFoundException; +import android.support.test.uiautomator.UiSelector; +import android.support.test.uiautomator.Until; +import android.view.MotionEvent; + +import junit.framework.Assert; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.regex.Pattern; + +/** + * A test helper class that provides support for controlling directory list + * and making assertions against the state of it. + */ +public class DirectoryListBot extends BaseBot { + private static final String DIR_LIST_ID = "com.android.documentsui:id/dir_list"; + + private static final BySelector SNACK_DELETE = + By.desc(Pattern.compile("^Deleting [0-9]+ file.+")); + + public DirectoryListBot(UiDevice device, Context context, int timeout) { + super(device, context, timeout); + } + + public void assertDocumentsCount(int count) throws UiObjectNotFoundException { + UiObject docsList = findDocumentsList(); + assertEquals(count, docsList.getChildCount()); + } + + public void assertDocumentsPresent(String... labels) throws UiObjectNotFoundException { + List<String> absent = new ArrayList<>(); + for (String label : labels) { + if (!findDocument(label).exists()) { + absent.add(label); + } + } + if (!absent.isEmpty()) { + Assert.fail("Expected documents " + Arrays.asList(labels) + + ", but missing " + absent); + } + } + + public void assertDocumentsAbsent(String... labels) throws UiObjectNotFoundException { + List<String> found = new ArrayList<>(); + for (String label : labels) { + if (findDocument(label).exists()) { + found.add(label); + } + } + if (!found.isEmpty()) { + Assert.fail("Expected documents not present" + Arrays.asList(labels) + + ", but present " + found); + } + } + + public void assertDocumentsCountOnList(boolean exists, int count) throws UiObjectNotFoundException { + UiObject docsList = findDocumentsList(); + assertEquals(exists, docsList.exists()); + if(docsList.exists()) { + assertEquals(count, docsList.getChildCount()); + } + } + + public void assertMessageTextView(String message) throws UiObjectNotFoundException { + UiObject messageTextView = findMessageTextView(); + assertTrue(messageTextView.exists()); + + String msg = String.valueOf(message); + assertEquals(String.format(msg, "TEST_ROOT_0"), messageTextView.getText()); + + } + + private UiObject findMessageTextView() { + return findObject( + "com.android.documentsui:id/container_directory", + "com.android.documentsui:id/message"); + } + + public void assertSnackbar(int id) { + assertNotNull(getSnackbar(mContext.getString(id))); + } + + public void openDocument(String label) throws UiObjectNotFoundException { + int toolType = Configurator.getInstance().getToolType(); + Configurator.getInstance().setToolType(MotionEvent.TOOL_TYPE_FINGER); + UiObject doc = findDocument(label); + doc.click(); + Configurator.getInstance().setToolType(toolType); + } + + public void clickDocument(String label) throws UiObjectNotFoundException { + findDocument(label).click(); + } + + public UiObject selectDocument(String label) throws UiObjectNotFoundException { + UiObject doc = findDocument(label); + doc.longClick(); + return doc; + } + + public UiObject2 getSnackbar(String message) { + return mDevice.wait(Until.findObject(By.text(message)), mTimeout); + } + + public void waitForDeleteSnackbar() { + mDevice.wait(Until.findObject(SNACK_DELETE), mTimeout); + } + + public void waitForDeleteSnackbarGone() { + // wait a little longer for snackbar to go away, as it disappears after a timeout. + mDevice.wait(Until.gone(SNACK_DELETE), mTimeout * 2); + } + + public void waitForDocument(String label) throws UiObjectNotFoundException { + findDocument(label).waitForExists(mTimeout); + } + + public UiObject findDocument(String label) throws UiObjectNotFoundException { + final UiSelector docList = new UiSelector().resourceId( + "com.android.documentsui:id/container_directory").childSelector( + new UiSelector().resourceId(DIR_LIST_ID)); + + // Wait for the first list item to appear + new UiObject(docList.childSelector(new UiSelector())).waitForExists(mTimeout); + + // new UiScrollable(docList).scrollIntoView(new UiSelector().text(label)); + return mDevice.findObject(docList.childSelector(new UiSelector().text(label))); + } + + public boolean hasDocuments(String... labels) throws UiObjectNotFoundException { + for (String label : labels) { + if (!findDocument(label).exists()) { + return false; + } + } + return true; + } + + private UiObject findDocumentsList() { + return findObject( + "com.android.documentsui:id/container_directory", + DIR_LIST_ID); + } + + public void assertHasFocus() { + assertHasFocus(DIR_LIST_ID); + } +} diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/KeyboardBot.java b/packages/DocumentsUI/tests/src/com/android/documentsui/bots/KeyboardBot.java new file mode 100644 index 000000000000..4c47cfacac72 --- /dev/null +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/bots/KeyboardBot.java @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2015 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.documentsui.bots; + +import android.content.Context; +import android.support.test.uiautomator.UiDevice; +import android.view.inputmethod.InputMethodManager; + +/** + * A test helper class that provides support for keyboard manipulation. + */ +public class KeyboardBot extends BaseBot { + + public KeyboardBot(UiDevice device, Context context, int timeout) { + super(device, context, timeout); + } + + public void dismissKeyboardIfPresent() { + if(isKeyboardPresent()) { + mDevice.pressBack(); + } + } + + // Indirect way to detect the keyboard. + private boolean isKeyboardPresent() { + InputMethodManager inputManager = (InputMethodManager) mContext + .getSystemService(Context.INPUT_METHOD_SERVICE); + return inputManager.isAcceptingText(); + } + + public void pressEnter() { + waitForIdle(); + mDevice.pressEnter(); + waitForIdle(); + } +} diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/RootsListBot.java b/packages/DocumentsUI/tests/src/com/android/documentsui/bots/RootsListBot.java new file mode 100644 index 000000000000..356fd01957e6 --- /dev/null +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/bots/RootsListBot.java @@ -0,0 +1,88 @@ +/* + * Copyright (C) 2015 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.documentsui.bots; + +import android.content.Context; +import android.support.test.uiautomator.UiDevice; +import android.support.test.uiautomator.UiObject; +import android.support.test.uiautomator.UiObjectNotFoundException; +import android.support.test.uiautomator.UiScrollable; +import android.support.test.uiautomator.UiSelector; +import android.util.Log; + +import junit.framework.Assert; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +/** + * A test helper class that provides support for controlling and asserting against + * the roots list drawer. + */ +public class RootsListBot extends BaseBot { + private static final String ROOTS_LIST_ID = "com.android.documentsui:id/roots_list"; + private static final String TAG = "RootsListBot"; + + public RootsListBot(UiDevice device, Context context, int timeout) { + super(device, context, timeout); + } + + private UiObject findRoot(String label) throws UiObjectNotFoundException { + final UiSelector rootsList = new UiSelector().resourceId( + "com.android.documentsui:id/container_roots").childSelector( + new UiSelector().resourceId(ROOTS_LIST_ID)); + + // We might need to expand drawer if not visible + if (!new UiObject(rootsList).waitForExists(mTimeout)) { + Log.d(TAG, "Failed to find roots list; trying to expand"); + final UiSelector hamburger = new UiSelector().resourceId( + "com.android.documentsui:id/toolbar").childSelector( + new UiSelector().className("android.widget.ImageButton").clickable(true)); + new UiObject(hamburger).click(); + } + + // Wait for the first list item to appear + new UiObject(rootsList.childSelector(new UiSelector())).waitForExists(mTimeout); + + // Now scroll around to find our item + new UiScrollable(rootsList).scrollIntoView(new UiSelector().text(label)); + return new UiObject(rootsList.childSelector(new UiSelector().text(label))); + } + + public void openRoot(String label) throws UiObjectNotFoundException { + findRoot(label).click(); + mDevice.waitForIdle(); + } + + public void assertHasRoots(String... labels) throws UiObjectNotFoundException { + List<String> missing = new ArrayList<>(); + for (String label : labels) { + if (!findRoot(label).exists()) { + missing.add(label); + } + } + if (!missing.isEmpty()) { + Assert.fail( + "Expected roots " + Arrays.asList(labels) + ", but missing " + missing); + } + } + + public void assertHasFocus() { + assertHasFocus(ROOTS_LIST_ID); + } +} diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/bots/UiBot.java b/packages/DocumentsUI/tests/src/com/android/documentsui/bots/UiBot.java new file mode 100644 index 000000000000..fe2a3c320987 --- /dev/null +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/bots/UiBot.java @@ -0,0 +1,219 @@ +/* + * Copyright (C) 2015 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.documentsui.bots; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertFalse; +import static junit.framework.Assert.assertNotNull; +import static junit.framework.Assert.assertTrue; + +import android.content.Context; +import android.support.test.uiautomator.By; +import android.support.test.uiautomator.UiDevice; +import android.support.test.uiautomator.UiObject; +import android.support.test.uiautomator.UiObject2; +import android.support.test.uiautomator.UiObjectNotFoundException; +import android.support.test.uiautomator.UiSelector; +import android.support.test.uiautomator.Until; + +import com.android.documentsui.R; + +import java.util.Iterator; +import java.util.List; + +/** + * A test helper class that provides support for controlling DocumentsUI activities + * programmatically, and making assertions against the state of the UI. + * + * <p>Support for working directly with Roots and Directory view can be found + * in the respective bots. + */ +public class UiBot extends BaseBot { + public static final String TARGET_PKG = "com.android.documentsui"; + private static final String LAUNCHER_PKG = "com.android.launcher"; + + public UiBot(UiDevice device, Context context, int timeout) { + super(device, context, timeout); + } + + public void assertWindowTitle(String expected) { + // Turns out the title field on a window does not have + // an id associated with it at runtime (which confuses the hell out of me) + // In code we address this via "android.R.id.title". + UiObject2 o = find(By.text(expected)); + // It's a bit of a conceit that we then *assert* that the title + // is the value that we used to identify the UiObject2. + // If the preceeding lookup fails, this'll choke with an NPE. + // But given the issue described in the comment above, we're + // going to do it anyway. Because we shouldn't be looking up + // the uiobject by it's expected content :| + assertEquals(expected, o.getText()); + } + + public void assertMenuEnabled(int id, boolean enabled) { + UiObject2 menu= findMenuWithName(mContext.getString(id)); + assertNotNull(menu); + assertEquals(enabled, menu.isEnabled()); + } + + public void assertSearchTextField(boolean isFocused, String query) + throws UiObjectNotFoundException { + UiObject textField = findSearchViewTextField(); + UiObject searchIcon = findSearchViewIcon(); + + assertFalse(searchIcon.exists()); + assertTrue(textField.exists()); + assertEquals(isFocused, textField.isFocused()); + if(query != null) { + assertEquals(query, textField.getText()); + } + } + + public void assertSearchTextFiledAndIcon(boolean searchTextFieldExists, boolean searchIconExists) { + assertEquals(searchTextFieldExists, findSearchViewTextField().exists()); + assertEquals(searchIconExists, findSearchViewIcon().exists()); + } + + public void openSearchView() throws UiObjectNotFoundException { + UiObject searchView = findSearchView(); + searchView.click(); + assertTrue(searchView.exists()); + } + + public void setSearchQuery(String query) throws UiObjectNotFoundException { + UiObject searchView = findSearchView(); + assertTrue(searchView.exists()); + UiObject searchTextField = findSearchViewTextField(); + searchTextField.setText(query); + assertSearchTextField(true, query); + } + + public UiObject openOverflowMenu() throws UiObjectNotFoundException { + UiObject obj = findMenuMoreOptions(); + obj.click(); + mDevice.waitForIdle(mTimeout); + return obj; + } + + public void setDialogText(String text) throws UiObjectNotFoundException { + findDialogEditText().setText(text); + } + + void switchViewMode() { + UiObject2 mode = menuGridMode(); + if (mode != null) { + mode.click(); + } else { + menuListMode().click(); + } + } + + UiObject2 menuGridMode() { + // Note that we're using By.desc rather than By.res, because of b/25285770 + return find(By.desc("Grid view")); + } + + UiObject2 menuListMode() { + // Note that we're using By.desc rather than By.res, because of b/25285770 + return find(By.desc("List view")); + } + + public UiObject2 menuDelete() { + return find(By.res("com.android.documentsui:id/menu_delete")); + } + + public UiObject2 menuShare() { + return find(By.res("com.android.documentsui:id/menu_share")); + } + + public UiObject2 menuRename() { + return findMenuWithName(mContext.getString(R.string.menu_rename)); + } + + public UiObject2 menuNewFolder() { + return findMenuWithName(mContext.getString(R.string.menu_create_dir)); + } + + UiObject findSearchView() { + return findObject("com.android.documentsui:id/menu_search"); + } + + UiObject findSearchViewTextField() { + return findObject("com.android.documentsui:id/menu_search", "android:id/search_src_text"); + } + + UiObject findSearchViewIcon() { + return findObject("com.android.documentsui:id/menu_search", "android:id/search_button"); + } + + UiObject findActionModeBar() { + return findObject("android:id/action_mode_bar"); + } + + public UiObject findDialogEditText() { + return findObject("android:id/content", "android:id/text1"); + } + + public UiObject findRenameDialogOkButton() { + return findObject("android:id/content", "android:id/button1"); + } + + public UiObject findRenameDialogCancelButton() { + return findObject("android:id/content", "android:id/button2"); + } + + UiObject findMenuLabelWithName(String label) { + UiSelector selector = new UiSelector().text(label); + return mDevice.findObject(selector); + } + + UiObject2 findMenuWithName(String label) { + List<UiObject2> menuItems = mDevice.findObjects(By.clazz("android.widget.LinearLayout")); + Iterator<UiObject2> it = menuItems.iterator(); + + UiObject2 menuItem = null; + while(it.hasNext()) { + menuItem = it.next(); + UiObject2 text = menuItem.findObject(By.text(label)); + if(text != null) { + break; + } + } + return menuItem; + } + + UiObject findMenuMoreOptions() { + UiSelector selector = new UiSelector().className("android.widget.ImageButton") + .descriptionContains("More options"); + //TODO: use the system string ? android.R.string.action_menu_overflow_description + return mDevice.findObject(selector); + } + + public void revealLauncher() { + mDevice.pressHome(); + mDevice.wait(Until.hasObject(By.pkg(LAUNCHER_PKG).depth(0)), mTimeout); + } + + public void revealApp() { + mDevice.wait(Until.hasObject(By.pkg(TARGET_PKG).depth(0)), mTimeout); + mDevice.waitForIdle(); + } + + public void pressKey(int keyCode) { + mDevice.pressKeyCode(keyCode); + } +} diff --git a/packages/DocumentsUI/tests/src/com/android/documentsui/services/TestJob.java b/packages/DocumentsUI/tests/src/com/android/documentsui/services/TestJob.java index a1c6dabca55c..9147a578f8e1 100644 --- a/packages/DocumentsUI/tests/src/com/android/documentsui/services/TestJob.java +++ b/packages/DocumentsUI/tests/src/com/android/documentsui/services/TestJob.java @@ -21,7 +21,6 @@ import static junit.framework.Assert.assertTrue; import android.app.Notification; import android.app.Notification.Builder; import android.content.Context; -import android.os.RemoteException; import com.android.documentsui.R; import com.android.documentsui.model.DocumentInfo; @@ -38,7 +37,7 @@ public class TestJob extends Job { } @Override - void start() throws RemoteException { + void start() { mStarted = true; } diff --git a/packages/ExternalStorageProvider/res/values-af/strings.xml b/packages/ExternalStorageProvider/res/values-af/strings.xml index b5a159d27211..1de881d92627 100644 --- a/packages/ExternalStorageProvider/res/values-af/strings.xml +++ b/packages/ExternalStorageProvider/res/values-af/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Eksterne berging"</string> <string name="root_internal_storage" msgid="827844243068584127">"Interne berging"</string> - <string name="root_home" msgid="7931555396767513359">"Tuis"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumente"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-am/strings.xml b/packages/ExternalStorageProvider/res/values-am/strings.xml index f4f296d5c314..230fb066e783 100644 --- a/packages/ExternalStorageProvider/res/values-am/strings.xml +++ b/packages/ExternalStorageProvider/res/values-am/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"ውጫዊ ማከማቻ"</string> <string name="root_internal_storage" msgid="827844243068584127">"ውስጣዊ ማከማቻ"</string> - <string name="root_home" msgid="7931555396767513359">"መነሻ"</string> + <string name="root_documents" msgid="4051252304075469250">"ሰነዶች"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-ar/strings.xml b/packages/ExternalStorageProvider/res/values-ar/strings.xml index 4eee3e8e5de4..b20a0563bd01 100644 --- a/packages/ExternalStorageProvider/res/values-ar/strings.xml +++ b/packages/ExternalStorageProvider/res/values-ar/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"وحدة تخزين خارجية"</string> <string name="root_internal_storage" msgid="827844243068584127">"وحدة تخزين داخلية"</string> - <string name="root_home" msgid="7931555396767513359">"الرئيسية"</string> + <string name="root_documents" msgid="4051252304075469250">"مستندات"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-az-rAZ/strings.xml b/packages/ExternalStorageProvider/res/values-az-rAZ/strings.xml index f7e5f8b78a79..cd5ba2fe63d1 100644 --- a/packages/ExternalStorageProvider/res/values-az-rAZ/strings.xml +++ b/packages/ExternalStorageProvider/res/values-az-rAZ/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Xarici Yaddaş"</string> <string name="root_internal_storage" msgid="827844243068584127">"Daxili yaddaş"</string> - <string name="root_home" msgid="7931555396767513359">"Əsas səhifə"</string> + <string name="root_documents" msgid="4051252304075469250">"Sənədlər"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-b+sr+Latn/strings.xml b/packages/ExternalStorageProvider/res/values-b+sr+Latn/strings.xml index b280d4f66a2f..fefbc282d6b3 100644 --- a/packages/ExternalStorageProvider/res/values-b+sr+Latn/strings.xml +++ b/packages/ExternalStorageProvider/res/values-b+sr+Latn/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Spoljna memorija"</string> <string name="root_internal_storage" msgid="827844243068584127">"Interna memorija"</string> - <string name="root_home" msgid="7931555396767513359">"Početni"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumenti"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-bg/strings.xml b/packages/ExternalStorageProvider/res/values-bg/strings.xml index 7081b172b36e..f5dce3189393 100644 --- a/packages/ExternalStorageProvider/res/values-bg/strings.xml +++ b/packages/ExternalStorageProvider/res/values-bg/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Външно хранилище"</string> <string name="root_internal_storage" msgid="827844243068584127">"Вътрешно хранилище"</string> - <string name="root_home" msgid="7931555396767513359">"Начална директория"</string> + <string name="root_documents" msgid="4051252304075469250">"Документи"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-bn-rBD/strings.xml b/packages/ExternalStorageProvider/res/values-bn-rBD/strings.xml index 842aed448655..36680658fb9f 100644 --- a/packages/ExternalStorageProvider/res/values-bn-rBD/strings.xml +++ b/packages/ExternalStorageProvider/res/values-bn-rBD/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"বাহ্যিক সঞ্চয়স্থান"</string> <string name="root_internal_storage" msgid="827844243068584127">"অভ্যন্তরীণ সঞ্চয়স্থান"</string> - <string name="root_home" msgid="7931555396767513359">"হোম"</string> + <string name="root_documents" msgid="4051252304075469250">"দস্তাবেজগুলি"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-bs-rBA/strings.xml b/packages/ExternalStorageProvider/res/values-bs-rBA/strings.xml new file mode 100644 index 000000000000..20177f05d5f2 --- /dev/null +++ b/packages/ExternalStorageProvider/res/values-bs-rBA/strings.xml @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- Copyright (C) 2013 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. + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string name="app_label" msgid="7123375275748530234">"Aplikacija za vanjsku pohranu"</string> + <string name="root_internal_storage" msgid="827844243068584127">"Interna pohrana"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumenti"</string> +</resources> diff --git a/packages/ExternalStorageProvider/res/values-ca/strings.xml b/packages/ExternalStorageProvider/res/values-ca/strings.xml index b3fd9f77d9ec..15e9d4604a8b 100644 --- a/packages/ExternalStorageProvider/res/values-ca/strings.xml +++ b/packages/ExternalStorageProvider/res/values-ca/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Emmagatzematge extern"</string> <string name="root_internal_storage" msgid="827844243068584127">"Emmagatzematge intern"</string> - <string name="root_home" msgid="7931555396767513359">"Inici"</string> + <string name="root_documents" msgid="4051252304075469250">"Documents"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-cs/strings.xml b/packages/ExternalStorageProvider/res/values-cs/strings.xml index 2eab59673aa8..b68a928e8a6c 100644 --- a/packages/ExternalStorageProvider/res/values-cs/strings.xml +++ b/packages/ExternalStorageProvider/res/values-cs/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Externí úložiště"</string> <string name="root_internal_storage" msgid="827844243068584127">"Interní úložiště"</string> - <string name="root_home" msgid="7931555396767513359">"Výchozí adresář"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumenty"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-da/strings.xml b/packages/ExternalStorageProvider/res/values-da/strings.xml index d008f0ea16ec..dc565aeca851 100644 --- a/packages/ExternalStorageProvider/res/values-da/strings.xml +++ b/packages/ExternalStorageProvider/res/values-da/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Ekstern lagerplads"</string> <string name="root_internal_storage" msgid="827844243068584127">"Intern lagerplads"</string> - <string name="root_home" msgid="7931555396767513359">"Hjem"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumenter"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-de/strings.xml b/packages/ExternalStorageProvider/res/values-de/strings.xml index 50fc6800dd24..318634a2ee22 100644 --- a/packages/ExternalStorageProvider/res/values-de/strings.xml +++ b/packages/ExternalStorageProvider/res/values-de/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Externer Speicher"</string> <string name="root_internal_storage" msgid="827844243068584127">"Interner Speicher"</string> - <string name="root_home" msgid="7931555396767513359">"Zuhause"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumente"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-el/strings.xml b/packages/ExternalStorageProvider/res/values-el/strings.xml index 9537afdeef2d..b3aa792521bc 100644 --- a/packages/ExternalStorageProvider/res/values-el/strings.xml +++ b/packages/ExternalStorageProvider/res/values-el/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Εξωτερικός αποθηκευτικός χώρος"</string> <string name="root_internal_storage" msgid="827844243068584127">"Εσωτερικός αποθηκευτικός χώρος"</string> - <string name="root_home" msgid="7931555396767513359">"Αρχική οθόνη"</string> + <string name="root_documents" msgid="4051252304075469250">"Έγγραφα"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-en-rAU/strings.xml b/packages/ExternalStorageProvider/res/values-en-rAU/strings.xml index be7aebc8af14..f88eb9e32044 100644 --- a/packages/ExternalStorageProvider/res/values-en-rAU/strings.xml +++ b/packages/ExternalStorageProvider/res/values-en-rAU/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"External Storage"</string> <string name="root_internal_storage" msgid="827844243068584127">"Internal storage"</string> - <string name="root_home" msgid="7931555396767513359">"Home"</string> + <string name="root_documents" msgid="4051252304075469250">"Documents"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-en-rGB/strings.xml b/packages/ExternalStorageProvider/res/values-en-rGB/strings.xml index be7aebc8af14..f88eb9e32044 100644 --- a/packages/ExternalStorageProvider/res/values-en-rGB/strings.xml +++ b/packages/ExternalStorageProvider/res/values-en-rGB/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"External Storage"</string> <string name="root_internal_storage" msgid="827844243068584127">"Internal storage"</string> - <string name="root_home" msgid="7931555396767513359">"Home"</string> + <string name="root_documents" msgid="4051252304075469250">"Documents"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-en-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-en-rIN/strings.xml index be7aebc8af14..f88eb9e32044 100644 --- a/packages/ExternalStorageProvider/res/values-en-rIN/strings.xml +++ b/packages/ExternalStorageProvider/res/values-en-rIN/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"External Storage"</string> <string name="root_internal_storage" msgid="827844243068584127">"Internal storage"</string> - <string name="root_home" msgid="7931555396767513359">"Home"</string> + <string name="root_documents" msgid="4051252304075469250">"Documents"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-es-rUS/strings.xml b/packages/ExternalStorageProvider/res/values-es-rUS/strings.xml index 64a042d1dd36..e7e38b56e1b2 100644 --- a/packages/ExternalStorageProvider/res/values-es-rUS/strings.xml +++ b/packages/ExternalStorageProvider/res/values-es-rUS/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Almacenamiento externo"</string> <string name="root_internal_storage" msgid="827844243068584127">"Almacenamiento interno"</string> - <string name="root_home" msgid="7931555396767513359">"Casa"</string> + <string name="root_documents" msgid="4051252304075469250">"Documentos"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-es/strings.xml b/packages/ExternalStorageProvider/res/values-es/strings.xml index d59755e8a269..e7e38b56e1b2 100644 --- a/packages/ExternalStorageProvider/res/values-es/strings.xml +++ b/packages/ExternalStorageProvider/res/values-es/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Almacenamiento externo"</string> <string name="root_internal_storage" msgid="827844243068584127">"Almacenamiento interno"</string> - <string name="root_home" msgid="7931555396767513359">"Inicio"</string> + <string name="root_documents" msgid="4051252304075469250">"Documentos"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-et-rEE/strings.xml b/packages/ExternalStorageProvider/res/values-et-rEE/strings.xml index 7ea2caa0ee73..6824e9d7d637 100644 --- a/packages/ExternalStorageProvider/res/values-et-rEE/strings.xml +++ b/packages/ExternalStorageProvider/res/values-et-rEE/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Väline talletusruum"</string> <string name="root_internal_storage" msgid="827844243068584127">"Sisemine salvestusruum"</string> - <string name="root_home" msgid="7931555396767513359">"Kodu"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumendid"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-eu-rES/strings.xml b/packages/ExternalStorageProvider/res/values-eu-rES/strings.xml index 2f94acbbcac0..5881bf2cf05a 100644 --- a/packages/ExternalStorageProvider/res/values-eu-rES/strings.xml +++ b/packages/ExternalStorageProvider/res/values-eu-rES/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Kanpoko memoria"</string> <string name="root_internal_storage" msgid="827844243068584127">"Barneko memoria"</string> - <string name="root_home" msgid="7931555396767513359">"Etxea"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumentuak"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-fa/strings.xml b/packages/ExternalStorageProvider/res/values-fa/strings.xml index c8c49a5475be..9ae8a479604f 100644 --- a/packages/ExternalStorageProvider/res/values-fa/strings.xml +++ b/packages/ExternalStorageProvider/res/values-fa/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"حافظه خارجی"</string> <string name="root_internal_storage" msgid="827844243068584127">"حافظهٔ داخلی"</string> - <string name="root_home" msgid="7931555396767513359">"صفحه اصلی"</string> + <string name="root_documents" msgid="4051252304075469250">"اسناد"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-fi/strings.xml b/packages/ExternalStorageProvider/res/values-fi/strings.xml index 660228ae18dd..9d1fbaac24c2 100644 --- a/packages/ExternalStorageProvider/res/values-fi/strings.xml +++ b/packages/ExternalStorageProvider/res/values-fi/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Ulkoinen tallennustila"</string> <string name="root_internal_storage" msgid="827844243068584127">"Sisäinen tallennustila"</string> - <string name="root_home" msgid="7931555396767513359">"Koti"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumentit"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-fr-rCA/strings.xml b/packages/ExternalStorageProvider/res/values-fr-rCA/strings.xml index b94682f49cae..b3fdd48416e7 100644 --- a/packages/ExternalStorageProvider/res/values-fr-rCA/strings.xml +++ b/packages/ExternalStorageProvider/res/values-fr-rCA/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Stockage externe"</string> <string name="root_internal_storage" msgid="827844243068584127">"Mémoire de stockage interne"</string> - <string name="root_home" msgid="7931555396767513359">"Accueil"</string> + <string name="root_documents" msgid="4051252304075469250">"Documents"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-fr/strings.xml b/packages/ExternalStorageProvider/res/values-fr/strings.xml index 6a84bb4a3c08..b3fdd48416e7 100644 --- a/packages/ExternalStorageProvider/res/values-fr/strings.xml +++ b/packages/ExternalStorageProvider/res/values-fr/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Stockage externe"</string> <string name="root_internal_storage" msgid="827844243068584127">"Mémoire de stockage interne"</string> - <string name="root_home" msgid="7931555396767513359">"Répertoire de base"</string> + <string name="root_documents" msgid="4051252304075469250">"Documents"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-gl-rES/strings.xml b/packages/ExternalStorageProvider/res/values-gl-rES/strings.xml index d51eae950d83..780213fa6df6 100644 --- a/packages/ExternalStorageProvider/res/values-gl-rES/strings.xml +++ b/packages/ExternalStorageProvider/res/values-gl-rES/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Almacenamento externo"</string> <string name="root_internal_storage" msgid="827844243068584127">"Almacenamento interno"</string> - <string name="root_home" msgid="7931555396767513359">"Inicio"</string> + <string name="root_documents" msgid="4051252304075469250">"Documentos"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-gu-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-gu-rIN/strings.xml index 3bcc72dd1282..ec8a0bd4923b 100644 --- a/packages/ExternalStorageProvider/res/values-gu-rIN/strings.xml +++ b/packages/ExternalStorageProvider/res/values-gu-rIN/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"બાહ્ય સંગ્રહ"</string> <string name="root_internal_storage" msgid="827844243068584127">"આંતરિક સંગ્રહ"</string> - <string name="root_home" msgid="7931555396767513359">"હોમ"</string> + <string name="root_documents" msgid="4051252304075469250">"દસ્તાવેજો"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-hi/strings.xml b/packages/ExternalStorageProvider/res/values-hi/strings.xml index 93cc7126a83a..853808136715 100644 --- a/packages/ExternalStorageProvider/res/values-hi/strings.xml +++ b/packages/ExternalStorageProvider/res/values-hi/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"बाहरी मेमोरी"</string> <string name="root_internal_storage" msgid="827844243068584127">"मोबाइल मेमोरी"</string> - <string name="root_home" msgid="7931555396767513359">"होम"</string> + <string name="root_documents" msgid="4051252304075469250">"दस्तावेज़"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-hr/strings.xml b/packages/ExternalStorageProvider/res/values-hr/strings.xml index c866351c6c92..a74f8e87288d 100644 --- a/packages/ExternalStorageProvider/res/values-hr/strings.xml +++ b/packages/ExternalStorageProvider/res/values-hr/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Vanjska pohrana"</string> <string name="root_internal_storage" msgid="827844243068584127">"Unutarnja pohrana"</string> - <string name="root_home" msgid="7931555396767513359">"Početna"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumenti"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-hu/strings.xml b/packages/ExternalStorageProvider/res/values-hu/strings.xml index db1c7db050a6..3f72b418f289 100644 --- a/packages/ExternalStorageProvider/res/values-hu/strings.xml +++ b/packages/ExternalStorageProvider/res/values-hu/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Külső tárhely"</string> <string name="root_internal_storage" msgid="827844243068584127">"Belső tárhely"</string> - <string name="root_home" msgid="7931555396767513359">"Otthon"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumentumok"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-hy-rAM/strings.xml b/packages/ExternalStorageProvider/res/values-hy-rAM/strings.xml index 0e1de49c3dc5..5360124566ae 100644 --- a/packages/ExternalStorageProvider/res/values-hy-rAM/strings.xml +++ b/packages/ExternalStorageProvider/res/values-hy-rAM/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Արտաքին պահոց"</string> <string name="root_internal_storage" msgid="827844243068584127">"Ներքին պահոց"</string> - <string name="root_home" msgid="7931555396767513359">"Գլխավոր էջ"</string> + <string name="root_documents" msgid="4051252304075469250">"Փաստաթղթեր"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-in/strings.xml b/packages/ExternalStorageProvider/res/values-in/strings.xml index ca7f823b6832..42acde7b8e32 100644 --- a/packages/ExternalStorageProvider/res/values-in/strings.xml +++ b/packages/ExternalStorageProvider/res/values-in/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Penyimpanan Eksternal"</string> <string name="root_internal_storage" msgid="827844243068584127">"Penyimpanan internal"</string> - <string name="root_home" msgid="7931555396767513359">"Rumah"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumen"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-is-rIS/strings.xml b/packages/ExternalStorageProvider/res/values-is-rIS/strings.xml index ad0400264de7..03061650b103 100644 --- a/packages/ExternalStorageProvider/res/values-is-rIS/strings.xml +++ b/packages/ExternalStorageProvider/res/values-is-rIS/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Ytri geymsla"</string> <string name="root_internal_storage" msgid="827844243068584127">"Innbyggð geymsla"</string> - <string name="root_home" msgid="7931555396767513359">"Heim"</string> + <string name="root_documents" msgid="4051252304075469250">"Skjöl"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-it/strings.xml b/packages/ExternalStorageProvider/res/values-it/strings.xml index 686ee1a6d829..957b5ffe22e7 100644 --- a/packages/ExternalStorageProvider/res/values-it/strings.xml +++ b/packages/ExternalStorageProvider/res/values-it/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Archivio esterno"</string> <string name="root_internal_storage" msgid="827844243068584127">"Memoria interna"</string> - <string name="root_home" msgid="7931555396767513359">"Home"</string> + <string name="root_documents" msgid="4051252304075469250">"Documenti"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-iw/strings.xml b/packages/ExternalStorageProvider/res/values-iw/strings.xml index b45fb5c60784..775506a79df2 100644 --- a/packages/ExternalStorageProvider/res/values-iw/strings.xml +++ b/packages/ExternalStorageProvider/res/values-iw/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"אחסון חיצוני"</string> <string name="root_internal_storage" msgid="827844243068584127">"אחסון פנימי"</string> - <string name="root_home" msgid="7931555396767513359">"דף הבית"</string> + <string name="root_documents" msgid="4051252304075469250">"מסמכים"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-ja/strings.xml b/packages/ExternalStorageProvider/res/values-ja/strings.xml index 5c09bf4f242b..188fca29a4c8 100644 --- a/packages/ExternalStorageProvider/res/values-ja/strings.xml +++ b/packages/ExternalStorageProvider/res/values-ja/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"外部ストレージ"</string> <string name="root_internal_storage" msgid="827844243068584127">"内部ストレージ"</string> - <string name="root_home" msgid="7931555396767513359">"ホーム"</string> + <string name="root_documents" msgid="4051252304075469250">"ドキュメント"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-ka-rGE/strings.xml b/packages/ExternalStorageProvider/res/values-ka-rGE/strings.xml index c1bc5c74dfd7..cc04860036d5 100644 --- a/packages/ExternalStorageProvider/res/values-ka-rGE/strings.xml +++ b/packages/ExternalStorageProvider/res/values-ka-rGE/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"გარე მეხსიერება"</string> <string name="root_internal_storage" msgid="827844243068584127">"შიდა მეხსიერება"</string> - <string name="root_home" msgid="7931555396767513359">"მთავარი"</string> + <string name="root_documents" msgid="4051252304075469250">"დოკუმენტები"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-kk-rKZ/strings.xml b/packages/ExternalStorageProvider/res/values-kk-rKZ/strings.xml index cf0578210c81..ad49036c9d99 100644 --- a/packages/ExternalStorageProvider/res/values-kk-rKZ/strings.xml +++ b/packages/ExternalStorageProvider/res/values-kk-rKZ/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Сыртқы жад"</string> <string name="root_internal_storage" msgid="827844243068584127">"Ішкі жад"</string> - <string name="root_home" msgid="7931555396767513359">"Негізгі бет"</string> + <string name="root_documents" msgid="4051252304075469250">"Құжаттар"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-km-rKH/strings.xml b/packages/ExternalStorageProvider/res/values-km-rKH/strings.xml index a2e926fa6315..9cf76d4053e4 100644 --- a/packages/ExternalStorageProvider/res/values-km-rKH/strings.xml +++ b/packages/ExternalStorageProvider/res/values-km-rKH/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"ឧបករណ៍ផ្ទុកខាងក្រៅ"</string> <string name="root_internal_storage" msgid="827844243068584127">"ឧបករណ៍ផ្ទុកខាងក្នុង"</string> - <string name="root_home" msgid="7931555396767513359">"ដើម"</string> + <string name="root_documents" msgid="4051252304075469250">"ឯកសារ"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-kn-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-kn-rIN/strings.xml index 1f0cfbf58290..e32b1d3f978b 100644 --- a/packages/ExternalStorageProvider/res/values-kn-rIN/strings.xml +++ b/packages/ExternalStorageProvider/res/values-kn-rIN/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"ಬಾಹ್ಯ ಸಂಗ್ರಹಣೆ"</string> <string name="root_internal_storage" msgid="827844243068584127">"ಆಂತರಿಕ ಸಂಗ್ರಹಣೆ"</string> - <string name="root_home" msgid="7931555396767513359">"ಮುಖಪುಟ"</string> + <string name="root_documents" msgid="4051252304075469250">"ಡಾಕ್ಯುಮೆಂಟ್ಗಳು"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-ko/strings.xml b/packages/ExternalStorageProvider/res/values-ko/strings.xml index 365648d33938..849d37e602f5 100644 --- a/packages/ExternalStorageProvider/res/values-ko/strings.xml +++ b/packages/ExternalStorageProvider/res/values-ko/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"외부 저장소"</string> <string name="root_internal_storage" msgid="827844243068584127">"내부 저장소"</string> - <string name="root_home" msgid="7931555396767513359">"홈"</string> + <string name="root_documents" msgid="4051252304075469250">"문서"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-ky-rKG/strings.xml b/packages/ExternalStorageProvider/res/values-ky-rKG/strings.xml index 4a0f211e3ca8..d3ccf7f14449 100644 --- a/packages/ExternalStorageProvider/res/values-ky-rKG/strings.xml +++ b/packages/ExternalStorageProvider/res/values-ky-rKG/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Тышкы сактагыч"</string> <string name="root_internal_storage" msgid="827844243068584127">"Ички сактагыч"</string> - <string name="root_home" msgid="7931555396767513359">"Башкы бет"</string> + <string name="root_documents" msgid="4051252304075469250">"Документтер"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-lo-rLA/strings.xml b/packages/ExternalStorageProvider/res/values-lo-rLA/strings.xml index 9de6519f1211..cecd9f5683a9 100644 --- a/packages/ExternalStorageProvider/res/values-lo-rLA/strings.xml +++ b/packages/ExternalStorageProvider/res/values-lo-rLA/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"ບ່ອນຈັດເກັບຂໍ້ມູນພາຍນອກ"</string> <string name="root_internal_storage" msgid="827844243068584127">"ບ່ອນຈັດເກັບຂໍ້ມູນພາຍໃນ"</string> - <string name="root_home" msgid="7931555396767513359">"ໜ້າຫຼັກ"</string> + <string name="root_documents" msgid="4051252304075469250">"ເອກະສານ"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-lt/strings.xml b/packages/ExternalStorageProvider/res/values-lt/strings.xml index 84ca2d4a4f4d..240ea8900089 100644 --- a/packages/ExternalStorageProvider/res/values-lt/strings.xml +++ b/packages/ExternalStorageProvider/res/values-lt/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Išorinė atmintinė"</string> <string name="root_internal_storage" msgid="827844243068584127">"Vidinė atmintinė"</string> - <string name="root_home" msgid="7931555396767513359">"Pagrindinis katalogas"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumentai"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-lv/strings.xml b/packages/ExternalStorageProvider/res/values-lv/strings.xml index 7eff0b9408e1..d308fe830798 100644 --- a/packages/ExternalStorageProvider/res/values-lv/strings.xml +++ b/packages/ExternalStorageProvider/res/values-lv/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Ārējā krātuve"</string> <string name="root_internal_storage" msgid="827844243068584127">"Iekšējā atmiņa"</string> - <string name="root_home" msgid="7931555396767513359">"Sākumdirektorijs"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumenti"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-mk-rMK/strings.xml b/packages/ExternalStorageProvider/res/values-mk-rMK/strings.xml index fe6b753c125c..8943d23d1e2d 100644 --- a/packages/ExternalStorageProvider/res/values-mk-rMK/strings.xml +++ b/packages/ExternalStorageProvider/res/values-mk-rMK/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Надворешна меморија"</string> <string name="root_internal_storage" msgid="827844243068584127">"Внатрешна меморија"</string> - <string name="root_home" msgid="7931555396767513359">"Почетна страница"</string> + <string name="root_documents" msgid="4051252304075469250">"Документи"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-ml-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-ml-rIN/strings.xml index 5369ec9ba0f9..08e6dae52b53 100644 --- a/packages/ExternalStorageProvider/res/values-ml-rIN/strings.xml +++ b/packages/ExternalStorageProvider/res/values-ml-rIN/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"ബാഹ്യ സ്റ്റോറേജ്"</string> <string name="root_internal_storage" msgid="827844243068584127">"ആന്തരിക സ്റ്റോറേജ്"</string> - <string name="root_home" msgid="7931555396767513359">"വീട്"</string> + <string name="root_documents" msgid="4051252304075469250">"പ്രമാണങ്ങൾ"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-mn-rMN/strings.xml b/packages/ExternalStorageProvider/res/values-mn-rMN/strings.xml index 4604f327bc07..3d7b7f73881b 100644 --- a/packages/ExternalStorageProvider/res/values-mn-rMN/strings.xml +++ b/packages/ExternalStorageProvider/res/values-mn-rMN/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Гадаад сан"</string> <string name="root_internal_storage" msgid="827844243068584127">"Дотоод сан"</string> - <string name="root_home" msgid="7931555396767513359">"Нүүр хуудас"</string> + <string name="root_documents" msgid="4051252304075469250">"Документүүд"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-mr-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-mr-rIN/strings.xml index 1310b0e361f8..a7e7fbbceb38 100644 --- a/packages/ExternalStorageProvider/res/values-mr-rIN/strings.xml +++ b/packages/ExternalStorageProvider/res/values-mr-rIN/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"बाह्य संचयन"</string> <string name="root_internal_storage" msgid="827844243068584127">"अंतर्गत संचयन"</string> - <string name="root_home" msgid="7931555396767513359">"निवास"</string> + <string name="root_documents" msgid="4051252304075469250">"दस्तऐवज"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-ms-rMY/strings.xml b/packages/ExternalStorageProvider/res/values-ms-rMY/strings.xml index 007a1be73c3e..cb4d73653148 100644 --- a/packages/ExternalStorageProvider/res/values-ms-rMY/strings.xml +++ b/packages/ExternalStorageProvider/res/values-ms-rMY/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Storan Luaran"</string> <string name="root_internal_storage" msgid="827844243068584127">"Storan dalaman"</string> - <string name="root_home" msgid="7931555396767513359">"Rumah"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumen"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-my-rMM/strings.xml b/packages/ExternalStorageProvider/res/values-my-rMM/strings.xml index 2df9a3322370..dc9d684b1919 100644 --- a/packages/ExternalStorageProvider/res/values-my-rMM/strings.xml +++ b/packages/ExternalStorageProvider/res/values-my-rMM/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"ပြင်ပသိုလှောင်ရာပစ္စည်း"</string> <string name="root_internal_storage" msgid="827844243068584127">"စက်တွင်း သိုလှောင်ထားမှု"</string> - <string name="root_home" msgid="7931555396767513359">"ပင်မ"</string> + <string name="root_documents" msgid="4051252304075469250">"စာရွက်စာတန်းများ"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-nb/strings.xml b/packages/ExternalStorageProvider/res/values-nb/strings.xml index 315d9325ba66..a9ecb691d727 100644 --- a/packages/ExternalStorageProvider/res/values-nb/strings.xml +++ b/packages/ExternalStorageProvider/res/values-nb/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Ekstern lagring"</string> <string name="root_internal_storage" msgid="827844243068584127">"Intern lagring"</string> - <string name="root_home" msgid="7931555396767513359">"Hjem"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumenter"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-ne-rNP/strings.xml b/packages/ExternalStorageProvider/res/values-ne-rNP/strings.xml index 4a9a8cdf8018..52940438cfd3 100644 --- a/packages/ExternalStorageProvider/res/values-ne-rNP/strings.xml +++ b/packages/ExternalStorageProvider/res/values-ne-rNP/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"बाह्य भण्डारण"</string> <string name="root_internal_storage" msgid="827844243068584127">"आन्तरिक भण्डारण"</string> - <string name="root_home" msgid="7931555396767513359">"गृह"</string> + <string name="root_documents" msgid="4051252304075469250">"कागजातहरू"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-nl/strings.xml b/packages/ExternalStorageProvider/res/values-nl/strings.xml index 0ae88ceb5a0f..bde61665d971 100644 --- a/packages/ExternalStorageProvider/res/values-nl/strings.xml +++ b/packages/ExternalStorageProvider/res/values-nl/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Externe opslag"</string> <string name="root_internal_storage" msgid="827844243068584127">"Interne opslag"</string> - <string name="root_home" msgid="7931555396767513359">"Startscherm"</string> + <string name="root_documents" msgid="4051252304075469250">"Documenten"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-pa-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-pa-rIN/strings.xml index a805dd861663..0e91589adc74 100644 --- a/packages/ExternalStorageProvider/res/values-pa-rIN/strings.xml +++ b/packages/ExternalStorageProvider/res/values-pa-rIN/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"ਬਾਹਰੀ ਸਟੋਰੇਜ"</string> <string name="root_internal_storage" msgid="827844243068584127">"ਅੰਦਰੂਨੀ ਸਟੋਰੇਜ"</string> - <string name="root_home" msgid="7931555396767513359">"ਘਰ"</string> + <string name="root_documents" msgid="4051252304075469250">"ਦਸਤਾਵੇਜ਼"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-pl/strings.xml b/packages/ExternalStorageProvider/res/values-pl/strings.xml index 66d83c744a92..6c5e7d78b0db 100644 --- a/packages/ExternalStorageProvider/res/values-pl/strings.xml +++ b/packages/ExternalStorageProvider/res/values-pl/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Pamięć zewnętrzna"</string> <string name="root_internal_storage" msgid="827844243068584127">"Pamięć wewnętrzna"</string> - <string name="root_home" msgid="7931555396767513359">"Katalog domowy"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumenty"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-pt-rBR/strings.xml b/packages/ExternalStorageProvider/res/values-pt-rBR/strings.xml index 958eef48529d..77c89b8bee83 100644 --- a/packages/ExternalStorageProvider/res/values-pt-rBR/strings.xml +++ b/packages/ExternalStorageProvider/res/values-pt-rBR/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Armazenamento externo"</string> <string name="root_internal_storage" msgid="827844243068584127">"Armazenamento interno"</string> - <string name="root_home" msgid="7931555396767513359">"Página inicial"</string> + <string name="root_documents" msgid="4051252304075469250">"Documentos"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-pt-rPT/strings.xml b/packages/ExternalStorageProvider/res/values-pt-rPT/strings.xml index c8865e1bfe4a..77c89b8bee83 100644 --- a/packages/ExternalStorageProvider/res/values-pt-rPT/strings.xml +++ b/packages/ExternalStorageProvider/res/values-pt-rPT/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Armazenamento externo"</string> <string name="root_internal_storage" msgid="827844243068584127">"Armazenamento interno"</string> - <string name="root_home" msgid="7931555396767513359">"Casa"</string> + <string name="root_documents" msgid="4051252304075469250">"Documentos"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-pt/strings.xml b/packages/ExternalStorageProvider/res/values-pt/strings.xml index 958eef48529d..77c89b8bee83 100644 --- a/packages/ExternalStorageProvider/res/values-pt/strings.xml +++ b/packages/ExternalStorageProvider/res/values-pt/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Armazenamento externo"</string> <string name="root_internal_storage" msgid="827844243068584127">"Armazenamento interno"</string> - <string name="root_home" msgid="7931555396767513359">"Página inicial"</string> + <string name="root_documents" msgid="4051252304075469250">"Documentos"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-ro/strings.xml b/packages/ExternalStorageProvider/res/values-ro/strings.xml index 5bb4a7c9edb1..abd0b98a1f0e 100644 --- a/packages/ExternalStorageProvider/res/values-ro/strings.xml +++ b/packages/ExternalStorageProvider/res/values-ro/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Stocare externă"</string> <string name="root_internal_storage" msgid="827844243068584127">"Stocare internă"</string> - <string name="root_home" msgid="7931555396767513359">"Director principal"</string> + <string name="root_documents" msgid="4051252304075469250">"Documente"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-ru/strings.xml b/packages/ExternalStorageProvider/res/values-ru/strings.xml index a6513713bf49..740272f7b5cd 100644 --- a/packages/ExternalStorageProvider/res/values-ru/strings.xml +++ b/packages/ExternalStorageProvider/res/values-ru/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Внешний накопитель"</string> <string name="root_internal_storage" msgid="827844243068584127">"Внутренний накопитель"</string> - <string name="root_home" msgid="7931555396767513359">"Мои файлы"</string> + <string name="root_documents" msgid="4051252304075469250">"Документы"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-si-rLK/strings.xml b/packages/ExternalStorageProvider/res/values-si-rLK/strings.xml index 5292403b87bd..15334bbee626 100644 --- a/packages/ExternalStorageProvider/res/values-si-rLK/strings.xml +++ b/packages/ExternalStorageProvider/res/values-si-rLK/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"බාහිර ආචයනය"</string> <string name="root_internal_storage" msgid="827844243068584127">"අභ්යන්තර ආචයනය"</string> - <string name="root_home" msgid="7931555396767513359">"මුල් පිටුව"</string> + <string name="root_documents" msgid="4051252304075469250">"ලේඛන"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-sk/strings.xml b/packages/ExternalStorageProvider/res/values-sk/strings.xml index 515788875ed8..9be7b79d022b 100644 --- a/packages/ExternalStorageProvider/res/values-sk/strings.xml +++ b/packages/ExternalStorageProvider/res/values-sk/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Externý ukladací priestor"</string> <string name="root_internal_storage" msgid="827844243068584127">"Interné úložisko"</string> - <string name="root_home" msgid="7931555396767513359">"Predvolený adresár"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumenty"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-sl/strings.xml b/packages/ExternalStorageProvider/res/values-sl/strings.xml index dd2cc241ab0f..6ffa6987ebf4 100644 --- a/packages/ExternalStorageProvider/res/values-sl/strings.xml +++ b/packages/ExternalStorageProvider/res/values-sl/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Zunanja shramba"</string> <string name="root_internal_storage" msgid="827844243068584127">"Notranja shramba"</string> - <string name="root_home" msgid="7931555396767513359">"Korenska mapa"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumenti"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-sq-rAL/strings.xml b/packages/ExternalStorageProvider/res/values-sq-rAL/strings.xml index 3aafd1c69f5a..dc346ea93aa8 100644 --- a/packages/ExternalStorageProvider/res/values-sq-rAL/strings.xml +++ b/packages/ExternalStorageProvider/res/values-sq-rAL/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Hapësirë e jashtme ruajtjeje"</string> <string name="root_internal_storage" msgid="827844243068584127">"Hapësira e brendshme ruajtëse"</string> - <string name="root_home" msgid="7931555396767513359">"Kreu"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokumente"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-sr/strings.xml b/packages/ExternalStorageProvider/res/values-sr/strings.xml index 2d987efcfc4a..54238a43080d 100644 --- a/packages/ExternalStorageProvider/res/values-sr/strings.xml +++ b/packages/ExternalStorageProvider/res/values-sr/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Спољна меморија"</string> <string name="root_internal_storage" msgid="827844243068584127">"Интерна меморија"</string> - <string name="root_home" msgid="7931555396767513359">"Почетни"</string> + <string name="root_documents" msgid="4051252304075469250">"Документи"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-sv/strings.xml b/packages/ExternalStorageProvider/res/values-sv/strings.xml index bc4788afb863..6eac11ec1d37 100644 --- a/packages/ExternalStorageProvider/res/values-sv/strings.xml +++ b/packages/ExternalStorageProvider/res/values-sv/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Extern lagring"</string> <string name="root_internal_storage" msgid="827844243068584127">"Intern lagring"</string> - <string name="root_home" msgid="7931555396767513359">"Hem"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokument"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-sw/strings.xml b/packages/ExternalStorageProvider/res/values-sw/strings.xml index dcca92a70192..0d0e4835c6e5 100644 --- a/packages/ExternalStorageProvider/res/values-sw/strings.xml +++ b/packages/ExternalStorageProvider/res/values-sw/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Hifadhi ya Nje"</string> <string name="root_internal_storage" msgid="827844243068584127">"Hifadhi ya ndani"</string> - <string name="root_home" msgid="7931555396767513359">"Mwanzo"</string> + <string name="root_documents" msgid="4051252304075469250">"Hati"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-ta-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-ta-rIN/strings.xml index b859e7a25b24..d7bafbc021f9 100644 --- a/packages/ExternalStorageProvider/res/values-ta-rIN/strings.xml +++ b/packages/ExternalStorageProvider/res/values-ta-rIN/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"வெளிப்புறச் சேமிப்பிடம்"</string> <string name="root_internal_storage" msgid="827844243068584127">"அகச் சேமிப்பிடம்"</string> - <string name="root_home" msgid="7931555396767513359">"முகப்பு"</string> + <string name="root_documents" msgid="4051252304075469250">"ஆவணங்கள்"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-te-rIN/strings.xml b/packages/ExternalStorageProvider/res/values-te-rIN/strings.xml index 934877ed76c9..800d18eed80a 100644 --- a/packages/ExternalStorageProvider/res/values-te-rIN/strings.xml +++ b/packages/ExternalStorageProvider/res/values-te-rIN/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"బాహ్య నిల్వ"</string> <string name="root_internal_storage" msgid="827844243068584127">"అంతర్గత నిల్వ"</string> - <string name="root_home" msgid="7931555396767513359">"హోమ్"</string> + <string name="root_documents" msgid="4051252304075469250">"పత్రాలు"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-th/strings.xml b/packages/ExternalStorageProvider/res/values-th/strings.xml index 957d6b79ed70..796635ee3522 100644 --- a/packages/ExternalStorageProvider/res/values-th/strings.xml +++ b/packages/ExternalStorageProvider/res/values-th/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"ที่จัดเก็บข้อมูลภายนอก"</string> <string name="root_internal_storage" msgid="827844243068584127">"ที่จัดเก็บข้อมูลภายใน"</string> - <string name="root_home" msgid="7931555396767513359">"Home"</string> + <string name="root_documents" msgid="4051252304075469250">"เอกสาร"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-tl/strings.xml b/packages/ExternalStorageProvider/res/values-tl/strings.xml index be7aebc8af14..529cdc2c8924 100644 --- a/packages/ExternalStorageProvider/res/values-tl/strings.xml +++ b/packages/ExternalStorageProvider/res/values-tl/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"External Storage"</string> <string name="root_internal_storage" msgid="827844243068584127">"Internal storage"</string> - <string name="root_home" msgid="7931555396767513359">"Home"</string> + <string name="root_documents" msgid="4051252304075469250">"Mga Dokumento"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-tr/strings.xml b/packages/ExternalStorageProvider/res/values-tr/strings.xml index 2ce1411e286b..d6bd52a8a8fa 100644 --- a/packages/ExternalStorageProvider/res/values-tr/strings.xml +++ b/packages/ExternalStorageProvider/res/values-tr/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Harici Depolama"</string> <string name="root_internal_storage" msgid="827844243068584127">"Dahili depolama"</string> - <string name="root_home" msgid="7931555396767513359">"Ev"</string> + <string name="root_documents" msgid="4051252304075469250">"Dokümanlar"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-uk/strings.xml b/packages/ExternalStorageProvider/res/values-uk/strings.xml index 0033bca5c0ee..b8206e0684a2 100644 --- a/packages/ExternalStorageProvider/res/values-uk/strings.xml +++ b/packages/ExternalStorageProvider/res/values-uk/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Зовнішня пам’ять"</string> <string name="root_internal_storage" msgid="827844243068584127">"Внутрішня пам’ять"</string> - <string name="root_home" msgid="7931555396767513359">"Головний екран"</string> + <string name="root_documents" msgid="4051252304075469250">"Документи"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-ur-rPK/strings.xml b/packages/ExternalStorageProvider/res/values-ur-rPK/strings.xml index df46fb08c0d1..02454bc3817c 100644 --- a/packages/ExternalStorageProvider/res/values-ur-rPK/strings.xml +++ b/packages/ExternalStorageProvider/res/values-ur-rPK/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"بیرونی اسٹوریج"</string> <string name="root_internal_storage" msgid="827844243068584127">"داخلی اسٹوریج"</string> - <string name="root_home" msgid="7931555396767513359">"ہوم"</string> + <string name="root_documents" msgid="4051252304075469250">"دستاویزات"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-uz-rUZ/strings.xml b/packages/ExternalStorageProvider/res/values-uz-rUZ/strings.xml index 069e137f8cd2..07cc14c4cbca 100644 --- a/packages/ExternalStorageProvider/res/values-uz-rUZ/strings.xml +++ b/packages/ExternalStorageProvider/res/values-uz-rUZ/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Tashqi xotira"</string> <string name="root_internal_storage" msgid="827844243068584127">"Ichki xotira"</string> - <string name="root_home" msgid="7931555396767513359">"Mening fayllarim"</string> + <string name="root_documents" msgid="4051252304075469250">"Hujjatlar"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-vi/strings.xml b/packages/ExternalStorageProvider/res/values-vi/strings.xml index 39e9c6c5bdfe..b171c933fed4 100644 --- a/packages/ExternalStorageProvider/res/values-vi/strings.xml +++ b/packages/ExternalStorageProvider/res/values-vi/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Bộ nhớ ngoài"</string> <string name="root_internal_storage" msgid="827844243068584127">"Bộ nhớ trong"</string> - <string name="root_home" msgid="7931555396767513359">"Nhà riêng"</string> + <string name="root_documents" msgid="4051252304075469250">"Tài liệu"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-zh-rCN/strings.xml b/packages/ExternalStorageProvider/res/values-zh-rCN/strings.xml index ea20dce6b58c..7df77dd8a919 100644 --- a/packages/ExternalStorageProvider/res/values-zh-rCN/strings.xml +++ b/packages/ExternalStorageProvider/res/values-zh-rCN/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"外部存储设备"</string> <string name="root_internal_storage" msgid="827844243068584127">"内部存储空间"</string> - <string name="root_home" msgid="7931555396767513359">"主目录"</string> + <string name="root_documents" msgid="4051252304075469250">"文档"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-zh-rHK/strings.xml b/packages/ExternalStorageProvider/res/values-zh-rHK/strings.xml index 27f1f0a39be0..62d8afb372fb 100644 --- a/packages/ExternalStorageProvider/res/values-zh-rHK/strings.xml +++ b/packages/ExternalStorageProvider/res/values-zh-rHK/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"外部儲存空間"</string> <string name="root_internal_storage" msgid="827844243068584127">"內部儲存空間"</string> - <string name="root_home" msgid="7931555396767513359">"主目錄"</string> + <string name="root_documents" msgid="4051252304075469250">"文件"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-zh-rTW/strings.xml b/packages/ExternalStorageProvider/res/values-zh-rTW/strings.xml index b2d764ac674a..62d8afb372fb 100644 --- a/packages/ExternalStorageProvider/res/values-zh-rTW/strings.xml +++ b/packages/ExternalStorageProvider/res/values-zh-rTW/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"外部儲存空間"</string> <string name="root_internal_storage" msgid="827844243068584127">"內部儲存空間"</string> - <string name="root_home" msgid="7931555396767513359">"主畫面"</string> + <string name="root_documents" msgid="4051252304075469250">"文件"</string> </resources> diff --git a/packages/ExternalStorageProvider/res/values-zu/strings.xml b/packages/ExternalStorageProvider/res/values-zu/strings.xml index 8a7c7df6cc55..4a0a845eac20 100644 --- a/packages/ExternalStorageProvider/res/values-zu/strings.xml +++ b/packages/ExternalStorageProvider/res/values-zu/strings.xml @@ -18,5 +18,5 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7123375275748530234">"Isitoreji sangaphandle"</string> <string name="root_internal_storage" msgid="827844243068584127">"Isitoreji sangaphakathi"</string> - <string name="root_home" msgid="7931555396767513359">"Ekhaya"</string> + <string name="root_documents" msgid="4051252304075469250">"Amadokhumenti"</string> </resources> diff --git a/packages/Keyguard/res/values-h560dp/dimens.xml b/packages/Keyguard/res/values-h560dp/dimens.xml index 16831133c325..469ce520133e 100644 --- a/packages/Keyguard/res/values-h560dp/dimens.xml +++ b/packages/Keyguard/res/values-h560dp/dimens.xml @@ -16,5 +16,5 @@ --> <resources> - <dimen name="widget_big_font_size">96dp</dimen> + <dimen name="widget_big_font_size">84dp</dimen> </resources>
\ No newline at end of file diff --git a/packages/Keyguard/res/values-h650dp/dimens.xml b/packages/Keyguard/res/values-h650dp/dimens.xml index 1cd216285c73..cb89cb46fc3e 100644 --- a/packages/Keyguard/res/values-h650dp/dimens.xml +++ b/packages/Keyguard/res/values-h650dp/dimens.xml @@ -16,5 +16,5 @@ --> <resources> - <dimen name="widget_big_font_size">100dp</dimen> + <dimen name="widget_big_font_size">88dp</dimen> </resources>
\ No newline at end of file diff --git a/packages/Keyguard/res/values-sw600dp-land/dimens.xml b/packages/Keyguard/res/values-sw600dp-land/dimens.xml index a487644e2de1..c34012dc85a8 100644 --- a/packages/Keyguard/res/values-sw600dp-land/dimens.xml +++ b/packages/Keyguard/res/values-sw600dp-land/dimens.xml @@ -20,5 +20,5 @@ <resources> <!-- Overload default clock widget parameters --> - <dimen name="widget_big_font_size">100dp</dimen> + <dimen name="widget_big_font_size">88dp</dimen> </resources>
\ No newline at end of file diff --git a/packages/Keyguard/res/values-sw600dp/dimens.xml b/packages/Keyguard/res/values-sw600dp/dimens.xml index b181682f90ba..a3b01b6acfe4 100644 --- a/packages/Keyguard/res/values-sw600dp/dimens.xml +++ b/packages/Keyguard/res/values-sw600dp/dimens.xml @@ -26,9 +26,9 @@ <dimen name="keyguard_security_view_margin">12dp</dimen> <!-- Overload default clock widget parameters --> - <dimen name="widget_big_font_size">125dp</dimen> + <dimen name="widget_big_font_size">110dp</dimen> <dimen name="widget_label_font_size">16sp</dimen> - <dimen name="bottom_text_spacing_digital">-16dp</dimen> + <dimen name="bottom_text_spacing_digital">-1dp</dimen> <!-- EmergencyCarrierArea overlap - amount to overlap the emergency button and carrier text. Should be 0 on devices with plenty of room (e.g. tablets) --> diff --git a/packages/Keyguard/res/values-sw720dp/dimens.xml b/packages/Keyguard/res/values-sw720dp/dimens.xml index 08ab791f856e..210c7eb61908 100644 --- a/packages/Keyguard/res/values-sw720dp/dimens.xml +++ b/packages/Keyguard/res/values-sw720dp/dimens.xml @@ -24,5 +24,5 @@ <!-- Height of the sliding KeyguardSecurityContainer (includes 2x keyguard_security_view_margin) --> <dimen name="keyguard_security_height">420dp</dimen> - <dimen name="widget_big_font_size">138dp</dimen> + <dimen name="widget_big_font_size">122dp</dimen> </resources> diff --git a/packages/Keyguard/res/values/dimens.xml b/packages/Keyguard/res/values/dimens.xml index 18d893a7b3f1..7b952be2f7f3 100644 --- a/packages/Keyguard/res/values/dimens.xml +++ b/packages/Keyguard/res/values/dimens.xml @@ -39,9 +39,9 @@ <dimen name="eca_overlap">-10dip</dimen> <!-- Default clock parameters --> - <dimen name="bottom_text_spacing_digital">-10dp</dimen> + <dimen name="bottom_text_spacing_digital">-1dp</dimen> <dimen name="widget_label_font_size">14sp</dimen> - <dimen name="widget_big_font_size">88dp</dimen> + <dimen name="widget_big_font_size">78dp</dimen> <!-- The y translation to apply at the start in appear animations. --> <dimen name="appear_y_translation_start">32dp</dimen> diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java index ec2a173d52ea..434631e1c0fd 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardHostView.java @@ -413,7 +413,7 @@ public class KeyguardHostView extends FrameLayout implements SecurityCallback { * @return true if the menu key should be enabled */ private static final String ENABLE_MENU_KEY_FILE = "/data/local/enable_menu_key"; - private boolean shouldEnableMenuKey() { + public boolean shouldEnableMenuKey() { final Resources res = getResources(); final boolean configDisabled = res.getBoolean(R.bool.config_disableMenuKeyInLockScreen); final boolean isTestHarness = ActivityManager.isRunningInTestHarness(); @@ -421,15 +421,6 @@ public class KeyguardHostView extends FrameLayout implements SecurityCallback { return !configDisabled || isTestHarness || fileOverride; } - public boolean handleMenuKey() { - // The following enables the MENU key to work for testing automation - if (shouldEnableMenuKey()) { - dismiss(); - return true; - } - return false; - } - public void setViewMediatorCallback(ViewMediatorCallback viewMediatorCallback) { mViewMediatorCallback = viewMediatorCallback; // Update ViewMediator with the current input method requirements diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java index cedd88d44807..fe98cb876854 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java @@ -89,7 +89,12 @@ public abstract class KeyguardPinBasedInputView extends KeyguardAbsKeyInputView return true; } if (keyCode >= KeyEvent.KEYCODE_0 && keyCode <= KeyEvent.KEYCODE_9) { - int number = keyCode - KeyEvent.KEYCODE_0 ; + int number = keyCode - KeyEvent.KEYCODE_0; + performNumberClick(number); + return true; + } + if (keyCode >= KeyEvent.KEYCODE_NUMPAD_0 && keyCode <= KeyEvent.KEYCODE_NUMPAD_9) { + int number = keyCode - KeyEvent.KEYCODE_NUMPAD_0; performNumberClick(number); return true; } diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml index 99699b9f95ed..b32e3e14c039 100644 --- a/packages/SettingsLib/res/values-af/strings.xml +++ b/packages/SettingsLib/res/values-af/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Teks-na-spraak-uitset"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Spraaktempo"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Spoed waarteen die teks gepraat word"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Toonhoogte"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Taal"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Gebruik stelseltaal"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Taal nie gekies nie"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktief. Tik om te wissel."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Lopende dienste"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Sien en beheer dienste wat tans loop"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Nagmodus"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Gedeaktiveer"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Altyd aan"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Outomaties"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Aktiveer multiproses-WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Laat loop WebView-leweraars in \'n geïsoleerde proses."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView-implementering"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Stel WebView-implementering"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Die gekose WebView-toepassing is gedeaktiveer, maar moet geaktiveer wees om gebruik te word. Wil jy dit aktiveer?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Laai nie"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Laai nie"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Vol"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Gedeaktiveer deur administrateur"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Beheer deur administrateur"</string> <string name="home" msgid="8263346537524314127">"Tuis"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> gelede"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> oor"</string> diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml index 0e363b51cb28..9b3a94a1c6a6 100644 --- a/packages/SettingsLib/res/values-am/strings.xml +++ b/packages/SettingsLib/res/values-am/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"የፅሁፍ- ወደ- ንግግር ውፅዓት"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">" የንግግር ደረጃ"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"የተነገረበትን ፅሁፍ አፍጥን"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"ቅላፄ"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"ቋንቋ"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"የስርዓት ቋንቋ ተጠቀም"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"ቋንቋ አልተመረጠም"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"ገቢር። ለመቀያየር ነካ ያድርጉ።"</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"አሂድ አገልግሎቶች"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"በአሁኑጊዜ እየሄዱ ያሉ አገልግሎቶችን ተቆጣጠር እና እይ"</string> - <string name="night_mode_title" msgid="2594133148531256513">"የሌሊት ሁነታ"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"ተሰናክሏል"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"ሁልጊዜ ይበራል"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"ራስ-ሰር"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"ባለብዙ-ሂደት WebViewን አንቃ"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"የWebView ምስል ሰሪዎችን በተገለለ ሂደት ውስጥ አሂድ።"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"የWebView ትግበራ"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"የWebView ትግበራን ያዘጋጁ"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"የተመረጠው WebView ትግበራ ተሰናክሏል፣ እና ጥቅም ላይ እንዲውል መንቃት አለበት፣ ሊያነቁት ይፈልጋሉ?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"ባትሪ እየሞላ አይደለም"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"ኃይል እየሞላ አይደለም"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"ሙሉነው"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"በአስተዳዳሪ የተሰናከለ"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"በአስተዳዳሪ ቁጥጥር የተደረገበት"</string> <string name="home" msgid="8263346537524314127">"መነሻ"</string> <string name="charge_length_format" msgid="8978516217024434156">"ከ<xliff:g id="ID_1">%1$s</xliff:g> በፊት"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> ቀርቷል"</string> diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml index c757b711df9b..7dec197742c4 100644 --- a/packages/SettingsLib/res/values-ar/strings.xml +++ b/packages/SettingsLib/res/values-ar/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"إخراج تحويل النص إلى كلام"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"معدل سرعة الكلام"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"سرعة نطق الكلام"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"درجة الصوت"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"اللغة"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"استخدام لغة النظام"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"اللغة غير محددة"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"نشط، انقر للتبديل."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"الخدمات قيد التشغيل"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"عرض الخدمات قيد التشغيل في الوقت الحالي والتحكم فيها"</string> - <string name="night_mode_title" msgid="2594133148531256513">"الوضع الليلي"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"معطَّل"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"التشغيل دائمًا"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"تلقائيًا"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"تمكين عرض ويب متعدد العمليات"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"تشغيل أجهزة عرض الويب في عملية منفصلة."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"تطبيق WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"تعيين تطبيق WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"إن تنفيذ ميزة WebView التي تم اختيارها معطَّل، ويجب تمكين هذه الميزة ليتسنى استخدامها، فهل تريد تمكينها؟"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"لا يتم الشحن"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"لا يتم الشحن"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"ممتلئة"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"تم التعطيل بواسطة المشرف"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"إعدادات يتحكم فيها المشرف"</string> <string name="home" msgid="8263346537524314127">"الشاشة الرئيسية"</string> <string name="charge_length_format" msgid="8978516217024434156">"قبل <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"يتبقى <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-az-rAZ/strings.xml b/packages/SettingsLib/res/values-az-rAZ/strings.xml index 61008b944d84..b8a2437a6de3 100644 --- a/packages/SettingsLib/res/values-az-rAZ/strings.xml +++ b/packages/SettingsLib/res/values-az-rAZ/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Mətndən-nitqə çıxışı"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Nitq diapazonu"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Mətnin səsləndirilmə sürəti"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Pitç"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Dil"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Sistem dili işlədin"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Dil seçilməyib"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktivdir. Keçid etmək üçün basın."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"İşləyən xidmətlər"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Hazırda prosesdə olan xidmətləri görüntüləyin və onlara nəzarət edin"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Gecə rejimi"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Qeyri-aktiv"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Həmişə aktiv"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Avtomatik"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Çox prosesli WebView\'nu aktiv edin"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"WebView rendererləri təcrid olunmuş prosesdə işlədin."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView icrası"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView icrasını ayarlayın"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Seçilmiş WebView icrası deaktiv edildi, istifadəsi üçün aktiv edilməlidir, aktivləşdirmək istəyirsiniz?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Doldurulmur"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Enerji doldurulmur"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Tam"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Administrator tərəfindən deaktiv edildi"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Admin tərəfindən nəzarət olunur"</string> <string name="home" msgid="8263346537524314127">"Əsas səhifə"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> əvvəl"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> qalıb"</string> diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml index 7021ca6226a5..b3621cfd5c6d 100644 --- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Izlaz za pretvaranje teksta u govor"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Brzina govora"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Brzina izgovaranja teksta"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Nivo"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Jezik"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Koristi jezik sistema"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Jezik nije izabran"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktivna. Dodirnite da biste je deaktivirali."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Pokrenute usluge"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Prikaz i kontrola trenutno pokrenutih usluga"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Noćni režim"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Onemogućeno"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Uvek uključeno"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatski"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Omogući višeprocesni WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Pokrećite WebView prikazivače u okviru izolovanog procesa."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Primena WebView-a"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Podesite primenu WebView-a"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Izabrana primena WebView-a je onemogućena, a mora da bude omogućena radi korišćenja. Želite li da je omogućite?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Ne puni se"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Ne puni se"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Puno"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Onemogućio je administrator"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Kontroliše administrator"</string> <string name="home" msgid="8263346537524314127">"Početni"</string> <string name="charge_length_format" msgid="8978516217024434156">"Pre <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Još <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml index df47ad9b62be..569de20acf9d 100644 --- a/packages/SettingsLib/res/values-bg/strings.xml +++ b/packages/SettingsLib/res/values-bg/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Синтезиран говор"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Скорост на речта"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Скорост, с която се изговаря текстът"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Височина"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Език"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Използване на системния език"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Езикът не е избран"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Активно. Докоснете, за да превключите."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Изпълнявани услуги:"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Преглед и контрол върху изпълняващите се понастоящем услуги"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Нощен режим"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Деактивирано"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Винаги включено"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Автоматично"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Многопроц. режим на WebView: Акт."</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Програми за визуализация на WebView: Изпъл. в изолиран процес."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Внедряване на WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Задаване на внедряването на WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Избраното внедряване на WebView е деактивирано и трябва да го активирате, за да се използва. Искате ли да го направите?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Не се зарежда"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Не се зарежда"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Пълна"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Деактивирано от администратора"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Контролира се от администратор"</string> <string name="home" msgid="8263346537524314127">"Начало"</string> <string name="charge_length_format" msgid="8978516217024434156">"Преди <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Оставащо време: <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-bn-rBD/strings.xml b/packages/SettingsLib/res/values-bn-rBD/strings.xml index e982a360f9df..3c81cf27ee3b 100644 --- a/packages/SettingsLib/res/values-bn-rBD/strings.xml +++ b/packages/SettingsLib/res/values-bn-rBD/strings.xml @@ -101,6 +101,8 @@ <string name="tts_settings_title" msgid="1237820681016639683">"লেখিত-থেকে-ভাষ্য"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"ভাষ্য হার"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"যে গতিতে পাঠ্য উচ্চারিত হয়"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"পিচ"</string> + <string name="tts_default_pitch_summary" msgid="1944885882882650009">"সিন্থেসাইজ করা ভাষ্যের স্বরকে প্রভাবিত করে"</string> <string name="tts_default_lang_title" msgid="8018087612299820556">"ভাষা"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"সিস্টেমের ভাষা ব্যবহার করুন"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"ভাষা নির্বাচন করা নেই"</string> @@ -248,7 +250,7 @@ <string name="force_allow_on_external" msgid="3215759785081916381">"বহিরাগততে বলপূর্বক মঞ্জুরি"</string> <string name="force_allow_on_external_summary" msgid="3191952505860343233">"ম্যানিফেস্ট মানগুলি নির্বিশেষে যেকোনো অ্যাপ্লিকেশানকে বাহ্যিক সঞ্চয়স্থানে লেখার উপযুক্ত বানায়"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"আকার পরিবর্তনযোগ্য করার জন্য ক্রিয়াকলাপগুলিকে জোর করুন"</string> - <string name="force_resizable_activities_summary" msgid="6667493494706124459">"ম্যানিফেস্ট মানগুলির নির্বিশেষে মাল্টি-উইন্ডোর জন্য সমস্ত ক্রিয়াকলাপগুলিকে আকার পরিবর্তনযোগ্য করুন৷"</string> + <string name="force_resizable_activities_summary" msgid="6667493494706124459">"ম্যানিফেস্ট মানগুলির নির্বিশেষে মাল্টি-উইন্ডোর জন্য সমস্ত ক্রিয়াকলাপগুলির আকার পরিবর্তনযোগ্য করুন৷"</string> <string name="enable_freeform_support" msgid="1461893351278940416">"ফ্রি-ফর্ম উইন্ডোগুলি সক্ষম করুন"</string> <string name="enable_freeform_support_summary" msgid="8247310463288834487">"পরীক্ষামূলক ফ্রি-ফর্ম উইন্ডোগুলির জন্য সহায়তা সক্ষম করুন৷"</string> <string name="local_backup_password_title" msgid="3860471654439418822">"ডেস্কটপ ব্যাকআপ পাসওয়ার্ড"</string> @@ -272,15 +274,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"সক্রিয় রয়েছে৷ টগল করতে আলতো চাপুন৷"</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"এখন চলছে যে পরিষেবাগুলি"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"বর্তমান চলমান পরিষেবাগুলি দেখুন এবং নিয়ন্ত্রণ করুন"</string> - <string name="night_mode_title" msgid="2594133148531256513">"রাতের মোড"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"অক্ষম করা রয়েছে"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"সবসময় চালু"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"স্বয়ংক্রিয়"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"বহু-প্রক্রিয়া ওয়েবভিউ সক্ষম করুন"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"একটি বিচ্ছিন্ন প্রক্রিয়ায় ওয়েবভিউ রেন্ডারারগুলি চালান৷"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"ওয়েবভিউ প্রয়োগ"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"ওয়েবভিউ প্রয়োগ সেট করুন"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"নির্বাচিত ওয়েবভিউ প্রয়োগটি অক্ষম করা আছে এবং ব্যবহার করার জন্য অবশ্যই সক্ষম করতে হবে, আপনি কি এটিকে সক্ষম করতে চান?"</string> @@ -315,7 +310,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"চার্জ হচ্ছে না"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"চার্জ হচ্ছে না"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"পূর্ণ"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"প্রশাসক দ্বারা অক্ষমিত"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"প্রশাসকের দ্বারা নিয়ন্ত্রিত"</string> <string name="home" msgid="8263346537524314127">"হোম"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> আগে"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> বাকী আছে"</string> diff --git a/packages/SettingsLib/res/values-bs-rBA/arrays.xml b/packages/SettingsLib/res/values-bs-rBA/arrays.xml new file mode 100644 index 000000000000..32b8bc555a38 --- /dev/null +++ b/packages/SettingsLib/res/values-bs-rBA/arrays.xml @@ -0,0 +1,161 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- +/* +** +** Copyright 2015 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. +*/ + --> + +<resources xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> + <string-array name="wifi_status"> + <item msgid="1922181315419294640"></item> + <item msgid="8934131797783724664">"Skeniranje…"</item> + <item msgid="8513729475867537913">"Povezivanje…"</item> + <item msgid="515055375277271756">"Autentifikacija…"</item> + <item msgid="1943354004029184381">"Dobivanje IP adrese…"</item> + <item msgid="4221763391123233270">"Povezano"</item> + <item msgid="624838831631122137">"Suspendiran"</item> + <item msgid="7979680559596111948">"Prekidanje veze…"</item> + <item msgid="1634960474403853625">"Isključen"</item> + <item msgid="746097431216080650">"Neuspješno"</item> + <item msgid="6367044185730295334">"Blokirano"</item> + <item msgid="503942654197908005">"Privremeno izbjegavaj veze lošeg kvaliteta"</item> + </string-array> + <string-array name="wifi_status_with_ssid"> + <item msgid="7714855332363650812"></item> + <item msgid="8878186979715711006">"Skeniranje…"</item> + <item msgid="355508996603873860">"Povezivanje na mrežu <xliff:g id="NETWORK_NAME">%1$s</xliff:g>..."</item> + <item msgid="554971459996405634">"Autentifikacija sa mrežom <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item> + <item msgid="7928343808033020343">"Dobivanje IP adrese iz mreže <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item> + <item msgid="8937994881315223448">"Povezan na mrežu <xliff:g id="NETWORK_NAME">%1$s</xliff:g>"</item> + <item msgid="1330262655415760617">"Suspendiran"</item> + <item msgid="7698638434317271902">"Prekidanje veze sa mrežom <xliff:g id="NETWORK_NAME">%1$s</xliff:g>…"</item> + <item msgid="197508606402264311">"Isključen"</item> + <item msgid="8578370891960825148">"Neuspješno"</item> + <item msgid="5660739516542454527">"Blokirano"</item> + <item msgid="1805837518286731242">"Privremeno izbjegavaj veze lošeg kvaliteta"</item> + </string-array> + <string-array name="hdcp_checking_titles"> + <item msgid="441827799230089869">"Nikada ne provjeravaj"</item> + <item msgid="6042769699089883931">"Provjeri samo za DRM sadržaj"</item> + <item msgid="9174900380056846820">"Uvijek provjeri"</item> + </string-array> + <string-array name="hdcp_checking_summaries"> + <item msgid="505558545611516707">"Nikada ne koristi HDCP provjeru"</item> + <item msgid="3878793616631049349">"Koristi HDCP provjeru samo za DRM sadržaj"</item> + <item msgid="45075631231212732">"Uvijek koristi HDCP provjeru"</item> + </string-array> + <string-array name="select_logd_size_titles"> + <item msgid="8665206199209698501">"Isključeno"</item> + <item msgid="1593289376502312923">"64K"</item> + <item msgid="487545340236145324">"256K"</item> + <item msgid="2423528675294333831">"1M"</item> + <item msgid="180883774509476541">"4M"</item> + <item msgid="2803199102589126938">"16M"</item> + </string-array> + <string-array name="select_logd_size_lowram_titles"> + <item msgid="6089470720451068364">"Isključeno"</item> + <item msgid="4622460333038586791">"64K"</item> + <item msgid="2212125625169582330">"256K"</item> + <item msgid="1704946766699242653">"1M"</item> + </string-array> + <string-array name="select_logd_size_summaries"> + <item msgid="6921048829791179331">"Isključeno"</item> + <item msgid="2969458029344750262">"64K po međumemoriji dnevnika"</item> + <item msgid="1342285115665698168">"256k po međumemoriji dnevnika"</item> + <item msgid="1314234299552254621">"1M po međumemoriji dnevnika"</item> + <item msgid="3606047780792894151">"4M po međumemoriji dnevnika"</item> + <item msgid="5431354956856655120">"16M po međumemoriji dnevnika"</item> + </string-array> + <string-array name="window_animation_scale_entries"> + <item msgid="8134156599370824081">"Animacija isključena"</item> + <item msgid="6624864048416710414">"Animacija razmjera .5x"</item> + <item msgid="2219332261255416635">"Animacija razmjera 1x"</item> + <item msgid="3544428804137048509">"Animacija razmjera 1,5x"</item> + <item msgid="3110710404225974514">"Animacija razmjera 2x"</item> + <item msgid="4402738611528318731">"Animacija razmjera 5x"</item> + <item msgid="6189539267968330656">"Animacija razmjera 10x"</item> + </string-array> + <string-array name="transition_animation_scale_entries"> + <item msgid="8464255836173039442">"Animacija isključena"</item> + <item msgid="3375781541913316411">"Animacija razmjera .5x"</item> + <item msgid="1991041427801869945">"Animacija razmjera 1x"</item> + <item msgid="4012689927622382874">"Animacija razmjera 1,5x"</item> + <item msgid="3289156759925947169">"Animacija razmjera 2x"</item> + <item msgid="7705857441213621835">"Animacija razmjera 5x"</item> + <item msgid="6660750935954853365">"Animacija razmjera 10x"</item> + </string-array> + <string-array name="animator_duration_scale_entries"> + <item msgid="6039901060648228241">"Animacija isključena"</item> + <item msgid="1138649021950863198">"Animacija razmjera .5x"</item> + <item msgid="4394388961370833040">"Animacija razmjera 1x"</item> + <item msgid="8125427921655194973">"Animacija razmjera 1.5x"</item> + <item msgid="3334024790739189573">"Animacija razmjera 2x"</item> + <item msgid="3170120558236848008">"Animacija razmjera 5x"</item> + <item msgid="1069584980746680398">"Animacija razmjera 10x"</item> + </string-array> + <string-array name="overlay_display_devices_entries"> + <item msgid="1606809880904982133">"Nema"</item> + <item msgid="9033194758688161545">"480p"</item> + <item msgid="1025306206556583600">"480p (osiguran)"</item> + <item msgid="1853913333042744661">"720p"</item> + <item msgid="3414540279805870511">"720p (osiguran)"</item> + <item msgid="9039818062847141551">"1080p"</item> + <item msgid="4939496949750174834">"1080p (osiguran)"</item> + <item msgid="1833612718524903568">"4K"</item> + <item msgid="238303513127879234">"4K (osiguran)"</item> + <item msgid="3547211260846843098">"4K (povećava rezoluciju)"</item> + <item msgid="5411365648951414254">"4K (povećava rezoluciju, osiguran)"</item> + <item msgid="1311305077526792901">"720p, 1080p (dupli ekran)"</item> + </string-array> + <string-array name="enable_opengl_traces_entries"> + <item msgid="3191973083884253830">"Nema"</item> + <item msgid="9089630089455370183">"Logcat"</item> + <item msgid="5397807424362304288">"Systrace (grafika)"</item> + <item msgid="1340692776955662664">"Pozovi skupinu na glGetError"</item> + </string-array> + <string-array name="show_non_rect_clip_entries"> + <item msgid="993742912147090253">"Isključeno"</item> + <item msgid="675719912558941285">"Nacrtaj plavom bojom nepravougaonu oblast za isjecanje"</item> + <item msgid="1064373276095698656">"Označite zelenom bojom testirane komande za crtanje"</item> + </string-array> + <string-array name="track_frame_time_entries"> + <item msgid="2193584639058893150">"Isključeno"</item> + <item msgid="2751513398307949636">"Na ekranu u vidu crtica"</item> + <item msgid="1851438178120770973">"U ADB ljuski dumpsys gfxinfo"</item> + </string-array> + <string-array name="debug_hw_overdraw_entries"> + <item msgid="8190572633763871652">"Isključeno"</item> + <item msgid="7688197031296835369">"Prikaži overdraw područja"</item> + <item msgid="2290859360633824369">"Prikaži područja za Deuteranomaly"</item> + </string-array> + <string-array name="app_process_limit_entries"> + <item msgid="3401625457385943795">"Standardno ograničenje"</item> + <item msgid="4071574792028999443">"Nema pozadinskih procesa"</item> + <item msgid="4810006996171705398">"Najviše 1 proces"</item> + <item msgid="8586370216857360863">"Najviše 2 procesa"</item> + <item msgid="836593137872605381">"Najviše 3 procesa"</item> + <item msgid="7899496259191969307">"Najviše 4 procesa"</item> + </string-array> + <string-array name="usb_configuration_titles"> + <item msgid="488237561639712799">"Puni se"</item> + <item msgid="5220695614993094977">"MTP (protokol za prijenos sadržaja medija)"</item> + <item msgid="2086000968159047375">"PTP (protokol za prijenos slika)"</item> + <item msgid="7398830860950841822">"RNDIS (USB Ethernet)"</item> + <item msgid="1718924214939774352">"Izvor zvuka"</item> + <item msgid="8126315616613006284">"MIDI"</item> + </string-array> +</resources> diff --git a/packages/SettingsLib/res/values-bs-rBA/strings.xml b/packages/SettingsLib/res/values-bs-rBA/strings.xml index 92c7ec841104..13d84abae7fe 100644 --- a/packages/SettingsLib/res/values-bs-rBA/strings.xml +++ b/packages/SettingsLib/res/values-bs-rBA/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Izlaz za pretvaranje teksta u govor"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Brzina govora"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Brzina kojom se izgovara tekst"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Visina"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Jezik"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Koristi sistemski jezik"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Jezik nije izabran"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktivno. Dodirnite za promjenu opcije."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Pokrenute usluge"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Prikažite trenutno pokrenute usluge i upravljajte njima"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Noćni način rada"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Onemogućeno"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Uvijek uključeno"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatski"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Omogućiti višeprocesni WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Pokrenite WebView operatera u izolovanom procesu."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Postavljanje WebViewa"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Podesi WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Postavljanje izabranog WebViewa je onemogućeno. Da bi se mogao koristiti, mora biti omogućen. Želite li ga omogućiti?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Ne puni se"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Ne puni se"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Puna"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Onemogućio administrator"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Pod kontrolom administratora"</string> <string name="home" msgid="8263346537524314127">"Početna stranica"</string> <string name="charge_length_format" msgid="8978516217024434156">"prije <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Još otprilike <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml index beb909e1a502..ceb2b6a2be7f 100644 --- a/packages/SettingsLib/res/values-ca/strings.xml +++ b/packages/SettingsLib/res/values-ca/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Síntesi de veu"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Velocitat de veu"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Velocitat de lectura del text"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"To"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Idioma"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Utilitza l\'idioma del sistema"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"No has seleccionat cap idioma"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aplicació activa. Toca per desactivar-la."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Serveis en execució"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Visualitza i controla els serveis en execució"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Mode nocturn"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Desactivat"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Sempre activat"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automàtic"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Activa WebView de multiprocés"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Executa els renderitzadors de WebView en un procés aïllat."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Implementació de WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Configura la implementació de WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"La implementació de WebView que has triat està desactivada i s\'ha d\'activar per utilitzar-la. Vols activar-la?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"No s\'està carregant"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"No s\'està carregant"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Plena"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Opció desactivada per l\'administrador"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlat per l\'administrador"</string> <string name="home" msgid="8263346537524314127">"Inici"</string> <string name="charge_length_format" msgid="8978516217024434156">"Fa <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Temps restant: <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml index ad01febb56d4..b03f2d874105 100644 --- a/packages/SettingsLib/res/values-cs/strings.xml +++ b/packages/SettingsLib/res/values-cs/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Převod textu na řeč"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Rychlost řeči"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Rychlost mluveného textu"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Výška"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Jazyk"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Použít jazyk systému"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Nebyl vybrán jazyk"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktivní. Klepnutím možnost přepnete."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Spuštěné služby"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Umožňuje zobrazit a ovládat aktuálně spuštěné služby"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Noční režim"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Vypnuto"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Vždy zapnuto"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatický"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Povolit WebView ve více procesech"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Spouštět moduly vykreslení WebView jako samostatné procesy."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Implementace WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Nastavte implementaci WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Vybraná implementace WebView je zakázána a nelze ji použít. Chcete ji povolit a použít?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Nenabíjí se"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Nenabíjí se"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Nabitá"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Zakázáno administrátorem"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Spravováno administrátorem"</string> <string name="home" msgid="8263346537524314127">"Plocha"</string> <string name="charge_length_format" msgid="8978516217024434156">"před <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Zbývající čas: <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml index e86904453afa..2401a2f4f409 100644 --- a/packages/SettingsLib/res/values-da/strings.xml +++ b/packages/SettingsLib/res/values-da/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Oplæsning"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Talehastighed"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Oplæsningshastighed for tekst"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Toneleje"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Sprog"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Brug systemsprog"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Der er ikke valgt sprog"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktiv. Tryk for at skifte."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Kørende tjenester"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Vis og kontrollér kørende tjenester"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Nattilstand"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Deaktiveret"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Altid slået til"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatisk"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Aktivér WebView i flere processer"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Kør WebView-gengivelse i en isoleret proces."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView-implementering"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Konfigurer WebView-implementering"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Den valgte WebView-implementering er deaktiveret og skal aktiveres, før den kan bruges. Vil du aktivere den?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Oplader ikke"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Oplader ikke"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Fuld"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Deaktiveret af administratoren"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Kontrolleret af administratoren"</string> <string name="home" msgid="8263346537524314127">"Start"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> siden"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> tilbage"</string> diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml index 56d2543b1b20..687e96257da0 100644 --- a/packages/SettingsLib/res/values-de/strings.xml +++ b/packages/SettingsLib/res/values-de/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Text-in-Sprache-Ausgabe"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Sprechgeschwindigkeit"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Geschwindigkeit, mit der der Text gesprochen wird"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tonlage"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Sprache"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Systemsprache verwenden"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Keine Sprache ausgewählt"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktiv. Zum Wechseln tippen."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Aktive Dienste"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Momentan ausgeführte Dienste anzeigen und steuern"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Nachtmodus"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Deaktiviert"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Immer an"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatisch"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"WebView-Simultanverarbeitung aktivieren"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"WebView-Renderer isoliert ausführen."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView-Implementierung"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView-Implementierung festlegen"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Die ausgewählte WebView-Implementierung ist deaktiviert. Um sie nutzen zu können, muss sie aktiviert sein. Möchtest du sie aktivieren?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Wird nicht geladen"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Wird nicht geladen"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Voll"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Vom Administrator deaktiviert"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Durch den Administrator verwaltet"</string> <string name="home" msgid="8263346537524314127">"Startseite"</string> <string name="charge_length_format" msgid="8978516217024434156">"Vor <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Noch <xliff:g id="ID_1">%1$s</xliff:g> verbleibend"</string> diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml index e9f86615a2f5..0b6d2c43fe0c 100644 --- a/packages/SettingsLib/res/values-el/strings.xml +++ b/packages/SettingsLib/res/values-el/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Έξοδος μετατροπής κειμένου σε ομιλία"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Ταχύτητα λόγου"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Ταχύτητα με την οποία εκφωνείται το κείμενο"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Τόνος"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Γλώσσα"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Χρήση γλώσσας συστήματος"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Δεν έχει επιλεγεί γλώσσα"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Ενεργό. Πατήστε για εναλλαγή."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Υπηρεσίες που εκτελούνται"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Προβολή και έλεγχος των εφαρμογών που εκτελούνται αυτή τη στιγμή"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Λειτουργία νύχτας"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Ανενεργό"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Πάντα ενεργό"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Αυτόματο"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Ενεργοποίηση WebView πολλαπλών διεργασιών"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Εκτέλεση λειτ.απόδοσης WebView σε μια απομονωμένη διεργασία."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Υλοποίηση WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Ορισμός υλοποίησης WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Η επιλεγμένη ενσωμάτωση WebView είναι απενεργοποιημένη και θα πρέπει να ενεργοποιηθεί για να χρησιμοποιηθεί. Θέλετε να την ενεργοποιήσετε;"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Δεν φορτίζει"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Δεν φορτίζει"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Πλήρης"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Απενεργοποιήθηκε από το διαχειριστή"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Ελέγχονται από το διαχειριστή"</string> <string name="home" msgid="8263346537524314127">"Αρχική οθόνη"</string> <string name="charge_length_format" msgid="8978516217024434156">"Πριν από <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Απομένουν <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml index 668e0b2fcbad..eeb54dde499d 100644 --- a/packages/SettingsLib/res/values-en-rAU/strings.xml +++ b/packages/SettingsLib/res/values-en-rAU/strings.xml @@ -101,6 +101,8 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Text-to-speech output"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Speech rate"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Speed at which the text is spoken"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Pitch"</string> + <string name="tts_default_pitch_summary" msgid="1944885882882650009">"Affects the tone of the synthesised speech"</string> <string name="tts_default_lang_title" msgid="8018087612299820556">"Language"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Use system language"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Language not selected"</string> @@ -272,15 +274,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Active. Tap to toggle."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Running services"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"View and control currently running services"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Night mode"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Disabled"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Always on"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatic"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Enable multi-process WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Run WebView renderers in an isolated process."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView implementation"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Set WebView implementation"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"The chosen WebView implementation is disabled and must be enabled to be used, do you wish to enable it?"</string> @@ -315,7 +310,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Not charging"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Not charging"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Full"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Disabled by administrator"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlled by admin"</string> <string name="home" msgid="8263346537524314127">"Home"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> ago"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> left"</string> diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml index 668e0b2fcbad..eeb54dde499d 100644 --- a/packages/SettingsLib/res/values-en-rGB/strings.xml +++ b/packages/SettingsLib/res/values-en-rGB/strings.xml @@ -101,6 +101,8 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Text-to-speech output"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Speech rate"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Speed at which the text is spoken"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Pitch"</string> + <string name="tts_default_pitch_summary" msgid="1944885882882650009">"Affects the tone of the synthesised speech"</string> <string name="tts_default_lang_title" msgid="8018087612299820556">"Language"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Use system language"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Language not selected"</string> @@ -272,15 +274,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Active. Tap to toggle."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Running services"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"View and control currently running services"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Night mode"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Disabled"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Always on"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatic"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Enable multi-process WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Run WebView renderers in an isolated process."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView implementation"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Set WebView implementation"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"The chosen WebView implementation is disabled and must be enabled to be used, do you wish to enable it?"</string> @@ -315,7 +310,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Not charging"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Not charging"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Full"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Disabled by administrator"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlled by admin"</string> <string name="home" msgid="8263346537524314127">"Home"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> ago"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> left"</string> diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml index 668e0b2fcbad..eeb54dde499d 100644 --- a/packages/SettingsLib/res/values-en-rIN/strings.xml +++ b/packages/SettingsLib/res/values-en-rIN/strings.xml @@ -101,6 +101,8 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Text-to-speech output"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Speech rate"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Speed at which the text is spoken"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Pitch"</string> + <string name="tts_default_pitch_summary" msgid="1944885882882650009">"Affects the tone of the synthesised speech"</string> <string name="tts_default_lang_title" msgid="8018087612299820556">"Language"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Use system language"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Language not selected"</string> @@ -272,15 +274,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Active. Tap to toggle."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Running services"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"View and control currently running services"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Night mode"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Disabled"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Always on"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatic"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Enable multi-process WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Run WebView renderers in an isolated process."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView implementation"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Set WebView implementation"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"The chosen WebView implementation is disabled and must be enabled to be used, do you wish to enable it?"</string> @@ -315,7 +310,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Not charging"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Not charging"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Full"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Disabled by administrator"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlled by admin"</string> <string name="home" msgid="8263346537524314127">"Home"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> ago"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> left"</string> diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml index 05ab073ad699..b0b47f3d96c5 100644 --- a/packages/SettingsLib/res/values-es-rUS/strings.xml +++ b/packages/SettingsLib/res/values-es-rUS/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Salida de texto a voz"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Velocidad de voz"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Velocidad en la que se habla el texto"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Sonido"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Idioma"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Usar el idioma del sistema"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Idioma no seleccionado"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Activa. Presiona para activar o desactivar."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"En ejecución"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Ver y controlar servicios actuales en ejecución"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Modo nocturno"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Inhabilitado"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Siempre activado"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automático"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Habilitar multiproceso WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Ejecutar procesadores de WebView en un proceso aislado."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Implementación de WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Configurar la implementación de WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"La implementación de WebView que elegiste está inhabilitada. Debes habilitarla para poder usarla. ¿Quieres hacerlo?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"No se está cargando."</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"No se realiza la carga"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Cargado"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Inhabilitada por el administrador"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlada por el administrador"</string> <string name="home" msgid="8263346537524314127">"Página principal"</string> <string name="charge_length_format" msgid="8978516217024434156">"Hace <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Falta <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml index 5fea7554c5cb..9eb22c10662c 100644 --- a/packages/SettingsLib/res/values-es/strings.xml +++ b/packages/SettingsLib/res/values-es/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Síntesis de voz"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Velocidad de la voz"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Velocidad a la que se lee el texto"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tono"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Idioma"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Usar idioma del sistema"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Idioma no seleccionado"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Activa. Toca para alternar."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Servicios en ejecución"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Ver y controlar los servicios en ejecución"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Modo nocturno"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Inhabilitado"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Siempre activado"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automático"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Habilitar WebView multiproceso"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Ejecuta procesadores de WebView en un proceso aislado."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Implementación de WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Establecer implementación de WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"La implementación de WebView seleccionada está inhabilitada y debes habilitarla para utilizarla. ¿Quieres hacerlo?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"No se está cargando"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"No se está cargando"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Completa"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Inhabilitada por el administrador"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlada por el administrador"</string> <string name="home" msgid="8263346537524314127">"Inicio"</string> <string name="charge_length_format" msgid="8978516217024434156">"Hace <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Tiempo restante: <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-et-rEE/strings.xml b/packages/SettingsLib/res/values-et-rEE/strings.xml index b9d011bee9d4..afd707b38e33 100644 --- a/packages/SettingsLib/res/values-et-rEE/strings.xml +++ b/packages/SettingsLib/res/values-et-rEE/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Kõnesünteesi väljund"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Kõnekiirus"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Teksti rääkimise kiirus"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Helikõrgus"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Keel"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Süsteemi keele kasutamine"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Keelt pole valitud"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktiivne. Puudutage vahetamiseks."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Käitatud teenused"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Praegu käitatud teenuste vaatamine ja juhtimine"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Öörežiim"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Keelatud"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Alati sees"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automaatne"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Luba mitme protsessiga WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"WebView\' renderdajad käitatakse eraldi protsessis."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView\' rakendamine"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView\' rakendamise seadistamine"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Valitud WebView\' rakendamisviis on keelatud ja see tuleb kasutamiseks lubada. Kas soovite selle lubada?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Ei lae"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Ei lae"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Täis"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Administraator on keelanud"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Juhib administraator"</string> <string name="home" msgid="8263346537524314127">"Avaekraan"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> tagasi"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> on jäänud"</string> diff --git a/packages/SettingsLib/res/values-eu-rES/strings.xml b/packages/SettingsLib/res/values-eu-rES/strings.xml index c1be37fc3e81..fb29afebaf20 100644 --- a/packages/SettingsLib/res/values-eu-rES/strings.xml +++ b/packages/SettingsLib/res/values-eu-rES/strings.xml @@ -99,8 +99,11 @@ <string name="launch_defaults_none" msgid="4241129108140034876">"Ez dago hobespen lehenetsirik ezarrita"</string> <string name="tts_settings" msgid="8186971894801348327">"Testua ahots bihurtzeko eginbidearen ezarpenak"</string> <string name="tts_settings_title" msgid="1237820681016639683">"Testua ahots bihurtzeko eginbidearen irteera"</string> - <string name="tts_default_rate_title" msgid="6030550998379310088">"Hizketa-abiadura"</string> + <string name="tts_default_rate_title" msgid="6030550998379310088">"Hizketaren abiadura"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Testua zer abiaduran esaten den"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tonua"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Hizkuntza"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Erabili sistemaren hizkuntza"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Ez da hizkuntza hautatu"</string> @@ -226,7 +229,7 @@ <string name="debug_layout" msgid="5981361776594526155">"Erakutsi diseinuaren mugak"</string> <string name="debug_layout_summary" msgid="2001775315258637682">"Erakutsi kliparen mugak, marjinak, etab."</string> <string name="force_rtl_layout_all_locales" msgid="2259906643093138978">"Behartu eskuin-ezker norabidea."</string> - <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Behartu pantaila-diseinuaren norabidea eskuinetik ezkerrerakoa izatera eskualdeko ezarpen guztiekin."</string> + <string name="force_rtl_layout_all_locales_summary" msgid="9192797796616132534">"Behartu pantaila-diseinuaren norabidea eskuin-ezker izatera eskualdeko ezarpen guztiekin."</string> <string name="show_cpu_usage" msgid="2389212910758076024">"Erakutsi PUZ erabilera"</string> <string name="show_cpu_usage_summary" msgid="2113341923988958266">"PUZ erabilera erakusten duen pantaila-gainjartzea"</string> <string name="force_hw_ui" msgid="6426383462520888732">"Behartu GPU errendatzea"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktibo. Aldatzeko, sakatu hau."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Abian diren zerbitzuak"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Ikusi eta kontrolatu unean abian diren zerbitzuak"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Gau modua"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Desgaituta"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Beti aktibatuta"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatikoa"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Gaitu prozesu anitzeko WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Exekutatu WebView errendatzaileak prozesu isolatu batean."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView implementation"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Set WebView implementation"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Desgaituta dago aukeratu den WebView inplementazioa. Erabili nahi izanez gero, gaitu egin behar duzu. Gaitu nahi al duzu?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Ez da kargatzen ari"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Ez da kargatzen ari"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Beteta"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Administratzaileak desgaitu du"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Administratzaileak kontrolatzen du"</string> <string name="home" msgid="8263346537524314127">"Hasierako pantaila"</string> <string name="charge_length_format" msgid="8978516217024434156">"Duela <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> guztiz kargatu arte"</string> diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml index fc4cd7d1dd51..8f07b22229c8 100644 --- a/packages/SettingsLib/res/values-fa/strings.xml +++ b/packages/SettingsLib/res/values-fa/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"خروجی تبدیل متن به گفتار"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"سرعت گفتار"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"سرعتی که متن خوانده میشود"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"زیر و بمی صدا"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"زبان"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"استفاده از زبان سیستم"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"زبان انتخاب نشده است"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"فعال. برای تغییر حالت ضربه بزنید."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"سرویسهای در حال اجرا"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"مشاهده و کنترل سرویسهای در حال اجرای فعلی"</string> - <string name="night_mode_title" msgid="2594133148531256513">"حالت شب"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"غیرفعال است"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"همیشه روشن"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"خودکار"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"فعال کردن WebView چند پردازشی"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"اجرای تولیدکننده تصویر WebView در یک پردازش مجزا."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"اجرای WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"تنظیم اجرای WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"پیادهسازی WebView انتخابشده غیرفعال شده است و برای استفاده شدن باید فعال شود؛ میخواهید آن را فعال کنید؟"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"شارژ نمیشود"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"شارژ نمیشود"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"پر"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"سرپرست آن را غیرفعال کرده است"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"توسط سرپرست سیستم کنترل میشود"</string> <string name="home" msgid="8263346537524314127">"صفحه اصلی"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> قبل"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> باقی مانده است"</string> diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml index 34309c193a7f..cdff87baf68f 100644 --- a/packages/SettingsLib/res/values-fi/strings.xml +++ b/packages/SettingsLib/res/values-fi/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Tekstistä puheeksi -toisto"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Puheen nopeus"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Tekstin puhumisnopeus"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Äänenkorkeus"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Kieli"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Käytä järjestelmän kieltä"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Kieltä ei ole valittu"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Käytössä. Poista käytöstä koskettamalla."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Käynnissä olevat palvelut"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Tarkastele ja hallitse käynnissä olevia palveluita"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Yötila"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Ei käytössä"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Aina käytössä"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automaattinen"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"WebView\'n usean prosessin tila"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Suorita WebView\'n hahmontajat erillisinä prosesseina."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView-käyttöönotto"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Määritä WebView-käyttöönotto"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Valittu WebView-käyttöönotto on poistettu käytöstä. Haluatko ottaa sen käyttöön?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Ei laturissa"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Ei laturissa"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Täynnä"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Järjestelmänvalvojan käytöstä poistama"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Järjestelmänvalvoja hallinnoi tätä asetusta."</string> <string name="home" msgid="8263346537524314127">"Aloitusnäyttö"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> sitten"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> jäljellä"</string> diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml index 1181c2a3f0c2..a4552a517e9d 100644 --- a/packages/SettingsLib/res/values-fr-rCA/strings.xml +++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Sortie de la synthèse vocale"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Cadence"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Vitesse à laquelle le texte est énoncé"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Ton"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Langue"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Utiliser la langue du système"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Langue non sélectionnée"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Application active. Touchez ici pour la désactiver."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Services en cours d\'exécution"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Afficher et contrôler les services en cours d\'exécution"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Mode Nuit"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Désactivé"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Toujours actif"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatique"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Activer WebView multiprocessus"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Exécuter moteurs de rendu WebView dans un processus isolé."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Mise en œuvre WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Définir la mise en œuvre WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"La mise en œuvre WebView sélectionnée est désactivée. Vous devez l\'activer pour l\'utiliser. Souhaitez-vous l\'activer?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"N\'est pas en charge"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"N\'est pas en charge"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Pleine"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Désactivé par l\'administrateur"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Contrôlé par l\'administrateur"</string> <string name="home" msgid="8263346537524314127">"Accueil"</string> <string name="charge_length_format" msgid="8978516217024434156">"Il y a <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Durée restante :<xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml index 0639f1fa5f57..09c6e78b17ed 100644 --- a/packages/SettingsLib/res/values-fr/strings.xml +++ b/packages/SettingsLib/res/values-fr/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Synthèse vocale"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Cadence"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Vitesse à laquelle le texte est énoncé"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Ton"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Langue"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Utiliser la langue du système"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Langue non sélectionnée"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Application active. Appuyez ici pour la désactiver."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Services en cours d\'exécution"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Afficher et contrôler les services en cours d\'exécution"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Mode Nuit"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Désactivé"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Toujours activé"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatique"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Activer WebView multiprocessus"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Exécuter moteurs de rendu WebView dans un processus isolé."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Mise en œuvre WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Définir la mise en œuvre WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"La mise en œuvre WebView sélectionnée est désactivée. Vous devez l\'activer pour l\'utiliser. Souhaitez-vous l\'activer ?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Pas en charge"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Débranchée"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"pleine"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Désactivé par l\'administrateur"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Contrôlé par l\'administrateur"</string> <string name="home" msgid="8263346537524314127">"Accueil"</string> <string name="charge_length_format" msgid="8978516217024434156">"Il y a <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Il reste <xliff:g id="ID_1">%1$s</xliff:g>."</string> diff --git a/packages/SettingsLib/res/values-gl-rES/strings.xml b/packages/SettingsLib/res/values-gl-rES/strings.xml index 5622d634a5d4..861756fd6bf9 100644 --- a/packages/SettingsLib/res/values-gl-rES/strings.xml +++ b/packages/SettingsLib/res/values-gl-rES/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Síntese de voz"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Velocidade da fala"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Velocidade á que se di o texto"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Ton"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Idioma"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Utilizar idioma do sistema"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Idioma non seleccionado"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aplicación activa. Toca para alternar a configuración."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Servizos en execución"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Ver e controlar servizos actualmente en execución"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Modo nocturno"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Desactivado"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Sempre activada"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automático"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Activar WebView multiproceso"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Executa os procesadores de WebView nun proceso illado."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Implementación de WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Definir implementación de WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"A implementación de WebView escollida está desactivada e, para poder usala, debe estar activada. Queres activala?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Non se está cargando"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Non está cargando"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Completa"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Desactivado polo administrador"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Opción controlada polo administrador"</string> <string name="home" msgid="8263346537524314127">"Inicio"</string> <string name="charge_length_format" msgid="8978516217024434156">"Hai <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Tempo restante: <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-gu-rIN/strings.xml b/packages/SettingsLib/res/values-gu-rIN/strings.xml index 2c1990fea83a..c5cac9d3b688 100644 --- a/packages/SettingsLib/res/values-gu-rIN/strings.xml +++ b/packages/SettingsLib/res/values-gu-rIN/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"ટેક્સ્ટ ટુ સ્પીચ આઉટપુટ"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"વાણી દર"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"ટેક્સ્ટ બોલાયેલ છે તે ઝડપ"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"પિચ"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"ભાષા"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"સિસ્ટમ ભાષાનો ઉપયોગ કરો"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"ભાષા પસંદ કરેલ નથી"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"સક્રિય. ટોગલ કરવા માટે ટૅપ કરો."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"ચાલુ સેવાઓ"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"હાલમાં ચાલતી સેવાઓ જુઓ અને નિયંત્રિત કરો"</string> - <string name="night_mode_title" msgid="2594133148531256513">"રાત્રિ મોડ"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"અક્ષમ કરેલ"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"હંમેશાં ચાલુ"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"સ્વચલિત"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"મલ્ટિપ્રોસેસ WebView સક્ષમ કરો"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"પૃથક પ્રક્રિયામાં WebView રેંડરર્સ ચલાવો."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView અમલીકરણ"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView અમલીકરણ સેટ કરો"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"પસંદ કરેલ WebView અમલીકરણ અક્ષમ કરેલ છે અને ઉપયોગ કરવા માટે સક્ષમ કરવું આવશ્યક છે, શું તમે તેને સક્ષમ કરવા માગો છો?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"ચાર્જ થઈ રહ્યું નથી"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"ચાર્જ થઈ રહ્યું નથી"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"પૂર્ણ"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"વ્યવસ્થાપક દ્વારા અક્ષમ"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"વ્યવસ્થાપક દ્વારા નિયંત્રિત"</string> <string name="home" msgid="8263346537524314127">"હોમ"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> પહેલાં"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> બાકી"</string> diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml index 7deb05c530cb..33e243b486ee 100644 --- a/packages/SettingsLib/res/values-hi/strings.xml +++ b/packages/SettingsLib/res/values-hi/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"लेख को सुनें"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"बोली दर"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"बोलने की गति तय करें"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"पिच"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"भाषा"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"सिस्टम भाषा का उपयोग करें"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"भाषा नहीं चुनी गई है"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"सक्रिय. टॉगल करने पर टैप करें."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"चल रही सेवाएं"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"वर्तमान में चल रही सेवाओं को देखें और नियंत्रित करें"</string> - <string name="night_mode_title" msgid="2594133148531256513">"रात्रि मोड"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"अक्षम"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"हमेशा चालू"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"स्वचालित"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"मल्टीप्रोसेस WebView सक्षम करें"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"किसी अलग प्रक्रिया में WebView रेंडरर चलाएं."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView कार्यान्वयन"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView कार्यान्वयन सेट करें"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"चुना गया WebView कार्यान्वयन अक्षम है और उसे उपयोग करने के लिए सक्षम किया जाना आवश्यक है, क्या आप उसे सक्षम करना चाहते हैं?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"चार्ज नहीं हो रही है"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"चार्ज नहीं हो रही है"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"पूरी"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"व्यवस्थापक के द्वारा अक्षम किया गया"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"व्यवस्थापक द्वारा नियंत्रित"</string> <string name="home" msgid="8263346537524314127">"होम"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> पहले"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> शेष"</string> diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml index ca58584d4dac..ed11c31f63da 100644 --- a/packages/SettingsLib/res/values-hr/strings.xml +++ b/packages/SettingsLib/res/values-hr/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Pretvaranje teksta u govor"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Brzina govora"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Brzina kojom se izgovara tekst"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Visina glasa"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Jezik"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"upotrijebi jezik sustava"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Jezik nije odabran"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktivno. Dodirnite da biste to promijenili."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Pokrenute usluge"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Pogledajte i nadzirite pokrenute procese"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Noćni način rada"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Onemogućeno"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Uvijek uključeno"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatska"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Omogući višeprocesni WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Pokreni ispunjivače WebViewa u izoliranim procesima."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Implementacija WebViewa"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Postavi implementaciju WebViewa"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Odabrana implementacija WebViewa onemogućena je i morate je omogućiti da biste je mogli upotrebljavati. Želite li je omogućiti?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Ne puni se"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Ne puni se"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Puna"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Onemogućio administrator"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Kontrolira administrator"</string> <string name="home" msgid="8263346537524314127">"Početni zaslon"</string> <string name="charge_length_format" msgid="8978516217024434156">"Prije <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Još <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml index 365c409b5232..2e0e4dd1d582 100644 --- a/packages/SettingsLib/res/values-hu/strings.xml +++ b/packages/SettingsLib/res/values-hu/strings.xml @@ -101,6 +101,8 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Szövegfelolvasás"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Beszéd sebessége"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"A szöveg kimondásának sebessége"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Hangmagasság"</string> + <string name="tts_default_pitch_summary" msgid="1944885882882650009">"Az előállított beszédhang hangszínét befolyásolja"</string> <string name="tts_default_lang_title" msgid="8018087612299820556">"Nyelv"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"A rendszer nyelvének használata"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Nincs nyelv kiválasztva"</string> @@ -272,15 +274,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Bekapcsolva. Koppintson ide a váltáshoz."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Futó szolgáltatások"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"A jelenleg futó szolgáltatások megtekintése és vezérlése"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Éjszakai mód"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Kikapcsolva"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Mindig bekapcsolva"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatikus"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Többfolyamatos WebView indítása"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"WebView-megjelenítők futtatása külön folyamatként."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView-megvalósítás"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView-megvalósítás beállítása"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"A kiválasztott WebView-megvalósítás le van tiltva, a használathoz viszont engedélyezni kell. Szeretné engedélyezni?"</string> @@ -315,7 +310,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Nem tölt"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Nem töltődik"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Feltöltve"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Letiltva a rendszergazda által"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Rendszergazda által irányítva"</string> <string name="home" msgid="8263346537524314127">"Főoldal"</string> <string name="charge_length_format" msgid="8978516217024434156">"Ennyi ideje: <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> van hátra"</string> diff --git a/packages/SettingsLib/res/values-hy-rAM/strings.xml b/packages/SettingsLib/res/values-hy-rAM/strings.xml index b210698c33e7..087211d56ed4 100644 --- a/packages/SettingsLib/res/values-hy-rAM/strings.xml +++ b/packages/SettingsLib/res/values-hy-rAM/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Գրվածքից խոսք ելք"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Խոսքի գնահատական"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Տեքստի արտասանման արագությունը"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Բարձրություն"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Լեզու"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Օգտագործել համակարգի լեզուն"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Լեզուն ընտրված չէ"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Ակտիվ է: Հպեք՝ փոխելու համար:"</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Աշխատեցվող ծառայություններ"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Դիտել և վերահսկել ընթացիկ աշխատեցվող ծառայությունները"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Գիշերային ռեժիմ"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Անջատված"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Միշտ միացված"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Ավտոմատ"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Միացնել բազմագործընթաց WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Գործարկել WebView-ի մշակիչները առանձնացված գործընթացում:"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView-ի իրականացում"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Ընտրեք WebView-ի իրականացումը"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"WebView-ի իրականացման ընտրված եղանակն անջատված է և օգտագործելու համար պետք է նախ միացվի: Միացնե՞լ:"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Չի լիցքավորվում"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Չի լիցքավորվում"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Լիցքավորված"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Կասեցված է ադմինիստրատորի կողմից"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Վերահսկվում է ադմինիստրատորի կողմից"</string> <string name="home" msgid="8263346537524314127">"Գլխավոր էջ"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> առաջ"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Մնացել է <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml index 33e869cf04a6..eb16161dad72 100644 --- a/packages/SettingsLib/res/values-in/strings.xml +++ b/packages/SettingsLib/res/values-in/strings.xml @@ -101,6 +101,8 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Keluaran text-to-speech"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Laju bicara"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Kecepatan teks diucapkan"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tinggi nada"</string> + <string name="tts_default_pitch_summary" msgid="1944885882882650009">"Memengaruhi nada ucapan yang disintesis"</string> <string name="tts_default_lang_title" msgid="8018087612299820556">"Bahasa"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Gunakan bahasa sistem"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Bahasa tidak dipilih"</string> @@ -272,15 +274,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktif. Ketuk untuk beralih."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Layanan yang sedang berjalan"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Melihat dan mengontrol layanan yang sedang berjalan"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Mode malam"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Dinonaktifkan"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Selalu aktif"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Otomatis"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Aktifkan WebView multiproses"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Jalankan perender WebView dalam proses yang terisolasi."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Penerapan WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Setel penerapan WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Implementasi WebView yang dipilih telah dinonaktifkan, dan harus diaktifkan agar dapat digunakan. Ingin mengaktifkannya?"</string> @@ -315,7 +310,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Tidak mengisi daya"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Tidak mengisi daya"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Penuh"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Dinonaktifkan oleh administrator"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Dikontrol oleh admin"</string> <string name="home" msgid="8263346537524314127">"Layar Utama"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> lalu"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Tersisa <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-is-rIS/strings.xml b/packages/SettingsLib/res/values-is-rIS/strings.xml index b79dcf8fa180..5ff0540b9af4 100644 --- a/packages/SettingsLib/res/values-is-rIS/strings.xml +++ b/packages/SettingsLib/res/values-is-rIS/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Úttak upplesturs"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Talhraði"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Hraði talaðs texta"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tónhæð"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Tungumál"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Nota tungumál kerfis"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Tungumál ekki valið"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Virkt. Ýttu til að breyta."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Þjónustur í gangi"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Skoða og stjórna þjónustum í gangi"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Næturstilling"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Óvirkt"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Alltaf kveikt"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Sjálfvirkt"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Virkja WebView í fjölvinnslu"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Keyra WebView teiknun í lokuðu ferli."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Innleiðing WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Stilla innleiðingu WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Slökkt er á valinni innleiðingu WebView. Kveikja þarf á henni til að hægt sé að nota hana. Viltu gera það?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Ekki í hleðslu"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Ekki í hleðslu"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Fullhlaðin"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Stjórnandi gerði óvirkt"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Stjórnað af kerfisstjóra"</string> <string name="home" msgid="8263346537524314127">"Heim"</string> <string name="charge_length_format" msgid="8978516217024434156">"Fyrir <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> eftir"</string> diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml index d5753c489bac..ca0df7a6171d 100644 --- a/packages/SettingsLib/res/values-it/strings.xml +++ b/packages/SettingsLib/res/values-it/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Output sintesi vocale"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Velocità voce"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Velocità di pronuncia del testo"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tono"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Lingua"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Usa lingua di sistema"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Lingua non selezionata"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Attiva. Tocca per attivare/disattivare."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Servizi in esecuzione"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Visualizza e controlla i servizi attualmente in esecuzione"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Modalità Notte"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Disattivato"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Sempre attivo"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatico"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Attiva WebView multiprocesso"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Esegui renderer WebView in un processo isolato."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Implementazione di WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Imposta l\'implementazione di WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"L\'implementazione di WebView selezionata non è attiva e deve essere attivata per poterla utilizzare. Vuoi attivarla?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Non in carica"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Non in carica"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Carica"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Disattivata dall\'amministratore"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Gestita dall\'amministratore"</string> <string name="home" msgid="8263346537524314127">"Home page"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> fa"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> rimanenti"</string> diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml index ee2588fda6e3..280c443761a9 100644 --- a/packages/SettingsLib/res/values-iw/strings.xml +++ b/packages/SettingsLib/res/values-iw/strings.xml @@ -101,6 +101,8 @@ <string name="tts_settings_title" msgid="1237820681016639683">"פלט טקסט לדיבור"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"קצב דיבור"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"המהירות שבה הטקסט נאמר"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"גובה צליל"</string> + <string name="tts_default_pitch_summary" msgid="1944885882882650009">"משפיע על הטון של הדיבור המסונתז"</string> <string name="tts_default_lang_title" msgid="8018087612299820556">"שפה"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"שימוש בשפת המערכת"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"לא נבחרה שפה"</string> @@ -272,15 +274,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"אפליקציה פעילה. הקש כדי להחליף מצב."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"שירותים פועלים"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"הצג ושלוט בשירותים הפועלים כעת"</string> - <string name="night_mode_title" msgid="2594133148531256513">"מצב לילה"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"מושבת"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"פועל תמיד"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"באופן אוטומטי"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"הפעל תצוגת אתר לריבוי עיבודים"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"הרץ מעבדי תצוגת אתר בהליך מבודד"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"יישום WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"הגדרת יישום WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"יישום ה-WebView שנבחר מושבת, ויש להפעיל אותו כדי להשתמש בו. האם ברצונך להפעיל אותו?"</string> @@ -315,7 +310,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"לא בטעינה"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"לא טוען"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"מלא"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"הושבת על ידי מנהל המערכת"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"נמצא בשליטת מנהל מערכת"</string> <string name="home" msgid="8263346537524314127">"דף הבית"</string> <string name="charge_length_format" msgid="8978516217024434156">"לפני <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"נשארו <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml index 67bf4b08e498..4b336116bc50 100644 --- a/packages/SettingsLib/res/values-ja/strings.xml +++ b/packages/SettingsLib/res/values-ja/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"テキスト読み上げの出力"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"音声の速度"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"テキストの読み上げ速度"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"音の高さ"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"言語"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"システムの言語を使用"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"言語が選択されていません"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"有効です。タップすると切り替わります。"</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"実行中のサービス"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"現在実行中のサービスを表示して制御する"</string> - <string name="night_mode_title" msgid="2594133148531256513">"夜間モード"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"無効"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"常にON"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"自動"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"複数プロセス WebView を有効化"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"別個のプロセスで WebView レンダラを実行します。"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView の実装"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView の実装の設定"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"選択した WebView の実装は無効になっていますが、使用するには有効にする必要があります。有効にしますか?"</string> @@ -317,7 +313,7 @@ <!-- String.format failed for translation --> <!-- no translation found for battery_info_status_full (2824614753861462808) --> <skip /> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"管理者によって無効にされています"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"管理者により管理されています"</string> <string name="home" msgid="8263346537524314127">"ホーム"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g>前"</string> <string name="remaining_length_format" msgid="7886337596669190587">"あと <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-ka-rGE/strings.xml b/packages/SettingsLib/res/values-ka-rGE/strings.xml index f441fa09fea0..9c33cc0cc141 100644 --- a/packages/SettingsLib/res/values-ka-rGE/strings.xml +++ b/packages/SettingsLib/res/values-ka-rGE/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"მეტყველების სინთეზი"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"მეტყველების ტემპი"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"ტექსტის თხრობის სიჩქარე"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"სიმაღლე"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"ენა"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"სისტემის ენის გამოყენება"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"ენა არჩეული არ არის"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"აქტიური. შეეხეთ გადასართავად."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"მიმდინარე სერვისები"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"ამჟამად მოქმედი სერვისების ნახვა და მართვა"</string> - <string name="night_mode_title" msgid="2594133148531256513">"ღამის რეჟიმი"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"გამორთულია"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"ყოველთვის ჩართული"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"ავტომატური"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"მრავალპროც. WebView-ს ჩართვა"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"WebView ვიზუალიზატორების იზოლირებულ პროცესში გაშვება."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView რეალიზაცია"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView რეალიზაციის დაყენება"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"არჩეული WebView რეალიზაცია გათიშულია და გამოყენებამდე უნდა ჩაირთოს. გსურთ მისი ჩართვა?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"არ იტენება"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"არ იტენება"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"ბატარეა დატენილია"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"გათიშულია ადმინისტრატორის მიერ"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"იმართება ადმინისტრატორის მიერ"</string> <string name="home" msgid="8263346537524314127">"მთავარი"</string> <string name="charge_length_format" msgid="8978516217024434156">"გავიდა <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"დარჩენილია <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-kk-rKZ/strings.xml b/packages/SettingsLib/res/values-kk-rKZ/strings.xml index fb5ab126ff8e..11d0cdaf7dc7 100644 --- a/packages/SettingsLib/res/values-kk-rKZ/strings.xml +++ b/packages/SettingsLib/res/values-kk-rKZ/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Мәтінді тілге айналдыру"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Сөйлеу жылдамдығы"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Мәтіннің оқылу жылдамдығы"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Дауыс жиілігі"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Тіл"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Жүйелік тілді пайдалану"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Тіл таңдалған жоқ"</string> @@ -248,9 +251,9 @@ <string name="force_allow_on_external" msgid="3215759785081916381">"Сыртқыда қолданбаларға мәжбүрлеп рұқсат ету"</string> <string name="force_allow_on_external_summary" msgid="3191952505860343233">"Манифест мәндеріне қарамастан кез келген қолданбаны сыртқы жадқа жазуға жарамды етеді"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"Әрекеттерді өлшемін өзгертуге болатын етуге мәжбүрлеу"</string> - <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Манифест мәндеріне қарамастан барлық әрекеттерді бірнеше терезе үшін өлшемін өзгертуге болатын етеді."</string> + <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Манифест мәндеріне қарамастан бірнеше терезе режимінде барлық әрекеттердің өлшемін өзгертуге рұқсат беру."</string> <string name="enable_freeform_support" msgid="1461893351278940416">"Еркін пішіндегі терезелерді қосу"</string> - <string name="enable_freeform_support_summary" msgid="8247310463288834487">"Эксперименттік еркін терезелерді қолдауды қосу."</string> + <string name="enable_freeform_support_summary" msgid="8247310463288834487">"Еркін пішінді терезелерді құру эксперименттік функиясын қосу."</string> <string name="local_backup_password_title" msgid="3860471654439418822">"Компьютер үстелінің сақтық көшірмесі"</string> <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Жұмыс үстелінің сақтық көшірмелері қазір қорғалмаған"</string> <string name="local_backup_password_summary_change" msgid="5376206246809190364">"Үстелдік компьютердің толық сақтық көшірмелерінің кілтсөзін өзгерту немесе жою үшін түртіңіз"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Белсенді. Ауыстырып қосу үшін түртіңіз."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Қосылып тұрған қызметтер"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Ағымдағы қосылып тұрған қызметтерді көру және басқару"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Түнгі режим"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Өшірілген"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Әрқашан қосулы"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Aвтоматты"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Бірнеше процесті веб-көріністі қосу"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Веб-көрініс бейнелеушілерін оқшауланған процесте іске қосу."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView ендіру"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView ендіруін орнату"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Таңдалған веб-көріністі енгізу өшірілген және пайдалану үшін оны қосу керек. Оны қосу керек пе?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Зарядталу орындалып жатқан жоқ"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Зарядталып тұрған жоқ"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Толық"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Әкімші өшірген"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Әкімші басқарады"</string> <string name="home" msgid="8263346537524314127">"Негізгі бет"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> бұрын"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> қалды"</string> diff --git a/packages/SettingsLib/res/values-km-rKH/strings.xml b/packages/SettingsLib/res/values-km-rKH/strings.xml index c1946c4fd6ca..0f7a32ab2e9d 100644 --- a/packages/SettingsLib/res/values-km-rKH/strings.xml +++ b/packages/SettingsLib/res/values-km-rKH/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"លទ្ធផលអត្ថបទទៅការនិយាយ"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"អត្រានិយាយ"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"ល្បឿនពេលអានអត្ថបទ"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"ឡើង-ចុះ"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"ភាសា"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"ប្រើភាសាប្រព័ន្ធ"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"មិនបានជ្រើសភាសា"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"សកម្ម។ ប៉ះដើម្បីបិទ/បើក។"</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"សេវាកម្មកំពុងដំណើរការ"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"មើល និងគ្រប់គ្រងសេវាកម្មកំពុងដំណើរការបច្ចុប្បន្ន"</string> - <string name="night_mode_title" msgid="2594133148531256513">"របៀបពេលយប់"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"បានបិទ"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"បើកជានិច្ច"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"ស្វ័យប្រវត្តិ"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"បើកដំណើរការ WebView ដែលមានអង្គដំណើរការច្រើន"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"ដំណើរការកម្មវិធីបំលែង WebView ក្នុងដំណើរការដាច់ដោយឡែក"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"ការប្រតិបត្តិ WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"កំណត់ការប្រតិបត្តិ WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"ការប្រតិបត្តិការ WebView ដែលបានជ្រើសត្រូវបានបិទដំណើរការ ប៉ុន្តែអ្នកត្រូវបើកដំណើរការវាដើម្បីប្រើ តើអ្នកចង់បើកដំណើរការវាដែរឬទេ?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"មិនកំពុងបញ្ចូលថ្ម"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"មិនបញ្ចូលថ្ម"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"ពេញ"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"បានបិទដំណើរការដោយអ្នកគ្រប់គ្រង"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"គ្រប់គ្រងដោយអ្នកគ្រប់គ្រង"</string> <string name="home" msgid="8263346537524314127">"ដើម"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> មុន"</string> <string name="remaining_length_format" msgid="7886337596669190587">"នៅសល់ <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-kn-rIN/strings.xml b/packages/SettingsLib/res/values-kn-rIN/strings.xml index a6acd1772684..a72830568b4c 100644 --- a/packages/SettingsLib/res/values-kn-rIN/strings.xml +++ b/packages/SettingsLib/res/values-kn-rIN/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"ಧ್ವನಿಗೆ-ಪಠ್ಯದ ಔಟ್ಪುಟ್"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"ಧ್ವನಿಯ ದರ"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"ಪಠ್ಯವನ್ನು ಹೇಳಿದ ವೇಗ"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"ಪಿಚ್"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"ಭಾಷೆ"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"ಸಿಸ್ಟಂ ಭಾಷೆಯನ್ನು ಬಳಸು"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"ಭಾಷೆಯನ್ನು ಆಯ್ಕೆಮಾಡಲಾಗಿಲ್ಲ"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"ಸಕ್ರಿಯ. ಟಾಗಲ್ ಮಾಡಲು ಟ್ಯಾಪ್ ಮಾಡಿ."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"ರನ್ ಆಗುತ್ತಿರುವ ಸೇವೆಗಳು"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"ಈಗ ರನ್ ಆಗುತ್ತಿರುವ ಸೇವೆಗಳನ್ನು ವೀಕ್ಷಿಸಿ ಮತ್ತು ನಿಯಂತ್ರಿಸಿ"</string> - <string name="night_mode_title" msgid="2594133148531256513">"ರಾತ್ರಿ ಮೋಡ್"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"ಯಾವಾಗಲೂ ಆನ್"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"ಸ್ವಯಂಚಾಲಿತ"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"ಬಹುಪ್ರಕ್ರಿಯೆ WebView ಅನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"ಪ್ರತ್ಯೇಕಗೊಳಿಸಿದ ಪ್ರಕ್ರಿಯೆಯಲ್ಲಿ WebView ರೆಂಡರರ್ ರನ್ ಮಾಡಿ."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView ಅನುಷ್ಠಾನಗೊಳಿಸುವಿಕೆ"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView ಅನುಷ್ಠಾನಗೊಳಿಸುವಿಕೆಯನ್ನು ಹೊಂದಿಸಿ"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"ಆಯ್ಕೆಮಾಡಲಾದ WebView ಅನುಷ್ಠಾನಗೊಳಿಸುವಿಕೆಯನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ ಮತ್ತು ಬಳಸಲು ಸಕ್ರಿಯಗೊಳಿಸಬೇಕಾಗಿದೆ, ಇದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ನೀವು ಬಯಸುತ್ತೀರಾ?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"ಚಾರ್ಜ್ ಆಗುತ್ತಿಲ್ಲ"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"ಚಾರ್ಜ್ ಆಗುತ್ತಿಲ್ಲ"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"ಭರ್ತಿ"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"ನಿರ್ವಾಹಕರಿಂದ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"ನಿರ್ವಾಹಕರ ಮೂಲಕ ನಿಯಂತ್ರಿಸಲಾಗಿದೆ"</string> <string name="home" msgid="8263346537524314127">"ಮುಖಪುಟ"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> ಹಿಂದೆ"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> ಉಳಿದಿದೆ"</string> diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml index c8bb2e6c5d1f..43e3926c52e2 100644 --- a/packages/SettingsLib/res/values-ko/strings.xml +++ b/packages/SettingsLib/res/values-ko/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"TTS 출력"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"말하는 속도"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"텍스트를 읽어주는 속도"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"피치"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"언어"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"시스템 언어 사용"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"언어가 선택되지 않음"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"활성화되었습니다. 전환하려면 탭하세요."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"실행 중인 서비스"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"현재 실행 중인 서비스 보기 및 제어"</string> - <string name="night_mode_title" msgid="2594133148531256513">"야간 모드"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"사용 안함"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"항상 사용"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"자동"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"멀티 프로세스 WebView 사용"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"단독 프로세스 내에서 WebView 렌더러를 실행합니다."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView 구현"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView 구현 설정"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"선택한 WebView 구현이 사용 중지되어 있습니다. 사용하려면 사용 설정해야 합니다. 사용 설정하시겠습니까?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"충전 안함"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"충전 안함"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"충전 완료"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"관리자가 사용 중지함"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"관리자가 제어"</string> <string name="home" msgid="8263346537524314127">"홈"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> 전"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> 남음"</string> diff --git a/packages/SettingsLib/res/values-ky-rKG/strings.xml b/packages/SettingsLib/res/values-ky-rKG/strings.xml index 6f158c00be33..e2c7f7829f86 100644 --- a/packages/SettingsLib/res/values-ky-rKG/strings.xml +++ b/packages/SettingsLib/res/values-ky-rKG/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Текстти-оозекилөө"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Кеп ылдамдыгы"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Текст айтылчу ылдамдык"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Негизги тон"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Тил"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Тутум тилин колдонуу"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Тил тандалган жок"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Иштеп турат. Которуштуруу үчүн таптап коюңуз."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Иштеп жаткан кызматтар"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Учурда иштеп жаткан кызматтарды көрүү жана көзөмөлдөө"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Түнкү режим"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Өчүрүлгөн"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Ар дайым күйгүзүлгөн"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Автоматтык"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Көп процесстүү WebView иштт"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"WebView рендерерлерин корголгон процессте иштетүү."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView аткарылышы"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView аткарылышын коюу"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"WebView кызматын пайдалануу үчүн аны иштетүү керек. Иштетесизби?"</string> @@ -300,7 +296,7 @@ <string name="accessibility_display_daltonizer_preference_title" msgid="5800761362678707872">"Түсүн тууралоо"</string> <string name="accessibility_display_daltonizer_preference_subtitle" msgid="3484969015295282911">"Бул сынамык мүмкүнчүлүк болгондуктан, иштин майнаптуулугуна таасир этиши мүмкүн."</string> <string name="daltonizer_type_overridden" msgid="3116947244410245916">"<xliff:g id="TITLE">%1$s</xliff:g> менен алмаштырылган"</string> - <string name="power_remaining_duration_only" msgid="4400068916452346544">"<xliff:g id="TIME">%1$s</xliff:g>-чакты калды"</string> + <string name="power_remaining_duration_only" msgid="4400068916452346544">"Болжол менен <xliff:g id="TIME">%1$s</xliff:g> калды"</string> <string name="power_discharging_duration" msgid="1605929174734600590">"<xliff:g id="LEVEL">%1$s</xliff:g> - болжол менен <xliff:g id="TIME">%2$s</xliff:g> саат калды"</string> <string name="power_charging" msgid="1779532561355864267">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="STATE">%2$s</xliff:g>"</string> <string name="power_charging_duration" msgid="2853265177761520490">"<xliff:g id="LEVEL">%1$s</xliff:g> - <xliff:g id="TIME">%2$s</xliff:g> толгончо"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Кубат алган жок"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Кубатталган жок"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Толук"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Администратор өчүрүп койгон"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Администратор тарабынан көзөмөлдөнөт"</string> <string name="home" msgid="8263346537524314127">"Башкы бет"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> мурун"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> калды"</string> diff --git a/packages/SettingsLib/res/values-lo-rLA/strings.xml b/packages/SettingsLib/res/values-lo-rLA/strings.xml index 766421233ede..9d5c60a30d8a 100644 --- a/packages/SettingsLib/res/values-lo-rLA/strings.xml +++ b/packages/SettingsLib/res/values-lo-rLA/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"ການປ່ຽນຂໍ້ຄວາມເປັນສຽງ"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"ອັດຕາການເວົ້າ"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"ຄວາມໄວໃນການເວົ້າຂໍ້ຄວາມ"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"ໂທນສຽງ"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"ພາສາ"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"ໃຊ້ພາສາຂອງລະບົບ"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"ບໍ່ໄດ້ເລືອກພາສາ"</string> @@ -248,7 +251,7 @@ <string name="force_allow_on_external" msgid="3215759785081916381">"ບັງຄັບອະນຸຍາດແອັບຢູ່ພາຍນອກ"</string> <string name="force_allow_on_external_summary" msgid="3191952505860343233">"ເຮັດໃຫ້ທຸກແອັບມີສິດໄດ້ຮັບການຂຽນໃສ່ບ່ອນຈັດເກັບພາຍນອກ, ໂດຍບໍ່ຄຳນຶງເຖິງຄ່າທີ່ຈະແຈ້ງ"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"ບັງຄັງໃຫ້ກິດຈະກຳປ່ຽນຂະໜາດໄດ້"</string> - <string name="force_resizable_activities_summary" msgid="6667493494706124459">"ເຮັດໃຫ້ທຸກກິດຈະກຳສາມາດປັບຂະໜາດໄດ້ສຳລັບຫຼາຍໜ້າຈໍ, ໂດຍບໍ່ຄຳນຶງເຖິງຄ່າທີ່ຈະແຈ້ງ."</string> + <string name="force_resizable_activities_summary" msgid="6667493494706124459">"ເຮັດໃຫ້ທຸກກິດຈະກຳສາມາດປັບຂະໜາດໄດ້ສຳລັບຫຼາຍໜ້າຈໍ, ໂດຍບໍ່ຄຳນຶງເຖິງຄ່າ manifest."</string> <string name="enable_freeform_support" msgid="1461893351278940416">"ເປີດໃຊ້ໜ້າຕ່າງຮູບແບບອິດສະຫຼະ"</string> <string name="enable_freeform_support_summary" msgid="8247310463288834487">"ເປີດໃຊ້ການຮອງຮັບໜ້າຈໍຮູບແບບອິດສະຫຼະແບບທົດລອງ."</string> <string name="local_backup_password_title" msgid="3860471654439418822">"ລະຫັດຜ່ານການສຳຮອງຂໍ້ມູນເດັກສະທັອບ"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"ນຳໃຊ້ຢູ່. ແຕະເພື່ອສັບປ່ຽນ."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"ບໍລິການທີ່ເຮັດວຽກຢູ່"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"ເບິ່ງ ແລະຈັດການບໍລິການທີ່ກຳລັງເຮັດວຽກຢູ່ໃນປັດຈຸບັນ"</string> - <string name="night_mode_title" msgid="2594133148531256513">"ໂໝດກາງຄືນ"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"ປິດໃຊ້ງານແລ້ວ"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"ເປີດຕະຫຼອດ"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"ອັດຕະໂນມັດ"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"ອະນຸຍາດໃຫ້ມີໂປຣເຊສ WebView ຫຼາຍອັນໄດ້"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"ເປີດໃຊ້ຕົວປະມວນ WebView ໃນໂປຣເຊສທີ່ແຍກຈາກກັນໄດ້."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"ການຈັດຕັ້ງປະຕິບັດ WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"ຕັ້ງການຈັດຕັ້ງປະຕິບັດ WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"ການຈັດຕັ້ງປະຕິບັດ WebView ທີ່ເລືອກຖືກປິດນຳໃຊ້, ແລະຕ້ອງຖືກເປີດນຳໃຊ້, ທ່ານຕ້ອງການເປີດນຳໃຊ້ມັນບໍ?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"ບໍ່ໄດ້ສາກໄຟ"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"ບໍ່ໄດ້ສາກໄຟ"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"ເຕັມ"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"ຖືກປິດໃຊ້ໂດຍຜູ້ເບິ່ງແຍງລະບົບ"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"ຄວບຄຸມໂດຍຜູ້ເບິ່ງແຍງ"</string> <string name="home" msgid="8263346537524314127">"ໜ້າຫຼັກ"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> ກ່ອນນີ້"</string> <string name="remaining_length_format" msgid="7886337596669190587">"ຍັງເຫຼືອ <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml index c730dc07ae37..8bd4e43aa94e 100644 --- a/packages/SettingsLib/res/values-lt/strings.xml +++ b/packages/SettingsLib/res/values-lt/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"„Teksto į kalbą“ išvestis"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Kalbėjimo greitis"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Greitis, kuriuo sakomas tekstas"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Garso aukštis"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Kalba"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Naudoti sistemos kalbą"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Kalba nepasirinkta"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktyvi. Palieskite, kad perjungtumėte."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Vykdomos paslaugos"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Žiūrėti ir valdyti dabar vykdomas paslaugas"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Naktinis režimas"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Išjungta"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Visada įjungta"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatinė"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Įgal. kelių procesų „WebView“"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Paleisti „WebView“ pateikimo priemones vienam procesui."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"„WebView“ diegimas"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"„WebView“ diegimo nustatymas"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Pasirinktas „WebView“ diegimas išjungtas ir jį būtina įgalinti, kad būtų galima naudoti. Ar norite jį įgalinti?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Nekraunama"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Nekraunama"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Visiškai įkrautas"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Išjungė administratorius"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Valdo administratorius"</string> <string name="home" msgid="8263346537524314127">"Pagrindinis ekranas"</string> <string name="charge_length_format" msgid="8978516217024434156">"Prieš <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Liko <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml index 65e4cff6aca1..42bce6b3fc8a 100644 --- a/packages/SettingsLib/res/values-lv/strings.xml +++ b/packages/SettingsLib/res/values-lv/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Teksta-runas izvade"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Runas ātrums"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Teksta ierunāšanas ātrums"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tonis"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Valoda"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Izmantot sistēmas valodu"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Nav atlasīta valoda."</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktīva. Pieskarieties, lai pārslēgtu."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Aktīvie pakalpojumi"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Pašreiz darbojošos pakalpojumu skatīšana un vadība"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Nakts režīms"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Atspējots"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Vienmēr ieslēgts"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automātiski"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Iespējot vairākprocesu WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Atsevišķā procesā tiek palaisti WebView renderētāji."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView ieviešana"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Iestatīt WebView ieviešanu"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Izvēlētā WebView ieviešana ir atspējota, un tā ir jāiespējo, lai to varētu izmantot. Vai vēlaties to iespējot?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Nenotiek uzlāde"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Nenotiek uzlāde"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Pilns"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Atspējojis administrators"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Kontrolē administrators"</string> <string name="home" msgid="8263346537524314127">"Sākums"</string> <string name="charge_length_format" msgid="8978516217024434156">"Pirms šāda laika: <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Atlikušais laiks: <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-mk-rMK/strings.xml b/packages/SettingsLib/res/values-mk-rMK/strings.xml index 4576f3a3afc4..16b63327d529 100644 --- a/packages/SettingsLib/res/values-mk-rMK/strings.xml +++ b/packages/SettingsLib/res/values-mk-rMK/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Излез текст-во-говор"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Брзина на говор"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Брзина со која се кажува текстот"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Интензитет"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Јазик"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Користете системски јазик"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Јазикот не е избран"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Активно. Допрете за да смените."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Активни услуги"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Погледнете и контролирајте услуги што се моментално активни"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Ноќен режим"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Оневозможено"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Секогаш вклучено"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Автоматски"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Овозможи мултипроцесен WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Активирајте ги WebView-прикажувачите во изолиран процес."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Воведување WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Поставете воведување WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Избраната примена на WebView е оневозможена, а за да се користи, мора да се овозможи. Дали сакате да ја овозможите?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Не се полни"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Не се полни"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Целосна"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Оневозможено од администраторот"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Контролирано од администраторот"</string> <string name="home" msgid="8263346537524314127">"Почетна страница"</string> <string name="charge_length_format" msgid="8978516217024434156">"Пред <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Преостанаа <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-ml-rIN/strings.xml b/packages/SettingsLib/res/values-ml-rIN/strings.xml index 180d615cfe3f..9e606151a658 100644 --- a/packages/SettingsLib/res/values-ml-rIN/strings.xml +++ b/packages/SettingsLib/res/values-ml-rIN/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"ടെക്സ്റ്റ്-ടു-സ്പീച്ച് ഔട്ട്പുട്ട്"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"വായന നിരക്ക്"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"വാചകം പറയുന്ന വേഗത"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"പിച്ച്"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"ഭാഷ"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"സിസ്റ്റം ഭാഷ ഉപയോഗിക്കുക"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"ഭാഷ തിരഞ്ഞെടുത്തിട്ടില്ല"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"സജീവം. മാറ്റുന്നതിന് ടാപ്പുചെയ്യുക."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"പ്രവർത്തിക്കുന്ന സേവനങ്ങൾ"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"നിലവിൽ പ്രവർത്തിക്കുന്ന സേവങ്ങൾ കാണുക, നിയന്ത്രിക്കുക"</string> - <string name="night_mode_title" msgid="2594133148531256513">"നൈറ്റ് മോഡ്"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"പ്രവർത്തനരഹിതമാക്കി"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"എല്ലായ്പ്പോഴും ഓണാണ്"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"ഓട്ടോമാറ്റിക്"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"മൾട്ടിപ്രോസസ്സ് WebView പ്രവർത്തനക്ഷമമാക്കൂ"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"ഒറ്റപ്പെട്ടൊരു പ്രോസസ്സിൽ WebView റെൻഡററുകൾ റൺ ചെയ്യുക."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView നടപ്പാക്കൽ"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView നടപ്പാക്കൽ സജ്ജമാക്കുക"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"തിരഞ്ഞെടുത്ത WebView നടപ്പാക്കൽ പ്രവർത്തനരഹിതമാക്കി, ഉപയോഗിക്കുന്നതിന് ഇത് പ്രവർത്തനക്ഷമമാക്കണം, പ്രവർത്തനക്ഷമമാക്കാൻ ആഗ്രഹിക്കുന്നുണ്ടോ?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"ചാർജ്ജുചെയ്യുന്നില്ല"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"ചാർജ്ജുചെയ്യുന്നില്ല"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"നിറഞ്ഞു"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"അഡ്മിനിസ്ട്രേറ്റർ പ്രവർത്തനരഹിതമാക്കി"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"അഡ്മിൻ നിയന്ത്രിക്കുന്നത്"</string> <string name="home" msgid="8263346537524314127">"ഹോം"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> മുമ്പ്"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> ശേഷിക്കുന്നു"</string> diff --git a/packages/SettingsLib/res/values-mn-rMN/strings.xml b/packages/SettingsLib/res/values-mn-rMN/strings.xml index 8bdd8801af0d..5957a11c9c16 100644 --- a/packages/SettingsLib/res/values-mn-rMN/strings.xml +++ b/packages/SettingsLib/res/values-mn-rMN/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Текст-яриа гаргах"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Ярианы түвшин"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Текстийг унших хурд"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Авиа тон"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Хэл"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Системийн хэлийг ашиглах"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Хэл сонгогдоогүй байна"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Идэвхтэй байна. Унтраах/асаахын тулд дарна уу."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Ажиллаж байгаа үйлчилгээнүүд"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Одоо ажиллаж байгаа үйлчилгээнүүдийг харах болон хянах"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Шөнийн горим"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Идэвхгүй"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Байнга асаалттай"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Автоматаар"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"WebView-н олон боловсруулалтыг идэвхжүүлэх"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"WebView хөрвүүлэгчийг тусдаа боловсруулалтаар ажиллуулна уу."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView хэрэгжилт"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView хэрэгжилтийг тохируулах"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Сонгосон WebView хэрэгжүүлэлтийг идэвхгүй болгосон бөгөөд хэрэглэхийн тулд заавал идэвхжүүлэх шаардлагатай. Үүнийг идэвхжүүлэх үү?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Цэнэглэхгүй байна"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Цэнэглэхгүй байна"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Дүүрэн"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Админ идэвхгүй болгосон"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Админ удирдсан"</string> <string name="home" msgid="8263346537524314127">"Нүүр"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> өмнө"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> үлдсэн"</string> diff --git a/packages/SettingsLib/res/values-mr-rIN/strings.xml b/packages/SettingsLib/res/values-mr-rIN/strings.xml index 92247f5fe1fb..04d7f4244d75 100644 --- a/packages/SettingsLib/res/values-mr-rIN/strings.xml +++ b/packages/SettingsLib/res/values-mr-rIN/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"टेक्स्ट-टू-स्पीच आउटपुट"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"बोलण्याचा रेट"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"ज्या गतीने मजकूर बोलला जातो ती"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"पिच"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"भाषा"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"सिस्टम भाषा वापरा"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"भाषा निवडलेली नाही"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"सक्रिय. टॉगल करण्यासाठी टॅप करा."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"चालू सेवा"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"सध्या चालत असलेल्या सेवा पहा आणि नियंत्रित करा"</string> - <string name="night_mode_title" msgid="2594133148531256513">"रात्र मोड"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"अक्षम केले"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"नेहमी चालू"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"स्वयंचलित"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"एकाधिक प्रक्रिया WebView सक्षम करा"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"एक वेगळ्या प्रक्रियेत वेब दृश्य प्रस्तुतकर्ते चालवा."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"वेबदृश्य अंमलबजावणी"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"वेबदृश्य अंमलबजावणी सेट करा"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"निवडलेली WebView अंमलबजावणी अक्षम आहे आणि वापरण्यास सक्षम असणे आवश्यक आहे, आपण ती सक्षम करू इच्छिता?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"चार्ज होत नाही"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"चार्ज होत नाही"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"पूर्ण"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"प्रशासकाद्वारे अक्षम केलेले"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"प्रशासकाने नियंत्रित केलेले"</string> <string name="home" msgid="8263346537524314127">"मुख्यपृष्ठ"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> पूर्वी"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> शिल्लक"</string> diff --git a/packages/SettingsLib/res/values-ms-rMY/strings.xml b/packages/SettingsLib/res/values-ms-rMY/strings.xml index 45f5c6f20682..5fc87f0e28b9 100644 --- a/packages/SettingsLib/res/values-ms-rMY/strings.xml +++ b/packages/SettingsLib/res/values-ms-rMY/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Output teks ke pertuturan"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Kadar pertuturan"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Kelajuan pertuturan teks"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Pic"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Bahasa"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Gunakan bahasa sistem"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Bahasa tidak dipilih"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktif. Ketik untuk menogol."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Perkhidmatan dijalankan"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Lihat dan kawal perkhidmatan yang sedang dijalankan"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Mod malam"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Dilumpuhkan"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Sentiasa hidup"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatik"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Dayakan WebView berbilang proses"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Jalankan pemapar WebView dalam proses terpencil."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Pelaksanaan WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Tetapkan pelaksanaan WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Pelaksanaan WebView pilihan telah dilumpuhkan dan mesti didayakan untuk digunakan, adakah anda mahu mendayakannya?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Tidak mengecas"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Tidak mengecas"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Penuh"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Dilumpuhkan oleh pentadbir"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Dikawal oleh pentadbir"</string> <string name="home" msgid="8263346537524314127">"Skrin Utama"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> yang lalu"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> lagi"</string> diff --git a/packages/SettingsLib/res/values-my-rMM/strings.xml b/packages/SettingsLib/res/values-my-rMM/strings.xml index 9d722dbcae23..91cc7fe48d72 100644 --- a/packages/SettingsLib/res/values-my-rMM/strings.xml +++ b/packages/SettingsLib/res/values-my-rMM/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"စာသားမှ အသံထွက်စေခြင်း"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"စကားပြောနှုန်း"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"စာတမ်းအားပြောဆိုသော အမြန်နှုန်း"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"အသံအနိမ့်အမြင့်"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"ဘာသာစကား"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"စနစ်၏ ဘာသာစကားကို အသုံးပြုရန်"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"ဘာသာစကား မရွေးချယ်ထားပါ။"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"ပွင့်နေသည်။ ပြောင်းရန်တို့ပါ။"</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"အလုပ်လုပ်နေသောဝန်ဆောင်မှုများ"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"ယခုအလုပ်လုပ်နေသောဝန်ဆောင်မှုကို ကြည့်ခြင်းနှင့် ထိန်းသိမ်းခြင်းအား ပြုလုပ်မည်လား?"</string> - <string name="night_mode_title" msgid="2594133148531256513">"ညသုံး မုဒ်"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"ပိတ်ထား"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"အမြဲတမ်း ဖွင့်ထားရန်"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"အလိုအလျောက်"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"လုပ်ငန်းဖြစ်စဉ်များစွာကြည့်နိုင်သည့် ဝဘ်မြင်ကွင်းကိုဖွင့်ပါ"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"လုပ်ငန်းဖြစ်စဉ်တစ်ခုတည်းအတွက် ဝဘ်မြင်ကွင်း အဖြစ်ပြုလုပ်ခြင်းကို ဖွင့်ပါ။"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView အကောင်အထည်ဖော်မှု"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView အကောင်အထည်ဖော်မှု သတ်မှတ်ပါ"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"ရွေးချယ်ထားသည့် WebView လုပ်ဆောင်ခြင်းကို ပိတ်ထားသည်ပြီး အသုံးပြုရန်အတွက် ဖွင့်ရမည်၊ ဖွင့်လိုပါသလား။"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"အားသွင်းမနေပါ"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"အားသွင်းမနေပါ"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"အပြည့်"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"စီမံခန့်ခွဲသူမှ ပိတ်ထားသည်"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"စီမံခန့်ခွဲသူမှ ထိန်းချုပ်ပါသည်"</string> <string name="home" msgid="8263346537524314127">"ပင်မ"</string> <string name="charge_length_format" msgid="8978516217024434156">"ပြီးခဲ့သည့် <xliff:g id="ID_1">%1$s</xliff:g> က"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> ကျန်ပါသည်"</string> diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml index ff15482b7ee2..d25df3f126be 100644 --- a/packages/SettingsLib/res/values-nb/strings.xml +++ b/packages/SettingsLib/res/values-nb/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Tekst-til-tale"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Talehastighet"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Hvor raskt teksten leses"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Stemmeleie"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Språk"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Bruk systemspråk"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Språk er ikke valgt"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktiv. Trykk for å slå av/på."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Aktive tjenester"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Se og kontrollér tjenester som kjører for øyeblikket"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Nattmodus"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Slått av"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Alltid på"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatisk"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Slå på WebView for flere prosesser"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Kjør WebView-gjengivelser i en isolert prosess."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView-implementering"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Angi WebView-implementering"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Den valgte implementeringen av nettvisningen er slått av – den må slås på for å brukes. Vil du slå den på?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Lader ikke"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Lader ikke"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Fullt"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Avslått av administratoren"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Kontrollert av administratoren"</string> <string name="home" msgid="8263346537524314127">"Startside"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> siden"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> gjenstår"</string> diff --git a/packages/SettingsLib/res/values-ne-rNP/strings.xml b/packages/SettingsLib/res/values-ne-rNP/strings.xml index f0cfdab27ada..4ade9972609a 100644 --- a/packages/SettingsLib/res/values-ne-rNP/strings.xml +++ b/packages/SettingsLib/res/values-ne-rNP/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"पाठ-बाट-वाणी उत्पादन"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"वाणी दर"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"पाठ वाचन हुने गति"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"पिच"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"भाषा"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"प्रणाली भाषा प्रयोग गर्नुहोस्"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"भाषा चयन गरिएको छैन"</string> @@ -248,7 +251,7 @@ <string name="force_allow_on_external" msgid="3215759785081916381">"बाह्यमा बल प्रयोगको अनुमति प्राप्त अनुप्रयोगहरू"</string> <string name="force_allow_on_external_summary" msgid="3191952505860343233">"म्यानिफेेस्टको उपेक्षा गरी, कुनै पनि अनुप्रयोगलाई बाह्य भण्डारणमा लेख्न योग्य बनाउँछ"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"गतिविधिहरू रिसाइज गर्नको लागि बाध्य गर्नुहोस्"</string> - <string name="force_resizable_activities_summary" msgid="6667493494706124459">"म्यानिफेेस्ट मानहरूको ख्याल नगरी, बहु-विन्डोको लागि सबै रिसाइज गर्न सकिने गतिविधिहरू बनाउँछ।"</string> + <string name="force_resizable_activities_summary" msgid="6667493494706124459">"म्यानिफेेस्ट मानहरूको ख्याल नगरी, बहु-विन्डोको लागि सबै रिसाइज गर्न सकिने गतिविधिहरू बनाउनुहोस्।"</string> <string name="enable_freeform_support" msgid="1461893351278940416">"फ्रिफर्म विन्डोहरू सक्रिय गर्नुहोस्"</string> <string name="enable_freeform_support_summary" msgid="8247310463288834487">"प्रयोगात्मक फ्रिफर्म विन्डोहरूका लागि समर्थन सक्रिय गर्नुहोस्।"</string> <string name="local_backup_password_title" msgid="3860471654439418822">"डेस्कटप ब्याकअप पासवर्ड"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"सक्रिय। टगल गर्न ट्याप गर्नुहोस्।"</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"चलिरहेका सेवाहरू"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"हाल चालु भइरहेका सेवाहरू हेर्नुहोस् र नियन्त्रण गर्नुहोस्"</string> - <string name="night_mode_title" msgid="2594133148531256513">"रात्री मोड"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"असक्षम गरियो"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"सधैं खुल्ला"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"स्वचालित"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"मल्टिप्रोसेस वेबभ्यु सक्षम गर्नुहोस्"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"एउटा पृथक प्रक्रियामा वेबभ्यु रेन्डररहरू चलाउनुहोस्।"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView कार्यान्वयन"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView कार्यान्वयन सेट गर्नुहोस्"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"छनौट गरिएको WebView को कार्यान्वयन असक्षम गरिएको छ र प्रयोग गर्नका लागि सक्रिय गर्नुपर्छ, तपाईँ यसलाई सक्रिय गर्न चाहनुहुन्छ?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"चार्ज भइरहेको छैन"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"चार्ज हुँदै छैन"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"पूर्ण"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"प्रशासकद्वारा असक्षम गरिएको"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"व्यवस्थापक द्वारा नियन्त्रित"</string> <string name="home" msgid="8263346537524314127">"गृह"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> पहिले"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> बाँकी"</string> diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml index 0dbf5b9e0783..6432d9eb8b4d 100644 --- a/packages/SettingsLib/res/values-nl/strings.xml +++ b/packages/SettingsLib/res/values-nl/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Spraakuitvoer"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Spreeksnelheid"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Snelheid waarmee de tekst wordt gesproken"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Hoogte"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Taal"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Systeemtaal gebruiken"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Taal niet geselecteerd"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Actief. Tik om te schakelen."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Actieve services"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Services die momenteel actief zijn, weergeven en beheren"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Nachtmodus"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Uitgeschakeld"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Altijd aan"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatisch"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Multiproces-WebView aan"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"WebView-weergaveprogramma\'s uitvoeren in geïsoleerd proces."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView-implementatie"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView-implementatie instellen"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"De gekozen WebView-implementatie is uitgeschakeld en moet worden ingeschakeld voor gebruik. Wil je deze inschakelen?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Wordt niet opgeladen"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Wordt niet opgeladen"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Volledig"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Uitgeschakeld door beheerder"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Ingesteld door beheerder"</string> <string name="home" msgid="8263346537524314127">"Startpagina"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> geleden"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> resterend"</string> diff --git a/packages/SettingsLib/res/values-pa-rIN/strings.xml b/packages/SettingsLib/res/values-pa-rIN/strings.xml index 2f44757b087f..a65ff955222b 100644 --- a/packages/SettingsLib/res/values-pa-rIN/strings.xml +++ b/packages/SettingsLib/res/values-pa-rIN/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"ਟੈਕਸਟ-ਟੂ-ਸਪੀਚ ਆਉਟਪੁਟ"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"ਸਪੀਚ ਰੇਟ"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"ਸਪੀਡ ਜਿਸਤੇ ਟੈਕਸਟ ਬੋਲਿਆ ਜਾਂਦਾ ਹੈ"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"ਪਿਚ"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"ਭਾਸ਼ਾ"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"ਸਿਸਟਮ ਭਾਸ਼ਾ ਵਰਤੋ"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"ਭਾਸ਼ਾ ਨਹੀਂ ਚੁਣੀ"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"ਕਿਰਿਆਸ਼ੀਲ। ਟੌਗਲ ਕਰਨ ਲਈ ਟੈਪ ਕਰੋ।"</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"ਚੱਲ ਰਹੀਆਂ ਸੇਵਾਵਾਂ"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"ਇਸ ਵੇਲੇ ਚੱਲ ਰਹੀਆਂ ਸੇਵਾਵਾਂ ਦੇਖੋ ਅਤੇ ਇਹਨਾਂ ਤੇ ਨਿਯੰਤਰਣ ਪਾਓ"</string> - <string name="night_mode_title" msgid="2594133148531256513">"ਰਾਤ ਮੋਡ"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"ਅਸਮਰੱਥ ਬਣਾਇਆ"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"ਹਮੇਸ਼ਾ ਚਾਲੂ"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"ਆਟੋਮੈਟਿਕ"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"ਬਹੁ-ਮੰਤਵ WebView ਨੂੰ ਯੋਗ ਬਣਾਓ"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"ਕਿਸੇ ਵੱਖ ਕੀਤੀ ਗਈ ਪ੍ਰਕਿਰਿਆ ਵਿੱਚ WebView ਰੈਂਡਰਰਾਂ ਨੂੰ ਚਲਾਓ।"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView ਅਮਲ"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView ਅਮਲ ਸੈੱਟ ਕਰੋ"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"ਚੁਣਿਆ ਗਿਆ WebView ਅਮਲ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ ਹੈ, ਅਤੇ ਵਰਤੋਂ ਕਰਨ ਲਈ ਇਸ ਨੂੰ ਯੋਗ ਬਣਾਇਆ ਜਾਣਾ ਜ਼ਰੂਰੀ ਹੈ, ਕੀ ਤੁਸੀਂ ਇਸ ਨੂੰ ਯੋਗ ਬਣਾਉਣਾ ਚਾਹੁੰਦੇ ਹੋ?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"ਚਾਰਜ ਨਹੀਂ ਹੋ ਰਿਹਾ"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"ਚਾਰਜ ਨਹੀਂ ਹੋ ਰਿਹਾ"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"ਪੂਰੀ"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਅਯੋਗ ਬਣਾਇਆ ਗਿਆ"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"ਪ੍ਰਸ਼ਾਸਕ ਵੱਲੋਂ ਕੰਟਰੋਲ ਕੀਤੀ ਗਈ"</string> <string name="home" msgid="8263346537524314127">"ਮੁੱਖ ਸਕ੍ਰੀਨ"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> ਪਹਿਲਾਂ"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> ਬਾਕੀ"</string> diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml index e30925c9695d..77c08c06ee5e 100644 --- a/packages/SettingsLib/res/values-pl/strings.xml +++ b/packages/SettingsLib/res/values-pl/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Zamiana tekstu na mowę"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Szybkość mowy"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Szybkość czytania tekstu"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tony"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Język"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Użyj języka systemu"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Nie wybrano języka"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktywna. Dotknij, by zmienić."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Uruchomione usługi"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Wyświetl obecnie uruchomione usługi i zarządzaj nimi"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Tryb nocny"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Wyłączone"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Zawsze włączone"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatycznie"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Włącz wieloprocesowy WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Uruchom WebView jako izolowany proces."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Implementacja WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Ustaw implementację WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Wybrana implementacja WebView jest wyłączona. Aby jej używać, musisz ją włączyć. Chcesz to zrobić?"</string> @@ -315,8 +311,8 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Nie podłączony"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Nie podłączony"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Naładowana"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Wyłączone przez administratora"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Kontrolowane przez administratora"</string> <string name="home" msgid="8263346537524314127">"Ekran główny"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> temu"</string> - <string name="remaining_length_format" msgid="7886337596669190587">"Pozostało: <xliff:g id="ID_1">%1$s</xliff:g>"</string> + <string name="remaining_length_format" msgid="7886337596669190587">"Pozostało <xliff:g id="ID_1">%1$s</xliff:g>"</string> </resources> diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml index ec54e4fc5043..37af1c45b977 100644 --- a/packages/SettingsLib/res/values-pt-rBR/strings.xml +++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Conversão de texto em voz"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Taxa de fala"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Velocidade em que o texto é falado"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Frequência do som"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Idioma"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Usar idioma do sistema"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Idioma não selecionado"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Ativo. Tocar para alternar."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Serviços em execução"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Visualizar e controlar os serviços em execução no momento"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Modo noturno"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Desativada"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Sempre ativada"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automático"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Ativar WebView de vários processos"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Executar renderizadores de WebView em um processo isolado."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Implementação do WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Configurar implementação do WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"A implementação do WebView escolhida está desativada e deve ser ativada para ser usada. Deseja ativá-la?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Não está carregando"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Não está carregando"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Cheio"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Desativada pelo administrador"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlada pelo admin"</string> <string name="home" msgid="8263346537524314127">"Início"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> atrás"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> restante(s)"</string> diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml index ab2a5aeac4ab..46e16cebbe46 100644 --- a/packages/SettingsLib/res/values-pt-rPT/strings.xml +++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Saída de texto para voz"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Taxa de voz"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Velocidade a que o texto é falado"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tonalidade"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Idioma"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Utilizar idioma do sistema"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Idioma não selecionado"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Ativo. Toque para ativar/desativar."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Serviços em execução"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Ver e controlar os serviços actualmente em execução"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Modo noturno"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Desativado"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Sempre ativado"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automático"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Ativar WebView multiprocessos"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Executar renderizadores WebView num processo isolado."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Implementação WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Definir implementação WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"A implementação WebView escolhida foi desativada e tem de ser ativada para poder ser utilizada. Pretende ativá-la?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Não está a carregar"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Não está a carregar"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Completo"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Desativado pelo administrador"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlado pelo administrador"</string> <string name="home" msgid="8263346537524314127">"Página inicial"</string> <string name="charge_length_format" msgid="8978516217024434156">"Há <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Resta(m) <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml index ec54e4fc5043..37af1c45b977 100644 --- a/packages/SettingsLib/res/values-pt/strings.xml +++ b/packages/SettingsLib/res/values-pt/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Conversão de texto em voz"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Taxa de fala"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Velocidade em que o texto é falado"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Frequência do som"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Idioma"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Usar idioma do sistema"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Idioma não selecionado"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Ativo. Tocar para alternar."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Serviços em execução"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Visualizar e controlar os serviços em execução no momento"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Modo noturno"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Desativada"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Sempre ativada"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automático"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Ativar WebView de vários processos"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Executar renderizadores de WebView em um processo isolado."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Implementação do WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Configurar implementação do WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"A implementação do WebView escolhida está desativada e deve ser ativada para ser usada. Deseja ativá-la?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Não está carregando"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Não está carregando"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Cheio"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Desativada pelo administrador"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlada pelo admin"</string> <string name="home" msgid="8263346537524314127">"Início"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> atrás"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> restante(s)"</string> diff --git a/packages/SettingsLib/res/values-ro/arrays.xml b/packages/SettingsLib/res/values-ro/arrays.xml index 30d6cf3a7819..1f0e05b1156e 100644 --- a/packages/SettingsLib/res/values-ro/arrays.xml +++ b/packages/SettingsLib/res/values-ro/arrays.xml @@ -125,7 +125,7 @@ <item msgid="3191973083884253830">"Niciuna"</item> <item msgid="9089630089455370183">"Logcat"</item> <item msgid="5397807424362304288">"Systrace (imagini)"</item> - <item msgid="1340692776955662664">"Apelaţi stiva pentru glGetError"</item> + <item msgid="1340692776955662664">"Apelați stiva pentru glGetError"</item> </string-array> <string-array name="show_non_rect_clip_entries"> <item msgid="993742912147090253">"Dezactivat"</item> diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml index 0cfacd7f3c5d..5863c92cc5ca 100644 --- a/packages/SettingsLib/res/values-ro/strings.xml +++ b/packages/SettingsLib/res/values-ro/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Transformare text în vorbire"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Ritmul vorbirii"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Viteza cu care este vorbit textul"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Înălțime"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Limbă"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Utilizați limba sistemului"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Nu ați selectat limba"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Activă. Atingeți pentru a comuta."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Servicii în curs de funcționare"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Vedeți și controlați serviciile care funcționează în prezent"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Modul Noapte"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Dezactivată"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Activată permanent"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automat"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Activați WebView cu mai multe procese"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Rulați programele de redare WebView într-un proces izolat."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Implementare WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Setați implementarea WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Implementarea WebView aleasă este dezactivată. Pentru a fi folosită, trebuie să fie activată. Doriți să o activați?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Nu se încarcă"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Nu încarcă"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Complet"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Dezactivată de administrator"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Controlată de administrator"</string> <string name="home" msgid="8263346537524314127">"Ecranul principal"</string> <string name="charge_length_format" msgid="8978516217024434156">"Acum <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Timp rămas: <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml index 4b3214abfb32..3c2affe150dd 100644 --- a/packages/SettingsLib/res/values-ru/strings.xml +++ b/packages/SettingsLib/res/values-ru/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Синтез речи"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Скорость речи"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Скорость чтения текста"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Тон"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Язык"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Язык системы"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Язык не выбран"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Включено. Нажмите, чтобы отключить."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Работающие приложения"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Просмотр и управление работающими приложениями"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Ночной режим"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Отключено"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Всегда включено"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Автоматическое переключение"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Запуск неск. процессов WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Выполнять обработку WebView как отдельный процесс"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Сервис WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Настройки сервиса WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Чтобы использовать сервис WebView, включите его. Сделать это?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Не заряжается"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Не заряжается"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Батарея заряжена"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Отключено администратором"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Контролируется администратором"</string> <string name="home" msgid="8263346537524314127">"Главная"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> назад"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Осталось <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-si-rLK/strings.xml b/packages/SettingsLib/res/values-si-rLK/strings.xml index 390e218cc61d..be6b6dd9811d 100644 --- a/packages/SettingsLib/res/values-si-rLK/strings.xml +++ b/packages/SettingsLib/res/values-si-rLK/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"පෙළ-සිට-කථන ප්රතිදානය"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"කථන ශීඝ්රතාව"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"පෙළ කථා කරනා වේගය"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"තාරතාව"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"භාෂාව"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"පද්ධති භාෂාව භාවිතා කරන්න"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"භාෂාව තෝරා ගෙන නැත"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"සක්රියයි. ටොගල කිරීමට තට්ටු කරන්න."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"ධාවනය වන සේවා"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"දැනට ධාවනය වන සේවා බලන්න සහ පාලනය කරන්න"</string> - <string name="night_mode_title" msgid="2594133148531256513">"රාත්රී ප්රකාරය"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"අබලයි"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"සැමවිට ක්රියාත්මක"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"ස්වයංක්රීය"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"බහු සැකසීම් WebView සබල කරන්න"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"හුදකලා වූ ක්රියාවලියක WebView විදහා දැක්වීම් ධාවනය කරන්න."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView ක්රියාත්මක කිරීම"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView ක්රියාත්මක කිරීම සකසන්න"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"තෝරන ලද WebView ක්රියාත්මක කිරීම අබල අතර, භාවිත කිරීමට සබල කළ යුතුය, ඔබ එය සබල කිරීමට අදහස් කරන්නේද?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"ආරෝපණය නොවේ"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"ආරෝපණය නොවෙමින්"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"පූර්ණ"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"පරිපාලක විසින් අබල කරන ලදී"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"පරිපාලක විසින් පාලනය කරන ලදී"</string> <string name="home" msgid="8263346537524314127">"මුල් පිටුව"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g>කට පෙර"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g>ක් ඉතිරිය"</string> diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml index 8bf64fa78cf2..5be89eb15007 100644 --- a/packages/SettingsLib/res/values-sk/strings.xml +++ b/packages/SettingsLib/res/values-sk/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Výstup prevodu textu na reč"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Rýchlosť reči"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Rýchlosť hovoreného textu"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Výška"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Jazyk"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Používať jazyk systému"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Nebol vybratý jazyk"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktívne. Prepnite klepnutím."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Spustené služby"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Zobrazenie a ovládanie aktuálne spustených služieb"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Nočný režim"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Vypnuté"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Vždy zapnuté"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatický"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Povoliť viacprocesové moduly WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Spúšťať vykresľovacie moduly WebView v izolovanom procese."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Implementácia komponenta WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Nastavenie implementácie komponenta WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Zvolená implementácia technológie WebView je zakázaná. Ak ju chcete použiť, musíte ju najprv povoliť. Chcete ju povoliť?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Nenabíja sa"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Nenabíja sa"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Nabitá"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Zakázané správcom"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Ovládané správcom"</string> <string name="home" msgid="8263346537524314127">"Domov"</string> <string name="charge_length_format" msgid="8978516217024434156">"pred <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Zostáva <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml index 42e589b6057a..62cd3cefdbcb 100644 --- a/packages/SettingsLib/res/values-sl/strings.xml +++ b/packages/SettingsLib/res/values-sl/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Besedilo v govor"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Hitrost govora"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Hitrost govorjenega besedila"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Višina tona"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Jezik"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Uporabi sistemski jezik"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Jezik ni izbran"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktivno. Dotaknite se za preklop."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Zagnane storitve"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Preglejte in nadzorujte storitve, ki so trenutno zagnane"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Nočni način"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Onemogočeno"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Vedno vklopljeno"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Samodejno"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Omog. splet. pogl. z več proc."</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Izvajanje upodabljalnikov spletnega pogleda v loč. procesu."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Izvedba spletnega pogleda"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Nastavitev izvedbe spletnega pogleda"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Izbrana izvedba spletnega pogleda je onemogočena in jo morate omogočiti, če jo želite uporabljati. Ali jo želite omogočiti?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Se ne polni"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Se ne polni"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Poln"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Onemogočil skrbnik"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Nadzira skrbnik"</string> <string name="home" msgid="8263346537524314127">"Začetni zaslon"</string> <string name="charge_length_format" msgid="8978516217024434156">"Pred toliko časa: <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Še <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-sq-rAL/strings.xml b/packages/SettingsLib/res/values-sq-rAL/strings.xml index 4c77a12497b7..78e63e5996af 100644 --- a/packages/SettingsLib/res/values-sq-rAL/strings.xml +++ b/packages/SettingsLib/res/values-sq-rAL/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Dalja \"tekst-në-ligjërim\""</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Shpejtësia e të folurit"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Shpejtësia me të cilën thuhet teksti"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Tonaliteti"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Gjuha"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Përdor gjuhën e sistemit"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Nuk është përzgjedhur gjuha"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktiv. Trokit për ta ndryshuar."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Shërbimet në ekzekutim"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Shiko dhe kontrollo shërbimet që po ekzekutohen aktualisht"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Modaliteti i natës"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Çaktivizuar"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Gjithmonë aktive"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatike"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Aktivizo WebView të multiprocesit"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Ekzekuto renderizuesit e WebView në një proces të izoluar."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Zbatimi i WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Cakto zbatimin e WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Është çaktivizuar zbatimi i zgjedhur i WebView dhe duhet të aktivizohet për t\'u përdorur, dëshiron ta aktivizosh?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Nuk po ngarkohet"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Nuk po ngarkohet"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"E mbushur"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Çaktivizuar nga administratori"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Kontrolluar nga administratori"</string> <string name="home" msgid="8263346537524314127">"Kreu"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> më parë"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> të mbetura"</string> diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml index 8c4702563f9c..c7b3cbcd7187 100644 --- a/packages/SettingsLib/res/values-sr/strings.xml +++ b/packages/SettingsLib/res/values-sr/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Излаз за претварање текста у говор"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Брзина говора"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Брзина изговарања текста"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Ниво"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Језик"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Користи језик система"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Језик није изабран"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Активна. Додирните да бисте је деактивирали."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Покренуте услуге"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Приказ и контрола тренутно покренутих услуга"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Ноћни режим"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Онемогућено"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Увек укључено"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Аутоматски"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Омогући вишепроцесни WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Покрећите WebView приказиваче у оквиру изолованог процеса."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Примена WebView-а"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Подесите примену WebView-а"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Изабрана примена WebView-а је онемогућена, а мора да буде омогућена ради коришћења. Желите ли да је омогућите?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Не пуни се"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Не пуни се"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Пуно"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Онемогућио је администратор"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Контролише администратор"</string> <string name="home" msgid="8263346537524314127">"Почетни"</string> <string name="charge_length_format" msgid="8978516217024434156">"Пре <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Још <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml index d25f9f55acb2..09baf91bacb8 100644 --- a/packages/SettingsLib/res/values-sv/strings.xml +++ b/packages/SettingsLib/res/values-sv/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Text-till-tal"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Talhastighet"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Talhastighet för texten"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Ton"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Språk"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Använd systemspråk"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Inget språk valt"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktiv. Tryck om du vill inaktivera."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Aktiva tjänster"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Visa och styr aktiva tjänster"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Nattläge"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Inaktiverad"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Alltid på"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Automatiskt"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Aktivera WebView-multibearb."</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Kör WebView-renderare i en isolerad bearbetning."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView-implementering"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Ange WebView-implementering"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Den valda WebView-implementeringen har inaktiverats och måste aktiveras om du ska kunna använda den. Vill du aktivera den?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Laddar inte"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Laddar inte"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Fullt"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Har inaktiverats av administratören"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Strys av administratören"</string> <string name="home" msgid="8263346537524314127">"Startsida"</string> <string name="charge_length_format" msgid="8978516217024434156">"för <xliff:g id="ID_1">%1$s</xliff:g> sedan"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> kvar"</string> diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml index 3f1d26af6f51..17ec610dc6aa 100644 --- a/packages/SettingsLib/res/values-sw/strings.xml +++ b/packages/SettingsLib/res/values-sw/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Kubadilisha maandishi hadi usemi"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Kiwango cha usemaji"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Kasi ya kutamkwa kwa maneno"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Giza"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Lugha"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Tumia lugha ya mfumo"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Lugha haijachaguliwa"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Inatumika. Gonga ili ugeuze."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Huduma zinazoendeshwa"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Onyesha na dhibiti huduma zinazoendeshwa kwa sasa"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Hali ya usiku"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Imezimwa"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Imewashwa kila wakati"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Otomatiki"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Washa WebView ya michakato mingi"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Tekeleza vitoaji huduma vya WebView katika mchakato mahususi."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Utekelezaji wa WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Weka utekelezaji wa WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Kipengee ulichochagua cha utekelezaji wa WebView kimezimwa. Ni lazima ukiwashe ili kitumike. Ungependa kukiwasha?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Haichaji"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Haichaji"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Imejaa"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Msimamizi amezima mapendeleo ya mipangilio"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Imedhibitiwa na msimamizi"</string> <string name="home" msgid="8263346537524314127">"Mwanzo"</string> <string name="charge_length_format" msgid="8978516217024434156">"Zimepita <xliff:g id="ID_1">%1$s</xliff:g>"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Zimesalia <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-ta-rIN/strings.xml b/packages/SettingsLib/res/values-ta-rIN/strings.xml index f06b0f9a24b0..568c11d5a032 100644 --- a/packages/SettingsLib/res/values-ta-rIN/strings.xml +++ b/packages/SettingsLib/res/values-ta-rIN/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"உரையிலிருந்து பேச்சாக மாற்றுதல்"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"பேச்சு வீதம்"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"பேசப்படும் உரையின் வேகம்"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"ஒலித்திறன்"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"மொழி"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"முறைமையின் மொழியைப் பயன்படுத்து"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"மொழி தேர்ந்தெடுக்கப்படவில்லை"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"செயலில் உள்ளது. மாற்ற, தட்டவும்."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"இயங்கும் சேவைகள்"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"தற்போது இயக்கத்தில் இருக்கும் சேவைகளைப் பார்த்து கட்டுப்படுத்து"</string> - <string name="night_mode_title" msgid="2594133148531256513">"இரவு பயன்முறை"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"முடக்கப்பட்டது"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"எப்போதும் இயக்கத்தில் வை"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"தானியங்கு"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"பல செயல்முறை WebViewஐ இயக்கு"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"தனிப்படுத்தப்பட்ட செயல்முறையில் WebView ரெண்டரர்களை இயக்கு."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView செயல்படுத்தல்"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView செயல்படுத்தலை அமை"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"தேர்வுசெய்த WebView செயல்படுத்தல் முடக்கப்பட்டுள்ளது, பயன்படுத்த வேண்டுமெனில் அதைக் கண்டிப்பாக இயக்க வேண்டும். இயக்க விரும்புகிறீர்களா?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"சார்ஜ் செய்யப்படவில்லை"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"சார்ஜ் ஏறவில்லை"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"முழுமை"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"நிர்வாகி முடக்கியுள்ளார்"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"நிர்வாகி கட்டுப்படுத்துகிறார்"</string> <string name="home" msgid="8263346537524314127">"முகப்பு"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> முன்"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> உள்ளது"</string> diff --git a/packages/SettingsLib/res/values-te-rIN/strings.xml b/packages/SettingsLib/res/values-te-rIN/strings.xml index e6d594b489c9..e1822bc1602c 100644 --- a/packages/SettingsLib/res/values-te-rIN/strings.xml +++ b/packages/SettingsLib/res/values-te-rIN/strings.xml @@ -101,6 +101,8 @@ <string name="tts_settings_title" msgid="1237820681016639683">"వచనం నుండి ప్రసంగం అవుట్పుట్"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"ప్రసంగం రేట్"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"వచనాన్ని చదివి వినిపించాల్సిన వేగం"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"పిచ్"</string> + <string name="tts_default_pitch_summary" msgid="1944885882882650009">"సమన్వయం చేసిన ప్రసంగం యొక్క టోన్ను ప్రభావితం చేస్తుంది"</string> <string name="tts_default_lang_title" msgid="8018087612299820556">"భాష"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"సిస్టమ్ భాషను ఉపయోగించు"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"భాష ఎంచుకోబడలేదు"</string> @@ -272,15 +274,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"సక్రియంగా ఉంది. టోగుల్ చేయడానికి నొక్కండి."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"అమలులో ఉన్న సేవలు"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"ప్రస్తుతం అమలులో ఉన్న సేవలను వీక్షించండి మరియు నియంత్రించండి"</string> - <string name="night_mode_title" msgid="2594133148531256513">"రాత్రి మోడ్"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"నిలిపివేయబడింది"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"ఎల్లప్పుడూ ఆన్లో ఉంచు"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"స్వయంచాలకం"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"మల్టీప్రాసెస్ వెబ్ వీక్షణ ఆరం."</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"ప్రత్యేకప్రాసెస్లో వెబ్ వీక్షణ రెండెరెర్లను అమలుచేస్తుంది."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"వెబ్ వీక్షణ అమలు"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"వెబ్ వీక్షణ అమలుని సెట్ చేయండి"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"ఎంచుకున్న వెబ్ వీక్షణ అమలు నిలిపివేయబడింది, కానీ ఉపయోగించడానికి తప్పనిసరిగా ప్రారంభించాల్సి ఉంటుంది, మీరు దీన్ని ప్రారంభించాలనుకుంటున్నారా?"</string> @@ -315,7 +310,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"ఛార్జ్ కావడం లేదు"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"ఛార్జ్ కావడం లేదు"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"నిండింది"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"నిర్వాహకుడు నిలిపివేసారు"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"నిర్వాహకుని ద్వారా నియంత్రించబడింది"</string> <string name="home" msgid="8263346537524314127">"హోమ్"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> క్రితం"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> మిగిలి ఉంది"</string> diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml index ab428a96242c..0a123ae61b24 100644 --- a/packages/SettingsLib/res/values-th/strings.xml +++ b/packages/SettingsLib/res/values-th/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"เอาต์พุตการอ่านออกเสียง"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"ความเร็วของคำพูด"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"ความเร็วในการพูดข้อความ"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"ความสูง-ต่ำของเสียง"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"ภาษา"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"ใช้ภาษาของระบบ"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"ไม่ได้เลือกภาษา"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"ใช้งานอยู่ แตะเพื่อสลับ"</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"บริการที่ทำงานอยู่"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"ดูและควบคุมบริการที่ทำงานอยู่"</string> - <string name="night_mode_title" msgid="2594133148531256513">"โหมดกลางคืน"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"ปิดใช้แล้ว"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"เปิดใช้เสมอ"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"อัตโนมัติ"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"เปิดใช้ WebView แบบหลายขั้นตอน"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"เรียกใช้โหมดแสดงภาพ WebView ในการดำเนินการที่แยกออกมา"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"การใช้งาน WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"ตั้งค่าการใช้งาน WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"การใช้งาน WebView ที่เลือกไว้ถูกปิดใช้อยู่ คุณต้องการเปิดใช้เพื่อที่จะใช้งานไหม"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"ไม่ได้ชาร์จ"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"ไม่ได้ชาร์จ"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"เต็ม"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"ปิดใช้โดยผู้ดูแลระบบ"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"ผู้ดูแลระบบเป็นผู้ควบคุม"</string> <string name="home" msgid="8263346537524314127">"หน้าแรก"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g>ที่ผ่านมา"</string> <string name="remaining_length_format" msgid="7886337596669190587">"เหลือ <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml index b21acdafb2f6..4787bdff6b8a 100644 --- a/packages/SettingsLib/res/values-tl/strings.xml +++ b/packages/SettingsLib/res/values-tl/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Output ng text-to-speech"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Rate ng pagsasalita"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Bilis ng pagsambit sa teksto"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Pitch"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Wika"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Gamitin ang wika ng system"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Walang napiling wika"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Aktibo. I-tap upang i-toggle."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Mga tumatakbong serbisyo"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Tingnan at kontrolin ang mga kasalukuyang tumatakbong serbisyo"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Night mode"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Naka-disable"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Palaging naka-on"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Awtomatiko"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"I-enable, multiprocess WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Tagapag-render ng WebView, patakbuhin sa hiwalay na proseso."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Pagpapatupad sa WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Itakda ang pagpapatupad sa WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Naka-disable ang napiling pagpapatupad sa WebView, at dapat itong i-enable upang magamit, gusto mo ba itong i-enable?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Hindi nagcha-charge"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Hindi nagkakarga"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Puno"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Na-disable ng administrator"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Pinapamahalaan ng admin"</string> <string name="home" msgid="8263346537524314127">"Home"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> na ang nakalipas"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> na lang"</string> diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml index beca481f3f58..933b89143500 100644 --- a/packages/SettingsLib/res/values-tr/strings.xml +++ b/packages/SettingsLib/res/values-tr/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Metin-konuşma çıktısı"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Konuşma hızı"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Metnin konuşulduğu hız"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Perde"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Dil"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Sistemin dilini kullan"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Dil seçilmedi"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Etkin. Geçiş yapmak için hafifçe dokunun."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Çalışan hizmetler"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Şu anda çalışan hizmetleri görüntüle ve denetle"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Gece modu"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Devre dışı"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Her zaman açık"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Otomatik"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Çoklu işlem WebView\'ı etkinleştir"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"WebView oluşturucuları yalıtılmış bir işlemde çalıştırın."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView kullanımı"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView kullanımını ayarla"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Seçilen WebView uygulama şekli devre dışı. Bu uygulama şeklinin kullanılabilmesi için etkinleştirilmesi gerekir. Etkinleştirmek istiyor musunuz?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Şarj olmuyor"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Şarj etmiyor"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Dolu"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Yönetici tarafından devre dışı bırakıldı"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Yönetici tarafından denetleniyor"</string> <string name="home" msgid="8263346537524314127">"Ana Ekran"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> önce"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> kaldı"</string> diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml index 9250dfd2f379..e8ba6cbf0867 100644 --- a/packages/SettingsLib/res/values-uk/strings.xml +++ b/packages/SettingsLib/res/values-uk/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Вивід синтезу мовлення з тексту"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Темп мовлення"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Швидкість відтворення тексту"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Вис. зв."</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Мова"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Використовувати мову системи"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Мову не вибрано"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Активний додаток. Торкніться, щоб дезактивувати."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Запущені служби"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Перегляд і керування запущеними службами"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Нічний режим"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Вимкнено"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Завжди ввімкнено"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Автоматично"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Увімк. багатопроцесний WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Запустити засоби обробки відео WebView окремим процесом."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Застосування WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Налаштувати застосування WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Вибране застосування WebView вимкнено. Увімкнути його?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Не заряджається"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Не заряджається"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Акумулятор заряджено"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Вимкнено адміністратором"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Керується адміністратором"</string> <string name="home" msgid="8263346537524314127">"Головний екран"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> тому"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Залишилося <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-ur-rPK/strings.xml b/packages/SettingsLib/res/values-ur-rPK/strings.xml index 3173b33360c9..9d4a269895c8 100644 --- a/packages/SettingsLib/res/values-ur-rPK/strings.xml +++ b/packages/SettingsLib/res/values-ur-rPK/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"ٹیکسٹ ٹو اسپیچ آؤٹ پٹ"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"اسپیچ کی شرح"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"متن بولے جانے کی رفتار"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"پچ"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"زبان"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"سسٹم کی زبان استعمال کریں"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"زبان منتخب نہیں کی گئی"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"فعال۔ ٹوگل کرنے کیلئے تھپتھپائیں۔"</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"چل رہی سروسز"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"فی الحال چل رہی سروسز دیکھیں اور انہیں کنٹرول کریں"</string> - <string name="night_mode_title" msgid="2594133148531256513">"رات موڈ"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"غیر فعال"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"ہمیشہ آن"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"خودکار"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"ملٹی پراسیس WebView بحال کریں"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"WebView رینڈررز کو ایک علیحدہ پراسیس میں چلائیں۔"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView کا نفاذ"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView کا نفاذ سیٹ کریں"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"منتخب کردہ WebView کا نفاذ غیر فعال ہے اور استعمال کرنے کیلئے اسے فعال ہونا چاہئیے، کیا آپ اسے فعال کرنا چاہتے ہیں؟"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"چارج نہیں ہو رہا ہے"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"چارج نہیں ہو رہا ہے"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"مکمل"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"منتظم نے غیر فعال کر دیا"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"کنٹرول کردہ بذریعہ منتظم"</string> <string name="home" msgid="8263346537524314127">"ہوم"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> قبل"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> باقی ہیں"</string> diff --git a/packages/SettingsLib/res/values-uz-rUZ/strings.xml b/packages/SettingsLib/res/values-uz-rUZ/strings.xml index d6d820797c2f..082f6d73e5e0 100644 --- a/packages/SettingsLib/res/values-uz-rUZ/strings.xml +++ b/packages/SettingsLib/res/values-uz-rUZ/strings.xml @@ -78,7 +78,7 @@ <string name="bluetooth_pairing_device_down_error_message" msgid="7870998403045801381">"Quyidagi qurilma javob bermayapti: <xliff:g id="DEVICE_NAME">%1$s</xliff:g>."</string> <string name="bluetooth_pairing_rejected_error_message" msgid="1648157108520832454">"<xliff:g id="DEVICE_NAME">%1$s</xliff:g> biriktirish so‘rovini rad qildi."</string> <string name="accessibility_wifi_off" msgid="1166761729660614716">"Wi-Fi o‘chiq."</string> - <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wi-Fi o‘chirilgan."</string> + <string name="accessibility_no_wifi" msgid="8834610636137374508">"Wi-Fi o‘chiq."</string> <string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"Wi-Fi: bitta ustun"</string> <string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"Wi-Fi: ikkita ustun"</string> <string name="accessibility_wifi_three_bars" msgid="8134185644861380311">"Wi-Fi: uchta ustun"</string> @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Nutq sintezi"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Nutq tezligi"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Matnni o‘qish tezligi"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Chimdish"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Til"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Tizim tili"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Til tanlanmagan"</string> @@ -250,7 +253,7 @@ <string name="force_resizable_activities" msgid="8615764378147824985">"Harakatlarni moslashuvchan o‘lchamga keltirish"</string> <string name="force_resizable_activities_summary" msgid="6667493494706124459">"Manifest qiymatidan qat’i nazar barcha harakatlarni ko‘p oynali rejimga moslashtirish."</string> <string name="enable_freeform_support" msgid="1461893351278940416">"Erkin shakldagi oynalarni yoqish"</string> - <string name="enable_freeform_support_summary" msgid="8247310463288834487">"Tajribaviy erkin shakldagi oynalar ta’minotini yoqish."</string> + <string name="enable_freeform_support_summary" msgid="8247310463288834487">"Erkin shakldagi oynalar yaratish uchun mo‘ljallangan tajribaviy funksiyani yoqish."</string> <string name="local_backup_password_title" msgid="3860471654439418822">"Zaxira nusxa uchun parol"</string> <string name="local_backup_password_summary_none" msgid="6951095485537767956">"Kompyuterdagi zaxira nusxalar hozirgi vaqtda himoyalanmagan"</string> <string name="local_backup_password_summary_change" msgid="5376206246809190364">"Ish stoli to‘liq zaxira nusxalari parolini o‘zgartirish yoki o‘chirish uchun bu yerni bosing"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Faol. O‘zgartirish uchun bu yerga bosing."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Ishlab turgan ilovalar"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Ishlab turgan ilovalarni ko‘rish va boshqarish"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Tungi rejim"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"O‘chiq"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Har doim yoniq tursin"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Avtomatik"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"WebView multiprocess’ni yoqish"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"WebView renderlovchilarini alohida jarayonda ishga tushirish."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView ta’minotchisi"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"WebView ta’minotchisini sozlash"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Tanlangan WebView ta’minotchisi o‘chirilgan va foydalanish uchun yoqilishi zarur. Yoqilsinmi?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Quvvat olmayapti"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Quvvatlanmayapti"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"To‘la"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Administrator tomonidan o‘chirib qo‘yilgan"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Administrator tomonidan boshqariladi"</string> <string name="home" msgid="8263346537524314127">"Bosh ekran"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> oldin"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> qoldi"</string> diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml index 5cc34bbfde17..b3000a83a93c 100644 --- a/packages/SettingsLib/res/values-vi/strings.xml +++ b/packages/SettingsLib/res/values-vi/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Đầu ra v.bản thành giọng nói"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Tốc độ nói"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Tốc độ đọc văn bản"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Độ cao"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Ngôn ngữ"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Sử dụng ngôn ngữ hệ thống"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Không thể chọn ngôn ngữ"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Hiện hoạt. Nhấn để chuyển đổi."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Các dịch vụ đang hoạt động"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Xem và kiểm soát các dịch vụ hiện đang hoạt động"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Chế độ ban đêm"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Đã tắt"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Luôn bật"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Tự động"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Bật WebView đa quy trình"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Chạy kết xuất đồ họa WebView trong quy trình tách biệt."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Triển khai WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Đặt triển khai WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Triển khai WebView đã chọn bị vô hiệu hóa và bạn phải bật để sử dụng tính năng này. Bạn có muốn bật tính năng này không?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Hiện không sạc"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Hiện không sạc"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Đầy"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Bị tắt bởi quản trị viên"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Do quản trị viên kiểm soát"</string> <string name="home" msgid="8263346537524314127">"Màn hình chính"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> trước"</string> <string name="remaining_length_format" msgid="7886337596669190587">"Còn <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml index 4b6732248ab7..9444224e8baf 100644 --- a/packages/SettingsLib/res/values-zh-rCN/strings.xml +++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"文字转语音 (TTS) 输出"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"语速"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"文字转换成语音后的播放速度"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"音高"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"语言"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"使用系统语言"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"未选择语言"</string> @@ -248,11 +251,9 @@ <string name="force_allow_on_external" msgid="3215759785081916381">"强制允许将应用写入外部存储设备"</string> <string name="force_allow_on_external_summary" msgid="3191952505860343233">"允许将任何应用写入外部存储设备(无论清单值是什么)"</string> <string name="force_resizable_activities" msgid="8615764378147824985">"强制将活动设为可调整大小"</string> - <!-- no translation found for force_resizable_activities_summary (6667493494706124459) --> - <skip /> + <string name="force_resizable_activities_summary" msgid="6667493494706124459">"将所有 Activity 设为可配合多窗口环境调整大小(忽略清单值)。"</string> <string name="enable_freeform_support" msgid="1461893351278940416">"启用可自由调整的窗口"</string> - <!-- no translation found for enable_freeform_support_summary (8247310463288834487) --> - <skip /> + <string name="enable_freeform_support_summary" msgid="8247310463288834487">"启用可自由调整的窗口这一实验性功能。"</string> <string name="local_backup_password_title" msgid="3860471654439418822">"桌面备份密码"</string> <string name="local_backup_password_summary_none" msgid="6951095485537767956">"桌面完整备份当前未设置密码保护"</string> <string name="local_backup_password_summary_change" msgid="5376206246809190364">"点按即可更改或移除用于保护桌面完整备份的密码"</string> @@ -274,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"已启用。点按即可切换。"</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"正在运行的服务"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"查看和控制当前正在运行的服务"</string> - <string name="night_mode_title" msgid="2594133148531256513">"夜间模式"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"已停用"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"始终开启"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"自动"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"启用多进程 WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"在独立进程中运行 WebView 渲染程序。"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView 实现"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"设置 WebView 实现"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"所选的 WebView 实现已停用,您必须先启用 WebView 实现才能加以使用。要启用该 WebView 实现吗?"</string> @@ -317,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"未在充电"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"未在充电"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"电量充足"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"已被管理员禁用"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"已由管理员控制"</string> <string name="home" msgid="8263346537524314127">"主屏幕"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g>前"</string> <string name="remaining_length_format" msgid="7886337596669190587">"还剩 <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml index 301b90bdb8b3..c474c0c803a7 100644 --- a/packages/SettingsLib/res/values-zh-rHK/strings.xml +++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"文字轉語音輸出"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"語音速率"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"文字轉語音的播放速度"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"音調"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"語言"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"使用系統語言"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"未選取語言"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"已啟用。輕按即可切換。"</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"執行中的服務"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"查看並控制目前正在執行中的服務"</string> - <string name="night_mode_title" msgid="2594133148531256513">"夜間模式"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"已停用"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"永遠開啟"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"自動"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"啟用多重處理程序 WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"在獨立的處理程序中執行 WebView 轉譯器。"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView 設置"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"設定 WebView 設置"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"您選擇的 WebView 設定已停用,您必須先啟用此設定才能加以使用。要啟用此設定嗎?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"非充電中"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"未開始充電"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"電量已滿"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"管理員已停用此設定"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"已由管理員停用"</string> <string name="home" msgid="8263346537524314127">"主畫面"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g>前"</string> <string name="remaining_length_format" msgid="7886337596669190587">"尚餘 <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml index ce8303c63519..df2a54cca6e2 100644 --- a/packages/SettingsLib/res/values-zh-rTW/strings.xml +++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"文字轉語音輸出"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"語音速率"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"文字轉語音的播放速度"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"音調"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"語言"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"使用系統設定"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"未選取語言"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"已啟用。輕按即可切換。"</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"正在運作的服務"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"查看並管理目前正在執行的服務"</string> - <string name="night_mode_title" msgid="2594133148531256513">"夜間模式"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"已停用"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"一律開啟"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"自動"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"啟用多重處理程序 WebView"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"在獨立的處理程序中執行 WebView 轉譯器。"</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"WebView 實作"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"設定 WebView 實作"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"您所選的 WebView 實作已停用,您必須先啟用 WebView 實作才能加以使用。要啟用該 WebView 實作嗎?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"非充電中"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"非充電中"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"電力充足"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"已由管理員停用"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"已由管理員停用"</string> <string name="home" msgid="8263346537524314127">"主畫面"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g>前"</string> <string name="remaining_length_format" msgid="7886337596669190587">"還剩 <xliff:g id="ID_1">%1$s</xliff:g>"</string> diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml index 149011ae4d2a..f234dc638501 100644 --- a/packages/SettingsLib/res/values-zu/strings.xml +++ b/packages/SettingsLib/res/values-zu/strings.xml @@ -101,6 +101,9 @@ <string name="tts_settings_title" msgid="1237820681016639683">"Umbhalo-uya-kokukhishwa ngokukhuluma"</string> <string name="tts_default_rate_title" msgid="6030550998379310088">"Ukukala izwi"</string> <string name="tts_default_rate_summary" msgid="4061815292287182801">"Isivinini leso umbhalo okhulunywe ngaso"</string> + <string name="tts_default_pitch_title" msgid="6135942113172488671">"Ukuphakama"</string> + <!-- no translation found for tts_default_pitch_summary (1944885882882650009) --> + <skip /> <string name="tts_default_lang_title" msgid="8018087612299820556">"Ulimi"</string> <string name="tts_lang_use_system" msgid="2679252467416513208">"Sebenzisa ulimi lwesistimu"</string> <string name="tts_lang_not_selected" msgid="7395787019276734765">"Ulimi alukhethwanga"</string> @@ -272,15 +275,8 @@ <string name="inactive_app_active_summary" msgid="4174921824958516106">"Kuyasebenza. Thepha ukuze ushintshe."</string> <string name="runningservices_settings_title" msgid="8097287939865165213">"Amasevisi asebenzayo"</string> <string name="runningservices_settings_summary" msgid="854608995821032748">"Buka futhi ulawule amasevisi asebenzayo okwamanje"</string> - <string name="night_mode_title" msgid="2594133148531256513">"Imodi yasebusuku"</string> - <string name="night_mode_summary" msgid="9196605054622017193">"%s"</string> - <string name="night_mode_no" msgid="9171772244775838901">"Kukhutshaziwe"</string> - <string name="night_mode_yes" msgid="2218157265997633432">"Njalo ivuliwe"</string> - <string name="night_mode_auto" msgid="7508348175804304327">"Okuzenzakalelayo"</string> - <!-- no translation found for enable_webview_multiprocess (3405948012467585908) --> - <skip /> - <!-- no translation found for enable_webview_multiprocess_desc (852226124223847283) --> - <skip /> + <string name="enable_webview_multiprocess" msgid="3405948012467585908">"Nika amandla i-WebView kokucubungula okuningi"</string> + <string name="enable_webview_multiprocess_desc" msgid="852226124223847283">"Sebenzisa abasebenzeli be-WebView kwinqubo ekhethiwe."</string> <string name="select_webview_provider_title" msgid="4628592979751918907">"Ukufakwa ke-WebView"</string> <string name="select_webview_provider_dialog_title" msgid="4370551378720004872">"Sesba ukufakwa kwe-WebView"</string> <string name="select_webview_provider_confirmation_text" msgid="6671472080671066972">"Ukusetshenziswa kwe-WebView okukhethiwe kukhutshaziwe, futhi kuzomele kunikwe amandla ukuze kusetshenziswe, ingabe ufisa ukukunika amandla?"</string> @@ -315,7 +311,7 @@ <string name="battery_info_status_discharging" msgid="310932812698268588">"Ayishaji"</string> <string name="battery_info_status_not_charging" msgid="2820070506621483576">"Ayishaji"</string> <string name="battery_info_status_full" msgid="2824614753861462808">"Kugcwele"</string> - <string name="disabled_by_admin_summary_text" msgid="7787027069207263048">"Ikhutshazwe umlawuli"</string> + <string name="disabled_by_admin_summary_text" msgid="6750513964908334617">"Kulawulwa umqondisi"</string> <string name="home" msgid="8263346537524314127">"Ekhaya"</string> <string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> edlule"</string> <string name="remaining_length_format" msgid="7886337596669190587">"<xliff:g id="ID_1">%1$s</xliff:g> osele"</string> diff --git a/packages/SettingsLib/res/values/arrays.xml b/packages/SettingsLib/res/values/arrays.xml index 1bce7f9ac3ae..525d6f421d71 100644 --- a/packages/SettingsLib/res/values/arrays.xml +++ b/packages/SettingsLib/res/values/arrays.xml @@ -344,28 +344,6 @@ <item>midi</item> </string-array> - <!-- Possible values for user theme in Display Settings. - Do not translate. --> - <string-array name="night_mode_entries" translatable="false"> - <!-- Do not translate. --> - <item>@string/night_mode_no</item> - <!-- Do not translate. --> - <item>@string/night_mode_yes</item> - <!-- Do not translate. --> - <item>@string/night_mode_auto</item> - </string-array> - - <!-- These values should match up with the MODE_NIGHT constants in UiModeManager. - Do not translate. --> - <string-array name="night_mode_values" translatable="false"> - <!-- Do not translate. --> - <item>1</item> - <!-- Do not translate. --> - <item>2</item> - <!-- Do not translate. --> - <item>0</item> - </string-array> - <!-- Display color space adjustment modes for developers --> <string-array name="simulate_color_space_entries" translatable="false"> <item>@string/daltonizer_mode_disabled</item> diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml index 57c56847759e..72fa9397e898 100644 --- a/packages/SettingsLib/res/values/strings.xml +++ b/packages/SettingsLib/res/values/strings.xml @@ -236,10 +236,14 @@ <string name="tts_settings">Text-to-speech settings</string> <!-- TTS option item name in the main settings screen --> <string name="tts_settings_title">Text-to-speech output</string> - <!-- On main TTS Settings screen, in default settings section, setting default speech rate for synthesized voice --> + <!-- On main TTS Settings screen, in default settings section, setting default speech rate for synthesized voice --> <string name="tts_default_rate_title">Speech rate</string> <!-- On main TTS Settings screen, summary for default speech rate for synthesized voice --> <string name="tts_default_rate_summary">Speed at which the text is spoken</string> + <!-- On main TTS Settings screen, in default settings section, setting default pitch for synthesized voice --> + <string name="tts_default_pitch_title">Pitch</string> + <!-- On main TTS Settings screen, summary for default pitch for synthesized voice --> + <string name="tts_default_pitch_summary">Affects the tone of the synthesized speech</string> <!-- On main TTS Settings screen, in default settings section, setting default language for synthesized voice --> <string name="tts_default_lang_title">Language</string> <!-- Entry in the TTS engine language/locale picker, when selected will try to default to the system language [CHAR LIMIT=50] --> @@ -673,17 +677,6 @@ <!-- Services settings screen, setting option summary for the user to go to the screen to view running services --> <string name="runningservices_settings_summary">View and control currently running services</string> - <!-- Sound & display settings screen, setting option name to change the user interface theme [CHAR LIMIT=30] --> - <string name="night_mode_title">Night mode</string> - <!-- Sound & display settings screen, setting option summary to change the user interface theme [CHAR LIMIT=100] --> - <string name="night_mode_summary">%s</string> - <!-- Sound & display settings screen, theme setting value to prefer a light-colored user interface [CHAR LIMIT=30] --> - <string name="night_mode_no">Disabled</string> - <!-- Sound & display settings screen, theme setting value to prefer a dark-colored user interface [CHAR LIMIT=30] --> - <string name="night_mode_yes">Always on</string> - <!-- Sound & display settings screen, theme setting value to automatically switch between a light- or dark-colored user interface [CHAR LIMIT=30] --> - <string name="night_mode_auto">Automatic</string> - <!-- Developer settings: enable WebView multiprocess name [CHAR LIMIT=30] --> <string name="enable_webview_multiprocess">Enable multiprocess WebView</string> <!-- Developer settings: enable WebView multiprocess summary [CHAR LIMIT=60] --> @@ -693,8 +686,8 @@ <string name="select_webview_provider_title">WebView implementation</string> <!-- Developer settings: select WebView provider dialog title [CHAR LIMIT=30] --> <string name="select_webview_provider_dialog_title">Set WebView implementation</string> - <!-- Developer settings: confirmation dialog text for the WebView provider selection dialog [CHAR LIMIT=NONE] --> - <string name="select_webview_provider_confirmation_text">The chosen WebView implementation is disabled, and must be enabled to be used, do you wish to enable it?</string> + <!-- Developer settings: text for the WebView provider selection toast shown if an invalid provider was chosen (i.e. the setting list was stale). [CHAR LIMIT=NONE] --> + <string name="select_webview_provider_toast_text">The chosen WebView implementation is invalid because the list of implementation choices grew stale. The list should now be updated.</string> <!-- Developer settings screen, convert userdata to file encryption option name --> <string name="convert_to_file_encryption">Convert to file encryption</string> diff --git a/packages/SettingsLib/src/com/android/settingslib/BatteryInfo.java b/packages/SettingsLib/src/com/android/settingslib/BatteryInfo.java index b16b8ec57c72..6b29e2165c54 100644 --- a/packages/SettingsLib/src/com/android/settingslib/BatteryInfo.java +++ b/packages/SettingsLib/src/com/android/settingslib/BatteryInfo.java @@ -39,121 +39,59 @@ public class BatteryInfo { public String remainingLabel; private BatteryStats mStats; private boolean mCharging; + private long timePeriod; public interface Callback { void onBatteryInfoLoaded(BatteryInfo info); } - public void bindHistory(UsageView view) { - long startWalltime = 0; - long endDateWalltime = 0; - long endWalltime = 0; - long historyStart = 0; - long historyEnd = 0; - byte lastLevel = -1; - long curWalltime = startWalltime; - long lastWallTime = 0; - long lastRealtime = 0; - int lastInteresting = 0; - int pos = 0; - boolean first = true; - if (mStats.startIteratingHistoryLocked()) { - final HistoryItem rec = new HistoryItem(); - while (mStats.getNextHistoryLocked(rec)) { - pos++; - if (first) { - first = false; - historyStart = rec.time; - } - if (rec.cmd == HistoryItem.CMD_CURRENT_TIME - || rec.cmd == HistoryItem.CMD_RESET) { - // If there is a ridiculously large jump in time, then we won't be - // able to create a good chart with that data, so just ignore the - // times we got before and pretend like our data extends back from - // the time we have now. - // Also, if we are getting a time change and we are less than 5 minutes - // since the start of the history real time, then also use this new - // time to compute the base time, since whatever time we had before is - // pretty much just noise. - if (rec.currentTime > (lastWallTime+(180*24*60*60*1000L)) - || rec.time < (historyStart+(5*60*1000L))) { - startWalltime = 0; - } - lastWallTime = rec.currentTime; - lastRealtime = rec.time; - if (startWalltime == 0) { - startWalltime = lastWallTime - (lastRealtime-historyStart); - } - } - if (rec.isDeltaData()) { - if (rec.batteryLevel != lastLevel || pos == 1) { - lastLevel = rec.batteryLevel; - } - lastInteresting = pos; - historyEnd = rec.time; - } + public void bindHistory(final UsageView view, BatteryDataParser... parsers) { + BatteryDataParser parser = new BatteryDataParser() { + SparseIntArray points = new SparseIntArray(); + + @Override + public void onParsingStarted(long startTime, long endTime) { + timePeriod = endTime - startTime - remainingTimeUs / 1000; + view.clearPaths(); + view.configureGraph((int) (endTime - startTime), 100, remainingTimeUs != 0, + mCharging); } - } - mStats.finishIteratingHistoryLocked(); - endDateWalltime = lastWallTime + historyEnd - lastRealtime; - endWalltime = endDateWalltime + (remainingTimeUs / 1000); - int i = 0; - final int N = lastInteresting; - SparseIntArray points = new SparseIntArray(); - view.clearPaths(); - view.configureGraph((int) (endWalltime - startWalltime), 100, remainingTimeUs != 0, - mCharging); - if (endDateWalltime > startWalltime && mStats.startIteratingHistoryLocked()) { - final HistoryItem rec = new HistoryItem(); - while (mStats.getNextHistoryLocked(rec) && i < N) { - if (rec.isDeltaData()) { - curWalltime += rec.time - lastRealtime; - lastRealtime = rec.time; - long x = (curWalltime - startWalltime); - if (x < 0) { - x = 0; - } - points.put((int) x, rec.batteryLevel); - } else { - long lastWalltime = curWalltime; - if (rec.cmd == HistoryItem.CMD_CURRENT_TIME - || rec.cmd == HistoryItem.CMD_RESET) { - if (rec.currentTime >= startWalltime) { - curWalltime = rec.currentTime; - } else { - curWalltime = startWalltime + (rec.time - historyStart); - } - lastRealtime = rec.time; - } + @Override + public void onDataPoint(long time, HistoryItem record) { + points.put((int) time, record.batteryLevel); + } - if (rec.cmd != HistoryItem.CMD_OVERFLOW - && (rec.cmd != HistoryItem.CMD_CURRENT_TIME - || Math.abs(lastWalltime-curWalltime) > (60*60*1000))) { - if (points.size() > 1) { - view.addPath(points); - } - points.clear(); - } + @Override + public void onDataGap() { + if (points.size() > 1) { + view.addPath(points); } - i++; + points.clear(); } + + @Override + public void onParsingDone() { + if (points.size() > 1) { + view.addPath(points); + } + } + }; + BatteryDataParser[] parserList = new BatteryDataParser[parsers.length + 1]; + for (int i = 0; i < parsers.length; i++) { + parserList[i] = parsers[i]; } - if (points.size() > 1) { - view.addPath(points); - } - long timePast = endDateWalltime - startWalltime; + parserList[parsers.length] = parser; + parse(mStats, remainingTimeUs, parserList); final Context context = view.getContext(); String timeString = context.getString(R.string.charge_length_format, - Formatter.formatShortElapsedTime(context, timePast)); + Formatter.formatShortElapsedTime(context, timePeriod)); String remaining = ""; if (remainingTimeUs != 0) { remaining = context.getString(R.string.remaining_length_format, Formatter.formatShortElapsedTime(context, remainingTimeUs / 1000)); } - view.setBottomLabels(new CharSequence[] { timeString, remaining}); - - mStats.finishIteratingHistoryLocked(); + view.setBottomLabels(new CharSequence[]{timeString, remaining}); } public static void getBatteryInfo(final Context context, final Callback callback) { @@ -233,4 +171,119 @@ public class BatteryInfo { } return info; } + + public interface BatteryDataParser { + void onParsingStarted(long startTime, long endTime); + + void onDataPoint(long time, HistoryItem record); + + void onDataGap(); + + void onParsingDone(); + } + + private static void parse(BatteryStats stats, long remainingTimeUs, + BatteryDataParser... parsers) { + long startWalltime = 0; + long endDateWalltime = 0; + long endWalltime = 0; + long historyStart = 0; + long historyEnd = 0; + byte lastLevel = -1; + long curWalltime = startWalltime; + long lastWallTime = 0; + long lastRealtime = 0; + int lastInteresting = 0; + int pos = 0; + boolean first = true; + if (stats.startIteratingHistoryLocked()) { + final HistoryItem rec = new HistoryItem(); + while (stats.getNextHistoryLocked(rec)) { + pos++; + if (first) { + first = false; + historyStart = rec.time; + } + if (rec.cmd == HistoryItem.CMD_CURRENT_TIME + || rec.cmd == HistoryItem.CMD_RESET) { + // If there is a ridiculously large jump in time, then we won't be + // able to create a good chart with that data, so just ignore the + // times we got before and pretend like our data extends back from + // the time we have now. + // Also, if we are getting a time change and we are less than 5 minutes + // since the start of the history real time, then also use this new + // time to compute the base time, since whatever time we had before is + // pretty much just noise. + if (rec.currentTime > (lastWallTime + (180 * 24 * 60 * 60 * 1000L)) + || rec.time < (historyStart + (5 * 60 * 1000L))) { + startWalltime = 0; + } + lastWallTime = rec.currentTime; + lastRealtime = rec.time; + if (startWalltime == 0) { + startWalltime = lastWallTime - (lastRealtime - historyStart); + } + } + if (rec.isDeltaData()) { + if (rec.batteryLevel != lastLevel || pos == 1) { + lastLevel = rec.batteryLevel; + } + lastInteresting = pos; + historyEnd = rec.time; + } + } + } + stats.finishIteratingHistoryLocked(); + endDateWalltime = lastWallTime + historyEnd - lastRealtime; + endWalltime = endDateWalltime + (remainingTimeUs / 1000); + + int i = 0; + final int N = lastInteresting; + + for (int j = 0; j < parsers.length; j++) { + parsers[j].onParsingStarted(startWalltime, endWalltime); + } + if (endDateWalltime > startWalltime && stats.startIteratingHistoryLocked()) { + final HistoryItem rec = new HistoryItem(); + while (stats.getNextHistoryLocked(rec) && i < N) { + if (rec.isDeltaData()) { + curWalltime += rec.time - lastRealtime; + lastRealtime = rec.time; + long x = (curWalltime - startWalltime); + if (x < 0) { + x = 0; + } + for (int j = 0; j < parsers.length; j++) { + parsers[j].onDataPoint(x, rec); + } + } else { + long lastWalltime = curWalltime; + if (rec.cmd == HistoryItem.CMD_CURRENT_TIME + || rec.cmd == HistoryItem.CMD_RESET) { + if (rec.currentTime >= startWalltime) { + curWalltime = rec.currentTime; + } else { + curWalltime = startWalltime + (rec.time - historyStart); + } + lastRealtime = rec.time; + } + + if (rec.cmd != HistoryItem.CMD_OVERFLOW + && (rec.cmd != HistoryItem.CMD_CURRENT_TIME + || Math.abs(lastWalltime - curWalltime) > (60 * 60 * 1000))) { + for (int j = 0; j < parsers.length; j++) { + parsers[j].onDataGap(); + } + } + } + i++; + } + } + + stats.finishIteratingHistoryLocked(); + + for (int j = 0; j < parsers.length; j++) { + parsers[j].onParsingDone(); + } + } } diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java index 57d495f6f936..9842e28ffdba 100644 --- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java +++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java @@ -49,6 +49,7 @@ import android.os.Message; import android.os.ParcelFileDescriptor; import android.os.Process; import android.os.RemoteException; +import android.os.SELinux; import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserManager; @@ -457,8 +458,28 @@ public class SettingsProvider extends ContentProvider { @Override public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException { - throw new FileNotFoundException("Direct file access no longer supported; " - + "ringtone playback is available through android.media.Ringtone"); + final String cacheName; + if (Settings.System.RINGTONE_CACHE_URI.equals(uri)) { + cacheName = Settings.System.RINGTONE_CACHE; + } else if (Settings.System.NOTIFICATION_SOUND_CACHE_URI.equals(uri)) { + cacheName = Settings.System.NOTIFICATION_SOUND_CACHE; + } else if (Settings.System.ALARM_ALERT_CACHE_URI.equals(uri)) { + cacheName = Settings.System.ALARM_ALERT_CACHE; + } else { + throw new FileNotFoundException("Direct file access no longer supported; " + + "ringtone playback is available through android.media.Ringtone"); + } + + final File cacheFile = new File( + getRingtoneCacheDir(UserHandle.getCallingUserId()), cacheName); + return ParcelFileDescriptor.open(cacheFile, ParcelFileDescriptor.parseMode(mode)); + } + + private File getRingtoneCacheDir(int userId) { + final File cacheDir = new File(Environment.getDataSystemDeDirectory(userId), "ringtones"); + cacheDir.mkdir(); + SELinux.restorecon(cacheDir); + return cacheDir; } @Override @@ -901,6 +922,21 @@ public class SettingsProvider extends ContentProvider { return false; } + // Invalidate any relevant cache files + String cacheName = null; + if (Settings.System.RINGTONE.equals(name)) { + cacheName = Settings.System.RINGTONE_CACHE; + } else if (Settings.System.NOTIFICATION_SOUND.equals(name)) { + cacheName = Settings.System.NOTIFICATION_SOUND_CACHE; + } else if (Settings.System.ALARM_ALERT.equals(name)) { + cacheName = Settings.System.ALARM_ALERT_CACHE; + } + if (cacheName != null) { + final File cacheFile = new File( + getRingtoneCacheDir(UserHandle.getCallingUserId()), cacheName); + cacheFile.delete(); + } + // Mutate the value. synchronized (mLock) { switch (operation) { diff --git a/packages/Shell/src/com/android/shell/BugreportProgressService.java b/packages/Shell/src/com/android/shell/BugreportProgressService.java index 9926ae5e7ffc..20aca0efc6ad 100644 --- a/packages/Shell/src/com/android/shell/BugreportProgressService.java +++ b/packages/Shell/src/com/android/shell/BugreportProgressService.java @@ -41,6 +41,8 @@ import java.util.zip.ZipOutputStream; import libcore.io.Streams; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.MetricsProto.MetricsEvent; import com.google.android.collect.Lists; import android.accounts.Account; @@ -506,6 +508,7 @@ public class BugreportProgressService extends Service { * Cancels a bugreport upon user's request. */ private void cancel(int id) { + MetricsLogger.action(this, MetricsEvent.ACTION_BUGREPORT_NOTIFICATION_ACTION_CANCEL); Log.v(TAG, "cancel: ID=" + id); final BugreportInfo info = getInfo(id); if (info != null && !info.finished) { @@ -582,6 +585,7 @@ public class BugreportProgressService extends Service { * change its values. */ private void launchBugreportInfoDialog(int id) { + MetricsLogger.action(this, MetricsEvent.ACTION_BUGREPORT_NOTIFICATION_ACTION_DETAILS); // Copy values so it doesn't lock mProcesses while UI is being updated final String name, title, description; final BugreportInfo info = getInfo(id); @@ -610,6 +614,7 @@ public class BugreportProgressService extends Service { * upon receiving a {@link #INTENT_BUGREPORT_STARTED}. */ private void takeScreenshot(int id, boolean delayed) { + MetricsLogger.action(this, MetricsEvent.ACTION_BUGREPORT_NOTIFICATION_ACTION_SCREENSHOT); if (getInfo(id) == null) { // Most likely am killed Shell before user tapped the notification. Since system might // be too busy anwyays, it's better to ignore the notification and switch back to the @@ -764,6 +769,12 @@ public class BugreportProgressService extends Service { info.renameScreenshots(mScreenshotsDir); info.bugreportFile = bugreportFile; + final int max = intent.getIntExtra(EXTRA_MAX, -1); + if (max != -1) { + MetricsLogger.histogram(this, "dumpstate_duration", max); + info.max = max; + } + final File screenshot = getFileExtra(intent, EXTRA_SCREENSHOT); if (screenshot != null) { info.addScreenshot(screenshot); @@ -859,6 +870,7 @@ public class BugreportProgressService extends Service { * intent, but issuing a warning dialog the first time. */ private void shareBugreport(int id, BugreportInfo sharedInfo) { + MetricsLogger.action(this, MetricsEvent.ACTION_BUGREPORT_NOTIFICATION_ACTION_SHARE); BugreportInfo info = getInfo(id); if (info == null) { // Service was terminated but notification persisted @@ -1139,9 +1151,16 @@ public class BugreportProgressService extends Service { if (info == null) { return; } + if (title != null && !title.equals(info.title)) { + MetricsLogger.action(this, MetricsEvent.ACTION_BUGREPORT_DETAILS_TITLE_CHANGED); + } info.title = title; + if (description != null && !description.equals(info.description)) { + MetricsLogger.action(this, MetricsEvent.ACTION_BUGREPORT_DETAILS_DESCRIPTION_CHANGED); + } info.description = description; if (name != null && !name.equals(info.name)) { + MetricsLogger.action(this, MetricsEvent.ACTION_BUGREPORT_DETAILS_NAME_CHANGED); info.name = name; updateProgress(info); } @@ -1229,7 +1248,7 @@ public class BugreportProgressService extends Service { /** * Sets its internal state and displays the dialog. */ - private void initialize(Context context, BugreportInfo info) { + private void initialize(final Context context, BugreportInfo info) { // First initializes singleton. if (mDialog == null) { @SuppressLint("InflateParams") @@ -1263,6 +1282,8 @@ public class BugreportProgressService extends Service { @Override public void onClick(DialogInterface dialog, int id) { + MetricsLogger.action(context, + MetricsEvent.ACTION_BUGREPORT_DETAILS_CANCELED); if (!mTempName.equals(mSavedName)) { // Must restore dumpstate's name since it was changed // before user clicked OK. @@ -1307,6 +1328,7 @@ public class BugreportProgressService extends Service { @Override public void onClick(View view) { + MetricsLogger.action(context, MetricsEvent.ACTION_BUGREPORT_DETAILS_SAVED); sanitizeName(); final String name = mInfoName.getText().toString(); final String title = mInfoTitle.getText().toString(); @@ -1525,7 +1547,7 @@ public class BugreportProgressService extends Service { return "id: " + id + ", pid: " + pid + ", name: " + name + ", finished: " + finished + "\n\ttitle: " + title + "\n\tdescription: " + description + "\n\tfile: " + bugreportFile + "\n\tscreenshots: " + screenshotFiles - + "\n\tprogress: " + progress + "/" + max + "(" + percent + ")" + + "\n\tprogress: " + progress + "/" + max + " (" + percent + ")" + "\n\tlast_update: " + getFormattedLastUpdate() + "\naddingDetailsToZip: " + addingDetailsToZip + " addedDetailsToZip: " + addedDetailsToZip; diff --git a/packages/StatementService/src/com/android/statementservice/IntentFilterVerificationReceiver.java b/packages/StatementService/src/com/android/statementservice/IntentFilterVerificationReceiver.java index 712347ab4fb7..57809acc84b1 100644 --- a/packages/StatementService/src/com/android/statementservice/IntentFilterVerificationReceiver.java +++ b/packages/StatementService/src/com/android/statementservice/IntentFilterVerificationReceiver.java @@ -106,6 +106,10 @@ public final class IntentFilterVerificationReceiver extends BroadcastReceiver { try { ArrayList<String> sourceAssets = new ArrayList<String>(); for (String host : hostList) { + // "*.example.tld" is validated via https://example.tld + if (host.startsWith("*.")) { + host = host.substring(2); + } sourceAssets.add(createWebAssetString(scheme, host)); } extras.putStringArrayList(DirectStatementService.EXTRA_SOURCE_ASSET_DESCRIPTORS, diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index 9e07c6dfd221..c590ec7a97dd 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -337,7 +337,7 @@ android:launchMode="singleTop" android:taskAffinity="" android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation" - android:resizeable="true" + android:resizeableActivity="true" android:supportsPictureInPicture="true" androidprv:alwaysFocusable="true" android:excludeFromRecents="true" /> @@ -348,7 +348,7 @@ android:launchMode="singleTop" android:taskAffinity="" android:configChanges="screenSize|smallestScreenSize|screenLayout|orientation" - android:resizeable="true" + android:resizeableActivity="true" android:supportsPictureInPicture="true" android:excludeFromRecents="true" /> <activity diff --git a/packages/SystemUI/res/drawable-nodpi/icon.xml b/packages/SystemUI/res/drawable-nodpi/icon.xml index 9c36b5a79c02..5e08fcbf8f52 100644 --- a/packages/SystemUI/res/drawable-nodpi/icon.xml +++ b/packages/SystemUI/res/drawable-nodpi/icon.xml @@ -1,5 +1,5 @@ <!-- -Copyright (C) 2015 The Android Open Source Project +Copyright (C) 2016 The Android Open Source Project Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. @@ -14,30 +14,25 @@ Copyright (C) 2015 The Android Open Source Project limitations under the License. --> <vector xmlns:android="http://schemas.android.com/apk/res/android" - android:width="48.0dp" - android:height="48.0dp" + android:width="48dp" + android:height="48dp" android:viewportWidth="48.0" android:viewportHeight="48.0"> <path - android:pathData="M24.0,2.0C11.8,2.0 2.0,11.8 2.0,24.0c0.0,6.1 2.5,11.6 6.4,15.6L39.6,8.4C35.6,4.5 30.1,2.0 24.0,2.0z" - android:fillColor="#E91E63"/> + android:fillColor="#00796B" + android:pathData="M32.0,12.5l0.0,28.0l12.0,-5.0l0.0,-28.0z"/> <path - android:pathData="M39.6,8.4L8.4,39.6c4.0,4.0 9.5,6.4 15.6,6.4c12.2,0.0 22.0,-9.8 22.0,-22.0C46.0,17.9 43.5,12.4 39.6,8.4z" - android:fillColor="#F06292"/> + android:fillColor="#00796B" + android:pathData="M4.0,40.5l12.0,-5.0l0.0,-11.0l-12.0,-12.0z"/> <path - android:pathData="M45.9,25.9L34.0,14.0L14.0,34.0l11.9,11.9C36.5,45.0 45.0,36.5 45.9,25.9z" - android:fillAlpha="0.33" - android:fillColor="#E91E63"/> + android:fillColor="#40000000" + android:pathData="M44.0,35.5l-12.0,-12.0l0.0,-4.0z"/> <path - android:pathData="M24.0,24.0c0.0,0.0 0.0,2.2 0.0,5.0s0.0,5.0 0.0,5.0l10.0,-10.0L34.0,14.0L24.0,24.0z" - android:fillColor="#FFFFFF"/> + android:fillColor="#40000000" + android:pathData="M4.0,12.5l12.0,12.0l0.0,4.0z"/> <path - android:pathData="M24.0,24.0L14.0,14.0l0.0,10.0l10.0,10.0c0.0,0.0 0.0,-2.2 0.0,-5.0S24.0,24.0 24.0,24.0z" - android:fillColor="#EEEEEE"/> - <path - android:pathData="M14.0,34.0l10.0,0.0 -10.0,-10.0z" - android:fillColor="#DDDDDD"/> - <path - android:pathData="M34.0,34.0l0.0,-10.0 -10.0,10.0z" - android:fillColor="#DDDDDD"/> + android:fillColor="#4DB6AC" + android:pathData="M32.0,23.5l-16.0,-16.0l-12.0,5.0l0.0,0.0l12.0,12.0l16.0,16.0l12.0,-5.0l0.0,0.0z"/> </vector> + + diff --git a/packages/SystemUI/res/drawable/stat_sys_data_saver.xml b/packages/SystemUI/res/drawable/stat_sys_data_saver.xml new file mode 100644 index 000000000000..a45f9a2ac798 --- /dev/null +++ b/packages/SystemUI/res/drawable/stat_sys_data_saver.xml @@ -0,0 +1,32 @@ +<!-- + Copyright (C) 2016 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> +<inset xmlns:android="http://schemas.android.com/apk/res/android" + android:insetLeft="2.5dp" + android:insetRight="2.5dp"> + <vector + android:width="17.0dp" + android:height="17.0dp" + android:viewportWidth="24.0" + android:viewportHeight="24.0"> + <path + android:fillColor="#FFFFFFFF" + android:pathData=" + M9.0,16.0l2.0,0.0L11.0,8.0L9.0,8.0l0.0,8.0z + m3.0,-14.0C6.48,2.0 2.0,6.48 2.0,12.0s4.48,10.0 10.0,10.0 10.0,-4.48 10.0,-10.0S17.52,2.0 12.0,2.0z + m0.0,18.0c-4.41,0.0 -8.0,-3.59 -8.0,-8.0s3.59,-8.0 8.0,-8.0 8.0,3.59 8.0,8.0 -3.59,8.0 -8.0,8.0z + m1.0,-4.0l2.0,0.0l0.0,-8.0l-2.0,0.0l0.0,8.0z"/> + </vector> +</inset> diff --git a/packages/SystemUI/res/layout/qs_customize_panel.xml b/packages/SystemUI/res/layout/qs_customize_panel.xml index 73a92d905a3d..458ce2decaff 100644 --- a/packages/SystemUI/res/layout/qs_customize_panel.xml +++ b/packages/SystemUI/res/layout/qs_customize_panel.xml @@ -22,47 +22,13 @@ android:background="@drawable/qs_customizer_background" android:gravity="center_horizontal"> - <LinearLayout + <Toolbar + android:id="@*android:id/action_bar" android:layout_width="match_parent" android:layout_height="wrap_content" - android:paddingTop="28dp" - android:paddingEnd="8dp"> - - <ImageView - android:id="@+id/close" - android:layout_width="56dp" - android:layout_height="56dp" - android:padding="16dp" - android:src="@drawable/ic_close_white" /> - - <Space - android:layout_width="0dp" - android:layout_height="0dp" - android:layout_weight="1" /> - - <Button - android:id="@+id/save" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:paddingStart="12dp" - android:paddingEnd="12dp" - android:background="?android:attr/selectableItemBackground" - android:textAppearance="@android:style/TextAppearance.Material.Widget.Button.Inverse" - android:textColor="?android:attr/colorAccent" - android:text="@string/save" /> - - <Button - android:id="@+id/reset" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:paddingStart="12dp" - android:paddingEnd="12dp" - android:background="?android:attr/selectableItemBackground" - android:textAppearance="@android:style/TextAppearance.Material.Widget.Button.Inverse" - android:textColor="?android:attr/colorAccent" - android:text="@*android:string/reset" /> - - </LinearLayout> + android:layout_marginTop="28dp" + android:navigationContentDescription="@*android:string/action_bar_up_description" + style="?android:attr/toolbarStyle" /> <android.support.v7.widget.RecyclerView android:id="@android:id/list" diff --git a/packages/SystemUI/res/layout/qs_panel.xml b/packages/SystemUI/res/layout/qs_panel.xml index b8f10dbec87c..3ee2475ec94a 100644 --- a/packages/SystemUI/res/layout/qs_panel.xml +++ b/packages/SystemUI/res/layout/qs_panel.xml @@ -18,7 +18,9 @@ android:id="@+id/quick_settings_container" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="@drawable/qs_background_primary"> + android:background="@drawable/qs_background_primary" + android:clipToPadding="false" + android:clipChildren="false"> <com.android.systemui.qs.QSPanel android:id="@+id/quick_settings_panel" diff --git a/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml b/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml index 8df2c28060fb..0a9baa0aac09 100644 --- a/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml +++ b/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml @@ -108,7 +108,7 @@ android:layout_height="wrap_content" android:layout_alignParentStart="true" android:layout_alignParentTop="true" - android:layout_marginTop="4dp" + android:layout_marginTop="8dp" android:layout_marginStart="16dp" android:gravity="start" android:orientation="vertical"> diff --git a/packages/SystemUI/res/layout/remote_input.xml b/packages/SystemUI/res/layout/remote_input.xml index cce07bdaa45d..818df3b46fd7 100644 --- a/packages/SystemUI/res/layout/remote_input.xml +++ b/packages/SystemUI/res/layout/remote_input.xml @@ -42,6 +42,7 @@ android:background="@null" android:singleLine="true" android:ellipsize="start" + android:inputType="textShortMessage|textAutoCorrect|textCapSentences" android:imeOptions="actionSend" /> <FrameLayout diff --git a/packages/SystemUI/res/layout/status_bar_notification_keyguard_overflow.xml b/packages/SystemUI/res/layout/status_bar_notification_keyguard_overflow.xml index f699fce27043..7df6bc695555 100644 --- a/packages/SystemUI/res/layout/status_bar_notification_keyguard_overflow.xml +++ b/packages/SystemUI/res/layout/status_bar_notification_keyguard_overflow.xml @@ -22,6 +22,7 @@ android:focusable="true" android:clickable="true" > + <com.android.systemui.statusbar.NotificationBackgroundView android:id="@+id/backgroundNormal" android:layout_width="match_parent" android:layout_height="match_parent" @@ -65,4 +66,9 @@ /> </com.android.keyguard.AlphaOptimizedLinearLayout> + <com.android.systemui.statusbar.notification.FakeShadowView + android:id="@+id/fake_shadow" + android:layout_width="match_parent" + android:layout_height="match_parent" /> + </com.android.systemui.statusbar.NotificationOverflowContainer> diff --git a/packages/SystemUI/res/layout/status_bar_notification_row.xml b/packages/SystemUI/res/layout/status_bar_notification_row.xml index c4c45bb0be22..e456984c5f36 100644 --- a/packages/SystemUI/res/layout/status_bar_notification_row.xml +++ b/packages/SystemUI/res/layout/status_bar_notification_row.xml @@ -76,4 +76,9 @@ android:layout_height="wrap_content" /> + <com.android.systemui.statusbar.notification.FakeShadowView + android:id="@+id/fake_shadow" + android:layout_width="match_parent" + android:layout_height="match_parent" /> + </com.android.systemui.statusbar.ExpandableNotificationRow> diff --git a/packages/SystemUI/res/layout/volume_dialog.xml b/packages/SystemUI/res/layout/volume_dialog.xml index e4effd487896..baec8ef344cd 100644 --- a/packages/SystemUI/res/layout/volume_dialog.xml +++ b/packages/SystemUI/res/layout/volume_dialog.xml @@ -13,25 +13,15 @@ See the License for the specific language governing permissions and limitations under the License. --> -<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" - xmlns:tools="http://schemas.android.com/tools" +<RelativeLayout + xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/volume_dialog" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="@dimen/volume_dialog_margin_bottom" android:background="@drawable/volume_dialog_background" - android:translationZ="4dp" > - - <com.android.keyguard.AlphaOptimizedImageButton - android:id="@+id/volume_expand_button" - style="@style/VolumeButtons" - android:layout_width="@dimen/volume_button_size" - android:layout_height="@dimen/volume_button_size" - android:layout_alignParentLeft="true" - android:clickable="true" - android:soundEffectsEnabled="false" - android:src="@drawable/ic_volume_collapse_animation" - tools:ignore="RtlHardcoded" /> + android:translationZ="4dp" + android:paddingTop="8dp"> <LinearLayout android:id="@+id/volume_dialog_content" @@ -39,9 +29,15 @@ android:layout_height="wrap_content" android:orientation="vertical" android:paddingBottom="8dp" - android:paddingTop="8dp" > + android:paddingStart="8dp"> <!-- volume rows added and removed here! :-) --> + <LinearLayout + android:id="@+id/volume_row_container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginEnd="@dimen/volume_button_size" + android:orientation="vertical"/> <include layout="@layout/volume_zen_footer" /> @@ -49,4 +45,18 @@ <include layout="@layout/tuner_zen_mode_panel" /> </LinearLayout> + <com.android.keyguard.AlphaOptimizedImageButton + xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + android:id="@+id/volume_expand_button" + style="@style/VolumeButtons" + android:layout_width="@dimen/volume_button_size" + android:layout_height="@dimen/volume_button_size" + android:clickable="true" + android:soundEffectsEnabled="false" + android:src="@drawable/ic_volume_collapse_animation" + tools:ignore="RtlHardcoded" + android:layout_alignParentEnd="true" + android:layout_alignParentTop="true"/> + </RelativeLayout> diff --git a/packages/SystemUI/res/layout/volume_dialog_row.xml b/packages/SystemUI/res/layout/volume_dialog_row.xml index 91e931da1f3e..57bac4117e8d 100644 --- a/packages/SystemUI/res/layout/volume_dialog_row.xml +++ b/packages/SystemUI/res/layout/volume_dialog_row.xml @@ -13,13 +13,12 @@ See the License for the specific language governing permissions and limitations under the License. --> -<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" +<RelativeLayout + xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:clipChildren="false" - android:id="@+id/volume_dialog_row" - android:paddingEnd="8dp" - android:paddingStart="8dp" > + android:id="@+id/volume_dialog_row" > <TextView android:id="@+id/volume_row_header" @@ -31,7 +30,8 @@ android:paddingBottom="0dp" android:paddingEnd="12dp" android:paddingStart="12dp" - android:paddingTop="4dp" /> + android:paddingTop="4dp" + android:visibility="gone" /> <com.android.keyguard.AlphaOptimizedImageButton android:id="@+id/volume_row_icon" @@ -55,12 +55,4 @@ android:paddingEnd="8dp" android:paddingStart="8dp" /> - <com.android.keyguard.AlphaOptimizedImageButton - android:id="@+id/volume_settings_button" - style="@style/VolumeButtons" - android:layout_width="@dimen/volume_button_size" - android:layout_height="@dimen/volume_button_size" - android:layout_alignParentEnd="true" - android:layout_below="@id/volume_row_header" /> - </RelativeLayout>
\ No newline at end of file diff --git a/packages/SystemUI/res/layout/volume_zen_footer.xml b/packages/SystemUI/res/layout/volume_zen_footer.xml index 28447d772c86..f30023dc8ef4 100644 --- a/packages/SystemUI/res/layout/volume_zen_footer.xml +++ b/packages/SystemUI/res/layout/volume_zen_footer.xml @@ -32,9 +32,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" - android:orientation="horizontal" - android:paddingEnd="8dp" - android:paddingStart="8dp" > + android:orientation="horizontal" > <ImageView android:id="@+id/volume_zen_icon" diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index 8d37e74fd79c..5b8ebf444dbf 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Volkome\nstilte"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Net\nprioriteit"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Net\nwekkers"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Alles"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Alle\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Laai tans (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> tot vol)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Laai tans vinnig (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> tot vol)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Laai tans stadig (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> tot vol)"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Wys horlosiesekondes op die statusbalk. Sal batterylewe dalk beïnvloed."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Herrangskik Kitsinstellings"</string> <string name="show_brightness" msgid="6613930842805942519">"Wys helderheid in Kitsinstellings"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Aktiveer versneller om skerm te verdeel deur op te swiep"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Aktiveer die verdeling van die skerm deur op te swiep"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Aktiveer gebaar om skerm te verdeel deur van die Oorsig-knoppie af op te swiep"</string> <string name="experimental" msgid="6198182315536726162">"Eksperimenteel"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Skakel Bluetooth aan?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Verskyn vlugtig op die skerm en maak \'n geluid"</string> <string name="notification_more_settings" msgid="816306283396553571">"Meer instellings"</string> <string name="notification_done" msgid="5279426047273930175">"Klaar"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Normale kleure"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Aandkleure"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Gepasmaakte kleure"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Outo"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Onbekende kleure"</string> - <string name="color_transform" msgid="6985460408079086090">"Kleurverandering"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Wys kitsinstellings-teël"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Aktiveer gepasmaakte omskepping"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Kleur en voorkoms"</string> + <string name="night_mode" msgid="3540405868248625488">"Nagmodus"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Kalibreer skerm"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Aan"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Af"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Skakel outomaties aan"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Skakel oor na Nagmodus soos gepas vir ligging en tyd van die dag"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Wanneer Nagmodus aan is"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Gebruik donkertema vir Android-bedryfstelsel"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Verstel tint"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Verstel helderheid"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Die donkertema word toegepas op kernareas van Android-bedryfstelsel wat gewoonlik in \'n ligtema gewys word, soos instellings en kennisgewings."</string> <string name="color_apply" msgid="9212602012641034283">"Pas toe"</string> <string name="color_revert_title" msgid="4746666545480534663">"Bevestig instellings"</string> <string name="color_revert_message" msgid="9116001069397996691">"Sommige kleurinstellings kan hierdie toestel onbruikbaar maak. Klik OK om hierdie kleurinstellings te bevestig; andersins sal hierdie instellings ná 10 sekondes teruggestel word."</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Tuis"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Onlangs"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Terug"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Wys \'moenie steur nie\' in volume"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Laat volledige beheer van \'moenie steur nie\' toe in die volumedialoog."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume en Moenie steur nie"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Aktiveer \'moenie steur nie\' met volume af"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Wys saam met volumekontroles"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Moenie steur nie"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Volumeknoppieskortpad"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Verlaat \'moenie steur nie\' met volume op"</string> <string name="battery" msgid="7498329822413202973">"Battery"</string> <string name="clock" msgid="7416090374234785905">"Horlosie"</string> <string name="headset" msgid="4534219457597457353">"Kopstuk"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Oorfone is gekoppel"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Kopstuk is gekoppel"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Aktiveer of deaktiveer ikone om op die statusbalk gewys te word."</string> <string name="data_saver" msgid="5037565123367048522">"Databespaarder"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Databespaarder is aan"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Databespaarder is af"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Aan"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Af"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigasiebalk"</string> <string name="start" msgid="6873794757232879664">"Begin"</string> <string name="center" msgid="4327473927066010960">"Middel"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Voorskou"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Sleep om teëls by te voeg"</string> <string name="qs_edit" msgid="2232596095725105230">"Wysig"</string> + <string name="tuner_time" msgid="6572217313285536011">"Tyd"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Wys ure, minute en sekondes"</item> + <item msgid="1427801730816895300">"Wys ure en minute (verstek)"</item> + <item msgid="3830170141562534721">"Moenie hierdie ikoon wys nie"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Wys altyd persentasie"</item> + <item msgid="2139628951880142927">"Wys persentasie wanneer gelaai word (verstek)"</item> + <item msgid="3327323682209964956">"Moenie hierdie ikoon wys nie"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index 2b31ecea620f..f33d270086ad 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ማያ ገጽ መሰካት"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"ፈልግ"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>ን መጀመር አልተቻለም።"</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> በጥንቃቄ ሁነታ ውስጥ ታግዷል።"</string> <string name="recents_history_button_label" msgid="5153358867807604821">"ታሪክ"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"ጥረግ"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"አግድም ክፈል"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"ሙሉ ለሙሉ\nጸጥታ"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"ቅድሚያ ተሰጪ\nብቻ"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"ማንቂያዎች\nብቻ"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"ሁሉም"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"ሁሉም\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"ሃይል በመሙላት ላይ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> እስከሚሞላ ድረስ)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"ኃይል በፍጥነት በመሙላት ላይ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> እስከሚሞላ ድረስ)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"ኃይል በዝግታ በመሙላት ላይ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> እስከሚሞላ ድረስ)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"የሰዓት ሰከንዶችን በሁኔታ አሞሌ ውስጥ አሳይ። በባትሪ ዕድሜ ላይ ተጽዕኖ ሊኖርው ይችል ይሆናል።"</string> <string name="qs_rearrange" msgid="8060918697551068765">"ፈጣን ቅንብሮችን ዳግም ያደራጁ"</string> <string name="show_brightness" msgid="6613930842805942519">"በፈጣን ቅንብሮች ውስጥ ብሩህነትን አሳይ"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"የተከፈለ ማያ ገጽ ወደላይ አንሸራትቶ ማፍጠንን ያንቁ"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"የተከፈለ ማያ ገጽ ወደ ላይ የማንሸራተት ጣት ምልክትን ያንቁ"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"ከአጠቃላይ እይታ አዝራሩ ወደ ላይ በማንሸራተት ወደ የተከፈለ ማያ ገጽ የሚገቡበትን የጣት ምልክት ያንቁ"</string> <string name="experimental" msgid="6198182315536726162">"የሙከራ"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"ብሉቱዝ ይብራ?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"ወደ ገጸ ማያው ይመልከቱና ድምፅ ይቅረጹ"</string> <string name="notification_more_settings" msgid="816306283396553571">"ተጨማሪ ቅንብሮች"</string> <string name="notification_done" msgid="5279426047273930175">"ተከናውኗል"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"መደበኛ ቀለሞች"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"የለሊት ቀለሞች"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"ብጁ ቀለሞች"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"ራስ-ሰር"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"የማይታወቁ ቀለሞች"</string> - <string name="color_transform" msgid="6985460408079086090">"የቀለም ማሻሻያ"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"የፈጣን ቅንብሮች ሰቅን አሳይ"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"ብጁ ቅየራን አንቃ"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"ቀለም እና መልክ"</string> + <string name="night_mode" msgid="3540405868248625488">"የሌሊት ሁነታ"</string> + <string name="calibrate_display" msgid="5974642573432039217">"ማሳያን ይለኩ"</string> + <string name="night_mode_on" msgid="5597545513026541108">"በርቷል"</string> + <string name="night_mode_off" msgid="8035605276956057508">"ጠፍቷል"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"በራስ-ሰር አብራ"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"ለአካባቢው እና ለሰዓቱ ተገቢ በሆነ መልኩ ወደ የማታ ሁነታ ለውጥ"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"የማታ ሁነታ ሲበራ"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"ለAndroid ስርዓተ ክወና ጨለማ ገጽታን ተጠቀም"</string> + <string name="adjust_tint" msgid="3398569573231409878">"ቅልም አስተካክል"</string> + <string name="adjust_brightness" msgid="980039329808178246">"ብሩህነት አስተካክል"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"ጨለማ ገጽታው እንደ ቅንብሮች እና ማሳወቂያዎች ያሉ በመደበኛነት በብርሃን ገጽታ በሚታዩ የAndroid ስርዓተ ክወና ዋና ክፍሎች ላይ ይተገበራል።"</string> <string name="color_apply" msgid="9212602012641034283">"ተግብር"</string> <string name="color_revert_title" msgid="4746666545480534663">"ቅንብሮችን ያረጋግጡ"</string> <string name="color_revert_message" msgid="9116001069397996691">"አንዳንድ የቀለም ቅንብሮች ይህን መሣሪያ የማይጠቅም ሊያደርጉት ይችላሉ። እነዚህን የቀለም ቅንብሮች ለማረጋገጥ እሺ የሚለውን ጠቅ ያድርጉ፣ አለበለዚያ እነዚህ ቅንብሮች ከ10 ሰከንዶች በኋላ ዳግም ይጀምራሉ።"</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"የባትሪ አጠቃቀም"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"ኃይል በሚሞላበት ጊዜ ባትሪ ቆጣቢ አይገኝም"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"ባትሪ ቆጣቢ"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"አፈጻጸምን እና የጀርባ ውሂብን ይቀንሳል"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"መነሻ"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"የቅርብ ጊዜዎቹ"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"ተመለስ"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"በድምጽ ውስጥ አትረብሽን አሳይ"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"በድምጽ ንግግር ውስጥ አትረብሽን ሙሉ ቁጥጥር ይፍቀዱ።"</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"ድምጽ እና አትረብሽ"</string> - <string name="volume_down_silent" msgid="66962568467719591">"ድምጽ ሲቀነስ አትረብሽ አስገባ"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"ከድምፅ መቆጣጠሪያዎች ጋር አሳይ"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"አትረብሽ"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"የድምፅ አዝራሮች አቋራጭ"</string> <string name="volume_up_silent" msgid="7141255269783588286">"ድምጽ ሲጨመር አትረብሽን ትተህ ውጣ"</string> <string name="battery" msgid="7498329822413202973">"ባትሪ"</string> <string name="clock" msgid="7416090374234785905">"ሰዓት"</string> <string name="headset" msgid="4534219457597457353">"ጆሮ ማዳመጫ"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"የጆር ማዳመጫዎች ተገናኝተዋል"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"የጆሮ ማዳመጫ ተገናኝቷል"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"አዶዎች በሁኔታ አሞሌ ላይ እንዲታዩ ወይም እንዳይታዩ ያንቁ ወይም ያሰናክሉ።"</string> <string name="data_saver" msgid="5037565123367048522">"ውሂብ ቆጣቢ"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"ውሂብ ቆጣቢ በርቷል"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"ውሂብ ቆጣቢ ጠፍቷል"</string> <string name="switch_bar_on" msgid="1142437840752794229">"በርቷል"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"ጠፍቷል"</string> <string name="nav_bar" msgid="1993221402773877607">"የአሰሳ አሞሌ"</string> <string name="start" msgid="6873794757232879664">"ጀምር"</string> <string name="center" msgid="4327473927066010960">"መሃል"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"ቅድመ-እይታ"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"ሰቆችን ለማከል ይጎትቱ"</string> <string name="qs_edit" msgid="2232596095725105230">"አርትዕ"</string> + <string name="tuner_time" msgid="6572217313285536011">"ሰዓት"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"ሰዓቶችን፣ ደቂቃዎችን፣ ሴኮንዶችን አሳይ"</item> + <item msgid="1427801730816895300">"ሰዓቶችን እና ደቂቃዎችን አሳይ (ነባሪ)"</item> + <item msgid="3830170141562534721">"ይህን አዶ አታሳይ"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"ሁልጊዜ መቶኛ አሳይ"</item> + <item msgid="2139628951880142927">"የባትሪ ኃይል በሚሞላበት ጊዜ መቶኛ አሳይ (ነባሪ)"</item> + <item msgid="3327323682209964956">"ይህን አዶ አታሳይ"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index 1a1fc2b3c233..91a2bca82afa 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -305,8 +305,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"تثبيت الشاشة"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"بحث"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"تعذر بدء <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"تم تعطيل <xliff:g id="APP">%s</xliff:g> في الوضع الآمن."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"السجلّ"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"محو"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"تقسيم أفقي"</string> @@ -338,8 +337,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"كتم الصوت\nتمامًا"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"الأولوية \nفقط"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"التنبيهات\nفقط"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"الكل"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"الكل\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"جارٍ الشحن (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> حتى الامتلاء)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"جارٍ الشحن سريعًا (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> حتى الاكتمال)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"جارٍ الشحن ببطء (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> حتى الاكتمال)"</string> @@ -452,7 +449,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"عرض ثواني الساعة في شريط الحالة. قد يؤثر ذلك في عمر البطارية."</string> <string name="qs_rearrange" msgid="8060918697551068765">"إعادة ترتيب الإعدادات السريعة"</string> <string name="show_brightness" msgid="6613930842805942519">"عرض السطوع في الإعدادات السريعة"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"تمكين مسارع تقسيم الشاشة بالتمرير السريع لأعلى"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"تمكين إيماءة تقسيم الشاشة بالتمرير السريع لأعلى"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"تمكين الإيماء لإدخال تقسيم الشاشة من خلال التمرير السريع لأعلى من زر النظرة العامة"</string> <string name="experimental" msgid="6198182315536726162">"إعدادات تجريبية"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"تشغيل البلوتوث؟"</string> @@ -472,19 +469,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"الظهور سريعًا على الشاشة مع تنبيه صوتي"</string> <string name="notification_more_settings" msgid="816306283396553571">"المزيد من الإعدادات"</string> <string name="notification_done" msgid="5279426047273930175">"تم"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"ألوان عادية"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"ألوان ليلية"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"ألوان مخصصة"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"تلقائي"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"ألوان غير معروفة"</string> - <string name="color_transform" msgid="6985460408079086090">"إشعار الألوان"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"إظهار قسم الإعدادات السريعة"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"تمكين التحويل المخصص"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"اللون والمظهر"</string> + <string name="night_mode" msgid="3540405868248625488">"الوضع الليلي"</string> + <string name="calibrate_display" msgid="5974642573432039217">"معايرة الشاشة"</string> + <string name="night_mode_on" msgid="5597545513026541108">"تشغيل"</string> + <string name="night_mode_off" msgid="8035605276956057508">"إيقاف"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"التشغيل تلقائيًا"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"التبديل إلى الوضع الليلي بما يتناسب مع الموقع والوقت من اليوم"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"عند تشغيل الوضع الليلي"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"استخدام مظهر معتم لنظام التشغيل Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"ضبط التلوين الخفيف"</string> + <string name="adjust_brightness" msgid="980039329808178246">"ضبط السطوع"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"يتم تطبيق المظهر المعتم على المناطق الأساسية في نظام التشغيل Android والتي يتم عرضها عادة في مظهر مضيء، مثل الإعدادات والإشعارات."</string> <string name="color_apply" msgid="9212602012641034283">"تطبيق"</string> <string name="color_revert_title" msgid="4746666545480534663">"تأكيد الإعدادات"</string> <string name="color_revert_message" msgid="9116001069397996691">"يمكن أن تتسبب بعض إعدادات الألوان في تعطيل إمكانية استخدام الجهاز. يمكنك النقر على \"موافق\" لتأكيد إعدادات الألوان هذه، وإلا فستتم إعادة تعيين هذه الإعدادات بعد 10 ثوانٍ."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"استخدام البطارية"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"وضع توفير شحن البطارية غير متاح أثناء الشحن."</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"توفير شحن البطارية"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"لخفض مستوى الأداء وبيانات الخلفية"</string> @@ -492,21 +492,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"الشاشة الرئيسية"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"الأحدث"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"رجوع"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"إظهار خيار \"الرجاء عدم الإزعاج\" في مستوى الصوت"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"السماح بالتحكم الكامل في خيار \"الرجاء عدم الإزعاج\" ضمن مربع حوار مستوى الصوت."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"إعدادات مستوى الصوت و\"الرجاء عدم الإزعاج\""</string> - <string name="volume_down_silent" msgid="66962568467719591">"تشغيل \"الرجاء عدم الإزعاج\" عند خفض مستوى الصوت"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"عرض مع عناصر التحكم في مستوى الصوت"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"الرجاء عدم الإزعاج"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"اختصار أزرار مستوى الصوت"</string> <string name="volume_up_silent" msgid="7141255269783588286">"تعطيل \"الرجاء عدم الإزعاج\" عند رفع مستوى الصوت"</string> <string name="battery" msgid="7498329822413202973">"البطارية"</string> <string name="clock" msgid="7416090374234785905">"ساعة"</string> <string name="headset" msgid="4534219457597457353">"سماعة الرأس"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"تم توصيل سماعات رأس"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"تم توصيل سماعات رأس"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"يمكنك تمكين أو تعطيل الرموز بحيث لا تظهر في شريط الحالة."</string> <string name="data_saver" msgid="5037565123367048522">"توفير البيانات"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"تم تشغيل توفير البيانات"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"تم تعطيل توفير البيانات"</string> <string name="switch_bar_on" msgid="1142437840752794229">"تشغيل"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"إيقاف"</string> <string name="nav_bar" msgid="1993221402773877607">"شريط التنقل"</string> <string name="start" msgid="6873794757232879664">"البدء"</string> <string name="center" msgid="4327473927066010960">"وسط"</string> @@ -529,4 +528,15 @@ <string name="preview" msgid="9077832302472282938">"معاينة"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"اسحب لإضافة مربعات"</string> <string name="qs_edit" msgid="2232596095725105230">"تعديل"</string> + <string name="tuner_time" msgid="6572217313285536011">"الوقت"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"عرض الساعات والدقائق والثواني"</item> + <item msgid="1427801730816895300">"عرض الساعات والدقائق (افتراضي)"</item> + <item msgid="3830170141562534721">"عدم عرض هذا الرمز"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"عرض النسبة المئوية دائمًا"</item> + <item msgid="2139628951880142927">"عرض النسبة المئوية عند الشحن (افتراضي)"</item> + <item msgid="3327323682209964956">"عدم عرض هذا الرمز"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-az-rAZ/strings.xml b/packages/SystemUI/res/values-az-rAZ/strings.xml index 690317f7ef89..45aba36c093d 100644 --- a/packages/SystemUI/res/values-az-rAZ/strings.xml +++ b/packages/SystemUI/res/values-az-rAZ/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Tam\nsakitlik"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Yalnız\nprioritet"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Yalnız\nalarmlar"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Bütün"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Bütün\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Qidalanır (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> dolana kimi)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Sürətli qidalanır (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> dolana kimi)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Ləng qidalanır (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> dolana kimi)"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Saatın saniyəsini status panelində göstərin. Batareyaya təsir edə bilər."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Sürətli Ayarları yenidən tənzimləyin"</string> <string name="show_brightness" msgid="6613930842805942519">"Sürətli ayarlarda parlaqlılığı göstərin"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Bölünmüş ekran sürüşdürməsi akseleratorunu aktiv edin"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Bölünmüş ekran sürüşdürməsi aktiv edin"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Jestlərin icmal düyməsindən yuxarı sürüşdürərək bölünmüş ekrana daxil olmasını aktiv edin"</string> <string name="experimental" msgid="6198182315536726162">"Eksperimental"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth aktivləşsin?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Ekranda nəzər salın və səsli edin"</string> <string name="notification_more_settings" msgid="816306283396553571">"Daha çox ayar"</string> <string name="notification_done" msgid="5279426047273930175">"Hazırdır"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Normal rənglər"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Gecə rəngləri"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Xüsusi rənglər"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Avto"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Naməlum rəng"</string> - <string name="color_transform" msgid="6985460408079086090">"Rəng modifikasiyası"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Cəld ayarlar örtüyünü göstərin"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Xüsusi dəyişikliyi aktiv edin"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Rəng və görünüş"</string> + <string name="night_mode" msgid="3540405868248625488">"Gecə rejimi"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Ekranı kalibrləyin"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Aktiv"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Deaktiv"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Avtomatik aktivləşdirin"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Məkana və günün vaxtına uyğun olaraq Gecə Rejiminə keçin"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Gecə Rejimi aktiv olduqda"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS üçün tünd tema istifadə edin"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Çaları nizamlayın"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Parlaqlığı nizamlayın"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Tünd tema Android OS sisteminin adətən işıqlı tema göstərilən Ayarlar və bildirişlər kimi əsas sahələri üçün tətbiq edilir."</string> <string name="color_apply" msgid="9212602012641034283">"Tətbiq edin"</string> <string name="color_revert_title" msgid="4746666545480534663">"Ayarları təsdiq edin"</string> <string name="color_revert_message" msgid="9116001069397996691">"Bəzi renk ayarları bu cihazı yararsız edə bilər. Bu rənk ayarlarını təsdiq etmək üçün OK basın, əks halda bu ayarlar 10 saniyə sonra sıfırlanacaq."</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Əsas səhifə"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Sonuncular"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Geri"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Səsdə \"narahat etməyin\" rejimini göstərin"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Səs dioloqunda \"narahat etməyin\" rejiminin tam nərarətinə icazə verin."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Səs və \"narahat etməyin\" rejimi"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Aşağı səsdə \"narahat etməyin\" rejimini daxil edin"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Həcm nəzarəti ilə göstərin"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Narahat etməyin"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Səs düymələri qısayolu"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Yuxarı səsdə \"narahat etməyin\" rejimini daxil edin"</string> <string name="battery" msgid="7498329822413202973">"Batareya"</string> <string name="clock" msgid="7416090374234785905">"Saat"</string> <string name="headset" msgid="4534219457597457353">"Qulaqlıq"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Qulaqlıq qoşulub"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Qulaqlıq qoşulub"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"İkonaların status panelində görünməsini aktiv və ya deaktiv edin."</string> <string name="data_saver" msgid="5037565123367048522">"Data Qənaəti"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Data Qənaəti aktivdir"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Data Qənaəti deaktivdir"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Aktiv"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Deaktiv"</string> <string name="nav_bar" msgid="1993221402773877607">"Naviqasiya paneli"</string> <string name="start" msgid="6873794757232879664">"Başladın"</string> <string name="center" msgid="4327473927066010960">"Mərkəz"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Önizləmə"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Xanalar əlavə etmək üçün sürüşdürün"</string> <string name="qs_edit" msgid="2232596095725105230">"Redaktə edin"</string> + <string name="tuner_time" msgid="6572217313285536011">"Vaxt"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Saat, dəqiqə və saniyəni göstərin"</item> + <item msgid="1427801730816895300">"Saat və dəqiqəni göstərin (defolt)"</item> + <item msgid="3830170141562534721">"Bu piktoqramı göstərməyin"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Faizi həmişə göstərin"</item> + <item msgid="2139628951880142927">"Enerji dolan zaman faizi göstərin (defolt)"</item> + <item msgid="3327323682209964956">"Bu piktoqramı göstərməyin"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index 3ae995bb9d57..5494892e00c3 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -302,8 +302,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"kačenje ekrana"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"pretraži"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Pokretanje aplikacije <xliff:g id="APP">%s</xliff:g> nije uspelo."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Aplikacija <xliff:g id="APP">%s</xliff:g> je onemogućena u bezbednom režimu."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Istorija"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Obriši"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Podeli horizontalno"</string> @@ -335,8 +334,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Potpuna\ntišina"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Samo\npriorit. prekidi"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Samo\nalarmi"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Sve"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Svi\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Punjenje (pun je za <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Brzo se puni (napuniće se za <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Sporo se puni (napuniće se za <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -449,7 +446,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Sekunde na satu se prikazuju na statusnoj traci. To može da utiče na trajanje baterije."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Preuredi Brza podešavanja"</string> <string name="show_brightness" msgid="6613930842805942519">"Prikaži osvetljenost u Brzim podešavanjima"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Omogući ubrzavač za prevlačenje nagore za podeljeni ekran"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Omogući pokret za prevlačenje nagore za podeljeni ekran"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Omogućava pokret za prelazak na podeljeni ekran prevlačenjem nagore od dugmeta Pregled"</string> <string name="experimental" msgid="6198182315536726162">"Eksperimentalno"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Želite li da uključite Bluetooth?"</string> @@ -469,19 +466,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Nakratko se prikazuju na ekranu i emituje se zvuk"</string> <string name="notification_more_settings" msgid="816306283396553571">"Još podešavanja"</string> <string name="notification_done" msgid="5279426047273930175">"Gotovo"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Normalne boje"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Noćne boje"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Prilagođene boje"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automatski"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Nepoznate boje"</string> - <string name="color_transform" msgid="6985460408079086090">"Izmena boja"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Prikaži pločicu Brza podešavanja"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Omogući prilagođenu transformaciju"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Boja i izgled"</string> + <string name="night_mode" msgid="3540405868248625488">"Noćni režim"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Kalibrišite ekran"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Uključeno"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Isključeno"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Automatski uključi"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Pređite na noćni režim u zavisnosti od lokacije i doba dana"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Kada je noćni režim uključen"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Koristi tamnu temu za Android OS"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Prilagodi senku"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Prilagodi osvetljenost"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Tamna tema se primenjuje na ključne oblasti Android OS-a koje se obično prikazuju u svetloj temi, kao što su podešavanja i obaveštenja."</string> <string name="color_apply" msgid="9212602012641034283">"Primeni"</string> <string name="color_revert_title" msgid="4746666545480534663">"Potvrdite podešavanja"</string> <string name="color_revert_message" msgid="9116001069397996691">"Neka podešavanja boja mogu da učine uređaj neupotrebljivim. Kliknite na Potvrdi da biste potvrdili ova podešavanja boja, pošto će se u suprotnom ova podešavanja resetovati nakon 10 sekundi."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Potrošnja baterije"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Ušteda baterije nije dostupna tokom punjenja"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Ušteda baterije"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Smanjuje performanse i pozadinske podatke"</string> @@ -489,21 +489,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Početni"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Nedavni sadržaj"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Nazad"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Prikaži podešavanje Ne uznemiravaj u dijalogu za jačinu zvuka"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Dozvoljava potpunu kontrolu podešavanja Ne uznemiravaj u dijalogu za jačinu zvuka."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Jačina zvuka i Ne uznemiravaj"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Uđi u režim Ne uznemiravaj kada je zvuk utišan"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Prikaži sa kontrolama jačine zvuka"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Ne uznemiravaj"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Prečica za dugmad za jačinu zvuka"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Izađi iz režima Ne uznemiravaj kada je zvuk pojačan"</string> <string name="battery" msgid="7498329822413202973">"Baterija"</string> <string name="clock" msgid="7416090374234785905">"Sat"</string> <string name="headset" msgid="4534219457597457353">"Naglavne slušalice"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Slušalice su povezane"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Naglavne slušalice su povezane"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Omogućite ili onemogućite prikazivanje ikona na statusnoj traci."</string> <string name="data_saver" msgid="5037565123367048522">"Ušteda podataka"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Ušteda podataka je uključena"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Ušteda podataka je isključena"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Uključeno"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Isključeno"</string> <string name="nav_bar" msgid="1993221402773877607">"Traka za navigaciju"</string> <string name="start" msgid="6873794757232879664">"Pokreni"</string> <string name="center" msgid="4327473927066010960">"Centar"</string> @@ -526,4 +525,15 @@ <string name="preview" msgid="9077832302472282938">"Pregled"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Prevucite da biste dodali pločice"</string> <string name="qs_edit" msgid="2232596095725105230">"Izmeni"</string> + <string name="tuner_time" msgid="6572217313285536011">"Vreme"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Prikaži sate, minute i sekunde"</item> + <item msgid="1427801730816895300">"Prikaži sate i minute (podrazumevano)"</item> + <item msgid="3830170141562534721">"Ne prikazuj ovu ikonu"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Uvek prikazuj procenat"</item> + <item msgid="2139628951880142927">"Prikaži procenat tokom punjenja (podrazumevano)"</item> + <item msgid="3327323682209964956">"Ne prikazuj ovu ikonu"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index f407ac18d600..31a9e132abf5 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"фиксиране на екрана"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"търсене"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> не можа да стартира."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Приложението <xliff:g id="APP">%s</xliff:g> е деактивирано в безопасния режим."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"История"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Изчистване"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Хоризонтално разделяне"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Пълна\nтишина"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Само\nс приоритет"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Само\nбудилници"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Всички"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Всички\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Зарежда се (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до пълно зареждане)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Зарежда се бързо (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до пълно зареждане)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Зарежда се бавно (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до пълно зареждане)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Показване на секундите на часовника в лентата на състоянието. Може да се отрази на живота на батерията."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Пренареждане на бързите настройки"</string> <string name="show_brightness" msgid="6613930842805942519">"Показване на яркостта от бързите настройки"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Актив. на жеста за разделен екран с прек. на пръст нагоре"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Разделяне на екрана с прекарване на пръст нагоре: Активиране"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Активиране на жеста за влизане в режим на разделен екран чрез прокарване на пръст нагоре от бутона за общ преглед"</string> <string name="experimental" msgid="6198182315536726162">"Експериментални"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Да се включи ли Bluetooth?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Показване на екрана и издаване на звуков сигнал"</string> <string name="notification_more_settings" msgid="816306283396553571">"Още настройки"</string> <string name="notification_done" msgid="5279426047273930175">"Готово"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Нормални цветове"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Нощни цветове"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Персонализирани цветове"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Автоматично"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Неизвестни цветове"</string> - <string name="color_transform" msgid="6985460408079086090">"Промяна на цветовете"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Показване на плочката за бързи настройки"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Активиране на персонализираното трансформиране"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Цвят и облик"</string> + <string name="night_mode" msgid="3540405868248625488">"Нощен режим"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Калибриране на дисплея"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Вкл."</string> + <string name="night_mode_off" msgid="8035605276956057508">"Изкл."</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Автоматично включване"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Превключване към нощен режим според местоположението и часа от денонощието"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"При включен нощен режим"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Ползв. на тъмната тема за опер. с-ма Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Коригиране на нюансирането"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Коригиране на яркостта"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Тъмната темата ще се прилага за основните области на операционната система Android, които обикновено се показват в светлата тема, като например настройките и известията."</string> <string name="color_apply" msgid="9212602012641034283">"Прилагане"</string> <string name="color_revert_title" msgid="4746666545480534663">"Потвърждаване на настройките"</string> <string name="color_revert_message" msgid="9116001069397996691">"Някои настройки за цветовете могат да направят това устройство неизползваемо. За да ги потвърдите, кликнете върху „OK“. В противен случай те ще бъдат нулирани след 10 секунди."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Ползв. на батерията"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Режимът за запазване на батерията не е налице при зареждане"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Режим за запазване на батерията"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Намалява ефективността и данните на заден план"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Начало"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Скорошни"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Назад"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Показване на „Не безпокойте“ в прозореца за силата на звука"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Достъп до всички опции за управление на „Не безпокойте“ в диалоговия прозорец за силата на звука."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Сила на звука и „Не безпокойте“"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Вкл. на „Не безпокойте“ при намаляване на силата на звука"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Показване с контролите за силата на звука"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Не безпокойте"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Пряк път към бутоните за силата на звука"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Изкл. на „Не безпокойте“ при увеличаване на силата на звука"</string> <string name="battery" msgid="7498329822413202973">"Батерия"</string> <string name="clock" msgid="7416090374234785905">"Часовник"</string> <string name="headset" msgid="4534219457597457353">"Слушалки"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Слушалките (без микрофон) са свързани"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Слушалките са свързани"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Активиране или деактивиране на показването на икони в лентата на състоянието."</string> <string name="data_saver" msgid="5037565123367048522">"Икономия на данни"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Функцията „Икономия на данни“ е включена"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Функцията „Икономия на данни“ е изключена"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Вкл."</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Изкл."</string> <string name="nav_bar" msgid="1993221402773877607">"Лента за навигация"</string> <string name="start" msgid="6873794757232879664">"Начало"</string> <string name="center" msgid="4327473927066010960">"Център"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Визуализация"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Преместете с плъзгане, за да добавите плочки"</string> <string name="qs_edit" msgid="2232596095725105230">"Редактиране"</string> + <string name="tuner_time" msgid="6572217313285536011">"Час"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Показване на часовете, минутите и секундите"</item> + <item msgid="1427801730816895300">"Показване на часовете и минутите (по подразбиране)"</item> + <item msgid="3830170141562534721">"Тази икона да не се показва"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Процентът винаги да се показва"</item> + <item msgid="2139628951880142927">"Процентът да се показва при зареждане (по подразбиране)"</item> + <item msgid="3327323682209964956">"Тази икона да не се показва"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-bn-rBD/strings.xml b/packages/SystemUI/res/values-bn-rBD/strings.xml index 988e02ed879f..a54bf34c2131 100644 --- a/packages/SystemUI/res/values-bn-rBD/strings.xml +++ b/packages/SystemUI/res/values-bn-rBD/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"একদম\nনিরব"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"শুধুমাত্র\nঅগ্রাধিকার"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"শুধুমাত্র\nঅ্যালার্মগুলি"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"সমস্ত"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"সমস্ত\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"চার্জ হচ্ছে (পূর্ণ হতে <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> সময় বাকি)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"দ্রুত চার্জ হচ্ছে (পূর্ণ হতে <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> সময় বাকি)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"ধীরে ধীরে চার্জ হচ্ছে (পূর্ণ হতে <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> সময় বাকি)"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"স্থিতি দন্ডে ঘড়ির সেকেন্ড দেখায়৷ ব্যাটারি লাইফকে প্রভাবিত করতে পারে৷"</string> <string name="qs_rearrange" msgid="8060918697551068765">"দ্রুত সেটিংসে পুনরায় সাজান"</string> <string name="show_brightness" msgid="6613930842805942519">"দ্রুত সেটিংসে উজ্জ্বলতা দেখান"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"অ্যাকসেলেটর উপরের দিকে সোয়াইপ করে বিভক্ত-স্ক্রীন সক্ষম করুন"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"উপরের দিকে সোয়াইপ করে বিভক্ত-স্ক্রীনে প্রবেশ করার অঙ্গভঙ্গি সক্ষম করুন"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"\'এক নজরে\' বোতাম থেকে উপরের দিকে সোয়াইপ করে, বিভক্ত-স্ক্রীনে প্রবেশ করতে অঙ্গভঙ্গি সক্ষম করুন"</string> <string name="experimental" msgid="6198182315536726162">"পরীক্ষামূলক"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth চালু করবেন?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"স্ক্রীনের উপরে দেখানো হয় এবং শব্দ করে"</string> <string name="notification_more_settings" msgid="816306283396553571">"আরো সেটিংস"</string> <string name="notification_done" msgid="5279426047273930175">"সম্পন্ন"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"স্বাভাবিক রঙ"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"রাতের রঙ"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"কাস্টম রঙ"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"স্বয়ংক্রিয়ভাবে"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"অজানা রঙ"</string> - <string name="color_transform" msgid="6985460408079086090">"রঙ সংশোধন"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"দ্রুত সেটিংস টাইল দেখান"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"কাস্টম রূপান্তর সক্ষম করুন"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"রঙ এবং চেহারা"</string> + <string name="night_mode" msgid="3540405868248625488">"রাতের মোড"</string> + <string name="calibrate_display" msgid="5974642573432039217">"প্রদর্শন ক্যালিব্রেট করুন"</string> + <string name="night_mode_on" msgid="5597545513026541108">"চালু আছে"</string> + <string name="night_mode_off" msgid="8035605276956057508">"বন্ধ আছে"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"স্বয়ংক্রিয়ভাবে চালু করুন"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"অবস্থান এবং সময়ের হিসাবে উপযুক্ত রাতের মোডে পাল্টান"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"যখন রাতের মোড চালু থাকবে"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS এর জন্য গাঢ় থিম ব্যবহার করুন"</string> + <string name="adjust_tint" msgid="3398569573231409878">"টিন্ট সমন্বয় করুন"</string> + <string name="adjust_brightness" msgid="980039329808178246">"উজ্জ্বলতা সমন্বয় করুন"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Android OS এর মূল অংশগুলিতে গাঢ় থিম প্রয়োগ করা হয়েছে যেটা সাধারণত একটি হালকা থিমে প্রদর্শিত হয়, যেমন সেটিংস এবং বিজ্ঞপ্তিগুলি৷"</string> <string name="color_apply" msgid="9212602012641034283">"প্রয়োগ করুন"</string> <string name="color_revert_title" msgid="4746666545480534663">"সেটিংস নিশ্চিত করুন"</string> <string name="color_revert_message" msgid="9116001069397996691">"কিছু রঙের সেটিংস এই ডিভাইসকে ব্যবহারের অযোগ্য করে দিতে পারে৷ এই রঙের সেটিংস নিশ্চিত করতে ওকে এ ক্লিক করুন, অন্যথায় ১০ সেকেন্ড পরে এই সেটিংস পুনরায় সেট হবে৷"</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"হোম"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"সাম্প্রতিকগুলি"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"পিছনে"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"ভলিউমে \'বিরক্ত করবেন না\' দেখাবেন না"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"ভলিউম ডায়লগে \"বিরক্ত করবেন না\" এর পূর্ণ নিয়ন্ত্রণের মঞ্জুরি দিন৷"</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"ভলিউম এবং \'বিরক্ত করবেন না\'"</string> - <string name="volume_down_silent" msgid="66962568467719591">"ভলিউম কমানোর মাধ্যেমে \'বিরক্ত করবেন না\' চালু করুন"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"ভলিউম নিয়ন্ত্রণ সহ দেখান"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"বিরক্ত করবেন না"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"ভলিউম বোতামের শর্টকাট"</string> <string name="volume_up_silent" msgid="7141255269783588286">"ভলিউম বাড়ানোর মাধ্যেমে \'বিরক্ত করবেন না\' থেকে প্রস্থান করুন"</string> <string name="battery" msgid="7498329822413202973">"ব্যাটারি"</string> <string name="clock" msgid="7416090374234785905">"ঘড়ি"</string> <string name="headset" msgid="4534219457597457353">"হেডসেট"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"হেডফোনগুলি সংযুক্ত হয়েছে"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"হেডসেট সংযুক্ত হয়েছে"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"স্থিতি দন্ডে দেখানোর জন্য আইকনগুলিকে সক্ষম বা অক্ষম করুন৷"</string> <string name="data_saver" msgid="5037565123367048522">"ডেটা সেভার"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"ডেটা সেভার চালু আছে"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"ডেটা সেভার বন্ধ আছে"</string> <string name="switch_bar_on" msgid="1142437840752794229">"চালু আছে"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"বন্ধ আছে"</string> <string name="nav_bar" msgid="1993221402773877607">"নেভিগেশন দন্ড"</string> <string name="start" msgid="6873794757232879664">"শুরু করুন"</string> <string name="center" msgid="4327473927066010960">"কেন্দ্র"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"পূর্বরূপ দেখুন"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"টাইলগুলি যোগ করার জন্য টেনে আনুন"</string> <string name="qs_edit" msgid="2232596095725105230">"সম্পাদনা করুন"</string> + <string name="tuner_time" msgid="6572217313285536011">"সময়"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"ঘন্টা, মিনিট, এবং সেকেন্ড দেখান"</item> + <item msgid="1427801730816895300">"ঘন্টা এবং মিনিট দেখান (ডিফল্ট)"</item> + <item msgid="3830170141562534721">"এই আইকনটি দেখাবেন না"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"সর্বদা শতাংশ দেখান"</item> + <item msgid="2139628951880142927">"চার্জ করার সময় শতাংশ দেখান (ডিফল্ট)"</item> + <item msgid="3327323682209964956">"এই আইকনটি দেখাবেন না"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-bs-rBA/strings.xml b/packages/SystemUI/res/values-bs-rBA/strings.xml index 2be74a00c260..25e350d6c102 100644 --- a/packages/SystemUI/res/values-bs-rBA/strings.xml +++ b/packages/SystemUI/res/values-bs-rBA/strings.xml @@ -302,8 +302,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"kačenje ekrana"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"pretraga"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Aplikacija <xliff:g id="APP">%s</xliff:g> nije pokrenuta."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> je onemogućena u sigurnom načinu rada."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Historija"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Obriši"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Podjela po horizontali"</string> @@ -335,8 +334,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Potpuna\ntišina"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Samo\nprioritetni prekidi"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Samo\nalarmi"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Svi"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Svi \n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Punjenje (do kraja preostalo <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Brzo punjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do pune baterije)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Sporo punjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do pune baterije)"</string> @@ -449,7 +446,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Prikaži sekunde na statusnoj traci. Može skratiti trajanje baterije."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Preuredi \"Brze postavke\""</string> <string name="show_brightness" msgid="6613930842805942519">"Prikaži osvjetljenje u opciji \"Brze postavke\""</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Uključi akcelerator za dijeljenje ekrana prevlačenjem nagore"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Omogućiti potez za podjelu ekrana prevlačenjem prema gore"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Uključite pokrete prstima da biste ušli u podijeljeni ekran tako što ćete od dugmeta Pregled prevući prstom prema gore"</string> <string name="experimental" msgid="6198182315536726162">"Eksperimentalno"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Želiti li uključiti Bluetooth?"</string> @@ -469,19 +466,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Kratki prikaz na ekranu uz zvuk"</string> <string name="notification_more_settings" msgid="816306283396553571">"Više postavki"</string> <string name="notification_done" msgid="5279426047273930175">"Gotovo"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Standardne boje"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Boje za noćni rad"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Prilagođene boje"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automatski"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Nepoznate boje"</string> - <string name="color_transform" msgid="6985460408079086090">"Izmjena boja"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Prikaži polje \"Brze postavke\""</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Uključi prilagođenu transformaciju"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Boja i izgled"</string> + <string name="night_mode" msgid="3540405868248625488">"Noćni način rada"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Kalibracija zaslona"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Uključeno"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Isključeno"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Automatsko uključivanje"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Prebaciti u Noćni način rada u skladu sa lokacijom i dobom dana"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Kada je Noćni režim rada uključen"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Koristiti tamne teme za OS Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Prilagođavanje nijanse"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Podešavanje osvijetljenosti"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Tamna tema se primjenjuje na ključna područja OS Android koja se obično prikazuju uz svijetlu temu, kao što su Postavke i Obavještenja."</string> <string name="color_apply" msgid="9212602012641034283">"Prihvati"</string> <string name="color_revert_title" msgid="4746666545480534663">"Potvrdi postavke"</string> <string name="color_revert_message" msgid="9116001069397996691">"S nekim postavkama boja ovaj uređaj može biti neupotrebljiv. Kliknite U redu da biste potvrdili ove postavke boja ili sačekajte 10 sekundi da se postavke vrate na početnu vrijednost."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Upotreba baterije"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Ušteda baterije je isključena prilikom punjenja"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Ušteda baterije"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Ograničava rad i prijenos podataka u pozadini"</string> @@ -489,21 +489,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Početak"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Nedavni ekrani"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Nazad"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Prikaži režim Ne ometaj u dijalogu za jačinu zvuka."</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Dopusti punu kontrolu režima Ne ometaj u dijalogu za jačinu zvuka."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Jačina zvuka i režim Ne ometaj"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Aktiviraj režim Ne ometaj kada se zvuk utiša"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Prikazati sa kontrolama jačine zvuka"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Ne ometaj"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Prečica za dugmad za Jačinu zvuka"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Deaktiviraj režim Ne ometaj kada se zvuk pojača"</string> <string name="battery" msgid="7498329822413202973">"Baterija"</string> <string name="clock" msgid="7416090374234785905">"Sat"</string> <string name="headset" msgid="4534219457597457353">"Slušalice s mikrofonom"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Slušalice su priključene"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Slušalice s mikrofonom su priključene"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Uključite ili isključite prikaz ikona na statusnoj traci."</string> <string name="data_saver" msgid="5037565123367048522">"Ušteda podataka"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Ušteda podataka je uključena"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Ušteda podataka je isključena"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Uključeno"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Isključi"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigaciona traka"</string> <string name="start" msgid="6873794757232879664">"Početak"</string> <string name="center" msgid="4327473927066010960">"Sredina"</string> @@ -526,4 +525,15 @@ <string name="preview" msgid="9077832302472282938">"Pregledaj"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Povucite da biste dodali polja"</string> <string name="qs_edit" msgid="2232596095725105230">"Uredi"</string> + <string name="tuner_time" msgid="6572217313285536011">"Vrijeme"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Prikaži sate, minute i sekunde"</item> + <item msgid="1427801730816895300">"Prikaži sate i minute (zadano)"</item> + <item msgid="3830170141562534721">"Ne prikazuj ovu ikonu"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Uvijek prikaži postotak"</item> + <item msgid="2139628951880142927">"Pokaži postotak u toku punjenja (zadano)"</item> + <item msgid="3327323682209964956">"Ne prikazuj ovu ikonu"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 55ab02ad52ab..f5124a10867f 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fixació de pantalla"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"cerca"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"No s\'ha pogut iniciar <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"En mode segur, l\'aplicació <xliff:g id="APP">%s</xliff:g> està desactivada."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Historial"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Esborra"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisió horitzontal"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Silenci\ntotal"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Només\ninterr. prior."</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Només\nalarmes"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Totes"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Totes\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Carregant (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> per completar la càrrega)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Càrrega ràpida (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> per completar-se)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Càrrega lenta (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> per completar-se)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Mostra els segons del rellotge a la barra d\'estat. Això pot afectar la durada de la bateria."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Reorganitza Configuració ràpida"</string> <string name="show_brightness" msgid="6613930842805942519">"Mostra la brillantor a Configuració ràpida"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Activa la pantalla dividida en lliscar amunt"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Activa el gest per dividir la pantalla en lliscar cap amunt"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Activa el gest per entrar al mode de pantalla dividida en lliscar cap amunt des del botó Visió general"</string> <string name="experimental" msgid="6198182315536726162">"Experimental"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Vols activar el Bluetooth?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Mostra a la pantalla i emet un so"</string> <string name="notification_more_settings" msgid="816306283396553571">"Més opcions"</string> <string name="notification_done" msgid="5279426047273930175">"Fet"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Colors normals"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Colors nocturns"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Colors personalitzats"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automàtica"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Colors desconeguts"</string> - <string name="color_transform" msgid="6985460408079086090">"Modificació del color"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Mostra el mosaic de Configuració ràpida"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Activa la transformació personalitzada"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Color i aparença"</string> + <string name="night_mode" msgid="3540405868248625488">"Mode nocturn"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Calibra la pantalla"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Activat"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Desactivat"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Activa automàticament"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Canvia al mode nocturn d\'acord amb la ubicació i l\'hora del dia"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Quan el mode nocturn estigui activat"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Fes servir un tema fosc per a Android OS"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Ajusta el color"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Ajusta la brillantor"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"El mode nocturn s\'aplica a les àrees clau d\'Android OS que normalment es mostren amb un tema clar, com ara la configuració i les notificacions."</string> <string name="color_apply" msgid="9212602012641034283">"Aplica"</string> <string name="color_revert_title" msgid="4746666545480534663">"Confirma la configuració"</string> <string name="color_revert_message" msgid="9116001069397996691">"Algunes opcions de configuració de color poden deixar el dispositiu inservible. Fes clic a D\'acord per confirmar la configuració de color; en cas contrari, la configuració es restablirà al cap de 10 segons."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Ús de la bateria"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"La funció Estalvi de bateria no està disponible durant la càrrega"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Estalvi de bateria"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Redueix el rendiment i les dades en segon pla"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Inici"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recents"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Enrere"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Mostra el mode No molesteu al volum"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Permet el control complet del mode No molesteu al quadre de diàleg de volum."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volum i mode No molesteu"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Activa el mode No molesteu abaixant el volum"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Mostra amb els controls de volum"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"No molesteu"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Drecera per als botons de volum"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Desactiva el mode No molesteu apujant el volum"</string> <string name="battery" msgid="7498329822413202973">"Bateria"</string> <string name="clock" msgid="7416090374234785905">"Rellotge"</string> <string name="headset" msgid="4534219457597457353">"Auriculars"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Auriculars connectats"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Auriculars connectats"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Activa o desactiva les icones a la barra d\'estat."</string> <string name="data_saver" msgid="5037565123367048522">"Economitzador de dades"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"L\'extensió Economitzador de dades està activada"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"L\'extensió Economitzador de dades està desactivada"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Activat"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Desactivat"</string> <string name="nav_bar" msgid="1993221402773877607">"Barra de navegació"</string> <string name="start" msgid="6873794757232879664">"Inici"</string> <string name="center" msgid="4327473927066010960">"Centre"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Previsualització"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arrossega per afegir camps"</string> <string name="qs_edit" msgid="2232596095725105230">"Edita"</string> + <string name="tuner_time" msgid="6572217313285536011">"Hora"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Mostra les hores, els minuts i els segons"</item> + <item msgid="1427801730816895300">"Mostra les hores i els minuts (opció predeterminada)"</item> + <item msgid="3830170141562534721">"No mostris aquesta icona"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Mostra sempre el percentatge"</item> + <item msgid="2139628951880142927">"Mostra el percentatge quan es carregui (opció predeterminada)"</item> + <item msgid="3327323682209964956">"No mostris aquesta icona"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index a1423cb6d8ae..6d5f71753948 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -303,8 +303,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"připnutí obrazovky"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"vyhledat"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Aplikaci <xliff:g id="APP">%s</xliff:g> nelze spustit."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Aplikace <xliff:g id="APP">%s</xliff:g> je v nouzovém režimu zakázána."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Historie"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Vymazat"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Vodorovné rozdělení"</string> @@ -336,8 +335,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Úplné\nticho"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Pouze\nprioritní"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Pouze\nbudíky"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Vše"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Všechna\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Nabíjení (plně nabito za <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Rychlé nabíjení (plně nabito za <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Pomalé nabíjení (plně nabito za <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -450,7 +447,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Na stavovém řádku se bude zobrazovat sekundová ručička. Může být ovlivněna výdrž baterie."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Změnit uspořádání Rychlého nastavení"</string> <string name="show_brightness" msgid="6613930842805942519">"Zobrazit jas v Rychlém nastavení"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Aktivovat rozdělenou obrazovku přejetím prstem"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Aktivovat rozdělenou obrazovku přejetím prstem nahoru"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Umožňuje aktivovat rozdělenou obrazovku přejetím prstem nahoru od tlačítka Přehled."</string> <string name="experimental" msgid="6198182315536726162">"Experimentální"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Zapnout Bluetooth?"</string> @@ -470,19 +467,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Tato oznámení zobrazovat přímo na obrazovce a upozornit na ně zvukem"</string> <string name="notification_more_settings" msgid="816306283396553571">"Další nastavení"</string> <string name="notification_done" msgid="5279426047273930175">"Hotovo"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Normální barvy"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Noční barvy"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Vlastní barvy"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automaticky"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Neznámé barvy"</string> - <string name="color_transform" msgid="6985460408079086090">"Změna barev"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Zobrazit dlaždici Rychlé nastavení"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Umožnit převod na vlastní barvy"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Barva a vzhled"</string> + <string name="night_mode" msgid="3540405868248625488">"Noční režim"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Kalibrovat displej"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Zapnuto"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Vypnuto"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Zapnout automaticky"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Přejít do nočního režimu automaticky na základě místa a denní doby"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Když je noční režim zapnutý"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Použít v systému Android tmavý motiv"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Upravit tónování"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Upravit jas"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"V hlavních oblastech systému Android, které jsou běžně zobrazovány ve světlém motivu (například Nastavení nebo oznámení), se použije tmavý motiv."</string> <string name="color_apply" msgid="9212602012641034283">"Použít"</string> <string name="color_revert_title" msgid="4746666545480534663">"Ověření nastavení"</string> <string name="color_revert_message" msgid="9116001069397996691">"Některá nastavení barev mohou způsobit, že zařízení nebude použitelné. Kliknutím na OK toto nastavení barev potvrdíte, v opačném případě se nastavení po 10 sekundách resetuje."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Využití baterie"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Spořič baterie při nabíjení není k dispozici."</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Spořič baterie"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Omezuje výkon a data na pozadí"</string> @@ -490,21 +490,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Plocha"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Poslední"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Zpět"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Zobrazovat panel Nerušit v dialogu Hlasitost"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Umožňuje povolit úplné ovládání režimu Nerušit v dialogu Hlasitost."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Hlasitost a režim Nerušit"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Při snížení hlasitosti přejít do režimu Nerušit"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Zobrazit včetně ovládacích prvků hlasitosti"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Nerušit"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Zkratka tlačítek hlasitosti"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Při zvýšení hlasitosti ukončit režim Nerušit"</string> <string name="battery" msgid="7498329822413202973">"Baterie"</string> <string name="clock" msgid="7416090374234785905">"Hodiny"</string> <string name="headset" msgid="4534219457597457353">"Náhlavní souprava"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Sluchátka připojena"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Náhlavní souprava připojena"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Umožňuje aktivovat nebo deaktivovat zobrazení ikon na stavovém řádku."</string> <string name="data_saver" msgid="5037565123367048522">"Spořič dat"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Spořič dat je zapnutý"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Spořič dat je vypnutý"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Zapnuto"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Vypnuto"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigační panel"</string> <string name="start" msgid="6873794757232879664">"Začátek"</string> <string name="center" msgid="4327473927066010960">"Střed"</string> @@ -527,4 +526,15 @@ <string name="preview" msgid="9077832302472282938">"Náhled"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Dlaždice přidáte přetažením"</string> <string name="qs_edit" msgid="2232596095725105230">"Upravit"</string> + <string name="tuner_time" msgid="6572217313285536011">"Čas"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Zobrazovat hodiny, minuty a sekundy"</item> + <item msgid="1427801730816895300">"Zobrazovat hodiny a minuty (výchozí nastavení)"</item> + <item msgid="3830170141562534721">"Tuto ikonu nezobrazovat"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Vždy zobrazovat procento"</item> + <item msgid="2139628951880142927">"Zobrazovat procento při nabíjení (výchozí nastavení)"</item> + <item msgid="3327323682209964956">"Tuto ikonu nezobrazovat"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index b509dfacfeb2..04893c7a7150 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Total\nstilhed"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Kun\nprioritet"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Kun\nalarmer"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Alle"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Alle\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Oplader (fuldt opladet om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Hurtig opladning (fuldt opladet om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Langsom opladning (fuldt opladet om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Vis sekunder i statuslinjen. Dette kan påvirke batteriets levetid."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Omarranger Hurtige indstillinger"</string> <string name="show_brightness" msgid="6613930842805942519">"Vis lysstyrke i Hurtige indstillinger"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Aktivér bevægelsen stryg opad for at dele skærmen"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Aktivér bevægelsen Stryg opad for at dele skærmen"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Aktivér bevægelse for at dele skærmen ved at stryge opad fra knappen Oversigt"</string> <string name="experimental" msgid="6198182315536726162">"Eksperimentel"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Vil du slå Bluetooth til?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Vis på skærmen, og giv lyd"</string> <string name="notification_more_settings" msgid="816306283396553571">"Flere indstillinger"</string> <string name="notification_done" msgid="5279426047273930175">"Færdig"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Almindelige farver"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Nattefarver"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Tilpassede farver"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automatisk"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Ukendte farver"</string> - <string name="color_transform" msgid="6985460408079086090">"Farveændring"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Vis feltet Hurtige indstillinger"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Aktivér tilpasset farveændring"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Farve og udseende"</string> + <string name="night_mode" msgid="3540405868248625488">"Nattilstand"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Kalibrer skærmen"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Til"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Fra"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Slå automatisk til"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Skift til natfunktion alt efter stedet og tidspunktet"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Når natfunktion er slået til"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Brug mørkt tema til Android OS"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Juster farvetonen"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Juster lysstyrken"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Det mørke tema anvendes på centrale områder i Android OS, der normalt vises med lyst tema, f.eks. Indstilinger og underretninger."</string> <string name="color_apply" msgid="9212602012641034283">"Anvend"</string> <string name="color_revert_title" msgid="4746666545480534663">"Bekræft indstillingerne"</string> <string name="color_revert_message" msgid="9116001069397996691">"Nogle farveindstillinger kan medføre, at du ikke kan bruge enheden. Klik på OK for at bekræfte disse farveindstillinger. Ellers nulstilles disse indstillinger efter ti sekunder."</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Start"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Seneste"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Tilbage"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Vis Forstyr ikke i Lydstyrke"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Tillad fuld kontrol over Forstyr ikke i dialogboksen Lydstyrke."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Lydstyrke og Forstyr ikke"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Aktivér Forstyr ikke med Lydstyrke ned"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Vis med lydstyrkeregulering"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Forstyr ikke"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Genvej til lydstyrkeknapper"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Afslut Forstyr ikke med Lydstyrke op"</string> <string name="battery" msgid="7498329822413202973">"Batteri"</string> <string name="clock" msgid="7416090374234785905">"Ur"</string> <string name="headset" msgid="4534219457597457353">"Headset"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Hovedtelefoner er tilsluttet"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Headset er forbundet"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Slå visning af ikoner i statusbjælken til eller fra."</string> <string name="data_saver" msgid="5037565123367048522">"Datasparefunktion"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Datasparefunktionen er slået til"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Datasparefunktionen er slået fra"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Til"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Fra"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigationslinje"</string> <string name="start" msgid="6873794757232879664">"Start"</string> <string name="center" msgid="4327473927066010960">"I midten"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Eksempelvisning"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Træk for at tilføje felter"</string> <string name="qs_edit" msgid="2232596095725105230">"Rediger"</string> + <string name="tuner_time" msgid="6572217313285536011">"Tid"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Vis timer, minutter og sekunder"</item> + <item msgid="1427801730816895300">"Vis timer og minutter (standard)"</item> + <item msgid="3830170141562534721">"Vis ikke dette ikon"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Vis altid procent"</item> + <item msgid="2139628951880142927">"Vis procent ved opladning (standard)"</item> + <item msgid="3327323682209964956">"Vis ikke dette ikon"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 541f03eac05e..c1619bfc4657 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"Bildschirmfixierung"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"Suche"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> konnte nicht gestartet werden."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> ist im abgesicherten Modus deaktiviert."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Verlauf"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Löschen"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Geteilte Schaltfläche – horizontal"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Laut-\nlos"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Nur\nwichtige"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Nur\nWecker"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Alle"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Alle\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Wird aufgeladen (voll in <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Wird schnell aufgeladen (voll in <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Wird langsam aufgeladen (voll in <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Uhrsekunden in der Statusleiste anzeigen. Kann sich auf die Akkulaufzeit auswirken."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Schnelleinstellungen neu anordnen"</string> <string name="show_brightness" msgid="6613930842805942519">"Helligkeit in den Schnelleinstellungen anzeigen"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Teilen des Bildschirms durch Wischen nach oben aktivieren"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Teilen des Bildschirms durch Wischen nach oben aktivieren"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Aktiviert die Bewegung zum Teilen des Bildschirms, bei der von der Schaltfläche \"Übersicht\" nach oben gewischt wird"</string> <string name="experimental" msgid="6198182315536726162">"Experimentell"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth aktivieren?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Mit Ton auf dem Display einblenden"</string> <string name="notification_more_settings" msgid="816306283396553571">"Weitere Einstellungen"</string> <string name="notification_done" msgid="5279426047273930175">"Fertig"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Standardfarben"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Nachtfarben"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Benutzerdefinierte Farben"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automatisch"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Unbekannte Farben"</string> - <string name="color_transform" msgid="6985460408079086090">"Farben ändern"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Kachel \"Schnelleinstellungen\" anzeigen"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Benutzerdefinierte Anpassung aktivieren"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Farbe und Darstellung"</string> + <string name="night_mode" msgid="3540405868248625488">"Nachtmodus"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Bildschirm kalibrieren"</string> + <string name="night_mode_on" msgid="5597545513026541108">"An"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Aus"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Automatisch aktivieren"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Abhängig von Standort und Tageszeit in den Nachtmodus wechseln"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Bei aktiviertem Nachtmodus"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Dunkles Design unter Android OS verwenden"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Farbton anpassen"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Helligkeit anpassen"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Das dunkle Design wird unter Android OS in allen Hauptbereichen übernommen, die normalerweise hell dargestellt werden, wie beispielsweise Einstellungen und Benachrichtigungen."</string> <string name="color_apply" msgid="9212602012641034283">"Übernehmen"</string> <string name="color_revert_title" msgid="4746666545480534663">"Einstellungen bestätigen"</string> <string name="color_revert_message" msgid="9116001069397996691">"Einige Farbeinstellungen können dazu führen, dass das Gerät nicht mehr genutzt werden kann. Klicke auf \"OK\", um diese Farbeinstellungen zu bestätigen. Anderenfalls werden diese Einstellungen in 10 Sekunden zurückgesetzt."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Akkunutzung"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Der Energiesparmodus ist beim Aufladen nicht verfügbar."</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Energiesparmodus"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduzierung der Leistung und Hintergrunddaten"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Startseite"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Letzte"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Zurück"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"\"Bitte nicht stören\" bei der Lautstärkeregelung anzeigen"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Volle Kontrolle von \"Bitte nicht stören\" im kleinen Fenster zur Lautstärkeregelung erlauben."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Lautstärke und \"Bitte nicht stören\""</string> - <string name="volume_down_silent" msgid="66962568467719591">"\"Bitte nicht stören\" bei \"Leiser\" aktivieren"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Einschließlich Lautstärkeregler anzeigen"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Bitte nicht stören"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Tastenkombination für Lautstärketasten"</string> <string name="volume_up_silent" msgid="7141255269783588286">"\"Bitte nicht stören\" bei \"Lauter\" deaktivieren"</string> <string name="battery" msgid="7498329822413202973">"Akku"</string> <string name="clock" msgid="7416090374234785905">"Uhr"</string> <string name="headset" msgid="4534219457597457353">"Headset"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Mit Kopfhörer verbunden"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Mit Headset verbunden"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Symbole in der Statusleiste ein- bzw. ausblenden"</string> <string name="data_saver" msgid="5037565123367048522">"Datenkomprimierung"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Datenkomprimierung aktiviert"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Datenkomprimierung deaktiviert"</string> <string name="switch_bar_on" msgid="1142437840752794229">"An"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Aus"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigationsleiste"</string> <string name="start" msgid="6873794757232879664">"Beim Start"</string> <string name="center" msgid="4327473927066010960">"Mitte"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Vorschau"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Zum Hinzufügen von Kacheln ziehen"</string> <string name="qs_edit" msgid="2232596095725105230">"Bearbeiten"</string> + <string name="tuner_time" msgid="6572217313285536011">"Uhrzeit"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Stunden, Minuten und Sekunden anzeigen"</item> + <item msgid="1427801730816895300">"Stunden und Minuten anzeigen (Standardeinstellung)"</item> + <item msgid="3830170141562534721">"Dieses Symbol nicht anzeigen"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Prozentwert immer anzeigen"</item> + <item msgid="2139628951880142927">"Prozentwert beim Laden anzeigen (Standardeinstellung)"</item> + <item msgid="3327323682209964956">"Dieses Symbol nicht anzeigen"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index ca354dc7cb6e..f6ed4bc2fc57 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"καρφίτσωμα οθόνης"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"αναζήτηση"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Δεν ήταν δυνατή η εκκίνηση της εφαρμογής <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Η εφαρμογή <xliff:g id="APP">%s</xliff:g> έχει απενεργοποιηθεί στην ασφαλή λειτουργία."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Ιστορικό"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Εκκαθάριση"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Οριζόντιος διαχωρισμός"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Πλήρης\nσίγαση"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Μόνο\nπροτεραιότητας"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Μόνο\nειδοποιήσεις"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Όλα"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Όλες\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Φόρτιση (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> για πλήρη φόρτιση)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Γρήγορη φόρτιση (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> για πλήρη φόρτιση)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Αργή φόρτιση (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> για πλήρη φόρτιση)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Εμφάνιση δευτερολέπτων ρολογιού στη γραμμή κατάστασης. Ενδέχεται να επηρεάσει τη διάρκεια ζωής της μπαταρίας."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Αναδιάταξη Γρήγορων ρυθμίσεων"</string> <string name="show_brightness" msgid="6613930842805942519">"Εμφάνιση φωτεινότητας στις Γρήγορες ρυθμίσεις"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Ενεργοποίηση επιτάχυνσης ολίσθησης επάνω για διαχωρισμό οθόνης"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Ενεργοποίηση κίνησης ολίσθησης επάνω για διαχωρισμό οθόνης"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Ενεργοποίηση κίνησης για μετάβαση σε διαχωρισμό οθόνης μέσω ολίσθησης επάνω από το κουμπί \"Επισκόπηση\""</string> <string name="experimental" msgid="6198182315536726162">"Σε πειραματικό στάδιο"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Ενεργοποίηση Bluetooth;"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Να προβάλλονται στην οθόνη και να συνοδεύονται από κάποιον ήχο"</string> <string name="notification_more_settings" msgid="816306283396553571">"Περισσότερες ρυθμίσεις"</string> <string name="notification_done" msgid="5279426047273930175">"Τέλος"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Κανονικά χρώματα"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Νυχτερινά χρώματα"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Προσαρμοσμένα χρώματα"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Αυτόματο"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Άγνωστα χρώματα"</string> - <string name="color_transform" msgid="6985460408079086090">"Τροποποίηση χρωμάτων"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Εμφάνιση πλακιδίου Γρήγορων ρυθμίσεων"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Ενεργοποίηση προσαρμοσμένου μετασχηματισμού"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Χρώμα και εμφάνιση"</string> + <string name="night_mode" msgid="3540405868248625488">"Νυχτερινή λειτουργία"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Βαθμονόμηση οθόνης"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Ενεργή"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Ανενεργή"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Αυτόματη ενεργοποίηση"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Αλλαγή σε νυχτερινή λειτουργία όπως απαιτείται βάσει τοποθεσίας και ώρας της ημέρας"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Όταν είναι ενεργή η νυχτερινή λειτουργία"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Χρήση σκοτεινού θέματος για Android OS"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Ρύθμιση απόχρωσης"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Ρύθμιση φωτεινότητας"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Το σκούρο θέμα εφαρμόζεται σε βασικές περιοχές του λειτουργικού συστήματος Android οι οποίες συνήθως εμφανίζονται με φωτεινό θέμα, όπως οι Ρυθμίσεις και οι ειδοποιήσεις."</string> <string name="color_apply" msgid="9212602012641034283">"Εφαρμογή"</string> <string name="color_revert_title" msgid="4746666545480534663">"Επιβεβαίωση ρυθμίσεων"</string> <string name="color_revert_message" msgid="9116001069397996691">"Ορισμένες ρυθμίσεις χρωμάτων μπορεί να μην επιτρέπουν τη χρήση αυτής της συσκευής. Κάντε κλικ στην επιλογή OK για να επιβεβαιώσετε αυτές τις ρυθμίσεις χρωμάτων, διαφορετικά θα γίνει επαναφορά αυτών των ρυθμίσεων μετά από 10 δευτερόλεπτα."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Χρήση της μπαταρίας"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Η εξοικονόμηση μπαταρίας δεν είναι διαθέσιμη κατά τη διάρκεια της φόρτισης"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Εξοικονόμηση μπαταρίας"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Μειώνει την απόδοση και τα δεδομένα παρασκηνίου"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Αρχική οθόνη"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Πρόσφατα"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Πίσω"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Εμφάνιση λειτουργίας \"Μην ενοχλείτε\" στην ένταση ήχου"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Να επιτρέπεται ο πλήρης έλεγχος της λειτουργίας \"Μην ενοχλείτε\" στο παράθυρο διαλόγου ελέγχου έντασης."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Ένταση ήχου και λειτουργία \"Μην ενοχλείτε\""</string> - <string name="volume_down_silent" msgid="66962568467719591">"Ενεργοποίηση λειτουργίας \"Μην ενοχλείτε\" κατά τη μείωση της έντασης ήχου"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Εμφάνιση με στοιχεία ελέγχου έντασης ήχου"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Μην ενοχλείτε"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Συντόμευση κουμπιών έντασης ήχου"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Απενεργοποίηση λειτουργίας \"Μην ενοχλείτε\" κατά την αύξηση της έντασης ήχου"</string> <string name="battery" msgid="7498329822413202973">"Μπαταρία"</string> <string name="clock" msgid="7416090374234785905">"Ρολόι"</string> <string name="headset" msgid="4534219457597457353">"Ακουστικά"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Τα ακουστικά συνδέθηκαν"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Τα ακουστικά συνδέθηκαν"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Ενεργοποίηση ή απενεργοποίηση εμφάνιση εικονιδίων στη γραμμή κατάστασης."</string> <string name="data_saver" msgid="5037565123367048522">"Εξοικονόμηση δεδομένων"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Η Εξοικονόμηση δεδομένων είναι ενεργοποιημένη"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Η Εξοικονόμηση δεδομένων είναι απενεργοποιημένη"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Ενεργή"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Απενεργοποίηση"</string> <string name="nav_bar" msgid="1993221402773877607">"Γραμμή πλοήγησης"</string> <string name="start" msgid="6873794757232879664">"Έναρξη"</string> <string name="center" msgid="4327473927066010960">"Κέντρο"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Προεπισκόπηση"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Σύρετε για να προσθέσετε πλακίδια"</string> <string name="qs_edit" msgid="2232596095725105230">"Επεξεργασία"</string> + <string name="tuner_time" msgid="6572217313285536011">"Ώρα"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Να εμφανίζονται ώρες, λεπτά και δευτερόλεπτα"</item> + <item msgid="1427801730816895300">"Να εμφανίζονται ώρες και λεπτά (προεπιλογή)"</item> + <item msgid="3830170141562534721">"Να μην εμφανίζεται αυτό το εικονίδιο"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Να εμφανίζεται πάντα ποσοστό"</item> + <item msgid="2139628951880142927">"Να εμφανίζεται ποσοστό κατά τη φόρτιση (προεπιλογή)"</item> + <item msgid="3327323682209964956">"Να μην εμφανίζεται αυτό το εικονίδιο"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index 14f930192857..bdc4bdb39f61 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Total\nsilence"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Priority\nonly"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alarms\nonly"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"All"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"All\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charging (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Charging rapidly (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Charging slowly (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Show clock seconds in the status bar. May impact battery life."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Rearrange Quick Settings"</string> <string name="show_brightness" msgid="6613930842805942519">"Show brightness in Quick Settings"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Enable split-screen swipe-up accelerator"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Enable split-screen swipe-up gesture"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Enable gesture to enter split-screen by swiping up from the Overview button"</string> <string name="experimental" msgid="6198182315536726162">"Experimental"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Turn on Bluetooth?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Peek onto the screen and make sound"</string> <string name="notification_more_settings" msgid="816306283396553571">"More settings"</string> <string name="notification_done" msgid="5279426047273930175">"Finished"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Normal colours"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Night colours"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Customised colours"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Auto"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Unknown colours"</string> - <string name="color_transform" msgid="6985460408079086090">"Colour modification"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Show Quick Settings tile"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Enable customised transform"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Colour and appearance"</string> + <string name="night_mode" msgid="3540405868248625488">"Night mode"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Calibrate display"</string> + <string name="night_mode_on" msgid="5597545513026541108">"On"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Off"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Turn on automatically"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Switch into Night Mode as appropriate for location and time of day"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"When Night Mode is on"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Use dark theme for Android OS"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Adjust tint"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Adjust brightness"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"The dark theme is applied to core areas of Android OS that are normally displayed in a light theme, such as Settings and notifications."</string> <string name="color_apply" msgid="9212602012641034283">"Apply"</string> <string name="color_revert_title" msgid="4746666545480534663">"Confirm Settings"</string> <string name="color_revert_message" msgid="9116001069397996691">"Some colour settings can make this device unusable. Click OK to confirm these colour settings, otherwise these settings will reset after 10 seconds."</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Home"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recent"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Back"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Show Do Not Disturb in volume"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Allow full control of Do Not Disturb in the volume dialogue."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume and Do Not Disturb"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Enter Do Not Disturb on volume down"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Show with volume controls"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Do not disturb"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Volume buttons shortcut"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Exit Do Not Disturb on volume up"</string> <string name="battery" msgid="7498329822413202973">"Battery"</string> <string name="clock" msgid="7416090374234785905">"Clock"</string> <string name="headset" msgid="4534219457597457353">"Headset"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Headphones connected"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Headset connected"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Enable or disable icons from being shown in the status bar."</string> <string name="data_saver" msgid="5037565123367048522">"Data Saver"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Data Saver is on"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Data Saver is off"</string> <string name="switch_bar_on" msgid="1142437840752794229">"On"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Off"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigation bar"</string> <string name="start" msgid="6873794757232879664">"Start"</string> <string name="center" msgid="4327473927066010960">"Centre"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Preview"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Drag to add tiles"</string> <string name="qs_edit" msgid="2232596095725105230">"(edit)"</string> + <string name="tuner_time" msgid="6572217313285536011">"Time"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Show hours, minutes and seconds"</item> + <item msgid="1427801730816895300">"Show hours and minutes (default)"</item> + <item msgid="3830170141562534721">"Don\'t show this icon"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Always show percentage"</item> + <item msgid="2139628951880142927">"Show percentage when charging (default)"</item> + <item msgid="3327323682209964956">"Don\'t show this icon"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index 14f930192857..bdc4bdb39f61 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Total\nsilence"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Priority\nonly"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alarms\nonly"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"All"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"All\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charging (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Charging rapidly (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Charging slowly (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Show clock seconds in the status bar. May impact battery life."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Rearrange Quick Settings"</string> <string name="show_brightness" msgid="6613930842805942519">"Show brightness in Quick Settings"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Enable split-screen swipe-up accelerator"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Enable split-screen swipe-up gesture"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Enable gesture to enter split-screen by swiping up from the Overview button"</string> <string name="experimental" msgid="6198182315536726162">"Experimental"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Turn on Bluetooth?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Peek onto the screen and make sound"</string> <string name="notification_more_settings" msgid="816306283396553571">"More settings"</string> <string name="notification_done" msgid="5279426047273930175">"Finished"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Normal colours"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Night colours"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Customised colours"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Auto"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Unknown colours"</string> - <string name="color_transform" msgid="6985460408079086090">"Colour modification"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Show Quick Settings tile"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Enable customised transform"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Colour and appearance"</string> + <string name="night_mode" msgid="3540405868248625488">"Night mode"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Calibrate display"</string> + <string name="night_mode_on" msgid="5597545513026541108">"On"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Off"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Turn on automatically"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Switch into Night Mode as appropriate for location and time of day"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"When Night Mode is on"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Use dark theme for Android OS"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Adjust tint"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Adjust brightness"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"The dark theme is applied to core areas of Android OS that are normally displayed in a light theme, such as Settings and notifications."</string> <string name="color_apply" msgid="9212602012641034283">"Apply"</string> <string name="color_revert_title" msgid="4746666545480534663">"Confirm Settings"</string> <string name="color_revert_message" msgid="9116001069397996691">"Some colour settings can make this device unusable. Click OK to confirm these colour settings, otherwise these settings will reset after 10 seconds."</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Home"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recent"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Back"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Show Do Not Disturb in volume"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Allow full control of Do Not Disturb in the volume dialogue."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume and Do Not Disturb"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Enter Do Not Disturb on volume down"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Show with volume controls"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Do not disturb"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Volume buttons shortcut"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Exit Do Not Disturb on volume up"</string> <string name="battery" msgid="7498329822413202973">"Battery"</string> <string name="clock" msgid="7416090374234785905">"Clock"</string> <string name="headset" msgid="4534219457597457353">"Headset"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Headphones connected"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Headset connected"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Enable or disable icons from being shown in the status bar."</string> <string name="data_saver" msgid="5037565123367048522">"Data Saver"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Data Saver is on"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Data Saver is off"</string> <string name="switch_bar_on" msgid="1142437840752794229">"On"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Off"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigation bar"</string> <string name="start" msgid="6873794757232879664">"Start"</string> <string name="center" msgid="4327473927066010960">"Centre"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Preview"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Drag to add tiles"</string> <string name="qs_edit" msgid="2232596095725105230">"(edit)"</string> + <string name="tuner_time" msgid="6572217313285536011">"Time"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Show hours, minutes and seconds"</item> + <item msgid="1427801730816895300">"Show hours and minutes (default)"</item> + <item msgid="3830170141562534721">"Don\'t show this icon"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Always show percentage"</item> + <item msgid="2139628951880142927">"Show percentage when charging (default)"</item> + <item msgid="3327323682209964956">"Don\'t show this icon"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index 14f930192857..bdc4bdb39f61 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Total\nsilence"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Priority\nonly"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alarms\nonly"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"All"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"All\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charging (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Charging rapidly (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Charging slowly (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> until full)"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Show clock seconds in the status bar. May impact battery life."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Rearrange Quick Settings"</string> <string name="show_brightness" msgid="6613930842805942519">"Show brightness in Quick Settings"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Enable split-screen swipe-up accelerator"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Enable split-screen swipe-up gesture"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Enable gesture to enter split-screen by swiping up from the Overview button"</string> <string name="experimental" msgid="6198182315536726162">"Experimental"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Turn on Bluetooth?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Peek onto the screen and make sound"</string> <string name="notification_more_settings" msgid="816306283396553571">"More settings"</string> <string name="notification_done" msgid="5279426047273930175">"Finished"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Normal colours"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Night colours"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Customised colours"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Auto"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Unknown colours"</string> - <string name="color_transform" msgid="6985460408079086090">"Colour modification"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Show Quick Settings tile"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Enable customised transform"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Colour and appearance"</string> + <string name="night_mode" msgid="3540405868248625488">"Night mode"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Calibrate display"</string> + <string name="night_mode_on" msgid="5597545513026541108">"On"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Off"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Turn on automatically"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Switch into Night Mode as appropriate for location and time of day"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"When Night Mode is on"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Use dark theme for Android OS"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Adjust tint"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Adjust brightness"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"The dark theme is applied to core areas of Android OS that are normally displayed in a light theme, such as Settings and notifications."</string> <string name="color_apply" msgid="9212602012641034283">"Apply"</string> <string name="color_revert_title" msgid="4746666545480534663">"Confirm Settings"</string> <string name="color_revert_message" msgid="9116001069397996691">"Some colour settings can make this device unusable. Click OK to confirm these colour settings, otherwise these settings will reset after 10 seconds."</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Home"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recent"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Back"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Show Do Not Disturb in volume"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Allow full control of Do Not Disturb in the volume dialogue."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume and Do Not Disturb"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Enter Do Not Disturb on volume down"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Show with volume controls"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Do not disturb"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Volume buttons shortcut"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Exit Do Not Disturb on volume up"</string> <string name="battery" msgid="7498329822413202973">"Battery"</string> <string name="clock" msgid="7416090374234785905">"Clock"</string> <string name="headset" msgid="4534219457597457353">"Headset"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Headphones connected"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Headset connected"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Enable or disable icons from being shown in the status bar."</string> <string name="data_saver" msgid="5037565123367048522">"Data Saver"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Data Saver is on"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Data Saver is off"</string> <string name="switch_bar_on" msgid="1142437840752794229">"On"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Off"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigation bar"</string> <string name="start" msgid="6873794757232879664">"Start"</string> <string name="center" msgid="4327473927066010960">"Centre"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Preview"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Drag to add tiles"</string> <string name="qs_edit" msgid="2232596095725105230">"(edit)"</string> + <string name="tuner_time" msgid="6572217313285536011">"Time"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Show hours, minutes and seconds"</item> + <item msgid="1427801730816895300">"Show hours and minutes (default)"</item> + <item msgid="3830170141562534721">"Don\'t show this icon"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Always show percentage"</item> + <item msgid="2139628951880142927">"Show percentage when charging (default)"</item> + <item msgid="3327323682209964956">"Don\'t show this icon"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index 4031204cc935..53386ed21300 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"Fijar pantalla"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"buscar"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"No se pudo iniciar <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> está inhabilitada en modo seguro."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Historial"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Borrar"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"División horizontal"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Silencio\ntotal"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Solo\nprioridad"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Solo\nalarmas"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Todo"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Todo\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Cargando (faltan <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para completar)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Carga rápida (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para completar la carga)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Carga lenta (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para completar la carga)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Muestra los segundos del reloj en la barra de estado. Puede afectar la duración de la batería."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Reorganizar la Configuración rápida"</string> <string name="show_brightness" msgid="6613930842805942519">"Mostrar el brillo en la Configuración rápida"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Deslizar el dedo hacia arriba para dividir la pantalla"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Habilitar gesto de dedo hacia arriba para dividir pantalla"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Habilita el gesto de deslizar el dedo hacia arriba desde el botón Recientes para acceder al modo de pantalla dividida"</string> <string name="experimental" msgid="6198182315536726162">"Experimental"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"¿Activar Bluetooth?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Mostrar en la pantalla y emitir sonido"</string> <string name="notification_more_settings" msgid="816306283396553571">"Más opciones de configuración"</string> <string name="notification_done" msgid="5279426047273930175">"Listo"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Colores normales"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Colores nocturnos"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Colores personalizados"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automático"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Colores desconocidos"</string> - <string name="color_transform" msgid="6985460408079086090">"Modificación del color"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Mostrar el mosaico de Configuración rápida"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Habilitar la transformación personalizada"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Color y apariencia"</string> + <string name="night_mode" msgid="3540405868248625488">"Modo nocturno"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Calibrar pantalla"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Activado"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Desactivado"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Activar automáticamente"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Cambiar a modo nocturno según corresponda en relación con la ubicación y hora del día"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Cuando el modo nocturno está activado"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Usar tema oscuro para el SO Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Ajustar tinte"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Ajustar brillo"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"El tema oscuro se aplica en las áreas principales del sistema operativo Android que suelen mostrarse con un tema claro, como la Configuración y las notificaciones."</string> <string name="color_apply" msgid="9212602012641034283">"Aplicar"</string> <string name="color_revert_title" msgid="4746666545480534663">"Confirmar la configuración"</string> <string name="color_revert_message" msgid="9116001069397996691">"Algunas opciones de configuración de color pueden provocar que el dispositivo quede inutilizable. Haz clic en Aceptar para confirmar estos parámetros de color. De lo contrario, la configuración se restablecerá en diez segundos."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Uso de la batería"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Ahorro de batería no está disponible durante la carga"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Ahorro de batería"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduce el rendimiento y el uso de datos en segundo plano"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Pantalla principal"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recientes"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Atrás"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Mostrar el panel de control de No interrumpir en el volumen"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Permitir el control total del modo No interrumpir en el cuadro de diálogo de volumen."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volumen y No interrumpir"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Activar el modo No interrumpir al bajar el volumen"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Mostrar con controles de volumen"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"No interrumpir"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Combinación de teclas de botones de volumen"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Desactivar el modo No interrumpir al subir el volumen"</string> <string name="battery" msgid="7498329822413202973">"Batería"</string> <string name="clock" msgid="7416090374234785905">"Reloj"</string> <string name="headset" msgid="4534219457597457353">"Auriculares"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Auriculares conectados"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Auriculares conectados"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Habilitar o inhabilitar la visualización de los íconos en la barra de estado"</string> <string name="data_saver" msgid="5037565123367048522">"Reducir datos"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Reducir datos está activada"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Reducir datos está desactivada"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Activado"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Desactivar"</string> <string name="nav_bar" msgid="1993221402773877607">"Barra de navegación"</string> <string name="start" msgid="6873794757232879664">"Iniciar"</string> <string name="center" msgid="4327473927066010960">"Centro"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Vista previa"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arrastra los mosaicos para agregarlos"</string> <string name="qs_edit" msgid="2232596095725105230">"Editar"</string> + <string name="tuner_time" msgid="6572217313285536011">"Hora"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Mostrar horas, minutos y segundos"</item> + <item msgid="1427801730816895300">"Mostrar horas y minutos (predeterminado)"</item> + <item msgid="3830170141562534721">"No mostrar este ícono"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Siempre mostrar el porcentaje"</item> + <item msgid="2139628951880142927">"Mostrar el porcentaje durante la carga (predeterminado)"</item> + <item msgid="3327323682209964956">"No mostrar este ícono"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index f531294297bf..37689ce72283 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -334,8 +334,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Silencio\ntotal"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Solo\ncon prioridad"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Solo\nalarmas"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Todo"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Todo\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Cargando (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para completar)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Cargando rápidamente (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hasta completar)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Cargando lentamente (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hasta completar)"</string> @@ -448,7 +446,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Muestra los segundos del reloj en la barra de estado. Puede afectar a la duración de la batería."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Reorganizar Ajustes rápidos"</string> <string name="show_brightness" msgid="6613930842805942519">"Mostrar brillo en Ajustes rápidos"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Habilitar deslizar el dedo hacia arriba para dividir la pantalla"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Habilitar deslizar dedo hacia arriba para dividir pantalla"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Habilita el gesto de deslizar el dedo hacia arriba desde el botón Visión general para acceder al modo de pantalla dividida"</string> <string name="experimental" msgid="6198182315536726162">"Experimental"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"¿Activar Bluetooth?"</string> @@ -468,19 +466,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Mostrar en la pantalla y emitir sonido"</string> <string name="notification_more_settings" msgid="816306283396553571">"Más ajustes"</string> <string name="notification_done" msgid="5279426047273930175">"Listo"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Colores normales"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Colores nocturnos"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Colores personalizados"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automático"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Colores desconocidos"</string> - <string name="color_transform" msgid="6985460408079086090">"Modificación de colores"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Mostrar mosaico de Ajustes rápidos"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Habilitar transformación personalizada"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Color y aspecto"</string> + <string name="night_mode" msgid="3540405868248625488">"Modo nocturno"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Calibrar pantalla"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Sí"</string> + <string name="night_mode_off" msgid="8035605276956057508">"No"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Activar automáticamente"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Cambiar al modo nocturno cuando proceda según la ubicación y la hora del día"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Cuando el modo nocturno esté activado"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Tema oscuro para sistema operativo Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Ajustar tono"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Ajustar brillo"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"El tema oscuro se aplica a las áreas principales del sistema operativo Android que normalmente se muestran con un tema claro, como la aplicación Ajustes y las notificaciones."</string> <string name="color_apply" msgid="9212602012641034283">"Aplicar"</string> <string name="color_revert_title" msgid="4746666545480534663">"Confirmar configuración"</string> <string name="color_revert_message" msgid="9116001069397996691">"Algunas opciones de configuración de color pueden hacer que el dispositivo no se pueda utilizar. Haz clic en Aceptar para confirmar esta configuración. Si no lo haces, se restablecerá esta configuración cuando transcurran 10 segundos."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Uso de la batería"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Ahorro de batería no disponible mientras se carga el dispositivo"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Ahorro de batería"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduce el rendimiento y las conexiones automáticas"</string> @@ -488,21 +489,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Inicio"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recientes"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Atrás"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Mostrar el panel de control de No molestar en el volumen"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Permitir un control total del modo No molestar en el cuadro de diálogo de volumen."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volumen y No molestar"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Activar No molestar al bajar el volumen"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Mostrar con controles de volumen"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"No molestar"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Combinación de teclas para los botones de volumen"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Salir de No molestar al subir el volumen"</string> <string name="battery" msgid="7498329822413202973">"Batería"</string> <string name="clock" msgid="7416090374234785905">"Reloj"</string> <string name="headset" msgid="4534219457597457353">"Auriculares"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Auriculares conectados"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Auriculares conectados"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Permite mostrar u ocultar iconos en la barra de estado"</string> <string name="data_saver" msgid="5037565123367048522">"Economizador de datos"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Economizador de datos activado"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Economizador de datos desactivado"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Sí"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"No"</string> <string name="nav_bar" msgid="1993221402773877607">"Barra de navegación"</string> <string name="start" msgid="6873794757232879664">"Inicio"</string> <string name="center" msgid="4327473927066010960">"Centro"</string> @@ -525,4 +525,15 @@ <string name="preview" msgid="9077832302472282938">"Vista previa"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arrastrar para añadir mosaicos"</string> <string name="qs_edit" msgid="2232596095725105230">"Cambiar"</string> + <string name="tuner_time" msgid="6572217313285536011">"Hora"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Mostrar horas, minutos y segundos"</item> + <item msgid="1427801730816895300">"Mostrar horas y minutos (predeterminado)"</item> + <item msgid="3830170141562534721">"No mostrar este icono"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Mostrar porcentaje siempre"</item> + <item msgid="2139628951880142927">"Mostrar porcentaje durante la carga (predeterminado)"</item> + <item msgid="3327323682209964956">"No mostrar este icono"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-et-rEE/strings.xml b/packages/SystemUI/res/values-et-rEE/strings.xml index a7e34e6fb455..6ca0fcfdbde0 100644 --- a/packages/SystemUI/res/values-et-rEE/strings.xml +++ b/packages/SystemUI/res/values-et-rEE/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Täielik\nvaikus"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Ainult\nprioriteetsed"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Ainult\nalarmid"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Kõik"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Kõik\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Laadimine (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>, kuni seade on täis)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Kiirlaadimine (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>, kuni seade on täis)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Aeglane laadimine (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>, kuni seade on täis)"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Olekuribal kella sekundite kuvamine. See võib mõjutada aku kasutusaega."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Korralda kiirseaded ümber"</string> <string name="show_brightness" msgid="6613930842805942519">"Kuva kiirseadetes heledus"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Luba ülespühkimise kiirendi ekraani poolitamiseks"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Luba ülespühkimise liigutus ekraani poolitamiseks"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Lubab žesti, mis poolitab ekraani, kui kasutaja pühib üles nupul Ülevaade."</string> <string name="experimental" msgid="6198182315536726162">"Eksperimentaalne"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Kas lülitada Bluetooth sisse?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Kuva ekraani servas koos heliga"</string> <string name="notification_more_settings" msgid="816306283396553571">"Rohkem seadeid"</string> <string name="notification_done" msgid="5279426047273930175">"Valmis"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Tavalised värvid"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Öised värvid"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Kohandatud värvid"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automaatne"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Värvid on teadmata"</string> - <string name="color_transform" msgid="6985460408079086090">"Värvi muutmine"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Kuva paan Kiirseaded"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Luba kohandatud teisendamine"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Värv ja ilme"</string> + <string name="night_mode" msgid="3540405868248625488">"Öörežiim"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Ekraani kalibreerimine"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Sees"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Väljas"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Lülita automaatselt sisse"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Lülita öörežiimile, kui see on asukoha ja kellaaja suhtes sobilik"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Kui öörežiim on sees"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Kasuta Android OS-is tumedat teemat"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Reguleeri tooni"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Reguleeri heledust"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Tume teema rakendatakse Android OS-i põhialadele, mis kuvatakse tavaliselt heleda teemaga (nt seaded ja märguanded)."</string> <string name="color_apply" msgid="9212602012641034283">"Rakenda"</string> <string name="color_revert_title" msgid="4746666545480534663">"Seadete kinnitamine"</string> <string name="color_revert_message" msgid="9116001069397996691">"Mõni värviseade ei saa seadet võib-olla kasutada. Nende värviseadete kinnitamiseks klõpsake OK, muidu lähtestatakse need seaded 10 sekundi pärast."</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Avaekraan"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Hiljutised"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Tagasi"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Kuva helitugevuse juures funktsioon Mitte segada"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Helitugevuse dialoogis lubatakse funktsiooni Mitte segada täielik juhtimine."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Helitugevus ja funktsioon Mitte segada"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Lülita helitugevuse vähendamisel sisse funkt. Mitte segada"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Kuva koos helitugevuse juhtnuppudega"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Mitte segada"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Helitugevuse nuppude otsetee"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Lülita helitugevuse suurendamisel välja funkt. Mitte segada"</string> <string name="battery" msgid="7498329822413202973">"Aku"</string> <string name="clock" msgid="7416090374234785905">"Kell"</string> <string name="headset" msgid="4534219457597457353">"Peakomplekt"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Kõrvaklapid on ühendatud"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Peakomplekt on ühendatud"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Lubatakse või keelatakse ikoonide kuvamine olekuribal."</string> <string name="data_saver" msgid="5037565123367048522">"Andmemahu säästja"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Andmemahu säästja on sisse lülitatud"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Andmemahu säästja on välja lülitatud"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Sees"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Väljas"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigeerimisriba"</string> <string name="start" msgid="6873794757232879664">"Algus"</string> <string name="center" msgid="4327473927066010960">"Keskkoht"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Eelvaade"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Lohistage paanide lisamiseks"</string> <string name="qs_edit" msgid="2232596095725105230">"Muuda"</string> + <string name="tuner_time" msgid="6572217313285536011">"Kellaaeg"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Kuva tunnid, minutid ja sekundid"</item> + <item msgid="1427801730816895300">"Kuva tunnid ja minutid (vaikimisi)"</item> + <item msgid="3830170141562534721">"Ära kuva seda ikooni"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Kuva alati protsent"</item> + <item msgid="2139628951880142927">"Kuva protsent laadimisel (vaikimisi)"</item> + <item msgid="3327323682209964956">"Ära kuva seda ikooni"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-eu-rES/strings.xml b/packages/SystemUI/res/values-eu-rES/strings.xml index dcb8ef9431c4..88ce866083e2 100644 --- a/packages/SystemUI/res/values-eu-rES/strings.xml +++ b/packages/SystemUI/res/values-eu-rES/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"pantaila-ainguratzea"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"bilatu"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Ezin izan da hasi <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> desgaituta dago modu seguruan."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Historia"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Garbitu"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Banaketa horizontala"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Isiltasun\nosoa"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Lehentasunezkoak\nsoilik"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alarmak\nsoilik"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Guztiak"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Guztiak\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Kargatzen (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> guztiz kargatu arte)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Bizkor kargatzen (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> guztiz kargatu arte)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Mantso kargatzen (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> guztiz kargatu arte)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Erakutsi erlojuko segundoak egoera-barran. Baliteke bateria gehiago erabiltzea."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Berrantolatu ezarpen bizkorrak"</string> <string name="show_brightness" msgid="6613930842805942519">"Erakutsi distira Ezarpen bizkorretan"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Gaitu hatza gora pasatuta pantaila zatitzeko bizkortzailea"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Gaitu pantaila zatitzeko keinua hatza gora pasatuta"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Sakatu Ikuspegi nagusia botoia eta gaitu hatza gora pasatuta pantaila zatitzeko keinua"</string> <string name="experimental" msgid="6198182315536726162">"Esperimentala"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth eginbidea aktibatu nahi duzu?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Agerrarazi jakinarazpen hauek pantailan eta egin soinua"</string> <string name="notification_more_settings" msgid="816306283396553571">"Ezarpen gehiago"</string> <string name="notification_done" msgid="5279426047273930175">"Eginda"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Kolore normalak"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Gaueko koloreak"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Kolore pertsonalizatuak"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automatikoa"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Kolore ezezagunak"</string> - <string name="color_transform" msgid="6985460408079086090">"Kolore-aldaketa"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Erakutsi ezarpen bizkorren lauza"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Gaitu itxuraldaketa pertsonalizatua"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Kolorea eta itxura"</string> + <string name="night_mode" msgid="3540405868248625488">"Gau modua"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Kalibratu pantaila"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Aktibatuta"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Desaktibatuta"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Aktibatu automatikoki"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Aldatu Gau modura, kokapena eta ordua kontuan izanda"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Gau modua aktibatuta dagoenean"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Erabili gai iluna Android sistema eragilean"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Doitu kolorea"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Doitu distira"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Gai iluna Android sistema eragileko eremu nagusietan aplikatzen da. Normalean gai argian bistaratzen dira eremu horiek, adibidez, Ezarpenak atala eta jakinarazpenak."</string> <string name="color_apply" msgid="9212602012641034283">"Aplikatu"</string> <string name="color_revert_title" msgid="4746666545480534663">"Berretsi ezarpenak"</string> <string name="color_revert_message" msgid="9116001069397996691">"Baliteke gailua kolore-ezarpen batzuekin ezin erabili izatea. Kolore-ezarpenak berresteko, sakatu Ados. Bestela, hamar segundoren buruan berrezarriko dira ezarpenak."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Bateriaren erabilera"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Bateria-aurrezlea ez dago erabilgarri gailua kargatzen ari denean"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Bateria-aurrezlea"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Errendimendua eta atzeko planoko datuen erabilera murrizten ditu"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Hasierako pantaila"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Azkenak"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Atzera"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Erakutsi \"Ez molestatu\" aukera bolumenaren leihoan"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Baimendu bolumenaren leihoan \"Ez molestatu\" aukera guztiz kontrolatzea."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Bolumena eta \"Ez molestatu\""</string> - <string name="volume_down_silent" msgid="66962568467719591">"Sartu \"Ez molestatu\" egoeran bolumena jaistean"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Erakutsi bolumena kontrolatzeko aukerekin"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Ez molestatu"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Bolumen-botoietarako lasterbidea"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Irten \"Ez molestatu\" egoeratik bolumena igotzean"</string> <string name="battery" msgid="7498329822413202973">"Bateria"</string> <string name="clock" msgid="7416090374234785905">"Erlojua"</string> <string name="headset" msgid="4534219457597457353">"Mikrofonodun entzungailua"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Aurikularrak konektatu dira"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Mikrofonodun entzungailua konektatu da"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Gaitu edo desgaitu ikonoak egoera-barran erakusteko aukera."</string> <string name="data_saver" msgid="5037565123367048522">"Datu-aurrezlea"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Aktibatuta dago datu-aurrezlea"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Desaktibatuta dago datu-aurrezlea"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Aktibatuta"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Desaktibatuta"</string> <string name="nav_bar" msgid="1993221402773877607">"Nabigazio-barra"</string> <string name="start" msgid="6873794757232879664">"Hasi"</string> <string name="center" msgid="4327473927066010960">"Erdiratu"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Aurrebista"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arrastatu lauzak hemen gehitzeko"</string> <string name="qs_edit" msgid="2232596095725105230">"Editatu"</string> + <string name="tuner_time" msgid="6572217313285536011">"Ordua"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Erakutsi orduak, minutuak eta segundoak"</item> + <item msgid="1427801730816895300">"Erakutsi orduak eta minutuak (balio lehenetsia)"</item> + <item msgid="3830170141562534721">"Ez erakutsi ikonoa"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Erakutsi beti ehunekoa"</item> + <item msgid="2139628951880142927">"Erakutsi ehunekoa kargatu bitartean (balio lehenetsia)"</item> + <item msgid="3327323682209964956">"Ez erakutsi ikonoa"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index 851a6cbb9119..7e552ca21188 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"پین کردن صفحه"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"جستجو"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> شروع نشد."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> در حالت ایمن غیرفعال است."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"سابقه"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"پاک کردن"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"تقسیم افقی"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"سکوت\nکامل"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"فقط\nاولویتدار"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"فقط\nهشدارها"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"همه"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"همه\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"در حال شارژ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> تا شارژ کامل)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"در حال شارژ سریع (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> تا شارژ کامل)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"در حال شارژ آهسته (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> تا شارژ کامل)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"ثانیههای ساعت را در نوار وضعیت نشان میدهد. ممکن است بر ماندگاری باتری تأثیر بگذارد."</string> <string name="qs_rearrange" msgid="8060918697551068765">"ترتیب مجدد در تنظیمات سریع"</string> <string name="show_brightness" msgid="6613930842805942519">"نمایش روشنایی در تنظیمات سریع"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"فعال کردن شتابدهنده تقسیم صفحه با بالا کشیدن"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"فعال کردن تقسیم صفحه با اشاره بالا کشیدن"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"اشاره ورود به تقسیم صفحه با بالا کشیدن صفحه از دکمه نمای کلی را فعال میکند"</string> <string name="experimental" msgid="6198182315536726162">"آزمایشی"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"بلوتوث روشن شود؟"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"در جلوی صفحه به همراه صدا نشان داده شود"</string> <string name="notification_more_settings" msgid="816306283396553571">"تنظیمات بیشتر"</string> <string name="notification_done" msgid="5279426047273930175">"تمام"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"رنگهای عادی"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"رنگهای شب"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"رنگهای سفارشی"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"خودکار"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"رنگهای نامشخص"</string> - <string name="color_transform" msgid="6985460408079086090">"اصلاح رنگ"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"نمایش کاشی تنظیمات سریع"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"فعال کردن تبدیل سفارشی"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"رنگ و ظاهر"</string> + <string name="night_mode" msgid="3540405868248625488">"حالت شب"</string> + <string name="calibrate_display" msgid="5974642573432039217">"درجهبندی نمایشگر"</string> + <string name="night_mode_on" msgid="5597545513026541108">"روشن"</string> + <string name="night_mode_off" msgid="8035605276956057508">"خاموش"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"روشن شدن خودکار"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"تغییر به حالت شب وقتی برای مکان و زمان روز مناسب است"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"وقتی حالت شب روشن است"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"استفاده از زمینه تیره برای سیستمعامل Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"تنظیم سایهرنگ"</string> + <string name="adjust_brightness" msgid="980039329808178246">"تنظیم روشنایی"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"زمینه تیره بر قسمتهای هستهای سیستمعامل Android که بهطور معمول با زمینه روشن نشان داده میشوند (مثل تنظیمات و اعلانها) اعمال میشود."</string> <string name="color_apply" msgid="9212602012641034283">"اعمال کردن"</string> <string name="color_revert_title" msgid="4746666545480534663">"تأیید تنظیمات"</string> <string name="color_revert_message" msgid="9116001069397996691">"بعضی از تنظیمات رنگ میتوانند این دستگاه را غیرقابل استفاده کنند. برای تأیید این تنظیمات رنگ روی «تأیید» کلیک کنید، در غیر این صورت این تغییرات بعد از ۱۰ ثانیه بازنشانی میشوند."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"مصرف باتری"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"هنگام شارژ شدن، «بهینهسازی باتری» در دسترس نیست"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"بهینهسازی باتری"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"عملکرد و اطلاعات پسزمینه را کاهش میدهد"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"صفحه اصلی"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"موارد اخیر"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"برگشت"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"نمایش «مزاحم نشوید» در میزان صدا"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"به حالت «مزاحم نشوید» اجازه داده میشود در کادر گفتگوی میزان صدا کنترل کامل داشته باشد."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"میزان صدا و «مزاحم نشوید»"</string> - <string name="volume_down_silent" msgid="66962568467719591">"وارد شدن به حالت «مزاحم نشوید» در میزان صدای پایین"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"نمایش با کنترلهای صدا"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"مزاحم نشوید"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"میانبر دکمههای صدا"</string> <string name="volume_up_silent" msgid="7141255269783588286">"خارج شدن از حالت «مزاحم نشوید» در میزان صدای بالا"</string> <string name="battery" msgid="7498329822413202973">"باتری"</string> <string name="clock" msgid="7416090374234785905">"ساعت"</string> <string name="headset" msgid="4534219457597457353">"هدست"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"هدفون وصل شد"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"هدست وصل شد"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"فعال یا غیرفعال کردن نمایش نمادها در نوار وضعیت."</string> <string name="data_saver" msgid="5037565123367048522">"صرفهجویی در مصرف داده"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"صرفهجویی در مصرف داده روشن است"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"صرفهجویی در مصرف داده خاموش است"</string> <string name="switch_bar_on" msgid="1142437840752794229">"روشن"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"خاموش"</string> <string name="nav_bar" msgid="1993221402773877607">"نوار پیمایش"</string> <string name="start" msgid="6873794757232879664">"شروع"</string> <string name="center" msgid="4327473927066010960">"وسط"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"پیشنمایش"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"کشیدن برای افزودن کاشیها"</string> <string name="qs_edit" msgid="2232596095725105230">"ویرایش"</string> + <string name="tuner_time" msgid="6572217313285536011">"زمان"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"ساعت، دقیقه و ثانیه نشان داده شود"</item> + <item msgid="1427801730816895300">"ساعت و دقیقه نشان داده شود (پیشفرض)"</item> + <item msgid="3830170141562534721">"این نماد نشان داده نشود"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"همیشه درصد نشان داده شود"</item> + <item msgid="2139628951880142927">"هنگام شارژ شدن درصد نشان داده شود (پیشفرض)"</item> + <item msgid="3327323682209964956">"این نماد نشان داده نشود"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index d44bd7522679..1a8d603a1170 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"näytön kiinnitys"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"haku"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Sovelluksen <xliff:g id="APP">%s</xliff:g> käynnistäminen epäonnistui."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> on poistettu käytöstä vikasietotilassa."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Historia"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Tyhjennä"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Vaakasuuntainen jako"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Täydellinen\nhiljaisuus"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Vain\ntärkeät"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Vain\nherätykset"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Kaikki"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Kaikki\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Ladataan (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> kunnes täynnä)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Nopea lataus (latausaikaa jäljellä <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Hidas lataus (latausaikaa jäljellä <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Näytä sekunnit tilapalkin kellossa. Tämä voi vaikuttaa akun kestoon."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Järjestä pika-asetukset uudelleen"</string> <string name="show_brightness" msgid="6613930842805942519">"Näytä kirkkaus pika-asetuksissa"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Ota jaetun näytön tilan pyyhkäisyele käyttöön"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Siirry jaetun näytön tilaan pyyhkäisemällä ylöspäin"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Voit siirtyä jaetun näytön tilaan pyyhkäisemällä Viimeisimmät-painikkeesta ylöspäin."</string> <string name="experimental" msgid="6198182315536726162">"Kokeellinen"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Otetaanko Bluetooth käyttöön?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Näytä ilmoitus näytöllä ja toista äänimerkki"</string> <string name="notification_more_settings" msgid="816306283396553571">"Lisäasetukset"</string> <string name="notification_done" msgid="5279426047273930175">"Valmis"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Tavalliset värit"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Yövärit"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Muokatut värit"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automaattinen"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Tuntemattomat värit"</string> - <string name="color_transform" msgid="6985460408079086090">"Muokatut värit"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Näytä pika-asetusruutu"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Ota muokatut värit käyttöön"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Väri ja ulkoasu"</string> + <string name="night_mode" msgid="3540405868248625488">"Yötila"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Kalibroi näyttö"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Käytössä"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Pois käytöstä"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Ota käyttöön automaattisesti"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Ota yötila käyttöön sijainnin ja kellonajan perusteella."</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Kun yötila on käytössä"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Käytä tummaa teemaa käyttöjärjestelmässä"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Säädä sävytystä"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Säädä kirkkautta"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Tummaa teemaa käytetään Android-käyttöjärjestelmän ydinosissa, kuten Asetuksissa ja ilmoituksissa, joissa käytetään tavallisesti vaaleaa teemaa."</string> <string name="color_apply" msgid="9212602012641034283">"Käytä"</string> <string name="color_revert_title" msgid="4746666545480534663">"Vahvista asetukset"</string> <string name="color_revert_message" msgid="9116001069397996691">"Jotkin väriasetukset voivat häiritä laitteen käyttöä. Vahvista uudet väriasetukset valitsemalla OK. Muussa tapauksessa aiemmat asetukset palautetaan 10 sekunnin kuluttua."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Akun käyttö"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Virransäästö ei ole käytettävissä latauksen aikana."</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Virransäästö"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Rajoittaa suorituskykyä ja taustatiedonsiirtoa."</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Aloitusnäyttö"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Viimeaikaiset"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Takaisin"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Näytä Älä häiritse ‑valinnat äänenvoimakkuudessa"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Näytä kaikki Älä häiritse ‑tilan säädöt äänenvoimakkuusvalinnassa."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Äänenvoimakkuus ja Älä häiritse ‑tila"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Siirry Älä häiritse -tilaan, kun äänenvoimakkuutta lasketaan"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Näytä äänenvoimakkuuden säätimien yhteydessä"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Älä häiritse"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Äänenvoimakkuuspainikkeiden pikanäppäin"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Poistu Älä häiritse -tilasta, kun äänenvoimakkuus nousee"</string> <string name="battery" msgid="7498329822413202973">"Akku"</string> <string name="clock" msgid="7416090374234785905">"Kello"</string> <string name="headset" msgid="4534219457597457353">"Kuulokemikrofoni"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Kuulokkeet liitetty"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Kuulokemikrofoni liitetty"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Ota tilapalkin kuvakkeet käyttöön tai poista ne käytöstä."</string> <string name="data_saver" msgid="5037565123367048522">"Data Saver"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Data Saver on käytössä."</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Data Saver on pois käytöstä."</string> <string name="switch_bar_on" msgid="1142437840752794229">"Käytössä"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Pois käytöstä"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigointipalkki"</string> <string name="start" msgid="6873794757232879664">"Alussa"</string> <string name="center" msgid="4327473927066010960">"Keskellä"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Esikatselu"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Lisää osioita vetämällä."</string> <string name="qs_edit" msgid="2232596095725105230">"Muokkaa"</string> + <string name="tuner_time" msgid="6572217313285536011">"Aika"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Näytä tunnit, minuutit ja sekunnit"</item> + <item msgid="1427801730816895300">"Näytä tunnit ja minuutit (oletus)"</item> + <item msgid="3830170141562534721">"Älä näytä tätä kuvaketta"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Näytä prosenttiluku aina"</item> + <item msgid="2139628951880142927">"Näytä prosenttiluku latauksen aikana (oletus)"</item> + <item msgid="3327323682209964956">"Älä näytä tätä kuvaketta"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index d34723f3c24b..5a907a418e3d 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"épinglage d\'écran"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"rechercher"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Impossible de lancer <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> est désactivée en mode sécurisé."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Historique"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Effacer"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Séparation horizontale"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Aucune\ninterruption"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Priorités\nuniquement"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alarmes\nuniquement"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Tous"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Tous\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charge en cours... (chargée à 100 %% dans <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Charge rapide en cours... (chargé dans <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Charge lente en cours... (chargé dans <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Afficher les secondes sur l\'horloge dans la barre d\'état. Cela peut réduire l\'autonomie de la pile."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Réorganiser les paramètres rapides"</string> <string name="show_brightness" msgid="6613930842805942519">"Afficher la luminosité dans les paramètres rapides"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Activer l\'accélérateur d\'écr. partagé en balayant vers le haut"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Activer le geste d\'écran partagé en balayant vers le haut"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Activer le geste permettant d\'utiliser l\'écran partagé en balayant l\'écran vers le haut à partir du bouton « Aperçu »"</string> <string name="experimental" msgid="6198182315536726162">"Fonctions expérimentales"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Activer Bluetooth?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Afficher sur l\'écran et émettre un son"</string> <string name="notification_more_settings" msgid="816306283396553571">"Plus de paramètres"</string> <string name="notification_done" msgid="5279426047273930175">"Terminé"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Couleurs normales"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Couleurs nocturnes"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Couleurs personnalisées"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automatique"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Couleurs inconnues"</string> - <string name="color_transform" msgid="6985460408079086090">"Modifier la couleur"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Afficher la tuile de configuration rapide"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Activer la transformation personnalisée"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Couleur et apparence"</string> + <string name="night_mode" msgid="3540405868248625488">"Mode Nuit"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Calibrer l\'affichage"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Activé"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Désactivé"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Activer automatiquement"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Passer en mode Nuit en fonction de la position et de l\'heure de la journée"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Lorsque le mode Nuit est activé"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Utiliser thème foncé pour Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Ajuster la coloration"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Régler la luminosité"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Le thème foncé est appliqué à des zones essentielles de la plateforme Android qui sont habituellement affichées dans un thème clair, comme les paramètres et les notifications."</string> <string name="color_apply" msgid="9212602012641034283">"Appliquer"</string> <string name="color_revert_title" msgid="4746666545480534663">"Confirmer les paramètres"</string> <string name="color_revert_message" msgid="9116001069397996691">"Certains paramètres de couleurs peuvent rendre cet appareil inutilisable. Cliquez sur « OK » pour valider ces paramètres, sinon ils seront réinitialisés après 10 secondes."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Utilisation de la pile"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Le mode Économie d\'énergie n\'est pas accessible pendant la charge"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Économie d\'énergie"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Réduit les performances et les données en arrière-plan"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Accueil"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Récents"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Précédent"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Fonctionnalité Ne pas déranger dans boîte de dialogue volume"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Autoriser le contrôle de la fonctionnalité Ne pas déranger dans la boîte de dialogue de modification du volume"</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume et fonctionnalité Ne pas déranger"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Activer fonctionnalité Ne pas déranger avec bouton Volume -"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Afficher avec les commandes de volume"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Ne pas déranger"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Raccourci des boutons de volume"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Désactiver fonctionnalité Ne pas déranger avec bouton Volume +"</string> <string name="battery" msgid="7498329822413202973">"Pile"</string> <string name="clock" msgid="7416090374234785905">"Horloge"</string> <string name="headset" msgid="4534219457597457353">"Écouteurs"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Écouteurs connectés"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Écouteurs connectés"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Activer ou désactiver l\'affichage des icônes dans la barre d\'état"</string> <string name="data_saver" msgid="5037565123367048522">"Économiseur de données"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"La fonction Économiseur de données est activée"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"La fonction Économiseur de données est désactivée"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Activé"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Désactivé"</string> <string name="nav_bar" msgid="1993221402773877607">"Barre de navigation"</string> <string name="start" msgid="6873794757232879664">"Démarrer"</string> <string name="center" msgid="4327473927066010960">"Centrer"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Aperçu"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Faites glisser des tuiles ici pour les ajouter"</string> <string name="qs_edit" msgid="2232596095725105230">"Modifier"</string> + <string name="tuner_time" msgid="6572217313285536011">"Heure"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Afficher les heures, les minutes et les secondes"</item> + <item msgid="1427801730816895300">"Afficher les heures et les minutes (par défaut)"</item> + <item msgid="3830170141562534721">"Ne pas afficher cette icône"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Toujours afficher le pourcentage"</item> + <item msgid="2139628951880142927">"Montrer le pourcentage durant la charge (par défaut)"</item> + <item msgid="3327323682209964956">"Ne pas afficher cette icône"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index 241d34c6e219..0da6f1489c9b 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"épinglage d\'écran"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"rechercher"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Impossible de lancer <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"L\'application <xliff:g id="APP">%s</xliff:g> est désactivée en mode sécurisé."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Historique"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Effacer"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Séparation horizontale"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Aucune\ninterruption"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Priorité\nuniquement"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alarmes\nuniquement"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Toujours"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Toutes\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Charge en cours… (chargé à 100 %% dans <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Charge rapide… (chargé à 100 %% dans <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Charge lente… (chargé à 100 %% dans <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Afficher les secondes dans la barre d\'état. Cela risque de réduire l\'autonomie de la batterie."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Réorganiser la fenêtre de configuration rapide"</string> <string name="show_brightness" msgid="6613930842805942519">"Afficher la luminosité dans fenêtre de configuration rapide"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Activer accélérateur écran partagé en balayant vers le haut"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Activer l\'écran partagé en balayant vers le haut"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Activer le geste permettant d\'utiliser l\'écran partagé en balayant l\'écran vers le haut à partir du bouton \"Aperçu\""</string> <string name="experimental" msgid="6198182315536726162">"Paramètres expérimentaux"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Activer le Bluetooth ?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Afficher sur l\'écran et émettre un son"</string> <string name="notification_more_settings" msgid="816306283396553571">"Plus de paramètres"</string> <string name="notification_done" msgid="5279426047273930175">"Terminé"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Couleurs normales"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Couleurs nocturnes"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Couleurs personnalisées"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automatique"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Couleurs inconnues"</string> - <string name="color_transform" msgid="6985460408079086090">"Modification des couleurs"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Afficher la tuile de configuration rapide"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Activer la transformation personnalisée"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Couleur et apparence"</string> + <string name="night_mode" msgid="3540405868248625488">"Mode Nuit"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Calibrer l\'affichage"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Activé"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Désactivé"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Activer automatiquement"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Passer en mode Nuit en fonction de la position et de l\'heure de la journée"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Lorsque le mode Nuit est activé"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Utiliser thème foncé pour plate-forme Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Ajuster la coloration"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Régler la luminosité"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Le thème foncé est appliqué à des zones essentielles de la plate-forme Android qui sont habituellement affichées dans un thème clair, telles que les paramètres et les notifications."</string> <string name="color_apply" msgid="9212602012641034283">"Appliquer"</string> <string name="color_revert_title" msgid="4746666545480534663">"Vérifier les paramètres"</string> <string name="color_revert_message" msgid="9116001069397996691">"Certains paramètres de couleurs peuvent rendre cet appareil inutilisable. Cliquez sur \"OK\" pour valider ces paramètres, sans quoi ils seront réinitialisés après 10 secondes."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Utilisation batterie"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"L\'économiseur de batterie n\'est pas disponible lorsque l\'appareil est en charge."</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Économiseur de batterie"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Limite les performances et les données en arrière-plan."</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Accueil"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Récents"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Précédent"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Fonctionnalité Ne pas déranger dans boîte de dialogue volume"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Autoriser le contrôle de la fonctionnalité Ne pas déranger dans la boîte de dialogue de modification du volume"</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume et fonctionnalité Ne pas déranger"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Activer fonctionnalité Ne pas déranger via le bouton Volume -"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Afficher avec les commandes de volume"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Ne pas déranger"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Raccourci des boutons de volume"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Désactiver fonctionnalité Ne pas déranger via bouton Volume +"</string> <string name="battery" msgid="7498329822413202973">"Batterie"</string> <string name="clock" msgid="7416090374234785905">"Horloge"</string> <string name="headset" msgid="4534219457597457353">"Casque"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Casque connecté"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Casque connecté"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Activer ou désactiver l\'affichage des icônes dans la barre d\'état"</string> <string name="data_saver" msgid="5037565123367048522">"Économiseur de données"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"L\'économiseur de données est activé."</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"L\'économiseur de données est désactivé."</string> <string name="switch_bar_on" msgid="1142437840752794229">"Activé"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Désactivé"</string> <string name="nav_bar" msgid="1993221402773877607">"Barre de navigation"</string> <string name="start" msgid="6873794757232879664">"Début"</string> <string name="center" msgid="4327473927066010960">"Centre"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Aperçu"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Faites glisser des tuiles ici pour les ajouter"</string> <string name="qs_edit" msgid="2232596095725105230">"Modifier"</string> + <string name="tuner_time" msgid="6572217313285536011">"Heure"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Afficher les heures, les minutes et les secondes"</item> + <item msgid="1427801730816895300">"Afficher les heures et les minutes (option par défaut)"</item> + <item msgid="3830170141562534721">"Ne plus afficher cette icône"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Toujours afficher le pourcentage"</item> + <item msgid="2139628951880142927">"Afficher le pourcentage lorsque l\'appareil est en charge (option par défaut)"</item> + <item msgid="3327323682209964956">"Ne plus afficher cette icône"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-gl-rES/strings.xml b/packages/SystemUI/res/values-gl-rES/strings.xml index 75e47a57a34c..1ff6b2635e5d 100644 --- a/packages/SystemUI/res/values-gl-rES/strings.xml +++ b/packages/SystemUI/res/values-gl-rES/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fixación de pantalla"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"buscar"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Non foi posible iniciar <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"A aplicación <xliff:g id="APP">%s</xliff:g> está desactivada no modo seguro"</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Historial"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Borrar"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Dividir en horizontal"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Silencio\ntotal"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Só\nprioridade"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Só\nalarmas"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Todas"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Todas\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Cargando (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para finalizar a carga)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Cargando rápido (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para rematar a carga)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Cargando lento (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para rematar a carga)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Mostra os segundos do reloxo na barra de estado. Pode influír na duración da batería."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Reorganizar Configuración rápida"</string> <string name="show_brightness" msgid="6613930842805942519">"Mostrar brillo en Configuración rápida"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Activar acelerador de pant. div. pasando o dedo cara arriba"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Activar pantalla dividida pasando o dedo cara arriba"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Activa o xesto de pasar o dedo cara arriba desde o botón Visión xeral para acceder ao modo de pantalla dividida"</string> <string name="experimental" msgid="6198182315536726162">"Experimental"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Queres activar o Bluetooth?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Mostrar na pantalla e emitir son"</string> <string name="notification_more_settings" msgid="816306283396553571">"Máis opcións"</string> <string name="notification_done" msgid="5279426047273930175">"Feito"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Cores normais"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Cores nocturnas"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Cores personalizadas"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automático"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Cores descoñecidas"</string> - <string name="color_transform" msgid="6985460408079086090">"Modificación de cor"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Mostrar mosaico de configuración rápida"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Activar transformación personalizada"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Cor e aspecto"</string> + <string name="night_mode" msgid="3540405868248625488">"Modo nocturno"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Calibrar pantalla"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Activado"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Desactivado"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Activar automaticamente"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Cambia ao modo nocturno segundo proceda para a localización e a hora do día"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Cando o modo nocturno está activado"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Usar tema escuro para Android SO"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Axustar matiz"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Axustar brillo"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"O tema escuro aplícase ás áreas principais de Android SO que se mostran normalmente nun tema claro, como a configuración e as notificacións."</string> <string name="color_apply" msgid="9212602012641034283">"Aplicar"</string> <string name="color_revert_title" msgid="4746666545480534663">"Confirmar configuración"</string> <string name="color_revert_message" msgid="9116001069397996691">"Algunhas opcións de configuración de cor poden facer que este dispositivo sexa inutilizable. Fai clic en Aceptar para confirmar esta configuración de cor; en caso contrario, a configuración restablecerase tras 10 segundos."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Uso de batería"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"A función aforro de batería non está dispoñible durante a carga"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Aforro de batería"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduce o rendemento e os datos en segundo plano"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Inicio"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recentes"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Volver"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Mostrar o modo Non molestar no cadro de diálogo de volume"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Permite o control completo do modo Non molestar no cadro de diálogo de volume."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume e modo Non molestar"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Activar o modo Non molestar ao baixar o volume"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Mostrar cos controis de volume"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Non molestar"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Atallo dos botóns de volume"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Desactivar o modo Non molestar ao subir o volume"</string> <string name="battery" msgid="7498329822413202973">"Batería"</string> <string name="clock" msgid="7416090374234785905">"Reloxo"</string> <string name="headset" msgid="4534219457597457353">"Auriculares"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Conectáronse os auriculares"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Conectáronse os auriculares"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Activa ou desactiva a visualización das iconas na barra de estado."</string> <string name="data_saver" msgid="5037565123367048522">"Economizador de datos"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"O economizador de datos está activado"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"O economizador de datos está desactivado"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Activar"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Desactivar"</string> <string name="nav_bar" msgid="1993221402773877607">"Barra de navegación"</string> <string name="start" msgid="6873794757232879664">"Inicio"</string> <string name="center" msgid="4327473927066010960">"Centro"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Vista previa"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arrastrar para engadir mosaicos"</string> <string name="qs_edit" msgid="2232596095725105230">"Editar"</string> + <string name="tuner_time" msgid="6572217313285536011">"Hora"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Mostrar horas, minutos e segundos"</item> + <item msgid="1427801730816895300">"Mostrar horas e minutos (predeterminado)"</item> + <item msgid="3830170141562534721">"Non mostrar esta icona"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Mostrar sempre porcentaxe"</item> + <item msgid="2139628951880142927">"Mostrar porcentaxe durante a carga (predeterminado)"</item> + <item msgid="3327323682209964956">"Non mostrar esta icona"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-gu-rIN/strings.xml b/packages/SystemUI/res/values-gu-rIN/strings.xml index 45a4eafd2046..3891d7b08261 100644 --- a/packages/SystemUI/res/values-gu-rIN/strings.xml +++ b/packages/SystemUI/res/values-gu-rIN/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"સ્ક્રીન પિનિંગ"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"શોધ"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> પ્રારંભ કરી શકાયું નથી."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"સુરક્ષિત મોડમાં <xliff:g id="APP">%s</xliff:g> અક્ષમ કરેલ છે."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"ઇતિહાસ"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"સાફ કરો"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"આડું વિભક્ત કરો"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"સાવ\nશાંતિ"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"ફક્ત\nપ્રાધાન્યતા"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"ફક્ત\nએલાર્મ્સ"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"તમામ"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"બધી\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"ચાર્જ થઈ રહ્યું છે (પૂર્ણ થવામાં <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> બાકી)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"ઝડપથી ચાર્જિંગ થઇ રહી છે (પૂર્ણ થવામાં <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> બાકી)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"ધીમેથી ચાર્જિંગ થઇ રહી છે (પૂર્ણ થવામાં <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> બાકી)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"ઘડિયાળ સેકન્ડ સ્થિતિ બારમાં બતાવો. બૅટરીની આવરદા પર અસર કરી શકે છે."</string> <string name="qs_rearrange" msgid="8060918697551068765">"ઝડપી સેટિંગ્સને ફરીથી ગોઠવો"</string> <string name="show_brightness" msgid="6613930842805942519">"ઝડપી સેટિંગ્સમાં તેજ બતાવો"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"સ્પ્લિટ-સ્ક્રીન સ્વાઇપ-અપ ઍક્સલરેટર સક્ષમ કરો"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"સ્પ્લિટ-સ્ક્રીન સ્વાઇપ-અપ હાવભાવ સક્ષમ કરો"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"વિહંગાવલોકન બટનમાંથી સ્વાઇપ કરીને સ્પ્લિટ-સ્ક્રીનમાં દાખલ થવા માટે હાવભાવ સક્ષમ કરો"</string> <string name="experimental" msgid="6198182315536726162">"પ્રાયોગિક"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth ચાલુ કરવુ છે?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"સ્ક્રીન પર ત્વરિત દ્રષ્ટિ કરો અને અવાજ કરો"</string> <string name="notification_more_settings" msgid="816306283396553571">"વધુ સેટિંગ્સ"</string> <string name="notification_done" msgid="5279426047273930175">"થઈ ગયું"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"સામાન્ય રંગો"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"રાત્રિ રંગો"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"કસ્ટમ રંગો"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"સ્વતઃ"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"અજાણ્યા રંગો"</string> - <string name="color_transform" msgid="6985460408079086090">"રંગ સંશોધન"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"ઝડપી સેટિંગ્સ ટાઇલ બતાવો"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"કસ્ટમ રૂપાંતરણને સક્ષમ કરો"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"રંગ અને દેખાવ"</string> + <string name="night_mode" msgid="3540405868248625488">"રાત્રિ મોડ"</string> + <string name="calibrate_display" msgid="5974642573432039217">"પ્રદર્શન કૅલિબ્રેટ કરો"</string> + <string name="night_mode_on" msgid="5597545513026541108">"ચાલુ"</string> + <string name="night_mode_off" msgid="8035605276956057508">"બંધ"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"આપમેળે ચાલુ કરો"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"સ્થાન અને દિવસના સમય માટે યોગ્ય હોય તે રાત્રિ મોડ પર સ્વિચ કરો"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"જ્યારે રાત્રિ મોડ ચાલુ હોય"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS માટે ઘાટી થીમનો ઉપયોગ કરો"</string> + <string name="adjust_tint" msgid="3398569573231409878">"ટિંટ સમાયોજિત કરો"</string> + <string name="adjust_brightness" msgid="980039329808178246">"તેજ સમાયોજિત કરો"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"ઘાટી થીમને Android OS ના મુખ્ય ક્ષેત્રો પર લાગુ કરે છે જે સામાન્ય રીતે સેટિંગ્સ અને સૂચનાઓ જેવી લાઇટ થીમમાં પ્રદર્શિત કરવામાં આવે છે."</string> <string name="color_apply" msgid="9212602012641034283">"લાગુ કરો"</string> <string name="color_revert_title" msgid="4746666545480534663">"સેટિંગ્સની પુષ્ટિ કરો"</string> <string name="color_revert_message" msgid="9116001069397996691">"કેટલીક રંગ સેટિંગ્સ આ ઉપકરણને બિનઉપયોગી બનાવી શકે છે. આ રંગ સેટિંગ્સની પુષ્ટિ કરવા માટે ઑકે ક્લિક કરો, અન્યથા 10 સેકંડ પછી આ સેટિંગ્સ ફરીથી સેટ થશે."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"બૅટરી વપરાશ"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"ચાર્જિંગ દરમિયાન બૅટરી બચતકર્તા ઉપલબ્ધ નથી"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"બૅટરી બચતકર્તા"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"પ્રદર્શન અને પૃષ્ઠભૂમિ ડેટા ઘટાડે છે"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"હોમ"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"તાજેતરના"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"પાછળ"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"વૉલ્યૂમમાં ખલેલ પાડશો નહીં બતાવો"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"વૉલ્યૂમ સંવાદમાં ખલેલ પાડશો નહીંના સંપૂર્ણ નિયંત્રણની મંજૂરી આપો."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"વૉલ્યૂમ અને ખલેલ પાડશો નહીં"</string> - <string name="volume_down_silent" msgid="66962568467719591">"વૉલ્યૂમ ઘટાડવા પર ખલેલ પાડશો નહીંમાં દાખલ થાઓ"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"વૉલ્યૂમ નિયંત્રણ સાથે બતાવો"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"ખલેલ પાડશો નહીં"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"વૉલ્યૂમ બટન્સ શૉર્ટકટ"</string> <string name="volume_up_silent" msgid="7141255269783588286">"વૉલ્યૂમ વધારવા પર ખલેલ પાડશો નહીંમાંથી બહાર નિકળો"</string> <string name="battery" msgid="7498329822413202973">"બૅટરી"</string> <string name="clock" msgid="7416090374234785905">"ઘડિયાળ"</string> <string name="headset" msgid="4534219457597457353">"હેડસેટ"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"હેડફોન કનેક્ટ કર્યાં"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"હેડસેટ કનેક્ટ કર્યો"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"સ્થિતિ બારમાં બતાવવામાં આવતા આઇકન્સને સક્ષમ અથવા અક્ષમ કરો."</string> <string name="data_saver" msgid="5037565123367048522">"ડેટા સેવર"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"ડેટા સેવર ચાલુ છે"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"ડેટા સેવર બંધ છે"</string> <string name="switch_bar_on" msgid="1142437840752794229">"ચાલુ"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"બંધ"</string> <string name="nav_bar" msgid="1993221402773877607">"નેવિગેશન બાર"</string> <string name="start" msgid="6873794757232879664">"પ્રારંભ કરો"</string> <string name="center" msgid="4327473927066010960">"મધ્ય"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"પૂર્વાવલોકન કરો"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"ટાઇલ્સ ઉમેરવા માટે ખેંચો"</string> <string name="qs_edit" msgid="2232596095725105230">"સંપાદિત કરો"</string> + <string name="tuner_time" msgid="6572217313285536011">"સમય"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"કલાક, મિનિટ અને સેકંડ બતાવો"</item> + <item msgid="1427801730816895300">"કલાક અને મિનિટ બતાવો (ડિફોલ્ટ)"</item> + <item msgid="3830170141562534721">"આ આઇકન બતાવશો નહીં"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"હંમેશાં ટકાવારી બતાવો"</item> + <item msgid="2139628951880142927">"ચાર્જ થાય ત્યારે ટકાવારી બતાવો (ડિફોલ્ટ)"</item> + <item msgid="3327323682209964956">"આ આઇકન બતાવશો નહીં"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index 7349827505fb..68c7d70bf063 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"पूरी तरह\nशांत"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"केवल\nप्राथमिकता"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"केवल\nअलार्म"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"सभी"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"सभी\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"चार्ज हो रहा है (पूरा होने में <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> बाकी)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"तेज़ी से चार्ज हो रहा है (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> में हो जाएगा)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"धीरे चार्ज हो रहा है (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> में पूरा हो जाएगा)"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"स्थिति बार में घड़ी के सेकंड दिखाएं. इससे बैटरी के जीवनकाल पर प्रभाव पड़ सकता है."</string> <string name="qs_rearrange" msgid="8060918697551068765">"त्वरित सेटिंग को पुन: व्यवस्थित करें"</string> <string name="show_brightness" msgid="6613930842805942519">"त्वरित सेटिंग में स्क्रीन की रोशनी दिखाएं"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"ऊपर स्वाइप करके स्क्रीन विभाजन की त्वरित सुविधा सक्षम करें"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"ऊपर स्वाइप करके विभाजित स्क्रीन में जाने का जेस्चर सक्षम करें"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"अवलोकन बटन से ऊपर स्वाइप करके स्क्रीन विभाजन में आने का हावभाव सक्षम करें"</string> <string name="experimental" msgid="6198182315536726162">"प्रयोगात्मक"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"ब्लूटूथ चालू करें?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"स्क्रीन पर एक झलक दिखाएं और ध्वनि चलाएं"</string> <string name="notification_more_settings" msgid="816306283396553571">"और सेटिंग"</string> <string name="notification_done" msgid="5279426047273930175">"हो गया"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"सामान्य रंग"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"रात्रि के रंग"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"कस्टम रंग"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"स्वतः"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"अज्ञात रंग"</string> - <string name="color_transform" msgid="6985460408079086090">"रंग परिवर्तन"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"त्वरित-सेटिंग टाइल दिखाएं"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"कस्टम रूपांतरण सक्षम करें"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"रंग और दिखावट"</string> + <string name="night_mode" msgid="3540405868248625488">"रात्रि मोड"</string> + <string name="calibrate_display" msgid="5974642573432039217">"स्क्रीन को कैलिब्रेट करें"</string> + <string name="night_mode_on" msgid="5597545513026541108">"चालू"</string> + <string name="night_mode_off" msgid="8035605276956057508">"बंद"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"अपने आप चालू करें"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"स्थान और दिन के समय के लिए उपयुक्त रात्रि मोड में बदलें"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"रात्रि मोड के चालू होने पर"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS के लिए गहरी थीम का उपयोग करें"</string> + <string name="adjust_tint" msgid="3398569573231409878">"टिंट समायोजित करें"</string> + <string name="adjust_brightness" msgid="980039329808178246">"स्क्रीन की रोशनी समायोजित करें"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"गहरी थीम को Android OS के मुख्य क्षेत्रों पर लागू किया जाता है जिन्हें सामान्यतः सेटिंग और नोटिफिकेशन जैसी हल्की थीम में प्रदर्शित किया जाता है."</string> <string name="color_apply" msgid="9212602012641034283">"लागू करें"</string> <string name="color_revert_title" msgid="4746666545480534663">"सेेटिंग की पुष्टि करें"</string> <string name="color_revert_message" msgid="9116001069397996691">"कुछ रंग सेटिंग इस डिवाइस को अनुपयोगी बना सकती हैं. इन रंग सेटिंग की पुष्टि करने के लिए ठीक क्लिक करें, अन्यथा 10 सेकंड के बाद ये सेटिंग रीसेट हो जाएंगी."</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"होम"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"हाल ही के"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"वापस जाएं"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"वॉल्यूम में परेशान न करें दिखाएं"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"वॉल्यूम संवाद में परेशान न करें के पूर्ण नियंत्रण की अनुमति दें."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"वॉल्यूम और परेशान न करें"</string> - <string name="volume_down_silent" msgid="66962568467719591">"वॉल्यूम कम करें पर परेशान न करें डालें"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"वॉल्यूम नियंत्रणों के साथ दिखाएं"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"परेशान न करें"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"वॉल्यूम बटन का शॉर्टकट"</string> <string name="volume_up_silent" msgid="7141255269783588286">"वॉल्यूम बढ़ाएं पर परेशान न करें से बाहर निकलें"</string> <string name="battery" msgid="7498329822413202973">"बैटरी"</string> <string name="clock" msgid="7416090374234785905">"घड़ी"</string> <string name="headset" msgid="4534219457597457353">"हैडसेट"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"हेडफ़ोन कनेक्ट किए गए"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"हैडसेट कनेक्ट किया गया"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"आइकन को स्थिति बार में दिखाए जाने से सक्षम या अक्षम करें."</string> <string name="data_saver" msgid="5037565123367048522">"डेटा बचतकर्ता"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"डेटा बचतकर्ता चालू है"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"डेटा बचतकर्ता बंद है"</string> <string name="switch_bar_on" msgid="1142437840752794229">"चालू"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"बंद"</string> <string name="nav_bar" msgid="1993221402773877607">"नेविगेशन बार"</string> <string name="start" msgid="6873794757232879664">"प्रारंभ करें"</string> <string name="center" msgid="4327473927066010960">"मध्य"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"पूर्वावलोकन"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"टाइलों को जोड़ने के लिए खींचें"</string> <string name="qs_edit" msgid="2232596095725105230">"संपादित करें"</string> + <string name="tuner_time" msgid="6572217313285536011">"समय"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"घंटे, मिनट और सेकंड दिखाएं"</item> + <item msgid="1427801730816895300">"घंटे और मिनट दिखाएं (डिफ़ॉल्ट)"</item> + <item msgid="3830170141562534721">"यह आइकन ना दिखाएं"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"हमेशा प्रतिशत दिखाएं"</item> + <item msgid="2139628951880142927">"चार्ज होते समय प्रतिशत दिखाएं (डिफ़ॉल्ट)"</item> + <item msgid="3327323682209964956">"यह आइकन ना दिखाएं"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index 067211747e65..e5fb6d39d553 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -335,8 +335,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Potpuna\ntišina"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Samo\nprioritetno"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Samo\nalarmi"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Sve"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Svi\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Punjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napunjenosti)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Brzo punjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napunjenosti)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Sporo punjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napunjenosti)"</string> @@ -449,7 +447,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Prikazuju se sekunde na satu na traci statusa. Može utjecati na trajanje baterije."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Promijeni raspored Brzih postavki"</string> <string name="show_brightness" msgid="6613930842805942519">"Prikaži svjetlinu u Brzim postavkama"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Omogući ubrzanje za podijeljen zaslon povlačenjem prema gore"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Omogući pokret povlačenja prema gore za podijeljen zaslon"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Omogućivanje pokreta za otvaranje podijeljenog zaslona tako da se od gumba Pregled prstom prijeđe prema gore"</string> <string name="experimental" msgid="6198182315536726162">"Eksperimentalno"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Želite li uključiti Bluetooth?"</string> @@ -469,14 +467,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Prikaži na zaslonu i emitiraj zvučni signal"</string> <string name="notification_more_settings" msgid="816306283396553571">"Više postavki"</string> <string name="notification_done" msgid="5279426047273930175">"Gotovo"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Uobičajene boje"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Noćne boje"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Prilagođene boje"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automatski"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Nepoznate boje"</string> - <string name="color_transform" msgid="6985460408079086090">"Izmjena boja"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Prikaži pločicu s brzim postavkama"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Omogući prilagođenu preobrazbu"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Boja i izgled"</string> + <string name="night_mode" msgid="3540405868248625488">"Noćni način rada"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Kalibriranje zaslona"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Uključeno"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Isključeno"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Uključi automatski"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Prebacivanje na noćni način rada prema lokaciji i dobu dana"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Kada je noćni način rada uključen"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Koristi tamnu temu za OS Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Prilagodi nijansu"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Prilagodi svjetlinu"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Tamna se tema primjenjuje na glavna područja OS-a Android koja se inače prikazuju u svijetloj temi, primjerice postavke i obavijesti."</string> <string name="color_apply" msgid="9212602012641034283">"Primijeni"</string> <string name="color_revert_title" msgid="4746666545480534663">"Potvrdite postavke"</string> <string name="color_revert_message" msgid="9116001069397996691">"Neke postavke boja mogu učiniti uređaj neupotrebljivim. Kliknite U redu da biste potvrdili postavke boja jer će se u suprotnom poništiti za 10 sekundi."</string> @@ -488,21 +490,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Početni zaslon"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Najnovije"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Natrag"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Prikaži \"Ne uznemiravaj\" u glasnoći"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Dopušta potpunu kontrolu nad načinom \"Ne uznemiravaj\" u dijaloškom okviru glasnoće."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Glasnoća i Ne uznemiravaj"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Pokreni \"Ne uznemiravaj\" kada je zvuk stišan"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Prikaži s kontrolama glasnoće"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Ne uznemiravaj"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Prečac tipki za glasnoću"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Zaustavi \"Ne uznemiravaj\" kada je zvuk pojačan"</string> <string name="battery" msgid="7498329822413202973">"Baterija"</string> <string name="clock" msgid="7416090374234785905">"Sat"</string> <string name="headset" msgid="4534219457597457353">"Slušalice"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Slušalice su povezane"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Slušalice su povezane"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Omogućuje ili onemogućuje prikazivanje ikona na traci statusa."</string> <string name="data_saver" msgid="5037565123367048522">"Ušteda podataka"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Ušteda podataka je uključena"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Ušteda podataka je isključena"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Uključeno"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Isključeno"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigacijska traka"</string> <string name="start" msgid="6873794757232879664">"Početak"</string> <string name="center" msgid="4327473927066010960">"Sredina"</string> @@ -525,4 +526,15 @@ <string name="preview" msgid="9077832302472282938">"Pregled"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Povucite da biste dodali pločice"</string> <string name="qs_edit" msgid="2232596095725105230">"Uredi"</string> + <string name="tuner_time" msgid="6572217313285536011">"Vrijeme"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Prikaži sate, minute i sekunde"</item> + <item msgid="1427801730816895300">"Prikaži sate i minute (zadano)"</item> + <item msgid="3830170141562534721">"Ne prikazuj tu ikonu"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Uvijek prikazuj postotak"</item> + <item msgid="2139628951880142927">"Prikazuj postotak tijekom punjenja (zadano)"</item> + <item msgid="3327323682209964956">"Ne prikazuj tu ikonu"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index 0dd5d45fc739..440c3f29be1e 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Teljes\nnémítás"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Csak\nprioritás"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Csak\nriasztások"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Összes"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Összes\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Töltés (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> a teljes töltöttségig)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Gyors töltés (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> a teljes töltöttségig)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Lassú töltés (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> a teljes töltöttségig)"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Másodpercek megjelenítése az állapotsor óráján. Ez hatással lehet az akkumulátor üzemidejére."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Gyorsbeállítások átrendezése"</string> <string name="show_brightness" msgid="6613930842805942519">"Fényerő megjelenítése a gyorsbeállításokban"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Osztott képernyő engedélyezése felfelé söpréssel"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Képernyőfelosztó gyors felfelé csúsztatás engedélyezése"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Kézmozdulat engedélyezése osztott képernyős nézet aktiválásához, ha az Áttekintés gombról felfelé húzza az ujját"</string> <string name="experimental" msgid="6198182315536726162">"Kísérleti"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Engedélyezi a Bluetooth-kapcsolatot?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Az értesítések felugranak a képernyőn hangjelzéssel"</string> <string name="notification_more_settings" msgid="816306283396553571">"További beállítások"</string> <string name="notification_done" msgid="5279426047273930175">"Kész"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Hagyományos színek"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Esti színek"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Egyéni színek"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automatikus"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Ismeretlen színek"</string> - <string name="color_transform" msgid="6985460408079086090">"Színmódosítás"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Gyorsbeállítások mozaikjának megjelenítése"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Egyéni átalakítás engedélyezése"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Szín és megjelenés"</string> + <string name="night_mode" msgid="3540405868248625488">"Éjszakai mód"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Kijelző kalibrálása"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Bekapcsolva"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Kikapcsolva"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Automatikus bekapcsolás"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Váltás az Éjszakai módra a helynek és napszaknak megfelelően"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Amikor be van kapcsolva az Éjszakai mód"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Sötét téma használata az Android operációs rendszernél"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Színárnyalat módosítása"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Fényerő módosítása"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Sötét téma látható az Android operációs rendszer olyan alapterületeinél, amelyek normál állapotban világosan jelennek meg (például a Beállítások és az értesítések)."</string> <string name="color_apply" msgid="9212602012641034283">"Alkalmaz"</string> <string name="color_revert_title" msgid="4746666545480534663">"Beállítások megerősítése"</string> <string name="color_revert_message" msgid="9116001069397996691">"Bizonyos színbeállítások használhatatlanná tehetik ezt az eszközt. A színbeállítás megerősítéséhez kattintson az OK lehetőségre, máskülönben a rendszer 10 másodpercen belül visszaáll a korábbira."</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Otthon"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Legutóbbiak"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Vissza"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"A „Ne zavarjanak” funkció megjelenítése a hangvezérlőben"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"A „Ne zavarjanak” funkció teljes körű vezérlésének engedélyezése a hangerővezérlési párbeszédpanelon."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Hangvezérlő és „Ne zavarjanak” funkció"</string> - <string name="volume_down_silent" msgid="66962568467719591">"„Ne zavarjanak” aktiválása hangerőcsökkentéskor"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Megjelenítés hangerőszabályzóval"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Ne zavarjanak"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"A hangerőgombok gyorsbillentyűk"</string> <string name="volume_up_silent" msgid="7141255269783588286">"„Ne zavarjanak” deaktiválása hangerőnöveléskor"</string> <string name="battery" msgid="7498329822413202973">"Akkumulátor"</string> <string name="clock" msgid="7416090374234785905">"Óra"</string> <string name="headset" msgid="4534219457597457353">"Headset"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Fejhallgató csatlakoztatva"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Headset csatlakoztatva"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Ikonok megjelenítése és elrejtése az állapotsoron."</string> <string name="data_saver" msgid="5037565123367048522">"Adatforgalom-csökkentő"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Az adatforgalom-csökkentő be van kapcsolva"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Az Adatforgalom-csökkentő ki van kapcsolva"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Be"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Ki"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigációs sáv"</string> <string name="start" msgid="6873794757232879664">"Kezdés"</string> <string name="center" msgid="4327473927066010960">"Igazítás középre"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Előnézet"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Húzza csempe hozzáadásához"</string> <string name="qs_edit" msgid="2232596095725105230">"Szerkesztés"</string> + <string name="tuner_time" msgid="6572217313285536011">"Idő"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Óra, perc és másodperc megjelenítése"</item> + <item msgid="1427801730816895300">"Óra és perc megjelenítése (alapértelmezett)"</item> + <item msgid="3830170141562534721">"Ne jelenjen meg ez az ikon"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Százalékos érték mindig látható"</item> + <item msgid="2139628951880142927">"Százalékos érték töltés közben látható (alapértelmezett)"</item> + <item msgid="3327323682209964956">"Ne jelenjen meg ez az ikon"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-hy-rAM/strings.xml b/packages/SystemUI/res/values-hy-rAM/strings.xml index 4f4af55e6303..ef7c8e3ae934 100644 --- a/packages/SystemUI/res/values-hy-rAM/strings.xml +++ b/packages/SystemUI/res/values-hy-rAM/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"էկրանի ամրակցում"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"որոնել"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Հնարավոր չէ գործարկել <xliff:g id="APP">%s</xliff:g>-ը:"</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> հավելվածը անվտանգ ռեժիմում անջատված է:"</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Պատմություն"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Մաքրել"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Հորիզոնական տրոհում"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Ընդհանուր\nլուռ վիճակը"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Միայն\nկարևորները"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Միայն\nզարթուցիչ"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Բոլորը"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Բոլորը\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Լիցքավորում (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> մինչև լրիվ լիցքավորումը)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Արագ լիցքավորում (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>՝ մինչև ավարտ)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Դանդաղ լիցքավորում (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>՝ մինչև ավարտ)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Ցույց տալ ժամացույցի վայրկյանները կարգավիճակի տողում: Կարող է ազդել մարտկոցի աշխատանքի ժամանակի վրա:"</string> <string name="qs_rearrange" msgid="8060918697551068765">"Վերադասավորել Արագ կարգավորումները"</string> <string name="show_brightness" msgid="6613930842805942519">"Ցույց տալ պայծառությունն Արագ կարգավորումներում"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Միացնել մատը վերև սահեցնելով էկրանը տրոհելու արագացուցիչը"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Ակտիվացնել մատը վերև սահեցնելով էկրանը տրոհելու ժեստը"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Միացնել Համատեսք կոճակից մատը դեպի վերև սահեցնելու միջոցով տրոհված էկրանի ռեժիմ անցնելու ժեստը"</string> <string name="experimental" msgid="6198182315536726162">"Փորձնական"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Միացնե՞լ Bluetooth-ը:"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Ցուցադրել էկրանին և հնչեցնել ձայնային ազդանշան"</string> <string name="notification_more_settings" msgid="816306283396553571">"Այլ կարգավորումներ"</string> <string name="notification_done" msgid="5279426047273930175">"Պատրաստ է"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Սովորական գույներ"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Գիշերային գույներ"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Հատուկ գույներ"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Ավտոմատ"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Անհայտ գույներ"</string> - <string name="color_transform" msgid="6985460408079086090">"Գույնի փոփոխում"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Ցույց տալ Արագ կարգավորումների սալիկը"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Միացնել հատուկ գունային անցումը"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Գույնը և արտաքին տեսքը"</string> + <string name="night_mode" msgid="3540405868248625488">"Գիշերային ռեժիմ"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Չափաբերել էկրանը"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Միացված է"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Անջատված է"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Միացնել ավտոմատ կերպով"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Անցեք Գիշերային ռեժիմի, եթե դա պահանջում է տեղը և օրվա ժամանակը"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Երբ Գիշերային ռեժիմը միացված է"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Օգտագործել մուգ թեման Android OS-ի համար"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Կարգավորել երանգը"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Կարգավորել պայծառությունը"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Մուգ թեման կիրառվում է Android OS-ի հիմնական հատվածների նկատմամբ, որոնք սովորաբար ցուցադրվում են բաց թենայում (օրինակ՝ Կարգավորումներ և ծանուցումներ):"</string> <string name="color_apply" msgid="9212602012641034283">"Կիրառել"</string> <string name="color_revert_title" msgid="4746666545480534663">"Հաստատել կարգավորումները"</string> <string name="color_revert_message" msgid="9116001069397996691">"Գունային որոշ կարգավորումները կարող են այս սարքը օգտագործման համար ոչ պիտանի դարձնել: Սեղմեք Լավ կոճակը՝ գունային այս կարգավորումները հաստատելու համար: Հակառակ դեպքում այս կարգավորումները կվերակայվեն 10 վայրկյան հետո:"</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Մարտկոցի օգտագործում"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Մարտկոցի տնտեսումը լիցքավորման ժամանակ հասանելի չէ"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Մարտկոցի տնտեսում"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Նվազեցնում է ծանրաբեռնվածությունը և ֆոնային տվյալները"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Գլխավոր էջ"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Վերջինները"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Հետ"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Ցույց տալ Չխանգարել գործառույթը ձայնի կառավարման պատուհանում"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Թույլատրել Չխանգարել գործառույթի ամբողջական վերահսկումը ձայնի կառավարման պատուհանում:"</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Ձայնի ուժգնություն և Չխանգարել գործառույթ"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Մտնել Չխանգարել գործառույթ ձայնի նվազեցման կոճակը սեղմելիս"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Ցույց տալ ձայնի ուժգնության կառավարման տարրերի հետ"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Չընդհատել"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Ձայնի կոճակների դյուրանցում"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Ելնել Չխանգարել գործառույթից ձայնի ավելացման կոճակը սեղմելիս"</string> <string name="battery" msgid="7498329822413202973">"Մարտկոց"</string> <string name="clock" msgid="7416090374234785905">"Ժամացույց"</string> <string name="headset" msgid="4534219457597457353">"Ականջակալ"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Ականջակալը կապակցված է"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Ականջակալը կապակցված է"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Միացնել կամ անջատել պատկերակների ցուցադրումը կարգավիճակի գոտում:"</string> <string name="data_saver" msgid="5037565123367048522">"Տվյալների խնայում"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Տվյալների խնայումը միացված է"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Տվյալների խնայումն անջատված է"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Միացնել"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Անջատել"</string> <string name="nav_bar" msgid="1993221402773877607">"Նավարկման գոտի"</string> <string name="start" msgid="6873794757232879664">"Սկսել"</string> <string name="center" msgid="4327473927066010960">"Կենտրոն"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Նախադիտում"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Քաշեք՝ սալիկներ ավելացնելու համար"</string> <string name="qs_edit" msgid="2232596095725105230">"Փոփոխել"</string> + <string name="tuner_time" msgid="6572217313285536011">"Ժամ"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Ցույց տալ ժամերը, րոպեները և վայրկյանները"</item> + <item msgid="1427801730816895300">"Ցույց տալ ժամերը և րոպեները (կանխադրված է)"</item> + <item msgid="3830170141562534721">"Ցույց չտալ այս պատկերակը"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Միշտ ցույց տալ տոկոսը"</item> + <item msgid="2139628951880142927">"Ցույց տալ տոկոսը լիցքավորելու ժամանակ (կանխադրված է)"</item> + <item msgid="3327323682209964956">"Ցույց չտալ այս պատկերակը"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index fa359addc594..c91d6fc54222 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"pin ke layar"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"telusuri"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Tidak dapat memulai <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> dinonaktifkan dalam mode aman."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Riwayat"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Hapus"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Pisahkan Horizontal"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Senyap\ntotal"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Hanya\nprioritas"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Hanya\nalarm"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Semua"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Semua\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Mengisi daya (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hingga penuh)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Mengisi daya dengan cepat (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hingga penuh)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Mengisi daya dengan lambat (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hingga penuh)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Tampilkan detik jam di bilah status. Dapat memengaruhi masa pakai baterai."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Atur Ulang Setelan Cepat"</string> <string name="show_brightness" msgid="6613930842805942519">"Tampilkan kecerahan di Setelan Cepat"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Aktifkan akselerator gesek atas untuk layar terpisah"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Aktifkan isyarat gesek atas untuk layar terpisah"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Aktifkan isyarat untuk masuk layar terpisah dengan menggesek tombol Ringkasan ke atas"</string> <string name="experimental" msgid="6198182315536726162">"Eksperimental"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Aktifkan Bluetooth?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Muncul di layar dan bunyikan suara"</string> <string name="notification_more_settings" msgid="816306283396553571">"Setelan lainnya"</string> <string name="notification_done" msgid="5279426047273930175">"Selesai"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Warna normal"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Warna malam"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Warna khusus"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Otomatis"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Warna tidak diketahui"</string> - <string name="color_transform" msgid="6985460408079086090">"Perubahan warna"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Tampilkan ubin Setelan Cepat"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Aktifkan transformasi khusus"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Warna dan tampilan"</string> + <string name="night_mode" msgid="3540405868248625488">"Mode malam"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Kalibrasi layar"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Aktif"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Nonaktif"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Aktifkan secara otomatis"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Beralih ke Mode Malam yang sesuai untuk lokasi dan waktu"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Saat Mode Malam aktif"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Gunakan tema gelap untuk OS Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Sesuaikan rona"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Sesuaikan kecerahan"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Tema gelap diterapkan ke area inti OS Android yang biasanya ditampilkan di tema terang, seperti Setelan dan notifikasi."</string> <string name="color_apply" msgid="9212602012641034283">"Terapkan"</string> <string name="color_revert_title" msgid="4746666545480534663">"Konfirmasi setelan"</string> <string name="color_revert_message" msgid="9116001069397996691">"Beberapa setelan warna dapat membuat perangkat ini tidak dapat digunakan. Klik OKE untuk mengonfirmasi setelan warna ini. Jika tidak, setelan ini akan disetel ulang setelah 10 detik."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Pemakaian baterai"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Penghemat Baterai tidak tersedia selama pengisian daya"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Penghemat Baterai"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Mengurangi performa dan data latar belakang"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Layar Utama"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Terbaru"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Kembali"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Tampilkan mode jangan ganggu di volume"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Izinkan kontrol penuh dari mode jangan mengganggu di dialog volume."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume dan mode Jangan ganggu"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Masukkan mode jangan ganggu di tombol kecilkan volume"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Tampilkan dengan kontrol volume"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Jangan ganggu"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Pintasan tombol volume"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Keluar dari mode jangan ganggu di tombol keraskan volume"</string> <string name="battery" msgid="7498329822413202973">"Baterai"</string> <string name="clock" msgid="7416090374234785905">"Jam"</string> <string name="headset" msgid="4534219457597457353">"Headset"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Headphone terhubung"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Headset terhubung"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Aktifkan atau nonaktifkan ikon yang ditampilkan di bilah status."</string> <string name="data_saver" msgid="5037565123367048522">"Penghemat Data"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Penghemat Data aktif"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Penghemat Data nonaktif"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Aktif"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Nonaktif"</string> <string name="nav_bar" msgid="1993221402773877607">"Bilah navigasi"</string> <string name="start" msgid="6873794757232879664">"Awal"</string> <string name="center" msgid="4327473927066010960">"Tengah"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Pratinjau"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Seret untuk menambahkan ubin"</string> <string name="qs_edit" msgid="2232596095725105230">"Edit"</string> + <string name="tuner_time" msgid="6572217313285536011">"Waktu"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Tampilkan jam, menit, dan detik"</item> + <item msgid="1427801730816895300">"Tampilkan jam dan menit (default)"</item> + <item msgid="3830170141562534721">"Jangan tampilkan ikon ini"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Selalu tampilkan persentase"</item> + <item msgid="2139628951880142927">"Tampilkan persentase saat mengisi daya (default)"</item> + <item msgid="3327323682209964956">"Jangan tampilkan ikon ini"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-is-rIS/strings.xml b/packages/SystemUI/res/values-is-rIS/strings.xml index 2fca674b0896..608ec51c7bbd 100644 --- a/packages/SystemUI/res/values-is-rIS/strings.xml +++ b/packages/SystemUI/res/values-is-rIS/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"skjáfesting"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"leita"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Ekki var hægt að ræsa <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Slökkt er á <xliff:g id="APP">%s</xliff:g> í öruggri stillingu."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Ferill"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Hreinsa"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Lárétt skipting"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Algjör\nþögn"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Aðeins\nforgangur"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Aðeins\nvekjarar"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Allar"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Allar\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Í hleðslu (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> fram að fullri hleðslu)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Í hraðri hleðslu (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> fram að fullri hleðslu)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Í hægri hleðslu (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> fram að fullri hleðslu)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Sýna sekúndur á klukku í stöðustikunni. Getur haft áhrif á endingu rafhlöðu."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Endurraða flýtistillingum"</string> <string name="show_brightness" msgid="6613930842805942519">"Sýna birtustig í flýtistillingum"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Virkja skjáskiptingu með því að strjúka upp"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Virkja skjáskiptingu með því að strjúka upp"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Virkja skjáskiptingarbendingu með því að strjúka upp frá yfirlitshnappi"</string> <string name="experimental" msgid="6198182315536726162">"Tilraunastillingar"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Kveikja á Bluetooth?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Birta á skjánum og spila hljóð"</string> <string name="notification_more_settings" msgid="816306283396553571">"Fleiri stillingar"</string> <string name="notification_done" msgid="5279426047273930175">"Lokið"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Venjulegir litir"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Næturlitir"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Sérsniðnir litir"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Sjálfvirkt"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Óþekktir litir"</string> - <string name="color_transform" msgid="6985460408079086090">"Litabreytingar"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Sýna flísar í flýtistillingum"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Kveikja á sérsniðinni umbreytingu"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Litur og útlit"</string> + <string name="night_mode" msgid="3540405868248625488">"Næturstilling"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Kvarða skjáinn"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Kveikt"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Slökkt"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Kveikja sjálfkrafa"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Skipta í næturstillingu í samræmi við staðsetningu og tíma dags"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Þegar kveikt er á næturstillingu"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Nota dökkt þema fyrir Android OS"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Stilla litblæ"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Stilla birtustig"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Dökka þemað er notað á þeim aðalsvæðum Android OS sem venjulega eru ljós, s.s. stillingum og tilkynningum."</string> <string name="color_apply" msgid="9212602012641034283">"Nota"</string> <string name="color_revert_title" msgid="4746666545480534663">"Staðfesta stillingar"</string> <string name="color_revert_message" msgid="9116001069397996691">"Sumar litastillingar kunna að bitna á notagildi tækisins. Veldu „Í lagi“ til að staðfesta þessar litastillingar, að öðrum kosti verða litirnir endurstilltir eftir tíu sekúndur."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Rafhlöðunotkun"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Ekki er hægt að nota rafhlöðusparnað meðan á hleðslu stendur"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Rafhlöðusparnaður"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Dregur úr afköstum og bakgrunnsgögnum"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Heim"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Nýlegt"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Til baka"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Sýna „Ónáðið ekki“ í hljóðstyrksvali"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Leyfa fulla stjórn á stillingunni „Ónáðið ekki“ í hljóðstyrksglugganum."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Hljóðstyrkur og „Ónáðið ekki“"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Kveikja á „Ónáðið ekki“ með því að lækka"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Sýna með hljóðstyrksstillingum"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Ónáðið ekki"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Flýtihnappar fyrir hljóðstyrk"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Slökkva á „Ónáðið ekki“ með því að hækka"</string> <string name="battery" msgid="7498329822413202973">"Rafhlaða"</string> <string name="clock" msgid="7416090374234785905">"Klukka"</string> <string name="headset" msgid="4534219457597457353">"Höfuðtól"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Heyrnartól tengd"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Höfuðtól tengt"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Birtu eða feldu myndtákn í stöðustikunni."</string> <string name="data_saver" msgid="5037565123367048522">"Gagnasparnaður"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Kveikt er á gagnasparnaði"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Slökkt er á gagnasparnaði"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Kveikt"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Slökkt"</string> <string name="nav_bar" msgid="1993221402773877607">"Yfirlitsstika"</string> <string name="start" msgid="6873794757232879664">"Byrja"</string> <string name="center" msgid="4327473927066010960">"Miðja"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Forskoðun"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Dragðu til að bæta við reitum"</string> <string name="qs_edit" msgid="2232596095725105230">"Breyta"</string> + <string name="tuner_time" msgid="6572217313285536011">"Tími"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Sýna klukkustundir, mínútur og sekúndur"</item> + <item msgid="1427801730816895300">"Sýna klukkustundir og mínútur (sjálfgefið)"</item> + <item msgid="3830170141562534721">"Ekki sýna þetta tákn"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Sýna alltaf hlutfall"</item> + <item msgid="2139628951880142927">"Sýna hlutfall meðan á hleðslu stendur (sjálfgefið)"</item> + <item msgid="3327323682209964956">"Ekki sýna þetta tákn"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index c2c05b4f887f..ee6c3ee333ad 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"blocco su schermo"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"cerca"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Impossibile avviare <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"L\'app <xliff:g id="APP">%s</xliff:g> è stata disattivata in modalità provvisoria."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Cronologia"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Cancella"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divisione in orizzontale"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Silenzio\ntotale"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Solo con\npriorità"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Solo\nsveglie"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Tutte"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Tutte\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"In carica (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> al termine)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Ricarica veloce (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> al termine)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Ricarica lenta (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> al termine)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Mostra i secondi nell\'orologio nella barra di stato. Ciò potrebbe ridurre la durata della carica della batteria."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Riorganizza Impostazioni rapide"</string> <string name="show_brightness" msgid="6613930842805942519">"Mostra luminosità in Impostazioni rapide"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Attiva Schermo diviso mediante scorrimento verso l\'alto"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Attiva Schermo diviso mediante scorrimento verso l\'alto"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Consente di attivare la modalità Schermo diviso scorrendo verso l\'alto dal pulsante Panoramica"</string> <string name="experimental" msgid="6198182315536726162">"Sperimentali"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Attivare il Bluetooth?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Apri sullo schermo e riproduci suono"</string> <string name="notification_more_settings" msgid="816306283396553571">"Altre impostazioni"</string> <string name="notification_done" msgid="5279426047273930175">"Fine"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Colori normali"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Colori per la notte"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Colori personalizzati"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automatico"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Colori sconosciuti"</string> - <string name="color_transform" msgid="6985460408079086090">"Modifica del colore"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Mostra il riquadro Impostazioni rapide"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Attiva la trasformazione personalizzata"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Colore e aspetto"</string> + <string name="night_mode" msgid="3540405868248625488">"Modalità notturna"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Calibra display"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Attiva"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Disattivata"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Attiva automaticamente"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Attiva la modalità notturna in base alla località e all\'ora del giorno"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Quando la modalità notturna è attiva"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Utilizza tema scuro per sistema Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Regola tinta"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Regola luminosità"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Il tema scuro viene applicato agli elementi fondamentali del sistema operativo Android che vengono generalmente visualizzati con un tema chiaro, ad esempio impostazioni e notifiche."</string> <string name="color_apply" msgid="9212602012641034283">"Applica"</string> <string name="color_revert_title" msgid="4746666545480534663">"Conferma le impostazioni"</string> <string name="color_revert_message" msgid="9116001069397996691">"Alcune impostazioni relative ai colori potrebbero rendere inutilizzabile il dispositivo. Fai clic su OK per confermare queste impostazioni; in caso contrario, le impostazioni verranno reimpostate dopo 10 secondi."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Utilizzo batteria"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Risparmio energetico non disponibile durante la ricarica"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Risparmio energetico"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Riduce le prestazioni e i dati in background"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Home"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recenti"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Indietro"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Mostra Non disturbare nella finestra del volume"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Consenti il controllo totale della funzione Non disturbare nella finestra di dialogo del volume."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume e Non disturbare"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Attiva Non disturbare all\'abbassamento del volume"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Mostra con controlli volume"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Non disturbare"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Pulsanti del volume come scorciatoia"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Disattiva Non disturbare all\'aumento del volume"</string> <string name="battery" msgid="7498329822413202973">"Batteria"</string> <string name="clock" msgid="7416090374234785905">"Orologio"</string> <string name="headset" msgid="4534219457597457353">"Auricolare"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Cuffie collegate"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Auricolare collegato"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Consente di attivare o disattivare la visualizzazione delle icone nella barra di stato."</string> <string name="data_saver" msgid="5037565123367048522">"Risparmio dati"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Risparmio dati attivo"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Risparmio dati disattivato"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Attiva"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Off"</string> <string name="nav_bar" msgid="1993221402773877607">"Barra di navigazione"</string> <string name="start" msgid="6873794757232879664">"All\'inizio"</string> <string name="center" msgid="4327473927066010960">"Al centro"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Anteprima"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Trascina per aggiungere i riquadri"</string> <string name="qs_edit" msgid="2232596095725105230">"Modifica"</string> + <string name="tuner_time" msgid="6572217313285536011">"Ora"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Mostra ore, minuti e secondi"</item> + <item msgid="1427801730816895300">"Mostra ore e minuti (opzione predefinita)"</item> + <item msgid="3830170141562534721">"Non mostrare questa icona"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Mostra sempre la percentuale"</item> + <item msgid="2139628951880142927">"Mostra la percentuale quando in carica (opzione predefinita)"</item> + <item msgid="3327323682209964956">"Non mostrare questa icona"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index 2601d36f4358..8af9575b9411 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -303,8 +303,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"הצמדת מסך"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"חפש"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"לא ניתן היה להפעיל את <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> מושבת במצב בטוח."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"היסטוריה"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"נקה"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"פיצול אופקי"</string> @@ -336,8 +335,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"שקט\nמוחלט"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"התראות בעדיפות\nבלבד"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"התראות\nבלבד"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"הכל"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"הכל\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"טוען (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> עד לסיום)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"בטעינה מהירה (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> עד למילוי)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"בטעינה איטית (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> עד למילוי)"</string> @@ -450,7 +447,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"הצג שניות בשעון בשורת הסטטוס. פעולה זו עשויה להשפיע על אורך חיי הסוללה."</string> <string name="qs_rearrange" msgid="8060918697551068765">"סידור מחדש של הגדרות מהירות"</string> <string name="show_brightness" msgid="6613930842805942519">"הצג בהירות בהגדרות מהירות"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"הפעל מאיץ מסך מפוצל על ידי החלקה כלפי מעלה"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"הפעל מסך מפוצל על ידי תנועת החלקה כלפי מעלה"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"הפעל את התנועה לכניסה למסך מפוצל על ידי החלקה כלפי מעלה מלחצן הסקירה"</string> <string name="experimental" msgid="6198182315536726162">"ניסיוניות"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"האם להפעיל את ה-Bluetooth?"</string> @@ -470,19 +467,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"הצג לרגע על המסך והשמע צליל"</string> <string name="notification_more_settings" msgid="816306283396553571">"הגדרות נוספות"</string> <string name="notification_done" msgid="5279426047273930175">"סיום"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"צבעים רגילים"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"צבעי לילה"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"צבעים מותאמים אישית"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"אוטומטי"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"צבעים לא ידועים"</string> - <string name="color_transform" msgid="6985460408079086090">"שינוי צבע"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"הצגת אריח של הגדרות מהירות"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"הפעל טרנספורמציה מותאמת אישית"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"צבע ומראה"</string> + <string name="night_mode" msgid="3540405868248625488">"מצב לילה"</string> + <string name="calibrate_display" msgid="5974642573432039217">"כיול תצוגה"</string> + <string name="night_mode_on" msgid="5597545513026541108">"פועל"</string> + <string name="night_mode_off" msgid="8035605276956057508">"כבוי"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"הפעל אוטומטית"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"החלף למצב לילה בהתאם למיקום ולשעה ביום"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"כאשר מצב לילה מופעל"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"השתמש בעיצוב כהה למערכת ההפעלה של Android."</string> + <string name="adjust_tint" msgid="3398569573231409878">"התאמת גוון"</string> + <string name="adjust_brightness" msgid="980039329808178246">"התאמת בהירות"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"העיצוב הכהה מוחל על התחומים העיקריים במערכת ההפעלה של Android שמוצגים בדרך כלל בעיצוב בהיר, כמו \'הגדרות\' ו\'הודעות\'."</string> <string name="color_apply" msgid="9212602012641034283">"החל"</string> <string name="color_revert_title" msgid="4746666545480534663">"אישור הגדרות"</string> <string name="color_revert_message" msgid="9116001069397996691">"הגדרות צבע מסוימות עלולות להפוך את המכשיר הזה לבלתי שמיש. לחץ על אישור כדי לאשר את הגדרות הצבע האלה, אחרת הגדרות אלה יתאפסו לאחר 10 שניות."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"שימוש בסוללה"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"תכונת החיסכון בסוללה אינה זמינה בעת טעינת המכשיר"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"חיסכון בסוללה"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"מפחית את רמת הביצועים ואת נתוני הרקע"</string> @@ -490,21 +490,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"דף הבית"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"אחרונים"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"הקודם"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"הצג את החלונית \'נא לא להפריע\' בעוצמת הקול"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"אפשר שליטה מלאה בחלונית \'נא לא להפריע\' בתיבת הדו-שיח של עוצמת הקול."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"עוצמת הקול והאפשרות \'נא לא להפריע\'"</string> - <string name="volume_down_silent" msgid="66962568467719591">"היכנס לאפשרות \'נא לא להפריע\' בהחלשת עוצמת הקול"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"הצג עם פקדי עוצמת הקול"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"נא לא להפריע"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"מקש קיצור ללחצני עוצמת קול"</string> <string name="volume_up_silent" msgid="7141255269783588286">"צא מהאפשרות \'נא לא להפריע\' בהגברת עוצמת הקול"</string> <string name="battery" msgid="7498329822413202973">"סוללה"</string> <string name="clock" msgid="7416090374234785905">"שעון"</string> <string name="headset" msgid="4534219457597457353">"אוזניות"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"אוזניות מחוברות"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"אוזניות מחוברות"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"הפעלה או השבתה של סמלים המוצגים בשורת הסטטוס."</string> <string name="data_saver" msgid="5037565123367048522">"חוסך הנתונים (Data Saver)"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"חוסך הנתונים (Data Saver) פועל"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"חוסך הנתונים (Data Saver) כבוי"</string> <string name="switch_bar_on" msgid="1142437840752794229">"פועל"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"כבוי"</string> <string name="nav_bar" msgid="1993221402773877607">"סרגל ניווט"</string> <string name="start" msgid="6873794757232879664">"התחלה"</string> <string name="center" msgid="4327473927066010960">"מרכז"</string> @@ -527,4 +526,15 @@ <string name="preview" msgid="9077832302472282938">"תצוגה מקדימה"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"גרור כדי להוסיף משבצות"</string> <string name="qs_edit" msgid="2232596095725105230">"ערוך"</string> + <string name="tuner_time" msgid="6572217313285536011">"שעה"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"הצג שעות, דקות ושניות"</item> + <item msgid="1427801730816895300">"הצג שעות ודקות (ברירת מחדל)"</item> + <item msgid="3830170141562534721">"אל תציג את הסמל הזה"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"הצג תמיד באחוזים"</item> + <item msgid="2139628951880142927">"הצג באחוזים בזמן טעינה (ברירת מחדל)"</item> + <item msgid="3327323682209964956">"אל תציג את הסמל הזה"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 27b3854b46a8..76fdb73b4c9d 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"画面固定"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"検索"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>を開始できません。"</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"「<xliff:g id="APP">%s</xliff:g>」はセーフモードでは無効になります。"</string> <string name="recents_history_button_label" msgid="5153358867807604821">"履歴"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"消去"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"横に分割"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"サイレント\n"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"重要な\n通知のみ"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"アラーム\nのみ"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"すべて"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"すべて\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"充電中(フル充電まで<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"急速充電中(完了まで<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"低速充電中(完了まで<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"ステータスバーに時計の秒を表示します。電池使用量に影響する可能性があります。"</string> <string name="qs_rearrange" msgid="8060918697551068765">"クイック設定を並べ替え"</string> <string name="show_brightness" msgid="6613930842805942519">"クイック設定に明るさ調整バーを表示する"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"スワイプアップ分割画面アクセラレータを有効にする"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"上にスワイプして分割画面に切り替える操作を有効にする"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"[概要] ボタンから上にスワイプして分割画面に切り替える操作を有効にします"</string> <string name="experimental" msgid="6198182315536726162">"試験運用版"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"BluetoothをONにしますか?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"画面に数秒間表示し、音声でも知らせる"</string> <string name="notification_more_settings" msgid="816306283396553571">"詳細設定"</string> <string name="notification_done" msgid="5279426047273930175">"完了"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"標準の色"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"夜間の色"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"カスタムの色"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"自動"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"不明な色"</string> - <string name="color_transform" msgid="6985460408079086090">"色の変更"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"[クイック設定] タイルの表示"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"カスタム変換の有効化"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"色と表示"</string> + <string name="night_mode" msgid="3540405868248625488">"夜間モード"</string> + <string name="calibrate_display" msgid="5974642573432039217">"表示の調整"</string> + <string name="night_mode_on" msgid="5597545513026541108">"ON"</string> + <string name="night_mode_off" msgid="8035605276956057508">"OFF"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"自動的に ON"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"場所や時間に応じて夜間モードに切り替えます"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"夜間モードが ON のとき"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS でダークテーマを使用"</string> + <string name="adjust_tint" msgid="3398569573231409878">"ティントを調整"</string> + <string name="adjust_brightness" msgid="980039329808178246">"明るさを調整"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"通常ライトテーマで表示される Android OS の主要領域(設定や通知など)にダークテーマが適用されます。"</string> <string name="color_apply" msgid="9212602012641034283">"適用"</string> <string name="color_revert_title" msgid="4746666545480534663">"設定の確認"</string> <string name="color_revert_message" msgid="9116001069397996691">"一部の色設定を適用すると、この端末を使用できなくなることがあります。この色設定を確認するには、[OK] をクリックしてください。確認しない場合、10 秒後に設定はリセットされます。"</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"電池の使用状況"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"充電中はバッテリー セーバーは利用できません"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"バッテリー セーバー"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"パフォーマンスとバックグラウンド データを制限します"</string> @@ -488,17 +488,15 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"ホーム"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"最近"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"戻る"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"音量内に [通知を非表示] を表示"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"音量ダイアログでの [通知を非表示] の管理を許可します。"</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"音量と [通知を非表示]"</string> - <string name="volume_down_silent" msgid="66962568467719591">"音量下げボタンで [通知を非表示] を ON にする"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"音量調節を表示"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"通知の非表示"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"音量ボタンのショートカット"</string> <string name="volume_up_silent" msgid="7141255269783588286">"音量上げボタンで [通知を非表示] を OFF にする"</string> <string name="battery" msgid="7498329822413202973">"電池"</string> <string name="clock" msgid="7416090374234785905">"時計"</string> <string name="headset" msgid="4534219457597457353">"ヘッドセット"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ヘッドホンを接続しました"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ヘッドセットを接続しました"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"ステータスバーでのアイコンの表示を有効または無効にします。"</string> <!-- no translation found for data_saver (5037565123367048522) --> <skip /> <!-- no translation found for accessibility_data_saver_on (8454111686783887148) --> @@ -506,6 +504,7 @@ <!-- no translation found for accessibility_data_saver_off (8841582529453005337) --> <skip /> <string name="switch_bar_on" msgid="1142437840752794229">"ON"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"OFF"</string> <string name="nav_bar" msgid="1993221402773877607">"ナビゲーション バー"</string> <string name="start" msgid="6873794757232879664">"最初"</string> <string name="center" msgid="4327473927066010960">"中央"</string> @@ -528,4 +527,15 @@ <string name="preview" msgid="9077832302472282938">"プレビュー"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"タイルを追加するにはドラッグしてください"</string> <string name="qs_edit" msgid="2232596095725105230">"編集"</string> + <string name="tuner_time" msgid="6572217313285536011">"時間"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"時間、分、秒を表示"</item> + <item msgid="1427801730816895300">"時間、分を表示(デフォルト)"</item> + <item msgid="3830170141562534721">"このアイコンを表示しない"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"常に割合を表示"</item> + <item msgid="2139628951880142927">"変更時に割合を表示(デフォルト)"</item> + <item msgid="3327323682209964956">"このアイコンを表示しない"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-ka-rGE/strings.xml b/packages/SystemUI/res/values-ka-rGE/strings.xml index dc48079e43c9..69637707c3bc 100644 --- a/packages/SystemUI/res/values-ka-rGE/strings.xml +++ b/packages/SystemUI/res/values-ka-rGE/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ეკრანზე ჩამაგრება"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"ძიება"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>-ის გამოძახება ვერ მოხერხდა."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> გათიშულია უსაფრთხო რეჟიმში."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"ისტორია"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"გასუფთავება"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ჰორიზონტალური გაყოფა"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"სრული\nსიჩუმე"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"მხოლოდ\nპრიორიტეტულები"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"მხოლოდ\nგაფრთხილებები"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"ყველა"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"ყველა\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>-ის შეცვლა დასრულებამდე)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"იტენება სწრაფად (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> სრულ დატენვამდე)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"იტენება ნელა (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> სრულ დატენვამდე)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"საათის წამების ჩვენება სტატუსის ზოლში. შეიძლება გავლენა იქონიოს ბატარეაზე."</string> <string name="qs_rearrange" msgid="8060918697551068765">"სწრაფი პარამეტრების გადაწყობა"</string> <string name="show_brightness" msgid="6613930842805942519">"სიკაშკაშის ჩვენება სწრაფ პარამეტრებში"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"ზემოთ გადაფურცვლისას ეკრანის გაყოფის მაჩქარებლის ჩართვა"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"ზემოთ გადაფურცვლისას ეკრანის გაყოფის ჟესტის ჩართვა"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"მიმოხილვის ღილაკიდან ზემოთ გადაფურცვლისას ეკრანის გაყოფის რეჟიმზე გადასვლის ჟესტის ჩართვა"</string> <string name="experimental" msgid="6198182315536726162">"ექსპერიმენტული"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"გსურთ Bluetooth-ის ჩართვა?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"ამ შეტყობინებების პირდაპირ ეკრანზე, ხმოვან სიგნალთან ერთად ჩვენება"</string> <string name="notification_more_settings" msgid="816306283396553571">"დამატებითი პარამეტრები"</string> <string name="notification_done" msgid="5279426047273930175">"მზადაა"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"ჩვეულებრივი ფერები"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"ღამის ფერები"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"მორგებული ფერები"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"ავტომატური"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"უცნობი ფერები"</string> - <string name="color_transform" msgid="6985460408079086090">"ფერების შეცვლა"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"სწრაფი პარამეტრების მოზაიკის ჩვენება"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"მორგებული გარდაქმნის ჩართვა"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"ფერი და იერსახე"</string> + <string name="night_mode" msgid="3540405868248625488">"ღამის რეჟიმი"</string> + <string name="calibrate_display" msgid="5974642573432039217">"ეკრანის კალიბრაცია"</string> + <string name="night_mode_on" msgid="5597545513026541108">"ჩართული"</string> + <string name="night_mode_off" msgid="8035605276956057508">"გამორთული"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"ავტომატურად ჩართვა"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"ღამის რეჟიმზე გადართვა მდებარეობისა და დღე-ღამის მონაკვეთის შესაბამისად."</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"ღამის რეჟიმის ჩართვისას"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS-ისთვის მუქი თემის გამოყენება"</string> + <string name="adjust_tint" msgid="3398569573231409878">"ელფერის გასწორება"</string> + <string name="adjust_brightness" msgid="980039329808178246">"სიკაშკაშის გასწორება"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"მუქი თემა მიესადაგება Android OS-ის ძირითად არეებს, რომლებიც, ჩვეულებრივ, ღია თემის მეშვეობით არის ნაჩვენები. მაგალითად, პარამეტრებს და შეტყობინებებს."</string> <string name="color_apply" msgid="9212602012641034283">"გამოყენება"</string> <string name="color_revert_title" msgid="4746666545480534663">"პარამეტრების დადასტურება"</string> <string name="color_revert_message" msgid="9116001069397996691">"ფერთა ზოგიერთ პარამეტრს ამ მოწყობილობასთან მუშაობის გართულება შეუძლია. ფერთა ამჟამინდელი პარამეტრების დასადასტურებლად, დააწკაპუნეთ „კარგი“-ზე. წინააღმდეგ შემთხვევაში, პარამეტრები 10 წამის შემდეგ ჩამოიყრება."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"ბატარეის მოხმარება"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"ბატარეის დამზოგი დატენვისას მიწვდომელია"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"ბატარეის დამზოგი"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"ამცირებს წარმადობას და ფონურ მონაცემებს"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"მთავარი"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"ბოლოს გამოყენებული"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"უკან"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"ხმის დიალოგში „არ შემაწუხოთ“ რეჟიმის ჩვენება"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"ხმის დიალოგში „არ შემაწუხოთ“ რეჟიმის სრული კონტროლის დაშვება."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"ხმა და „არ შემაწუხოთ“"</string> - <string name="volume_down_silent" msgid="66962568467719591">"ხმის დაწევისას „არ შემაწუხოთ“ რეჟიმზე გადასვლა"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"ხმის მართვის საშუალებების ჩვენება"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"არ შემაწუხოთ"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"ხმის ღილაკების მალსახმობი"</string> <string name="volume_up_silent" msgid="7141255269783588286">"ხმის აწევისას „არ შემაწუხოთ“ რეჟიმიდან გამოსვლა"</string> <string name="battery" msgid="7498329822413202973">"ბატარეა"</string> <string name="clock" msgid="7416090374234785905">"საათი"</string> <string name="headset" msgid="4534219457597457353">"ყურსაცვამი"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ყურსასმენები დაკავშირებულია"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ყურსაცვამი დაკავშირებულია"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"სტატუსის ზოლში ხატულების ჩვენების ჩართვა ან გათიშვა."</string> <string name="data_saver" msgid="5037565123367048522">"მონაცემთა დამზოგველი"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"მონაცემთა დამზოგველი ჩართულია"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"მონაცემთა დამზოგველი გამორთულია"</string> <string name="switch_bar_on" msgid="1142437840752794229">"ჩართული"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"გამორთვა"</string> <string name="nav_bar" msgid="1993221402773877607">"ნავიგაციის ზოლი"</string> <string name="start" msgid="6873794757232879664">"თავში"</string> <string name="center" msgid="4327473927066010960">"ცენტრში"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"გადახედვა"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"ფილების დასამატებლად, გადაიტანეთ ჩავლებით"</string> <string name="qs_edit" msgid="2232596095725105230">"რედაქტირება"</string> + <string name="tuner_time" msgid="6572217313285536011">"დრო"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"საათების, წუთებისა და წამების ჩვენება"</item> + <item msgid="1427801730816895300">"საათებისა და წუთების ჩვენება (ნაგულისხმევი)"</item> + <item msgid="3830170141562534721">"აღარ მაჩვენო ეს ხატულა"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"პროცენტულობის ყოველთვის ჩვენება"</item> + <item msgid="2139628951880142927">"პროცენტულობის დატენვისას ჩვენება (ნაგულისხმევი)"</item> + <item msgid="3327323682209964956">"აღარ მაჩვენო ეს ხატულა"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-kk-rKZ/strings.xml b/packages/SystemUI/res/values-kk-rKZ/strings.xml index 1268e41aaed5..60ab9f89adb0 100644 --- a/packages/SystemUI/res/values-kk-rKZ/strings.xml +++ b/packages/SystemUI/res/values-kk-rKZ/strings.xml @@ -334,8 +334,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Толық\nтыныштық"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Тек\nбасымдық"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Тек\nдабылдар"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Барлығы"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Барлығы\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Зарядталуда (толғанша <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Жылдам зарядталуда (толғанша <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Баяу зарядталуда (толғанша <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -448,7 +446,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Күйін көрсету жолағында сағат секундтарын көрсету. Батареяның қызмет көрсету мерзіміне әсер етуі мүмкін."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Жылдам параметрлерді қайта реттеу"</string> <string name="show_brightness" msgid="6613930842805942519">"Жылдам параметрлерде жарықтықты көрсету"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Бөлінген экранды жоғары қарай жанау жеделдеткішін қосу"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Бөлінген экранда жоғары қарай сырғыту қимылын қосу"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"\"Шолу\" түймесінен жоғары қарай жанау арқылы бөлінген экранға кіру қимылын қосу"</string> <string name="experimental" msgid="6198182315536726162">"Эксперименттік"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth функциясын қосу керек пе?"</string> @@ -468,19 +466,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Экранға бекіту және дыбыс шығару"</string> <string name="notification_more_settings" msgid="816306283396553571">"Қосымша параметрлер"</string> <string name="notification_done" msgid="5279426047273930175">"Дайын"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Қалыпты түстер"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Түнгі түстер"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Арнаулы түстер"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Авто"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Белгісіз түстер"</string> - <string name="color_transform" msgid="6985460408079086090">"Түсті өзгерту"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Жылдам параметрлер торын көрсету"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Арнаулы түрлендіруді қосу"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Түс және сыртқы түрі"</string> + <string name="night_mode" msgid="3540405868248625488">"Түнгі режим"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Дисплейді калибрлеу"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Қосулы"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Өшірулі"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Автоматты түрде қосу"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Орынға және күн уақытына тиісті түнгі режимге ауысу"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Түнгі режим қосулы кезде"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android ОЖ үшін күңгірт тақырыпты пайдалану"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Реңкті реттеу"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Жарықтықты реттеу"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Күңгірт тақырып Android операциялық жүйесінің әдетте ашық тақырыпта көрсетілетін негізгі аумақтарына қолданылады, мысалы, \"Параметрлер\" тармағына және хабарландыруларға."</string> <string name="color_apply" msgid="9212602012641034283">"Қолдану"</string> <string name="color_revert_title" msgid="4746666545480534663">"Параметрлерді растау"</string> <string name="color_revert_message" msgid="9116001069397996691">"Кейбір түс параметрлері бұл құрылғыны пайдалану мүмкін емес етуі мүмкін. Бұл түс параметрлерін растау үшін OK түймесін басыңыз, әйтпесе параметрлер 10 секундтан кейін ысырылады."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Батареяны пайдалану"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Зарядтау кезінде Батарея үнемдегіш қол жетімді емес"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Батарея үнемдегіш"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Өнімділікті және фондық деректерді азайтады"</string> @@ -488,21 +489,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Негізгі бет"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Жақындағылар"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Артқа"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Дыбыс деңгейінде \"Мазаламау\" режимін көрсету"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Дыбыс деңгейі диалогтық терезесінде \"Мазаламау\" режимін толық басқаруға рұқсат ету."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Дыбыс деңгейі және \"Мазаламау\""</string> - <string name="volume_down_silent" msgid="66962568467719591">"Дыбыс деңгейін төмендеткенде \"Мазаламау\" режиміне кіру"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Дыбыс деңгейін басқару элементтерімен бірге көрсету"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Мазаламау"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Дыбыс деңгейі түймелерінің төте жолы"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Дыбыс деңгейін көтергенде \"Мазаламау\" режимінен шығу"</string> <string name="battery" msgid="7498329822413202973">"Батарея"</string> <string name="clock" msgid="7416090374234785905">"Сағат"</string> <string name="headset" msgid="4534219457597457353">"Құлақаспап жинағы"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Құлақаспап қосылды"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Құлақаспап жинағы қосылды"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Белгішелердің күй жолағында көрсетілуін қосу немесе өшіру"</string> <string name="data_saver" msgid="5037565123367048522">"Дерек сақтағыш"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Дерек сақтағыш қосулы"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Дерек сақтағышы өшірулі"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Қосулы"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Өшірулі"</string> <string name="nav_bar" msgid="1993221402773877607">"Шарлау тақтасы"</string> <string name="start" msgid="6873794757232879664">"Бастау"</string> <string name="center" msgid="4327473927066010960">"Орталық"</string> @@ -525,4 +525,15 @@ <string name="preview" msgid="9077832302472282938">"Алдын ала қарау"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Торлар қосу үшін сүйреңіз"</string> <string name="qs_edit" msgid="2232596095725105230">"Өңдеу"</string> + <string name="tuner_time" msgid="6572217313285536011">"Уақыт"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Сағаттарды, минуттарды және секундтарды көрсету"</item> + <item msgid="1427801730816895300">"Сағаттарды және минуттарды көрсету (әдепкі)"</item> + <item msgid="3830170141562534721">"Бұл белгішені көрсетпеу"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Әрқашан пайызды көрсету"</item> + <item msgid="2139628951880142927">"Зарядтау кезінде пайызды көрсету (әдепкі)"</item> + <item msgid="3327323682209964956">"Бұл белгішені көрсетпеу"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-km-rKH/strings.xml b/packages/SystemUI/res/values-km-rKH/strings.xml index 74b1fafc550a..32cdbcc91bbb 100644 --- a/packages/SystemUI/res/values-km-rKH/strings.xml +++ b/packages/SystemUI/res/values-km-rKH/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ការភ្ជាប់អេក្រង់"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"ស្វែងរក"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"មិនអាចចាប់ផ្ដើម <xliff:g id="APP">%s</xliff:g> ទេ។"</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> ត្រូវបានបិទដំណើរការក្នុងរបៀបសុវត្ថិភាព"</string> <string name="recents_history_button_label" msgid="5153358867807604821">"ប្រវត្តិ"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"សម្អាត"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"បំបែកផ្តេក"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"ស្ងៀមស្ងាត់\nទាំងស្រុង"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"អាទិភាព\nប៉ុណ្ណោះ"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"សំឡេងរោទ៍\nប៉ុណ្ណោះ"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"ទាំងអស់"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"ទាំងអស់\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"កំពុងបញ្ចូលថ្ម (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ទើបពេញ)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"ថ្មកំពុងសាកលឿន (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ទើបពេញ)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"ថ្មកំពុងសាកយឺតៗ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ទើបពេញ)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"បង្ហាញវិនាទីនៅលើរបារស្ថានភាពអាចនឹងប៉ះពាល់ដល់ថាមពលថ្ម។"</string> <string name="qs_rearrange" msgid="8060918697551068765">"រៀបចំការកំណត់រហ័សឡើងវិញ"</string> <string name="show_brightness" msgid="6613930842805942519">"បង្ហាញកម្រិតពន្លឺនៅក្នុងការកំណត់រហ័ស"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"បើកដំណើរការឧបករណ៍បង្កើនល្បឿនការអូសទៅលើដើម្បីបំបែកអេក្រង់"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"បើកដំណើរការកាយវិការអូសទៅលើដើម្បីបំបែកអេក្រង់"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"បើកដំណើរការកាយវិការដើម្បីបំបែកអេក្រង់ដោយអូសទៅលើចាប់ពីប៊ូតុងទិដ្ឋភាព"</string> <string name="experimental" msgid="6198182315536726162">"ពិសោធន៍"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"បើកប៊្លូធូសឬ?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"លោតបង្ហាញនៅលើអេក្រង់ និងបន្លឺសំឡេង"</string> <string name="notification_more_settings" msgid="816306283396553571">"ការកំណត់ច្រើនទៀត"</string> <string name="notification_done" msgid="5279426047273930175">"រួចរាល់"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"ពណ៌ធម្មតា"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"ពណ៌ពេលយប់"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"ពណ៌ផ្ទាល់ខ្លួន"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"ស្វ័យប្រវត្តិ"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"ពណ៌មិនស្គាល់"</string> - <string name="color_transform" msgid="6985460408079086090">"ការកែសម្រួលពណ៌"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"បង្ហាញផ្ទាំងប្រអប់ការកំណត់រហ័ស"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"បើកដំណើរការផ្លាស់ប្តូរផ្ទាល់ខ្លួន"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"ពណ៌ និងរូបរាង"</string> + <string name="night_mode" msgid="3540405868248625488">"របៀបពេលយប់"</string> + <string name="calibrate_display" msgid="5974642573432039217">"ការបង្ហាញក្រិត"</string> + <string name="night_mode_on" msgid="5597545513026541108">"បើក"</string> + <string name="night_mode_off" msgid="8035605276956057508">"បិទ"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"បើកដោយស្វ័យប្រវត្តិ"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"ប្តូរទៅជារបៀបពេលយប់ដែលសមស្របទៅតាមទីកន្លែង និងពេលវេលា"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"នៅពេលបើករបៀបពេលយប់"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"ប្រើធីមងងឹតសម្រាប់ប្រព័ន្ធប្រតិបត្តិការ Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"កែសម្រួលពណ៌ព្រឿងៗ"</string> + <string name="adjust_brightness" msgid="980039329808178246">"កែសម្រួលពន្លឺ"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"ធីមងងឹតត្រូវបានប្រើសម្រាប់ចំណុចស្នូលនៃប្រព័ន្ធប្រតិបត្តិការ Android ដែលជាទូទៅត្រូវបានបង្ហាញជាធីមដែលភ្លឺ ដូចជាការកំណត់ និងការជូនដំណឹង។"</string> <string name="color_apply" msgid="9212602012641034283">"អនុវត្ត"</string> <string name="color_revert_title" msgid="4746666545480534663">"បញ្ជាក់ការកំណត់"</string> <string name="color_revert_message" msgid="9116001069397996691">"ការកំណត់ពណ៌មួយចំនួនអាចធ្វើឲ្យឧបករណ៍នេះមិនអាចប្រើបាន។ សូមចុច យល់ព្រម ដើម្បីបញ្ជាក់ការកំណត់ពណ៌ទាំងនេះ បើមិនដូច្នេះទេការកំណត់ទាំងនេះនឹងកំណត់ឡើងវិញក្នុងរយៈពេល 10 វិនាទីបន្ទាប់។"</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"ការប្រើប្រាស់ថ្ម"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"កម្មវិធីសន្សំថ្មមិនអាចប្រើបានអំឡុងពេលសាកថ្មទេ"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"កម្មវិធីសន្សំថ្ម"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"កាត់បន្ថយប្រតិបត្តិការ និងទិន្នន័យផ្ទៃខាងក្រោយ"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"ដើម"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"ថ្មីៗ"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"ថយក្រោយ"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"បង្ហាញមុខងារកុំរំខាននៅក្នុងកម្រិតសំឡេង"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"អនុញ្ញាតឲ្យមានការគ្រប់គ្រងពេញលេញចំពោះមុខងារកុំរំខាននៅក្នុងប្រអប់កម្រិតសំឡេង។"</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"កម្រិតសំឡេង និងមុនងារកុំរំខាន"</string> - <string name="volume_down_silent" msgid="66962568467719591">"ចូលមុខងារកុំរំខាននៅពេលបន្ថយសំឡេង"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"បង្ហាញជាមួយការគ្រប់គ្រងកម្រិតសំឡេង"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"កុំរំខាន"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"ផ្លូវកាត់ប៊ូតុងកម្រិតសំឡេង"</string> <string name="volume_up_silent" msgid="7141255269783588286">"ចាកចេញពីមុខងារកុំរំខាននៅពេលបង្កើនសំឡេង"</string> <string name="battery" msgid="7498329822413202973">"ថ្ម"</string> <string name="clock" msgid="7416090374234785905">"នាឡិកា"</string> <string name="headset" msgid="4534219457597457353">"កាស"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"បានភ្ជាប់កាស"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"បានភ្ជាប់កាស"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"បើក ឬបិទដំណើរការបង្ហាញរូបតំណាងនៅលើរបារស្ថានភាព"</string> <string name="data_saver" msgid="5037565123367048522">"កម្មវិធីសន្សំសំចៃទិន្នន័យ"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"កម្មវិធីសន្សំសំចៃទិន្នន័យបានបើក"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"កម្មវិធីសន្សំសំចៃទិន្នន័យបានបិទ"</string> <string name="switch_bar_on" msgid="1142437840752794229">"បើក"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"បិទ"</string> <string name="nav_bar" msgid="1993221402773877607">"របាររុករក"</string> <string name="start" msgid="6873794757232879664">"ចាប់ផ្ដើម"</string> <string name="center" msgid="4327473927066010960">"កណ្តាល"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"មើលជាមុន"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"អូសដើម្បីបន្ថែមចំណងជើង"</string> <string name="qs_edit" msgid="2232596095725105230">"កែសម្រួល"</string> + <string name="tuner_time" msgid="6572217313285536011">"ម៉ោង"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"បង្ហាញម៉ោង នាទី និងវិនាទី"</item> + <item msgid="1427801730816895300">"បង្ហាញម៉ោង នាទី (លំនាំដើម)"</item> + <item msgid="3830170141562534721">"កុំបង្ហាញរូបតំណាងនេះ"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"បង្ហាញភាគរយជានិច្ច"</item> + <item msgid="2139628951880142927">"បង្ហាញភាគរយនៅពេលសាកថ្ម (លំនាំដើម)"</item> + <item msgid="3327323682209964956">"កុំបង្ហាញរូបតំណាងនេះ"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-kn-rIN/strings.xml b/packages/SystemUI/res/values-kn-rIN/strings.xml index 5ab6e317d870..f97c8425f778 100644 --- a/packages/SystemUI/res/values-kn-rIN/strings.xml +++ b/packages/SystemUI/res/values-kn-rIN/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"ಸಂಪೂರ್ಣ\nನಿಶ್ಯಬ್ಧ"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"ಆದ್ಯತೆ\nಮಾತ್ರ"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"ಅಲಾರಮ್ಗಳು\nಮಾತ್ರ"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"ಎಲ್ಲ"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"ಎಲ್ಲಾ\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ ( ಪೂರ್ತಿ ಆಗುವವರೆಗೆ <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"ವೇಗವಾಗಿ ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ (ಪೂರ್ಣಗೊಳ್ಳಲು <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"ನಿಧಾನ ಚಾರ್ಜ್ ಆಗುತ್ತಿದೆ (ಪೂರ್ಣಗೊಳ್ಳಲು <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"ಸ್ಥಿತಿ ಪಟ್ಟಿಯಲ್ಲಿ ಗಡಿಯಾರ ಸೆಕೆಂಡುಗಳನ್ನು ತೋರಿಸು. ಇದಕ್ಕೆ ಬ್ಯಾಟರಿ ಬಾಳಿಕೆಯು ಪರಿಣಾಮಬೀರಬಹುದು."</string> <string name="qs_rearrange" msgid="8060918697551068765">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಮರುಹೊಂದಿಸಿ"</string> <string name="show_brightness" msgid="6613930842805942519">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ಪ್ರಖರತೆಯನ್ನು ತೋರಿಸಿ"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"ಸ್ಪ್ಲಿಟ್ ಸ್ಕ್ರೀನ್ ಸ್ವೈಪ್-ಅಪ್ ವೇಗವರ್ಧಕವನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"ಸ್ಪ್ಲಿಟ್-ಸ್ಕ್ರೀನ್ ಸ್ವೈಪ್-ಅಪ್ ಗೆಶ್ಚರ್ ಸಕ್ರಿಯಗೊಳಿಸಿ"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"ಸಮಗ್ರ ನೋಟದ ಬಟನ್ನಿಂದ ಮೇಲಕ್ಕೆ ಸ್ವೈಪ್ ಮಾಡಿ ಸ್ಪ್ಲಿಟ್-ಸ್ಕ್ರೀನ್ ನಮೂದಿಸಲು ಗೆಸ್ಚರ್ ಸಕ್ರಿಯಗೊಳಿಸಿ"</string> <string name="experimental" msgid="6198182315536726162">"ಪ್ರಾಯೋಗಿಕ"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"ಬ್ಲೂಟೂತ್ ಆನ್ ಮಾಡುವುದೇ?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"ಪರದೆಯನ್ನು ವೀಕ್ಷಿಸಿ ಮತ್ತು ಧ್ವನಿ ಮಾಡು"</string> <string name="notification_more_settings" msgid="816306283396553571">"ಹೆಚ್ಚಿನ ಸೆಟ್ಟಿಂಗ್ಗಳು"</string> <string name="notification_done" msgid="5279426047273930175">"ಮುಗಿದಿದೆ"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"ಸಾಮಾನ್ಯ ಬಣ್ಣಗಳು"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"ರಾತ್ರಿ ಬಣ್ಣಗಳು"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"ಕಸ್ಟಮ್ ಬಣ್ಣಗಳು"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"ಸ್ವಯಂ"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"ಅಪರಿಚಿತ ಬಣ್ಣಗಳು"</string> - <string name="color_transform" msgid="6985460408079086090">"ಬಣ್ಣ ಬದಲಾವಣೆ"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್ಗಳ ಟೈಲ್ ತೋರಿಸು"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"ಕಸ್ಟಮ್ ಪರಿವರ್ತನೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"ಬಣ್ಣ ಮತ್ತು ಗೋಚರತೆ"</string> + <string name="night_mode" msgid="3540405868248625488">"ರಾತ್ರಿ ಮೋಡ್"</string> + <string name="calibrate_display" msgid="5974642573432039217">"ಅಣಿಗೊಳಿಸುವ ಪ್ರದರ್ಶನ"</string> + <string name="night_mode_on" msgid="5597545513026541108">"ಆನ್"</string> + <string name="night_mode_off" msgid="8035605276956057508">"ಆಫ್"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"ಸ್ವಯಂಚಾಲಿತವಾಗಿ ಆನ್ ಮಾಡು"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"ಸ್ಥಳ ಮತ್ತು ದಿನದ ಸಮಯಕ್ಕೆ ಸೂಕ್ತವಾಗುವಂತೆ ರಾತ್ರಿ ಮೋಡ್ ಅನ್ನು ಬದಲಾಯಿಸಿ"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"ರಾತ್ರಿ ಮೋಡ್ ಆನ್ ಆಗಿರುವಾಗ"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS ಗೆ ಕಪ್ಪು ಥೀಮ್ ಬಳಸಿ"</string> + <string name="adjust_tint" msgid="3398569573231409878">"ಟಿಂಟ್ ಸರಿಹೊಂದಿಸು"</string> + <string name="adjust_brightness" msgid="980039329808178246">"ಪ್ರಖರತೆಯನ್ನು ಸರಿಹೊಂದಿಸು"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"ಕಪ್ಪು ಥೀಮ್ ಅನ್ನು Android OS ನ ಕೋರ್ ಪ್ರದೇಶಗಳಿಗೆ ಅನ್ವಯಿಸಲಾಗಿರುತ್ತದೆ. ಇದನ್ನು ಸೆಟ್ಟಿಂಗ್ಗಳು ಮತ್ತು ಅಧಿಸೂಚನೆಗಳಂತಹ ತಿಳಿಯಾದ ಥೀಮ್ನಲ್ಲಿ ಸಾಮಾನ್ಯವಾಗಿ ಪ್ರದರ್ಶಿಸಲಾಗುತ್ತದೆ."</string> <string name="color_apply" msgid="9212602012641034283">"ಅನ್ವಯಿಸು"</string> <string name="color_revert_title" msgid="4746666545480534663">"ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಖಚಿತಪಡಿಸಿ"</string> <string name="color_revert_message" msgid="9116001069397996691">"ಕೆಲವು ಬಣ್ಣ ಸೆಟ್ಟಿಂಗ್ಗಳು ಈ ಸಾಧನವನ್ನು ಅನುಪಯುಕ್ತಗೊಳಿಸಬಹುದು. ಈ ಬಣ್ಣ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಖಚಿತಪಡಿಸಲು ಸರಿ ಕ್ಲಿಕ್ ಮಾಡಿ, ಇಲ್ಲವಾದರೆ ಈ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು 10 ಸೆಕೆಂಡುಗಳ ನಂತರ ಮರುಹೊಂದಿಸಿ."</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"ಮುಖಪುಟ"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"ಇತ್ತೀಚಿನವುಗಳು"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"ಹಿಂದೆ"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"ವಾಲ್ಯೂಮ್ನಲ್ಲಿ \"ಅಡಚಣೆ ಮಾಡಬೇಡಿ\" ಅನ್ನು ತೋರಿಸಿ"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"ವಾಲ್ಯೂಮ್ ಸಂವಾದದಲ್ಲಿ \"ಅಡಚಣೆ ಮಾಡಬೇಡಿ\"ಯ ಸಂಪೂರ್ಣ ನಿಯಂತ್ರಣವನ್ನು ಅನುಮತಿಸಿ."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"ವಾಲ್ಯೂಮ್ ಮತ್ತು ಅಡಚಣೆ ಮಾಡಬೇಡಿ"</string> - <string name="volume_down_silent" msgid="66962568467719591">"ವಾಲ್ಯೂಮ್ ಕಡಿಮೆಯಲ್ಲಿ \"ಅಡಚಣೆ ಮಾಡಬೇಡಿ\" ನಮೂದಿಸಿ"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"ವಾಲ್ಯೂಮ್ ನಿಯಂತ್ರಣಗಳ ಜೊತೆಗೆ ತೋರಿಸು"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"ಅಡಚಣೆ ಮಾಡಬೇಡಿ"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"ವಾಲ್ಯೂಮ್ ಬಟನ್ಗಳ ಶಾರ್ಟ್ಕಟ್"</string> <string name="volume_up_silent" msgid="7141255269783588286">"ವಾಲ್ಯೂಮ್ ಹೆಚ್ಚಳದಲ್ಲಿ \"ಅಡಚಣೆ ಮಾಡಬೇಡಿ\"ಯನ್ನು ತೊರೆಯಿರಿ"</string> <string name="battery" msgid="7498329822413202973">"ಬ್ಯಾಟರಿ"</string> <string name="clock" msgid="7416090374234785905">"ಗಡಿಯಾರ"</string> <string name="headset" msgid="4534219457597457353">"ಹೆಡ್ಸೆಟ್"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ಹೆಡ್ಫೋನ್ ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ಹೆಡ್ಸೆಟ್ ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"ಸ್ಥಿತಿ ಪಟ್ಟಿಯಲ್ಲಿ ಐಕಾನ್ಗಳು ತೋರಿಸುವುದನ್ನು ಸಕ್ರಿಯ ಅಥವಾ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ."</string> <string name="data_saver" msgid="5037565123367048522">"ಡೇಟಾ ಉಳಿಸುವಿಕೆ"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"ಡೇಟಾ ಉಳಿಸುವಿಕೆ ಆನ್ ಆಗಿದೆ"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"ಡೇಟಾ ಉಳಿಸುವಿಕೆ ಆಫ್ ಆಗಿದೆ"</string> <string name="switch_bar_on" msgid="1142437840752794229">"ಆನ್"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"ಆಫ್"</string> <string name="nav_bar" msgid="1993221402773877607">"ನ್ಯಾವಿಗೇಷನ್ ಬಾರ್"</string> <string name="start" msgid="6873794757232879664">"ಪ್ರಾರಂಭ"</string> <string name="center" msgid="4327473927066010960">"ಮಧ್ಯ"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"ಪೂರ್ವವೀಕ್ಷಣೆ"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"ಟೈಲ್ಗಳನ್ನು ಸೇರಿಸಲು ಡ್ರ್ಯಾಗ್ ಮಾಡಿ"</string> <string name="qs_edit" msgid="2232596095725105230">"ಸಂಪಾದಿಸು"</string> + <string name="tuner_time" msgid="6572217313285536011">"ಸಮಯ"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"ಗಂಟೆಗಳು, ನಿಮಿಷಗಳು, ಸೆಕೆಂಡುಗಳನ್ನು ತೋರಿಸು"</item> + <item msgid="1427801730816895300">"ಗಂಟೆಗಳು ಮತ್ತು ನಿಮಿಷಗಳನ್ನು ತೋರಿಸು (ಡಿಫಾಲ್ಟ್)"</item> + <item msgid="3830170141562534721">"ಈ ಐಕಾನ್ ತೋರಿಸಬೇಡ"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"ಯಾವಾಗಲೂ ಪ್ರತಿಶತವನ್ನು ತೋರಿಸು"</item> + <item msgid="2139628951880142927">"ಚಾರ್ಜ್ ಮಾಡುವಾಗ ಪ್ರತಿಶತವನ್ನು ತೋರಿಸು (ಡಿಫಾಲ್ಟ್)"</item> + <item msgid="3327323682209964956">"ಈ ಐಕಾನ್ ತೋರಿಸಬೇಡ"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index 5e6f65ab2080..64e0e27ead66 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"화면 고정"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"검색"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>을(를) 시작할 수 없습니다."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g>은(는) 안전 모드에서 사용 중지됩니다."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"기록"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"삭제"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"수평 분할"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"모두\n차단"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"중요 알림만\n허용"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"알람만\n"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"모두 수신"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"모두\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"충전 중(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> 후 충전 완료)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"고속 충전 중(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> 후 충전 완료)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"저속 충전 중(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> 후 충전 완료)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"상태 표시줄에 시계 초 단위를 표시합니다. 배터리 수명에 영향을 줄 수도 있습니다."</string> <string name="qs_rearrange" msgid="8060918697551068765">"빠른 설정 재정렬"</string> <string name="show_brightness" msgid="6613930842805942519">"빠른 설정에서 밝기 표시"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"위로 스와이프하여 창 분할하기 사용 설정"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"화면 분할 위로 스와이프 동작 사용"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"최근 사용 버튼에서 위로 스와이프하기 동작으로 창 분할 모드를 사용 설정합니다."</string> <string name="experimental" msgid="6198182315536726162">"베타"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"블루투스를 켜시겠습니까?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"화면에 표시하고 소리로 알림"</string> <string name="notification_more_settings" msgid="816306283396553571">"설정 더보기"</string> <string name="notification_done" msgid="5279426047273930175">"완료"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"일반 색상"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"야간 색상"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"맞춤 색상"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"자동"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"알 수 없는 색상"</string> - <string name="color_transform" msgid="6985460408079086090">"색상 수정"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"빠른 설정 타일 표시"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"맞춤 변환 사용"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"색상 및 모양"</string> + <string name="night_mode" msgid="3540405868248625488">"야간 모드"</string> + <string name="calibrate_display" msgid="5974642573432039217">"디스플레이 보정"</string> + <string name="night_mode_on" msgid="5597545513026541108">"사용"</string> + <string name="night_mode_off" msgid="8035605276956057508">"사용 안함"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"자동으로 사용 설정"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"위치 및 시간대에 맞게 야간 모드로 전환"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"야간 모드 사용 중일 때"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS용 어두운 테마 사용"</string> + <string name="adjust_tint" msgid="3398569573231409878">"농담 효과 조정"</string> + <string name="adjust_brightness" msgid="980039329808178246">"밝기 조정"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"설정 및 알림 등 밝은 테마에서 일반적으로 표시되는 Android OS의 핵심 영역에 어두운 테마가 적용됩니다."</string> <string name="color_apply" msgid="9212602012641034283">"적용"</string> <string name="color_revert_title" msgid="4746666545480534663">"설정 확인"</string> <string name="color_revert_message" msgid="9116001069397996691">"일부 색상 설정으로 인해 이 기기를 사용하지 못할 수 있습니다. 확인을 클릭하여 이러한 색상 설정을 확인하지 않으면 10초 후에 설정이 초기화됩니다."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"배터리 사용량"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"충전하는 동안 배터리 세이버는 사용할 수 없습니다."</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"배터리 세이버"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"성능 및 백그라운드 데이터를 줄입니다."</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"홈"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"최근"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"뒤로"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"볼륨에 알림 일시중지 표시"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"볼륨 대화상자에서 알림 일시중지에 대한 전체 컨트롤을 허용합니다."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"볼륨 및 알림 일시중지"</string> - <string name="volume_down_silent" msgid="66962568467719591">"볼륨 작게 시 알림 일시중지 사용"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"볼륨 컨트롤과 함께 표시"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"알림 일시중지"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"볼륨 버튼 단축키"</string> <string name="volume_up_silent" msgid="7141255269783588286">"볼륨 크게 시 알림 일시중지 종료"</string> <string name="battery" msgid="7498329822413202973">"배터리"</string> <string name="clock" msgid="7416090374234785905">"시계"</string> <string name="headset" msgid="4534219457597457353">"헤드셋"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"헤드폰 연결됨"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"헤드셋 연결됨"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"아이콘이 상태 표시줄에 표시되도록 사용 설정 또는 중지합니다."</string> <string name="data_saver" msgid="5037565123367048522">"데이터 세이버"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"데이터 세이버 사용"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"데이터 세이버 사용 안함"</string> <string name="switch_bar_on" msgid="1142437840752794229">"사용"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"사용 안함"</string> <string name="nav_bar" msgid="1993221402773877607">"탐색 메뉴"</string> <string name="start" msgid="6873794757232879664">"시작"</string> <string name="center" msgid="4327473927066010960">"중앙"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"미리보기"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"드래그하여 타일 추가"</string> <string name="qs_edit" msgid="2232596095725105230">"수정"</string> + <string name="tuner_time" msgid="6572217313285536011">"시간"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"시간, 분, 초 표시"</item> + <item msgid="1427801730816895300">"시간, 분 표시(기본값)"</item> + <item msgid="3830170141562534721">"이 아이콘 표시 안함"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"항상 퍼센트 표시"</item> + <item msgid="2139628951880142927">"충전할 때 퍼센트 표시(기본값)"</item> + <item msgid="3327323682209964956">"이 아이콘 표시 안함"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-ky-rKG/strings.xml b/packages/SystemUI/res/values-ky-rKG/strings.xml index 7819f40c7930..e8d32a9bc8cb 100644 --- a/packages/SystemUI/res/values-ky-rKG/strings.xml +++ b/packages/SystemUI/res/values-ky-rKG/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"экран кадоо"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"издөө"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> баштай алган жок."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> коопсуз режиминде өчүрүлдү."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Таржымал"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Тазалоо"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Туурасынан бөлүү"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Тым-\nтырс"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Артыкчылыктуу\nгана"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Ойготкучтар\nгана"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Бардыгы"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Бардык\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Кубатталууда (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> толгонго чейин)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Тез кубатталууда (толгонго чейин <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> калды)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Жай кубатталууда (толгонго чейин <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> калды)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Абал тилкесинен сааттын секунддары көрсөтүлсүн. Батареянын кубаты көбүрөөк сарпталышы мүмкүн."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Ыкчам жөндөөлөрдү кайра коюу"</string> <string name="show_brightness" msgid="6613930842805942519">"Ыкчам жөндөөлөрдөн жарык деңгээлин көрсөтүү"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Өйдө серпип экранды бөлгүчтү иштетүү"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Өйдө серпип экранды бөлүү жаңсоосун иштетүү"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Сереп баскычынан өйдө серпип, экранды бөлүү режимин киргизүү үчүн жаңсоону иштетиңиз"</string> <string name="experimental" msgid="6198182315536726162">"Сынамык"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth күйгүзүлсүнбү?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Үн менен коштолуп, экранга чыгарылсын"</string> <string name="notification_more_settings" msgid="816306283396553571">"Дагы жөндөөлөр"</string> <string name="notification_done" msgid="5279426047273930175">"Аткарылды"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Кадимки түстөр"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Түнкү түстөр"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Ыңгайлаштырылган түстөр"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Авто"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Белгисиз түстөр"</string> - <string name="color_transform" msgid="6985460408079086090">"Түсүн өзгөртүү"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Ыкчам жөндөөлөр тактасын көрсөтүү"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Ыңгайлаштырылган өзгөртүүнү иштетүү"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Түсү жана көрүнүшү"</string> + <string name="night_mode" msgid="3540405868248625488">"Түнкү режим"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Дисплейди калибрлөө"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Күйүк"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Өчүк"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Автоматтык түрдө күйгүзүү"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Жайгашкан жерге жана убакытка жараша түнкү режимге которулуңуз"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Түнкү режим күйүп турганда"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS үчүн караңгы тема колдонуу"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Кошумча түсүн тууралоо"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Жарыктыгын тууралоо"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Адатта жарык темада көрсөтүлгөн Android OS\'тин, Жөндөөлөр жана эскертмелер сыяктуу негизги аймактарына караңгы тема колдонулат."</string> <string name="color_apply" msgid="9212602012641034283">"Колдонуу"</string> <string name="color_revert_title" msgid="4746666545480534663">"Жөндөөлөрдү ырастоо"</string> <string name="color_revert_message" msgid="9116001069397996691">"Айрым түс жөндөөлөрү бул түзмөктү колдонулгус кылып коюшу мүмкүн. Бул түс жөндөөлөрүн ырастоо үчүн OK баскычын чыкылдатыңыз, болбосо бул жөндөөлөр 10 секунддан кийин баштапкы абалына келтирилет."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Батарея колдонулушу"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Батареяны үнөмдөгүч түзмөк кубатталып жатканда иштебейт"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Батареяны үнөмдөгүч"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Иштин майнаптуулугун начарлатып, фондук дайындарды чектейт"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Башкы бет"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Акыркылар"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Артка"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"\"Тынчымды алба\" режимин үн көзөмөлдөгүчүндө көрсөтүү"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Үндү катуулатып/акырындатуу диалогунда \"Тынчымды алба\" режимин толук көзөмөлдөөгө уруксат берүү."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Үн көзөмөлдөгүчү жана \"Тынчымды алба\" режими"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Үн акырындатылганда \"Тынчымды алба\" режимине кирүү"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Үн көзөмөлдөгүчтөрү менен көрсөтүлсүн"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Тынчымды алба"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Үндү көзөмөлдөөчү баскычтардын кыска жолдору"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Үн катуулатылганда \"Тынчымды алба\" режиминен чыгуу"</string> <string name="battery" msgid="7498329822413202973">"Батарея"</string> <string name="clock" msgid="7416090374234785905">"Саат"</string> <string name="headset" msgid="4534219457597457353">"Гарнитура"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Гарнитуралар туташкан"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Гарнитура туташты"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Абал тилкесиндеги сүрөтчөнү иштетүү же өчүрүү."</string> <string name="data_saver" msgid="5037565123367048522">"Дайындарды үнөмдөгүч"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Дайындарды үнөмдөгүч күйүк"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Дайындарды үнөмдөгүч өчүрүлгөн"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Күйүк"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Өчүк"</string> <string name="nav_bar" msgid="1993221402773877607">"Чабыттоо тилкеси"</string> <string name="start" msgid="6873794757232879664">"Баштоо"</string> <string name="center" msgid="4327473927066010960">"Экрандын ортосунда"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Алдын ала көрүү"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Керектүү нерселерди сүйрөп кошуңуз"</string> <string name="qs_edit" msgid="2232596095725105230">"Түзөтүү"</string> + <string name="tuner_time" msgid="6572217313285536011">"Убакыт"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Сааттар, мүнөттөр жана секунддар көрсөтүлсүн"</item> + <item msgid="1427801730816895300">"Сааттар жана мүнөттөр көрсөтүлсүн (демейки)"</item> + <item msgid="3830170141562534721">"Бул сөлөкөт көрсөтүлбөсүн"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Ар дайым пайызы көрсөтүлсүн"</item> + <item msgid="2139628951880142927">"Кубаттоо учурунда пайызы көрсөтүлсүн (демейки)"</item> + <item msgid="3327323682209964956">"Бул сөлөкөт көрсөтүлбөсүн"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-lo-rLA/strings.xml b/packages/SystemUI/res/values-lo-rLA/strings.xml index 622e1e502140..b4dd69d762fe 100644 --- a/packages/SystemUI/res/values-lo-rLA/strings.xml +++ b/packages/SystemUI/res/values-lo-rLA/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ການປັກໝຸດໜ້າຈໍ"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"ຊອກຫາ"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"ບໍ່ສາມາດເລີ່ມ <xliff:g id="APP">%s</xliff:g> ໄດ້."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> ຖືກປິດໃຊ້ໃນໂໝດຄວາມມປອດໄພ."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"ປະຫວັດ"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"ລຶບ"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ການແຍກລວງຂວາງ"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"ຄວາມງຽບ\nທັງໝົດ"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"ບຸລິມະສິດ\nເທົ່ານັ້ນ"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"ໂມງປຸກ\nເທົ່ານັ້ນ"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"ທັງໝົດ"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"ທັງໝົດ\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"ກຳລັງສາກໄຟ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ກວ່າຈະເຕັມ)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"ກຳລັງສາກໄຟ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ກວ່າຈະເຕັມ)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"ກຳລັງສາກໄຟ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ກວ່າຈະເຕັມ)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"ສະແດງວິນາທີໂມງຢູ່ໃນແຖບສະຖານະ. ອາດຈະມີຜົນກະທົບຕໍ່ອາຍຸແບັດເຕີຣີ."</string> <string name="qs_rearrange" msgid="8060918697551068765">"ຈັດວາງການຕັ້ງຄ່າດ່ວນຄືນໃໝ່"</string> <string name="show_brightness" msgid="6613930842805942519">"ສະແດງຄວາມແຈ້ງຢູ່ໃນການຕັ້ງຄ່າດ່ວນ"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"ເປີດໃຊ້ຕົວເລັ່ງຄວາມໄວການປັດຂຶ້ນຂອງໜ້າຈໍແບບແຍກກັນ"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"ເປີດໃຊ້ທ່າທາງການປັດຂຶ້ນເພື່ອເຂົ້າສູ່ໜ້າຈໍແບບແຍກກັນ"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"ເປີດໃຊ້ທ່າທາງເພື່ອເຂົ້າສູ່ໜ້າຈໍແບບແຍກກັນ ໂດຍການປັດຂຶ້ນຈາກປຸ່ມພາບຮວມ"</string> <string name="experimental" msgid="6198182315536726162">"ຍັງຢູ່ໃນການທົດລອງ"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"ເປີດໃຊ້ Bluetooth ບໍ່?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"ເດັ້ງຂຶ້ນເທິງຫນ້າຈໍ ແລະສົ່ງສຽງດັງ"</string> <string name="notification_more_settings" msgid="816306283396553571">"ການຕັ້ງຄ່າເພີ່ມເຕີມ"</string> <string name="notification_done" msgid="5279426047273930175">"ສຳເລັດແລ້ວ"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"ສີປົກກະຕິ"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"ສີຕອນກາງຄືນ"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"ສີແບບກຳນົດເອງ"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"ອັດຕະໂນມັດ"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"ສີທີ່ບໍ່ຮູ້ຈັກ"</string> - <string name="color_transform" msgid="6985460408079086090">"ການດັດແປງສີ"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"ສະແດງໄທລ໌ການຕັ້ງຄ່າດ່ວນ"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"ເປີດໃຊ້ການປ່ຽນສີແບບກຳນົດເອງ"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"ສີ ແລະ ລັກສະນະ"</string> + <string name="night_mode" msgid="3540405868248625488">"ໂໝດກາງຄືນ"</string> + <string name="calibrate_display" msgid="5974642573432039217">"ປັບໜ້າຈໍ"</string> + <string name="night_mode_on" msgid="5597545513026541108">"ເປີດ"</string> + <string name="night_mode_off" msgid="8035605276956057508">"ປິດ"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"ເປີດໃຊ້ອັດຕະໂນມັດ"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"ສະລັບໄປໃຊ້ໂໝດກາງຄືນຕາມຄວາມເໝາະສົມກັບສະຖານທີ່ ແລະ ເວລາໃນແຕ່ລະມື້"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"ເມື່ອເປີດໂໝດກາງຄືນ"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"ໃຊ້ຮູບແບບສີສັນແບບມືດສຳລັບ Android OS"</string> + <string name="adjust_tint" msgid="3398569573231409878">"ປັບແຕ່ງໂທນສີ"</string> + <string name="adjust_brightness" msgid="980039329808178246">"ປັບແຕ່ງຄວາມສະຫວ່າງ"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"ຮູບແບບສີສັນແບບມືດແມ່ນຖືກນຳໃຊ້ກັບສ່ວນຫຼັກຂອງ Android OS ທີ່ປົກກະຕິຈະສະແດງໃນແບບສີສັນແບບແຈ້ງແລ້ວ ເຊັ່ນ: ການຕັ້ງຄ່າ ແລະ ການແຈ້ງເຕືອນ."</string> <string name="color_apply" msgid="9212602012641034283">"ນຳໃຊ້"</string> <string name="color_revert_title" msgid="4746666545480534663">"ຢືນຢັນການຕັ້ງຄ່າ"</string> <string name="color_revert_message" msgid="9116001069397996691">"ບາງການຕັ້ງຄ່າສີສາມາດເຮັດໃຫ້ອຸປະກອນນີ້ບໍ່ສາມາດໃຊ້ໄດ້. ຄລິກ ຕົກລົງ ເພື່ອຢືນຢັນການຕັ້ງຄ່າສີເຫຼົ່ານີ້, ຖ້າບໍ່ດັ່ງນັ້ນ ການຕັ້ງຄ່າເຫຼົ່ານີ້ຈະຕັ້ງຄືນໃໝ່ ຫຼັງຈາກ 10 ວິນາທີ."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"ການໃຊ້ແບັດເຕີຣີ"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"ຕົວປະຢັດແບັດເຕີຣີບໍ່ມີໃຫ້ນຳໃຊ້ໃນລະຫວ່າງການສາກ"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"ຕົວປະຢັດແບັດເຕີຣີ"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"ຫຼຸດປະສິທິພາບການໃຊ້ງານ ແລະ ຂໍ້ມູນພື້ນຫຼັງ"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"ໜ້າຫຼັກ"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"ຫາກໍໃຊ້"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"ກັບຄືນ"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"ສະແດງ ຫ້າມລົບກວນ ໃນລະດັບສຽງ"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"ອະນຸຍາດການຄວບຄຸມເຕັມສ່ວນຂອງ ຫ້າມລົບກວນ ໃນກ່ອງປັບລະດັບສຽງ."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"ລະດັບສຽງ ແລະ ຫ້າມລົບກວນ"</string> - <string name="volume_down_silent" msgid="66962568467719591">"ເປີດໃຊ້ໂໝດ ຫ້າມລົບກວນ ເມື່ອປັບສຽງໃຫ້ຄ່ອຍລົງ"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"ສະແດງສ່ວນຄວບຄຸມສຽງ"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"ຫ້າມລົບກວນ"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"ທາງລັດປຸ່ມສຽງ"</string> <string name="volume_up_silent" msgid="7141255269783588286">"ອອກຈາກໂໝດ ຫ້າມລົບກວນ ເມື່ອປັບສຽງໃຫ້ດັງຂຶ້ນ"</string> <string name="battery" msgid="7498329822413202973">"ແບັດເຕີຣີ"</string> <string name="clock" msgid="7416090374234785905">"ໂມງ"</string> <string name="headset" msgid="4534219457597457353">"ຊຸດຫູຟັງ"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ເຊື່ອມຕໍ່ຊຸດຫູຟັງແລ້ວ"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ເຊື່ອມຕໍ່ຊຸດຫູຟັງແລ້ວ"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"ເປີດ ຫຼື ປິດໄອຄອນຕ່າງໆຈາກການສະແດງໃນແຖບສະຖານະ."</string> <string name="data_saver" msgid="5037565123367048522">"ຕົວປະຢັດຂໍ້ມູນ"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"ຕົວປະຢັດຂໍ້ມູນເປີດຢູ່"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"ຕົວປະຢັດຂໍ້ມູນປິດຢູ່"</string> <string name="switch_bar_on" msgid="1142437840752794229">"ເປີດ"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"ປິດ"</string> <string name="nav_bar" msgid="1993221402773877607">"ແຖບນຳທາງ"</string> <string name="start" msgid="6873794757232879664">"ເລີ່ມຕົ້ນ"</string> <string name="center" msgid="4327473927066010960">"ເຄິ່ງກາງ"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"ສະແດງຕົວຢ່າງ"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"ລາກເພື່ອເພີ່ມໄທລ໌"</string> <string name="qs_edit" msgid="2232596095725105230">"ແກ້ໄຂ"</string> + <string name="tuner_time" msgid="6572217313285536011">"ເວລາ"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"ສະແດງຊົ່ວໂມງ, ນາທີ ແລະ ວິນາທີ"</item> + <item msgid="1427801730816895300">"ສະແດງຊົ່ວໂມງ ແລະ ນາທີ (ຄ່າເລີ່ມຕົ້ນ)"</item> + <item msgid="3830170141562534721">"ຢ່າສະແດງໄອຄອນນີ້"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"ສະແດງເປີເຊັນຕະຫຼອດເວລາ"</item> + <item msgid="2139628951880142927">"ສະແດງເປີເຊັນເມື່ອກຳລັງສາກໄຟ (ຄ່າເລີ່ມຕົ້ນ)"</item> + <item msgid="3327323682209964956">"ຢ່າສະແດງໄອຄອນນີ້"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index 34decce7030e..ba98690f735e 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -303,8 +303,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ekrano prisegimas"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"paieška"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Nepavyko paleisti <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Programa „<xliff:g id="APP">%s</xliff:g>“ išjungta saugos režimu."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Istorija"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Išvalyti"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Horizontalus skaidymas"</string> @@ -336,8 +335,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Visiška\ntyla"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Tik\nprioritetiniai"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Tik\nsignalai"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Visi"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Visi\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Kraunama (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> iki visiško įkrovimo)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Greitai kraunama (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> iki visiško įkrovimo)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Lėtai kraunama (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> iki visiško įkrovimo)"</string> @@ -450,7 +447,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Rodyti laikrodžio sekundes būsenos juostoje. Tai gali paveikti akumuliatoriaus naudojimo laiką."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Pertvarkyti sparčiuosius nustatymus"</string> <string name="show_brightness" msgid="6613930842805942519">"Rodyti skaistį sparčiuosiuose nustatymuose"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Įgalinti skaidyto ekrano perbrauk. aukštyn spartinimo įrankį"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Įgalinti ekrano skaidymo perbraukimo aukštyn gestą"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Įgalinti gestą, kuriuo galima įjungti skaidytą ekraną, perbraukiant aukštyn nuo apžvalgos mygtuko"</string> <string name="experimental" msgid="6198182315536726162">"Eksperimentinė versija"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Įjungti „Bluetooth“?"</string> @@ -470,19 +467,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Rodyti ekrane ir skambėti"</string> <string name="notification_more_settings" msgid="816306283396553571">"Daugiau nustatymų"</string> <string name="notification_done" msgid="5279426047273930175">"Atlikta"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Įprastos spalvos"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Nakties spalvos"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Tinkintos spalvos"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automatinis"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Nežinomos spalvos"</string> - <string name="color_transform" msgid="6985460408079086090">"Spalvų keitimas"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Rodyti Sparčiųjų nustatymų išklotinės elementą"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Įgalinti tinkintą transformavimą"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Spalva ir išvaizda"</string> + <string name="night_mode" msgid="3540405868248625488">"Naktinis režimas"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Kalibruoti ekraną"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Įjungta"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Išjungta"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Įjungti automatiškai"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Perjungti į naktinį režimą pagal vietovę ir dienos laiką"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Kai įjungtas naktinis režimas"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Naudoti tamsią „Android“ OS temą"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Koreguoti atspalvį"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Koreguoti šviesumą"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Pagrindinėms „Android“ OS dalims, kurioms paprastai taikoma šviesi tema, pvz., Nustatymams ir pranešimams, bus taikoma tamsi tema."</string> <string name="color_apply" msgid="9212602012641034283">"Taikyti"</string> <string name="color_revert_title" msgid="4746666545480534663">"Nustatymų patvirtinimas"</string> <string name="color_revert_message" msgid="9116001069397996691">"Dėl kai kurių spalvų nustatymų įrenginys gali būti netinkamas naudoti. Spustelėkite „Gerai“, kad patvirtintumėte šiuos spalvų nustatymus. Kitaip šie nustatymai bus nustatyti iš naujo po 10 sekundžių."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Akum. energ. vartoj."</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Akumuliatoriaus tausojimo priemonė nepasiekiama įkraunant"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Akumuliatoriaus tausojimo priemonė"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Sumažinamas našumas ir foninių duomenų naudojimas"</string> @@ -490,21 +490,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Pagrindinis ekranas"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Naujausios veiklos ekranas"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Atgal"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Rodyti netrukdymo režimą garsumo dialogo lange"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Leisti visiškai valdyti netrukdymo režimą garsumo dialogo lange."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Garsumas ir netrukdymo režimas"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Įjungti netrukdymo režimą mažinant garsumą"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Rodyti su garsumo valdikliais"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Netrukdymo režimas"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Garsumo mygtukų spartusis klavišas"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Išjungti netrukdymo režimą didinant garsumą"</string> <string name="battery" msgid="7498329822413202973">"Akumuliatorius"</string> <string name="clock" msgid="7416090374234785905">"Laikrodis"</string> <string name="headset" msgid="4534219457597457353">"Ausinės"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Ausinės prijungtos"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Ausinės prijungtos"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Įgalinti arba išjungti piktogramų rodymą būsenos juostoje."</string> <string name="data_saver" msgid="5037565123367048522">"Duomenų taupymo priemonė"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Duomenų taupymo priemonė įjungta"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Duomenų taupymo priemonė išjungta"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Įjungti"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Išjungta"</string> <string name="nav_bar" msgid="1993221402773877607">"Naršymo juosta"</string> <string name="start" msgid="6873794757232879664">"Pradėti"</string> <string name="center" msgid="4327473927066010960">"Centre"</string> @@ -527,4 +526,15 @@ <string name="preview" msgid="9077832302472282938">"Peržiūrėti"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Nuvilkite, kad pridėtumėte išklotinės elementų"</string> <string name="qs_edit" msgid="2232596095725105230">"Redaguoti"</string> + <string name="tuner_time" msgid="6572217313285536011">"Laikas"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Rodyti valandas, minutes ir sekundes"</item> + <item msgid="1427801730816895300">"Rodyti valandas ir minutes (numatytasis nustatymas)"</item> + <item msgid="3830170141562534721">"Nerodyti šios piktogramos"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Visada rodyti procentus"</item> + <item msgid="2139628951880142927">"Rodyti procentus kraunant (numatytasis nustatymas)"</item> + <item msgid="3327323682209964956">"Nerodyti šios piktogramos"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index c667f3585133..0dab9478f719 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -302,8 +302,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"Piespraust ekrānu"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"Meklēt"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Nevarēja palaist lietotni <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Lietotne <xliff:g id="APP">%s</xliff:g> ir atspējota drošajā režīmā."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Vēsture"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Notīrīt"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Horizontāls dalījums"</string> @@ -335,8 +334,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Pilnīgs\nklusums"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Tikai\nprioritārie"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Tikai\nsignāli"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Visi"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Visi\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Notiek uzlāde (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> līdz pilnīgai uzlādei)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Ātra uzlāde (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> līdz pilnīgai uzlādei)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Lēna uzlāde (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> līdz pilnīgai uzlādei)"</string> @@ -449,7 +446,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Statusa joslā rādīt pulksteņa sekundes. Var ietekmēt akumulatora darbības laiku."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Pārkārtot ātros iestatījumus"</string> <string name="show_brightness" msgid="6613930842805942519">"Rādīt spilgtumu ātrajos iestatījumos"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Iespējot ekrāna sadalīšanu, izmantojot vilkšanu augšup"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Iespējot vilkšanu augšup, lai sadalītu ekrānu"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Iespējot žestu ekrāna sadalīšanai, velkot augšup no pogas Pārskats"</string> <string name="experimental" msgid="6198182315536726162">"Eksperimentāli"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Vai ieslēgt Bluetooth savienojumu?"</string> @@ -469,19 +466,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Rādīt ekrānā ar skaņas signālu"</string> <string name="notification_more_settings" msgid="816306283396553571">"Citi iestatījumi"</string> <string name="notification_done" msgid="5279426047273930175">"Gatavs"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Parastas krāsas"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Nakts krāsas"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Pielāgotas krāsas"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automātiski"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Nezināmas krāsas"</string> - <string name="color_transform" msgid="6985460408079086090">"Krāsu pārveidošana"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Ātro iestatījumu elementa rādīšana"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Pielāgotās pārveidošanas iespējošana"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Krāsas un izskats"</string> + <string name="night_mode" msgid="3540405868248625488">"Nakts režīms"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Ekrāna kalibrēšana"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Ieslēgts"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Izslēgts"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Ieslēgt automātiski"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Pārslēgt uz nakts režīmu atbilstoši atrašanās vietai un diennakts laikam"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Ja ir ieslēgts nakts režīms"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Izmantot tumšo motīvu operētājsistēmai Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Regulēt toni"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Regulēt spilgtumu"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Tumšais motīvs tiek lietots galvenajos operētājsistēmas Android elementos, kas parasti tiek rādīti ar gaišu motīvu, piemēram, lietotnē Iestatījumi un paziņojumos."</string> <string name="color_apply" msgid="9212602012641034283">"Lietot"</string> <string name="color_revert_title" msgid="4746666545480534663">"Iestatījumu apstiprināšana"</string> <string name="color_revert_message" msgid="9116001069397996691">"Noteiktu krāsu iestatījumu dēļ šī ierīce var kļūt nelietojama. Lai apstiprinātu šos krāsu iestatījumus, noklikšķiniet uz Labi. Ja to neizdarīsiet, pēc 10 sekundēm šie iestatījumi tiks atiestatīti."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Akumulatora lietojums"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Akumulatora jaudas taupīšanas režīms uzlādes laikā nav pieejams."</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Akumulatora jaudas taupīšanas režīms"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Samazina veiktspēju un fona datus."</string> @@ -489,21 +489,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Sākums"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Pēdējie"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Atpakaļ"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Rādīt režīmu “Netraucēt” skaļuma regulēšanas dialoglodziņā"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Atļaujiet pilnu režīma “Netraucēt” kontroli skaļuma regulēšanas dialoglodziņā."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Skaļums un režīms “Netraucēt”"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Ieslēgt režīmu “Netraucēt”, samazinot skaļumu"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Rādīt ar skaļuma vadīklām"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Netraucēt"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Skaļuma pogu saīsne"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Izslēgt režīmu “Netraucēt”, palielinot skaļumu"</string> <string name="battery" msgid="7498329822413202973">"Akumulators"</string> <string name="clock" msgid="7416090374234785905">"Pulkstenis"</string> <string name="headset" msgid="4534219457597457353">"Austiņas"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Austiņas ir pievienotas"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Austiņas ar mikrofonu ir pievienotas"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Iespējojiet vai atspējojiet ikonu rādīšanu statusa joslā."</string> <string name="data_saver" msgid="5037565123367048522">"Datu lietojuma samazinātājs"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Datu lietojuma samazinātājs ieslēgts"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Datu lietojuma samazinātājs ir izslēgts."</string> <string name="switch_bar_on" msgid="1142437840752794229">"Ieslēgts"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Izslēgts"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigācijas josla"</string> <string name="start" msgid="6873794757232879664">"Sākums"</string> <string name="center" msgid="4327473927066010960">"Centrs"</string> @@ -526,4 +525,15 @@ <string name="preview" msgid="9077832302472282938">"Priekšskatījums"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Velciet elementus, lai tos pievienotu"</string> <string name="qs_edit" msgid="2232596095725105230">"Rediģēt"</string> + <string name="tuner_time" msgid="6572217313285536011">"Laiks"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Rādīt stundas, minūtes un sekundes"</item> + <item msgid="1427801730816895300">"Rādīt stundas un minūtes (noklusējums)"</item> + <item msgid="3830170141562534721">"Nerādīt šo ikonu"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Vienmēr rādīt procentuālo vērtību"</item> + <item msgid="2139628951880142927">"Rādīt procentuālo vērtību uzlādes laikā (noklusējums)"</item> + <item msgid="3327323682209964956">"Nerādīt šo ikonu"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-mk-rMK/strings.xml b/packages/SystemUI/res/values-mk-rMK/strings.xml index 8051ec0c89aa..2ce778f1ff57 100644 --- a/packages/SystemUI/res/values-mk-rMK/strings.xml +++ b/packages/SystemUI/res/values-mk-rMK/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Целосна\nтишина"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Само\nприоритетни"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Само\nаларми"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Сѐ"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Сите\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Се полни (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> додека не се наполни)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Брзо полнење (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> додека не се наполни)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Бавно полнење (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> додека не се наполни)"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Прикажи ги секундите на часовникот на статусната лента. Може да влијае на траењето на батеријата."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Преуредете ги Брзи поставки"</string> <string name="show_brightness" msgid="6613930842805942519">"Прикажете ја осветленоста во Брзи поставки"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Овозможете забрзувач за повлекување нагоре поделен екран"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Овозможи го гестот повлекување нагоре за поделен екран"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Овозможете гест за отворање поделен екран со повлекување нагоре од копчето Краток преглед"</string> <string name="experimental" msgid="6198182315536726162">"Експериментално"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Да се вклучи Bluetooth?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Појави се на екранот и дај звучен сигнал"</string> <string name="notification_more_settings" msgid="816306283396553571">"Повеќе поставки"</string> <string name="notification_done" msgid="5279426047273930175">"Готово"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Нормални бои"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Ноќни бои"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Приспособени бои"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Автоматски"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Непознати бои"</string> - <string name="color_transform" msgid="6985460408079086090">"Промена на бојата"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Прикажи плочка Брзи поставки"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Овозможи приспособено трансформирање"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Боја и изглед"</string> + <string name="night_mode" msgid="3540405868248625488">"Ноќен режим"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Калибрирај го екранот"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Вклучено"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Исклучено"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Вклучи автоматски"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Префрли во Ноќен режим како што е соодветно за локацијата и времето во денот"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Кога Ноќниот режим е вклучен"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Користете ја темната тема за ОС Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Приспособи ја бојата"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Приспособи ја осветленоста"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Темната тема се применува на основните области на ОС Android што обично се прикажуваат во светла тема, како Поставки и известувања."</string> <string name="color_apply" msgid="9212602012641034283">"Примени"</string> <string name="color_revert_title" msgid="4746666545480534663">"Потврдете ги поставките"</string> <string name="color_revert_message" msgid="9116001069397996691">"Некои поставки на боите може да го направат уредот неупотреблив. Кликнете на Во ред за да ги потврдите овие поставки на боите, инаку тие поставки ќе се ресетираат по 10 секунди."</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Почетна страница"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Неодамнешни"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Назад"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Прикажи „Не вознемирувај“ во јачината на звукот"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Дозволете целосна контрола на „Не вознемирувај“ во дијалогот за јачина на звукот."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Јачина на звук и „Не вознемирувај“"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Премини во „Не вознемирувај“ при намалена јачина на звукот"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Прикажи со контроли за јачина на звук"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Не вознемирувај"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Кратенка за копчињата за јачина на звук"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Излези од „Не вознемирувај“ при зголемена јачина на звукот"</string> <string name="battery" msgid="7498329822413202973">"Батерија"</string> <string name="clock" msgid="7416090374234785905">"Часовник"</string> <string name="headset" msgid="4534219457597457353">"Слушалки"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Слушалките се поврзани"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Слушалките се поврзани"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Овозможете или оневозможете прикажување на иконите во статусната лента."</string> <string name="data_saver" msgid="5037565123367048522">"Штедач на интернет"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Штедачот на интернет е вклучен"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Штедачот на интернет е исклучен"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Вклучено"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Исклучено"</string> <string name="nav_bar" msgid="1993221402773877607">"Лента за навигација"</string> <string name="start" msgid="6873794757232879664">"Почеток"</string> <string name="center" msgid="4327473927066010960">"Центар"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Преглед"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Повлечете за додавање плочки"</string> <string name="qs_edit" msgid="2232596095725105230">"Уреди"</string> + <string name="tuner_time" msgid="6572217313285536011">"Време"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Прикажи часови, минути и секунди"</item> + <item msgid="1427801730816895300">"Прикажи часови и минути (стандардно)"</item> + <item msgid="3830170141562534721">"Не прикажувај ја иконава"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Секогаш прикажувај процент"</item> + <item msgid="2139628951880142927">"Прикажи процент кога се полни (стандардно)"</item> + <item msgid="3327323682209964956">"Не прикажувај ја иконава"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-ml-rIN/strings.xml b/packages/SystemUI/res/values-ml-rIN/strings.xml index 4cb8c2e493f2..e6d2e90417d9 100644 --- a/packages/SystemUI/res/values-ml-rIN/strings.xml +++ b/packages/SystemUI/res/values-ml-rIN/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"പൂർണ്ണ\nനിശബ്ദത"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"മുൻഗണന\nമാത്രം"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"അലാറങ്ങൾ\nമാത്രം"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"എല്ലാം"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"എല്ലാം\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"ചാർജ്ജുചെയ്യുന്നു (പൂർണ്ണമാകുന്നതിന്, <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"വേഗത്തിൽ ചാർജുചെയ്യുന്നു (പൂർണ്ണമാകാൻ <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"പതുക്കെ ചാർജുചെയ്യുന്നു (പൂർണ്ണമാകാൻ <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"സ്റ്റാറ്റസ് ബാറിൽ ക്ലോക്ക് സെക്കൻഡ് കാണിക്കുന്നത് ബാറ്ററിയുടെ ലൈഫിനെ ബാധിക്കാം."</string> <string name="qs_rearrange" msgid="8060918697551068765">"ദ്രുത ക്രമീകരണം പുനഃസജ്ജീകരിക്കുക"</string> <string name="show_brightness" msgid="6613930842805942519">"ദ്രുത ക്രമീകരണത്തിൽ തെളിച്ചം കാണിക്കുക"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"സ്പ്ലിറ്റ്-സ്ക്രീൻ സ്വൈപ്പ്-അപ്പ് ആക്സിലറേറ്റർ പ്രവർത്തനക്ഷമമാക്കൂ"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"സ്പ്ലിറ്റ്-സ്ക്രീൻ സ്വൈപ്പ്-അപ്പ് ജെസ്റ്റർ പ്രവർത്തനക്ഷമമാക്കുക"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"ചുരുക്കവിവരണ ബട്ടണിൽ നിന്ന് മുകളിലേക്ക് സ്വൈപ്പുചെയ്തുകൊണ്ട് സ്പ്ലിറ്റ്-സ്ക്രീനിലേക്ക് പ്രവേശിക്കാൻ ജെസ്റ്റർ പ്രവർത്തനക്ഷമമാക്കുക"</string> <string name="experimental" msgid="6198182315536726162">"പരീക്ഷണാത്മകം!"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth ഓണാക്കണോ?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"സ്ക്രീനിൽ ദൃശ്യമാക്കുക, ശബ്ദമുണ്ടാക്കുക"</string> <string name="notification_more_settings" msgid="816306283396553571">"കൂടുതൽ ക്രമീകരണം"</string> <string name="notification_done" msgid="5279426047273930175">"പൂർത്തിയായി"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"സാധാരണ വര്ണ്ണങ്ങൾ"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"രാത്രി വര്ണ്ണങ്ങൾ"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"ഇഷ്ടാനുസൃത വര്ണ്ണങ്ങൾ"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"യാന്ത്രികം"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"തിരിച്ചറിയാനാകാത്ത വർണ്ണങ്ങൾ"</string> - <string name="color_transform" msgid="6985460408079086090">"വർണ്ണ പരിഷ്കരണം"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"ദ്രുത ക്രമീകരണ ടൈൽ കാണിക്കുക"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"ഇഷ്ടാനുസൃത പരിവർത്തനം പ്രവർത്തനക്ഷമമാക്കുക"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"വർണ്ണവും രൂപഭാവവും"</string> + <string name="night_mode" msgid="3540405868248625488">"നൈറ്റ് മോഡ്"</string> + <string name="calibrate_display" msgid="5974642573432039217">"ഡിസ്പ്ലേ കാലിബ്രേറ്റുചെയ്യുക"</string> + <string name="night_mode_on" msgid="5597545513026541108">"ഓൺ"</string> + <string name="night_mode_off" msgid="8035605276956057508">"ഓഫ്"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"സ്വയമേവ ഓണാക്കുക"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"ലൊക്കേഷനും ദിവസത്തിലെ സമയത്തിനും അനുയോജ്യമായ തരത്തിൽ നൈറ്റ് മോഡിലേക്ക് സ്വിച്ചുചെയ്യുക"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"നൈറ്റ് മോഡ് ഓണായിരിക്കുമ്പോൾ"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS-നുള്ള ഇരുണ്ട തീം ഉപയോഗിക്കുക"</string> + <string name="adjust_tint" msgid="3398569573231409878">"ടിന്റ് ക്രമപ്പെടുത്തുക"</string> + <string name="adjust_brightness" msgid="980039329808178246">"തെളിച്ചം ക്രമപ്പെടുത്തുക"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"ക്രമീകരണവും അറിയിപ്പുകളും പോലെയുള്ള, ഒരു ലൈറ്റ് തീമിൽ സാധാരണ ഗതിയിൽ പ്രദർശിപ്പിക്കപ്പെടുന്ന Android OS-ന്റെ അടിസ്ഥാന ഇടങ്ങളിലേക്ക്, ഇരുണ്ട തീം പ്രയോഗിക്കുന്നു."</string> <string name="color_apply" msgid="9212602012641034283">"ബാധകമാക്കുക"</string> <string name="color_revert_title" msgid="4746666545480534663">"ക്രമീകരണം സ്ഥിരീകരിക്കുക"</string> <string name="color_revert_message" msgid="9116001069397996691">"ചില വർണ്ണ ക്രമീകരണത്തിന് ഈ ഉപകരണത്തെ ഉപയോഗരഹിതമാക്കാനാകും. ഈ വർണ്ണ ക്രമീകരണം സ്ഥിരീകരിക്കുന്നതിന് ശരി എന്നതിൽ ക്ലിക്കുചെയ്യുക, അല്ലെങ്കിൽ 10 സെക്കൻഡിന് ശേഷം ഈ ക്രമീകരണം പുനഃക്രമീകരിക്കപ്പെടും."</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"വീട്"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"പുതിയവ"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"മടങ്ങുക"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"വോളിയത്തിൽ \'ശല്യപ്പെടുത്തരുത്\' കാണിക്കുക"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"വോളിയം ഡയലോഗിൽ \'ശല്യപ്പെടുത്തരുത്\' എന്നത് പൂർണ്ണമായി നിയന്ത്രിക്കാൻ അനുവദിക്കുക."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"വോളിയവും \'ശല്യപ്പെടുത്തരുത്\' എന്നതും"</string> - <string name="volume_down_silent" msgid="66962568467719591">"വോളിയം താഴുമ്പോൾ \'ശല്യപ്പെടുത്തരുത്\' പ്രവർത്തിപ്പിക്കുക"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"വോളിയം നിയന്ത്രണങ്ങളോടൊപ്പം കാണിക്കുക"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"ശല്യപ്പെടുത്തരുത്"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"വോളിയം ബട്ടൺ കുറുക്കുവഴി"</string> <string name="volume_up_silent" msgid="7141255269783588286">"വോളിയം ഉയരുമ്പോൾ \'ശല്യപ്പെടുത്തരുത്\' നിർത്തുക"</string> <string name="battery" msgid="7498329822413202973">"ബാറ്ററി"</string> <string name="clock" msgid="7416090374234785905">"ക്ലോക്ക്"</string> <string name="headset" msgid="4534219457597457353">"ഹെഡ്സെറ്റ്"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ഹെഡ്ഫോണുകൾ കണക്റ്റുചെയ്തു"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ഹെഡ്സെറ്റ് കണക്റ്റുചെയ്തു"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"സ്റ്റാറ്റസ് ബാറിൽ കാണിക്കുന്നതിൽ നിന്ന് ഐക്കണുകളെ പ്രവർത്തനക്ഷമമാക്കുകയോ പ്രവർത്തനരഹിതമാക്കുകയോ ചെയ്യുക"</string> <string name="data_saver" msgid="5037565123367048522">"ഡാറ്റ സേവർ"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"ഡാറ്റാ സേവർ ഓണാണ്"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"ഡാറ്റാ സേവർ ഓഫാണ്"</string> <string name="switch_bar_on" msgid="1142437840752794229">"ഓൺ"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"ഓഫ്"</string> <string name="nav_bar" msgid="1993221402773877607">"നാവിഗേഷൻ ബാർ"</string> <string name="start" msgid="6873794757232879664">"ആരംഭിക്കൂ"</string> <string name="center" msgid="4327473927066010960">"മധ്യം"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"പ്രിവ്യു നടത്തുക"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"ടൈലുകൾ ചേർക്കുന്നതിന് വലിച്ചിടുക"</string> <string name="qs_edit" msgid="2232596095725105230">"എഡിറ്റുചെയ്യുക"</string> + <string name="tuner_time" msgid="6572217313285536011">"സമയം"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"മണിക്കൂറും മിനിറ്റും സെക്കൻഡും കാണിക്കുക"</item> + <item msgid="1427801730816895300">"മണിക്കൂറും മിനിറ്റും കാണിക്കുക (ഡിഫോൾട്ട്)"</item> + <item msgid="3830170141562534721">"ഈ ഐക്കൺ കാണിക്കരുത്"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"എല്ലായ്പ്പോഴും ശതമാനം കാണിക്കുക"</item> + <item msgid="2139628951880142927">"ചാർജ്ജുചെയ്യുമ്പോൾ ശതമാനം കാണിക്കുക (ഡിഫോൾട്ട്)"</item> + <item msgid="3327323682209964956">"ഈ ഐക്കൺ കാണിക്കരുത്"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn-rMN/strings.xml index f22e315c728e..37d1ba7d0c07 100644 --- a/packages/SystemUI/res/values-mn-rMN/strings.xml +++ b/packages/SystemUI/res/values-mn-rMN/strings.xml @@ -299,8 +299,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"дэлгэц тогтоох"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"хайх"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>-г эхлүүлж чадсангүй."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g>-г аюулгүй горимд идэвхгүй болгосон."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Түүх"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Устгах"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Хэвтээ чиглэлд хуваах"</string> @@ -332,8 +331,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Дуугүй\nболгох"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Зөвхөн\nхамгийн чухлыг"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Зөвхөн\nсэрүүлэг"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Бүгд"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Бүх\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Цэнэглэж байна (дүүргэхэд <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Цэнэглэж байна (дүүргэхэд <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> шаардлагатай)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Цэнэглэж байна (дүүргэхэд <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> шаардлагатай)"</string> @@ -446,7 +443,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Статус талбарт цагийн секундыг харуулах. Энэ нь тэжээлийн цэнэгт нөлөөлж болно."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Түргэн тохиргоог дахин засварлах"</string> <string name="show_brightness" msgid="6613930842805942519">"Түргэн тохиргоонд гэрэлтүүлэг харах"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Дэлгэц хуваах дээш шудрах хурдасгуурыг идэвхжүүлэх"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Дэлгэц хуваах дээш шудрах дохиог идэвхжүүлэх"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Тойм товчлуурыг дээш шударч, хуваагдсан дэлгэцэд зангаагаар орох тохиргоог идэвхжүүлэх"</string> <string name="experimental" msgid="6198182315536726162">"Туршилтын"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth-г асаах уу?"</string> @@ -466,19 +463,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Дэлгэцэнд яаралтайгаар дуутай гаргах"</string> <string name="notification_more_settings" msgid="816306283396553571">"Бусад тохиргоо"</string> <string name="notification_done" msgid="5279426047273930175">"Дууссан"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Хэвийн өнгө"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Шөнийн өнгө"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Өгөгдмөл өнгө"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Автомат"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Үл мэдэгдэх өнгө"</string> - <string name="color_transform" msgid="6985460408079086090">"Өнгөний өөрчлөлт"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Түргэн тохиргооны хэсгийг харуулах"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Өгөгдмөл өөрчлөлтийг идэвхжүүлэх"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Өнгө, харагдах байдал"</string> + <string name="night_mode" msgid="3540405868248625488">"Шөнийн горим"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Дэлгэцийг тохируулах"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Идэвхтэй"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Идэвхгүй"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Автоматаар асаах"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Тухайн өдрийн байршил, цагийн тохиромжтой үед Шөнийн горимд шилжүүлэх"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Шөнийн горим идэвхтэй үед"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android-н үйлдлийн системд бараан загварыг ашиглах"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Өнгөний нягтаршилыг тохируулах"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Гэрэлтүүлгийг тохируулах"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Тохиргоо, мэдэгдэл зэрэг тогтмол цайвар загварт харуулдаг Android үйлдлийн системийн гол хэсгийг бараан загварт харуулна."</string> <string name="color_apply" msgid="9212602012641034283">"Хэрэгжүүлэх"</string> <string name="color_revert_title" msgid="4746666545480534663">"Тохиргоог баталгаажуулах"</string> <string name="color_revert_message" msgid="9116001069397996691">"Зарим өнгөний тохиргоо энэ төхөөрөмжийг ашиглах боломжгүй болгож болзошгүй. OK товчлуурыг дарж эдгээр өнгөний тохиргоог зөвшөөрөхгүй бол энэ тохиргоо нь 10 секундын дараа шинэчлэгдэх болно."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Тэжээл ашиглалт"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Цэнэглэх үед тэжээл хэмнэгч ажиллахгүй"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Тэжээл хэмнэгч"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Гүйцэтгэл болон дэвсгэрийн датаг багасгадаг"</string> @@ -486,21 +486,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Нүүр хуудас"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Саяхны"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Буцах"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Бүү саад бол тохиргоог дууны түвшинд харуулах"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Бүү саад бол тохиргооны бүрэн хяналтыг дууны түвшний харилцах цонхонд зөвшөөрнө үү."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Дууны түвшин болон бүү саад бол тохиргоо"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Бүү саад бол тохиргоог оруулахын тулд дууны түвшинг бууруулах"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Түвшний хяналттай харуулах"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Бүү саад бол"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Түвшний товчлуурын товчлол"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Бүү саад бол тохиргооноос гарахын тулд дууны түвшинг нэмэх"</string> <string name="battery" msgid="7498329822413202973">"Зай"</string> <string name="clock" msgid="7416090374234785905">"Цаг"</string> <string name="headset" msgid="4534219457597457353">"Чихэвч"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Чихэвч холбогдсон"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Чихэвч холбогдсон"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Статусын самбарт харагдах дүрс тэмдгийг идэвхжүүлэх эсвэл идэвхгүй болгоно уу."</string> <string name="data_saver" msgid="5037565123367048522">"Өгөгдөл хамгаалагч"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Өгөгдөл хамгаалагчийг асаасан байна"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Өгөгдөл хамгаалагчийг унтраасан байна"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Идэвхтэй"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Идэвхгүй"</string> <string name="nav_bar" msgid="1993221402773877607">"Навигацийн самбар"</string> <string name="start" msgid="6873794757232879664">"Эхлэх"</string> <string name="center" msgid="4327473927066010960">"Гол хэсэг"</string> @@ -523,4 +522,15 @@ <string name="preview" msgid="9077832302472282938">"Урьдчилж харах"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Дөрвөлж нэмэхийн тулд чирнэ үү"</string> <string name="qs_edit" msgid="2232596095725105230">"Засах"</string> + <string name="tuner_time" msgid="6572217313285536011">"Цаг"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Цаг, минут, секундийг харуулах"</item> + <item msgid="1427801730816895300">"Цаг, минутыг харуулах (өгөгдмөл)"</item> + <item msgid="3830170141562534721">"Энэ дүрс тэмдгийг бүү үзүүл"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Хувийг тогтмол харуулах"</item> + <item msgid="2139628951880142927">"Цэнэглэх үед хувийг тогтмол харуулах (өгөгдмөл)"</item> + <item msgid="3327323682209964956">"Энэ дүрс тэмдгийг бүү үзүүл"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-mr-rIN/strings.xml b/packages/SystemUI/res/values-mr-rIN/strings.xml index ff36be250324..3156b5c96bcd 100644 --- a/packages/SystemUI/res/values-mr-rIN/strings.xml +++ b/packages/SystemUI/res/values-mr-rIN/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"संपूर्ण\nशांतता"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"केवळ\nप्राधान्य"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"केवळ\nअलार्म"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"सर्व"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"सर्व\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> पूर्ण होईपर्यंत) चार्ज होत आहे"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> पूर्ण होईपर्यंत) वेगाने चार्ज होत आहे"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> पूर्ण होईपर्यंत) हळूहळू चार्ज होत आहे"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"स्टेटस बारमध्ये घड्याळ सेकंद दर्शवा. कदाचित बॅटरी आयुष्य प्रभावित होऊ शकते."</string> <string name="qs_rearrange" msgid="8060918697551068765">"द्रुत सेटिंग्जची पुनर्रचना करा"</string> <string name="show_brightness" msgid="6613930842805942519">"द्रुत सेटिंग्जमध्ये चमक दर्शवा"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"विभाजित-स्क्रीन स्वाइप-अप त्वरक सक्षम करा"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"विभाजित-स्क्रीन स्वाइप-अप जेश्चर सक्षम करा"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"विहंगावलोकन बटणावरून वर स्वाइप करून विभाजित-स्क्रीन प्रविष्ट करण्यासाठी जेश्चर सक्षम करा"</string> <string name="experimental" msgid="6198182315536726162">"प्रायोगिक"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"ब्लूटुथ सुरू करायचे?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"स्क्रीनवर डोकावून पहा आणि ध्वनी चालू करा"</string> <string name="notification_more_settings" msgid="816306283396553571">"अधिक सेटिंग्ज"</string> <string name="notification_done" msgid="5279426047273930175">"पूर्ण झाले"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"सामान्य रंग"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"रात्रीचे रंग"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"सानुकूल रंग"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"स्वयं"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"अज्ञात रंग"</string> - <string name="color_transform" msgid="6985460408079086090">"रंग सुधारणा"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"द्रुत सेटिंग्ज टाइल दर्शवा"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"सानुकूल रूपांतरण सक्षम करा"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"रंग आणि स्वरूप"</string> + <string name="night_mode" msgid="3540405868248625488">"रात्र मोड"</string> + <string name="calibrate_display" msgid="5974642573432039217">"प्रदर्शनाचे मापन करा"</string> + <string name="night_mode_on" msgid="5597545513026541108">"चालू"</string> + <string name="night_mode_off" msgid="8035605276956057508">"बंद"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"स्वयंचलितपणे चालू करा"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"स्थान आणि दिवसाच्या वेळेसाठी योग्य असल्यानुसार रात्र मोड मध्ये स्विच करा"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"रात्र मोड चालू असताना"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS साठी गडद थीमचा वापर करा"</string> + <string name="adjust_tint" msgid="3398569573231409878">"रंगाची छटा समायोजित करा"</string> + <string name="adjust_brightness" msgid="980039329808178246">"चकाकी समायोजित करा"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"सामान्यपणे सेटिंग्ज आणि सूचना यासारख्या प्रकाश थीममध्ये दर्शविल्या जाणार्या Android OS च्या मुख्य क्षेत्रांवर गडद थीम लागू केली जाते."</string> <string name="color_apply" msgid="9212602012641034283">"लागू करा"</string> <string name="color_revert_title" msgid="4746666545480534663">"सेटिंग्जची पुष्टी करा"</string> <string name="color_revert_message" msgid="9116001069397996691">"काही रंग सेटिंग्ज या डिव्हाइसला निरुपयोगी करू शकतात. या रंग सेटिंग्जची पुष्टी करण्यासाठी ठीक आहे दाबा अन्यथा या सेटिंग्ज 10 सेकंदांनंतर रीसेट होतील."</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"मुख्यपृष्ठ"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"अलीकडील"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"परत"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"आवाजामध्ये व्यत्यय आणू नका दर्शवा"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"आवाज संवादामधील व्यत्यय आणू नका च्या पूर्ण नियंत्रणास अनुमती द्या."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"आवाज आणि व्यत्यय आणू नका"</string> - <string name="volume_down_silent" msgid="66962568467719591">"आवाज कमी केल्यावर व्यत्यय आणू नका प्रविष्ट करा"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"आवाज नियंत्रणांसह दर्शवा"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"व्यत्यय आणू नका"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"आवाजाच्या बटणांचा शार्टकट"</string> <string name="volume_up_silent" msgid="7141255269783588286">"आवाज वाढविल्यावर व्यत्यय आणू नका मधून बाहेर पडा"</string> <string name="battery" msgid="7498329822413202973">"बॅटरी"</string> <string name="clock" msgid="7416090374234785905">"घड्याळ"</string> <string name="headset" msgid="4534219457597457353">"हेडसेट"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"हेडफोन कनेक्ट केले"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"हेडसेट कनेक्ट केला"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"चिन्हे स्टेटस बारमध्ये दर्शविले जाण्यापासून प्रतिबंधित करण्यासाठी ती सक्षम किंवा अक्षम करा."</string> <string name="data_saver" msgid="5037565123367048522">"डेटा बचतकर्ता"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"डेटा बचतकर्ता चालू आहे"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"डेटा बचतकर्ता बंद आहे"</string> <string name="switch_bar_on" msgid="1142437840752794229">"चालू"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"बंद"</string> <string name="nav_bar" msgid="1993221402773877607">"नॅव्हिगेशन बार"</string> <string name="start" msgid="6873794757232879664">"प्रारंभ"</string> <string name="center" msgid="4327473927066010960">"मध्यवर्ती"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"पूर्वावलोकन"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"टाइल जोडण्यासाठी ड्रॅग करा"</string> <string name="qs_edit" msgid="2232596095725105230">"संपादित करा"</string> + <string name="tuner_time" msgid="6572217313285536011">"वेळ"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"तास, मिनिटे आणि सेकंद दर्शवा"</item> + <item msgid="1427801730816895300">"तास आणि मिनिटे दर्शवा (डीफॉल्ट)"</item> + <item msgid="3830170141562534721">"हे चिन्ह दर्शवू नका"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"नेहमी टक्केवारी दर्शवा"</item> + <item msgid="2139628951880142927">"चार्ज करताना टक्केवारी दर्शवा (डीफॉल्ट)"</item> + <item msgid="3327323682209964956">"हे चिन्ह दर्शवू नका"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-ms-rMY/strings.xml b/packages/SystemUI/res/values-ms-rMY/strings.xml index 13a1f002edc6..2191228ffd60 100644 --- a/packages/SystemUI/res/values-ms-rMY/strings.xml +++ b/packages/SystemUI/res/values-ms-rMY/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"penyematan skrin"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"cari"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Tidak dapat memulakan <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> dilumpuhkan dalam mod selamat."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Sejarah"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Kosongkan"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Mendatar Terpisah"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Senyap\nsepenuhnya"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Keutamaan\nsahaja"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Penggera\nsahaja"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Semua"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Semua\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Mengecas (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> sehingga penuh)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Mengecas cepat (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> sehingga penuh)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Mengecas perlahan (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> sehingga penuh)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Tunjukkan saat jam dalam bar status. Mungkin menjejaskan hayat bateri."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Susun Semula Tetapan Pantas"</string> <string name="show_brightness" msgid="6613930842805942519">"Tunjukkan kecerahan dalam Tetapan Pantas"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Dayakan pemecut leret ke atas untuk memasuki skrin terpisah"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Dayakan gerak isyarat leret ke atas utk masuk skrin terpisah"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Dayakan gerak isyarat untuk memasuki skrin terpisah dengan meleret ke atas daripada butang Ikhtisar"</string> <string name="experimental" msgid="6198182315536726162">"Percubaan"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Hidupkan Bluetooth?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Intai pada skrin dan bunyikan"</string> <string name="notification_more_settings" msgid="816306283396553571">"Lagi tetapan"</string> <string name="notification_done" msgid="5279426047273930175">"Selesai"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Warna biasa"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Warna malam"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Warna tersuai"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Auto"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Warna tidak diketahui"</string> - <string name="color_transform" msgid="6985460408079086090">"Pengubahsuaian warna"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Tunjukkan jubin Tetapan Pantas"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Dayakan jelmaan tersuai"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Warna dan penampilan"</string> + <string name="night_mode" msgid="3540405868248625488">"Mod malam"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Tentukur paparan"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Hidup"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Mati"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Hidupkan secara automatik"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Beralih ke Mod Malam sebagaimana sesuai untuk lokasi dan masa"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Apabila Mod Malam dihidupkan"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Gunakan tema gelap untuk OS Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Laraskan seri warna"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Laraskan kecerahan"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Tema gelap digunakan pada kawasan teras OS Android yang biasanya dipaparkan dalam tema cerah, seperti Tetapan dan pemberitahuan."</string> <string name="color_apply" msgid="9212602012641034283">"Gunakan"</string> <string name="color_revert_title" msgid="4746666545480534663">"Sahkan tetapan"</string> <string name="color_revert_message" msgid="9116001069397996691">"Sesetengah tetapan warna boleh menjadikan peranti ini tidak dapat digunakan. Klik OK untuk mengesahkan tetapan warna ini, jika tidak, tetapan ini akan ditetapkan semula selepas 10 saat."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Penggunaan bateri"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Penjimat Bateri tidak tersedia semasa mengecas"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Penjimat Bateri"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Mengurangkan prestasi dan data latar belakang"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Skrin Utama"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Terbaharu"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Kembali"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Tunjukkan jangan ganggu dalam kelantangan"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Benarkan kawalan penuh jangan ganggu dalam dialog kelantangan."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Kelantangan dan Jangan Ganggu"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Masuki mod jangan ganggu apabila kelantangan direndahkan"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Tunjukkan dengan kawalan kelantangan"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Jangan ganggu"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Pintasan butang kelantangan"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Keluar drp mod jangan ganggu apabila kelantangan ditinggikan"</string> <string name="battery" msgid="7498329822413202973">"Bateri"</string> <string name="clock" msgid="7416090374234785905">"Jam"</string> <string name="headset" msgid="4534219457597457353">"Set Kepala"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Fon kepala disambungkan"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Set kepala disambungkan"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Dayakan atau lumpuhkan ikon daripada dipaparkan dalam bar status."</string> <string name="data_saver" msgid="5037565123367048522">"Penjimat Data"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Penjimat Data dihidupkan"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Penjimat Data dimatikan"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Hidup"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Mati"</string> <string name="nav_bar" msgid="1993221402773877607">"Bar navigasi"</string> <string name="start" msgid="6873794757232879664">"Mula"</string> <string name="center" msgid="4327473927066010960">"Tengah"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Pratonton"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Seret untuk menambahkan jubin"</string> <string name="qs_edit" msgid="2232596095725105230">"Edit"</string> + <string name="tuner_time" msgid="6572217313285536011">"Masa"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Tunjukkan jam, minit dan saat"</item> + <item msgid="1427801730816895300">"Tunjukkan jam dan minit (lalai)"</item> + <item msgid="3830170141562534721">"Jangan tunjukkan ikon ini"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Sentiasa tunjukkan peratusan"</item> + <item msgid="2139628951880142927">"Tunjukkan peratusan semasa mengecas (lalai)"</item> + <item msgid="3327323682209964956">"Jangan tunjukkan ikon ini"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-my-rMM/strings.xml b/packages/SystemUI/res/values-my-rMM/strings.xml index 60e2812db75a..9e519e7cccb8 100644 --- a/packages/SystemUI/res/values-my-rMM/strings.xml +++ b/packages/SystemUI/res/values-my-rMM/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"မျက်နှာပြင် ပင်ထိုးမှု"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"ရှာဖွေရန်"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> ကို မစနိုင်ပါ။"</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> ကို ဘေးကင်းလုံခြုံသည့်မုဒ်တွင် ပိတ်ထားပါသည်။"</string> <string name="recents_history_button_label" msgid="5153358867807604821">"မှတ်တမ်း"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"ရှင်းလင်းပါ"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"ရေပြင်ညီ ပိုင်းမည်"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"လုံးဝ\nတိတ်ဆိတ်ခြင်း"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"ဦးစားပေးမှု\nသာ"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"နှိုးစက်များ\nသာ"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"အားလုံး"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"အားလုံး\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"(<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> အပြည့် အထိ) အားသွင်းနေ"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"လျှင်မြန်စွာအားသွင်းခြင်း (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ပြည့်သည်အထိ)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"နှေးကွေးစွာ အားသွင်းခြင်း (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ပြည့်သည်အထိ)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"အခြေအနေပြနေရာမှာ နာရီ စက္ကန့်များကို ပြပါ။ ဘက်ထရီ သက်တမ်းကို အကျိုးသက်ရောက်နိုင်တယ်။"</string> <string name="qs_rearrange" msgid="8060918697551068765">"အမြန် ဆက်တင်များကို ပြန်စီစဉ်ရန်"</string> <string name="show_brightness" msgid="6613930842805942519">"အမြန် ဆက်တင်များထဲက တောက်ပမှုကို ပြရန်"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"မျက်နှာပြင်ခွဲကြည့်ရန် အပေါ်သို့ပွတ်ဆွဲခြင်း လုပ်ဆောင်ချက်ကိုဖွင့်ပါ"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"မျက်နှာပြင်ခွဲကြည့်ရန် အပေါ်သို့ပွတ်ဆွဲခြင်း အမူအရာကိုဖွင့်ပါ"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"ခြုံကြည့်သည့်ခလုတ်မှ အပေါ်သို့ပွတ်ဆွဲခြင်းဖြင့် မျက်နှာပြင်ခွဲကြည့်ရန် လက်ဟန်ကိုဖွင့်ပါ"</string> <string name="experimental" msgid="6198182315536726162">"စမ်းသပ်ရေး"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"ဘလူးတုသ် ဖွင့်ရမလား။"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"မျက်နှာပြင်ပေါ်သို့ ဖော်ပြကာ အသံဖွင့်ပါ"</string> <string name="notification_more_settings" msgid="816306283396553571">"နောက်ထပ် ဆက်တင်များ"</string> <string name="notification_done" msgid="5279426047273930175">"ပြီးပါပြီ"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"ပုံမှန် အရောင်များ"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"ည အရောင်များ"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"စိတ်ကြိုက် အရောင်များ"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"အလိုအလျောက်"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"မသိသည့် အရောင်များ"</string> - <string name="color_transform" msgid="6985460408079086090">"အရောင် မွမ်းမံမှု"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"အမြန် ဆက်တင် လေးထောင့်ကွက်ကို ပြပါ"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"စိတ်ကြိုက် ပြောင်းလဲမှုကို ဖွင့်ပါ"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"အရောင်နှင့် အပြင်အဆင်"</string> + <string name="night_mode" msgid="3540405868248625488">"ညသုံးမုဒ်"</string> + <string name="calibrate_display" msgid="5974642573432039217">"ပြသမှုအချိန်အဆကို ညှိပါ"</string> + <string name="night_mode_on" msgid="5597545513026541108">"ဖွင့်ပါ"</string> + <string name="night_mode_off" msgid="8035605276956057508">"ပိတ်ပါ"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"အလိုအလျောက် ဖွင့်ပါ"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"တည်နေရာနှင့် တစ်ရက်တာအချိန်နှင့် သင့်လျော်သလို ညသုံးမုဒ်သို့ ပြောင်းပါ"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"ညသုံမုဒ်ဖွင့်ထားစဉ်"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS အတွက်အရောင်ရင့်အပြင်အဆင်ကို သုံးပါ"</string> + <string name="adjust_tint" msgid="3398569573231409878">"အရောင်မွဲမှုကို ချိန်ပါ"</string> + <string name="adjust_brightness" msgid="980039329808178246">"အလင်းအမှောင်ချိန်ပါ"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"အရောင်ရင့်အပြင်အဆင်သည် ဆက်တင်များနှင့် သတိပေးချက်များကဲ့သို့ ပုံမှန်အားဖြင့် အရောင်ဖျော့အပြင်အဆင်အဖြစ်ရှိသည့် Android OS ၏အဓိကနေရာများကို ပြောင်းလဲပေးပါသည်။"</string> <string name="color_apply" msgid="9212602012641034283">"အသုံးပြုပါ"</string> <string name="color_revert_title" msgid="4746666545480534663">"ဆက်တင်များကို အတည်ပြုပါ"</string> <string name="color_revert_message" msgid="9116001069397996691">"အချို့သော အရောင်ဆက်တက်များက ဤကိရိယာကို သုံးမရအောင် လုပ်ပစ်နိုင်ပါသည်။ ဤအရောင် ဆက်တင်များကို အတည်ပြုရန် အိုကေကို နှိပ်ပါ၊ သို့မဟုတ် ဤဆက်တင်များကို ၁၀ စက္ကန့် အကြာတွင် ပြန်ညှိလိုက်ပါမည်။"</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"ဘက်ထရီ အသုံးပြုမှု"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"အားသွင်းနေချိန်မှာ Battery Saver ကို သုံးမရပါ"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Battery Saver"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"လုပ်ဆောင်မှု နှင့် နောက်ခံ ဒေတာကို လျော့နည်းစေပါသည်"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"ပင်မ"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"မကြာသေးခင်က"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"နောက်သို့"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"အသံအတိုးအလျှော့တွင် မနှောက်ယှက်ရကို ပြပါ"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"အသံအတိုးအလျှော့အကွက်ထဲတွင် မနှောက်ယှက်ရကို အပြည့်အဝထိန်းချုပ်ခွင့် ပြုပါ။"</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"အသံအတိုးအလျှော့နှင့် မနှောက်ယှက်ရ"</string> - <string name="volume_down_silent" msgid="66962568467719591">"အသံလျှော့သည်နှင့် မနှောက်ယှက်ရသို့ ပြောင်းလဲပါ"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"အသံထိန်းချုပ်သည့်ခလုတ်များဖြင့် ပြပါ"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"မနှောက်ယှက်ပါနှင့်"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"အသံထိန်းချုပ်သည့်ခလုတ် ဖြတ်လမ်း"</string> <string name="volume_up_silent" msgid="7141255269783588286">"အသံချဲ့သည်နှင့် မနှောက်ယှက်ရမှ ထွက်ပါ"</string> <string name="battery" msgid="7498329822413202973">"ဘတ်ထရီ"</string> <string name="clock" msgid="7416090374234785905">"နာရီ"</string> <string name="headset" msgid="4534219457597457353">"မိုက်ခွက်ပါနားကြပ်"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"နားကြပ်တပ်ဆင်ပြီးပါပြီ"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"မိုက်ခွက်ပါနားကြပ်တပ်ဆင်ပြီးပါပြီ"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"အခြေအနေဘားတန်းတွင် သင်္ကေတပုံပြခြင်းကို ဖွင့်ရန် သို့မဟုတ် ပိတ်ရန်"</string> <string name="data_saver" msgid="5037565123367048522">"ဒေတာချွေတာမှု"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"ဒေတာချွေတာမှု ဖွင့်ထားသည်"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"ဒေတာချွေတာမှု ပိတ်ထားသည်"</string> <string name="switch_bar_on" msgid="1142437840752794229">"ဖွင့်ပါ"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"ပိတ်ပါ"</string> <string name="nav_bar" msgid="1993221402773877607">"ရွှေ့လျားရန်ဘားတန်း"</string> <string name="start" msgid="6873794757232879664">"စတင်ပါ"</string> <string name="center" msgid="4327473927066010960">"ဌာန"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"အစမ်းကြည့်ပါ"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"အချပ်များကိုထည့်ရန် ဖိဆွဲပါ"</string> <string name="qs_edit" msgid="2232596095725105230">"တည်းဖြတ်ပါ"</string> + <string name="tuner_time" msgid="6572217313285536011">"အချိန်"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"နာရီ၊ မိနစ်နှင့် စက္ကန့်ကိုပြပါ"</item> + <item msgid="1427801730816895300">"နာရီနှင့် မိနစ်ကိုပြပါ (ပုံသေ)"</item> + <item msgid="3830170141562534721">"ဤသင်္ကေတပုံကို မပြပါနှင့်"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"ရာခိုင်နှုန်းကို အမြဲတမ်းပြပါ"</item> + <item msgid="2139628951880142927">"အားသွင်းနေစဉ်တွင် ရာခိုင်နှုန်းကိုပြပါ (ပုံသေ)"</item> + <item msgid="3327323682209964956">"ဤသင်္ကေတပုံကို မပြပါနှင့်"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index f326a018ff8e..3a603c26e3cf 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"én-appsmodus"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"Søk"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Kunne ikke starte <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> er slått av i sikker modus."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Logg"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Tøm"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Del horisontalt"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Total\nstillhet"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Bare\nPrioritet"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Bare\nalarmer"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Alle"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Alle\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Lader (fulladet om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Lader raskt (fulladet om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Lader sakte (fulladet om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Vis sekunder i statusfeltet på klokken. Det kan påvirke batteritiden."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Omorganiser hurtiginnstillingene"</string> <string name="show_brightness" msgid="6613930842805942519">"Vis lysstyrke i hurtiginnstillingene"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Slå på delt skjerm ved å sveipe opp med akseleratoren"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Slå på delt skjerm ved å sveipe opp"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Slå på bevegelsen for å åpne delt skjerm ved å sveipe opp fra Oversikt-knappen"</string> <string name="experimental" msgid="6198182315536726162">"På forsøksstadiet"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Vil du slå på Bluetooth?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Vis fort på skjermen med lyd"</string> <string name="notification_more_settings" msgid="816306283396553571">"Flere innstillinger"</string> <string name="notification_done" msgid="5279426047273930175">"Ferdig"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Normale farger"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Nattfarger"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Spesialtilpassede farger"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automatisk"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Ukjente farger"</string> - <string name="color_transform" msgid="6985460408079086090">"Fargemodifisering"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Vis ruten for hurtiginnstillinger"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Slå på spesialtilpasset forvandling"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Farge og utseende"</string> + <string name="night_mode" msgid="3540405868248625488">"Nattmodus"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Kalibrer skjermen"</string> + <string name="night_mode_on" msgid="5597545513026541108">"På"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Av"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Slå på automatisk"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Bytt til nattmodus avhengig av tid og sted"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Når nattmodus er på"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Bruk et mørkt tema for Android OS"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Juster fargen"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Juster lysstyrken"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Det mørke temaet brukes på kjerneområdene i Android OS som vanligvis vises i et lyst tema, for eksempel Innstillinger og varsler."</string> <string name="color_apply" msgid="9212602012641034283">"Bruk"</string> <string name="color_revert_title" msgid="4746666545480534663">"Bekreft innstillingene"</string> <string name="color_revert_message" msgid="9116001069397996691">"Noen fargeinnstillinger kan gjøre denne enheten ubrukelig. Klikk på OK for å bekrefte disse fargeinnstillingene, ellers blir de tilbakestilt etter ti sekunder."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Batteribruk"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Batterisparing er ikke tilgjengelig under lading"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Batterisparing"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduserer ytelsen og begrenser bakgrunnsdataene"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Startside"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Nylige"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Tilbake"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Vis «Ikke forstyrr» i volumkontrollene"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Tillat full kontroll over «Ikke forstyrr» i volumdialogen."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volum og «Ikke forstyrr»"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Åpne «Ikke forstyrr» med volum ned-knappen"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Vis med volumkontrollene"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Ikke forstyrr"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Hurtigtast for volumknappene"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Lukk «Ikke forstyrr» med volum opp-knappen"</string> <string name="battery" msgid="7498329822413202973">"Batteri"</string> <string name="clock" msgid="7416090374234785905">"Klokke"</string> <string name="headset" msgid="4534219457597457353">"Hodetelefoner"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Øretelefoner er tilkoblet"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Hodetelefoner er tilkoblet"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Vis eller skjul ikoner i statusfeltet."</string> <string name="data_saver" msgid="5037565123367048522">"Datasparing"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Datasparing er på"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Datasparing er av"</string> <string name="switch_bar_on" msgid="1142437840752794229">"På"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Av"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigasjonsrad"</string> <string name="start" msgid="6873794757232879664">"Start"</string> <string name="center" msgid="4327473927066010960">"Midtstilt"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Forhåndsvisning"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Dra for å legge til fliser"</string> <string name="qs_edit" msgid="2232596095725105230">"Endre"</string> + <string name="tuner_time" msgid="6572217313285536011">"Tid"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Vis timer, minutter og sekunder"</item> + <item msgid="1427801730816895300">"Vis timer og minutter (standard)"</item> + <item msgid="3830170141562534721">"Ikke vis dette ikonet"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Vis alltid prosentandel"</item> + <item msgid="2139628951880142927">"Vis prosentandel under lading (standard)"</item> + <item msgid="3327323682209964956">"Ikke vis dette ikonet"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-ne-rNP/strings.xml b/packages/SystemUI/res/values-ne-rNP/strings.xml index 9b67d9cefd25..e2588daf5c39 100644 --- a/packages/SystemUI/res/values-ne-rNP/strings.xml +++ b/packages/SystemUI/res/values-ne-rNP/strings.xml @@ -334,8 +334,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"पूरै\nशान्त"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"प्राथमिकता \nमात्र"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"अलार्महरू \nमात्र"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"सबै"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"सबै\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"चार्ज हुँदै (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> पूर्ण भएसम्म)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"छिटो चार्ज हुँदै (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> पूर्ण नभएसम्म)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"बिस्तारै चार्ज हुँदै (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> पूर्ण नभएसम्म)"</string> @@ -448,7 +446,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"वस्तुस्थिति पट्टीको घडीमा सेकेन्ड देखाउनुहोस्। ब्याट्री आयु प्रभावित हुन सक्छ।"</string> <string name="qs_rearrange" msgid="8060918697551068765">"द्रुत सेटिङहरू पुनः व्यवस्थित गर्नुहोस्"</string> <string name="show_brightness" msgid="6613930842805942519">"द्रुत सेटिङहरूमा उज्यालो देखाउनुहोस्"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"विभाजित-स्क्रिनको स्वाइप-अप एक्सेलेटर सक्रिय गर्नुहोस्"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"विभाजित-स्क्रिन स्वाइप-अप इशारा सक्षम गर्नुहोस्"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"परिदृश्य बटनदेखि माथि स्वाइप गरी विभाजित-स्क्रिन प्रविष्ट गर्न इसारालाई सक्रिय गर्नुहोस्"</string> <string name="experimental" msgid="6198182315536726162">"प्रयोगात्मक"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"ब्लुटुथ सक्रिय पार्ने हो?"</string> @@ -468,18 +466,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"स्क्रिनमा हेर्नुहोस् र आवाज निकाल्नुहोस्"</string> <string name="notification_more_settings" msgid="816306283396553571">"थप सेटिङहरू"</string> <string name="notification_done" msgid="5279426047273930175">"सम्पन्न भयो"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"सामान्य रङहरू"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"रात्री रङहरू"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"अनुकूलन रङहरू"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"स्वतः"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"अज्ञात रङहरू"</string> - <string name="color_transform" msgid="6985460408079086090">"रङ परिमार्जन"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"द्रुत सेटिङ टाइल देखाउनुहोस्"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"अनुकूलन रूपान्तरण सक्रिय गर्नुहोस्"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"रंग र रूप"</string> + <string name="night_mode" msgid="3540405868248625488">"रात्री मोड"</string> + <string name="calibrate_display" msgid="5974642573432039217">"प्रदर्शन जाँच्नुहोस्"</string> + <string name="night_mode_on" msgid="5597545513026541108">"खोल्नुहोस्"</string> + <string name="night_mode_off" msgid="8035605276956057508">"बन्द गर्नुहोस्"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"स्वतः खोल्नुहोस्"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"स्थान र दिनको समयको लागि उपयुक्त रूपमा रात्री मोडमा स्विच गर्नुहोस्"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"रात्री मोड खुला भएको समय"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS का लागि गाढा रंगको विषयवस्तु प्रयोग गर्नुहोस्"</string> + <string name="adjust_tint" msgid="3398569573231409878">"रङ्ग समायोजन गर्नुहोस्"</string> + <string name="adjust_brightness" msgid="980039329808178246">"चमक समायोजन गर्नुहोस्"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Android OS कोर क्षेत्रमा गहिरो रंगको विषयवस्तु लागू हुन्छ, जुन सामान्यतया एउटा हल्का रंगको विषयवस्तुमा प्रदर्शन गरिन्छ, जस्तै सेटिङ र सूचनाहरू ।"</string> <string name="color_apply" msgid="9212602012641034283">"लागू गर्नुहोस्"</string> <string name="color_revert_title" msgid="4746666545480534663">"सेटिङहरूको पुष्टि गर्नुहोस्"</string> <string name="color_revert_message" msgid="9116001069397996691">"केही रङ सेटिङहरूले यस यन्त्रलाई अनुपयोगी बनाउन सक्छन्। यी रङ सेटिङहरू पुष्टि गर्न ठीक छ मा क्लिक गर्नुहोस्, अन्यथा यी सेटिङहरू १० सेकेण्डपछि रिसेट हुनेछन्।"</string> - <string name="battery_panel_title" msgid="7944156115535366613">"ब्याट्रि उपयोग"</string> + <string name="battery_panel_title" msgid="7944156115535366613">"ब्याट्री उपयोग"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"चार्ज गर्ने समयमा ब्याट्री सेभर उपलब्ध छैन"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"ब्याट्री सेभर"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"कार्यसम्पादन र पृष्ठभूमि डेटा घटाउँछ"</string> @@ -487,21 +489,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"गृह"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"हालैका"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"पछाडि"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"भोल्युममा बाधा नपुर्याउनुहोस् देखाउनुहोस्"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"भोल्युमको संवादमा बाधा नपुर्याउनुहोस् को पूर्ण नियन्त्रणलाई अनुमति दिनुहोस्"</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"भोल्युम र बाधा नपुर्याउनुहोस्"</string> - <string name="volume_down_silent" msgid="66962568467719591">"भोल्युम कम गर्नेमा बाधा नपुर्याउनुहोस् प्रविष्ट गर्नुहोस्"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"भोल्युम नियन्त्रणसंग देखाउनुहोस्"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"बाधा नपुर्याउनुहोस्"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"भोल्युम बटन सर्टकट"</string> <string name="volume_up_silent" msgid="7141255269783588286">"भोल्युम बढाउनेमा बाधा नपुर्याउनुहोस् प्रविष्ट गर्नुहोस्"</string> <string name="battery" msgid="7498329822413202973">"ब्याट्री"</string> <string name="clock" msgid="7416090374234785905">"घडी"</string> <string name="headset" msgid="4534219457597457353">"हेडसेट"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"हेडफोनहरू जडान गरियो"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"हेडसेट जडान गरियो"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"वस्तुस्थिति पट्टीमा देखाइनको लागि आइकनहरू सक्रिय वा निष्क्रिय गर्नुहोस्।"</string> <string name="data_saver" msgid="5037565123367048522">"डेटा सेभर"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"डेटा सेभर अन छ"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"डेटा सेभर बन्द छ"</string> <string name="switch_bar_on" msgid="1142437840752794229">"सक्रिय गर्नुहोस्"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"बन्द गर्नुहोस्"</string> <string name="nav_bar" msgid="1993221402773877607">"नेभिगेशन पट्टी"</string> <string name="start" msgid="6873794757232879664">"सुरु गर्नुहोस्"</string> <string name="center" msgid="4327473927066010960">"केन्द्र"</string> @@ -524,4 +525,15 @@ <string name="preview" msgid="9077832302472282938">"पूर्वावलोकन"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"टाइलहरू थप्न तान्नुहोस्"</string> <string name="qs_edit" msgid="2232596095725105230">"सम्पादन गर्नुहोस्"</string> + <string name="tuner_time" msgid="6572217313285536011">"समय"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"घण्टा, मिनेट, र सेकेन्ड देखाउनुहोस्"</item> + <item msgid="1427801730816895300">"घण्टा र मिनेट (पूर्वनिर्धारित) देखाउनुहोस्"</item> + <item msgid="3830170141562534721">"यो आइकन नदेखाउनुहोस्"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"सधैं प्रतिशत देखाउनुहोस्"</item> + <item msgid="2139628951880142927">"चार्ज गर्दा प्रतिशत देखाउनुहोस् (पूर्वनिर्धारित)"</item> + <item msgid="3327323682209964956">"यो आइकन नदेखाउनुहोस्"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index 23455d82675e..cf6c5bf0338d 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Totale\nstilte"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Alleen\nprioriteit"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Alleen\nalarmen"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Alle"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Alle\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Opladen (vol over <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Snel opladen (vol over <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Langzaam opladen (vol over <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Klokseconden op de statusbalk weergeven. Kan van invloed zijn op de accuduur."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Snelle instellingen opnieuw indelen"</string> <string name="show_brightness" msgid="6613930842805942519">"Helderheid weergeven in Snelle instellingen"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Omhoog vegen voor gesplitst scherm inschakelen"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Omhoog vegen voor gesplitst scherm inschakelen"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Gebaar inschakelen om gesplitst scherm te openen door vanaf de knop Overzicht omhoog te vegen"</string> <string name="experimental" msgid="6198182315536726162">"Experimenteel"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth inschakelen?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Op het scherm weergeven en geluid laten horen"</string> <string name="notification_more_settings" msgid="816306283396553571">"Meer instellingen"</string> <string name="notification_done" msgid="5279426047273930175">"Gereed"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Normale kleuren"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Nachtkleuren"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Aangepaste kleuren"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automatisch"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Onbekende kleuren"</string> - <string name="color_transform" msgid="6985460408079086090">"Kleuraanpassing"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Tegel voor \'Snelle instellingen\' weergeven"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Aangepast transformeren inschakelen"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Kleur en uiterlijk"</string> + <string name="night_mode" msgid="3540405868248625488">"Nachtmodus"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Display kalibreren"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Aan"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Uit"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Automatisch inschakelen"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Overschakelen naar nachtmodus indien van toepassing voor locatie en tijd van de dag"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Als nachtmodus is ingeschakeld"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Donker thema gebruiken voor Android OS"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Tint aanpassen"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Helderheid aanpassen"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Het donkere thema wordt toegepast op kerngedeelten van Android OS die normaal gesproken worden weergegeven met een licht thema, zoals Instellingen en meldingen."</string> <string name="color_apply" msgid="9212602012641034283">"Toepassen"</string> <string name="color_revert_title" msgid="4746666545480534663">"Instellingen bevestigen"</string> <string name="color_revert_message" msgid="9116001069397996691">"Bij sommige kleurinstellingen kan het apparaat onbruikbaar worden. Klik op OK om deze kleurinstellingen te bevestigen, anders worden deze instellingen na tien seconden gereset."</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Startpagina"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recent"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Terug"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"\'Niet storen\' weergeven in volume"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Volledig beheer van \'Niet storen\' in het volumedialoogvenster toestaan."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume en \'Niet storen\'"</string> - <string name="volume_down_silent" msgid="66962568467719591">"\'Niet storen\' activeren bij volume omlaag"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Weergeven met volumeknoppen"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Niet storen"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Volumeknoppen als sneltoets"</string> <string name="volume_up_silent" msgid="7141255269783588286">"\'Niet storen\' afsluiten bij volume omhoog"</string> <string name="battery" msgid="7498329822413202973">"Accu"</string> <string name="clock" msgid="7416090374234785905">"Klok"</string> <string name="headset" msgid="4534219457597457353">"Headset"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Hoofdtelefoon aangesloten"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Headset aangesloten"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"De weergave van pictogrammen in de statusbalk in- of uitschakelen."</string> <string name="data_saver" msgid="5037565123367048522">"Databesparing"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Databesparing is ingeschakeld"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Databesparing is uitgeschakeld"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Aan"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Uit"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigatiebalk"</string> <string name="start" msgid="6873794757232879664">"Begin"</string> <string name="center" msgid="4327473927066010960">"Midden"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Voorbeeld"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Sleep om tegels toe te voegen"</string> <string name="qs_edit" msgid="2232596095725105230">"Bewerken"</string> + <string name="tuner_time" msgid="6572217313285536011">"Tijd"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Uren, minuten en seconden weergeven"</item> + <item msgid="1427801730816895300">"Uren en minuten weergeven (standaard)"</item> + <item msgid="3830170141562534721">"Dit pictogram niet weergeven"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Percentage altijd weergeven"</item> + <item msgid="2139628951880142927">"Percentage weergeven tijdens opladen (standaard)"</item> + <item msgid="3327323682209964956">"Dit pictogram niet weergeven"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-pa-rIN/strings.xml b/packages/SystemUI/res/values-pa-rIN/strings.xml index 0d8ab1931f8c..8c7028de4034 100644 --- a/packages/SystemUI/res/values-pa-rIN/strings.xml +++ b/packages/SystemUI/res/values-pa-rIN/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"ਕੁਲ \n ਚੁੱਪੀ"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"ਕੇਵਲ\nਤਰਜੀਹੀ"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"ਕੇਵਲ\nਅਲਾਰਮ"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"ਸਭ"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"ਸਾਰੀਆਂ\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"ਚਾਰਜਿੰਗ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ਪੂਰਾ ਹੋਣ ਤੱਕ)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"ਤੇਜ਼ੀ ਨਾਲ ਚਾਰਜ ਹੋ ਰਹੀ ਹੈ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ਪੂਰੀ ਹੋਣ ਤੱਕ)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"ਹੌਲੀ-ਹੌਲੀ ਚਾਰਜ ਹੋ ਰਹੀ ਹੈ (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ਪੂਰੀ ਹੋਣ ਤੱਕ)"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"ਸਥਿਤੀ ਬਾਰ ਵਿੱਚ ਘੜੀ ਸਕਿੰਟ ਦਿਖਾਓ। ਬੈਟਰੀ ਸਮਰੱਥਾ ਤੇ ਅਸਰ ਪੈ ਸਕਦਾ ਹੈ।"</string> <string name="qs_rearrange" msgid="8060918697551068765">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਨੂੰ ਦੁਬਾਰਾ ਕ੍ਰਮ ਦਿਓ"</string> <string name="show_brightness" msgid="6613930842805942519">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਚਮਕ ਦਿਖਾਓ"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"ਸਪਲਿਟ-ਸਕ੍ਰੀਨ ਸਵਾਈਪ-ਅੱਪ ਐਕਸੇਲਰੇਟਰ ਨੂੰ ਯੋਗ ਬਣਾਓ"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"ਸਪਲਿਟ-ਸਕ੍ਰੀਨ ਸਵਾਈਪ-ਅੱਪ ਸੰਕੇਤ ਨੂੰ ਯੋਗ ਬਣਾਓ"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"ਰੂਪ-ਰੇਖਾ ਬਟਨ ਤੋਂ ਉੱਪਰ ਵੱਲ ਸਵਾਈਪ ਕਰਨ ਦੁਆਰਾ ਸਪਲਿਟ-ਸਕ੍ਰੀਨ ਵਿੱਚ ਦਾਖਲ ਹੋਣ ਲਈ ਸੰਕੇਤ ਨੂੰ ਯੋਗ ਬਣਾਓ"</string> <string name="experimental" msgid="6198182315536726162">"ਪ੍ਰਯੋਗਾਤਮਿਕ"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth ਚਾਲੂ ਕਰੋ?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"ਸਕਰੀਨ \'ਤੇ ਝਾਤੀ ਮਾਰੋ ਅਤੇ ਆਵਾਜ਼ ਕਰੋ"</string> <string name="notification_more_settings" msgid="816306283396553571">"ਹੋਰ ਸੈਟਿੰਗਾਂ"</string> <string name="notification_done" msgid="5279426047273930175">"ਹੋ ਗਿਆ"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"ਸਧਾਰਨ ਰੰਗ"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"ਰਾਤ ਦੇ ਰੰਗ"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"ਕਸਟਮ ਰੰਗ"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"ਸਵੈ"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"ਅਗਿਆਤ ਰੰਗ"</string> - <string name="color_transform" msgid="6985460408079086090">"ਰੰਗ ਸੋਧ"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਟਾਇਲ ਵਿਖਾਓ"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"ਕਸਟਮ ਤਬਦੀਲੀ ਯੋਗ ਬਣਾਓ"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"ਰੰਗ ਅਤੇ ਵਿਖਾਲਾ"</string> + <string name="night_mode" msgid="3540405868248625488">"ਰਾਤ ਮੋਡ"</string> + <string name="calibrate_display" msgid="5974642573432039217">"ਡਿਸਪਲੇ ਨੂੰ ਕੈਲੀਬ੍ਰੇਟ ਕਰੋ"</string> + <string name="night_mode_on" msgid="5597545513026541108">"ਚਾਲੂ"</string> + <string name="night_mode_off" msgid="8035605276956057508">"ਬੰਦ"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"ਸਵੈਚਾਲਿਤ ਤੌਰ \'ਤੇ ਚਾਲੂ ਕਰੋ"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"ਟਿਕਾਣੇ ਅਤੇ ਦਿਨ ਦੇ ਸਮੇਂ ਲਈ ਢੁਕਵੇਂ ਰਾਤ ਮੋਡ \'ਤੇ ਸਵਿੱਚ ਕਰੋ"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"ਜਦੋਂ ਰਾਤ ਮੋਡ ਚਾਲੂ ਹੋਵੇ"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS ਲਈ ਗੂੜ੍ਹੇ ਥੀਮ ਦੀ ਵਰਤੋਂ ਕਰੋ"</string> + <string name="adjust_tint" msgid="3398569573231409878">"ਟਿੰਟ ਨੂੰ ਵਿਵਸਥਿਤ ਕਰੋ"</string> + <string name="adjust_brightness" msgid="980039329808178246">"ਚਮਕ ਨੂੰ ਵਿਵਸਥਿਤ ਕਰੋ"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"ਗੂੜ੍ਹੇ ਥੀਮ ਨੂੰ Android OS ਦੇ ਉਹਨਾਂ ਮੁੱਖ ਖੇਤਰਾਂ \'ਤੇ ਲਾਗੂ ਕੀਤਾ ਜਾਂਦਾ ਹੈ ਜੋ ਆਮ ਤੌਰ \'ਤੇ ਇੱਕ ਹਲਕੇ ਥੀਮ ਵਿੱਚ ਵਿਖਾਏ ਜਾਂਦੇ ਹਨ, ਜਿਵੇਂ ਕਿ ਸੈਟਿੰਗਾਂ ਅਤੇ ਸੂਚਨਾਵਾਂ।"</string> <string name="color_apply" msgid="9212602012641034283">"ਲਾਗੂ ਕਰੋ"</string> <string name="color_revert_title" msgid="4746666545480534663">"ਸੈਟਿੰਗਾਂ ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"</string> <string name="color_revert_message" msgid="9116001069397996691">"ਕੁਝ ਰੰਗ ਸੈਟਿੰਗਾਂ ਇਸ ਡੀਵਾਈਸ ਨੂੰ ਬੇਕਾਰ ਕਰ ਸਕਦੀਆਂ ਹਨ। ਇਹਨਾਂ ਰੰਗ ਸੈਟਿੰਗਾਂ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਠੀਕ \'ਤੇ ਕਲਿੱਕ ਕਰੋ, ਨਹੀਂ ਤਾਂ ਇਹ ਸੈਟਿੰਗਾਂ 10 ਸਕਿੰਟ ਬਾਅਦ ਮੁੜ-ਸੈੱਟ ਹੋ ਜਾਣਗੀਆਂ।"</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"ਮੁੱਖ ਸਕ੍ਰੀਨ"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"ਹਾਲੀਆ"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"ਪਿੱਛੇ"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"ਵੌਲਯੂਮ ਵਿੱਚ ਮੈਨੂੰ ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ ਵਿਖਾਓ"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"ਵੌਲਯੂਮ ਡਾਇਲੌਗ ਵਿੱਚ ਮੈਨੂੰ ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ ਦੇ ਪੂਰੇ ਨਿਯੰਤ੍ਰਣ ਦੀ ਮਨਜ਼ੂਰੀ ਦਿਓ।"</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"ਵੌਲਯੂਮ ਅਤੇ ਮੈਨੂੰ ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ"</string> - <string name="volume_down_silent" msgid="66962568467719591">"ਵੌਲਯੂਮ ਘੱਟ ਹੋਣ \'ਤੇ ਮੈਨੂੰ ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ ਵਿੱਚ ਦਾਖਲ ਹੋਵੋ"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"ਵੌਲਯੂਮ ਕੰਟਰੋਲਾਂ ਨਾਲ ਵਿਖਾਓ"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"ਮੈਨੂੰ ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"ਵੌਲਯੂਮ ਬਟਨ ਸ਼ਾਰਟਕੱਟ"</string> <string name="volume_up_silent" msgid="7141255269783588286">"ਵੌਲਯੂਮ ਉੱਚੀ ਹੋਣ \'ਤੇ ਮੈਨੂੰ ਪਰੇਸ਼ਾਨ ਨਾ ਕਰੋ ਤੋਂ ਬਾਹਰ ਜਾਓ"</string> <string name="battery" msgid="7498329822413202973">"ਬੈਟਰੀ"</string> <string name="clock" msgid="7416090374234785905">"ਘੜੀ"</string> <string name="headset" msgid="4534219457597457353">"ਹੈੱਡਸੈੱਟ"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ਹੈੱਡਫੋਨਾਂ ਨੂੰ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ਹੈੱਡਸੈੱਟ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"ਚਿੰਨ੍ਹਾਂ ਦੇ ਸਥਿਤੀ ਪੱਟੀ ਵਿੱਚ ਵਿਖਾਏ ਜਾਣ ਨੂੰ ਯੋਗ ਜਾਂ ਅਯੋਗ ਬਣਾਓ।"</string> <string name="data_saver" msgid="5037565123367048522">"ਡੈਟਾ ਸੇਵਰ"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"ਡੈਟਾ ਸੇਵਰ ਚਾਲੂ ਹੈ"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"ਡੈਟਾ ਸੇਵਰ ਬੰਦ ਹੈ"</string> <string name="switch_bar_on" msgid="1142437840752794229">"ਚਾਲੂ"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"ਬੰਦ"</string> <string name="nav_bar" msgid="1993221402773877607">"ਆਵਾਗੌਣ ਪੱਟੀ"</string> <string name="start" msgid="6873794757232879664">"ਸ਼ੁਰੂ ਕਰੋ"</string> <string name="center" msgid="4327473927066010960">"ਕੇਂਦਰ"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"ਝਲਕ"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"ਟਾਇਲਾਂ ਨੂੰ ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਘਸੀਟੋ"</string> <string name="qs_edit" msgid="2232596095725105230">"ਸੰਪਾਦਨ ਕਰੋ"</string> + <string name="tuner_time" msgid="6572217313285536011">"ਸਮਾਂ"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"ਘੰਟੇ, ਮਿੰਟ, ਅਤੇ ਸਕਿੰਟ ਵਿਖਾਓ"</item> + <item msgid="1427801730816895300">"ਘੰਟੇ ਅਤੇ ਮਿੰਟ ਵਿਖਾਓ (ਪੂਰਵ-ਨਿਰਧਾਰਤ)"</item> + <item msgid="3830170141562534721">"ਇਸ ਚਿੰਨ੍ਹ ਨੂੰ ਨਾ ਵਿਖਾਓ"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"ਹਮੇਸ਼ਾਂ ਪ੍ਰਤੀਸ਼ਤਤਾ ਵਿਖਾਓ"</item> + <item msgid="2139628951880142927">"ਚਾਰਜਿੰਗ ਦੌਰਾਨ ਪ੍ਰਤੀਸ਼ਤਤਾ ਵਿਖਾਓ (ਪੂਰਵ-ਨਿਰਧਾਰਤ)"</item> + <item msgid="3327323682209964956">"ਇਸ ਚਿੰਨ੍ਹ ਨੂੰ ਨਾ ਵਿਖਾਓ"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index 2eae56a9192a..e30824761d07 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -303,8 +303,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"przypinanie ekranu"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"szukaj"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Nie udało się uruchomić aplikacji <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Aplikacja <xliff:g id="APP">%s</xliff:g> została wyłączona w trybie bezpiecznym."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Historia"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Wyczyść"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Podziel poziomo"</string> @@ -336,8 +335,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Całkowita\ncisza"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Tylko\npriorytetowe"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Tylko\nalarmy"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Wszystkie"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Wszystkie\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Ładuje się (pełne naładowanie za <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Szybkie ładowanie (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do końca)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Wolne ładowanie (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do końca)"</string> @@ -450,7 +447,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Pokaż sekundy na zegarku na pasku stanu. Może mieć wpływ na czas pracy baterii."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Uporządkuj Szybkie ustawienia"</string> <string name="show_brightness" msgid="6613930842805942519">"Pokaż jasność w Szybkich ustawieniach"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Włącz przyspieszenie dzielenia ekranu przesunięciem w górę"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Włącz dzielenie ekranu gestem przesunięcia w górę"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Włącz dzielenie ekranu po wykonaniu gestu przesunięcia palcem w górę od przycisku Przegląd"</string> <string name="experimental" msgid="6198182315536726162">"Eksperymentalne"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Włączyć Bluetooth?"</string> @@ -470,19 +467,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Wyświetlaj na ekranie i odtwarzaj dźwięk"</string> <string name="notification_more_settings" msgid="816306283396553571">"Więcej ustawień"</string> <string name="notification_done" msgid="5279426047273930175">"Gotowe"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Kolory standardowe"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Kolory nocne"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Kolory niestandardowe"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automatycznie"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Nieznane kolory"</string> - <string name="color_transform" msgid="6985460408079086090">"Zmiana koloru"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Pokazuj kafelek szybkich ustawień"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Włącz przekształcenie niestandardowe"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Kolor i wygląd"</string> + <string name="night_mode" msgid="3540405868248625488">"Tryb nocny"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Kalibracja wyświetlacza"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Wł."</string> + <string name="night_mode_off" msgid="8035605276956057508">"Wył."</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Włącz automatycznie"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Przełączaj na tryb nocny odpowiednio do lokalizacji i pory dnia"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Gdy jest włączony tryb nocny"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Użyj motywu ciemnego dla Androida"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Dostosuj odcień"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Dostosuj jasność"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Motyw ciemny zostanie zastosowany do głównych obszarów Androida, które normalnie są jasne, takich jak Ustawienia czy powiadomienia."</string> <string name="color_apply" msgid="9212602012641034283">"Zastosuj"</string> <string name="color_revert_title" msgid="4746666545480534663">"Potwierdź ustawienia"</string> <string name="color_revert_message" msgid="9116001069397996691">"Niektóre ustawienia kolorów mogą utrudniać korzystanie z urządzenia. Kliknij OK, by potwierdzić te ustawienia kolorów. Jeśli tego nie zrobisz, zostaną one zresetowane po 10 sekundach."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Wykorzystanie baterii"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Oszczędzanie baterii nie jest dostępne podczas ładowania"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Oszczędzanie baterii"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Zmniejsza wydajność i ogranicza dane w tle"</string> @@ -490,21 +490,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Ekran główny"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Ostatnie"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Wstecz"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Pokaż panel Nie przeszkadzać w oknie sterowania głośnością"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Pokaż cały panel Nie przeszkadzać w oknie sterowania głośnością."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Głośność i tryb Nie przeszkadzać"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Włącz tryb Nie przeszkadzać przy zmniejszaniu głośności"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Pokazuj z regulacją głośności"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Nie przeszkadzać"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Wł./wył. przyciskami głośności"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Wyłącz tryb Nie przeszkadzać przy zwiększaniu głośności"</string> <string name="battery" msgid="7498329822413202973">"Bateria"</string> <string name="clock" msgid="7416090374234785905">"Zegar"</string> <string name="headset" msgid="4534219457597457353">"Zestaw słuchawkowy"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Słuchawki są podłączone"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Zestaw słuchawkowy jest podłączony"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Włącz lub wyłącz wyświetlanie ikon na pasku stanu."</string> <string name="data_saver" msgid="5037565123367048522">"Oszczędzanie danych"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Oszczędzanie danych jest włączone"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Oszczędzanie danych jest wyłączone"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Wł."</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Wył."</string> <string name="nav_bar" msgid="1993221402773877607">"Pasek nawigacji"</string> <string name="start" msgid="6873794757232879664">"Na początku"</string> <string name="center" msgid="4327473927066010960">"Na środku"</string> @@ -527,4 +526,15 @@ <string name="preview" msgid="9077832302472282938">"Podgląd"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Przeciągnij, aby dodać kafelki"</string> <string name="qs_edit" msgid="2232596095725105230">"Edytuj"</string> + <string name="tuner_time" msgid="6572217313285536011">"Godzina"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Pokazuj godziny, minuty i sekundy"</item> + <item msgid="1427801730816895300">"Pokazuj godziny i minuty (domyślnie)"</item> + <item msgid="3830170141562534721">"Nie pokazuj tej ikony"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Zawsze pokazuj procent"</item> + <item msgid="2139628951880142927">"Pokazuj procent podczas ładowania (domyślnie)"</item> + <item msgid="3327323682209964956">"Nie pokazuj tej ikony"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 5219454b22a4..efcd7dcc051c 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -334,8 +334,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Silêncio\ntotal"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Somente\nprioridade"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Somente\nalarmes"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Tudo"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Todas\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Carregando (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até concluir)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Carregando rapidamente (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para conclusão)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Carregando lentamente (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para conclusão)"</string> @@ -448,7 +446,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Mostrar segundos do relógio na barra de status. Pode afetar a duração da bateria."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Reorganizar \"Configurações rápidas\""</string> <string name="show_brightness" msgid="6613930842805942519">"Mostrar brilho nas \"Configurações rápidas\""</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Ativar acelerador para dividir a tela ao deslizar para cima"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Ativar gesto para dividir a tela ao deslizar para cima"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Ativa o gesto para entrar no modo de tela dividida deslizando a partir do botão \"Visão geral\""</string> <string name="experimental" msgid="6198182315536726162">"Experimentais"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Ativar o Bluetooth?"</string> @@ -468,19 +466,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Mostrar parcialmente na tela e emitir som"</string> <string name="notification_more_settings" msgid="816306283396553571">"Mais configurações"</string> <string name="notification_done" msgid="5279426047273930175">"Concluído"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Cores normais"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Cores noturnas"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Cores personalizadas"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automáticas"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Cores desconhecidas"</string> - <string name="color_transform" msgid="6985460408079086090">"Modificação de cor"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Mostrar bloco de configurações rápidas"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Ativar transformação personalizada"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Cor e aparência"</string> + <string name="night_mode" msgid="3540405868248625488">"Modo noturno"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Calibrar tela"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Ativado"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Desativado"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Ativar automaticamente"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Alternar para o modo noturno conforme apropriado para o local e hora do dia"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Quando o modo noturno está ativado"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Usar o tema escuro para o SO Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Ajustar tonalidade"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Ajustar brilho"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"O tema escuro é aplicado a áreas centrais do sistema operacional Android que normalmente são exibidas em um tema claro, como configurações e notificações."</string> <string name="color_apply" msgid="9212602012641034283">"Aplicar"</string> <string name="color_revert_title" msgid="4746666545480534663">"Confirmar configurações"</string> <string name="color_revert_message" msgid="9116001069397996691">"Algumas configurações de cor podem tornar o dispositivo inutilizável. Clique em \"OK\" para confirmar essas configurações de cor; caso contrário, essas configurações serão redefinidas após 10 segundos."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Uso da bateria"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"A Economia de bateria não fica disponível durante o carregamento"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Economia de bateria"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduz o desempenho e os dados em segundo plano"</string> @@ -488,21 +489,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Início"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recentes"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Voltar"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Mostrar \"Não perturbe\" nas opções de volume"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Permitir controle total do recurso \"Não perturbe\" na caixa de diálogo de volume."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume e \"Não perturbe\""</string> - <string name="volume_down_silent" msgid="66962568467719591">"Entre no modo \"Não perturbe\" abaixando o volume"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Mostrar com controles de volume"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Não perturbe"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Atalho de botões de volume"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Saia do modo \"Não perturbe\" aumentando o volume"</string> <string name="battery" msgid="7498329822413202973">"Bateria"</string> <string name="clock" msgid="7416090374234785905">"Relógio"</string> <string name="headset" msgid="4534219457597457353">"Fone de ouvido"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Fones de ouvido conectados"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Fone de ouvido conectado"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Ativar ou desativar a exibição de ícones na barra de status."</string> <string name="data_saver" msgid="5037565123367048522">"Economia de dados"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Economia de dados ativada"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"A Economia de dados está desativada"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Ativado"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Desativado"</string> <string name="nav_bar" msgid="1993221402773877607">"Barra de navegação"</string> <string name="start" msgid="6873794757232879664">"Iniciar"</string> <string name="center" msgid="4327473927066010960">"Centralizar"</string> @@ -525,4 +525,15 @@ <string name="preview" msgid="9077832302472282938">"Visualização"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arraste para adicionar blocos"</string> <string name="qs_edit" msgid="2232596095725105230">"Editar"</string> + <string name="tuner_time" msgid="6572217313285536011">"Horas"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Mostrar horas, minutos e segundos"</item> + <item msgid="1427801730816895300">"Mostrar horas e minutos (padrão)"</item> + <item msgid="3830170141562534721">"Não mostrar este ícone"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Sempre mostrar porcentagem"</item> + <item msgid="2139628951880142927">"Mostrar porcentagem durante o carregamento (padrão)"</item> + <item msgid="3327323682209964956">"Não mostrar este ícone"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index 064e56541bbd..4cceb07c2a7f 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Silêncio\ntotal"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Apenas\nprioridade"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Apenas\nalarmes"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Tudo"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Todas\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"A carregar (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até à carga máxima)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"A carregar rapid. (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até à carga máxima)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"A carregar lentam. (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até à carga máxima)"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Mostrar segundos do relógio na barra de estado. Pode afetar a autonomia da bateria."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Reorganizar as Definições rápidas"</string> <string name="show_brightness" msgid="6613930842805942519">"Mostrar luminosidade nas Definições rápidas"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Ativar acelerador de deslize ráp. para cima do ecrã dividido"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Ativar gesto de deslize rápido para cima do ecrã dividido"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Ativar o gesto para aceder ao ecrã dividido ao deslizar rapidamente para cima a partir do botão Vista geral"</string> <string name="experimental" msgid="6198182315536726162">"Experimental"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Pretende ativar o Bluetooth?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Mostrar no ecrã e emitir som"</string> <string name="notification_more_settings" msgid="816306283396553571">"Mais definições"</string> <string name="notification_done" msgid="5279426047273930175">"Concluído"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Cores normais"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Cores noturnas"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Cores personalizadas"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automáticas"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Cores desconhecidas"</string> - <string name="color_transform" msgid="6985460408079086090">"Modificação de cor"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Mostrar o mosaico de Definições rápidas"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Ativar transformação personalizada"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Cor e aspeto"</string> + <string name="night_mode" msgid="3540405868248625488">"Modo noturno"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Calibrar ecrã"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Ativado"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Desativado"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Ligar automaticamente"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Alternar para o Modo noturno consoante a localização e a hora do dia"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Quando o Modo noturno está ativado"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Utilizar o tema escuro para o SO Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Ajustar tonalidade"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Ajustar brilho"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"O tema escuro é aplicado a áreas essenciais do SO Android que são normalmente apresentadas num tema claro, como as Definições e as notificações."</string> <string name="color_apply" msgid="9212602012641034283">"Aplicar"</string> <string name="color_revert_title" msgid="4746666545480534663">"Confirmar as definições"</string> <string name="color_revert_message" msgid="9116001069397996691">"Algumas definições de cor podem tornar este dispositivo instável. Clique em OK para confirmar estas definições de cor. Caso contrário, estas definições serão repostas após 10 segundos."</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Página inicial"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recentes"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Anterior"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Mostrar Não incomodar no volume"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Permitir o controlo total de Não incomodar na caixa de diálogo do volume."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume e Não incomodar"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Ativar Não incomodar ao diminuir o volume"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Mostrar com controlos de volume"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Não incomodar"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Atalho dos botões de volume"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Desativar Não incomodar ao aumentar o volume"</string> <string name="battery" msgid="7498329822413202973">"Bateria"</string> <string name="clock" msgid="7416090374234785905">"Relógio"</string> <string name="headset" msgid="4534219457597457353">"Ausc. com microfone integrado"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Auscultadores ligados"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Auscultadores com microfone integrado ligados"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Ativar ou desativar a apresentação de ícones na barra de estado."</string> <string name="data_saver" msgid="5037565123367048522">"Poupança de dados"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Poupança de dados ativada"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Poupança de dados desativada"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Ativado"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Desativado"</string> <string name="nav_bar" msgid="1993221402773877607">"Barra de navegação"</string> <string name="start" msgid="6873794757232879664">"Início"</string> <string name="center" msgid="4327473927066010960">"Centro"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Pré-visualizar"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arraste para adicionar mosaicos"</string> <string name="qs_edit" msgid="2232596095725105230">"Editar"</string> + <string name="tuner_time" msgid="6572217313285536011">"Hora"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Mostrar horas, minutos e segundos"</item> + <item msgid="1427801730816895300">"Mostrar horas e minutos (predefinição)"</item> + <item msgid="3830170141562534721">"Não mostrar este ícone"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Mostrar sempre a percentagem"</item> + <item msgid="2139628951880142927">"Mostrar a percentagem durante o carregamento (predefinição)"</item> + <item msgid="3327323682209964956">"Não mostrar este ícone"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 5219454b22a4..efcd7dcc051c 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -334,8 +334,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Silêncio\ntotal"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Somente\nprioridade"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Somente\nalarmes"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Tudo"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Todas\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Carregando (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> até concluir)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Carregando rapidamente (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para conclusão)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Carregando lentamente (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> para conclusão)"</string> @@ -448,7 +446,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Mostrar segundos do relógio na barra de status. Pode afetar a duração da bateria."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Reorganizar \"Configurações rápidas\""</string> <string name="show_brightness" msgid="6613930842805942519">"Mostrar brilho nas \"Configurações rápidas\""</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Ativar acelerador para dividir a tela ao deslizar para cima"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Ativar gesto para dividir a tela ao deslizar para cima"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Ativa o gesto para entrar no modo de tela dividida deslizando a partir do botão \"Visão geral\""</string> <string name="experimental" msgid="6198182315536726162">"Experimentais"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Ativar o Bluetooth?"</string> @@ -468,19 +466,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Mostrar parcialmente na tela e emitir som"</string> <string name="notification_more_settings" msgid="816306283396553571">"Mais configurações"</string> <string name="notification_done" msgid="5279426047273930175">"Concluído"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Cores normais"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Cores noturnas"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Cores personalizadas"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automáticas"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Cores desconhecidas"</string> - <string name="color_transform" msgid="6985460408079086090">"Modificação de cor"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Mostrar bloco de configurações rápidas"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Ativar transformação personalizada"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Cor e aparência"</string> + <string name="night_mode" msgid="3540405868248625488">"Modo noturno"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Calibrar tela"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Ativado"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Desativado"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Ativar automaticamente"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Alternar para o modo noturno conforme apropriado para o local e hora do dia"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Quando o modo noturno está ativado"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Usar o tema escuro para o SO Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Ajustar tonalidade"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Ajustar brilho"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"O tema escuro é aplicado a áreas centrais do sistema operacional Android que normalmente são exibidas em um tema claro, como configurações e notificações."</string> <string name="color_apply" msgid="9212602012641034283">"Aplicar"</string> <string name="color_revert_title" msgid="4746666545480534663">"Confirmar configurações"</string> <string name="color_revert_message" msgid="9116001069397996691">"Algumas configurações de cor podem tornar o dispositivo inutilizável. Clique em \"OK\" para confirmar essas configurações de cor; caso contrário, essas configurações serão redefinidas após 10 segundos."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Uso da bateria"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"A Economia de bateria não fica disponível durante o carregamento"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Economia de bateria"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduz o desempenho e os dados em segundo plano"</string> @@ -488,21 +489,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Início"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recentes"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Voltar"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Mostrar \"Não perturbe\" nas opções de volume"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Permitir controle total do recurso \"Não perturbe\" na caixa de diálogo de volume."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume e \"Não perturbe\""</string> - <string name="volume_down_silent" msgid="66962568467719591">"Entre no modo \"Não perturbe\" abaixando o volume"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Mostrar com controles de volume"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Não perturbe"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Atalho de botões de volume"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Saia do modo \"Não perturbe\" aumentando o volume"</string> <string name="battery" msgid="7498329822413202973">"Bateria"</string> <string name="clock" msgid="7416090374234785905">"Relógio"</string> <string name="headset" msgid="4534219457597457353">"Fone de ouvido"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Fones de ouvido conectados"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Fone de ouvido conectado"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Ativar ou desativar a exibição de ícones na barra de status."</string> <string name="data_saver" msgid="5037565123367048522">"Economia de dados"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Economia de dados ativada"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"A Economia de dados está desativada"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Ativado"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Desativado"</string> <string name="nav_bar" msgid="1993221402773877607">"Barra de navegação"</string> <string name="start" msgid="6873794757232879664">"Iniciar"</string> <string name="center" msgid="4327473927066010960">"Centralizar"</string> @@ -525,4 +525,15 @@ <string name="preview" msgid="9077832302472282938">"Visualização"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arraste para adicionar blocos"</string> <string name="qs_edit" msgid="2232596095725105230">"Editar"</string> + <string name="tuner_time" msgid="6572217313285536011">"Horas"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Mostrar horas, minutos e segundos"</item> + <item msgid="1427801730816895300">"Mostrar horas e minutos (padrão)"</item> + <item msgid="3830170141562534721">"Não mostrar este ícone"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Sempre mostrar porcentagem"</item> + <item msgid="2139628951880142927">"Mostrar porcentagem durante o carregamento (padrão)"</item> + <item msgid="3327323682209964956">"Não mostrar este ícone"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 1af5b42cceed..47cf729368a7 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -21,10 +21,10 @@ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="app_label" msgid="7164937344850004466">"UI sistem"</string> <string name="status_bar_clear_all_button" msgid="7774721344716731603">"Ștergeți"</string> - <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Eliminaţi din listă"</string> + <string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Eliminați din listă"</string> <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Informații despre aplicație"</string> <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Ecranele dvs. recente apar aici"</string> - <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Renunţaţi la aplicațiile recente"</string> + <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Renunțați la aplicațiile recente"</string> <plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759"> <item quantity="few">%d ecrane în Recente</item> <item quantity="other">%d de ecrane în Recente</item> @@ -36,7 +36,7 @@ <string name="battery_low_title" msgid="6456385927409742437">"Bateria este aproape descărcată"</string> <string name="battery_low_percent_format" msgid="2900940511201380775">"Procent rămas din baterie: <xliff:g id="PERCENTAGE">%s</xliff:g>"</string> <string name="battery_low_percent_format_saver_started" msgid="6859235584035338833">"Procent rămas din baterie: <xliff:g id="PERCENTAGE">%s</xliff:g>. Economisirea bateriei este activată."</string> - <string name="invalid_charger" msgid="4549105996740522523">"Încărcarea USB nu este acceptată. \nUtilizaţi numai încărcătorul furnizat."</string> + <string name="invalid_charger" msgid="4549105996740522523">"Încărcarea USB nu este acceptată. \nUtilizați numai încărcătorul furnizat."</string> <string name="invalid_charger_title" msgid="3515740382572798460">"Încărcarea prin USB nu este acceptată."</string> <string name="invalid_charger_text" msgid="5474997287953892710">"Utilizați numai încărcătorul furnizat."</string> <string name="battery_low_why" msgid="4553600287639198111">"Setări"</string> @@ -50,16 +50,16 @@ <string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTOM."</string> <string name="status_bar_settings_notifications" msgid="397146176280905137">"Notificări"</string> <string name="bluetooth_tethered" msgid="7094101612161133267">"Conectat prin tethering prin Bluetooth"</string> - <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Setaţi metode introducere text"</string> + <string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Setați metode introducere text"</string> <string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Tastatură fizică"</string> <string name="usb_device_permission_prompt" msgid="834698001271562057">"Permiteți aplicației <xliff:g id="APPLICATION">%1$s</xliff:g> să acceseze dispozitivul USB?"</string> <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Permiteți aplicației <xliff:g id="APPLICATION">%1$s</xliff:g> să acceseze accesoriul USB?"</string> - <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Deschideţi <xliff:g id="ACTIVITY">%1$s</xliff:g> la conectarea acestui dispozitiv USB?"</string> - <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Deschideţi <xliff:g id="ACTIVITY">%1$s</xliff:g> la conectarea acestui accesoriu USB?"</string> - <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Aplic. instal. nu funcţ. cu acest acces. USB. Aflați despre acest accesoriu la <xliff:g id="URL">%1$s</xliff:g>"</string> + <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Deschideți <xliff:g id="ACTIVITY">%1$s</xliff:g> la conectarea acestui dispozitiv USB?"</string> + <string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Deschideți <xliff:g id="ACTIVITY">%1$s</xliff:g> la conectarea acestui accesoriu USB?"</string> + <string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Aplic. instal. nu funcț. cu acest acces. USB. Aflați despre acest accesoriu la <xliff:g id="URL">%1$s</xliff:g>"</string> <string name="title_usb_accessory" msgid="4966265263465181372">"Accesoriu USB"</string> <string name="label_view" msgid="6304565553218192990">"Afișați"</string> - <string name="always_use_device" msgid="1450287437017315906">"Utilizaţi în mod prestabilit pt. acest dispoz. USB"</string> + <string name="always_use_device" msgid="1450287437017315906">"Utilizați în mod prestabilit pt. acest dispoz. USB"</string> <string name="always_use_accessory" msgid="1210954576979621596">"Utiliz. în mod prestabilit pt. acest accesoriu USB"</string> <string name="usb_debugging_title" msgid="4513918393387141949">"Permiteți depanarea USB?"</string> <string name="usb_debugging_message" msgid="2220143855912376496">"Amprenta digitală din cheia RSA a computerului este:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string> @@ -75,9 +75,9 @@ <string name="screenshot_saved_text" msgid="1152839647677558815">"Atingeți pentru a vedea captura de ecran."</string> <string name="screenshot_failed_title" msgid="705781116746922771">"Captura de ecran nu a putut fi realizată."</string> <string name="screenshot_failed_text" msgid="1260203058661337274">"Captură de ecran impos. de realizat: spațiu de stoc. limitat sau nu este permisă de apl. sau de organiz."</string> - <string name="usb_preference_title" msgid="6551050377388882787">"Opţiuni pentru transferul de fișiere prin USB"</string> - <string name="use_mtp_button_title" msgid="4333504413563023626">"Montaţi ca player media (MTP)"</string> - <string name="use_ptp_button_title" msgid="7517127540301625751">"Montaţi drept cameră foto (PTP)"</string> + <string name="usb_preference_title" msgid="6551050377388882787">"Opțiuni pentru transferul de fișiere prin USB"</string> + <string name="use_mtp_button_title" msgid="4333504413563023626">"Montați ca player media (MTP)"</string> + <string name="use_ptp_button_title" msgid="7517127540301625751">"Montați drept cameră foto (PTP)"</string> <string name="installer_cd_button_title" msgid="2312667578562201583">"Instal. aplic. Transfer de fișiere Android pt. Mac"</string> <string name="accessibility_back" msgid="567011538994429120">"Înapoi"</string> <string name="accessibility_home" msgid="8217216074895377641">"Ecranul de pornire"</string> @@ -97,7 +97,7 @@ <string name="recents_caption_resize" msgid="3517056471774958200">"Selectați noul aspect pentru activitate"</string> <string name="cancel" msgid="6442560571259935130">"Anulați"</string> <string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Buton zoom pentru compatibilitate."</string> - <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Faceţi zoom de la o imagine mai mică la una mai mare."</string> + <string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Faceți zoom de la o imagine mai mică la una mai mare."</string> <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Conectat prin Bluetooth."</string> <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Deconectat de la Bluetooth."</string> <string name="accessibility_no_battery" msgid="358343022352820946">"Nu există baterie."</string> @@ -157,7 +157,7 @@ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Notificări."</string> <string name="accessibility_remove_notification" msgid="3603099514902182350">"Ștergeți notificarea."</string> <string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS activat."</string> - <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Se obţine GPS."</string> + <string name="accessibility_gps_acquiring" msgid="8959333351058967158">"Se obține GPS."</string> <string name="accessibility_tty_enabled" msgid="4613200365379426561">"TeleTypewriter activat."</string> <string name="accessibility_ringer_vibrate" msgid="666585363364155055">"Vibrare sonerie."</string> <string name="accessibility_ringer_silent" msgid="9061243307939135383">"Sonerie silențioasă."</string> @@ -302,8 +302,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fixare pe ecran"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"căutare"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> nu a putut porni."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Aplicația <xliff:g id="APP">%s</xliff:g> este dezactivată în modul sigur."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Istoric"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Ștergeți"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Divizare pe orizontală"</string> @@ -315,8 +314,8 @@ <string name="expanded_header_battery_not_charging" msgid="4798147152367049732">"Nu se încarcă"</string> <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"Rețeaua poate\nfi monitorizată"</string> <string name="description_target_search" msgid="3091587249776033139">"Căutați"</string> - <string name="description_direction_up" msgid="7169032478259485180">"Glisaţi în sus pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> - <string name="description_direction_left" msgid="7207478719805562165">"Glisaţi spre stânga pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_up" msgid="7169032478259485180">"Glisați în sus pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> + <string name="description_direction_left" msgid="7207478719805562165">"Glisați spre stânga pentru <xliff:g id="TARGET_DESCRIPTION">%s</xliff:g>."</string> <string name="zen_priority_introduction" msgid="3070506961866919502">"Nu veți fi deranjat(ă) de sunete și vibrații, exceptând alarmele, mementourile, evenimentele și apelanții pe care îi menționați."</string> <string name="zen_priority_customize_button" msgid="7948043278226955063">"Personalizați"</string> <string name="zen_silence_introduction_voice" msgid="2284540992298200729">"Această opțiune blochează TOATE sunetele și vibrațiile, inclusiv cele ale alarmelor, muzicii, videoclipurilor și jocurilor. Totuși, veți putea iniția apeluri."</string> @@ -335,8 +334,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Niciun\nsunet"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Numai\ncu prioritate"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Numai\nalarme"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Toate"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Toate\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Se încarcă (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> până la finalizare)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Se încarcă rapid (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> până la finalizare)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Se încarcă lent (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> până la finalizare)"</string> @@ -449,7 +446,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Afișează secundele pe ceas în bara de stare. Poate afecta autonomia bateriei."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Rearanjați Setările rapide"</string> <string name="show_brightness" msgid="6613930842805942519">"Afișați luminozitatea în Setările rapide"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Activați acceleratorul pentru accesarea ecranului împărțit prin glisarea în sus"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Activați gestul de accesare a ecranului împărțit prin glisare în sus"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Activați gestul de accesare a ecranului împărțit prin glisarea în sus de la butonul Recente"</string> <string name="experimental" msgid="6198182315536726162">"Experimentale"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Activați Bluetooth?"</string> @@ -469,19 +466,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Se afișează pentru o scurtă durată pe ecran și se emite un sunet"</string> <string name="notification_more_settings" msgid="816306283396553571">"Mai multe setări"</string> <string name="notification_done" msgid="5279426047273930175">"Terminat"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Culori normale"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Culori de noapte"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Culori personalizate"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automat"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Culori necunoscute"</string> - <string name="color_transform" msgid="6985460408079086090">"Modificarea culorilor"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Afișați caseta cu Setările rapide"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Activați transformarea personalizată"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Culoare și aspect"</string> + <string name="night_mode" msgid="3540405868248625488">"Modul Noapte"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Calibrați afișarea"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Activat"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Dezactivat"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Activați automat"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Comutați la modul Noapte în funcție de locație și de momentul zilei"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Când modul Noapte este activat"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Folosiți tema întunecată pentru SO Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Ajustați culoarea"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Ajustați luminozitatea"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Tema întunecată se aplică zonelor principale ale sistemului de operare Android care sunt de obicei afișate cu o temă deschisă la culoare, cum ar fi Setările și notificările."</string> <string name="color_apply" msgid="9212602012641034283">"Aplicați"</string> <string name="color_revert_title" msgid="4746666545480534663">"Confirmați setările"</string> <string name="color_revert_message" msgid="9116001069397996691">"Unele setări pentru culori pot face dispozitivul să nu mai funcționeze. Dați clic pe OK pentru a confirma aceste setări pentru culori. În caz contrar, acestea se vor reseta după 10 secunde."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Utilizarea bateriei"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Economisirea bateriei nu este disponibilă pe durata încărcării"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Economisirea bateriei"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Reduce performanța și datele de fundal"</string> @@ -489,21 +489,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Ecran de pornire"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Recente"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Înapoi"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Afișați opțiunile pentru Nu deranjați în dialogul de volum"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Permiteți controlul complet al modului Nu deranjați din dialogul pentru volum."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volumul și Nu deranjați"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Accesați Nu deranjați la reducerea volumului"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Afișează cu comenzile de volum"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Nu deranja"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Comandă rapidă din butoanele de volum"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Ieșiți din Nu deranjați la creșterea volumului"</string> <string name="battery" msgid="7498329822413202973">"Baterie"</string> <string name="clock" msgid="7416090374234785905">"Ceas"</string> <string name="headset" msgid="4534219457597457353">"Set căști-microfon"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Căștile sunt conectate"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Setul căști-microfon este conectat"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Activați sau dezactivați afișarea pictogramelor în bara de stare."</string> <string name="data_saver" msgid="5037565123367048522">"Economizor de date"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Economizorul de date este activat"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Economizorul de date este dezactivat"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Activați"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Dezactivați"</string> <string name="nav_bar" msgid="1993221402773877607">"Bară de navigare"</string> <string name="start" msgid="6873794757232879664">"La început"</string> <string name="center" msgid="4327473927066010960">"În centru"</string> @@ -513,7 +512,7 @@ <string name="select_button" msgid="1597989540662710653">"Selectați butonul de adăugat"</string> <string name="add_button" msgid="4134946063432258161">"Adăugați un buton"</string> <string name="save" msgid="2311877285724540644">"Salvați"</string> - <string name="reset" msgid="2448168080964209908">"Resetaţi"</string> + <string name="reset" msgid="2448168080964209908">"Resetați"</string> <string name="no_home_title" msgid="1563808595146071549">"Nu s-a găsit niciun buton Ecran de pornire"</string> <string name="no_home_message" msgid="5408485011659260911">"Pentru a naviga pe acest dispozitiv este necesar un buton Ecran de pornire. Adăugați un buton Ecran de pornire înainte să salvați."</string> <string name="adjust_button_width" msgid="6138616087197632947">"Ajustați lățimea butonului"</string> @@ -526,4 +525,15 @@ <string name="preview" msgid="9077832302472282938">"Previzualizare"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Trageți pentru a adăuga sectoare"</string> <string name="qs_edit" msgid="2232596095725105230">"Editați"</string> + <string name="tuner_time" msgid="6572217313285536011">"Oră"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Afișează orele, minutele și secundele"</item> + <item msgid="1427801730816895300">"Afișează orele și minutele (prestabilit)"</item> + <item msgid="3830170141562534721">"Nu afișa această pictogramă"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Afișează întotdeauna procentajul"</item> + <item msgid="2139628951880142927">"Afișează procentajul când se încarcă (prestabilit)"</item> + <item msgid="3327323682209964956">"Nu afișa această pictogramă"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index ba1373f961b0..425d52715bb1 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -303,8 +303,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"Заблокировать в приложении"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"поиск"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Не удалось запустить приложение \"<xliff:g id="APP">%s</xliff:g>\""</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Приложение \"<xliff:g id="APP">%s</xliff:g>\" отключено в безопасном режиме."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Журнал"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Очистить"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Разделить по горизонтали"</string> @@ -336,8 +335,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Полная\nтишина"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Только\nважные"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Только\nбудильник"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Все"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Все\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Зарядка батареи (осталось <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Быстрая зарядка (осталось <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Медленная зарядка (осталось <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -450,7 +447,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Показывать в строке состояния время с точностью до секунды (заряд батареи может расходоваться быстрее)."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Изменить порядок Быстрых настроек"</string> <string name="show_brightness" msgid="6613930842805942519">"Добавить яркость в Быстрые настройки"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Разделять экран пролистыванием вверх"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Разделять экран пролистыванием вверх"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Включить разделение экрана пролистыванием вверх с кнопки \"Обзор\""</string> <string name="experimental" msgid="6198182315536726162">"Экспериментальная функция"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Подключение по Bluetooth"</string> @@ -470,19 +467,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Показывать со звуком поверх всех окон."</string> <string name="notification_more_settings" msgid="816306283396553571">"Другие настройки"</string> <string name="notification_done" msgid="5279426047273930175">"Готово"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Обычные цвета"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Ночные цвета"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Собственные цвета"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Авто"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Неизвестные цвета"</string> - <string name="color_transform" msgid="6985460408079086090">"Цветовые настройки"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Показывать панель быстрых настроек"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Включить собственные настройки"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Цвета и стиль"</string> + <string name="night_mode" msgid="3540405868248625488">"Ночной режим"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Настройка дисплея"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Включен"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Отключен"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Включать автоматически"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Включать ночной режим в определенное время суток и в определенном месте"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"В ночном режиме"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Использовать темное оформление для Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Выбрать оттенок"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Яркость"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Темное оформление применяется к основным областям экрана Android (такие как настройки и уведомления), которые обычно показываются в светлом."</string> <string name="color_apply" msgid="9212602012641034283">"Применить"</string> <string name="color_revert_title" msgid="4746666545480534663">"Подтвердите настройки"</string> <string name="color_revert_message" msgid="9116001069397996691">"Некоторые цветовые настройки могут затруднить работу с устройством. Чтобы применить выбранные параметры, нажмите \"ОК\". В противном случае они будут сброшены через 10 секунд."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Уровень заряда"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Режим энергосбережения нельзя включить во время зарядки"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Режим энергосбережения"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Ограничивает производительность и фоновую передачу данных"</string> @@ -490,21 +490,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Главный экран"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Недавние"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Назад"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Показать панель \"Не беспокоить\" в окне регулировки звука"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Позволяет управлять режимом \"Не беспокоить\" в окне регулировки громкости."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Регулировка громкости и режим \"Не беспокоить\""</string> - <string name="volume_down_silent" msgid="66962568467719591">"Включать режим \"Не беспокоить\" при уменьшении громкости"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Показывать панель с кнопками регулировки громкости"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Не беспокоить"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Кнопки регулировки громкости"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Отключать режим \"Не беспокоить\" при увеличении громкости"</string> <string name="battery" msgid="7498329822413202973">"Батарея"</string> <string name="clock" msgid="7416090374234785905">"Часы"</string> <string name="headset" msgid="4534219457597457353">"Гарнитура"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Наушники подключены"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Гарнитура подключена"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Включение и отключение показа значков в строке состояния"</string> <string name="data_saver" msgid="5037565123367048522">"Экономия трафика"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Режим экономии трафика включен"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Режим экономии трафика отключен"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Включено"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Отключено"</string> <string name="nav_bar" msgid="1993221402773877607">"Панель навигации"</string> <string name="start" msgid="6873794757232879664">"Вверху"</string> <string name="center" msgid="4327473927066010960">"В центре"</string> @@ -527,4 +526,15 @@ <string name="preview" msgid="9077832302472282938">"Просмотр"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Перетащите нужные элементы"</string> <string name="qs_edit" msgid="2232596095725105230">"Изменить"</string> + <string name="tuner_time" msgid="6572217313285536011">"Время"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Часы, минуты и секунды"</item> + <item msgid="1427801730816895300">"Часы и минуты (по умолчанию)"</item> + <item msgid="3830170141562534721">"Не показывать этот значок"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Всегда показывать процент заряда"</item> + <item msgid="2139628951880142927">"Показывать процент во время зарядки (по умолчанию)"</item> + <item msgid="3327323682209964956">"Не показывать этот значок"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-si-rLK/strings.xml b/packages/SystemUI/res/values-si-rLK/strings.xml index b15137e3427a..bac8ef4883f7 100644 --- a/packages/SystemUI/res/values-si-rLK/strings.xml +++ b/packages/SystemUI/res/values-si-rLK/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"තිර ඇමිණීම"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"සෙවීම"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> ආරම්භ කළ නොහැක."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> ආරක්ෂිත ප්රකාරය තුළ අබලයි."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"ඉතිහාසය"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"හිස් කරන්න"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"තිරස්ව වෙන් කරන්න"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"සම්පූර්ණ\nනිහඬතාව"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"ප්රමුඛතා\nපමණි"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"ඇඟවීම්\nපමණි"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"සියලු"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"සියලු\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"ආරෝපණය වෙමින් (සම්පුර්ණ වන තෙක් <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"ඉක්මනින් ආරෝපණය වෙමින් (සම්පුර්ණ වන තෙක් <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"සෙමින් ආරෝපණය වෙමින් (සම්පුර්ණ වන තෙක් <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"තත්ත්ව තීරුවෙහි ඔරලෝසු තත්පර පෙන්වන්න. බැටරි ආයු කාලයට බලපෑමට හැකිය."</string> <string name="qs_rearrange" msgid="8060918697551068765">"ඉක්මන් සැකසීම් යළි පිළිවෙළට සකසන්න"</string> <string name="show_brightness" msgid="6613930842805942519">"ඉක්මන් සැකසීම්වල දීප්තිය පෙන්වන්න"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"බෙදුම්-තිර ඉහළට-ස්වයිප් කිරීමේ ත්වරකය සබල කරන්න"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"බෙදුම්-තිරය ඉහළට-ස්වයිප් කිරීමේ අභිනය සබල කරන්න"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"දළ විශ්ලේෂණ බොත්තම හරහා ඉහළට ස්වයිප් කිරීමෙන් බෙදුම් තිරයට ඇතුළු වීමට ඉඟිය සබල කිරීම"</string> <string name="experimental" msgid="6198182315536726162">"පරීක්ෂණාත්මක"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"බ්ලූටූත් ක්රියාත්මක කරන්නද?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"තිරයට පැමිණ ශබ්ද කරන්න"</string> <string name="notification_more_settings" msgid="816306283396553571">"තව සැකසීම්"</string> <string name="notification_done" msgid="5279426047273930175">"නිමයි"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"සාමාන්ය වර්ණ"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"රාත්රී වර්ණ"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"අභිරුචි වර්ණ"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"ස්වයංක්රිය"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"නොදන්නා වර්ණ"</string> - <string name="color_transform" msgid="6985460408079086090">"වර්ණ වෙනස් කිරීම"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"ඉක්මන් සැකසීම් ටයිලය පෙන්වන්න"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"අභිරුචි පරිවර්තනය සබල කරන්න"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"වර්ණය සහ පෙනුම"</string> + <string name="night_mode" msgid="3540405868248625488">"රාත්රී ප්රකාරය"</string> + <string name="calibrate_display" msgid="5974642573432039217">"සංදර්ශකය ක්රමාංකනය කරන්න"</string> + <string name="night_mode_on" msgid="5597545513026541108">"ක්රියාත්මකයි"</string> + <string name="night_mode_off" msgid="8035605276956057508">"ක්රියාවිරහිතයි"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"ස්වයංක්රියව ක්රියාත්මක කරන්න"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"ස්ථානය සහ දවසේ වේලාවට ගැළපෙන ලෙස රාත්රී ප්රකාරයට මාරු වන්න"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"රාත්රී ප්රකාරය ක්රියාත්මක විට"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS සඳහා අඳුරු තේමාව භාවිත කරන්න"</string> + <string name="adjust_tint" msgid="3398569573231409878">"පැහැය සීරුමාරු කරන්න"</string> + <string name="adjust_brightness" msgid="980039329808178246">"දීප්තිය සීරුමාරු කරන්න"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"සැකසීම් සහ දැනුම්දීම් වැනි, සාමාන්යයෙන් ලා පැහැ තේමාවක සංදර්ශනය වන Android OS හි මූලික ප්රදේශවලට අඳුරු තේමාව යෙදේ."</string> <string name="color_apply" msgid="9212602012641034283">"යොදන්න"</string> <string name="color_revert_title" msgid="4746666545480534663">"සැකසීම් තහවුරු කරන්න"</string> <string name="color_revert_message" msgid="9116001069397996691">"සමහර වර්ණ සැකසීම් මෙම උපාංගය භාවිත කළ නොහැකි තත්ත්වයට පත් කළ හැකිය. මෙම වර්ණ සැකසීම් තහවුරු කිරීමට හරි ක්ලික් කරන්න, නැතහොත් මෙම සැකසීම් තත්පර 10කට පසුව යළි සකසනු ඇත."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"බැටරි භාවිතය"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"ආරෝපණය අතරතුර බැටරි සුරැකුම ලබා ගත නොහැකිය."</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"බැටරි සුරැකුම"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"ක්රියාකාරිත්වය සහ පසුබිම් දත්ත අඩු කරන්න"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"මුල් පිටුව"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"මෑත"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"ආපසු"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"හඩ පරිමාව තුළ බාධා නොකරන්න පුවරුව පෙන්වන්න"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"හඬ පරිමා සංවාදය තුළ බාධා නොකරන්න පුවරුවට පූර්ණ පාලනය ඉඩ දෙන්න."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"හඬ පරිමාව සහ බාධා නොකරන්න"</string> - <string name="volume_down_silent" msgid="66962568467719591">"හඬ පරිමාව අඩු කරන්න මත බාධා නොකරන්න වෙත ඇතුළු වන්න"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"හඩ පරිමා පාලන සහිතව පෙන්වන්න"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"බාධා නොකරන්න"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"හඩ පරිමා බොත්තම් කෙටිමග"</string> <string name="volume_up_silent" msgid="7141255269783588286">"හඬ පරිමාව වැඩි කරන්න මත බාධා නොකරන්න වෙතින් ඉවත් වන්න"</string> <string name="battery" msgid="7498329822413202973">"බැටරිය"</string> <string name="clock" msgid="7416090374234785905">"ඔරලෝසුව"</string> <string name="headset" msgid="4534219457597457353">"හෙඩ්සෙට්"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"හෙඩ්ෆෝන් සම්බන්ධ කළ"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"හෙඩ්සෙට් සම්බන්ධ කළ"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"තත්ත්ව තීරුව මත අයිකන පෙන්වීම සබල හෝ අබල කරන්න."</string> <string name="data_saver" msgid="5037565123367048522">"දත්ත සුරැකුම"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"දත්ත සුරැකුම ක්රියාත්මකයි"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"දත්ත සුරැකුම ක්රියාවිරහිතයි"</string> <string name="switch_bar_on" msgid="1142437840752794229">"ක්රියාත්මකයි"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"ක්රියාවිරහිතයි"</string> <string name="nav_bar" msgid="1993221402773877607">"සංචලන තීරුව"</string> <string name="start" msgid="6873794757232879664">"ආරම්භ කරන්න"</string> <string name="center" msgid="4327473927066010960">"මධ්ය"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"පෙරදසුන"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"ටයිල් එක් කිරීමට අදින්න"</string> <string name="qs_edit" msgid="2232596095725105230">"සංස්කරණය කරන්න"</string> + <string name="tuner_time" msgid="6572217313285536011">"වේලාව"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"පැය, මිනිත්තු, සහ තත්පර පෙන්වන්න"</item> + <item msgid="1427801730816895300">"පැය සහ මිනිත්තු පෙන්වන්න (පෙරනිමි)"</item> + <item msgid="3830170141562534721">"මෙම නිරූපකය නොපෙන්වන්න"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"සෑම විටම ප්රතිශතය පෙන්වන්න"</item> + <item msgid="2139628951880142927">"ආරෝපණය වන විට ප්රතිශතය පෙන්වන්න (පෙරනිමි)"</item> + <item msgid="3327323682209964956">"මෙම නිරූපකය නොපෙන්වන්න"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 199bd906b26e..893003814d27 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -303,8 +303,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"pripnutie k obrazovke"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"hľadať"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Aplikáciu <xliff:g id="APP">%s</xliff:g> sa nepodarilo spustiť"</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Aplikácia <xliff:g id="APP">%s</xliff:g> je v núdzovom režime zakázaná."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"História"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Vymazať"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Rozdeliť vodorovné"</string> @@ -336,8 +335,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Úplné\nticho"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Iba\nprioritné"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Iba\nbudíky"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Všetky"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Všetky\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Nabíja sa (úplné nabitie o <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Nabíja sa rýchlo (úplné nabitie o <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Nabíja sa pomaly (úplné nabitie o <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -450,7 +447,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Zobrazí sekundy v stavovom riadku. Môže to ovplyvňovať výdrž batérie."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Zmeniť usporiadanie Rýchlych nastavení"</string> <string name="show_brightness" msgid="6613930842805942519">"Zobraziť jas v Rýchlych nastaveniach"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Aktivovať rozdelenú obrazovku prejdením prstom"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Aktivovať rozdelenú obrazovku prejdením prstom"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Umožňuje aktivovať rozdelenú obrazovku prejdením prstom nahor od tlačidla Prehľad"</string> <string name="experimental" msgid="6198182315536726162">"Experimentálne"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Zapnúť Bluetooth?"</string> @@ -470,19 +467,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Zobrazovať cez obrazovku so zvukovým signálom"</string> <string name="notification_more_settings" msgid="816306283396553571">"Ďalšie nastavenia"</string> <string name="notification_done" msgid="5279426047273930175">"Hotovo"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Normálne farby"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Nočné farby"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Vlastné farby"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automatické"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Neznáme farby"</string> - <string name="color_transform" msgid="6985460408079086090">"Úprava farieb"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Zobraziť dlaždicu Rýchle nastavenia"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Povoliť vlastnú transformáciu"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Farba a vzhľad"</string> + <string name="night_mode" msgid="3540405868248625488">"Nočný režim"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Kalibrovať obrazovku"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Zapnutý"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Vypnutý"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Zapínať automaticky"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Prepnúť do Nočného režimu podľa miesta a času dňa"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Keď je zapnutý Nočný režim"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Použiť tmavý motív pre systém Android OS"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Upraviť tónovanie"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Upraviť jas"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"V hlavných oblastiach systému Android OS (ako sú Nastavenia a upozornenia), ktoré sú obyčajne zobrazené v svetlom motíve, je použitý tmavý motív."</string> <string name="color_apply" msgid="9212602012641034283">"Použiť"</string> <string name="color_revert_title" msgid="4746666545480534663">"Potvrdenie nastavení"</string> <string name="color_revert_message" msgid="9116001069397996691">"Niektoré nastavenia farieb môžu toto zariadenie znefunkčniť. Tieto nastavenia farieb potvrdíte kliknutím na tlačidlo OK, ináč sa tieto nastavenia o 10 sekúnd obnovia."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Využitie batérie"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Počas nabíjania nie je Šetrič batérie k dispozícii"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Šetrič batérie"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Obmedzí výkonnosť a údaje na pozadí"</string> @@ -490,21 +490,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Domovská stránka"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Nedávne"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Späť"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Zobrazovať panel Nerušiť v dialógu Hlasitosť"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Umožňuje povoliť úplné ovládanie režimu nerušiť v dialógu Hlasitosť."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Hlasitosť a režim Nerušiť"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Pri znížení hlasitosti prejsť do režimu Nerušiť"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Zobrazovať s ovládacími prvkami hlasitosti"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Nerušiť"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Skratka tlačidiel hlasitosti"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Pri zvýšení hlasitosti ukončiť režim Nerušiť"</string> <string name="battery" msgid="7498329822413202973">"Batéria"</string> <string name="clock" msgid="7416090374234785905">"Hodiny"</string> <string name="headset" msgid="4534219457597457353">"Náhlavná súprava"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Slúchadlá pripojené"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Náhlavná súprava pripojená"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Umožňuje aktivovať alebo deaktivovať zobrazenie ikon v stavovom riadku."</string> <string name="data_saver" msgid="5037565123367048522">"Šetrič dát"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Šetrič dát je zapnutý"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Šetrič dát je vypnutý"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Zapnuté"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Vypnuté"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigačný panel"</string> <string name="start" msgid="6873794757232879664">"Začiatok"</string> <string name="center" msgid="4327473927066010960">"Stred"</string> @@ -527,4 +526,15 @@ <string name="preview" msgid="9077832302472282938">"Ukážka"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Dlaždice pridáte presunutím"</string> <string name="qs_edit" msgid="2232596095725105230">"Upraviť"</string> + <string name="tuner_time" msgid="6572217313285536011">"Čas"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Zobrazovať hodiny, minúty a sekundy"</item> + <item msgid="1427801730816895300">"Zobrazovať hodiny a minúty (predvolené)"</item> + <item msgid="3830170141562534721">"Nezobrazovať túto ikonu"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Vždy zobrazovať percentá"</item> + <item msgid="2139628951880142927">"Zobrazovať percentá počas nabíjania (predvolené)"</item> + <item msgid="3327323682209964956">"Nezobrazovať túto ikonu"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index 9ebb19dc4cb7..089cd4f92115 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -335,8 +335,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Popolna\ntišina"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Samo\nprednostno"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Samo\nalarmi"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Vse"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Vse\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Polnjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napolnjenosti)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Hitro polnjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napolnjenosti)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Počasno polnjenje (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> do napolnjenosti)"</string> @@ -449,7 +447,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Prikaže sekunde pri uri v vrstici stanja. To lahko vpliva na čas delovanja pri akumulatorskem napajanju."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Preuredi hitre nastavitve"</string> <string name="show_brightness" msgid="6613930842805942519">"Prikaz svetlosti v hitrih nastavitvah"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Omogočanje vklopa razdeljenega zaslona z vlečenjem navzgor"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Omogočanje poteze za razdeljen zaslon z vlečenjem navzgor"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Omogočanje poteze za vklop razdeljenega zaslona, tako da uporabnik od gumba za pregled povleče s prstom navzgor"</string> <string name="experimental" msgid="6198182315536726162">"Poskusno"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Želite vklopiti Bluetooth?"</string> @@ -469,14 +467,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Za hip pokaži predogled na zaslonu in predvajaj zvok"</string> <string name="notification_more_settings" msgid="816306283396553571">"Več nastavitev"</string> <string name="notification_done" msgid="5279426047273930175">"Dokončano"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Običajne barve"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Nočne barve"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Barve po meri"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Samodejno"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Neznane barve"</string> - <string name="color_transform" msgid="6985460408079086090">"Spreminjanje barv"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Prikaz ploščice s hitrimi nastavitvami"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Omogočanje spremembe po meri"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Barva in videz"</string> + <string name="night_mode" msgid="3540405868248625488">"Nočni način"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Umerjanje zaslona"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Vklopljeno"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Izklopljeno"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Samodejni vklop"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Preklop v nočni način, kot je ustrezno glede na lokacijo in uro v dnevu"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Ko je vklopljen nočni način"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Uporaba temne teme za sistem Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Prilagodi odtenek"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Prilagodi svetlost"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Za osrednja področja sistema Android, ki so običajno prikazana v svetli temi, na primer nastavitve in obvestila, je uporabljena temna tema."</string> <string name="color_apply" msgid="9212602012641034283">"Uporabi"</string> <string name="color_revert_title" msgid="4746666545480534663">"Potrditev nastavitev"</string> <string name="color_revert_message" msgid="9116001069397996691">"Zaradi nekaterih barvnih nastavitev lahko postane ta naprava neuporabna. Kliknite »V redu«, če želite potrditi te barvne nastavitve. V nasprotnem primeru se bodo čez 10 sekund ponastavile na prvotno vrednost."</string> @@ -488,21 +490,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Začetni zaslon"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Nedavni"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Nazaj"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Pokaži način »ne moti« v nadzoru glasnosti"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Omogoča popoln nadzor načina »ne moti« v pogovornem oknu za glasnost."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Nadzor glasnosti in način »ne moti«"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Odpiranje načina »ne moti« pri zmanjšanju glasnosti"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Prikaži s kontrolniki glasnosti"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"ne moti"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Bližnjica z gumboma za glasnost"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Zapustitev načina »ne moti« pri povečanju glasnosti"</string> <string name="battery" msgid="7498329822413202973">"Akumulator"</string> <string name="clock" msgid="7416090374234785905">"Ura"</string> <string name="headset" msgid="4534219457597457353">"Slušalke z mikrofonom"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Slušalke priključene"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Slušalke z mikrofonom priključene"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Omogoči ali onemogoči prikaz ikon v vrstici stanja."</string> <string name="data_saver" msgid="5037565123367048522">"Varčevanje s podatki"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Varčevanje s podatki je vklopljeno"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Varčevanje s podatki je izklopljeno"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Vklopljeno"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Izklop"</string> <string name="nav_bar" msgid="1993221402773877607">"Vrstica za krmarjenje"</string> <string name="start" msgid="6873794757232879664">"Začetek"</string> <string name="center" msgid="4327473927066010960">"Sredina"</string> @@ -525,4 +526,15 @@ <string name="preview" msgid="9077832302472282938">"Predogled"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Povlecite, če želite dodati ploščice"</string> <string name="qs_edit" msgid="2232596095725105230">"Uredi"</string> + <string name="tuner_time" msgid="6572217313285536011">"Ura"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Prikaži ure, minute in sekunde"</item> + <item msgid="1427801730816895300">"Prikaži ure in minute (privzeto)"</item> + <item msgid="3830170141562534721">"Ne prikaži te ikone"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Vedno prikaži odstotek"</item> + <item msgid="2139628951880142927">"Prikaži odstotek med polnjenjem (privzeto)"</item> + <item msgid="3327323682209964956">"Ne prikaži te ikone"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-sq-rAL/strings.xml b/packages/SystemUI/res/values-sq-rAL/strings.xml index 3f25e7d94808..3e1df4d06edf 100644 --- a/packages/SystemUI/res/values-sq-rAL/strings.xml +++ b/packages/SystemUI/res/values-sq-rAL/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Heshtje\ne plotë"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Vetëm\nme prioritet"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Vetëm\nalarmet"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Të gjitha"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Të gjitha\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Po ngarkohet (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> deri sa të mbushet)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Po ngarkon me shpejtësi (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> derisa të mbushet)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Po ngarkon me ngadalë (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> derisa të mbushet)"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Trego sekondat e orës në shiritin e statusit. Mund të ndikojë te jeta e baterisë."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Risistemo Cilësimet e shpejta"</string> <string name="show_brightness" msgid="6613930842805942519">"Shfaq ndriçimin te Cilësimet e shpejta"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Aktivizo përshpejtuesin e rrëshqitjes lart për ekranin e ndarë"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Aktivizo gjestin e rrëshqitjes lart për ekranin e ndarë"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Aktivizo gjestin për të hyrë tek ekrani i ndarë duke rrëshqitur lart nga butoni \"Përmbledhja\""</string> <string name="experimental" msgid="6198182315536726162">"Eksperimentale"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Të aktivizohet \"bluetooth-i\"?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Shfaq një vështrim të shpejtë në ekran dhe lësho tingull"</string> <string name="notification_more_settings" msgid="816306283396553571">"Cilësime të tjera"</string> <string name="notification_done" msgid="5279426047273930175">"U krye"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Ngjyrat normale"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Ngjyrat e natës"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Ngjyrat e personalizuara"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automatike"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Ngjyra të panjohura"</string> - <string name="color_transform" msgid="6985460408079086090">"Modifikimi i ngjyrës"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Pllakëza Shfaq cilësimet e shpejta"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Zbato transformimin e personalizuar"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Ngjyra dhe pamja"</string> + <string name="night_mode" msgid="3540405868248625488">"Modaliteti i natës"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Kalibro ekranin"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Aktiv"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Joaktiv"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Aktivizoje automatikisht"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Kalo në \"Modalitetin e natës\" sipas përshtatshmërisë për vendin dhe kohën e ditës"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Kur \"Modaliteti i natës\" është aktiv"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Përdor temën e errët për Android OS"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Rregullo nuancën"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Rregullo ndriçimin"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Tema e errët është aplikuar në fushat kryesore të Android OS që shfaqen zakonisht në një temë të çelur, siç janë \"Cilësimet\" dhe njoftimet."</string> <string name="color_apply" msgid="9212602012641034283">"Zbato"</string> <string name="color_revert_title" msgid="4746666545480534663">"Konfirmo cilësimet"</string> <string name="color_revert_message" msgid="9116001069397996691">"Disa cilësime ngjyrash mund ta bëjnë këtë pajisje të papërdorshme. Kliko OK për të konfirmuar këto cilësime ngjyrash, përndryshe këto cilësime do të rivendosen pas 10 sekondash."</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Kreu"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Të fundit"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Prapa"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Shfaq \"Mos shqetëso\" te volumi"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Lejo kontrollin e plotë të opsionit \"Mos shqetëso\" në dialogun e volumit."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volumi dhe \"Mos shqetëso\""</string> - <string name="volume_down_silent" msgid="66962568467719591">"Vendos \"Mos shqetëso\" me volumin poshtë"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Shfaq me kontrollet e volumit"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Mos shqetëso"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Shkurtorja e butonave të volumit"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Dil nga \"Mos shqetëso\" me volumin lart"</string> <string name="battery" msgid="7498329822413202973">"Bateria"</string> <string name="clock" msgid="7416090374234785905">"Ora"</string> <string name="headset" msgid="4534219457597457353">"Kufjet me mikrofon"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Kufjet u lidhën"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Kufjet me mikrofon u lidhën"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Aktivizo ose çaktivizo shfaqjen e ikonave në shiritin e statusit."</string> <string name="data_saver" msgid="5037565123367048522">"Kursyesi i të dhënave"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Kursyesi i të dhënave është aktiv"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Kursyesi i të dhënave është joaktiv"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Aktiv"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Joaktiv"</string> <string name="nav_bar" msgid="1993221402773877607">"Shiriti i navigimit"</string> <string name="start" msgid="6873794757232879664">"Nis"</string> <string name="center" msgid="4327473927066010960">"Qendror"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Pamja paraprake"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Zvarrit për të shtuar pllakëzat"</string> <string name="qs_edit" msgid="2232596095725105230">"Redakto"</string> + <string name="tuner_time" msgid="6572217313285536011">"Ora"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Shfaq orët, minutat dhe sekondat"</item> + <item msgid="1427801730816895300">"Shfaq orët dhe minutat (e parazgjedhur)"</item> + <item msgid="3830170141562534721">"Mos e shfaq këtë ikonë"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Shfaq gjithmonë përqindjen"</item> + <item msgid="2139628951880142927">"Shfaq përqindjen gjatë ngarkimit (e parazgjedhur)"</item> + <item msgid="3327323682209964956">"Mos e shfaq këtë ikonë"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index 8d54ca202ce9..f603a50bb71d 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -302,8 +302,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"качење екрана"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"претражи"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Покретање апликације <xliff:g id="APP">%s</xliff:g> није успело."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Апликација <xliff:g id="APP">%s</xliff:g> је онемогућена у безбедном режиму."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Историја"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Обриши"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Подели хоризонтално"</string> @@ -335,8 +334,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Потпуна\nтишина"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Само\nприорит. прекиди"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Само\nаларми"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Све"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Сви\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Пуњење (пун је за <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Брзо се пуни (напуниће се за <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Споро се пуни (напуниће се за <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -449,7 +446,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Секунде на сату се приказују на статусној траци. То може да утиче на трајање батерије."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Преуреди Брза подешавања"</string> <string name="show_brightness" msgid="6613930842805942519">"Прикажи осветљеност у Брзим подешавањима"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Омогући убрзавач за превлачење нагоре за подељени екран"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Омогући покрет за превлачење нагоре за подељени екран"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Омогућава покрет за прелазак на подељени екран превлачењем нагоре од дугмета Преглед"</string> <string name="experimental" msgid="6198182315536726162">"Експериментално"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Желите ли да укључите Bluetooth?"</string> @@ -469,19 +466,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Накратко се приказују на екрану и емитује се звук"</string> <string name="notification_more_settings" msgid="816306283396553571">"Још подешавања"</string> <string name="notification_done" msgid="5279426047273930175">"Готово"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Нормалне боје"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Ноћне боје"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Прилагођене боје"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Аутоматски"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Непознате боје"</string> - <string name="color_transform" msgid="6985460408079086090">"Измена боја"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Прикажи плочицу Брза подешавања"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Омогући прилагођену трансформацију"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Боја и изглед"</string> + <string name="night_mode" msgid="3540405868248625488">"Ноћни режим"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Калибришите екран"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Укључено"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Искључено"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Аутоматски укључи"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Пређите на ноћни режим у зависности од локације и доба дана"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Када је ноћни режим укључен"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Користи тамну тему за Android ОС"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Прилагоди сенку"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Прилагоди осветљеност"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Тамна тема се примењује на кључне области Android ОС-а које се обично приказују у светлој теми, као што су подешавања и обавештења."</string> <string name="color_apply" msgid="9212602012641034283">"Примени"</string> <string name="color_revert_title" msgid="4746666545480534663">"Потврдите подешавања"</string> <string name="color_revert_message" msgid="9116001069397996691">"Нека подешавања боја могу да учине уређај неупотребљивим. Кликните на Потврди да бисте потврдили ова подешавања боја, пошто ће се у супротном ова подешавања ресетовати након 10 секунди."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Потрошња батерије"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Уштеда батерије није доступна током пуњења"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Уштеда батерије"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Смањује перформансе и позадинске податке"</string> @@ -489,21 +489,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Почетни"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Недавни садржај"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Назад"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Прикажи подешавање Не узнемиравај у дијалогу за јачину звука"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Дозвољава потпуну контролу подешавања Не узнемиравај у дијалогу за јачину звука."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Јачина звука и Не узнемиравај"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Уђи у режим Не узнемиравај када је звук утишан"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Прикажи са контролама јачине звука"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Не узнемиравај"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Пречица за дугмад за јачину звука"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Изађи из режима Не узнемиравај када је звук појачан"</string> <string name="battery" msgid="7498329822413202973">"Батерија"</string> <string name="clock" msgid="7416090374234785905">"Сат"</string> <string name="headset" msgid="4534219457597457353">"Наглавне слушалице"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Слушалице су повезане"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Наглавне слушалице су повезане"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Омогућите или онемогућите приказивање икона на статусној траци."</string> <string name="data_saver" msgid="5037565123367048522">"Уштеда података"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Уштеда података је укључена"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Уштеда података је искључена"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Укључено"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Искључено"</string> <string name="nav_bar" msgid="1993221402773877607">"Трака за навигацију"</string> <string name="start" msgid="6873794757232879664">"Покрени"</string> <string name="center" msgid="4327473927066010960">"Центар"</string> @@ -526,4 +525,15 @@ <string name="preview" msgid="9077832302472282938">"Преглед"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Превуците да бисте додали плочице"</string> <string name="qs_edit" msgid="2232596095725105230">"Измени"</string> + <string name="tuner_time" msgid="6572217313285536011">"Време"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Прикажи сате, минуте и секунде"</item> + <item msgid="1427801730816895300">"Прикажи сате и минуте (подразумевано)"</item> + <item msgid="3830170141562534721">"Не приказуј ову икону"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Увек приказуј проценат"</item> + <item msgid="2139628951880142927">"Прикажи проценат током пуњења (подразумевано)"</item> + <item msgid="3327323682209964956">"Не приказуј ову икону"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 2a919620f27d..f35024d0c9c1 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fästa skärmen"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"sök"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Det gick inte att starta appen <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> är inaktiverad i säkert läge."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Historik"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Rensa"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Dela horisontellt"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Helt\ntyst"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Endast\nprioriterade"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Endast\nalarm"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Alla"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Alla\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Laddar (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> tills batteriet är fulladdat)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Laddas snabbt (batteriet fulladdat om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Laddas sakta (batteriet fulladdat om <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Visa klocksekunder i statusfältet. Detta kan påverka batteritiden."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Ordna snabbinställningarna"</string> <string name="show_brightness" msgid="6613930842805942519">"Visa ljusstyrka i snabbinställningarna"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Aktivera accelerator för delad skärm när du sveper uppåt"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Aktivera delad skärm när du sveper uppåt"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Aktivera en rörelse som delar skärmen när du sveper uppåt från knappen Översikt"</string> <string name="experimental" msgid="6198182315536726162">"Experimentella"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Vill du aktivera Bluetooth?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Visa på skärmen, med ljud"</string> <string name="notification_more_settings" msgid="816306283396553571">"Fler inställningar"</string> <string name="notification_done" msgid="5279426047273930175">"Klar"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Normala färger"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Nattfärger"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Anpassade färger"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Automatiskt"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Okända färger"</string> - <string name="color_transform" msgid="6985460408079086090">"Färgändring"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Visa rutan Snabbinställningar"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Aktivera anpassad omvandling"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Färg och utseende"</string> + <string name="night_mode" msgid="3540405868248625488">"Nattläge"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Kalibrera skärmen"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Aktiverat"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Inaktiverat"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Aktivera automatiskt"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Byt till Nattläge vid passande platser och tider på dygnet"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"När Nattläget är aktiverat"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Använd mörkt tema för Android OS"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Justera ton"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Justera ljusstyrka"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Det mörka temat används på viktiga områden i Android OS som brukar visas med ett ljust tema, t.ex. Inställningar och aviseringar."</string> <string name="color_apply" msgid="9212602012641034283">"Verkställ"</string> <string name="color_revert_title" msgid="4746666545480534663">"Bekräfta inställningarna"</string> <string name="color_revert_message" msgid="9116001069397996691">"Vissa färginställningar kan göra den här enheten oanvändbar. Klicka på OK om du vill bekräfta färginställningarna, annars återställs inställningarna efter 10 sekunder."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Batteriförbrukning"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Batterisparläget är inte tillgängligt vid laddning"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Batterisparläge"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Minskar prestanda och bakgrundsdata"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Startsida"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Senaste"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Tillbaka"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Visa Stör ej i volymkontrollen"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Tillåt full kontroll över Stör ej i volymkontrollen"</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volym och Stör ej"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Aktivera Stör ej när volymen sänks"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Visa med volymkontroller"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Stör ej"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Genväg till volymknappar"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Inaktivera Stör ej när volymen höjs"</string> <string name="battery" msgid="7498329822413202973">"Batteri"</string> <string name="clock" msgid="7416090374234785905">"Klocka"</string> <string name="headset" msgid="4534219457597457353">"Headset"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Hörlurar anslutna"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Headset anslutet"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Visa eller dölj ikoner i statusfältet."</string> <string name="data_saver" msgid="5037565123367048522">"Databesparing"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Databesparing är aktiverat"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Databesparing är inaktiverat"</string> <string name="switch_bar_on" msgid="1142437840752794229">"På"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Inaktiverat"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigeringsfält"</string> <string name="start" msgid="6873794757232879664">"Början"</string> <string name="center" msgid="4327473927066010960">"Centrera"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Förhandsgranskning"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Lägg till rutor genom att dra"</string> <string name="qs_edit" msgid="2232596095725105230">"Redigera"</string> + <string name="tuner_time" msgid="6572217313285536011">"Tid"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Visa timmar, minuter och sekunder"</item> + <item msgid="1427801730816895300">"Visa timmar och minuter (standard)"</item> + <item msgid="3830170141562534721">"Visa inte den här ikonen"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Visa alltid procent"</item> + <item msgid="2139628951880142927">"Visa procent under laddning (standard)"</item> + <item msgid="3327323682209964956">"Visa inte den här ikonen"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 55f021359e66..e5da9e25dd57 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"kudumisha programu moja"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"tafuta"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Haikuweza kuanzisha <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> imezimwa katika hali salama."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Historia"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Futa"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Gawanya Mlalo"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Kimya\nkabisa"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Kipaumbele\npekee"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Kengele\npekee"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Zote"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Zote\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Inachaji (Imebakisha <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ijae)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Inachaji kwa kasi (itajaa baada ya <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Inachaji pole pole (itajaa baada ya <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Onyesha sekunde za saa katika sehemu ya arifa. Inaweza kuathiri muda wa matumizi ya betri."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Panga Upya Mipangilio ya Haraka"</string> <string name="show_brightness" msgid="6613930842805942519">"Onyesha unga\'avu katika Mipangilio ya Haraka"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Washa kiakibishaji cha skrini inayogawanywa kwa kutelezesha kidole juu"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Ruhusu kugawanya skrini kwa ishara ya kutelezesha kidole juu"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Washa kipengele cha ishara ili utumie skrini iliyogawanywa kwa kutelezesha kidole juu kutoka kitufe cha Muhtasari"</string> <string name="experimental" msgid="6198182315536726162">"Ya majaribio"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Je, ungependa kuwasha Bluetooth?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Weka onyesho la kuchungulia kwenye skrini na itoe sauti"</string> <string name="notification_more_settings" msgid="816306283396553571">"Mipangilio zaidi"</string> <string name="notification_done" msgid="5279426047273930175">"Nimemaliza"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Rangi za kawaida"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Rangi za usiku"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Rangi maalum"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Otomatiki"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Rangi zisizojulikana"</string> - <string name="color_transform" msgid="6985460408079086090">"Ubadilishaji wa rangi"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Onyesha kigae cha Mipangilio ya Haraka"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Washa ubadilishaji maalum"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Rangi na mwonekano"</string> + <string name="night_mode" msgid="3540405868248625488">"Hali ya usiku"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Rekebisha onyesho"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Imewashwa"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Imezimwa"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Washa kiotomatiki"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Badilisha kuwa Hali ya Usiku kulingana na mahali na wakati"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Hali ya Usiku inapowashwa"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Tumia mandhari ya giza katika Mfumo wa Uendeshaji wa Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Rekebisha kivulivuli"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Rekebisha mwangaza"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Mandhari yenye giza yametumika katika maeneo muhimu ya Mfumo wa Uendeshaji wa Android ambayo kwa kawaida huonyeshwa katika mandhari yenye mwangaza, kama vile Mipangilio na arifa."</string> <string name="color_apply" msgid="9212602012641034283">"Tumia"</string> <string name="color_revert_title" msgid="4746666545480534663">"Thibitisha mipangilio"</string> <string name="color_revert_message" msgid="9116001069397996691">"Baadhi ya mipangilio ya rangi inaweza kufanya kifaa hiki kisitumike. Bofya Sawa ili uthibitishe mipangilio hii ya rangi, vinginevyo, mipangilio hii itajiweka upya baada ya sekunde 10."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Matumizi ya betri"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Kiokoa Betri hakipatikani unapochaji betri"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Kiokoa Betri"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Hupunguza data ya chini chini na utendaji"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Mwanzo"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Zilizotumika majuzi"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Nyuma"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Onyesha hali ya usinisumbue katika sauti"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Ruhusu udhibiti kamili wa hali ya usinisumbue katika kidirisha cha sauti."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Sauti na Usinisumbue"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Weka hali ya usinisumbue sauti inapopunguzwa"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Onyesha katika vidhibiti vya sauti"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Usinisumbue"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Njia ya mkato ya vitufe vya sauti"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Ondoa hali ya usinisumbue sauti inapoongezwa"</string> <string name="battery" msgid="7498329822413202973">"Betri"</string> <string name="clock" msgid="7416090374234785905">"Saa"</string> <string name="headset" msgid="4534219457597457353">"Vifaa vya sauti"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Imeunganisha spika za masikioni"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Imeunganisha vifaa vya sauti"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Washa au uzime aikoni ili zisionekane kwenye sehemu ya arifa"</string> <string name="data_saver" msgid="5037565123367048522">"Kiokoa Data"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Kiokoa Data kimewashwa"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Kiokoa Data kimezimwa"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Imewashwa"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Imezimwa"</string> <string name="nav_bar" msgid="1993221402773877607">"Sehemu ya viungo muhimu"</string> <string name="start" msgid="6873794757232879664">"Anza"</string> <string name="center" msgid="4327473927066010960">"Weka katikati"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Onyesho la kuchungulia"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Buruta ili uongeze vigae"</string> <string name="qs_edit" msgid="2232596095725105230">"Badilisha"</string> + <string name="tuner_time" msgid="6572217313285536011">"Wakati"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Onyesha saa, dakika na sekunde"</item> + <item msgid="1427801730816895300">"Onyesha saa na dakika (chaguo-msingi)"</item> + <item msgid="3830170141562534721">"Usionyeshe aikoni hii"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Onyesha asilimia kila wakati"</item> + <item msgid="2139628951880142927">"Onyesha asilimia wakati inachaji (chaguo-msingi)"</item> + <item msgid="3327323682209964956">"Usionyeshe aikoni hii"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-ta-rIN/strings.xml b/packages/SystemUI/res/values-ta-rIN/strings.xml index ecfc446dafbe..05f3ce5dfb18 100644 --- a/packages/SystemUI/res/values-ta-rIN/strings.xml +++ b/packages/SystemUI/res/values-ta-rIN/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"திரையை பின் செய்தல்"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"தேடு"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g>ஐத் தொடங்க முடியவில்லை."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"பாதுகாப்புப் பயன்முறையில் <xliff:g id="APP">%s</xliff:g> முடக்கப்பட்டது."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"வரலாறு"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"அழி"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"கிடைமட்டமாகப் பிரி"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"அறிவிப்புகள்\nவேண்டாம்"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"முன்னுரிமைகள்\nமட்டும்"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"அலாரங்கள்\nமட்டும்"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"எல்லாம்"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"எல்லாம்\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"சார்ஜாகிறது (முழு சார்ஜிற்கு <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ஆகும்)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"வேகமாக சார்ஜாகிறது (முழு சார்ஜிற்கு: <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"மெதுவாக சார்ஜாகிறது (முழு சார்ஜிற்கு: <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"நிலைப் பட்டியில் கடிகார வினாடிகளைக் காட்டும். பேட்டரியின் ஆயுளைக் குறைக்கலாம்."</string> <string name="qs_rearrange" msgid="8060918697551068765">"விரைவு அமைப்புகளை மறுவரிசைப்படுத்து"</string> <string name="show_brightness" msgid="6613930842805942519">"விரைவு அமைப்புகளில் ஒளிர்வுப் பட்டியைக் காட்டு"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"மேலே ஸ்வைப் செய்வதன் மூலம் திரைப் பிரிப்பை இயக்கு"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"மேலே ஸ்வைப் செய்வதன் மூலம் திரையைப் பிரிக்கும் சைகையை இயக்கு"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"மேலோட்டப் பார்வை பொத்தானிலிருந்து மேலே ஸ்வைப் செய்வதன் மூலம், திரைப் பிரிப்பைச் செயலாக்குவதற்கான சைகையை இயக்கும்"</string> <string name="experimental" msgid="6198182315536726162">"சோதனை முயற்சி"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"புளூடூத்தை இயக்கவா?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"ஒலியுடன் திரையில் காட்டு"</string> <string name="notification_more_settings" msgid="816306283396553571">"மேலும் அமைப்புகள்"</string> <string name="notification_done" msgid="5279426047273930175">"முடிந்தது"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"இயல்பான வண்ணங்கள்"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"இரவுநேர வண்ணங்கள்"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"தனிப்பயன் வண்ணங்கள்"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"தானியங்கு"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"அறியப்படாத வண்ணங்கள்"</string> - <string name="color_transform" msgid="6985460408079086090">"வண்ண மாற்றம்"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"விரைவு அமைப்புகள் டைலைக் காட்டு"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"தனிப்பயன் வண்ண மாற்றத்தை இயக்கு"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"வண்ணமும் தோற்றமும்"</string> + <string name="night_mode" msgid="3540405868248625488">"இரவுப் பயன்முறை"</string> + <string name="calibrate_display" msgid="5974642573432039217">"திரையை அளவீடு செய்"</string> + <string name="night_mode_on" msgid="5597545513026541108">"இயக்கத்தில்"</string> + <string name="night_mode_off" msgid="8035605276956057508">"முடக்கத்தில்"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"தானாகவே இயக்கு"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"இருப்பிடம் மற்றும் நேரத்தின்படி இரவுப் பயன்முறைக்கு மாற்று"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"இரவுப் பயன்முறை இயக்கப்பட்டிருக்கும் போது"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OSக்காக அடர் தீமினைப் பயன்படுத்து"</string> + <string name="adjust_tint" msgid="3398569573231409878">"டிண்ட்டைச் சரிசெய்"</string> + <string name="adjust_brightness" msgid="980039329808178246">"ஒளிர்வைச் சரிசெய்"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"வழக்கமாக வெளிர் தீமில் காட்டப்படுகிற Android OS இன் முக்கிய பகுதிகளில் (எ.கா., அமைப்புகள், அறிவிப்புகள் போன்றவை) அடர் தீம் பயன்படுத்தப்படுகிறது."</string> <string name="color_apply" msgid="9212602012641034283">"பயன்படுத்து"</string> <string name="color_revert_title" msgid="4746666545480534663">"அமைப்புகளை உறுதிப்படுத்து"</string> <string name="color_revert_message" msgid="9116001069397996691">"சில வண்ண அமைப்புகள் இந்தச் சாதனத்தைப் பயன்படுத்த முடியாதபடி செய்யலாம். இந்த வண்ண அமைப்புகளை உறுதிப்படுத்த, சரி என்பதைக் கிளிக் செய்யவும், இல்லையெனில் இந்த அமைப்புகள் 10 வினாடிகளுக்குப் பின் மீட்டமைக்கப்படும்."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"பேட்டரி உபயோகம்"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"சார்ஜ் செய்யும் போது பேட்டரி சேமிப்பானைப் பயன்படுத்த முடியாது"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"பேட்டரி சேமிப்பான்"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"செயல்திறனையும் பின்புலத்தில் தரவு செயலாக்கப்படுவதையும் குறைக்கும்"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"முகப்பு"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"சமீபத்தியவை"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"முந்தையது"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"ஒலி உரையாடலில் தொந்தரவு செய்ய வேண்டாம் என்பதைக் காட்டு"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"ஒலி உரையாடலில் தொந்தரவு செய்ய வேண்டாம் என்பதன் முழுக் கட்டுப்பாட்டையும் அனுமதி."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"ஒலி மற்றும் தொந்தரவு செய்ய வேண்டாம்"</string> - <string name="volume_down_silent" msgid="66962568467719591">"ஒலியைக் குறைக்கும்போது தொந்தரவு செய்ய வேண்டாம் என்பதை இயக்கு"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"ஒலிக் கட்டுப்பாடுகளுடன் காட்டு"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"தொந்தரவு செய்ய வேண்டாம்"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"ஒலியளவுப் பொத்தான்களுக்கான குறுக்குவழி"</string> <string name="volume_up_silent" msgid="7141255269783588286">"ஒலியைக் கூட்டும் போது தொந்தரவு செய்ய வேண்டாம் என்பதை முடக்கு"</string> <string name="battery" msgid="7498329822413202973">"பேட்டரி"</string> <string name="clock" msgid="7416090374234785905">"கடிகாரம்"</string> <string name="headset" msgid="4534219457597457353">"ஹெட்செட்"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ஹெட்ஃபோன்கள் இணைக்கப்பட்டன"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ஹெட்செட் இணைக்கப்பட்டது"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"நிலைப் பட்டியில் ஐகான்களைக் காட்டுவதை இயக்கும் அல்லது முடக்கும்."</string> <string name="data_saver" msgid="5037565123367048522">"தரவுச்சேமிப்பான்"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"தரவு சேமிப்பான் இயக்கப்பட்டது"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"தரவு சேமிப்பான் முடக்கப்பட்டது"</string> <string name="switch_bar_on" msgid="1142437840752794229">"இயக்கு"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"முடக்கு"</string> <string name="nav_bar" msgid="1993221402773877607">"வழிசெலுத்தல் பட்டி"</string> <string name="start" msgid="6873794757232879664">"தொடங்கு"</string> <string name="center" msgid="4327473927066010960">"மையம்"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"மாதிரிக்காட்சி"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"கட்டங்களைச் சேர்க்க, இழுக்கவும்"</string> <string name="qs_edit" msgid="2232596095725105230">"மாற்று"</string> + <string name="tuner_time" msgid="6572217313285536011">"நேரம்"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"மணிநேரம், நிமிடங்கள், வினாடிகளைக் காட்டு"</item> + <item msgid="1427801730816895300">"மணிநேரம், நிமிடங்களைக் காட்டு (இயல்பு)"</item> + <item msgid="3830170141562534721">"இந்த ஐகானைக் காட்டாதே"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"எப்போதும் சதவீதத்தைக் காட்டு"</item> + <item msgid="2139628951880142927">"சார்ஜ் செய்யும் போது சதவீதத்தைக் காட்டு (இயல்பு)"</item> + <item msgid="3327323682209964956">"இந்த ஐகானைக் காட்டாதே"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-te-rIN/strings.xml b/packages/SystemUI/res/values-te-rIN/strings.xml index 4f702b6c405d..28065c03dc45 100644 --- a/packages/SystemUI/res/values-te-rIN/strings.xml +++ b/packages/SystemUI/res/values-te-rIN/strings.xml @@ -333,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"మొత్తం\nనిశ్శబ్దం"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"ప్రాధాన్యమైనవి\nమాత్రమే"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"అలారాలు\nమాత్రమే"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"అన్నిటికీ"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"అన్నీ\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"ఛార్జ్ అవుతోంది (పూర్తిగా నిండటానికి <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"వేగంగా ఛార్జ్ అవుతోంది (నిండటానికి <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"నెమ్మదిగా ఛార్జ్ అవుతోంది (నిండటానికి <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -447,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"స్థితి పట్టీలో గడియారం సెకన్లు చూపుతుంది. బ్యాటరీ శక్తి ప్రభావితం చేయవచ్చు."</string> <string name="qs_rearrange" msgid="8060918697551068765">"శీఘ్ర సెట్టింగ్ల ఏర్పాటు క్రమం మార్చు"</string> <string name="show_brightness" msgid="6613930842805942519">"శీఘ్ర సెట్టింగ్ల్లో ప్రకాశం చూపు"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"పైకి స్వైప్ చేయడం ద్వారా స్క్రీన్ విభజన యాక్సిలరేటర్ను ప్రారంభించు"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"పైకి స్వైప్ చేయడం ద్వారా స్క్రీన్ విభజన సంజ్ఞను ప్రారంభించు"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"స్థూలదృష్టి బటన్ నుండి పైకి స్వైప్ చేయడం ద్వారా స్క్రీన్ విభజనలోకి ప్రవేశించడానికి సంజ్ఞను ప్రారంభిస్తుంది"</string> <string name="experimental" msgid="6198182315536726162">"ప్రయోగాత్మకం"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"బ్లూటూత్ ఆన్ చేయాలా?"</string> @@ -467,14 +465,18 @@ <string name="notification_importance_max" msgid="5236987171904756134">"స్క్రీన్పై శీఘ్రంగా శబ్దంతో చూపుతుంది"</string> <string name="notification_more_settings" msgid="816306283396553571">"మరిన్ని సెట్టింగ్లు"</string> <string name="notification_done" msgid="5279426047273930175">"పూర్తయింది"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"సాధారణ రంగులు"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"రాత్రి రంగులు"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"అనుకూల రంగులు"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"స్వయంచాలకం"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"తెలియని రంగులు"</string> - <string name="color_transform" msgid="6985460408079086090">"రంగు సవరణ"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"శీఘ్ర సెట్టింగ్ల టైల్ను చూపండి"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"అనుకూల పరివర్తనను ప్రారంభించండి"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"రంగు మరియు కనిపించే తీరు"</string> + <string name="night_mode" msgid="3540405868248625488">"రాత్రి మోడ్"</string> + <string name="calibrate_display" msgid="5974642573432039217">"డిస్ప్లేని క్రమాంకనం చేయండి"</string> + <string name="night_mode_on" msgid="5597545513026541108">"ఆన్లో ఉంది"</string> + <string name="night_mode_off" msgid="8035605276956057508">"ఆఫ్లో ఉంది"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"స్వయంచాలకంగా ఆన్ చేయి"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"స్థానం మరియు రోజులో సమయానికి తగినట్లుగా రాత్రి మోడ్కి మారుస్తుంది"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"రాత్రి మోడ్ ఆన్లో ఉన్నప్పుడు"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS కోసం ముదురు రంగు థీమ్ ఉపయోగించండి"</string> + <string name="adjust_tint" msgid="3398569573231409878">"లేత రంగును సర్దుబాటు చేయండి"</string> + <string name="adjust_brightness" msgid="980039329808178246">"ప్రకాశాన్ని సర్దుబాటు చేయండి"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"సాధారణంగా లేత రంగు థీమ్లో ప్రదర్శించబడే సెట్టింగ్లు మరియు నోటిఫికేషన్ల వంటి Android OS ప్రధాన అంశాలకు ముదురు రంగు థీమ్ వర్తింపజేయబడుతుంది."</string> <string name="color_apply" msgid="9212602012641034283">"వర్తింపజేయి"</string> <string name="color_revert_title" msgid="4746666545480534663">"సెట్టింగ్లను నిర్ధారించండి"</string> <string name="color_revert_message" msgid="9116001069397996691">"కొన్ని రంగు సెట్టింగ్ల వలన ఈ పరికరం ఉపయోగించలేని విధంగా అయిపోవచ్చు. ఈ రంగు సెట్టింగ్లను నిర్ధారించడానికి సరే క్లిక్ చేయండి లేదంటే ఈ సెట్టింగ్లు 10 సెకన్ల తర్వాత రీసెట్ చేయబడతాయి."</string> @@ -486,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"హోమ్"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"ఇటీవలివి"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"వెనుకకు"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"వాల్యూమ్లో అంతరాయం కలిగించవద్దు ప్యానెల్ను చూపు"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"వాల్యూమ్ డైలాగ్లో అంతరాయం కలిగించవద్దు ప్యానెల్ పూర్తి నియంత్రణను అనుమతిస్తుంది."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"వాల్యూమ్ మరియు అంతరాయం కలిగించవద్దు"</string> - <string name="volume_down_silent" msgid="66962568467719591">"వాల్యూమ్ తగ్గిస్తే అంతరాయం కలిగించవద్దులోకి ప్రవేశిస్తుంది"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"వాల్యూమ్ నియంత్రణలతో చూపు"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"అంతరాయం కలిగించవద్దు"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"వాల్యూమ్ బటన్ల సత్వరమార్గం"</string> <string name="volume_up_silent" msgid="7141255269783588286">"వాల్యూమ్ పెంచితే అంతరాయం కలిగించవద్దు నుండి నిష్క్రమిస్తుంది"</string> <string name="battery" msgid="7498329822413202973">"బ్యాటరీ"</string> <string name="clock" msgid="7416090374234785905">"గడియారం"</string> <string name="headset" msgid="4534219457597457353">"హెడ్సెట్"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"హెడ్ఫోన్లు కనెక్ట్ చేయబడ్డాయి"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"హెడ్సెట్ కనెక్ట్ చేయబడింది"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"స్థితి పట్టీలో చిహ్నాలు ప్రదర్శించడాన్ని ప్రారంభించండి లేదా నిలిపివేయండి."</string> <string name="data_saver" msgid="5037565123367048522">"డేటా సేవర్"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"డేటా సేవర్ ఆన్లో ఉంది"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"డేటా సేవర్ ఆఫ్లో ఉంది"</string> <string name="switch_bar_on" msgid="1142437840752794229">"ఆన్"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"ఆఫ్ చేయి"</string> <string name="nav_bar" msgid="1993221402773877607">"నావిగేషన్ బార్"</string> <string name="start" msgid="6873794757232879664">"ప్రారంభం"</string> <string name="center" msgid="4327473927066010960">"మధ్య"</string> @@ -523,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"పరిదృశ్యం"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"టైల్లను జోడించడానికి లాగండి"</string> <string name="qs_edit" msgid="2232596095725105230">"సవరించు"</string> + <string name="tuner_time" msgid="6572217313285536011">"సమయం"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"గంటలు, నిమిషాలు మరియు సెకన్లను చూపు"</item> + <item msgid="1427801730816895300">"గంటలు మరియు నిమిషాలను చూపు (డిఫాల్ట్)"</item> + <item msgid="3830170141562534721">"ఈ చిహ్నాన్ని చూపవద్దు"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"ఎల్లప్పుడూ శాతాన్ని చూపు"</item> + <item msgid="2139628951880142927">"ఛార్జ్ అవుతున్నప్పుడు శాతాన్ని చూపు (డిఫాల్ట్)"</item> + <item msgid="3327323682209964956">"ఈ చిహ్నాన్ని చూపవద్దు"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index bc7e26fd5247..0164ad7afaa5 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"การตรึงหน้าจอ"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"ค้นหา"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"ไม่สามารถเริ่มใช้ <xliff:g id="APP">%s</xliff:g>"</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> ปิดใช้ในโหมดปลอดภัย"</string> <string name="recents_history_button_label" msgid="5153358867807604821">"ประวัติ"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"ล้าง"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"แยกในแนวนอน"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"ปิดเสียง\nทั้งหมด"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"เฉพาะเรื่อง\nสำคัญ"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"เฉพาะปลุก\nเท่านั้น"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"ทั้งหมด"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"ทั้งหมด\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"กำลังชาร์จ (อีก <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> เต็ม)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"กำลังชาร์จอย่างรวดเร็ว (อีก <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> จะเต็ม)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"กำลังชาร์จอย่างช้าๆ (อีก <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> จะเต็ม)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"แสดงวินาทีของนาฬิกาในแถบสถานะ อาจส่งผลต่ออายุแบตเตอรี"</string> <string name="qs_rearrange" msgid="8060918697551068765">"จัดเรียงการตั้งค่าด่วนใหม่"</string> <string name="show_brightness" msgid="6613930842805942519">"แสดงความสว่างในการตั้งค่าด่วน"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"เปิดใช้ตัวเร่งการเลื่อนขึ้นเพื่อแยกหน้าจอ"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"เปิดใช้ท่าทางสัมผัสการเลื่อนขึ้นเพื่อแยกหน้าจอ"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"เปิดใช้ท่าทางสัมผัสเพื่อเข้าสู่โหมดแยกหน้าจอโดยเลื่อนขึ้นจากปุ่มภาพรวม"</string> <string name="experimental" msgid="6198182315536726162">"ทดสอบ"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"เปิดบลูทูธไหม"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"แสดงบนหน้าจอในช่วงเวลาสั้นๆ และส่งเสียง"</string> <string name="notification_more_settings" msgid="816306283396553571">"การตั้งค่าเพิ่มเติม"</string> <string name="notification_done" msgid="5279426047273930175">"เสร็จสิ้น"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"สีปกติ"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"สียามค่ำคืน"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"สีที่กำหนดเอง"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"อัตโนมัติ"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"สีที่ไม่รู้จัก"</string> - <string name="color_transform" msgid="6985460408079086090">"การปรับเปลี่ยนสี"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"แสดงไทล์การตั้งค่าด่วน"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"เปิดใช้การเปลี่ยนที่กำหนดเอง"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"สีและลักษณะที่ปรากฏ"</string> + <string name="night_mode" msgid="3540405868248625488">"โหมดกลางคืน"</string> + <string name="calibrate_display" msgid="5974642573432039217">"ปรับเทียบการแสดงผล"</string> + <string name="night_mode_on" msgid="5597545513026541108">"เปิด"</string> + <string name="night_mode_off" msgid="8035605276956057508">"ปิด"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"เปิดอัตโนมัติ"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"เปลี่ยนเป็นโหมดกลางคืนตามความเหมาะสมกับสถานที่และเวลาของวัน"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"เมื่อเปิดโหมดกลางคืน"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"ใช้ธีมสีเข้มสำหรับ Android OS"</string> + <string name="adjust_tint" msgid="3398569573231409878">"ปรับการแต้มสี"</string> + <string name="adjust_brightness" msgid="980039329808178246">"ปรับความสว่าง"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"ใช้ธีมสีเข้มในบริเวณสำคัญของ Android OS ซึ่งปกติแล้วจะแสดงในธีมสีอ่อน เช่น การตั้งค่า และการแจ้งเตือน"</string> <string name="color_apply" msgid="9212602012641034283">"ใช้"</string> <string name="color_revert_title" msgid="4746666545480534663">"ยืนยันการตั้งค่า"</string> <string name="color_revert_message" msgid="9116001069397996691">"การตั้งค่าสีบางอย่างอาจทำให้อุปกรณ์นี้ใช้งานไม่ได้ คลิกตกลงเพื่อยืนยันการตั้งค่าสีเหล่านี้ มิฉะนั้นระบบจะรีเซ็ตการตั้งค่าหลังจาก 10 วินาที"</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"การใช้งานแบตเตอรี่"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"ไม่สามารถใช้โหมดประหยัดแบตเตอรี่ระหว่างการชาร์จ"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"โหมดประหยัดแบตเตอรี่"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"ลดประสิทธิภาพการทำงานและข้อมูลแบ็กกราวด์"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"หน้าแรก"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"ล่าสุด"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"กลับ"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"แสดงโหมดห้ามรบกวนในระดับเสียง"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"อนุญาตให้ควบคุมโหมดห้ามรบกวนได้อย่างสมบูรณ์ในกล่องโต้ตอบระดับเสียง"</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"ระดับเสียงและโหมดห้ามรบกวน"</string> - <string name="volume_down_silent" msgid="66962568467719591">"เข้าสู่โหมดห้ามรบกวนเมื่อลดระดับเสียง"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"แสดงพร้อมการควบคุมระดับเสียง"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"ห้ามรบกวน"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"ทางลัดปุ่มปรับระดับเสียง"</string> <string name="volume_up_silent" msgid="7141255269783588286">"ออกจากโหมดห้ามรบกวนเมื่อเพิ่มระดับเสียง"</string> <string name="battery" msgid="7498329822413202973">"แบตเตอรี่"</string> <string name="clock" msgid="7416090374234785905">"นาฬิกา"</string> <string name="headset" msgid="4534219457597457353">"ชุดหูฟัง"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"เชื่อมต่อหูฟังแล้ว"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"เชื่อมต่อชุดหูฟังแล้ว"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"เปิดหรือปิดไอคอนจากการแสดงในแถบสถานะ"</string> <string name="data_saver" msgid="5037565123367048522">"โปรแกรมประหยัดอินเทอร์เน็ต"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"โปรแกรมประหยัดอินเทอร์เน็ตเปิดอยู่"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"โปรแกรมประหยัดอินเทอร์เน็ตปิดอยู่"</string> <string name="switch_bar_on" msgid="1142437840752794229">"เปิด"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"ปิด"</string> <string name="nav_bar" msgid="1993221402773877607">"แถบนำทาง"</string> <string name="start" msgid="6873794757232879664">"บนสุด"</string> <string name="center" msgid="4327473927066010960">"กึ่งกลาง"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"ดูตัวอย่าง"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"ลากเพื่อเพิ่มชิ้นส่วน"</string> <string name="qs_edit" msgid="2232596095725105230">"แก้ไข"</string> + <string name="tuner_time" msgid="6572217313285536011">"เวลา"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"แสดงชั่วโมง นาที และวินาที"</item> + <item msgid="1427801730816895300">"แสดงชั่วโมงและนาที (ค่าเริ่มต้น)"</item> + <item msgid="3830170141562534721">"อย่าแสดงไอคอนนี้"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"แสดงเปอร์เซ็นต์เสมอ"</item> + <item msgid="2139628951880142927">"แสดงเปอร์เซ็นต์เมื่อชาร์จ (ค่าเริ่มต้น)"</item> + <item msgid="3327323682209964956">"อย่าแสดงไอคอนนี้"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index ab800d48aed2..ccd1e3792b02 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"pagpi-pin sa screen"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"maghanap"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Hindi masimulan <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Naka-disable ang <xliff:g id="APP">%s</xliff:g> sa safe-mode."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"History"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"I-clear"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Split Horizontal"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Ganap na\nkatahimikan"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Priyoridad\nlang"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Mga alarm\nlang"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Lahat"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Lahat\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Nagtsa-charge (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hanggang mapuno)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Mabilis mag-charge (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hanggang sa mapuno)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Mabagal mag-charge (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> hanggang sa mapuno)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Ipakita ang mga segundo ng orasan sa status bar. Maaaring makaapekto sa tagal ng baterya."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Ayusing Muli ang Mga Mabilisang Setting"</string> <string name="show_brightness" msgid="6613930842805942519">"Ipakita ang liwanag sa Mga Mabilisang Setting"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"I-enable ang split-screen na swipe-up accelerator"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"I-enable ang pag-swipe pataas na galaw para sa split-screen"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"I-enable ang gesture upang makapasok sa split-screen sa pamamagitan ng pagsa-swipe pataas mula sa button ng Pangkalahatang-ideya"</string> <string name="experimental" msgid="6198182315536726162">"Pang-eksperimento"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"I-on ang Bluetooth?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Ipasilip sa screen at mag-play ng tunog"</string> <string name="notification_more_settings" msgid="816306283396553571">"Higit pang mga setting"</string> <string name="notification_done" msgid="5279426047273930175">"Tapos Na"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Mga karaniwang kulay"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Madidilim na kulay"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Mga custom na kulay"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Auto"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Mga hindi kilalang kulay"</string> - <string name="color_transform" msgid="6985460408079086090">"Pagbago sa kulay"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Ipakita ang tile ng Mga Mabilisang Setting"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"I-enable ang custom na pagpalit"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Kulay at hitsura"</string> + <string name="night_mode" msgid="3540405868248625488">"Night mode"</string> + <string name="calibrate_display" msgid="5974642573432039217">"I-calibrate ang display"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Naka-on"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Naka-off"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Awtomatikong i-on"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Lumipat sa Night Mode kapag naaangkop sa lokasyon at oras"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Kapag naka-on ang Night Mode"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Gumamit ng madilim na tema para sa Android OS"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Isaayos ang tint"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Isaayos ang liwanag"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Ilalapat ang madilim na tema sa mahahalagang bahagi ng Android OS na karaniwang ipinapakita nang may maliwanag na tema, gaya ng Mga Setting at mga notification."</string> <string name="color_apply" msgid="9212602012641034283">"Ilapat"</string> <string name="color_revert_title" msgid="4746666545480534663">"Kumpirmahin ang mga setting"</string> <string name="color_revert_message" msgid="9116001069397996691">"Maaaring hindi magamit ang device na ito dahil sa ilang setting ng kulay. I-click ang OK upang kumpirmahin ang mga setting ng kulay na ito, kung hindi ay mare-reset ang mga setting na ito pagkatapos ng 10 segundo."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Paggamit ng baterya"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Hindi available ang Pangtipid sa Baterya kapag nagcha-charge"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Pangtipid sa Baterya"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Binabawasan ang pagganap at data sa background"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Home"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Mga Kamakailang Ginamit"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Bumalik"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Ipakita ang huwag istorbohin sa volume"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Payagang ganap na makontrol ang huwag istorbohin sa dialog ng volume."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Volume at Huwag istorbohin"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Gamitin ang huwag istorbohin nang mahina ang volume"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Ipakita nang may mga kontrol ng volume"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Huwag istorbohin"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Shortcut ng mga button ng volume"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Umalis sa huwag istorbohin nang malakas ang volume"</string> <string name="battery" msgid="7498329822413202973">"Baterya"</string> <string name="clock" msgid="7416090374234785905">"Orasan"</string> <string name="headset" msgid="4534219457597457353">"Headset"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Nakakonekta ang mga headphone"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Nakakonekta ang headset"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"I-enable o i-disable ang pagpapakita sa mga icon sa status bar."</string> <string name="data_saver" msgid="5037565123367048522">"Data Saver"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Naka-on ang Data Saver"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Naka-off ang Data Saver"</string> <string name="switch_bar_on" msgid="1142437840752794229">"I-on"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"I-off"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigation bar"</string> <string name="start" msgid="6873794757232879664">"Simula"</string> <string name="center" msgid="4327473927066010960">"Gitna"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"I-preview"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Mag-drag upang magdagdag ng mga tile"</string> <string name="qs_edit" msgid="2232596095725105230">"I-edit"</string> + <string name="tuner_time" msgid="6572217313285536011">"Oras"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Ipakita ang oras, minuto at segundo"</item> + <item msgid="1427801730816895300">"Ipakita ang oras at minuto (default)"</item> + <item msgid="3830170141562534721">"Huwag ipakita ang icon na ito"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Palaging ipakita ang porsyento"</item> + <item msgid="2139628951880142927">"Ipakita ang porsyento kapag nagcha-charge (default)"</item> + <item msgid="3327323682209964956">"Huwag ipakita ang icon na ito"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index 1acffad7ebff..b343d08dcbe8 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ekran sabitleme"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"ara"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> başlatılamadı."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g>, güvenli modda devre dışıdır."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Geçmiş"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Sil"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Yatay Ayırma"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Tamamen\nsessiz"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Yalnızca\nöncelik"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Yalnızca\nalarmlar"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Tümü"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Tümü\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Şarj oluyor (tamamen dolmasına <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> kaldı)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Hızlı şarj oluyor (tam dolmasına <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> kaldı)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Yavaş şarj oluyor (tam dolmasına <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> kaldı)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Durum çubuğunda saatin saniyelerini gösterir. Pil ömrünü etkileyebilir."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Hızlı Ayarlar\'ı Yeniden Düzenle"</string> <string name="show_brightness" msgid="6613930842805942519">"Hızlı Ayarlar\'da parlaklığı göster"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Ekranı bölmek için yukarı hızlıca kaydırmayı etkinleştir"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Hızlıca yukarı kaydırma hareketiyle ekran bölm. etkinleştir"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Genel bakış düğmesinden yukarı hızlıca kaydırarak bölünmüş ekrana geçme hareketini etkinleştir"</string> <string name="experimental" msgid="6198182315536726162">"Deneysel"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth açılsın mı?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Ekrana getir ve ses çıkar"</string> <string name="notification_more_settings" msgid="816306283396553571">"Diğer ayarlar"</string> <string name="notification_done" msgid="5279426047273930175">"Bitti"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Normal renkler"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Gece renkleri"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Özel renkler"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Otomatik"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Bilinmeyen renkler"</string> - <string name="color_transform" msgid="6985460408079086090">"Renk değişikliği"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Hızlı Ayarlar kutusunu göster"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Özel dönüşümü etkinleştir"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Renk ve görünüm"</string> + <string name="night_mode" msgid="3540405868248625488">"Gece modu"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Ekranı kalibre et"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Açık"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Kapalı"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Otomatik olarak aç"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Konuma ve günün saatine uygun şekilde Gece Modu\'na geç"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Gece Modu açık olduğunda"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS için koyu renk tema kullan"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Tonu ayarla"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Parlaklığı ayarla"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Koyu renk tema, Android OS\'nin normalde Ayarlar ve bildirimler gibi açık renk bir temayla görüntülenen temel alanlarına uygulanır."</string> <string name="color_apply" msgid="9212602012641034283">"Uygula"</string> <string name="color_revert_title" msgid="4746666545480534663">"Ayarları onaylayın"</string> <string name="color_revert_message" msgid="9116001069397996691">"Bazı renkler bu cihazı kullanılmaz yapabilir. Bu renkleri onaylamak için Tamam\'ı tıklayın. Tıklamazsanız bu ayarlar 10 saniye sonra sıfırlanacaktır."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Pil kullanımı"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Şarj sırasında Pil Tasarrufu özelliği kullanılamaz"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Pil Tasarrufu"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Performansı ve arka plan verilerini azaltır"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Ana ekran"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Son çağrılar"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Geri"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Ses iletişim kutusunda rahatsız etmeyin modunu göster"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Ses iletişim kutusunda rahatsız etmeyin modunu tam olarak denetlemeye izin ver."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Ses ve Rahatsız etmeyin"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Ses kısıldığında rahatsız etmeyin moduna geç"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Ses seviyesi kontrolleriyle göster"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Rahatsız etmeyin"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Ses düğmeleri kısayolu"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Ses açıldığında rahatsız etmeyin modundan çık"</string> <string name="battery" msgid="7498329822413202973">"Pil"</string> <string name="clock" msgid="7416090374234785905">"Saat"</string> <string name="headset" msgid="4534219457597457353">"Mikrofonlu kulaklık"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Mikrofonlu kulaklık bağlı"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Mikrofonlu kulaklık bağlı"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Simgelerin durum çubuğunda görüntülenmesini etkinleştir veya devre dışı bırak"</string> <string name="data_saver" msgid="5037565123367048522">"Veri Tasarrufu"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Veri Tasarrufu açık"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Veri Tasarrufu kapalı"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Açık"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Kapalı"</string> <string name="nav_bar" msgid="1993221402773877607">"Gezinme çubuğu"</string> <string name="start" msgid="6873794757232879664">"Başlangıç"</string> <string name="center" msgid="4327473927066010960">"Merkez"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Önizle"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Blok eklemek için sürükleyin"</string> <string name="qs_edit" msgid="2232596095725105230">"Düzenle"</string> + <string name="tuner_time" msgid="6572217313285536011">"Saat"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Saati, dakikayı ve saniyeyi göster"</item> + <item msgid="1427801730816895300">"Saati ve dakikayı göster (varsayılan)"</item> + <item msgid="3830170141562534721">"Bu simgeyi gösterme"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Her zaman yüzdeyi göster"</item> + <item msgid="2139628951880142927">"Şarj olurken yüzdeyi göster (varsayılan)"</item> + <item msgid="3327323682209964956">"Bu simgeyi gösterme"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index 0a00467cf052..6a47d84ad6cc 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -303,8 +303,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"закріпити екран"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"пошук"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Не вдалося запустити <xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Додаток <xliff:g id="APP">%s</xliff:g> вимкнено в безпечному режимі."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Історія"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Очистити"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Розділити горизонтально"</string> @@ -336,8 +335,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Без\nсигналів"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Лише\nприорітетні"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Лише\nсигнали"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Усі"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Усі\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Заряджання (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до повного зарядження)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Швидке заряджання (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до повного заряду)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Повільне заряджання (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> до повного заряду)"</string> @@ -450,7 +447,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Показувати секунди на годиннику в рядку стану. Акумулятор може розряджатися швидше."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Упорядкувати швидкі налаштування"</string> <string name="show_brightness" msgid="6613930842805942519">"Показувати панель яскравості у швидких налаштуваннях"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Увімкнути акселератор розділення екрана рухом пальця вгору"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Увімкнути розділення екрана рухом пальця вгору"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Увімкнути жест розділення екрана рухом пальця вгору від кнопки \"Огляд\""</string> <string name="experimental" msgid="6198182315536726162">"Експериментальні налаштування"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Увімкнути Bluetooth?"</string> @@ -470,19 +467,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Показувати сповіщення на екрані зі звуковим сигналом"</string> <string name="notification_more_settings" msgid="816306283396553571">"Більше налаштувань"</string> <string name="notification_done" msgid="5279426047273930175">"Готово"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Стандартні кольори"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Нічні кольори"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Користувацькі кольори"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Авто"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Невідомі кольори"</string> - <string name="color_transform" msgid="6985460408079086090">"Змінення кольорів"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Показати опцію швидких налаштувань"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Увімкнути користувацьке перетворення"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Колір і вигляд"</string> + <string name="night_mode" msgid="3540405868248625488">"Нічний режим"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Калібрувати дисплей"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Увімкнено"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Вимкнено"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Вмикати автоматично"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Переходити на нічний режим відповідно до місцезнаходження та часу доби"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Коли нічний режим увімкнено"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Використати нічну тему для ОС Android"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Налаштувати відтінок"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Регулювати яскравість"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Нічна тема застосовується в основних областях ОС Android, які зазвичай відображаються у світлій темі, як-от у Налаштуваннях і сповіщеннях."</string> <string name="color_apply" msgid="9212602012641034283">"Застосувати"</string> <string name="color_revert_title" msgid="4746666545480534663">"Підтвердити налаштування"</string> <string name="color_revert_message" msgid="9116001069397996691">"Деякі налаштування кольорів можуть зробити цей пристрій непридатним для використання. Натисніть OK, щоб підтвердити налаштування, інакше їх буде скинуто через 10 секунд."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Використання заряду"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Режим економії заряду акумулятора недоступний під час заряджання"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Режим економії заряду акумулятора"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Знижується продуктивність і обмежується обмін даними у фоновому режимі"</string> @@ -490,21 +490,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Головний екран"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Останні"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Назад"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Показувати режим \"Не турбувати\" у вікні регулятора гучності"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Дозволити керувати режимом \"Не турбувати\" у вікні регулятора гучності."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Регулятор гучності та режим \"Не турбувати\""</string> - <string name="volume_down_silent" msgid="66962568467719591">"Вмикати режим \"Не турбувати\" під час зменшення гучності"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Показувати регулятори гучності"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Не турбувати"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Кнопки гучності на корпусі"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Вимикати режим \"Не турбувати\" під час збільшення гучності"</string> <string name="battery" msgid="7498329822413202973">"Акумулятор"</string> <string name="clock" msgid="7416090374234785905">"Годинник"</string> <string name="headset" msgid="4534219457597457353">"Гарнітура"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Навушники під’єднано"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Гарнітуру під’єднано"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Показати або сховати значки в рядку стану."</string> <string name="data_saver" msgid="5037565123367048522">"Заощадження трафіку"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Заощадження трафіку ввімкнено"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Заощадження трафіку вимкнено"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Увімкнено"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Вимкнути"</string> <string name="nav_bar" msgid="1993221402773877607">"Панель навігації"</string> <string name="start" msgid="6873794757232879664">"На початку"</string> <string name="center" msgid="4327473927066010960">"У центрі"</string> @@ -527,4 +526,15 @@ <string name="preview" msgid="9077832302472282938">"Переглянути"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Перетягуйте фрагменти, щоб додавати їх"</string> <string name="qs_edit" msgid="2232596095725105230">"Редагувати"</string> + <string name="tuner_time" msgid="6572217313285536011">"Час"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Показувати години, хвилини та секунди"</item> + <item msgid="1427801730816895300">"Показувати години та хвилини (за умовчанням)"</item> + <item msgid="3830170141562534721">"Не показувати цей значок"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Завжди показувати відсотки"</item> + <item msgid="2139628951880142927">"Показувати відсотки під час заряджання (за умовчанням)"</item> + <item msgid="3327323682209964956">"Не показувати цей значок"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-ur-rPK/strings.xml b/packages/SystemUI/res/values-ur-rPK/strings.xml index 0e1d78f430b7..afb5db83a2a1 100644 --- a/packages/SystemUI/res/values-ur-rPK/strings.xml +++ b/packages/SystemUI/res/values-ur-rPK/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"اسکرین کو پن کرنا"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"تلاش کریں"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> کو شروع نہیں کیا جا سکا۔"</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"محفوظ موڈ میں <xliff:g id="APP">%s</xliff:g> غیر فعال ہوتی ہے۔"</string> <string name="recents_history_button_label" msgid="5153358867807604821">"سرگزشت"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"صاف کریں"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"بلحاظ افقی الگ کریں"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"مکمل\nخاموشی"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"صرف\nترجیحی"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"صرف\nالارمز"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"سبھی"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"تمام\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"چارج ہو رہا ہے (مکمل ہونے تک <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> باقی ہیں)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"تیزی سے چارج ہو رہا ہے (مکمل ہونے میں <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"آہستہ چارج ہو رہا ہے (مکمل ہونے میں <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"گھڑی کے سیکنڈز اسٹیٹس بار میں دکھائیں۔ اس کا بیٹری کی زندگی پر اثر پڑ سکتا ہے۔"</string> <string name="qs_rearrange" msgid="8060918697551068765">"فوری ترتیبات کو دوبارہ ترتیب دیں"</string> <string name="show_brightness" msgid="6613930842805942519">"فوری ترتیبات میں چمکیلا پن دکھائیں"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"سپلٹ اسکرین کیلئے سوائپ اپ ایکسلریٹر فعال کریں"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"سپلٹ اسکرین کیلئے سوائپ اپ اشارہ فعال کریں"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"مجموعی جائزہ بٹن سے سوائپ اپ کرکے سپلٹ اسکرین میں داخل ہونے کیلئے اشارہ فعال کریں"</string> <string name="experimental" msgid="6198182315536726162">"تجرباتی"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"بلوٹوتھ آن کریں؟"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"اسکرین پر دکھائیں اور آواز چلائیں"</string> <string name="notification_more_settings" msgid="816306283396553571">"مزید ترتیبات"</string> <string name="notification_done" msgid="5279426047273930175">"ہوگیا"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"عام رنگ"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"رات کے رنگ"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"حسب ضرورت رنگ"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"خودکار"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"نامعلوم رنگ"</string> - <string name="color_transform" msgid="6985460408079086090">"رنگوں کی تبدیلی"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"فوری ترتیبات والی ٹائل دکھائیں"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"حسب ضرورت ٹرانسفارم فعال کریں"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"رنگ اور ظہور"</string> + <string name="night_mode" msgid="3540405868248625488">"رات موڈ"</string> + <string name="calibrate_display" msgid="5974642573432039217">"نشان زد ڈسپلے"</string> + <string name="night_mode_on" msgid="5597545513026541108">"آن"</string> + <string name="night_mode_off" msgid="8035605276956057508">"آف"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"خودکار طور پر آن کریں"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"مقام اور دن کے وقت کی مناسبت سے نائٹ موڈ میں سوئچ کریں"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"جب نائٹ موڈ آن ہو"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS کیلئے ڈارک تھیم استعمال کریں"</string> + <string name="adjust_tint" msgid="3398569573231409878">"ٹنٹ ایڈجسٹ کریں"</string> + <string name="adjust_brightness" msgid="980039329808178246">"چمک کو ایڈجسٹ کریں"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"ڈارک تھیم Android OS کی بنیادی جگہوں پر لاگو کی جاتی ہے جو عام طور لائٹ تھیم میں ڈسپلے ہوتے ہیں، جیسے ترتیبات اور اطلاعات۔"</string> <string name="color_apply" msgid="9212602012641034283">"لاگو کریں"</string> <string name="color_revert_title" msgid="4746666545480534663">"ترتیبات کی توثیق کریں"</string> <string name="color_revert_message" msgid="9116001069397996691">"رنگوں کی کچھ ترتیبات اس آلے کو ناقابل استعمال بنا سکتی ہیں۔ رنگوں کی ان ترتیبات کی توثیق کرنے کیلئے ٹھیک ہے پر کلک کریں، بصورت دیگر 10 سیکنڈ بعد یہ ترتیبات ری سیٹ ہو جائیں گی۔"</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"بیٹری کا استعمال"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"چارجنگ کے دوران بیٹری سیور دستیاب نہیں ہے"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"بیٹری سیور"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"کارکردگی اور پس منظر کا ڈیٹا کم کر دیتا ہے"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"ہوم"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"حالیہ"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"پیچھے"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"والیوم میں ڈسٹرب نہ کریں دکھائیں"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"والیوم ڈائیلاگ میں ڈسٹرب نہ کریں کے مکمل کنٹرول کی اجازت دیں۔"</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"والیوم اور ڈسٹرب نہ کریں"</string> - <string name="volume_down_silent" msgid="66962568467719591">"کم والیوم پر \'ڈسٹرب نہ کریں\' میں داخل ہوں"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"والیوم کنٹرولز کے ساتھ دکھائیں"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"ڈسٹرب نہ کریں"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"والیوم بٹنز کے شارٹ کٹ"</string> <string name="volume_up_silent" msgid="7141255269783588286">"زیادہ والیوم پر \'ڈسٹرب نہ کریں\' سے خارج ہوں"</string> <string name="battery" msgid="7498329822413202973">"بیٹری"</string> <string name="clock" msgid="7416090374234785905">"گھڑی"</string> <string name="headset" msgid="4534219457597457353">"ہیڈ سیٹ"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ہیڈ فونز منسلک ہیں"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ہیڈ سیٹ منسلک ہے"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"اسٹیٹس بار میں دکھائے جانے کیلئے آئیکنز فعال یا غیر فعال کریں۔"</string> <string name="data_saver" msgid="5037565123367048522">"ڈیٹا سیور"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"ڈیٹا سیور آن ہے"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"ڈیٹا سیور آف ہے"</string> <string name="switch_bar_on" msgid="1142437840752794229">"آن"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"آف"</string> <string name="nav_bar" msgid="1993221402773877607">"نیویگیشن بار"</string> <string name="start" msgid="6873794757232879664">"شروع کریں"</string> <string name="center" msgid="4327473927066010960">"مرکز"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"پیش منظر"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"ٹائٹلز شامل کرنے کیلئے گھسیٹیں"</string> <string name="qs_edit" msgid="2232596095725105230">"ترمیم کریں"</string> + <string name="tuner_time" msgid="6572217313285536011">"وقت"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"گھنٹے، منٹ اور سیکنڈ دکھائیں"</item> + <item msgid="1427801730816895300">"گھنٹے اور منٹ دکھائیں (ڈیفالٹ)"</item> + <item msgid="3830170141562534721">"یہ آئیکن نہ دکھائیں"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"ہمیشہ شرح فیصد دکھائیں"</item> + <item msgid="2139628951880142927">"چارج ہوتے وقت فیصد دکھائیں (ڈیفالٹ)"</item> + <item msgid="3327323682209964956">"یہ آئیکن نہ دکھائیں"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-uz-rUZ/strings.xml b/packages/SystemUI/res/values-uz-rUZ/strings.xml index 68393ffb0cb9..eafe80c74cbd 100644 --- a/packages/SystemUI/res/values-uz-rUZ/strings.xml +++ b/packages/SystemUI/res/values-uz-rUZ/strings.xml @@ -269,7 +269,7 @@ <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string> <string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"Ulanmagan"</string> <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"Tarmoq mavjud emas"</string> - <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi o‘chirilgan"</string> + <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi o‘chiq"</string> <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"Hech qanday Wi-Fi tarmog‘i mavjud emas"</string> <string name="quick_settings_cast_title" msgid="7709016546426454729">"Wi-Fi monitor"</string> <string name="quick_settings_casting" msgid="6601710681033353316">"Translatsiya qilinmoqda"</string> @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"o‘zgarmas ekran"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"qidirish"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"“<xliff:g id="APP">%s</xliff:g>” ilovasini ishga tushirib bo‘lmadi."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"Xavfsiz rejimda <xliff:g id="APP">%s</xliff:g> ilovasi o‘chirib qo‘yildi."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Jurnal"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Tozalash"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Gorizontal yo‘nalishda bo‘lish"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Tinchlik\nsaqlansin"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Faqat\nmuhimlar"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Faqat\nsignallar"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Barchasi"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Barcha\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Quvvat olmoqda (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>da to‘ladi)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Tez quvvat olmoqda (to‘lishiga <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> qoldi)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Sekin quvvat olmoqda (to‘lishiga <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> qoldi)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Holat panelida soat soniyalari ko‘rsatilsin. Bu batareya resursiga ta’sir qilishi mumkin."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Tezkor sozlamalarni qayta tartiblash"</string> <string name="show_brightness" msgid="6613930842805942519">"Tezkor sozlamalarda yorqinlikni ko‘rsatish"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Tepaga surib, ekranni bo‘lish uchun tezlatkichni yoqish"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Tepaga surish orqali ekranni ikkiga bo‘lish"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Umumiy ma’lumot tugmasini tepaga surish orqali ekranni bo‘lish ishorasini yoqish"</string> <string name="experimental" msgid="6198182315536726162">"Tajribaviy"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth yoqilsinmi?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Barcha oynalar ustida signal ovozi bilan ko‘rsatilsin"</string> <string name="notification_more_settings" msgid="816306283396553571">"Boshqa sozlamalar"</string> <string name="notification_done" msgid="5279426047273930175">"Tayyor"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Odatiy ranglar"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Qoramtir ranglar"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Foydalanuvchi rangi"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Avtomatik"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Noma’lum ranglar"</string> - <string name="color_transform" msgid="6985460408079086090">"Rang sozlamalari"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Tezkor sozlamalar panelini ko‘rsatish"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Foydalanuvchi sozlamalarini yoqish"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Rang va ko‘rinishi"</string> + <string name="night_mode" msgid="3540405868248625488">"Tungi rejim"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Ekranni kalibrlash"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Yoniq"</string> + <string name="night_mode_off" msgid="8035605276956057508">"O‘chiq"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Avtomatik yoqish"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Joylashuv va vaqtga mos ravishda tungi rejimga o‘tish"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Agar tungi rejim yoniq bo‘lsa"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Android OS uchun to‘q rangli mavzudan foyd-sh"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Rangni o‘zgartirish"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Yorqinlikni o‘zgartirish"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"To‘q rangli mavzu Android OS’ning o‘zak sahifalariga ham qo‘llaniladi va bu Sozlamalar va bildirishnomalar kabi och rangli mavzularda odatdagiday ko‘rsatiladi."</string> <string name="color_apply" msgid="9212602012641034283">"Qo‘llash"</string> <string name="color_revert_title" msgid="4746666545480534663">"Sozlamalarni tasdiqlang"</string> <string name="color_revert_message" msgid="9116001069397996691">"Ba’zi rang sozlamalari qurilmadan foydalanishni qiyinlashtirish mumkin. Tanlgan parametrlarni tasdiqlash uchun “OK” tugmasini bosing. Aks holda, ular 10 soniyadan so‘ng qayta tiklanadi."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Batareya sarfi"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Quvvat tejash rejimidan quvvatlash vaqtida foydalanib bo‘lmaydi"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Quvvat tejash rejimi"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Unumdorlikni pasaytiradi va fonda internetdan foydalanishni cheklaydi"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Bosh ekran"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"So‘nggi ishlatilganlar"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Orqaga"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Ovoz boshqarish oynasida “Bezovta qilinmasin” panelini ko‘rsatish"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Ovoz balandligini boshqarish oynasida “Bezovta qilinmasin” rejimini to‘liq boshqarishga ruxsat beradi."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Ovoz balandligini boshqarish va “Bezovta qilinmasin” rejimi"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Ovozni pasaytirganda “Bezovta qilinmasin” rejimini yoqish"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Ovoz balandligini boshqarish tugmalari bilan ko‘rsatilsin"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Bezovta qilinmasin"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Ovoz balandligini boshqarish tezkor tugmalari"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Ovozni ko‘targanda “Bezovta qilinmasin” rejimini o‘chirish"</string> <string name="battery" msgid="7498329822413202973">"Batareya"</string> <string name="clock" msgid="7416090374234785905">"Soat"</string> <string name="headset" msgid="4534219457597457353">"Audio moslama"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Quloqchinlar ulandi"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Audio moslama ulandi"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Holat qatorida begilarning ko‘rsatilishini yoqish yoki o‘chirish."</string> <string name="data_saver" msgid="5037565123367048522">"Trafik tejash"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Trafik tejash yoniq"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Trafik tejash o‘chiq"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Yoniq"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"O‘chiq"</string> <string name="nav_bar" msgid="1993221402773877607">"Navigatsiya paneli"</string> <string name="start" msgid="6873794757232879664">"Boshlash"</string> <string name="center" msgid="4327473927066010960">"Markazda"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Oldindan ko‘rish"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Fragmentlar qo‘shish uchun torting"</string> <string name="qs_edit" msgid="2232596095725105230">"Tahrirlash"</string> + <string name="tuner_time" msgid="6572217313285536011">"Vaqt"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Soat, daqiqa va soniyalar ko‘rsatilsin"</item> + <item msgid="1427801730816895300">"Soat va daqiqalar ko‘rsatilsin (birlamchi)"</item> + <item msgid="3830170141562534721">"Bu ikonka boshqa ko‘rsatilmasin"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Har doim foizda ko‘rsatilsin"</item> + <item msgid="2139628951880142927">"Quvvat olayotganda foizda ko‘rsatilsin (birlamchi)"</item> + <item msgid="3327323682209964956">"Bu ikonka boshqa ko‘rsatilmasin"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index d4c7317dd5cc..aca359e98eb9 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -334,8 +334,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Hoàn toàn\ntắt tiếng"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Chỉ\nưu tiên"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Chỉ\nbáo thức"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Tất cả"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Tất cả\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Đang sạc (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> cho đến khi đầy)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Sạc nhanh (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> cho tới khi đầy)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Sạc chậm (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> cho tới khi đầy)"</string> @@ -448,7 +446,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Hiển thị giây đồng hồ trong thanh trạng thái. Có thể ảnh hưởng đến thời lượng pin."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Sắp xếp lại Cài đặt nhanh"</string> <string name="show_brightness" msgid="6613930842805942519">"Hiển thị độ sáng trong Cài đặt nhanh"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Bật trình tăng tốc vuốt lên ở chế độ chia đôi màn hình"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Bật cử chỉ vuốt lên ở chế độ chia đôi màn hình"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Cho phép cử chỉ truy cập chế độ chia đôi màn hình bằng cách vuốt lên từ nút Tổng quan"</string> <string name="experimental" msgid="6198182315536726162">"Thử nghiệm"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bật Bluetooth?"</string> @@ -468,19 +466,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Hiển thị trên màn hình và phát ra âm thanh"</string> <string name="notification_more_settings" msgid="816306283396553571">"Cài đặt khác"</string> <string name="notification_done" msgid="5279426047273930175">"Xong"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Màu thông thường"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Màu tối"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Màu tùy chỉnh"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Tự động"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Màu không xác định"</string> - <string name="color_transform" msgid="6985460408079086090">"Sửa đổi màu"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Hiển thị ô Cài đặt nhanh"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Bật chuyển đổi tùy chỉnh"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Màu sắc và giao diện"</string> + <string name="night_mode" msgid="3540405868248625488">"Chế độ ban đêm"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Hiệu chỉnh hiển thị"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Bật"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Tắt"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Tự động bật"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Chuyển sang Chế bộ ban đêm khi thích hợp cho vị trí và thời gian trong ngày"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Khi Chế độ ban đêm đang bật"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Sử dụng chủ đề sẫm màu cho Android OS"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Điều chỉnh phủ màu"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Điều chỉnh độ sáng"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Chủ đề sẫm màu được áp dụng cho các vùng chính của Android OS được hiển thị bình thường trong chủ đề sáng màu, chẳng hạn như Cài đặt và thông báo."</string> <string name="color_apply" msgid="9212602012641034283">"Áp dụng"</string> <string name="color_revert_title" msgid="4746666545480534663">"Xác nhận cài đặt"</string> <string name="color_revert_message" msgid="9116001069397996691">"Một số cài đặt màu có thể khiến thiết bị này không sử dụng được. Hãy nhấp vào OK để xác nhận các cài đặt màu này, nếu không những cài đặt này sẽ được đặt lại sau 10 giây."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Mức sử dụng pin"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Trình tiết kiệm pin không khả dụng trong khi sạc"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Trình tiết kiệm pin"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Giảm hiệu suất và dữ liệu nền"</string> @@ -488,21 +489,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Màn hình chính"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Gần đây"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Quay lại"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Hiển thị không làm phiền theo âm lượng"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Cho phép kiểm soát toàn bộ tính năng không làm phiền trong hộp thoại âm lượng."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Âm lượng và Không làm phiền"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Truy cập không làm phiền khi giảm âm lượng"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Hiển thị với các điều khiển âm lượng"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Không làm phiền"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Phím tắt các nút âm lượng"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Thoát không làm phiền khi tăng âm lượng"</string> <string name="battery" msgid="7498329822413202973">"Pin"</string> <string name="clock" msgid="7416090374234785905">"Đồng hồ"</string> <string name="headset" msgid="4534219457597457353">"Tai nghe"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Đã kết nối tai nghe"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Đã kết nối tai nghe"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Bật hoặc tắt biểu tượng hiển thị trong thanh trạng thái."</string> <string name="data_saver" msgid="5037565123367048522">"Trình tiết kiệm dữ liệu"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Trình tiết kiệm dữ liệu đang bật"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Trình tiết kiệm dữ liệu đang tắt"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Bật"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Tắt"</string> <string name="nav_bar" msgid="1993221402773877607">"Thanh điều hướng"</string> <string name="start" msgid="6873794757232879664">"Đầu"</string> <string name="center" msgid="4327473927066010960">"Căn giữa"</string> @@ -525,4 +525,15 @@ <string name="preview" msgid="9077832302472282938">"Xem trước"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Kéo để thêm ô"</string> <string name="qs_edit" msgid="2232596095725105230">"Chỉnh sửa"</string> + <string name="tuner_time" msgid="6572217313285536011">"Thời gian"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Hiển thị giờ, phút và giây"</item> + <item msgid="1427801730816895300">"Hiển thị giờ và phút (mặc định)"</item> + <item msgid="3830170141562534721">"Không hiển thị biểu tượng này"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Luôn hiển thị phần trăm"</item> + <item msgid="2139628951880142927">"Hiển thị phần trăm khi sạc (mặc định)"</item> + <item msgid="3327323682209964956">"Không hiển thị biểu tượng này"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index 8a3723a7e3e2..1c8c71e6793c 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"固定屏幕"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"搜索"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"无法启动<xliff:g id="APP">%s</xliff:g>。"</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g>已在安全模式下停用。"</string> <string name="recents_history_button_label" msgid="5153358867807604821">"历史记录"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"清除"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"水平分割"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"完全\n静音"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"仅限\n优先打扰"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"仅限\n闹钟"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"全部"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"全部\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"正在充电(还需<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>充满)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"正在快速充电(还需<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>充满)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"正在慢速充电(还需<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>充满)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"在状态栏中显示时钟的秒数。这可能会影响电池的续航时间。"</string> <string name="qs_rearrange" msgid="8060918697551068765">"重新排列快捷设置"</string> <string name="show_brightness" msgid="6613930842805942519">"在快捷设置中显示亮度栏"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"启用分屏向上滑动加速器"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"启用分屏上滑手势"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"启用通过从“概览”按钮向上滑动的手势进入分屏模式"</string> <string name="experimental" msgid="6198182315536726162">"实验性"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"要开启蓝牙吗?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"在屏幕上持续显示,并发出提示音"</string> <string name="notification_more_settings" msgid="816306283396553571">"更多设置"</string> <string name="notification_done" msgid="5279426047273930175">"完成"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"常规颜色"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"夜间颜色"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"自定义颜色"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"自动"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"未知颜色"</string> - <string name="color_transform" msgid="6985460408079086090">"颜色修改"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"显示“快捷设置”图块"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"启用自定义转换"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"颜色和外观"</string> + <string name="night_mode" msgid="3540405868248625488">"夜间模式"</string> + <string name="calibrate_display" msgid="5974642573432039217">"校准显示画面"</string> + <string name="night_mode_on" msgid="5597545513026541108">"开启"</string> + <string name="night_mode_off" msgid="8035605276956057508">"关闭"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"自动开启"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"根据地点和时间适时切换到夜间模式"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"夜间模式开启时"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"对 Android 操作系统使用深色主题背景"</string> + <string name="adjust_tint" msgid="3398569573231409878">"调整色调"</string> + <string name="adjust_brightness" msgid="980039329808178246">"调整亮度"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"系统会将深色主题背景应用于 Android 操作系统的核心区域(通常以浅色主题背景显示),例如设置和通知。"</string> <string name="color_apply" msgid="9212602012641034283">"应用"</string> <string name="color_revert_title" msgid="4746666545480534663">"确认设置"</string> <string name="color_revert_message" msgid="9116001069397996691">"部分颜色设置可能会导致此设备无法使用。请点击“确定”确认这些颜色设置,否则,系统将在 10 秒后重置这些设置。"</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"电池使用情况"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"充电过程中无法使用节电助手"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"节电助手"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"降低性能并限制后台流量"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"主屏幕"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"最近"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"返回"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"在音量对话框中显示“请勿打扰”模式"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"允许在音量对话框中完全控制“请勿打扰”模式。"</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"音量和“请勿打扰”设置"</string> - <string name="volume_down_silent" msgid="66962568467719591">"按音量调低键时进入“请勿打扰”模式"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"与音量控件一起显示"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"请勿打扰"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"音量按钮快捷键"</string> <string name="volume_up_silent" msgid="7141255269783588286">"按音量调高键时退出“请勿打扰”模式"</string> <string name="battery" msgid="7498329822413202973">"电池"</string> <string name="clock" msgid="7416090374234785905">"时钟"</string> <string name="headset" msgid="4534219457597457353">"耳机"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"已连接到耳机"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"已连接到耳机"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"指定在状态栏中显示或隐藏图标。"</string> <string name="data_saver" msgid="5037565123367048522">"流量节省程序"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"流量节省程序已开启"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"流量节省程序已关闭"</string> <string name="switch_bar_on" msgid="1142437840752794229">"开启"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"关闭"</string> <string name="nav_bar" msgid="1993221402773877607">"导航栏"</string> <string name="start" msgid="6873794757232879664">"顶部"</string> <string name="center" msgid="4327473927066010960">"中心位置"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"预览"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"拖动即可添加图块"</string> <string name="qs_edit" msgid="2232596095725105230">"修改"</string> + <string name="tuner_time" msgid="6572217313285536011">"时间"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"显示小时、分钟和秒"</item> + <item msgid="1427801730816895300">"显示小时和分钟(默认)"</item> + <item msgid="3830170141562534721">"不显示此图标"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"一律显示百分比"</item> + <item msgid="2139628951880142927">"充电时显示百分比(默认)"</item> + <item msgid="3327323682209964956">"不显示此图标"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index 675d0f320007..f4ac5b4f6ffe 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"螢幕固定"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"搜尋"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"無法啟動「<xliff:g id="APP">%s</xliff:g>」。"</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"「<xliff:g id="APP">%s</xliff:g>」已在安全模式中停用。"</string> <string name="recents_history_button_label" msgid="5153358867807604821">"記錄"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"清除"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"水平分割"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"完全\n靜音"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"僅限\n優先"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"僅限\n鬧鐘"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"全部"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"全部\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"充電中 (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>後完成充電)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"正在快速充電 (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>後完成充電)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"正在緩慢充電 (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>後完成充電)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"在狀態列中顯示時鐘秒數,但可能會影響電池壽命。"</string> <string name="qs_rearrange" msgid="8060918697551068765">"重新排列快速設定"</string> <string name="show_brightness" msgid="6613930842805942519">"在快速設定顯示亮度"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"啟用分割畫面向上滑動加速工具"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"啟用分割畫面向上快速滑動手勢"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"從 [概覽] 按鈕向上快速滑動,即可使用手勢功能進入分割畫面模式"</string> <string name="experimental" msgid="6198182315536726162">"實驗版"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"要開啟藍牙嗎?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"不時於螢幕出現並發出音效"</string> <string name="notification_more_settings" msgid="816306283396553571">"更多設定"</string> <string name="notification_done" msgid="5279426047273930175">"完成"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"一般色系"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"深沉色系"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"自訂顏色"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"自動"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"不明色系"</string> - <string name="color_transform" msgid="6985460408079086090">"顏色修改"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"顯示「快速設定」圖塊"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"啟用自訂變色功能"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"顏色和外觀"</string> + <string name="night_mode" msgid="3540405868248625488">"夜間模式"</string> + <string name="calibrate_display" msgid="5974642573432039217">"校準螢幕"</string> + <string name="night_mode_on" msgid="5597545513026541108">"已開啟"</string> + <string name="night_mode_off" msgid="8035605276956057508">"已關閉"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"自動開啟"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"在適當的位置和時間切換至「夜間模式」"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"「夜間模式」開啟時"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"在 Android OS 中使用深色主題背景"</string> + <string name="adjust_tint" msgid="3398569573231409878">"調整色調"</string> + <string name="adjust_brightness" msgid="980039329808178246">"調整亮度"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"系統會將深色主題背景套用到 Android OS 核心區域 (一般以淺色主題背景顯示),例如「設定」和通知。"</string> <string name="color_apply" msgid="9212602012641034283">"套用"</string> <string name="color_revert_title" msgid="4746666545480534663">"確認設定"</string> <string name="color_revert_message" msgid="9116001069397996691">"部分顏色設定會令此裝置無法使用。請按一下 [確定] 加以確認,否則這些顏色設定將於 10 秒後重設。"</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"電池用量"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"充電時無法使用「省電模式」"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"省電模式"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"降低效能並限制背景數據傳輸"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"主畫面"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"最近的活動"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"返回"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"在音量對話框中顯示「請勿騷擾」設定"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"允許在音量對話框中全面控制「請勿騷擾」功能。"</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"音量和「請勿騷擾」設定"</string> - <string name="volume_down_silent" msgid="66962568467719591">"調低音量時啟用「請勿騷擾」模式"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"與音量控制一起顯示"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"請勿騷擾"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"音量按鈕快速鍵"</string> <string name="volume_up_silent" msgid="7141255269783588286">"調高音量時停用「請勿騷擾」模式"</string> <string name="battery" msgid="7498329822413202973">"電池"</string> <string name="clock" msgid="7416090374234785905">"時鐘"</string> <string name="headset" msgid="4534219457597457353">"耳機"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"已連接至耳機"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"已連接至耳機"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"顯示或隱藏狀態列上的圖示。"</string> <string name="data_saver" msgid="5037565123367048522">"數據節省程式"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"數據節省程式已開啟"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"數據節省程式已關閉"</string> <string name="switch_bar_on" msgid="1142437840752794229">"開啟"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"關閉"</string> <string name="nav_bar" msgid="1993221402773877607">"導覽列"</string> <string name="start" msgid="6873794757232879664">"畫面頂部"</string> <string name="center" msgid="4327473927066010960">"畫面中央"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"預覽"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"拖曳即可新增圖塊"</string> <string name="qs_edit" msgid="2232596095725105230">"編輯"</string> + <string name="tuner_time" msgid="6572217313285536011">"時間"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"顯示小時、分鐘和秒"</item> + <item msgid="1427801730816895300">"顯示小時和分鐘 (預設)"</item> + <item msgid="3830170141562534721">"不顯示這個圖示"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"永遠顯示百分比"</item> + <item msgid="2139628951880142927">"充電時顯示百分比 (預設)"</item> + <item msgid="3327323682209964956">"不顯示這個圖示"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index 08cbb17bec23..2690eb670cc4 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"螢幕固定"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"搜尋"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"無法啟動「<xliff:g id="APP">%s</xliff:g>」。"</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"「<xliff:g id="APP">%s</xliff:g>」在安全模式中為停用狀態。"</string> <string name="recents_history_button_label" msgid="5153358867807604821">"紀錄"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"清除"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"水平分割"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"完全\n靜音"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"僅允許\n優先通知"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"僅允許\n鬧鐘"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"全部"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"全部\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"充電中 (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>後充飽)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"快速充電中 (充飽需要 <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"慢速充電中 (充飽需要 <xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g>)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"在狀態列中顯示時鐘秒數。這可能會影響電池續航力。"</string> <string name="qs_rearrange" msgid="8060918697551068765">"重新排列快速設定"</string> <string name="show_brightness" msgid="6613930842805942519">"在快速設定中顯示亮度"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"啟用分割畫面向上滑動加速工具"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"啟用分割畫面向上滑動手勢"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"啟用透過從 [總覽] 按鈕向上滑動的手勢進入分割畫面"</string> <string name="experimental" msgid="6198182315536726162">"實驗性"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"要開啟藍牙功能嗎?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"短暫顯示在螢幕上並發出音效"</string> <string name="notification_more_settings" msgid="816306283396553571">"更多設定"</string> <string name="notification_done" msgid="5279426047273930175">"完成"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"一般顏色"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"夜間顏色"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"自訂顏色"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"自動"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"不明顏色"</string> - <string name="color_transform" msgid="6985460408079086090">"顏色修改"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"顯示快速設定圖塊"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"啟用自訂顏色變換"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"顏色和外觀"</string> + <string name="night_mode" msgid="3540405868248625488">"夜間模式"</string> + <string name="calibrate_display" msgid="5974642573432039217">"校正顯示畫面"</string> + <string name="night_mode_on" msgid="5597545513026541108">"開啟"</string> + <string name="night_mode_off" msgid="8035605276956057508">"關閉"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"自動開啟"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"根據地點和時段適時切換到「夜間模式」"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"「夜間模式」開啟時"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"針對 Android 作業系統使用深色主題"</string> + <string name="adjust_tint" msgid="3398569573231409878">"調整色調"</string> + <string name="adjust_brightness" msgid="980039329808178246">"調整亮度"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"深色主題會套用到 Android 作業系統的核心區塊 (一般是以淺色主題顯示),例如設定和通知。"</string> <string name="color_apply" msgid="9212602012641034283">"套用"</string> <string name="color_revert_title" msgid="4746666545480534663">"確認設定"</string> <string name="color_revert_message" msgid="9116001069397996691">"部分顏色設定可能會造成這部裝置無法使用。請按一下 [確定] 來確認您要使用這類顏色設定,否則系統將在 10 秒後重設這些設定。"</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"電池用量"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"充電時無法使用節約耗電量模式"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"節約耗電量"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"降低效能並限制背景資料傳輸"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"主畫面"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"近期活動"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"返回"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"在音量對話方塊中顯示「零打擾」設定"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"在音量對話方塊中顯示完整的「零打擾」設定。"</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"音量和「零打擾」設定"</string> - <string name="volume_down_silent" msgid="66962568467719591">"按下調低音量鍵時啟用「零打擾」模式"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"與音量控制項一起顯示"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"零打擾"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"音量按鈕快速鍵"</string> <string name="volume_up_silent" msgid="7141255269783588286">"按下調高音量鍵時停用「零打擾」模式"</string> <string name="battery" msgid="7498329822413202973">"電池"</string> <string name="clock" msgid="7416090374234785905">"時鐘"</string> <string name="headset" msgid="4534219457597457353">"耳機"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"已與耳機連線"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"已與耳機連線"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"指定在狀態列中顯示或隱藏圖示。"</string> <string name="data_saver" msgid="5037565123367048522">"Data Saver"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Data Saver 已開啟"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Data Saver 已關閉"</string> <string name="switch_bar_on" msgid="1142437840752794229">"開啟"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"關閉"</string> <string name="nav_bar" msgid="1993221402773877607">"導覽列"</string> <string name="start" msgid="6873794757232879664">"畫面頂端"</string> <string name="center" msgid="4327473927066010960">"畫面中央"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"預覽"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"拖曳即可新增圖塊"</string> <string name="qs_edit" msgid="2232596095725105230">"編輯"</string> + <string name="tuner_time" msgid="6572217313285536011">"時間"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"顯示小時、分鐘和秒"</item> + <item msgid="1427801730816895300">"顯示小時和分鐘 (預設)"</item> + <item msgid="3830170141562534721">"不顯示這個圖示"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"一律顯示百分比"</item> + <item msgid="2139628951880142927">"充電時顯示百分比 (預設)"</item> + <item msgid="3327323682209964956">"不顯示這個圖示"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index df58a628ea84..33f0e9a69f32 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -301,8 +301,7 @@ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"ukuphina isikrini"</string> <string name="recents_search_bar_label" msgid="8074997400187836677">"sesha"</string> <string name="recents_launch_error_message" msgid="2969287838120550506">"Ayikwazanga ukuqala i-<xliff:g id="APP">%s</xliff:g>."</string> - <!-- no translation found for recents_launch_disabled_message (1624523193008871793) --> - <skip /> + <string name="recents_launch_disabled_message" msgid="1624523193008871793">"I-<xliff:g id="APP">%s</xliff:g> ikhutshaziwe kumodi yokuphepha."</string> <string name="recents_history_button_label" msgid="5153358867807604821">"Umlando"</string> <string name="recents_history_clear_all_button_label" msgid="5905258334958006953">"Sula"</string> <string name="recents_multistack_add_stack_dialog_split_horizontal" msgid="8848514474543427332">"Hlukanisa okuvundlile"</string> @@ -334,8 +333,6 @@ <string name="interruption_level_none_twoline" msgid="3957581548190765889">"Ukuthula\niokuphelele"</string> <string name="interruption_level_priority_twoline" msgid="1564715335217164124">"Okubalulekile\nkuphela"</string> <string name="interruption_level_alarms_twoline" msgid="3266909566410106146">"Ama-alamu\nkuphela"</string> - <string name="interruption_level_all" msgid="1330581184930945764">"Konke"</string> - <string name="interruption_level_all_twoline" msgid="3719402899156124780">"Konke\n"</string> <string name="keyguard_indication_charging_time" msgid="1757251776872835768">"Iyashaja (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ize igcwale)"</string> <string name="keyguard_indication_charging_time_fast" msgid="9018981952053914986">"Iyashaja ngokushesha (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ize igcwale)"</string> <string name="keyguard_indication_charging_time_slowly" msgid="955252797961724952">"Iyashaja kancane (<xliff:g id="CHARGING_TIME_LEFT">%s</xliff:g> ize igcwale)"</string> @@ -448,7 +445,7 @@ <string name="clock_seconds_desc" msgid="6282693067130470675">"Bonisa amasekhondi wewashi kubha yesimo. Ingathinta impilo yebhethri."</string> <string name="qs_rearrange" msgid="8060918697551068765">"Hlela kabusha izilungiselelo ezisheshayo"</string> <string name="show_brightness" msgid="6613930842805942519">"Bonisa ukukhanya kuzilungiselelo ezisheshayo"</string> - <string name="overview_nav_bar_gesture" msgid="1852503363271291341">"Nika amandla isisheshisi sokuhlukanisa isikrini sokuswayiphela phezulu"</string> + <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Nika amandla ukuthinta kokuswayiphela phezulu ukuhlukanisa isikrini"</string> <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Nika amandla ukuthinta ukuze ungene ekuhlukaniseni isikrini ngokuswayiphela phezulu kusukela kunkinobho yokubuka konke"</string> <string name="experimental" msgid="6198182315536726162">"Okokulinga"</string> <string name="enable_bluetooth_title" msgid="5027037706500635269">"Vula i-Bluetooth?"</string> @@ -468,19 +465,22 @@ <string name="notification_importance_max" msgid="5236987171904756134">"Bheka kusikrini uphinde wenze umsindo"</string> <string name="notification_more_settings" msgid="816306283396553571">"Izilungiselelo eziningi"</string> <string name="notification_done" msgid="5279426047273930175">"Kwenziwe"</string> - <string name="color_matrix_none" msgid="2121957926040543148">"Imibala ejwayelekile"</string> - <string name="color_matrix_night" msgid="5943817622105307072">"Imibala yasebusuku"</string> - <string name="color_matrix_custom" msgid="3655576492322298713">"Imibala yangokwezifiso"</string> - <string name="color_matrix_auto" msgid="4896624757412029265">"Okuzenzakalelayo"</string> - <string name="color_matrix_unknown" msgid="2709202104256265107">"Imibala engaziwa"</string> - <string name="color_transform" msgid="6985460408079086090">"Ukulungiswa kombala"</string> - <string name="color_matrix_show_qs" msgid="1763244354399276679">"Bonisa ithayili lezilungiselelo ezisheshayo"</string> - <string name="color_enable_custom" msgid="6729001308217347501">"Nika amandla ukuguqulwa kwangokwezifiso"</string> + <string name="color_and_appearance" msgid="1254323855964993144">"Umbala nokubonakala"</string> + <string name="night_mode" msgid="3540405868248625488">"Imodi yasebusuku"</string> + <string name="calibrate_display" msgid="5974642573432039217">"Sika isibonisi"</string> + <string name="night_mode_on" msgid="5597545513026541108">"Vuliwe"</string> + <string name="night_mode_off" msgid="8035605276956057508">"Valiwe"</string> + <string name="turn_on_automatically" msgid="4167565356762016083">"Vula ngokuzenzakalela"</string> + <string name="turn_on_auto_summary" msgid="2190994512406701520">"Shintshela kwimodi yasebusuku njengokuqondile ngendawo nesikhathi sosuku"</string> + <string name="when_night_mode_on" msgid="2969436026899172821">"Uma imodi yasebusuku ivulekile"</string> + <string name="use_dark_theme" msgid="2900938704964299312">"Sebenzisa ingqikithi emnyama ku-Android OS"</string> + <string name="adjust_tint" msgid="3398569573231409878">"Lungisa i-tint"</string> + <string name="adjust_brightness" msgid="980039329808178246">"Lungisa ukukhanya"</string> + <string name="night_mode_disclaimer" msgid="3297928749219711334">"Ingqikithi emnyama isetshenziswa ezindaweni eziqinile ze-Android OS ezivame ukuboniswa ngengqikithi ekhanyayo, njengamasethingi nezaziso."</string> <string name="color_apply" msgid="9212602012641034283">"Sebenzisa"</string> <string name="color_revert_title" msgid="4746666545480534663">"Qinisekisa izilungiselelo"</string> <string name="color_revert_message" msgid="9116001069397996691">"Ezinye izilungiselelo zombala zingenza le divayisi ingasebenziseki. Chofoza ku-KULUNGILE ukuze uqinisekise lezi zilungiselelo zombala, uma kungenjalo lezi zilungiselelo zizosethwa kabusha ngemuva kwamasekhondi angu-10."</string> - <!-- no translation found for battery_panel_title (7944156115535366613) --> - <skip /> + <string name="battery_panel_title" msgid="7944156115535366613">"Ukusetshenziswa kwebhethri"</string> <string name="battery_detail_charging_summary" msgid="1279095653533044008">"Isilondolozi sebhethri asitholakali ngesikhathi sokushaja"</string> <string name="battery_detail_switch_title" msgid="6285872470260795421">"Isilondolozi sebhethri"</string> <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Sehlisa ukusebenza nedatha yasemuva"</string> @@ -488,21 +488,20 @@ <string name="keyboard_shortcut_group_system_home" msgid="3054369431319891965">"Ekhaya"</string> <string name="keyboard_shortcut_group_system_recents" msgid="3154851905021926744">"Okwakamuva"</string> <string name="keyboard_shortcut_group_system_back" msgid="2207004531216446378">"Emuva"</string> - <string name="tuner_full_zen_title" msgid="5905081395132280054">"Bonisa ukungaphazamisi kuvolumu"</string> - <string name="tuner_full_zen_summary" msgid="6883568374520596402">"Vumela ulawulo olugcwele lokungaphazamisi kungxoxo yevolumu."</string> - <string name="volume_and_do_not_disturb" msgid="3114580364524650941">"Ivolumu nokungaphazamisi"</string> - <string name="volume_down_silent" msgid="66962568467719591">"Faka ukungaphazamisi ekwehliseni ivolumu"</string> + <string name="tuner_full_zen_title" msgid="4540823317772234308">"Bonisa ngezilawuli zevolomu"</string> + <string name="volume_and_do_not_disturb" msgid="3373784330208603030">"Ungaphazamisi"</string> + <string name="volume_dnd_silent" msgid="4363882330723050727">"Izinqamuleli zezinkinobho zevolomu"</string> <string name="volume_up_silent" msgid="7141255269783588286">"Phuma kokuthi ungaphazamisi ekukhuphuleni ivolumu"</string> <string name="battery" msgid="7498329822413202973">"Ibhethri"</string> <string name="clock" msgid="7416090374234785905">"Iwashi"</string> <string name="headset" msgid="4534219457597457353">"Ama-earphone"</string> <string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Amahedfoni axhunyiwe"</string> <string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Ama-earphone axhunyiwe"</string> - <string name="tuner_status_bar_explanation" msgid="9032196769944137864">"Nika amandla noma khubaza izithonjana kusukela ekubonisweni kubha yesimo."</string> <string name="data_saver" msgid="5037565123367048522">"Iseva yedatha"</string> <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Iseva yedatha ivuliwe"</string> <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Iseva yedatha ivaliwe"</string> <string name="switch_bar_on" msgid="1142437840752794229">"Vuliwe"</string> + <string name="switch_bar_off" msgid="8803270596930432874">"Valiwe"</string> <string name="nav_bar" msgid="1993221402773877607">"Ibha yokuzula"</string> <string name="start" msgid="6873794757232879664">"Qala"</string> <string name="center" msgid="4327473927066010960">"Maphakathi"</string> @@ -525,4 +524,15 @@ <string name="preview" msgid="9077832302472282938">"Hlola kuqala"</string> <string name="drag_to_add_tiles" msgid="7058945779098711293">"Hudula ukuze ungeze amathayili"</string> <string name="qs_edit" msgid="2232596095725105230">"Hlela"</string> + <string name="tuner_time" msgid="6572217313285536011">"Isikhathi"</string> + <string-array name="clock_options"> + <item msgid="5965318737560463480">"Bonisa amahora, amaminithi, namasekhondi"</item> + <item msgid="1427801730816895300">"Bonisa amahora namaminithi (okuzenzakalelayo)"</item> + <item msgid="3830170141562534721">"Ungabonisi lesi sithonjana"</item> + </string-array> + <string-array name="battery_options"> + <item msgid="3160236755818672034">"Njlalo bonisa iphesentheji"</item> + <item msgid="2139628951880142927">"Bonisa iphesentheji uma ishaja (okuzenzakalelayo)"</item> + <item msgid="3327323682209964956">"Ungabonisi lesi sithonjana"</item> + </string-array> </resources> diff --git a/packages/SystemUI/res/values/attrs.xml b/packages/SystemUI/res/values/attrs.xml index 19bc75594db8..189eb3be302a 100644 --- a/packages/SystemUI/res/values/attrs.xml +++ b/packages/SystemUI/res/values/attrs.xml @@ -91,6 +91,7 @@ <declare-styleable name="TunerSwitch"> <attr name="defValue" format="boolean" /> + <attr name="metricsAction" format="integer" /> </declare-styleable> </resources> diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml index ee61e00225a6..177102f6e5f6 100644 --- a/packages/SystemUI/res/values/dimens.xml +++ b/packages/SystemUI/res/values/dimens.xml @@ -174,8 +174,8 @@ <dimen name="qs_tile_margin">16dp</dimen> <dimen name="qs_quick_tile_size">48dp</dimen> <dimen name="qs_quick_tile_padding">12dp</dimen> - <dimen name="qs_date_anim_translation">36dp</dimen> - <dimen name="qs_date_alarm_anim_translation">26dp</dimen> + <dimen name="qs_date_anim_translation">32dp</dimen> + <dimen name="qs_date_alarm_anim_translation">22dp</dimen> <dimen name="qs_date_collapsed_text_size">14sp</dimen> <dimen name="qs_date_text_size">16sp</dimen> <dimen name="qs_header_gear_translation">150dp</dimen> @@ -203,6 +203,7 @@ <dimen name="qs_data_usage_text_size">14sp</dimen> <dimen name="qs_data_usage_usage_text_size">36sp</dimen> <dimen name="qs_expand_margin">0dp</dimen> + <dimen name="qs_battery_padding">2dp</dimen> <dimen name="segmented_button_spacing">0dp</dimen> <dimen name="borderless_button_radius">2dp</dimen> @@ -351,8 +352,8 @@ <!-- The margin between the clock and the notifications on Keyguard. See keyguard_clock_height_fraction_* for the difference between min and max.--> - <dimen name="keyguard_clock_notifications_margin_min">24dp</dimen> - <dimen name="keyguard_clock_notifications_margin_max">36dp</dimen> + <dimen name="keyguard_clock_notifications_margin_min">30dp</dimen> + <dimen name="keyguard_clock_notifications_margin_max">42dp</dimen> <dimen name="heads_up_scrim_height">250dp</dimen> <!-- The minimum amount the user needs to swipe to go to the camera / phone. --> @@ -528,6 +529,13 @@ <dimen name="battery_margin_bottom">0dp</dimen> + <!-- Padding at the end of the view that displays the mobile signal icons. If the view is + empty, then this padding will not be added to that view. --> + <dimen name="mobile_signal_group_end_padding">0dp</dimen> + + <!-- Padding between the mobile data type and the strength indicator. --> + <dimen name="mobile_data_icon_start_padding">0dp</dimen> + <!-- Extra padding between the mobile data type icon and the strength indicator when the data type icon is wide. --> <dimen name="wide_type_icon_start_padding">2dp</dimen> diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index 0bd7c4e18a67..26c3f3ab3546 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -1270,7 +1270,7 @@ <!-- SysUI Tuner: Disclaimer about using dark theme with night mode [CHAR LIMIT=NONE] --> <string name="night_mode_disclaimer">The dark theme is applied to core areas of Android OS that are normally displayed in a light theme, - such as Settings and notifications.</string> + such as Settings.</string> <!-- Button to apply settings [CHAR LIMIT=30] --> <string name="color_apply">Apply</string> diff --git a/packages/SystemUI/res/xml/tuner_prefs.xml b/packages/SystemUI/res/xml/tuner_prefs.xml index 023a3f047755..f4a0cc92f30d 100644 --- a/packages/SystemUI/res/xml/tuner_prefs.xml +++ b/packages/SystemUI/res/xml/tuner_prefs.xml @@ -109,21 +109,29 @@ android:key="volume_and_do_not_disturb" android:title="@string/volume_and_do_not_disturb"> + <!-- Action for this is + MetricsConstants.ACTION_TUNER_DO_NOT_DISTURB_VOLUME_PANEL --> <com.android.systemui.tuner.TunerSwitch android:key="sysui_show_full_zen" - android:title="@string/tuner_full_zen_title" /> + android:title="@string/tuner_full_zen_title" + sysui:metricsAction="314" /> + <!-- Action for this is + MetricsConstants.ACTION_TUNER_DO_NOT_DISTURB_VOLUME_SHORTCUT --> <com.android.systemui.tuner.TunerSwitch android:key="sysui_volume_down_silent,sysui_volume_up_silent" android:title="@string/volume_dnd_silent" - sysui:defValue="true" /> + sysui:defValue="true" + sysui:metricsAction="315" /> </PreferenceScreen> + <!-- <Preference android:key="nav_bar" android:title="@string/nav_bar" android:fragment="com.android.systemui.tuner.NavBarTuner" /> + --> <PreferenceScreen android:key="overview" diff --git a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java index 681b39e1ba43..41cce74a31dc 100644 --- a/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java +++ b/packages/SystemUI/src/com/android/systemui/SystemUIFactory.java @@ -18,11 +18,14 @@ package com.android.systemui; import android.content.Context; import android.util.Log; +import android.view.View; import android.view.ViewGroup; import com.android.internal.widget.LockPatternUtils; import com.android.keyguard.ViewMediatorCallback; +import com.android.systemui.statusbar.ScrimView; import com.android.systemui.statusbar.phone.KeyguardBouncer; +import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.phone.StatusBarWindowManager; @@ -66,4 +69,9 @@ public class SystemUIFactory { ViewGroup container) { return new KeyguardBouncer(context, callback, lockPatternUtils, windowManager, container); } + + public ScrimController createScrimController(ScrimView scrimBehind, ScrimView scrimInFront, + View headsUpScrim, boolean scrimSrcEnabled) { + return new ScrimController(scrimBehind, scrimInFront, headsUpScrim, scrimSrcEnabled); + } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java b/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java index 6479b0ce6833..dc645914e183 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSAnimator.java @@ -17,11 +17,8 @@ package com.android.systemui.qs; import android.util.Log; import android.view.View; import android.view.View.OnLayoutChangeListener; -import android.view.ViewGroup; -import android.view.animation.DecelerateInterpolator; import android.view.animation.PathInterpolator; import android.widget.TextView; -import com.android.systemui.Interpolators; import com.android.systemui.qs.PagedTileLayout.PageListener; import com.android.systemui.qs.QSPanel.QSTileLayout; import com.android.systemui.qs.QSTile.Host.Callback; @@ -42,6 +39,7 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha public static final float EXPANDED_TILE_DELAY = .7f; private final ArrayList<View> mAllViews = new ArrayList<>(); + private final ArrayList<View> mTopFiveQs = new ArrayList<>(); private final QuickQSPanel mQuickQsPanel; private final QSPanel mQsPanel; private final QSContainer mQsContainer; @@ -89,7 +87,10 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha firstPageDelayedBuilder.setStartDelay(EXPANDED_TILE_DELAY); firstPageBuilder.setListener(this); translationYBuilder.setInterpolator(TRANSLATION_Y_INTERPOLATOR); + // Fade in the tiles/labels as we reach the final position. + firstPageDelayedBuilder.addFloat(mQsPanel.getTileLayout(), "alpha", 0, 1); mAllViews.clear(); + mTopFiveQs.clear(); for (QSTile<?> tile : tiles) { QSTileBaseView tileView = mQsPanel.getTileView(tile); final TextView label = ((QSTileView) tileView).getLabel(); @@ -107,21 +108,17 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha translationYBuilder.addFloat(quickTileView, "translationY", 0, yDiff); // Counteract the parent translation on the tile. So we have a static base to - // animate off from. + // animate the label position off from. firstPageBuilder.addFloat(tileView, "translationY", mQsPanel.getHeight(), 0); - // Move the real tile's icon and label from the quick tile position to its final + // Move the real tile's label from the quick tile position to its final // location. - firstPageBuilder.addFloat(tileIcon, "translationX", -xDiff, 0); - translationYBuilder.addFloat(tileIcon, "translationY", -yDiff, 0); firstPageBuilder.addFloat(label, "translationX", -xDiff, 0); translationYBuilder.addFloat(label, "translationY", -yDiff, 0); - // Fade in the label as we reach the final position. - firstPageDelayedBuilder.addFloat(label, "alpha", 0, 1); + mTopFiveQs.add(tileIcon); + mAllViews.add(tileIcon); mAllViews.add(quickTileView); - } else { - firstPageDelayedBuilder.addFloat(tileView, "alpha", 0, 1); } mAllViews.add(tileView); mAllViews.add(label); @@ -162,17 +159,26 @@ public class QSAnimator implements Callback, PageListener, Listener, OnLayoutCha @Override public void onAnimationAtStart() { - } @Override public void onAnimationAtEnd() { mQuickQsPanel.setVisibility(View.INVISIBLE); + final int N = mTopFiveQs.size(); + for (int i = 0; i < N; i++) { + mTopFiveQs.get(i).setVisibility(View.VISIBLE); + } } @Override public void onAnimationStarted() { mQuickQsPanel.setVisibility(View.VISIBLE); + if (mOnFirstPage) { + final int N = mTopFiveQs.size(); + for (int i = 0; i < N; i++) { + mTopFiveQs.get(i).setVisibility(View.INVISIBLE); + } + } } private void clearAnimationState() { diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSIconView.java b/packages/SystemUI/src/com/android/systemui/qs/QSIconView.java index 1df372bc6f5e..267ed16d2d07 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSIconView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSIconView.java @@ -70,11 +70,13 @@ public class QSIconView extends ViewGroup { protected void setIcon(ImageView iv, QSTile.State state) { if (!Objects.equals(state.icon, iv.getTag(R.id.qs_icon_tag))) { Drawable d = state.icon != null ? state.icon.getDrawable(mContext) : null; + int padding = state.icon != null ? state.icon.getPadding() : null; if (d != null && state.autoMirrorDrawable) { d.setAutoMirrored(true); } iv.setImageDrawable(d); iv.setTag(R.id.qs_icon_tag, state.icon); + iv.setPadding(0, padding, 0, padding); if (d instanceof Animatable) { Animatable a = (Animatable) d; a.start(); diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java index f02424ba1a93..df622b8f374c 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSTile.java @@ -420,6 +420,10 @@ public abstract class QSTile<TState extends State> implements Listenable { public int hashCode() { return Icon.class.hashCode(); } + + public int getPadding() { + return 0; + } } public static class DrawableIcon extends Icon { diff --git a/packages/SystemUI/src/com/android/systemui/qs/TouchAnimator.java b/packages/SystemUI/src/com/android/systemui/qs/TouchAnimator.java index b33d31df1cbd..94d8524188ee 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/TouchAnimator.java +++ b/packages/SystemUI/src/com/android/systemui/qs/TouchAnimator.java @@ -14,8 +14,6 @@ package com.android.systemui.qs; -import android.animation.Keyframe; -import android.util.Log; import android.util.MathUtils; import android.util.Property; import android.view.View; @@ -34,7 +32,6 @@ import java.util.List; public class TouchAnimator { private final Object[] mTargets; - private final Property[] mProperties; private final KeyframeSet[] mKeyframeSets; private final float mStartDelay; private final float mEndDelay; @@ -43,10 +40,9 @@ public class TouchAnimator { private final Listener mListener; private float mLastT; - private TouchAnimator(Object[] targets, Property[] properties, KeyframeSet[] keyframeSets, + private TouchAnimator(Object[] targets, KeyframeSet[] keyframeSets, float startDelay, float endDelay, Interpolator interpolator, Listener listener) { mTargets = targets; - mProperties = properties; mKeyframeSets = keyframeSets; mStartDelay = startDelay; mEndDelay = endDelay; @@ -73,8 +69,7 @@ public class TouchAnimator { mLastT = t; } for (int i = 0; i < mTargets.length; i++) { - Object value = mKeyframeSets[i].getValue(t); - mProperties[i].set(mTargets[i], value); + mKeyframeSets[i].setValue(t, mTargets[i]); } } @@ -111,7 +106,6 @@ public class TouchAnimator { public static class Builder { private List<Object> mTargets = new ArrayList<>(); - private List<Property> mProperties = new ArrayList<>(); private List<KeyframeSet> mValues = new ArrayList<>(); private float mStartDelay; @@ -120,18 +114,17 @@ public class TouchAnimator { private Listener mListener; public Builder addFloat(Object target, String property, float... values) { - add(target, property, KeyframeSet.ofFloat(values)); + add(target, KeyframeSet.ofFloat(getProperty(target, property), values)); return this; } public Builder addInt(Object target, String property, int... values) { - add(target, property, KeyframeSet.ofInt(values)); + add(target, KeyframeSet.ofInt(getProperty(target, property), values)); return this; } - private void add(Object target, String property, KeyframeSet keyframeSet) { + private void add(Object target, KeyframeSet keyframeSet) { mTargets.add(target); - mProperties.add(getProperty(target, property)); mValues.add(keyframeSet); } @@ -183,7 +176,6 @@ public class TouchAnimator { public TouchAnimator build() { return new TouchAnimator(mTargets.toArray(new Object[mTargets.size()]), - mProperties.toArray(new Property[mProperties.size()]), mValues.toArray(new KeyframeSet[mValues.size()]), mStartDelay, mEndDelay, mInterpolator, mListener); } @@ -199,54 +191,57 @@ public class TouchAnimator { mFrameWidth = 1 / (float) (size - 1); } - Object getValue(float fraction) { + void setValue(float fraction, Object target) { int i; for (i = 1; i < mSize - 1 && fraction > mFrameWidth; i++); float amount = fraction / mFrameWidth; - return interpolate(i, amount); + interpolate(i, amount, target); } - protected abstract Object interpolate(int index, float amount); + protected abstract void interpolate(int index, float amount, Object target); - public static KeyframeSet ofInt(int... values) { - return new IntKeyframeSet(values); + public static KeyframeSet ofInt(Property property, int... values) { + return new IntKeyframeSet((Property<?, Integer>) property, values); } - public static KeyframeSet ofFloat(float... values) { - return new FloatKeyframeSet(values); + public static KeyframeSet ofFloat(Property property, float... values) { + return new FloatKeyframeSet((Property<?, Float>) property, values); } } - private static class FloatKeyframeSet extends KeyframeSet { + private static class FloatKeyframeSet<T> extends KeyframeSet { private final float[] mValues; + private final Property<T, Float> mProperty; - public FloatKeyframeSet(float[] values) { + public FloatKeyframeSet(Property<T, Float> property, float[] values) { super(values.length); + mProperty = property; mValues = values; } @Override - protected Object interpolate(int index, float amount) { + protected void interpolate(int index, float amount, Object target) { float firstFloat = mValues[index - 1]; float secondFloat = mValues[index]; - return firstFloat + (secondFloat - firstFloat) * amount; + mProperty.set((T) target, firstFloat + (secondFloat - firstFloat) * amount); } } - private static class IntKeyframeSet extends KeyframeSet { - + private static class IntKeyframeSet<T> extends KeyframeSet { private final int[] mValues; + private final Property<T, Integer> mProperty; - public IntKeyframeSet(int[] values) { + public IntKeyframeSet(Property<T, Integer> property, int[] values) { super(values.length); + mProperty = property; mValues = values; } @Override - protected Object interpolate(int index, float amount) { + protected void interpolate(int index, float amount, Object target) { int firstFloat = mValues[index - 1]; int secondFloat = mValues[index]; - return (int) (firstFloat + (secondFloat - firstFloat) * amount); + mProperty.set((T) target, (int) (firstFloat + (secondFloat - firstFloat) * amount)); } } } 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 81e15818aa1c..67fe8e5e2c54 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/QSCustomizer.java @@ -17,16 +17,20 @@ package com.android.systemui.qs.customize; import android.animation.Animator; import android.animation.Animator.AnimatorListener; +import android.animation.AnimatorListenerAdapter; import android.content.Context; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.GridLayoutManager; import android.support.v7.widget.RecyclerView; -import android.support.v7.widget.helper.ItemTouchHelper; import android.util.AttributeSet; +import android.util.TypedValue; import android.view.ContextThemeWrapper; +import android.view.Menu; +import android.view.MenuItem; import android.view.View; -import android.view.View.OnClickListener; import android.widget.LinearLayout; +import android.widget.Toolbar; +import android.widget.Toolbar.OnMenuItemClickListener; import com.android.systemui.R; import com.android.systemui.qs.QSDetailClipper; import com.android.systemui.qs.QSTile; @@ -42,7 +46,9 @@ import java.util.List; * This adds itself to the status bar window, so it can appear on top of quick settings and * *someday* do fancy animations to get into/out of it. */ -public class QSCustomizer extends LinearLayout implements AnimatorListener, OnClickListener { +public class QSCustomizer extends LinearLayout implements OnMenuItemClickListener { + + private static final int MENU_RESET = Menu.FIRST; private final QSDetailClipper mClipper; @@ -52,9 +58,7 @@ public class QSCustomizer extends LinearLayout implements AnimatorListener, OnCl private QSTileHost mHost; private RecyclerView mRecyclerView; private TileAdapter mTileAdapter; - private View mClose; - private View mSave; - private View mReset; + private Toolbar mToolbar; public QSCustomizer(Context context, AttributeSet attrs) { super(new ContextThemeWrapper(context, android.R.style.Theme_Material), attrs); @@ -69,17 +73,26 @@ public class QSCustomizer extends LinearLayout implements AnimatorListener, OnCl @Override protected void onFinishInflate() { super.onFinishInflate(); - mClose = findViewById(R.id.close); - mSave = findViewById(R.id.save); - mReset = findViewById(R.id.reset); - mClose.setOnClickListener(this); - mSave.setOnClickListener(this); - mReset.setOnClickListener(this); + mToolbar = (Toolbar) findViewById(com.android.internal.R.id.action_bar); + TypedValue value = new TypedValue(); + mContext.getTheme().resolveAttribute(android.R.attr.homeAsUpIndicator, value, true); + mToolbar.setNavigationIcon( + getResources().getDrawable(R.drawable.ic_close_white, mContext.getTheme())); + mToolbar.setNavigationOnClickListener(new OnClickListener() { + @Override + public void onClick(View v) { + save(); + hide((int) v.getX() + v.getWidth() / 2, (int) v.getY() + v.getHeight() / 2); + } + }); + mToolbar.setOnMenuItemClickListener(this); + mToolbar.getMenu().add(Menu.NONE, MENU_RESET, 0, + mContext.getString(com.android.internal.R.string.reset)); mRecyclerView = (RecyclerView) findViewById(android.R.id.list); mTileAdapter = new TileAdapter(getContext()); mRecyclerView.setAdapter(mTileAdapter); - new ItemTouchHelper(mTileAdapter.getCallback()).attachToRecyclerView(mRecyclerView); + mTileAdapter.getItemTouchHelper().attachToRecyclerView(mRecyclerView); GridLayoutManager layout = new GridLayoutManager(getContext(), 3); layout.setSpanSizeLookup(mTileAdapter.getSizeLookup()); mRecyclerView.setLayoutManager(layout); @@ -94,7 +107,7 @@ public class QSCustomizer extends LinearLayout implements AnimatorListener, OnCl isShown = true; mPhoneStatusBar.getStatusBarWindow().addView(this); setTileSpecs(); - mClipper.animateCircularClip(x, y, true, this); + mClipper.animateCircularClip(x, y, true, null); new TileQueryHelper(mContext, mHost).setListener(mTileAdapter); } } @@ -102,7 +115,7 @@ public class QSCustomizer extends LinearLayout implements AnimatorListener, OnCl public void hide(int x, int y) { if (isShown) { isShown = false; - mClipper.animateCircularClip(x, y, false, this); + mClipper.animateCircularClip(x, y, false, mCollapseAnimationListener); } } @@ -110,6 +123,16 @@ public class QSCustomizer extends LinearLayout implements AnimatorListener, OnCl return isShown; } + @Override + public boolean onMenuItemClick(MenuItem item) { + switch (item.getItemId()) { + case MENU_RESET: + reset(); + break; + } + return false; + } + private void reset() { ArrayList<String> tiles = new ArrayList<>(); String defTiles = mContext.getString(R.string.quick_settings_tiles_default); @@ -129,42 +152,21 @@ public class QSCustomizer extends LinearLayout implements AnimatorListener, OnCl private void save() { mTileAdapter.saveSpecs(mHost); - hide((int) mSave.getX() + mSave.getWidth() / 2, (int) mSave.getY() + mSave.getHeight() / 2); } - @Override - public void onClick(View v) { - if (v == mClose) { - hide((int) mClose.getX() + mClose.getWidth() / 2, - (int) mClose.getY() + mClose.getHeight() / 2); - } else if (v == mSave) { - save(); - } else if (v == mReset) { - reset(); + private final AnimatorListener mCollapseAnimationListener = new AnimatorListenerAdapter() { + @Override + public void onAnimationEnd(Animator animation) { + if (!isShown) { + mPhoneStatusBar.getStatusBarWindow().removeView(QSCustomizer.this); + } } - } - @Override - public void onAnimationEnd(Animator animation) { - if (!isShown) { - mPhoneStatusBar.getStatusBarWindow().removeView(this); + @Override + public void onAnimationCancel(Animator animation) { + if (!isShown) { + mPhoneStatusBar.getStatusBarWindow().removeView(QSCustomizer.this); + } } - } - - @Override - public void onAnimationCancel(Animator animation) { - if (!isShown) { - mPhoneStatusBar.getStatusBarWindow().removeView(this); - } - } - - @Override - public void onAnimationStart(Animator animation) { - // Don't care. - } - - @Override - public void onAnimationRepeat(Animator animation) { - // Don't care. - } + }; } diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java index fb3818cf9db1..876f41798521 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileAdapter.java @@ -24,9 +24,10 @@ import android.support.v7.widget.RecyclerView.ItemDecoration; import android.support.v7.widget.RecyclerView.State; import android.support.v7.widget.RecyclerView.ViewHolder; import android.support.v7.widget.helper.ItemTouchHelper; -import android.support.v7.widget.helper.ItemTouchHelper.Callback; import android.view.LayoutInflater; +import android.view.MotionEvent; import android.view.View; +import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.widget.FrameLayout; import com.android.systemui.R; @@ -52,6 +53,7 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta private final Context mContext; private final List<TileInfo> mTiles = new ArrayList<>(); + private final ItemTouchHelper mItemTouchHelper; private int mDividerIndex; private List<String> mCurrentSpecs; private List<TileInfo> mOtherTiles; @@ -61,6 +63,7 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta public TileAdapter(Context context) { mContext = context; + mItemTouchHelper = new ItemTouchHelper(mCallbacks); setHasStableIds(true); } @@ -69,8 +72,8 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta return mTiles.get(position) != null ? mAllTiles.indexOf(mTiles.get(position)) : -1; } - public Callback getCallback() { - return mCallbacks; + public ItemTouchHelper getItemTouchHelper() { + return mItemTouchHelper; } public ItemDecoration getItemDecoration() { @@ -148,11 +151,18 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta } @Override - public void onBindViewHolder(Holder holder, int position) { + public void onBindViewHolder(final Holder holder, int position) { if (holder.getItemViewType() == TYPE_EDIT) return; TileInfo info = mTiles.get(position); holder.mTileView.onStateChanged(info.state); + holder.mTileView.setOnTouchListener(new OnTouchListener() { + @Override + public boolean onTouch(View v, MotionEvent event) { + mItemTouchHelper.startDrag(holder); + return true; + } + }); } public SpanSizeLookup getSizeLookup() { @@ -266,9 +276,7 @@ public class TileAdapter extends RecyclerView.Adapter<Holder> implements TileSta int from = viewHolder.getAdapterPosition(); int to = target.getAdapterPosition(); if (to > mDividerIndex) { - if (from < mDividerIndex) { - to = mDividerIndex; - } else { + if (from >= mDividerIndex) { return false; } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java b/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java index 45f2d75b6233..c3610d93e193 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java +++ b/packages/SystemUI/src/com/android/systemui/qs/customize/TileQueryHelper.java @@ -16,6 +16,7 @@ package com.android.systemui.qs.customize; +import android.Manifest.permission; import android.app.ActivityManager; import android.content.ComponentName; import android.content.Context; @@ -132,6 +133,9 @@ public class TileQueryHelper { ComponentName componentName = new ComponentName(packageName, info.serviceInfo.name); String spec = CustomTile.toSpec(componentName); Drawable icon = info.serviceInfo.loadIcon(pm); + if (!permission.BIND_QUICK_SETTINGS_TILE.equals(info.serviceInfo.permission)) { + continue; + } if (icon != null) { icon.mutate(); icon.setTint(mContext.getColor(android.R.color.white)); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java index 93e075d945db..39d14473b271 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/BatteryTile.java @@ -15,16 +15,19 @@ */ package com.android.systemui.qs.tiles; +import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; +import android.content.IntentFilter; import android.graphics.drawable.Drawable; import android.os.Handler; -import android.provider.Settings; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.style.RelativeSizeSpan; import android.view.LayoutInflater; import android.view.View; +import android.view.View.OnAttachStateChangeListener; +import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.Checkable; import android.widget.ImageView; @@ -48,6 +51,7 @@ public class BatteryTile extends QSTile<QSTile.State> implements BatteryControll private int mLevel; private boolean mPowerSave; private boolean mCharging; + private boolean mDetailShown; public BatteryTile(Host host) { super(host); @@ -111,6 +115,12 @@ public class BatteryTile extends QSTile<QSTile.State> implements BatteryControll public Drawable getDrawable(Context context) { return mDrawable; } + + @Override + public int getPadding() { + return mHost.getContext().getResources().getDimensionPixelSize( + R.dimen.qs_battery_padding); + } }; state.label = percentage; } @@ -120,20 +130,21 @@ public class BatteryTile extends QSTile<QSTile.State> implements BatteryControll mLevel = level; mCharging = charging; refreshState((Integer) level); - if (mBatteryDetail.mCurrentView != null) { - mBatteryDetail.bindView(); + if (mDetailShown) { + mBatteryDetail.postBindView(); } } @Override public void onPowerSaveChanged(boolean isPowerSave) { mPowerSave = isPowerSave; - if (mBatteryDetail.mCurrentView != null) { - mBatteryDetail.bindView(); + if (mDetailShown) { + mBatteryDetail.postBindView(); } } - private final class BatteryDetail implements DetailAdapter, View.OnClickListener { + private final class BatteryDetail implements DetailAdapter, OnClickListener, + OnAttachStateChangeListener { private final BatteryMeterDrawable mDrawable = new BatteryMeterDrawable(mHost.getContext(), new Handler(), mHost.getContext().getColor(R.color.batterymeter_frame_color)); private View mCurrentView; @@ -155,10 +166,20 @@ public class BatteryTile extends QSTile<QSTile.State> implements BatteryControll false); } mCurrentView = convertView; + mCurrentView.addOnAttachStateChangeListener(this); bindView(); return convertView; } + private void postBindView() { + mCurrentView.post(new Runnable() { + @Override + public void run() { + bindView(); + } + }); + } + private void bindView() { mDrawable.onBatteryLevelChanged(100, false, false); mDrawable.onPowerSaveChanged(true); @@ -166,15 +187,15 @@ public class BatteryTile extends QSTile<QSTile.State> implements BatteryControll ((ImageView) mCurrentView.findViewById(android.R.id.icon)).setImageDrawable(mDrawable); Checkable checkbox = (Checkable) mCurrentView.findViewById(android.R.id.toggle); checkbox.setChecked(mPowerSave); - if (mCharging) { - BatteryInfo.getBatteryInfo(mContext, new BatteryInfo.Callback() { - @Override - public void onBatteryInfoLoaded(BatteryInfo info) { - if (mCurrentView != null) { - bindBatteryInfo(info); - } + BatteryInfo.getBatteryInfo(mContext, new BatteryInfo.Callback() { + @Override + public void onBatteryInfoLoaded(BatteryInfo info) { + if (mCurrentView != null) { + bindBatteryInfo(info); } - }); + } + }); + if (mCharging) { ((TextView) mCurrentView.findViewById(android.R.id.title)).setText( R.string.battery_detail_charging_summary); mCurrentView.findViewById(android.R.id.icon).setVisibility(View.INVISIBLE); @@ -228,5 +249,29 @@ public class BatteryTile extends QSTile<QSTile.State> implements BatteryControll public int getMetricsCategory() { return MetricsEvent.QS_BATTERY_DETAIL; } + + @Override + public void onViewAttachedToWindow(View v) { + if (!mDetailShown) { + mDetailShown = true; + v.getContext().registerReceiver(mReceiver, + new IntentFilter(Intent.ACTION_TIME_TICK)); + } + } + + @Override + public void onViewDetachedFromWindow(View v) { + if (mDetailShown) { + mDetailShown = false; + v.getContext().unregisterReceiver(mReceiver); + } + } + + private final BroadcastReceiver mReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + postBindView(); + } + }; } } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java index a1789a5a1d63..fa235d33e4e5 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/DataSaverTile.java @@ -61,8 +61,8 @@ public class DataSaverTile extends QSTile<QSTile.BooleanState> implements state.value = arg instanceof Boolean ? (Boolean) arg : mDataSaverController.isDataSaverEnabled(); state.label = mContext.getString(R.string.data_saver); - state.contentDescription = mContext.getString(state.value ? - R.string.accessibility_data_saver_on : R.string.accessibility_data_saver_off); + state.contentDescription = mContext.getString(state.value + ? R.string.accessibility_data_saver_on : R.string.accessibility_data_saver_off); state.icon = ResourceIcon.get(state.value ? R.drawable.ic_data_saver : R.drawable.ic_data_saver_off); } diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java index 33befd0058b9..fcf758b45868 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailItemView.java @@ -103,6 +103,11 @@ public class UserDetailItemView extends LinearLayout { mAvatar.setDisabled(disabled); } + public void setEnabled(boolean enabled) { + mName.setEnabled(enabled); + mAvatar.setDisabled(!enabled); + } + @Override protected void onFinishInflate() { mAvatar = (UserAvatarView) findViewById(R.id.user_picture); diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java index 2c8a4784e5f2..da9876235263 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/UserDetailView.java @@ -82,6 +82,9 @@ public class UserDetailView extends PseudoGridView { } v.setActivated(item.isCurrent); v.setDisabledByAdmin(item.isDisabledByAdmin); + if (!item.isSwitchToEnabled) { + v.setEnabled(false); + } v.setTag(item); return v; } @@ -94,7 +97,7 @@ public class UserDetailView extends PseudoGridView { final Intent intent = RestrictedLockUtils.getShowAdminSupportDetailsIntent( mContext, tag.enforcedAdmin); mController.startActivity(intent); - } else { + } else if (tag.isSwitchToEnabled) { MetricsLogger.action(mContext, MetricsEvent.QS_SWITCH_USER); switchTo(tag); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java index 315c5092922c..effe581ac9ca 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ActivatableNotificationView.java @@ -35,6 +35,7 @@ import android.view.animation.PathInterpolator; import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.classifier.FalsingManager; +import com.android.systemui.statusbar.notification.FakeShadowView; import com.android.systemui.statusbar.stack.NotificationStackScrollLayout; /** @@ -155,6 +156,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView } }; private float mShadowAlpha = 1.0f; + private FakeShadowView mFakeShadow; public ActivatableNotificationView(Context context, AttributeSet attrs) { super(context, attrs); @@ -180,6 +182,7 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView protected void onFinishInflate() { super.onFinishInflate(); mBackgroundNormal = (NotificationBackgroundView) findViewById(R.id.backgroundNormal); + mFakeShadow = (FakeShadowView) findViewById(R.id.fake_shadow); mBackgroundDimmed = (NotificationBackgroundView) findViewById(R.id.backgroundDimmed); mBackgroundNormal.setCustomBackground(R.drawable.notification_material_bg); mBackgroundDimmed.setCustomBackground(R.drawable.notification_material_bg_dim); @@ -852,6 +855,14 @@ public abstract class ActivatableNotificationView extends ExpandableOutlineView } } + @Override + public void setFakeShadowIntensity(float shadowIntensity, float outlineAlpha, int shadowYEnd, + int outlineTranslation) { + mFakeShadow.setFakeShadowTranslationZ(shadowIntensity * (getTranslationZ() + + FakeShadowView.SHADOW_SIBLING_TRESHOLD), outlineAlpha, shadowYEnd, + outlineTranslation); + } + public interface OnActivatedListener { void onActivated(ActivatableNotificationView view); void onActivationReset(ActivatableNotificationView view); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java index ea8b75ed164c..a0c63be9cfba 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java @@ -2139,15 +2139,21 @@ public abstract class BaseStatusBar extends SystemUI implements protected void updatePublicContentView(Entry entry, StatusBarNotification sbn) { final RemoteViews publicContentView = entry.cachedPublicContentView; - if (publicContentView != null && entry.getPublicContentView() != null) { + View inflatedView = entry.getPublicContentView(); + if (entry.autoRedacted && publicContentView != null && inflatedView != null) { final boolean disabledByPolicy = !adminAllowsUnredactedNotifications(entry.notification.getUserId()); - publicContentView.setTextViewText(android.R.id.title, - mContext.getString(disabledByPolicy - ? com.android.internal.R.string.notification_hidden_by_policy_text - : com.android.internal.R.string.notification_hidden_text)); - publicContentView.reapply(sbn.getPackageContext(mContext), - entry.getPublicContentView(), mOnClickHandler); + String notificationHiddenText = mContext.getString(disabledByPolicy + ? com.android.internal.R.string.notification_hidden_by_policy_text + : com.android.internal.R.string.notification_hidden_text); + TextView titleView = (TextView) inflatedView.findViewById(android.R.id.title); + if (titleView != null + && !titleView.getText().toString().equals(notificationHiddenText)) { + publicContentView.setTextViewText(android.R.id.title, notificationHiddenText); + publicContentView.reapply(sbn.getPackageContext(mContext), + inflatedView, mOnClickHandler); + entry.row.onNotificationUpdated(entry); + } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java index c73e115d9dd0..c72cec36a024 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java @@ -80,6 +80,7 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { /** Are we showing the "public" version */ private boolean mShowingPublic; private boolean mSensitive; + private boolean mSensitiveHiddenInGeneral; private boolean mShowingPublicInitialized; private boolean mHideSensitiveForIntrinsicHeight; @@ -1041,8 +1042,9 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { getShowingLayout().requestSelectLayout(needsAnimation || isUserLocked()); } - public void setSensitive(boolean sensitive) { + public void setSensitive(boolean sensitive, boolean hideSensitive) { mSensitive = sensitive; + mSensitiveHiddenInGeneral = hideSensitive; } public void setHideSensitiveForIntrinsicHeight(boolean hideSensitive) { @@ -1114,7 +1116,8 @@ public class ExpandableNotificationRow extends ActivatableNotificationView { private void updateClearability() { // public versions cannot be dismissed - mVetoButton.setVisibility(isClearable() && !mShowingPublic ? View.VISIBLE : View.GONE); + mVetoButton.setVisibility(isClearable() && (!mShowingPublic + || !mSensitiveHiddenInGeneral) ? View.VISIBLE : View.GONE); } public void setChildrenExpanded(boolean expanded, boolean animate) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableOutlineView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableOutlineView.java index 782a38cc4023..f98e87d4848c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableOutlineView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableOutlineView.java @@ -70,6 +70,11 @@ public abstract class ExpandableOutlineView extends ExpandableView { } } + @Override + public float getOutlineAlpha() { + return mOutlineAlpha; + } + protected void setOutlineRect(RectF rect) { if (rect != null) { setOutlineRect(rect.left, rect.top, rect.right, rect.bottom); @@ -80,6 +85,11 @@ public abstract class ExpandableOutlineView extends ExpandableView { } } + @Override + public int getOutlineTranslation() { + return mCustomOutline ? mOutlineRect.left : 0; + } + protected void setOutlineRect(float left, float top, float right, float bottom) { setOutlineRect(true, left, top, right, bottom); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java index 3176e2e1851a..c9e1cff9c865 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java @@ -399,6 +399,18 @@ public abstract class ExpandableView extends FrameLayout { return false; } + public void setFakeShadowIntensity(float shadowIntensity, float outlineAlpha, int shadowYEnd, + int outlineTranslation) { + } + + public float getOutlineAlpha() { + return 0.0f; + } + + public int getOutlineTranslation() { + return 0; + } + /** * A listener notifying when {@link #getActualHeight} changes. */ diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java index 647f0bfd0e26..bc859229b451 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationContentView.java @@ -523,7 +523,13 @@ public class NotificationContentView extends FrameLayout { } public void setDark(boolean dark, boolean fade, long delay) { - if (mDark == dark || mContractedChild == null) return; + setDark(dark, fade, delay, false /* force */); + } + + public void setDark(boolean dark, boolean fade, long delay, boolean force) { + if ((!force && mDark == dark) || mContractedChild == null) { + return; + } mDark = dark; dark = dark && !mShowingLegacyBackground; if (mVisibleType == VISIBLE_TYPE_CONTRACTED || !dark) { @@ -571,7 +577,6 @@ public class NotificationContentView extends FrameLayout { selectLayout(false /* animate */, true /* force */); if (mContractedChild != null) { mContractedWrapper.notifyContentUpdated(entry.notification); - mContractedWrapper.setDark(mDark, false /* animate */, 0 /* delay */); } if (mExpandedChild != null) { mExpandedWrapper.notifyContentUpdated(entry.notification); @@ -579,6 +584,7 @@ public class NotificationContentView extends FrameLayout { if (mHeadsUpChild != null) { mHeadsUpWrapper.notifyContentUpdated(entry.notification); } + setDark(mDark, false /* animate */, 0 /* delay */, true /* force */); } private void updateSingleLineView() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java index 9aa5ea0c3032..444916acb69d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java @@ -90,6 +90,8 @@ public class SignalClusterView View mWifiSignalSpacer; LinearLayout mMobileSignalGroup; + private final int mMobileSignalGroupEndPadding; + private final int mMobileDataIconStartPadding; private final int mWideTypeIconStartPadding; private final int mSecondaryTelephonyPadding; private final int mEndPadding; @@ -113,6 +115,10 @@ public class SignalClusterView super(context, attrs, defStyle); Resources res = getResources(); + mMobileSignalGroupEndPadding = + res.getDimensionPixelSize(R.dimen.mobile_signal_group_end_padding); + mMobileDataIconStartPadding = + res.getDimensionPixelSize(R.dimen.mobile_data_icon_start_padding); mWideTypeIconStartPadding = res.getDimensionPixelSize(R.dimen.wide_type_icon_start_padding); mSecondaryTelephonyPadding = res.getDimensionPixelSize(R.dimen.secondary_telephony_padding); mEndPadding = res.getDimensionPixelSize(R.dimen.signal_cluster_battery_padding); @@ -206,6 +212,10 @@ public class SignalClusterView for (PhoneState state : mPhoneStates) { mMobileSignalGroup.addView(state.mMobileGroup); } + + int endPadding = mMobileSignalGroup.getChildCount() > 0 ? mMobileSignalGroupEndPadding : 0; + mMobileSignalGroup.setPaddingRelative(0, 0, endPadding, 0); + TunerService.get(mContext).addTunable(this, StatusBarIconController.ICON_BLACKLIST); apply(); @@ -577,9 +587,11 @@ public class SignalClusterView // When this isn't next to wifi, give it some extra padding between the signals. mMobileGroup.setPaddingRelative(isSecondaryIcon ? mSecondaryTelephonyPadding : 0, 0, 0, 0); - mMobile.setPaddingRelative(mIsMobileTypeIconWide ? mWideTypeIconStartPadding : 0, + mMobile.setPaddingRelative( + mIsMobileTypeIconWide ? mWideTypeIconStartPadding : mMobileDataIconStartPadding, 0, 0, 0); - mMobileDark.setPaddingRelative(mIsMobileTypeIconWide ? mWideTypeIconStartPadding : 0, + mMobileDark.setPaddingRelative( + mIsMobileTypeIconWide ? mWideTypeIconStartPadding : mMobileDataIconStartPadding, 0, 0, 0); if (DEBUG) Log.d(TAG, String.format("mobile: %s sig=%d typ=%d", @@ -592,12 +604,19 @@ public class SignalClusterView private void updateAnimatableIcon(ImageView view, int resId) { maybeStopAnimatableDrawable(view); - view.setImageResource(resId); + setIconForView(view, resId); maybeStartAnimatableDrawable(view); } private void maybeStopAnimatableDrawable(ImageView view) { Drawable drawable = view.getDrawable(); + + // Check if the icon has been scaled. If it has retrieve the actual drawable out of the + // wrapper. + if (drawable instanceof ScalingDrawableWrapper) { + drawable = ((ScalingDrawableWrapper) drawable).getDrawable(); + } + if (drawable instanceof Animatable) { Animatable ad = (Animatable) drawable; if (ad.isRunning()) { @@ -608,6 +627,13 @@ public class SignalClusterView private void maybeStartAnimatableDrawable(ImageView view) { Drawable drawable = view.getDrawable(); + + // Check if the icon has been scaled. If it has retrieve the actual drawable out of the + // wrapper. + if (drawable instanceof ScalingDrawableWrapper) { + drawable = ((ScalingDrawableWrapper) drawable).getDrawable(); + } + if (drawable instanceof Animatable) { Animatable ad = (Animatable) drawable; if (!ad.isRunning()) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/FakeShadowView.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/FakeShadowView.java new file mode 100644 index 000000000000..32c26ba8ba13 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/FakeShadowView.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ + +package com.android.systemui.statusbar.notification; + +import android.annotation.Nullable; +import android.content.Context; +import android.graphics.Outline; +import android.util.AttributeSet; +import android.view.View; +import android.view.ViewGroup; +import android.view.ViewOutlineProvider; +import android.widget.LinearLayout; + +import com.android.systemui.statusbar.AlphaOptimizedFrameLayout; + +/** + * A view used to cast a shadow of a certain size on another view + */ +public class FakeShadowView extends AlphaOptimizedFrameLayout { + public static final float SHADOW_SIBLING_TRESHOLD = 0.1f; + + private View mFakeShadow; + private float mOutlineAlpha; + + public FakeShadowView(Context context) { + this(context, null); + } + + public FakeShadowView(Context context, @Nullable AttributeSet attrs) { + this(context, attrs, 0); + } + + public FakeShadowView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) { + this(context, attrs, defStyleAttr, 0); + } + + public FakeShadowView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, + int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + mFakeShadow = new View(context); + mFakeShadow.setVisibility(INVISIBLE); + mFakeShadow.setLayoutParams(new LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + (int) (48 * getResources().getDisplayMetrics().density))); + mFakeShadow.setOutlineProvider(new ViewOutlineProvider() { + @Override + public void getOutline(View view, Outline outline) { + outline.setRect(0, 0, getWidth(), mFakeShadow.getHeight()); + outline.setAlpha(mOutlineAlpha); + } + }); + addView(mFakeShadow); + } + + public void setFakeShadowTranslationZ(float fakeShadowTranslationZ, float outlineAlpha, + int shadowYEnd, int outlineTranslation) { + if (fakeShadowTranslationZ == 0.0f) { + mFakeShadow.setVisibility(INVISIBLE); + } else { + mFakeShadow.setVisibility(VISIBLE); + mFakeShadow.setTranslationZ(fakeShadowTranslationZ); + mFakeShadow.setTranslationX(outlineTranslation); + mFakeShadow.setTranslationY(shadowYEnd - mFakeShadow.getHeight()); + if (outlineAlpha != mOutlineAlpha) { + mOutlineAlpha = outlineAlpha; + mFakeShadow.invalidateOutline(); + } + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ExpandableIndicator.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ExpandableIndicator.java index 8c7c71f11159..04095e76add4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ExpandableIndicator.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ExpandableIndicator.java @@ -45,6 +45,7 @@ public class ExpandableIndicator extends ImageView { final AnimatedVectorDrawable avd = (AnimatedVectorDrawable) getContext() .getDrawable(res).getConstantState().newDrawable(); setImageDrawable(avd); + avd.forceAnimationOnUI(); avd.start(); } } 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 b9e1ad2e41c2..ee88b0041b7d 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java @@ -16,7 +16,11 @@ package com.android.systemui.statusbar.phone; +import android.app.ActivityManager; import android.content.Context; +import android.os.UserHandle; +import android.os.UserManager; +import android.util.Slog; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; @@ -42,6 +46,8 @@ import static com.android.keyguard.KeyguardSecurityModel.SecurityMode; */ public class KeyguardBouncer { + final static private String TAG = "KeyguardBouncer"; + protected Context mContext; protected ViewMediatorCallback mCallback; protected LockPatternUtils mLockPatternUtils; @@ -73,6 +79,11 @@ public class KeyguardBouncer { } public void show(boolean resetSecuritySelection) { + final int keyguardUserId = KeyguardUpdateMonitor.getCurrentUser(); + if (keyguardUserId == UserHandle.USER_SYSTEM && UserManager.isSplitSystemUser()) { + // In split system user mode, we never unlock system user. + return; + } mFalsingManager.onBouncerShown(); ensureView(); if (resetSecuritySelection) { @@ -84,14 +95,25 @@ public class KeyguardBouncer { return; } - // Try to dismiss the Keyguard. If no security pattern is set, this will dismiss the whole - // Keyguard. If we need to authenticate, show the bouncer. - if (!mKeyguardView.dismiss()) { - mShowingSoon = true; + final int activeUserId = ActivityManager.getCurrentUser(); + final boolean allowDismissKeyguard = + !(UserManager.isSplitSystemUser() && activeUserId == UserHandle.USER_SYSTEM) + && activeUserId == keyguardUserId; + // If allowed, try to dismiss the Keyguard. If no security auth (password/pin/pattern) is + // set, this will dismiss the whole Keyguard. Otherwise, show the bouncer. + if (allowDismissKeyguard && mKeyguardView.dismiss()) { + return; + } - // Split up the work over multiple frames. - DejankUtils.postAfterTraversal(mShowRunnable); + // This condition may indicate an error on Android, so log it. + if (!allowDismissKeyguard) { + Slog.w(TAG, "User can't dismiss keyguard: " + activeUserId + " != " + keyguardUserId); } + + mShowingSoon = true; + + // Split up the work over multiple frames. + DejankUtils.postAfterTraversal(mShowRunnable); } private final Runnable mShowRunnable = new Runnable() { @@ -258,19 +280,8 @@ public class KeyguardBouncer { return mKeyguardView == null || mKeyguardView.getSecurityMode() != SecurityMode.None; } - public boolean onMenuPressed() { - ensureView(); - if (mKeyguardView.handleMenuKey()) { - - // We need to show it in case it is secure. If not, it will get dismissed in any case. - mRoot.setVisibility(View.VISIBLE); - mFalsingManager.onBouncerShown(); - mKeyguardView.requestFocus(); - mKeyguardView.onResume(); - return true; - } else { - return false; - } + public boolean shouldDismissOnMenuPressed() { + return mKeyguardView.shouldEnableMenuKey(); } public boolean interceptMediaKey(KeyEvent event) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenWallpaper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenWallpaper.java index 4f3c61e1119d..5b4a3f0039c9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenWallpaper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenWallpaper.java @@ -28,10 +28,13 @@ import android.os.Handler; import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.os.ServiceManager; +import android.os.UserHandle; import android.util.Log; import libcore.io.IoUtils; +import java.util.Objects; + /** * Manages the lockscreen wallpaper. */ @@ -42,11 +45,15 @@ public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implemen private final Context mContext; private final PhoneStatusBar mBar; private final IWallpaperManager mService; + private final WallpaperManager mWallpaperManager; private final Handler mH; private boolean mCached; private Bitmap mCache; - private int mUserId; + private int mCurrentUserId; + // The user selected in the UI, or null if no user is selected or UI doesn't support selecting + // users. + private UserHandle mSelectedUser; public LockscreenWallpaper(Context ctx, PhoneStatusBar bar, Handler h) { mContext = ctx; @@ -54,7 +61,8 @@ public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implemen mH = h; mService = IWallpaperManager.Stub.asInterface( ServiceManager.getService(Context.WALLPAPER_SERVICE)); - mUserId = ActivityManager.getCurrentUser(); + mWallpaperManager = (WallpaperManager) ctx.getSystemService(Context.WALLPAPER_SERVICE); + mCurrentUserId = ActivityManager.getCurrentUser(); try { mService.setLockWallpaperCallback(this); @@ -73,8 +81,12 @@ public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implemen mCache = null; return null; } + // Prefer the selected user (when specified) over the current user for the FLAG_SET_LOCK + // wallpaper. + final int lockWallpaperUserId = + mSelectedUser != null ? mSelectedUser.getIdentifier() : mCurrentUserId; ParcelFileDescriptor fd = mService.getWallpaper(null, WallpaperManager.FLAG_SET_LOCK, - new Bundle(), mUserId); + new Bundle(), lockWallpaperUserId); if (fd != null) { try { BitmapFactory.Options options = new BitmapFactory.Options(); @@ -90,8 +102,17 @@ public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implemen } } else { mCached = true; - mCache = null; - return null; + if (mSelectedUser != null && mSelectedUser.getIdentifier() != mCurrentUserId) { + // When selected user is different from the current user, show the selected + // user's static wallpaper. + mWallpaperManager.forgetLoadedWallpaper(); + mCache = mWallpaperManager.getBitmapAsUser(mSelectedUser.getIdentifier()); + } else { + // When there is no selected user, or it's same as the current user, show the + // system (possibly dynamic) wallpaper for the selected user. + mCache = null; + } + return mCache; } } catch (RemoteException e) { Log.e(TAG, "System dead?" + e); @@ -99,13 +120,23 @@ public class LockscreenWallpaper extends IWallpaperManagerCallback.Stub implemen } } - public void setUser(int user) { - if (user != mUserId) { + public void setCurrentUser(int user) { + if (user != mCurrentUserId) { mCached = false; - mUserId = user; + mCurrentUserId = user; } } + public void setSelectedUser(UserHandle selectedUser) { + if (Objects.equals(selectedUser, mSelectedUser)) { + return; + } + mSelectedUser = selectedUser; + + mH.removeCallbacks(this); + mH.post(this); + } + @Override public void onWallpaperChanged() { // Called on Binder thread. 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 1a0acbe86c6c..05ae41be33d4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java @@ -94,7 +94,7 @@ public class NotificationPanelView extends PanelView implements private TextView mClockView; private View mReserveNotificationSpace; private View mQsNavbarScrim; - private NotificationsQuickSettingsContainer mNotificationContainerParent; + protected NotificationsQuickSettingsContainer mNotificationContainerParent; protected NotificationStackScrollLayout mNotificationStackScroller; private boolean mAnimateNextTopPaddingChange; @@ -879,7 +879,11 @@ public class NotificationPanelView extends PanelView implements mQsTracking = false; mTrackingPointer = -1; trackMovement(event); - flingQsWithCurrentVelocity(y, event.getActionMasked() == MotionEvent.ACTION_CANCEL); + float fraction = getQsExpansionFraction(); + if (fraction != 0f || y >= mInitialTouchY) { + flingQsWithCurrentVelocity(y, + event.getActionMasked() == MotionEvent.ACTION_CANCEL); + } if (mVelocityTracker != null) { mVelocityTracker.recycle(); mVelocityTracker = null; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 1089852191fd..d25e99baf0c9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -27,7 +27,6 @@ import android.app.IWallpaperManagerCallback; import android.app.Notification; import android.app.PendingIntent; import android.app.StatusBarManager; -import android.app.WallpaperManager; import android.content.BroadcastReceiver; import android.content.ComponentCallbacks2; import android.content.ComponentName; @@ -69,7 +68,6 @@ import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; -import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserManager; import android.os.Vibrator; @@ -111,6 +109,7 @@ import com.android.systemui.EventLogTags; import com.android.systemui.Interpolators; import com.android.systemui.Prefs; import com.android.systemui.R; +import com.android.systemui.SystemUIFactory; import com.android.systemui.assist.AssistManager; import com.android.systemui.classifier.FalsingManager; import com.android.systemui.doze.DozeHost; @@ -295,7 +294,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, AccessibilityController mAccessibilityController; FingerprintUnlockController mFingerprintUnlockController; LightStatusBarController mLightStatusBarController; - private LockscreenWallpaper mLockscreenWallpaper; + protected LockscreenWallpaper mLockscreenWallpaper; int mNaturalBarHeight = -1; @@ -646,7 +645,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, // Lastly, call to the icon policy to install/update all the icons. mIconPolicy = new PhoneStatusBarPolicy(mContext, mIconController, mCastController, mHotspotController, mUserInfoController, mBluetoothController, - mRotationLockController); + mRotationLockController, mNetworkController.getDataSaverController()); mIconPolicy.setCurrentUserSetup(mUserSetup); mSettingsObserver.onChange(false); // set up @@ -771,8 +770,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, ScrimView scrimBehind = (ScrimView) mStatusBarWindow.findViewById(R.id.scrim_behind); ScrimView scrimInFront = (ScrimView) mStatusBarWindow.findViewById(R.id.scrim_in_front); View headsUpScrim = mStatusBarWindow.findViewById(R.id.heads_up_scrim); - mScrimController = new ScrimController(scrimBehind, scrimInFront, headsUpScrim, - mScrimSrcModeEnabled); + mScrimController = SystemUIFactory.getInstance().createScrimController( + scrimBehind, scrimInFront, headsUpScrim, mScrimSrcModeEnabled); mHeadsUpManager.addListener(mScrimController); mStackScroller.setScrimController(mScrimController); mScrimController.setBackDropView(mBackdrop); @@ -1415,7 +1414,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, if (showingPublic) { updatePublicContentView(ent, ent.notification); } - ent.row.setSensitive(sensitive); + ent.row.setSensitive(sensitive, hideSensitive); if (ent.autoRedacted && ent.legacy) { // TODO: Also fade this? Or, maybe easier (and better), provide a dark redacted form // for legacy auto redacted notifications. @@ -3170,7 +3169,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, resetUserSetupObserver(); setControllerUsers(); clearCurrentMediaNotification(); - mLockscreenWallpaper.setUser(newUserId); + mLockscreenWallpaper.setCurrentUser(newUserId); updateMediaMetaData(true, false); } @@ -3878,7 +3877,13 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, } public boolean onMenuPressed() { - return mState == StatusBarState.KEYGUARD && mStatusBarKeyguardViewManager.onMenuPressed(); + if (mDeviceInteractive && mState != StatusBarState.SHADE + && mStatusBarKeyguardViewManager.shouldDismissOnMenuPressed()) { + animateCollapsePanels( + CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL /* flags */, true /* force */); + return true; + } + return false; } public void endAffordanceLaunch() { 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 6550c8736164..c883cc9284db 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java @@ -44,6 +44,7 @@ import com.android.systemui.statusbar.policy.BluetoothController; import com.android.systemui.statusbar.policy.BluetoothController.Callback; import com.android.systemui.statusbar.policy.CastController; import com.android.systemui.statusbar.policy.CastController.CastDevice; +import com.android.systemui.statusbar.policy.DataSaverController; import com.android.systemui.statusbar.policy.HotspotController; import com.android.systemui.statusbar.policy.RotationLockController; import com.android.systemui.statusbar.policy.UserInfoController; @@ -53,7 +54,7 @@ import com.android.systemui.statusbar.policy.UserInfoController; * bar at boot time. It goes through the normal API for icons, even though it probably * strictly doesn't need to. */ -public class PhoneStatusBarPolicy implements Callback, RotationLockController.RotationLockControllerCallback { +public class PhoneStatusBarPolicy implements Callback, RotationLockController.RotationLockControllerCallback, DataSaverController.Listener { private static final String TAG = "PhoneStatusBarPolicy"; private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); @@ -67,6 +68,7 @@ public class PhoneStatusBarPolicy implements Callback, RotationLockController.Ro private final String mSlotManagedProfile; private final String mSlotRotate; private final String mSlotHeadset; + private final String mSlotDataSaver; private final Context mContext; private final Handler mHandler = new Handler(); @@ -77,6 +79,7 @@ public class PhoneStatusBarPolicy implements Callback, RotationLockController.Ro private final UserManager mUserManager; private final StatusBarIconController mIconController; private final RotationLockController mRotationLockController; + private final DataSaverController mDataSaver; // Assume it's all good unless we hear otherwise. We don't always seem // to get broadcasts that it *is* there. @@ -97,7 +100,8 @@ public class PhoneStatusBarPolicy implements Callback, RotationLockController.Ro public PhoneStatusBarPolicy(Context context, StatusBarIconController iconController, CastController cast, HotspotController hotspot, UserInfoController userInfoController, - BluetoothController bluetooth, RotationLockController rotationLockController) { + BluetoothController bluetooth, RotationLockController rotationLockController, + DataSaverController dataSaver) { mContext = context; mIconController = iconController; mCast = cast; @@ -108,6 +112,7 @@ public class PhoneStatusBarPolicy implements Callback, RotationLockController.Ro mUserInfoController = userInfoController; mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE); mRotationLockController = rotationLockController; + mDataSaver = dataSaver; mSlotCast = context.getString(com.android.internal.R.string.status_bar_cast); mSlotHotspot = context.getString(com.android.internal.R.string.status_bar_hotspot); @@ -120,6 +125,7 @@ public class PhoneStatusBarPolicy implements Callback, RotationLockController.Ro com.android.internal.R.string.status_bar_managed_profile); mSlotRotate = context.getString(com.android.internal.R.string.status_bar_rotate); mSlotHeadset = context.getString(com.android.internal.R.string.status_bar_headset); + mSlotDataSaver = context.getString(com.android.internal.R.string.status_bar_data_saver); mRotationLockController.addRotationLockControllerCallback(this); @@ -176,6 +182,12 @@ public class PhoneStatusBarPolicy implements Callback, RotationLockController.Ro mIconController.setIcon(mSlotManagedProfile, R.drawable.stat_sys_managed_profile_status, mContext.getString(R.string.accessibility_managed_profile)); mIconController.setIconVisibility(mSlotManagedProfile, mManagedProfileIconVisible); + + // data saver + mIconController.setIcon(mSlotDataSaver, R.drawable.stat_sys_data_saver, + context.getString(R.string.accessibility_data_saver_on)); + mIconController.setIconVisibility(mSlotDataSaver, false); + mDataSaver.addListener(this); } public void setZenMode(int zen) { @@ -477,6 +489,11 @@ public class PhoneStatusBarPolicy implements Callback, RotationLockController.Ro } } + @Override + public void onDataSaverChanged(boolean isDataSaving) { + mIconController.setIconVisibility(mSlotDataSaver, isDataSaving); + } + private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java index ab8067ddebbe..cf5531fd3eb8 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QuickStatusBarHeader.java @@ -21,7 +21,6 @@ import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; -import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.graphics.drawable.RippleDrawable; import android.util.AttributeSet; @@ -129,14 +128,6 @@ public class QuickStatusBarHeader extends BaseStatusBarHeader implements ((RippleDrawable) getBackground()).setForceSoftware(true); ((RippleDrawable) mSettingsButton.getBackground()).setForceSoftware(true); - addOnLayoutChangeListener(new View.OnLayoutChangeListener() { - @Override - public void onLayoutChange(View v, int left, int top, int right, - int bottom, int oldLeft, int oldTop, int oldRight, int oldBottom) { - setClipBounds(new Rect(getPaddingLeft(), 0, getWidth() - getPaddingRight(), - getHeight())); - } - }); updateResources(); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index f310c2c2488c..fe76ae751520 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -56,16 +56,16 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, private static final int TAG_START_ALPHA = R.id.scrim_alpha_start; private static final int TAG_END_ALPHA = R.id.scrim_alpha_end; - private final ScrimView mScrimBehind; + protected final ScrimView mScrimBehind; private final ScrimView mScrimInFront; private final UnlockMethodCache mUnlockMethodCache; private final View mHeadsUpScrim; - private boolean mKeyguardShowing; + protected boolean mKeyguardShowing; private float mFraction; private boolean mDarkenWhileDragging; - private boolean mBouncerShowing; + protected boolean mBouncerShowing; private boolean mWakeAndUnlocking; private boolean mAnimateChange; private boolean mUpdatePending; @@ -203,7 +203,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, mUpdatePending = true; } - private void updateScrims() { + protected void updateScrims() { if (mAnimateKeyguardFadingOut || mForceHideScrims) { setScrimInFrontColor(0f); setScrimBehindColor(0f); 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 7a05b8f3b9c4..0e84f733cad4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -509,8 +509,8 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb return !(mLastShowing && !mLastOccluded) || mLastBouncerShowing || mLastRemoteInputActive; } - public boolean onMenuPressed() { - return mBouncer.onMenuPressed(); + public boolean shouldDismissOnMenuPressed() { + return mBouncer.shouldDismissOnMenuPressed(); } public boolean interceptMediaKey(KeyEvent event) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java index 186e8b51d58c..6dd196b8b0c0 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java @@ -60,6 +60,10 @@ public class DataSaverController { public void setDataSaverEnabled(boolean enabled) { mPolicyManager.setRestrictBackground(enabled); + try { + mPolicyListener.onRestrictBackgroundChanged(enabled); + } catch (RemoteException e) { + } } private final INetworkPolicyListener mPolicyListener = new INetworkPolicyListener.Stub() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcher.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcher.java index 867a8a3ca833..fb310a64a358 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcher.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyguardUserSwitcher.java @@ -21,6 +21,8 @@ import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.content.Context; import android.database.DataSetObserver; +import android.graphics.drawable.BitmapDrawable; +import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.view.LayoutInflater; import android.view.MotionEvent; @@ -242,7 +244,6 @@ public class KeyguardUserSwitcher { @Override public View getView(int position, View convertView, ViewGroup parent) { UserSwitcherController.UserRecord item = getItem(position); - if (!(convertView instanceof UserDetailItemView) || !(convertView.getTag() instanceof UserSwitcherController.UserRecord)) { convertView = LayoutInflater.from(mContext).inflate( @@ -252,11 +253,17 @@ public class KeyguardUserSwitcher { UserDetailItemView v = (UserDetailItemView) convertView; String name = getName(mContext, item); + Drawable drawable; if (item.picture == null) { - v.bind(name, getDrawable(mContext, item)); + drawable = getDrawable(mContext, item).mutate(); } else { - v.bind(name, item.picture); + drawable = new BitmapDrawable(mContext.getResources(), item.picture); + } + // Disable the icon if switching is disabled + if (!item.isSwitchToEnabled) { + drawable.setTint(mContext.getColor(R.color.qs_tile_disabled_color)); } + v.bind(name, drawable); convertView.setActivated(item.isCurrent); convertView.setTag(item); return convertView; @@ -269,7 +276,7 @@ public class KeyguardUserSwitcher { // Close the switcher if tapping the current user. Guest is excluded because // tapping the guest user while it's current clears the session. mKeyguardUserSwitcher.hideIfNotSimple(true /* animate */); - } else { + } else if (user.isSwitchToEnabled) { switchTo(user); } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java index 13369f2e36f5..53fd446b2444 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/UserSwitcherController.java @@ -99,6 +99,7 @@ public class UserSwitcherController { private boolean mSimpleUserSwitcher; private boolean mAddUsersWhenLocked; private boolean mPauseRefreshUsers; + private boolean mAllowUserSwitchingWhenSystemUserLocked; private SparseBooleanArray mForcePictureLoadForUserId = new SparseBooleanArray(2); public UserSwitcherController(Context context, KeyguardMonitor keyguardMonitor, @@ -115,6 +116,7 @@ public class UserSwitcherController { filter.addAction(Intent.ACTION_USER_INFO_CHANGED); filter.addAction(Intent.ACTION_USER_SWITCHED); filter.addAction(Intent.ACTION_USER_STOPPING); + filter.addAction(Intent.ACTION_USER_UNLOCKED); mContext.registerReceiverAsUser(mReceiver, UserHandle.SYSTEM, filter, null /* permission */, null /* scheduler */); @@ -130,6 +132,10 @@ public class UserSwitcherController { mContext.getContentResolver().registerContentObserver( Settings.Global.getUriFor(Settings.Global.ADD_USERS_WHEN_LOCKED), true, mSettingsObserver); + mContext.getContentResolver().registerContentObserver( + Settings.Global.getUriFor( + Settings.Global.ALLOW_USER_SWITCHING_WHEN_SYSTEM_USER_LOCKED), + true, mSettingsObserver); // Fetch initial values. mSettingsObserver.onChange(false); @@ -180,6 +186,8 @@ public class UserSwitcherController { } ArrayList<UserRecord> records = new ArrayList<>(infos.size()); int currentId = ActivityManager.getCurrentUser(); + boolean allowUserSwitching = mAllowUserSwitchingWhenSystemUserLocked + || mUserManager.isUserUnlocked(UserHandle.SYSTEM); UserInfo currentUserInfo = null; UserRecord guestRecord = null; int avatarSize = mContext.getResources() @@ -190,23 +198,27 @@ public class UserSwitcherController { if (isCurrent) { currentUserInfo = info; } - if (info.isGuest()) { - guestRecord = new UserRecord(info, null /* picture */, - true /* isGuest */, isCurrent, false /* isAddUser */, - false /* isRestricted */); - } else if (info.isEnabled() && info.supportsSwitchToByUser()) { - Bitmap picture = bitmaps.get(info.id); - if (picture == null) { - picture = mUserManager.getUserIcon(info.id); - - if (picture != null) { - picture = BitmapHelper.createCircularClip( - picture, avatarSize, avatarSize); + boolean switchToEnabled = allowUserSwitching || isCurrent; + if (info.isEnabled()) { + if (info.isGuest()) { + guestRecord = new UserRecord(info, null /* picture */, + true /* isGuest */, isCurrent, false /* isAddUser */, + false /* isRestricted */, switchToEnabled); + } else if (info.supportsSwitchToByUser()) { + Bitmap picture = bitmaps.get(info.id); + if (picture == null) { + picture = mUserManager.getUserIcon(info.id); + + if (picture != null) { + picture = BitmapHelper.createCircularClip( + picture, avatarSize, avatarSize); + } } + int index = isCurrent ? 0 : records.size(); + records.add(index, new UserRecord(info, picture, false /* isGuest */, + isCurrent, false /* isAddUser */, false /* isRestricted */, + switchToEnabled)); } - int index = isCurrent ? 0 : records.size(); - records.add(index, new UserRecord(info, picture, false /* isGuest */, - isCurrent, false /* isAddUser */, false /* isRestricted */)); } } @@ -228,7 +240,7 @@ public class UserSwitcherController { if (canCreateGuest) { guestRecord = new UserRecord(null /* info */, null /* picture */, true /* isGuest */, false /* isCurrent */, - false /* isAddUser */, createIsRestricted); + false /* isAddUser */, createIsRestricted, allowUserSwitching); checkIfAddUserDisallowedByAdminOnly(guestRecord); records.add(guestRecord); } @@ -241,7 +253,7 @@ public class UserSwitcherController { if (!mSimpleUserSwitcher && canCreateUser) { UserRecord addUserRecord = new UserRecord(null /* info */, null /* picture */, false /* isGuest */, false /* isCurrent */, true /* isAddUser */, - createIsRestricted); + createIsRestricted, allowUserSwitching); checkIfAddUserDisallowedByAdminOnly(addUserRecord); records.add(addUserRecord); } @@ -463,6 +475,12 @@ public class UserSwitcherController { } else if (Intent.ACTION_USER_INFO_CHANGED.equals(intent.getAction())) { forcePictureLoadForId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL); + } else if (Intent.ACTION_USER_UNLOCKED.equals(intent.getAction())) { + // Unlocking the system user may require a refresh + int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL); + if (userId != UserHandle.USER_SYSTEM) { + return; + } } refreshUsers(forcePictureLoadForId); if (unpauseRefreshUsers) { @@ -525,6 +543,9 @@ public class UserSwitcherController { SIMPLE_USER_SWITCHER_GLOBAL_SETTING, 0) != 0; mAddUsersWhenLocked = Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.ADD_USERS_WHEN_LOCKED, 0) != 0; + mAllowUserSwitchingWhenSystemUserLocked = Settings.Global.getInt( + mContext.getContentResolver(), + Settings.Global.ALLOW_USER_SWITCHING_WHEN_SYSTEM_USER_LOCKED, 0) != 0; refreshUsers(UserHandle.USER_NULL); }; }; @@ -646,26 +667,29 @@ public class UserSwitcherController { public final boolean isRestricted; public boolean isDisabledByAdmin; public EnforcedAdmin enforcedAdmin; + public boolean isSwitchToEnabled; public UserRecord(UserInfo info, Bitmap picture, boolean isGuest, boolean isCurrent, - boolean isAddUser, boolean isRestricted) { + boolean isAddUser, boolean isRestricted, boolean isSwitchToEnabled) { this.info = info; this.picture = picture; this.isGuest = isGuest; this.isCurrent = isCurrent; this.isAddUser = isAddUser; this.isRestricted = isRestricted; + this.isSwitchToEnabled = isSwitchToEnabled; } public UserRecord copyWithIsCurrent(boolean _isCurrent) { - return new UserRecord(info, picture, isGuest, _isCurrent, isAddUser, isRestricted); + return new UserRecord(info, picture, isGuest, _isCurrent, isAddUser, isRestricted, + isSwitchToEnabled); } public String toString() { StringBuilder sb = new StringBuilder(); sb.append("UserRecord("); if (info != null) { - sb.append("name=\"" + info.name + "\" id=" + info.id); + sb.append("name=\"").append(info.name).append("\" id=").append(info.id); } else { if (isGuest) { sb.append("<add guest placeholder>"); @@ -680,7 +704,10 @@ public class UserSwitcherController { if (isRestricted) sb.append(" <isRestricted>"); if (isDisabledByAdmin) { sb.append(" <isDisabledByAdmin>"); - sb.append(" enforcedAdmin=" + enforcedAdmin); + sb.append(" enforcedAdmin=").append(enforcedAdmin); + } + if (isSwitchToEnabled) { + sb.append(" <isSwitchToEnabled>"); } sb.append(')'); return sb.toString(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java index f078b53a9e10..fe06c3affa12 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java @@ -63,6 +63,7 @@ import com.android.systemui.statusbar.NotificationSettingsIconRow; import com.android.systemui.statusbar.NotificationSettingsIconRow.SettingsIconRowListener; import com.android.systemui.statusbar.StackScrollerDecorView; import com.android.systemui.statusbar.StatusBarState; +import com.android.systemui.statusbar.notification.FakeShadowView; import com.android.systemui.statusbar.phone.NotificationGroupManager; import com.android.systemui.statusbar.phone.PhoneStatusBar; import com.android.systemui.statusbar.phone.ScrimController; @@ -70,6 +71,8 @@ import com.android.systemui.statusbar.policy.HeadsUpManager; import com.android.systemui.statusbar.policy.ScrollAdapter; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.HashSet; /** @@ -93,7 +96,7 @@ public class NotificationStackScrollLayout extends ViewGroup private static final int INVALID_POINTER = -1; private ExpandHelper mExpandHelper; - private SwipeHelper mSwipeHelper; + private NotificationSwipeHelper mSwipeHelper; private boolean mSwipingInProgress; private int mCurrentStackHeight = Integer.MAX_VALUE; private final Paint mBackgroundPaint = new Paint(); @@ -277,6 +280,7 @@ public class NotificationStackScrollLayout extends ViewGroup private int mBgColor; private float mDimAmount; private ValueAnimator mDimAnimator; + private ArrayList<ExpandableView> mTmpSortedChildren = new ArrayList<>(); private Animator.AnimatorListener mDimEndListener = new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { @@ -292,6 +296,31 @@ public class NotificationStackScrollLayout extends ViewGroup } }; private ViewGroup mQsContainer; + private boolean mContinuousShadowUpdate; + private ViewTreeObserver.OnPreDrawListener mShadowUpdater + = new ViewTreeObserver.OnPreDrawListener() { + + @Override + public boolean onPreDraw() { + updateViewShadows(); + return true; + } + }; + private Comparator<ExpandableView> mViewPositionComparator = new Comparator<ExpandableView>() { + @Override + public int compare(ExpandableView view, ExpandableView otherView) { + float endY = view.getTranslationY() + view.getActualHeight(); + float otherEndY = otherView.getTranslationY() + otherView.getActualHeight(); + if (endY < otherEndY) { + return -1; + } else if (endY > otherEndY) { + return 1; + } else { + // The two notifications end at the same location + return 0; + } + } + }; public NotificationStackScrollLayout(Context context) { this(context, null); @@ -667,6 +696,7 @@ public class NotificationStackScrollLayout extends ViewGroup } mSwipedOutViews.add(v); mAmbientState.onDragFinished(v); + updateContinuousShadowDrawing(); if (v instanceof ExpandableNotificationRow) { ExpandableNotificationRow row = (ExpandableNotificationRow) v; if (row.isHeadsUp()) { @@ -689,6 +719,7 @@ public class NotificationStackScrollLayout extends ViewGroup @Override public void onChildSnappedBack(View animView, float targetLeft) { mAmbientState.onDragFinished(animView); + updateContinuousShadowDrawing(); if (!mDragAnimPendingChildren.contains(animView)) { if (mAnimationsEnabled) { mSnappedBackChildren.add(animView); @@ -721,6 +752,7 @@ public class NotificationStackScrollLayout extends ViewGroup mFalsingManager.onNotificatonStartDismissing(); setSwipingInProgress(true); mAmbientState.onBeginDrag(v); + updateContinuousShadowDrawing(); if (mAnimationsEnabled && (mIsExpanded || !isPinnedHeadsUp(v))) { mDragAnimPendingChildren.add(v); mNeedsAnimation = true; @@ -2242,6 +2274,7 @@ public class NotificationStackScrollLayout extends ViewGroup setAnimationRunning(true); mAnimationEvents.clear(); updateBackground(); + updateViewShadows(); } else { applyCurrentState(); } @@ -2824,6 +2857,43 @@ public class NotificationStackScrollLayout extends ViewGroup } runAnimationFinishedRunnables(); updateBackground(); + updateViewShadows(); + } + + private void updateViewShadows() { + // we need to work around an issue where the shadow would not cast between siblings when + // their z difference is between 0 and 0.1 + + // Lefts first sort by Z difference + for (int i = 0; i < getChildCount(); i++) { + ExpandableView child = (ExpandableView) getChildAt(i); + if (child.getVisibility() != GONE) { + mTmpSortedChildren.add(child); + } + } + Collections.sort(mTmpSortedChildren, mViewPositionComparator); + + // Now lets update the shadow for the views + ExpandableView previous = null; + for (int i = 0; i < mTmpSortedChildren.size(); i++) { + ExpandableView expandableView = mTmpSortedChildren.get(i); + float translationZ = expandableView.getTranslationZ(); + float otherZ = previous == null ? translationZ : previous.getTranslationZ(); + float diff = otherZ - translationZ; + if (diff <= 0.0f || diff >= FakeShadowView.SHADOW_SIBLING_TRESHOLD) { + // There is no fake shadow to be drawn + expandableView.setFakeShadowIntensity(0.0f, 0.0f, 0, 0); + } else { + float yLocation = previous.getTranslationY() + previous.getActualHeight() - + expandableView.getTranslationY(); + expandableView.setFakeShadowIntensity(diff / FakeShadowView.SHADOW_SIBLING_TRESHOLD, + previous.getOutlineAlpha(), (int) yLocation, + previous.getOutlineTranslation()); + } + previous = expandableView; + } + + mTmpSortedChildren.clear(); } public void goToFullShade(long delay) { @@ -3045,7 +3115,7 @@ public class NotificationStackScrollLayout extends ViewGroup disableClipOptimization(); } handleDismissAllClipping(); - if (mCurrIconRow != null & mCurrIconRow.isVisible()) { + if (mCurrIconRow != null && mCurrIconRow.isVisible()) { mCurrIconRow.getNotificationParent().animateTranslateNotification(0 /* left target */); } } @@ -3262,6 +3332,7 @@ public class NotificationStackScrollLayout extends ViewGroup getViewTreeObserver().removeOnPreDrawListener(mBackgroundUpdater); } mAnimationRunning = animationRunning; + updateContinuousShadowDrawing(); } } @@ -3549,6 +3620,18 @@ public class NotificationStackScrollLayout extends ViewGroup } } + private void updateContinuousShadowDrawing() { + boolean continuousShadowUpdate = mAnimationRunning + || !mAmbientState.getDraggedViews().isEmpty(); + if (continuousShadowUpdate != mContinuousShadowUpdate) { + if (continuousShadowUpdate) { + getViewTreeObserver().addOnPreDrawListener(mShadowUpdater); + } else { + getViewTreeObserver().removeOnPreDrawListener(mShadowUpdater); + } + } + } + static class AnimationEvent { static AnimationFilter[] FILTERS = new AnimationFilter[] { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java index e87b36397c7a..d78d62680860 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java @@ -24,6 +24,7 @@ import android.view.ViewGroup; import com.android.systemui.R; import com.android.systemui.statusbar.ExpandableNotificationRow; import com.android.systemui.statusbar.ExpandableView; +import com.android.systemui.statusbar.notification.FakeShadowView; import java.util.ArrayList; import java.util.HashSet; @@ -605,20 +606,40 @@ public class StackScrollAlgorithm { private void updateZValuesForState(StackScrollState resultState, StackScrollAlgorithmState algorithmState, AmbientState ambientState) { int childCount = algorithmState.visibleChildren.size(); - int childrenOnTop = 0; + float childrenOnTop = 0.0f; for (int i = childCount - 1; i >= 0; i--) { ExpandableView child = algorithmState.visibleChildren.get(i); StackViewState childViewState = resultState.getViewStateForView(child); if (i > (childCount - 1 - algorithmState.itemsInBottomStack)) { // We are in the bottom stack float numItemsAbove = i - (childCount - 1 - algorithmState.itemsInBottomStack); - childViewState.zTranslation = mZBasicHeight - - numItemsAbove * mZDistanceBetweenElements; + float zSubtraction; + if (numItemsAbove <= 1.0f) { + float factor = 0.2f; + // Lets fade in slower to the threshold to make the shadow fade in look nicer + if (numItemsAbove <= factor) { + zSubtraction = FakeShadowView.SHADOW_SIBLING_TRESHOLD + * numItemsAbove * (1.0f / factor); + } else { + zSubtraction = FakeShadowView.SHADOW_SIBLING_TRESHOLD + + (numItemsAbove - factor) * (1.0f / (1.0f - factor)) + * (mZDistanceBetweenElements + - FakeShadowView.SHADOW_SIBLING_TRESHOLD); + } + } else { + zSubtraction = numItemsAbove * mZDistanceBetweenElements; + } + childViewState.zTranslation = mZBasicHeight - zSubtraction; } else if (child.mustStayOnScreen() && childViewState.yTranslation < ambientState.getTopPadding() + ambientState.getStackTranslation()) { - // TODO; do this more cleanly - childrenOnTop++; + if (childrenOnTop != 0.0f) { + childrenOnTop++; + } else { + float overlap = ambientState.getTopPadding() + + ambientState.getStackTranslation() - childViewState.yTranslation; + childrenOnTop += Math.min(1.0f, overlap / childViewState.height); + } childViewState.zTranslation = mZBasicHeight + childrenOnTop * mZDistanceBetweenElements; } else { diff --git a/packages/SystemUI/src/com/android/systemui/tuner/ColorAndAppearanceFragment.java b/packages/SystemUI/src/com/android/systemui/tuner/ColorAndAppearanceFragment.java index 9f11325c7d15..af95cf9354bb 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/ColorAndAppearanceFragment.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/ColorAndAppearanceFragment.java @@ -28,6 +28,8 @@ import android.view.LayoutInflater; import android.view.View; import android.widget.SeekBar; +import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.systemui.R; import com.android.systemui.statusbar.policy.NightModeController; @@ -54,6 +56,7 @@ public class ColorAndAppearanceFragment extends PreferenceFragment { @Override public void onResume() { super.onResume(); + MetricsLogger.visibility(getContext(), MetricsEvent.TUNER_COLOR_AND_APPEARANCE, true); // TODO: Figure out better title model for Tuner, to avoid any more of this. getActivity().setTitle(R.string.color_and_appearance); @@ -63,6 +66,12 @@ public class ColorAndAppearanceFragment extends PreferenceFragment { } @Override + public void onPause() { + super.onPause(); + MetricsLogger.visibility(getContext(), MetricsEvent.TUNER_COLOR_AND_APPEARANCE, false); + } + + @Override public void onDisplayPreferenceDialog(Preference preference) { if (preference instanceof CalibratePreference) { CalibrateDialog.show(this); @@ -76,6 +85,7 @@ public class ColorAndAppearanceFragment extends PreferenceFragment { } private void onApply() { + MetricsLogger.action(getContext(), MetricsEvent.ACTION_TUNER_CALIBRATE_DISPLAY_CHANGED); mNightModeController.setCustomValues(Settings.Secure.getString( getContext().getContentResolver(), Secure.ACCESSIBILITY_DISPLAY_COLOR_MATRIX)); getView().removeCallbacks(mResetColorMatrix); @@ -125,6 +135,7 @@ public class ColorAndAppearanceFragment extends PreferenceFragment { bindView(v.findViewById(R.id.r_group), 0); bindView(v.findViewById(R.id.g_group), 5); bindView(v.findViewById(R.id.b_group), 10); + MetricsLogger.visible(getContext(), MetricsEvent.TUNER_CALIBRATE_DISPLAY); return new AlertDialog.Builder(getContext()) .setTitle(R.string.calibrate_display) .setView(v) @@ -133,6 +144,12 @@ public class ColorAndAppearanceFragment extends PreferenceFragment { .create(); } + @Override + public void onDismiss(DialogInterface dialog) { + super.onDismiss(dialog); + MetricsLogger.hidden(getContext(), MetricsEvent.TUNER_CALIBRATE_DISPLAY); + } + private void bindView(View view, final int index) { SeekBar seekBar = (SeekBar) view.findViewById(com.android.internal.R.id.seekbar); seekBar.setMax(1000); diff --git a/packages/SystemUI/src/com/android/systemui/tuner/NightModeFragment.java b/packages/SystemUI/src/com/android/systemui/tuner/NightModeFragment.java index e9650eaf83a1..8c945f9f7a13 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/NightModeFragment.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/NightModeFragment.java @@ -17,23 +17,20 @@ package com.android.systemui.tuner; import android.annotation.Nullable; import android.app.UiModeManager; -import android.content.ContentResolver; import android.content.Context; import android.os.Bundle; -import android.provider.Settings; import android.provider.Settings.Secure; import android.support.v14.preference.PreferenceFragment; import android.support.v14.preference.SwitchPreference; -import android.support.v7.preference.DropDownPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.Preference.OnPreferenceChangeListener; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Switch; - +import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.systemui.R; -import com.android.systemui.statusbar.phone.QSTileHost; import com.android.systemui.statusbar.policy.NightModeController; import com.android.systemui.statusbar.policy.NightModeController.Listener; import com.android.systemui.tuner.TunerService.Tunable; @@ -100,6 +97,7 @@ public class NightModeFragment extends PreferenceFragment implements Tunable, @Override public void onClick(View v) { boolean newState = !mNightModeController.isEnabled(); + MetricsLogger.action(getContext(), MetricsEvent.ACTION_TUNER_NIGHT_MODE, newState); mNightModeController.setNightMode(newState); mSwitch.setChecked(newState); } @@ -109,6 +107,7 @@ public class NightModeFragment extends PreferenceFragment implements Tunable, @Override public void onResume() { super.onResume(); + MetricsLogger.visibility(getContext(), MetricsEvent.TUNER_NIGHT_MODE, true); mNightModeController.addListener(this); TunerService.get(getContext()).addTunable(this, Secure.BRIGHTNESS_USE_TWILIGHT, NightModeController.NIGHT_MODE_ADJUST_TINT); @@ -119,24 +118,33 @@ public class NightModeFragment extends PreferenceFragment implements Tunable, @Override public void onPause() { super.onPause(); + MetricsLogger.visibility(getContext(), MetricsEvent.TUNER_NIGHT_MODE, false); mNightModeController.removeListener(this); TunerService.get(getContext()).removeTunable(this); } @Override public boolean onPreferenceChange(Preference preference, Object newValue) { + final Boolean value = (Boolean) newValue; if (mAutoSwitch == preference) { - mNightModeController.setAuto((Boolean) newValue); + MetricsLogger.action(getContext(), MetricsEvent.ACTION_TUNER_NIGHT_MODE_AUTO, value); + mNightModeController.setAuto(value); } else if (mDarkTheme == preference) { - mUiModeManager.setNightMode(((Boolean) newValue) ? UiModeManager.MODE_NIGHT_AUTO + MetricsLogger.action(getContext(), + MetricsEvent.ACTION_TUNER_NIGHT_MODE_ADJUST_DARK_THEME, value); + mUiModeManager.setNightMode(value ? UiModeManager.MODE_NIGHT_AUTO : UiModeManager.MODE_NIGHT_NO); postCalculateDisabled(); } else if (mAdjustTint == preference) { - mNightModeController.setAdjustTint((Boolean) newValue); + MetricsLogger.action(getContext(), + MetricsEvent.ACTION_TUNER_NIGHT_MODE_ADJUST_TINT, value); + mNightModeController.setAdjustTint(value); postCalculateDisabled(); } else if (mAdjustBrightness == preference) { + MetricsLogger.action(getContext(), + MetricsEvent.ACTION_TUNER_NIGHT_MODE_ADJUST_BRIGHTNESS, value); TunerService.get(getContext()).setValue(Secure.BRIGHTNESS_USE_TWILIGHT, - ((Boolean) newValue) ? 1 : 0); + value ? 1 : 0); postCalculateDisabled(); } else { return false; diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java index def597d23d48..748ee97c0621 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerActivity.java @@ -45,6 +45,13 @@ public class TunerActivity extends SettingsDrawerActivity implements } @Override + public void onBackPressed() { + if (!getFragmentManager().popBackStackImmediate()) { + super.onBackPressed(); + } + } + + @Override public boolean onPreferenceStartFragment(PreferenceFragment caller, Preference pref) { try { Class<?> cls = Class.forName(pref.getFragment()); diff --git a/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java b/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java index b73813647c0d..5b9ebd7722c6 100644 --- a/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java +++ b/packages/SystemUI/src/com/android/systemui/tuner/TunerSwitch.java @@ -6,18 +6,21 @@ import android.provider.Settings; import android.support.v14.preference.SwitchPreference; import android.util.AttributeSet; +import com.android.internal.logging.MetricsLogger; import com.android.systemui.R; import com.android.systemui.tuner.TunerService.Tunable; public class TunerSwitch extends SwitchPreference implements Tunable { private final boolean mDefault; + private final int mAction; public TunerSwitch(Context context, AttributeSet attrs) { super(context, attrs); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.TunerSwitch); mDefault = a.getBoolean(R.styleable.TunerSwitch_defValue, false); + mAction = a.getInt(R.styleable.TunerSwitch_metricsAction, -1); } @Override @@ -38,6 +41,14 @@ public class TunerSwitch extends SwitchPreference implements Tunable { } @Override + protected void onClick() { + super.onClick(); + if (mAction != -1) { + MetricsLogger.action(getContext(), mAction, isChecked()); + } + } + + @Override protected boolean persistBoolean(boolean value) { for (String key : getKey().split(",")) { Settings.Secure.putString(getContext().getContentResolver(), key, value ? "1" : "0"); diff --git a/packages/SystemUI/src/com/android/systemui/tv/pip/PipManager.java b/packages/SystemUI/src/com/android/systemui/tv/pip/PipManager.java index fac6338d1505..0089fa9cc452 100644 --- a/packages/SystemUI/src/com/android/systemui/tv/pip/PipManager.java +++ b/packages/SystemUI/src/com/android/systemui/tv/pip/PipManager.java @@ -101,7 +101,26 @@ public class PipManager { @Override public void run() { if (mState != STATE_NO_PIP) { - // TODO: check whether PIP task is closed. + StackInfo stackInfo = null; + try { + stackInfo = mActivityManager.getStackInfo(PINNED_STACK_ID); + if (stackInfo == null) { + Log.w(TAG, "There is no pinned stack"); + closePipInternal(false); + return; + } + } catch (RemoteException e) { + Log.e(TAG, "getStackInfo failed", e); + return; + } + for (int i = stackInfo.taskIds.length - 1; i >= 0; --i) { + if (stackInfo.taskIds[i] == mPipTaskId) { + // PIP task is still alive. + return; + } + } + // PIP task doesn't exist anymore in PINNED_STACK. + closePipInternal(true); } } }; @@ -203,12 +222,18 @@ public class PipManager { * Closes PIP (PIPed activity and PIP system UI). */ public void closePip() { + closePipInternal(true); + } + + private void closePipInternal(boolean removePipStack) { mState = STATE_NO_PIP; mPipTaskId = TASK_ID_NO_PIP; - try { - mActivityManager.removeStack(PINNED_STACK_ID); - } catch (RemoteException e) { - Log.e(TAG, "removeStack failed", e); + if (removePipStack) { + try { + mActivityManager.removeStack(PINNED_STACK_ID); + } catch (RemoteException e) { + Log.e(TAG, "removeStack failed", e); + } } } diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java index 1810c1cd315d..1d5ca04243a0 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialog.java @@ -25,6 +25,7 @@ import android.app.KeyguardManager; import android.content.Context; import android.content.pm.PackageManager; import android.content.res.ColorStateList; +import android.content.res.Configuration; import android.content.res.Resources; import android.graphics.Color; import android.graphics.PixelFormat; @@ -42,6 +43,7 @@ import android.os.SystemClock; import android.provider.Settings.Global; import android.util.DisplayMetrics; import android.util.Log; +import android.util.Slog; import android.util.SparseBooleanArray; import android.view.Gravity; import android.view.MotionEvent; @@ -49,7 +51,6 @@ import android.view.View; import android.view.View.AccessibilityDelegate; import android.view.View.OnAttachStateChangeListener; import android.view.View.OnClickListener; -import android.view.View.OnLayoutChangeListener; import android.view.View.OnTouchListener; import android.view.ViewGroup; import android.view.ViewGroup.MarginLayoutParams; @@ -91,39 +92,40 @@ public class VolumeDialog implements TunerService.Tunable { public static final String SHOW_FULL_ZEN = "sysui_show_full_zen"; private static final long USER_ATTEMPT_GRACE_PERIOD = 1000; - private static final int WAIT_FOR_RIPPLE = 200; private final Context mContext; private final H mHandler = new H(); private final VolumeDialogController mController; - private final CustomDialog mDialog; - private final ViewGroup mDialogView; - private final ViewGroup mDialogContentView; - private final ImageButton mExpandButton; - private final View mSettingsButton; - private final List<VolumeRow> mRows = new ArrayList<VolumeRow>(); + private CustomDialog mDialog; + private ViewGroup mDialogView; + private ViewGroup mDialogContentView; + private ViewGroup mVolumeRowContainer; + private ImageButton mExpandButton; + private final List<VolumeRow> mRows = new ArrayList<>(); private final SpTexts mSpTexts; private final SparseBooleanArray mDynamic = new SparseBooleanArray(); private final KeyguardManager mKeyguard; private final AudioManager mAudioManager; - private final int mExpandButtonAnimationDuration; - private final ZenFooter mZenFooter; + private int mExpandButtonAnimationDuration; + private ZenFooter mZenFooter; private final LayoutTransition mLayoutTransition; private final Object mSafetyWarningLock = new Object(); private final Accessibility mAccessibility = new Accessibility(); private final ColorStateList mActiveSliderTint; private final ColorStateList mInactiveSliderTint; - private final VolumeDialogMotion mMotion; + private VolumeDialogMotion mMotion; + private final int mWindowType; + private final ZenModeController mZenModeController; private boolean mShowing; private boolean mExpanded; + private int mActiveStream; private boolean mShowHeaders = VolumePrefs.DEFAULT_SHOW_HEADERS; private boolean mAutomute = VolumePrefs.DEFAULT_ENABLE_AUTOMUTE; private boolean mSilentMode = VolumePrefs.DEFAULT_ENABLE_SILENT_MODE; private State mState; - private int mExpandButtonRes; private boolean mExpandButtonAnimationRunning; private SafetyWarningDialog mSafetyWarning; private Callback mCallback; @@ -131,22 +133,43 @@ public class VolumeDialog implements TunerService.Tunable { private boolean mPendingRecheckAll; private long mCollapseTime; private boolean mHovering = false; - private int mLastActiveStream; + private int mDensity; private boolean mShowFullZen; - private final TunerZenModePanel mZenPanel; + private TunerZenModePanel mZenPanel; public VolumeDialog(Context context, int windowType, VolumeDialogController controller, ZenModeController zenModeController, Callback callback) { mContext = context; mController = controller; mCallback = callback; + mWindowType = windowType; + mZenModeController = zenModeController; mSpTexts = new SpTexts(mContext); mKeyguard = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE); mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); + mActiveSliderTint = loadColorStateList(R.color.system_accent_color); + mInactiveSliderTint = loadColorStateList(R.color.volume_slider_inactive); + mLayoutTransition = new LayoutTransition(); + mLayoutTransition.setDuration(new ValueAnimator().getDuration() / 2); + initDialog(); + + mAccessibility.init(); + + controller.addCallback(mControllerCallbackH, mHandler); + controller.getState(); + TunerService.get(mContext).addTunable(this, SHOW_FULL_ZEN); + + final Configuration currentConfig = mContext.getResources().getConfiguration(); + mDensity = currentConfig.densityDpi; + } + + private void initDialog() { mDialog = new CustomDialog(mContext); + mHovering = false; + mShowing = false; final Window window = mDialog.getWindow(); window.requestFeature(Window.FEATURE_NO_TITLE); window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); @@ -160,7 +183,7 @@ public class VolumeDialog implements TunerService.Tunable { mDialog.setCanceledOnTouchOutside(true); final Resources res = mContext.getResources(); final WindowManager.LayoutParams lp = window.getAttributes(); - lp.type = windowType; + lp.type = mWindowType; lp.format = PixelFormat.TRANSLUCENT; lp.setTitle(VolumeDialog.class.getSimpleName()); lp.gravity = Gravity.TOP | Gravity.CENTER_HORIZONTAL; @@ -170,8 +193,7 @@ public class VolumeDialog implements TunerService.Tunable { window.setAttributes(lp); window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING); - mActiveSliderTint = loadColorStateList(R.color.system_accent_color); - mInactiveSliderTint = loadColorStateList(R.color.volume_slider_inactive); + mDialog.setContentView(R.layout.volume_dialog); mDialogView = (ViewGroup) mDialog.findViewById(R.id.volume_dialog); mDialogView.setOnHoverListener(new View.OnHoverListener() { @@ -185,56 +207,53 @@ public class VolumeDialog implements TunerService.Tunable { } }); mDialogContentView = (ViewGroup) mDialog.findViewById(R.id.volume_dialog_content); + mVolumeRowContainer = + (ViewGroup) mDialogContentView.findViewById(R.id.volume_row_container); + mExpanded = false; mExpandButton = (ImageButton) mDialogView.findViewById(R.id.volume_expand_button); mExpandButton.setOnClickListener(mClickExpand); updateWindowWidthH(); updateExpandButtonH(); - mLayoutTransition = new LayoutTransition(); - mLayoutTransition.setDuration(new ValueAnimator().getDuration() / 2); + mDialogContentView.setLayoutTransition(mLayoutTransition); mMotion = new VolumeDialogMotion(mDialog, mDialogView, mDialogContentView, mExpandButton, new VolumeDialogMotion.Callback() { - @Override - public void onAnimatingChanged(boolean animating) { - if (animating) return; - if (mPendingStateChanged) { - mHandler.sendEmptyMessage(H.STATE_CHANGED); - mPendingStateChanged = false; - } - if (mPendingRecheckAll) { - mHandler.sendEmptyMessage(H.RECHECK_ALL); - mPendingRecheckAll = false; - } - } - }); - - addRow(AudioManager.STREAM_RING, - R.drawable.ic_volume_ringer, R.drawable.ic_volume_ringer_mute, true); - addRow(AudioManager.STREAM_MUSIC, - R.drawable.ic_volume_media, R.drawable.ic_volume_media_mute, true); - addRow(AudioManager.STREAM_ALARM, - R.drawable.ic_volume_alarm, R.drawable.ic_volume_alarm_mute, false); - addRow(AudioManager.STREAM_VOICE_CALL, - R.drawable.ic_volume_voice, R.drawable.ic_volume_voice, false); - addRow(AudioManager.STREAM_BLUETOOTH_SCO, - R.drawable.ic_volume_bt_sco, R.drawable.ic_volume_bt_sco, false); - addRow(AudioManager.STREAM_SYSTEM, - R.drawable.ic_volume_system, R.drawable.ic_volume_system_mute, false); - - mSettingsButton = mDialog.findViewById(R.id.volume_settings_button); - mSettingsButton.setOnClickListener(mClickSettings); + @Override + public void onAnimatingChanged(boolean animating) { + if (animating) return; + if (mPendingStateChanged) { + mHandler.sendEmptyMessage(H.STATE_CHANGED); + mPendingStateChanged = false; + } + if (mPendingRecheckAll) { + mHandler.sendEmptyMessage(H.RECHECK_ALL); + mPendingRecheckAll = false; + } + } + }); + + if (mRows.isEmpty()) { + addRow(AudioManager.STREAM_RING, + R.drawable.ic_volume_ringer, R.drawable.ic_volume_ringer_mute, true); + addRow(AudioManager.STREAM_MUSIC, + R.drawable.ic_volume_media, R.drawable.ic_volume_media_mute, true); + addRow(AudioManager.STREAM_ALARM, + R.drawable.ic_volume_alarm, R.drawable.ic_volume_alarm_mute, false); + addRow(AudioManager.STREAM_VOICE_CALL, + R.drawable.ic_volume_voice, R.drawable.ic_volume_voice, false); + addRow(AudioManager.STREAM_BLUETOOTH_SCO, + R.drawable.ic_volume_bt_sco, R.drawable.ic_volume_bt_sco, false); + addRow(AudioManager.STREAM_SYSTEM, + R.drawable.ic_volume_system, R.drawable.ic_volume_system_mute, false); + } else { + addExistingRows(); + } mExpandButtonAnimationDuration = res.getInteger(R.integer.volume_expand_animation_duration); mZenFooter = (ZenFooter) mDialog.findViewById(R.id.volume_zen_footer); - mZenFooter.init(zenModeController); + mZenFooter.init(mZenModeController); mZenPanel = (TunerZenModePanel) mDialog.findViewById(R.id.tuner_zen_mode_panel); - mZenPanel.init(zenModeController); + mZenPanel.init(mZenModeController); mZenPanel.setCallback(mZenPanelCallback); - - mAccessibility.init(); - - controller.addCallback(mControllerCallbackH, mHandler); - controller.getState(); - TunerService.get(mContext).addTunable(this, SHOW_FULL_ZEN); } @Override @@ -285,46 +304,38 @@ public class VolumeDialog implements TunerService.Tunable { } private void addRow(int stream, int iconRes, int iconMuteRes, boolean important) { - final VolumeRow row = initRow(stream, iconRes, iconMuteRes, important); + VolumeRow row = new VolumeRow(); + initRow(row, stream, iconRes, iconMuteRes, important); if (!mRows.isEmpty()) { - final View v = new View(mContext); - v.setId(android.R.id.background); - final int h = mContext.getResources() - .getDimensionPixelSize(R.dimen.volume_slider_interspacing); - final LinearLayout.LayoutParams lp = - new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, h); - mDialogContentView.addView(v, mDialogContentView.getChildCount() - 2, lp); - row.space = v; + addSpacer(row); } - row.settingsButton.addOnLayoutChangeListener(new OnLayoutChangeListener() { - @Override - public void onLayoutChange(View v, int left, int top, int right, int bottom, - int oldLeft, int oldTop, int oldRight, int oldBottom) { - final boolean moved = mLastActiveStream != mActiveStream || - oldLeft != left || oldTop != top; - if (D.BUG) Log.d(TAG, "onLayoutChange moved=" + moved - + " old=" + new Rect(oldLeft, oldTop, oldRight, oldBottom).toShortString() - + "," + mLastActiveStream - + " new=" + new Rect(left,top,right,bottom).toShortString() - + "," + mActiveStream); - mLastActiveStream = mActiveStream; - if (moved) { - for (int i = 0; i < mDialogContentView.getChildCount(); i++) { - final View c = mDialogContentView.getChildAt(i); - if (!c.isShown()) continue; - if (c == row.view) { - repositionExpandAnim(row); - } - return; - } - } - } - }); - // add new row just before the footer - mDialogContentView.addView(row.view, mDialogContentView.getChildCount() - 2); + mVolumeRowContainer.addView(row.view); mRows.add(row); } + private void addExistingRows() { + int N = mRows.size(); + for (int i = 0; i < N; i++) { + final VolumeRow row = mRows.get(i); + initRow(row, row.stream, row.iconRes, row.iconMuteRes, row.important); + if (i > 0) { + addSpacer(row); + } + mVolumeRowContainer.addView(row.view); + } + } + + private void addSpacer(VolumeRow row) { + final View v = new View(mContext); + v.setId(android.R.id.background); + final int h = mContext.getResources() + .getDimensionPixelSize(R.dimen.volume_slider_interspacing); + final LinearLayout.LayoutParams lp = + new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, h); + mVolumeRowContainer.addView(v, lp); + row.space = v; + } + private boolean isAttached() { return mDialogContentView != null && mDialogContentView.isAttachedToWindow(); } @@ -345,18 +356,6 @@ public class VolumeDialog implements TunerService.Tunable { return null; } - private void repositionExpandAnim(VolumeRow row) { - final int[] loc = new int[2]; - row.settingsButton.getLocationInWindow(loc); - final MarginLayoutParams mlp = (MarginLayoutParams) mDialogView.getLayoutParams(); - final int x = loc[0] - mlp.leftMargin; - final int y = loc[1] - mlp.topMargin; - if (D.BUG) Log.d(TAG, "repositionExpandAnim x=" + x + " y=" + y); - mExpandButton.setTranslationX(x); - mExpandButton.setTranslationY(y); - mExpandButton.setTag((Integer) y); - } - public void dump(PrintWriter writer) { writer.println(VolumeDialog.class.getSimpleName() + " state:"); writer.print(" mShowing: "); writer.println(mShowing); @@ -374,8 +373,8 @@ public class VolumeDialog implements TunerService.Tunable { } @SuppressLint("InflateParams") - private VolumeRow initRow(final int stream, int iconRes, int iconMuteRes, boolean important) { - final VolumeRow row = new VolumeRow(); + private void initRow(final VolumeRow row, final int stream, int iconRes, int iconMuteRes, + boolean important) { row.stream = stream; row.iconRes = iconRes; row.iconMuteRes = iconMuteRes; @@ -442,9 +441,6 @@ public class VolumeDialog implements TunerService.Tunable { row.userAttempt = 0; // reset the grace period, slider should update immediately } }); - row.settingsButton = (ImageButton) row.view.findViewById(R.id.volume_settings_button); - row.settingsButton.setOnClickListener(mClickSettings); - return row; } public void destroy() { @@ -573,8 +569,6 @@ public class VolumeDialog implements TunerService.Tunable { if (mExpandButtonAnimationRunning && isAttached()) return; final int res = mExpanded ? R.drawable.ic_volume_collapse_animation : R.drawable.ic_volume_expand_animation; - if (res == mExpandButtonRes) return; - mExpandButtonRes = res; if (hasTouchFeature()) { mExpandButton.setImageResource(res); } else { @@ -606,16 +600,6 @@ public class VolumeDialog implements TunerService.Tunable { final boolean visible = isVisibleH(row, isActive); Util.setVisOrGone(row.view, visible); Util.setVisOrGone(row.space, visible && mExpanded); - final int expandButtonRes = mExpanded ? R.drawable.ic_volume_settings : 0; - if (expandButtonRes != row.cachedExpandButtonRes) { - row.cachedExpandButtonRes = expandButtonRes; - if (expandButtonRes == 0) { - row.settingsButton.setImageDrawable(null); - } else { - row.settingsButton.setImageResource(expandButtonRes); - } - } - Util.setVisOrInvis(row.settingsButton, false); updateVolumeRowHeaderVisibleH(row); row.header.setAlpha(mExpanded && isActive ? 1 : 0.5f); updateVolumeRowSliderTintH(row, isActive); @@ -629,8 +613,8 @@ public class VolumeDialog implements TunerService.Tunable { if (row.ss == null || !row.ss.dynamic) continue; if (!mDynamic.get(row.stream)) { mRows.remove(i); - mDialogContentView.removeView(row.view); - mDialogContentView.removeView(row.space); + mVolumeRowContainer.removeView(row.view); + mVolumeRowContainer.removeView(row.space); } } } @@ -911,6 +895,12 @@ public class VolumeDialog implements TunerService.Tunable { @Override public void onConfigurationChanged() { + Configuration newConfig = mContext.getResources().getConfiguration(); + final int density = newConfig.densityDpi; + if (density != mDensity) { + mDialog.dismiss(); + initDialog(); + } updateWindowWidthH(); mSpTexts.update(); mZenFooter.onConfigurationChanged(); @@ -963,21 +953,6 @@ public class VolumeDialog implements TunerService.Tunable { } }; - private final OnClickListener mClickSettings = new OnClickListener() { - @Override - public void onClick(View v) { - mSettingsButton.postDelayed(new Runnable() { - @Override - public void run() { - Events.writeEvent(mContext, Events.EVENT_SETTINGS_CLICK); - if (mCallback != null) { - mCallback.onSettingsClicked(); - } - } - }, WAIT_FOR_RIPPLE); - } - }; - private final class H extends Handler { private static final int SHOW = 1; private static final int DISMISS = 2; @@ -1155,7 +1130,6 @@ public class VolumeDialog implements TunerService.Tunable { private TextView header; private ImageButton icon; private SeekBar slider; - private ImageButton settingsButton; private int stream; private StreamState ss; private long userAttempt; // last user-driven slider change @@ -1168,12 +1142,10 @@ public class VolumeDialog implements TunerService.Tunable { private ColorStateList cachedSliderTint; private int iconState; // from Events private boolean cachedShowHeaders = VolumePrefs.DEFAULT_SHOW_HEADERS; - private int cachedExpandButtonRes; private int lastAudibleLevel = 1; } public interface Callback { - void onSettingsClicked(); void onZenSettingsClicked(); void onZenPrioritySettingsClicked(); } diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java index d7635ad9acb1..3d338098fc2d 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogComponent.java @@ -168,11 +168,6 @@ public class VolumeDialogComponent implements VolumeComponent, TunerService.Tuna private final VolumeDialog.Callback mVolumeDialogCallback = new VolumeDialog.Callback() { @Override - public void onSettingsClicked() { - startSettings(new Intent(Settings.ACTION_NOTIFICATION_SETTINGS)); - } - - @Override public void onZenSettingsClicked() { startSettings(ZenModePanel.ZEN_SETTINGS); } diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumePrefs.java b/packages/SystemUI/src/com/android/systemui/volume/VolumePrefs.java index 04339eb8e802..bbb70ed6bf47 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 boolean DEFAULT_SHOW_HEADERS = true; + public static final boolean DEFAULT_SHOW_HEADERS = false; public static final boolean DEFAULT_ENABLE_AUTOMUTE = true; public static final boolean DEFAULT_ENABLE_SILENT_MODE = true; diff --git a/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java b/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java index a03e7f7d5029..c06b63bd8f66 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java +++ b/packages/SystemUI/src/com/android/systemui/volume/ZenFooter.java @@ -139,9 +139,8 @@ public class ZenFooter extends LinearLayout { } public void onConfigurationChanged() { - mEndNowButton.setText(mContext.getString(R.string.volume_zen_end_now)); - mSpTexts.update(); Util.setText(mEndNowButton, mContext.getString(R.string.volume_zen_end_now)); + mSpTexts.update(); } } diff --git a/preloaded-classes b/preloaded-classes index 9535cc29e107..be645d24c7fb 100644 --- a/preloaded-classes +++ b/preloaded-classes @@ -907,7 +907,7 @@ android.graphics.drawable.AnimatedVectorDrawable android.graphics.drawable.AnimatedVectorDrawable$1 android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState$PendingAnimator -android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimator +android.graphics.drawable.AnimatedVectorDrawable$VectorDrawableAnimatorRT android.graphics.drawable.AnimationDrawable android.graphics.drawable.AnimationDrawable$AnimationState android.graphics.drawable.BitmapDrawable diff --git a/proto/jarjar-rules.txt b/proto/jarjar-rules.txt index 0c77c2a4a41f..50220b42b9dc 100644 --- a/proto/jarjar-rules.txt +++ b/proto/jarjar-rules.txt @@ -1 +1,2 @@ -rule com.google.** com.android.@1 +rule com.google.protobuf.nano.** com.android.framework.protobuf.nano.@1 + diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto index 3f3f851acfb5..cd026a8b40a4 100644 --- a/proto/src/metrics_constants.proto +++ b/proto/src/metrics_constants.proto @@ -369,5 +369,77 @@ message MetricsEvent { // Logged when the user saves a modification to notification importance. Negative numbers // indicate the user lowered the importance; positive means they increased it. ACTION_SAVE_IMPORTANCE = 291; + + // Interactive bug report initiated from power menu. + ACTION_BUGREPORT_FROM_POWER_MENU_INTERACTIVE = 292; + + // Full bug report initiated from power menu. + ACTION_BUGREPORT_FROM_POWER_MENU_FULL = 293; + + // Interactive bug report initiated from Settings. + ACTION_BUGREPORT_FROM_SETTINGS_INTERACTIVE = 294; + + // Full bug report initiated from Settings. + ACTION_BUGREPORT_FROM_SETTINGS_FULL = 295; + + // Bug report canceled using system notification. + ACTION_BUGREPORT_NOTIFICATION_ACTION_CANCEL = 296; + + // Bug report details screen open using system notification. + ACTION_BUGREPORT_NOTIFICATION_ACTION_DETAILS = 297; + + // Additional Bug report screen shot taken using system notification. + ACTION_BUGREPORT_NOTIFICATION_ACTION_SCREENSHOT = 298; + + // Bug report shared by user using system notification. + ACTION_BUGREPORT_NOTIFICATION_ACTION_SHARE = 299; + + // User changed bug report name using the details screen. + ACTION_BUGREPORT_DETAILS_NAME_CHANGED = 300; + + // User changed bug report title using the details screen. + ACTION_BUGREPORT_DETAILS_TITLE_CHANGED = 301; + + // User changed bug report description using the details screen. + ACTION_BUGREPORT_DETAILS_DESCRIPTION_CHANGED = 302; + + // Changes made on bug report details screen were saved by user. + ACTION_BUGREPORT_DETAILS_SAVED = 303; + + // Changes made on bug report details screen were canceled by user. + ACTION_BUGREPORT_DETAILS_CANCELED = 304; + + // Tuner: Open/close calibrate dialog. + TUNER_CALIBRATE_DISPLAY = 305; + + // Tuner: Open/close color and appearance. + TUNER_COLOR_AND_APPEARANCE = 306; + + // Tuner: Apply calibrate dialog. + ACTION_TUNER_CALIBRATE_DISPLAY_CHANGED = 307; + + // Tuner: Open/close night mode. + TUNER_NIGHT_MODE = 308; + + // Tuner: Change night mode. + ACTION_TUNER_NIGHT_MODE = 309; + + // Tuner: Change night mode auto. + ACTION_TUNER_NIGHT_MODE_AUTO = 310; + + // Tuner: Change night mode adjust dark theme. + ACTION_TUNER_NIGHT_MODE_ADJUST_DARK_THEME = 311; + + // Tuner: Change night mode adjust tint. + ACTION_TUNER_NIGHT_MODE_ADJUST_TINT = 312; + + // Tuner: Change night mode adjust brightness. + ACTION_TUNER_NIGHT_MODE_ADJUST_BRIGHTNESS = 313; + + // Tuner: Change do not disturb in volume panel. + ACTION_TUNER_DO_NOT_DISTURB_VOLUME_PANEL = 314; + + // Tuner: Change do not disturb volume buttons shortcut. + ACTION_TUNER_DO_NOT_DISTURB_VOLUME_SHORTCUT = 315; } } diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java index 388c8b7298c5..0dbc5be51d75 100644 --- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java +++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java @@ -351,6 +351,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { // user change and unlock IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(Intent.ACTION_USER_SWITCHED); + intentFilter.addAction(Intent.ACTION_USER_UNLOCKED); intentFilter.addAction(Intent.ACTION_USER_REMOVED); intentFilter.addAction(Intent.ACTION_USER_PRESENT); intentFilter.addAction(Intent.ACTION_SETTING_RESTORED); @@ -361,6 +362,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { String action = intent.getAction(); if (Intent.ACTION_USER_SWITCHED.equals(action)) { switchUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0)); + } else if (Intent.ACTION_USER_UNLOCKED.equals(action)) { + unlockUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0)); } else if (Intent.ACTION_USER_REMOVED.equals(action)) { removeUser(intent.getIntExtra(Intent.EXTRA_USER_HANDLE, 0)); } else if (Intent.ACTION_USER_PRESENT.equals(action)) { @@ -900,6 +903,13 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { } } + private void unlockUser(int userId) { + synchronized (mLock) { + UserState userState = getUserStateLocked(userId); + onUserStateChangedLocked(userState); + } + } + private void removeUser(int userId) { synchronized (mLock) { mUserStates.remove(userId); @@ -1002,8 +1012,9 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { List<ResolveInfo> installedServices = mPackageManager.queryIntentServicesAsUser( new Intent(AccessibilityService.SERVICE_INTERFACE), PackageManager.GET_SERVICES - | PackageManager.GET_META_DATA - | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS, + | PackageManager.GET_META_DATA + | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS + | PackageManager.MATCH_ENCRYPTION_AWARE_AND_UNAWARE, mCurrentUserId); for (int i = 0, count = installedServices.size(); i < count; i++) { @@ -1236,6 +1247,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { private void manageServicesLocked(UserState userState) { Map<ComponentName, Service> componentNameToServiceMap = userState.mComponentNameToServiceMap; + boolean isUnlocked = mContext.getSystemService(UserManager.class) + .isUserUnlocked(userState.mUserId); boolean isEnabled = userState.mIsAccessibilityEnabled; for (int i = 0, count = userState.mInstalledServices.size(); i < count; i++) { @@ -1244,6 +1257,12 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { installedService.getId()); Service service = componentNameToServiceMap.get(componentName); + // Ignore non-encryption-aware services until user is unlocked + if (!isUnlocked && !installedService.isEncryptionAware()) { + Slog.d(LOG_TAG, "Ignoring non-encryption-aware service " + componentName); + continue; + } + if (isEnabled) { // Wait for the binding if it is in process. if (userState.mBindingServices.contains(componentName)) { @@ -1272,7 +1291,7 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub { // No enabled installed services => disable accessibility to avoid // sending accessibility events with no recipient across processes. - if (isEnabled && userState.mBoundServices.isEmpty() + if (isEnabled && isUnlocked && userState.mBoundServices.isEmpty() && userState.mBindingServices.isEmpty()) { userState.mIsAccessibilityEnabled = false; final long identity = Binder.clearCallingIdentity(); diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java index 2b52799304fd..f537d182035e 100644 --- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java +++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java @@ -353,7 +353,10 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku } private void onPackageBroadcastReceived(Intent intent, int userId) { - if (!mUserManager.isUserUnlocked(userId)) return; + if (!mUserManager.isUserUnlocked(userId) || + isProfileWithLockedParent(userId)) { + return; + } final String action = intent.getAction(); boolean added = false; @@ -435,7 +438,10 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku * due to user not being available and package suspension. */ private void reloadWidgetsMaskedStateForUser(int userId) { - if (!mUserManager.isUserUnlocked(userId)) return; + if (!mUserManager.isUserUnlocked(userId) || + isProfileWithLockedParent(userId)) { + return; + } synchronized (mLock) { reloadWidgetPackageSuspensionMaskedStateLocked(userId); List<UserInfo> profiles = mUserManager.getEnabledProfiles(userId); @@ -606,7 +612,10 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku throw new IllegalStateException( "User " + userId + " must be unlocked for widgets to be available"); } - + if (isProfileWithLockedParent(userId)) { + throw new IllegalStateException( + "Profile " + userId + " must have unlocked parent"); + } final int[] profileIds = mSecurityPolicy.getEnabledGroupProfileIds(userId); // Careful lad, we may have already loaded the state for some @@ -2458,6 +2467,9 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku } private void onUserUnlocked(int userId) { + if (isProfileWithLockedParent(userId)) { + return; + } synchronized (mLock) { ensureGroupStateLoadedLocked(userId); reloadWidgetsMaskedStateForUser(userId); @@ -3306,6 +3318,23 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku } } + private boolean isProfileWithLockedParent(int userId) { + long token = Binder.clearCallingIdentity(); + try { + UserInfo userInfo = mUserManager.getUserInfo(userId); + if (userInfo != null && userInfo.isManagedProfile()) { + UserInfo parentInfo = mUserManager.getProfileParent(userId); + if (parentInfo != null + && !mUserManager.isUserUnlocked(parentInfo.getUserHandle())) { + return true; + } + } + } finally { + Binder.restoreCallingIdentity(token); + } + return false; + } + private boolean isProfileWithUnlockedParent(int userId) { UserInfo userInfo = mUserManager.getUserInfo(userId); if (userInfo != null && userInfo.isManagedProfile()) { diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java index 6d0d9e9090f6..8cfeb748ccee 100644 --- a/services/core/java/com/android/server/BluetoothManagerService.java +++ b/services/core/java/com/android/server/BluetoothManagerService.java @@ -1671,16 +1671,23 @@ class BluetoothManagerService extends IBluetoothManager.Stub { } @Override - public void dump(FileDescriptor fd, PrintWriter writer, String args[]) { - mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, TAG); - if (mBluetoothBinder == null) { - writer.println("Bluetooth Service not connected"); - } else { - try { - mBluetoothBinder.dump(fd, args); - } catch (RemoteException re) { - writer.println("RemoteException while calling Bluetooth Service"); + public void dump(FileDescriptor fd, PrintWriter writer, String[] args) { + mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DUMP, TAG); + String errorMsg = null; + if (mBluetoothBinder == null) { + errorMsg = "Bluetooth Service not connected"; + } else { + try { + mBluetoothBinder.dump(fd, args); + } catch (RemoteException re) { + errorMsg = "RemoteException while calling Bluetooth Service"; + } + } + if (errorMsg != null) { + // Silently return if we are extracting metrics in Protobuf format + if ((args.length > 0) && args[0].startsWith("--proto")) + return; + writer.println(errorMsg); } - } } } diff --git a/services/core/java/com/android/server/DeviceIdleController.java b/services/core/java/com/android/server/DeviceIdleController.java index 6c19c3845bfb..62fa7d5af754 100644 --- a/services/core/java/com/android/server/DeviceIdleController.java +++ b/services/core/java/com/android/server/DeviceIdleController.java @@ -132,7 +132,8 @@ public class DeviceIdleController extends SystemService private Intent mLightIdleIntent; private Display mCurDisplay; private AnyMotionDetector mAnyMotionDetector; - private boolean mEnabled; + private boolean mLightEnabled; + private boolean mDeepEnabled; private boolean mForceIdle; private boolean mScreenOn; private boolean mCharging; @@ -179,7 +180,7 @@ public class DeviceIdleController extends SystemService private static final int LIGHT_STATE_IDLE = 2; /** Device is in the light idle state, but temporarily out of idle to do regular maintenance. */ private static final int LIGHT_STATE_IDLE_MAINTENANCE = 3; - /** Device light idle state is overriden, now applying full doze state. */ + /** Device light idle state is overriden, now applying deep doze state. */ private static final int LIGHT_STATE_OVERRIDE = 4; private static String lightStateToString(int state) { switch (state) { @@ -288,8 +289,8 @@ public class DeviceIdleController extends SystemService private static final int EVENT_NORMAL = 1; private static final int EVENT_LIGHT_IDLE = 2; private static final int EVENT_LIGHT_MAINTENANCE = 3; - private static final int EVENT_FULL_IDLE = 4; - private static final int EVENT_FULL_MAINTENANCE = 5; + private static final int EVENT_DEEP_IDLE = 4; + private static final int EVENT_DEEP_MAINTENANCE = 5; private int[] mEventCmds = new int[EVENT_BUFFER_SIZE]; private long[] mEventTimes = new long[EVENT_BUFFER_SIZE]; @@ -835,13 +836,13 @@ public class DeviceIdleController extends SystemService case MSG_REPORT_IDLE_ON: case MSG_REPORT_IDLE_ON_LIGHT: { EventLogTags.writeDeviceIdleOnStart(); - final boolean fullChanged; + final boolean deepChanged; final boolean lightChanged; if (msg.what == MSG_REPORT_IDLE_ON) { - fullChanged = mLocalPowerManager.setDeviceIdleMode(true); + deepChanged = mLocalPowerManager.setDeviceIdleMode(true); lightChanged = mLocalPowerManager.setLightDeviceIdleMode(false); } else { - fullChanged = mLocalPowerManager.setDeviceIdleMode(false); + deepChanged = mLocalPowerManager.setDeviceIdleMode(false); lightChanged = mLocalPowerManager.setLightDeviceIdleMode(true); } try { @@ -851,7 +852,7 @@ public class DeviceIdleController extends SystemService : BatteryStats.DEVICE_IDLE_MODE_LIGHT, null, Process.myUid()); } catch (RemoteException e) { } - if (fullChanged) { + if (deepChanged) { getContext().sendBroadcastAsUser(mIdleIntent, UserHandle.ALL); } if (lightChanged) { @@ -861,7 +862,7 @@ public class DeviceIdleController extends SystemService } break; case MSG_REPORT_IDLE_OFF: { EventLogTags.writeDeviceIdleOffStart("unknown"); - final boolean fullChanged = mLocalPowerManager.setDeviceIdleMode(false); + final boolean deepChanged = mLocalPowerManager.setDeviceIdleMode(false); final boolean lightChanged = mLocalPowerManager.setLightDeviceIdleMode(false); try { mNetworkPolicyManager.setDeviceIdleMode(false); @@ -869,7 +870,7 @@ public class DeviceIdleController extends SystemService null, Process.myUid()); } catch (RemoteException e) { } - if (fullChanged) { + if (deepChanged) { incActiveIdleOps(); getContext().sendOrderedBroadcastAsUser(mIdleIntent, UserHandle.ALL, null, mIdleStartedDoneReceiver, null, 0, null, null); @@ -889,7 +890,7 @@ public class DeviceIdleController extends SystemService int activeUid = msg.arg1; EventLogTags.writeDeviceIdleOffStart( activeReason != null ? activeReason : "unknown"); - final boolean fullChanged = mLocalPowerManager.setDeviceIdleMode(false); + final boolean deepChanged = mLocalPowerManager.setDeviceIdleMode(false); final boolean lightChanged = mLocalPowerManager.setLightDeviceIdleMode(false); try { mNetworkPolicyManager.setDeviceIdleMode(false); @@ -897,7 +898,7 @@ public class DeviceIdleController extends SystemService activeReason, activeUid); } catch (RemoteException e) { } - if (fullChanged) { + if (deepChanged) { getContext().sendBroadcastAsUser(mIdleIntent, UserHandle.ALL); } if (lightChanged) { @@ -1102,7 +1103,7 @@ public class DeviceIdleController extends SystemService final PackageManager pm = getContext().getPackageManager(); synchronized (this) { - mEnabled = getContext().getResources().getBoolean( + mLightEnabled = mDeepEnabled = getContext().getResources().getBoolean( com.android.internal.R.bool.config_enableAutoPowerModes); SystemConfig sysConfig = SystemConfig.getInstance(); ArraySet<String> allowPowerExceptIdle = sysConfig.getAllowInPowerSaveExceptIdle(); @@ -1550,17 +1551,17 @@ public class DeviceIdleController extends SystemService void becomeInactiveIfAppropriateLocked() { if (DEBUG) Slog.d(TAG, "becomeInactiveIfAppropriateLocked()"); - if (((!mScreenOn && !mCharging) || mForceIdle) && mEnabled) { + if ((!mScreenOn && !mCharging) || mForceIdle) { // Screen has turned off; we are now going to become inactive and start // waiting to see if we will ultimately go idle. - if (mState == STATE_ACTIVE) { + if (mState == STATE_ACTIVE && mDeepEnabled) { mState = STATE_INACTIVE; if (DEBUG) Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE"); resetIdleManagementLocked(); scheduleAlarmLocked(mInactiveTimeout, false); EventLogTags.writeDeviceIdle(mState, "no activity"); } - if (mLightState == LIGHT_STATE_ACTIVE) { + if (mLightState == LIGHT_STATE_ACTIVE && mLightEnabled) { mLightState = LIGHT_STATE_INACTIVE; if (DEBUG) Slog.d(TAG, "Moved from LIGHT_STATE_ACTIVE to LIGHT_STATE_INACTIVE"); resetLightIdleManagementLocked(); @@ -1594,7 +1595,7 @@ public class DeviceIdleController extends SystemService void stepLightIdleStateLocked(String reason) { if (mLightState == LIGHT_STATE_OVERRIDE) { - // If we are already in full device idle mode, then + // If we are already in deep device idle mode, then // there is nothing left to do for light mode. return; } @@ -1731,7 +1732,7 @@ public class DeviceIdleController extends SystemService cancelLightAlarmLocked(); } EventLogTags.writeDeviceIdle(mState, reason); - addEvent(EVENT_FULL_IDLE); + addEvent(EVENT_DEEP_IDLE); mHandler.sendEmptyMessage(MSG_REPORT_IDLE_ON); break; case STATE_IDLE: @@ -1744,7 +1745,7 @@ public class DeviceIdleController extends SystemService (long)(mNextIdlePendingDelay * mConstants.IDLE_PENDING_FACTOR)); mState = STATE_IDLE_MAINTENANCE; EventLogTags.writeDeviceIdle(mState, reason); - addEvent(EVENT_FULL_MAINTENANCE); + addEvent(EVENT_DEEP_MAINTENANCE); mHandler.sendEmptyMessage(MSG_REPORT_IDLE_OFF); break; } @@ -1877,7 +1878,7 @@ public class DeviceIdleController extends SystemService becomeInactive = true; } if (mLightState == LIGHT_STATE_OVERRIDE) { - // We went out of light idle mode because we had started full idle mode... let's + // We went out of light idle mode because we had started deep idle mode... let's // now go back and reset things so we resume light idling if appropriate. mLightState = STATE_ACTIVE; EventLogTags.writeDeviceIdleLight(mLightState, type); @@ -2183,11 +2184,11 @@ public class DeviceIdleController extends SystemService pw.println(" force-idle"); pw.println(" Force directly into idle mode, regardless of other device state."); pw.println(" Use \"step\" to get out."); - pw.println(" disable"); + pw.println(" disable [light|deep|all]"); pw.println(" Completely disable device idle mode."); - pw.println(" enable"); + pw.println(" enable [light|deep|all]"); pw.println(" Re-enable device idle mode after it had previously been disabled."); - pw.println(" enabled"); + pw.println(" enabled [light|deep|all]"); pw.println(" Print 1 if device idle mode is currently enabled, else 0."); pw.println(" whitelist"); pw.println(" Print currently whitelisted apps."); @@ -2247,7 +2248,7 @@ public class DeviceIdleController extends SystemService synchronized (this) { long token = Binder.clearCallingIdentity(); try { - if (!mEnabled) { + if (!mDeepEnabled) { pw.println("Unable to go idle; not enabled"); return -1; } @@ -2274,11 +2275,32 @@ public class DeviceIdleController extends SystemService null); synchronized (this) { long token = Binder.clearCallingIdentity(); + String arg = shell.getNextArg(); try { - if (mEnabled) { - mEnabled = false; - becomeActiveLocked("disabled", Process.myUid()); - pw.println("Idle mode disabled"); + boolean becomeActive = false; + boolean valid = false; + if (arg == null || "deep".equals(arg) || "all".equals(arg)) { + valid = true; + if (mDeepEnabled) { + mDeepEnabled = false; + becomeActive = true; + pw.println("Deep idle mode disabled"); + } + } + if (arg == null || "light".equals(arg) || "all".equals(arg)) { + valid = true; + if (mLightEnabled) { + mLightEnabled = false; + becomeActive = true; + pw.println("Light idle mode disabled"); + } + } + if (becomeActive) { + becomeActiveLocked((arg == null ? "all" : arg) + "-disabled", + Process.myUid()); + } + if (!valid) { + pw.println("Unknown idle mode: " + arg); } } finally { Binder.restoreCallingIdentity(token); @@ -2289,12 +2311,31 @@ public class DeviceIdleController extends SystemService null); synchronized (this) { long token = Binder.clearCallingIdentity(); + String arg = shell.getNextArg(); try { - exitForceIdleLocked(); - if (!mEnabled) { - mEnabled = true; + boolean becomeInactive = false; + boolean valid = false; + if (arg == null || "deep".equals(arg) || "all".equals(arg)) { + valid = true; + if (!mDeepEnabled) { + mDeepEnabled = true; + becomeInactive = true; + pw.println("Deep idle mode enabled"); + } + } + if (arg == null || "light".equals(arg) || "all".equals(arg)) { + valid = true; + if (!mLightEnabled) { + mLightEnabled = true; + becomeInactive = true; + pw.println("Light idle mode enable"); + } + } + if (becomeInactive) { becomeInactiveIfAppropriateLocked(); - pw.println("Idle mode enabled"); + } + if (!valid) { + pw.println("Unknown idle mode: " + arg); } } finally { Binder.restoreCallingIdentity(token); @@ -2302,7 +2343,16 @@ public class DeviceIdleController extends SystemService } } else if ("enabled".equals(cmd)) { synchronized (this) { - pw.println(mEnabled ? "1" : " 0"); + String arg = shell.getNextArg(); + if (arg == null || "all".equals(arg)) { + pw.println(mDeepEnabled && mLightEnabled ? "1" : 0); + } else if ("deep".equals(arg)) { + pw.println(mDeepEnabled ? "1" : 0); + } else if ("light".equals(arg)) { + pw.println(mLightEnabled ? "1" : 0); + } else { + pw.println("Unknown idle mode: " + arg); + } } } else if ("whitelist".equals(cmd)) { long token = Binder.clearCallingIdentity(); @@ -2441,8 +2491,8 @@ public class DeviceIdleController extends SystemService case EVENT_NORMAL: label = " normal"; break; case EVENT_LIGHT_IDLE: label = " light-idle"; break; case EVENT_LIGHT_MAINTENANCE: label = "light-maint"; break; - case EVENT_FULL_IDLE: label = " full-idle"; break; - case EVENT_FULL_MAINTENANCE: label = " full-maint"; break; + case EVENT_DEEP_IDLE: label = " deep-idle"; break; + case EVENT_DEEP_MAINTENANCE: label = " deep-maint"; break; default: label = " ??"; break; } pw.print(" "); @@ -2519,7 +2569,8 @@ public class DeviceIdleController extends SystemService } } - pw.print(" mEnabled="); pw.println(mEnabled); + pw.print(" mLightEnabled="); pw.print(mLightEnabled); + pw.print(" mDeepEnabled="); pw.println(mDeepEnabled); pw.print(" mForceIdle="); pw.println(mForceIdle); pw.print(" mMotionSensor="); pw.println(mMotionSensor); pw.print(" mCurDisplay="); pw.println(mCurDisplay); diff --git a/services/core/java/com/android/server/HardwarePropertiesManagerService.java b/services/core/java/com/android/server/HardwarePropertiesManagerService.java new file mode 100644 index 000000000000..cc21e99371e4 --- /dev/null +++ b/services/core/java/com/android/server/HardwarePropertiesManagerService.java @@ -0,0 +1,99 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server; + +import android.app.admin.DevicePolicyManager; +import android.content.Context; +import android.content.pm.PackageManager; +import android.os.Binder; +import android.os.CpuUsageInfo; +import android.os.IHardwarePropertiesManager; + +import java.util.Arrays; + +/** + * Service for {@link HardwarePropertiesManager} + */ +public class HardwarePropertiesManagerService extends IHardwarePropertiesManager.Stub { + + private static native void nativeInit(); + + private static native float[] nativeGetFanSpeeds(); + private static native float[] nativeGetDeviceTemperatures(int type); + private static native CpuUsageInfo[] nativeGetCpuUsages(); + + private final Context mContext; + private final Object mLock = new Object(); + + public HardwarePropertiesManagerService(Context context) { + mContext = context; + synchronized (mLock) { + nativeInit(); + } + } + + @Override + public float[] getDeviceTemperatures(String callingPackage, int type) throws SecurityException { + enforceHardwarePropertiesRetrievalAllowed(callingPackage); + synchronized (mLock) { + return nativeGetDeviceTemperatures(type); + } + } + + @Override + public CpuUsageInfo[] getCpuUsages(String callingPackage) throws SecurityException { + enforceHardwarePropertiesRetrievalAllowed(callingPackage); + synchronized (mLock) { + return nativeGetCpuUsages(); + } + } + + @Override + public float[] getFanSpeeds(String callingPackage) throws SecurityException { + enforceHardwarePropertiesRetrievalAllowed(callingPackage); + synchronized (mLock) { + return nativeGetFanSpeeds(); + } + } + + /** + * Throws SecurityException if the calling package is not allowed to retrieve information + * provided by the service. + * + * @param callingPackage The calling package name. + * + * @throws SecurityException if a non profile or device owner tries to retrieve information + * provided by the service. + */ + private void enforceHardwarePropertiesRetrievalAllowed(String callingPackage) + throws SecurityException { + final PackageManager pm = mContext.getPackageManager(); + try { + final int uid = pm.getPackageUid(callingPackage, 0); + if (Binder.getCallingUid() != uid) { + throw new SecurityException("The caller has faked the package name."); + } + } catch (PackageManager.NameNotFoundException e) { + throw new SecurityException("The caller has faked the package name."); + } + + final DevicePolicyManager dpm = mContext.getSystemService(DevicePolicyManager.class); + if (!dpm.isDeviceOwnerApp(callingPackage) && !dpm.isProfileOwnerApp(callingPackage)) { + throw new SecurityException("The caller is not a device or profile owner."); + } + } +} diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java index d1de7e57ef45..5ba8bd555237 100644 --- a/services/core/java/com/android/server/InputMethodManagerService.java +++ b/services/core/java/com/android/server/InputMethodManagerService.java @@ -1458,8 +1458,7 @@ public class InputMethodManagerService extends IInputMethodManager.Stub return null; } - @Override - public InputBindResult startInput( + private InputBindResult startInput( /* @InputMethodClient.StartInputReason */ final int startInputReason, IInputMethodClient client, IInputContext inputContext, EditorInfo attribute, int controlFlags) { @@ -2197,7 +2196,19 @@ public class InputMethodManagerService extends IInputMethodManager.Stub } @Override - public InputBindResult windowGainedFocus( + public InputBindResult startInputOrWindowGainedFocus( + /* @InputMethodClient.StartInputReason */ final int startInputReason, + IInputMethodClient client, IBinder windowToken, int controlFlags, int softInputMode, + int windowFlags, EditorInfo attribute, IInputContext inputContext) { + if (windowToken != null) { + return windowGainedFocus(startInputReason, client, windowToken, controlFlags, + softInputMode, windowFlags, attribute, inputContext); + } else { + return startInput(startInputReason, client, inputContext, attribute, controlFlags); + } + } + + private InputBindResult windowGainedFocus( /* @InputMethodClient.StartInputReason */ final int startInputReason, IInputMethodClient client, IBinder windowToken, int controlFlags, int softInputMode, int windowFlags, EditorInfo attribute, IInputContext inputContext) { diff --git a/services/core/java/com/android/server/PersistentDataBlockService.java b/services/core/java/com/android/server/PersistentDataBlockService.java index a291cc72ea60..2085f3277648 100644 --- a/services/core/java/com/android/server/PersistentDataBlockService.java +++ b/services/core/java/com/android/server/PersistentDataBlockService.java @@ -27,6 +27,7 @@ import android.os.SystemProperties; import android.os.UserHandle; import android.os.UserManager; import android.service.persistentdata.IPersistentDataBlockService; +import android.service.persistentdata.PersistentDataBlockManager; import android.util.Slog; import com.android.internal.R; @@ -72,6 +73,9 @@ public class PersistentDataBlockService extends SystemService { private static final int MAX_DATA_BLOCK_SIZE = 1024 * 100; public static final int DIGEST_SIZE_BYTES = 32; private static final String OEM_UNLOCK_PROP = "sys.oem_unlock_allowed"; + private static final String FLASH_LOCK_PROP = "ro.boot.flash.locked"; + private static final String FLASH_LOCK_LOCKED = "1"; + private static final String FLASH_LOCK_UNLOCKED = "0"; private final Context mContext; private final String mDataBlockFile; @@ -454,6 +458,20 @@ public class PersistentDataBlockService extends SystemService { } @Override + public int getFlashLockState() { + enforceOemUnlockPermission(); + String locked = SystemProperties.get(FLASH_LOCK_PROP); + switch (locked) { + case FLASH_LOCK_LOCKED: + return PersistentDataBlockManager.FLASH_LOCK_LOCKED; + case FLASH_LOCK_UNLOCKED: + return PersistentDataBlockManager.FLASH_LOCK_UNLOCKED; + default: + return PersistentDataBlockManager.FLASH_LOCK_UNKNOWN; + } + } + + @Override public int getDataBlockSize() { enforcePersistentDataBlockAccess(); diff --git a/services/core/java/com/android/server/RecoverySystemService.java b/services/core/java/com/android/server/RecoverySystemService.java new file mode 100644 index 000000000000..d237fe7b4c3e --- /dev/null +++ b/services/core/java/com/android/server/RecoverySystemService.java @@ -0,0 +1,214 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server; + +import android.content.Context; +import android.os.IRecoverySystem; +import android.os.IRecoverySystemProgressListener; +import android.os.RecoverySystem; +import android.os.RemoteException; +import android.os.SystemProperties; +import android.system.ErrnoException; +import android.system.Os; +import android.util.Slog; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; + +/** + * The recovery system service is responsible for coordinating recovery related + * functions on the device. It sets up (or clears) the bootloader control block + * (BCB), which will be read by the bootloader and the recovery image. It also + * triggers /system/bin/uncrypt via init to de-encrypt an OTA package on the + * /data partition so that it can be accessed under the recovery image. + */ +public final class RecoverySystemService extends SystemService { + private static final String TAG = "RecoverySystemService"; + private static final boolean DEBUG = false; + + // A pipe file to monitor the uncrypt progress. + private static final String UNCRYPT_STATUS_FILE = "/cache/recovery/uncrypt_status"; + // Temporary command file to communicate between the system server and uncrypt. + private static final String COMMAND_FILE = "/cache/recovery/command"; + + private Context mContext; + + public RecoverySystemService(Context context) { + super(context); + mContext = context; + } + + @Override + public void onStart() { + publishBinderService(Context.RECOVERY_SERVICE, new BinderService()); + } + + private final class BinderService extends IRecoverySystem.Stub { + @Override // Binder call + public boolean uncrypt(String filename, IRecoverySystemProgressListener listener) { + if (DEBUG) Slog.d(TAG, "uncrypt: " + filename); + + mContext.enforceCallingOrSelfPermission(android.Manifest.permission.RECOVERY, null); + + // Write the filename into UNCRYPT_PACKAGE_FILE to be read by + // uncrypt. + RecoverySystem.UNCRYPT_PACKAGE_FILE.delete(); + + try (FileWriter uncryptFile = new FileWriter(RecoverySystem.UNCRYPT_PACKAGE_FILE)) { + uncryptFile.write(filename + "\n"); + } catch (IOException e) { + Slog.e(TAG, "IOException when writing \"" + RecoverySystem.UNCRYPT_PACKAGE_FILE + + "\": " + e.getMessage()); + return false; + } + + // Create the status pipe file to communicate with uncrypt. + new File(UNCRYPT_STATUS_FILE).delete(); + try { + Os.mkfifo(UNCRYPT_STATUS_FILE, 0600); + } catch (ErrnoException e) { + Slog.e(TAG, "ErrnoException when creating named pipe \"" + UNCRYPT_STATUS_FILE + + "\": " + e.getMessage()); + return false; + } + + // Trigger uncrypt via init. + SystemProperties.set("ctl.start", "uncrypt"); + + // Read the status from the pipe. + try (BufferedReader reader = new BufferedReader(new FileReader(UNCRYPT_STATUS_FILE))) { + int lastStatus = Integer.MIN_VALUE; + while (true) { + String str = reader.readLine(); + try { + int status = Integer.parseInt(str); + + // Avoid flooding the log with the same message. + if (status == lastStatus && lastStatus != Integer.MIN_VALUE) { + continue; + } + lastStatus = status; + + if (status >= 0 && status <= 100) { + // Update status + Slog.i(TAG, "uncrypt read status: " + status); + if (listener != null) { + try { + listener.onProgress(status); + } catch (RemoteException unused) { + Slog.w(TAG, "RemoteException when posting progress"); + } + } + if (status == 100) { + Slog.i(TAG, "uncrypt successfully finished."); + break; + } + } else { + // Error in /system/bin/uncrypt. + Slog.e(TAG, "uncrypt failed with status: " + status); + return false; + } + } catch (NumberFormatException unused) { + Slog.e(TAG, "uncrypt invalid status received: " + str); + return false; + } + } + } catch (IOException unused) { + Slog.e(TAG, "IOException when reading \"" + UNCRYPT_STATUS_FILE + "\"."); + return false; + } + + return true; + } + + @Override // Binder call + public boolean clearBcb() { + if (DEBUG) Slog.d(TAG, "clearBcb"); + return setupOrClearBcb(false, null); + } + + @Override // Binder call + public boolean setupBcb(String command) { + if (DEBUG) Slog.d(TAG, "setupBcb: [" + command + "]"); + return setupOrClearBcb(true, command); + } + + private boolean setupOrClearBcb(boolean isSetup, String command) { + mContext.enforceCallingOrSelfPermission(android.Manifest.permission.RECOVERY, null); + + if (isSetup) { + // Set up the command file to be read by uncrypt. + try (FileWriter commandFile = new FileWriter(COMMAND_FILE)) { + commandFile.write(command + "\n"); + } catch (IOException e) { + Slog.e(TAG, "IOException when writing \"" + COMMAND_FILE + + "\": " + e.getMessage()); + return false; + } + } + + // Create the status pipe file to communicate with uncrypt. + new File(UNCRYPT_STATUS_FILE).delete(); + try { + Os.mkfifo(UNCRYPT_STATUS_FILE, 0600); + } catch (ErrnoException e) { + Slog.e(TAG, "ErrnoException when creating named pipe \"" + + UNCRYPT_STATUS_FILE + "\": " + e.getMessage()); + return false; + } + + if (isSetup) { + SystemProperties.set("ctl.start", "setup-bcb"); + } else { + SystemProperties.set("ctl.start", "clear-bcb"); + } + + // Read the status from the pipe. + try (BufferedReader reader = new BufferedReader(new FileReader(UNCRYPT_STATUS_FILE))) { + while (true) { + String str = reader.readLine(); + try { + int status = Integer.parseInt(str); + + if (status == 100) { + Slog.i(TAG, "uncrypt " + (isSetup ? "setup" : "clear") + + " bcb successfully finished."); + break; + } else { + // Error in /system/bin/uncrypt. + Slog.e(TAG, "uncrypt failed with status: " + status); + return false; + } + } catch (NumberFormatException unused) { + Slog.e(TAG, "uncrypt invalid status received: " + str); + return false; + } + } + } catch (IOException unused) { + Slog.e(TAG, "IOException when reading \"" + UNCRYPT_STATUS_FILE + "\"."); + return false; + } + + // Delete the command file as we don't need it anymore. + new File(COMMAND_FILE).delete(); + return true; + } + } +} diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java index 163b9be2374b..d14364d25ea6 100644 --- a/services/core/java/com/android/server/accounts/AccountManagerService.java +++ b/services/core/java/com/android/server/accounts/AccountManagerService.java @@ -315,15 +315,15 @@ public class AccountManagerService IntentFilter userFilter = new IntentFilter(); userFilter.addAction(Intent.ACTION_USER_REMOVED); - userFilter.addAction(Intent.ACTION_USER_STARTED); + userFilter.addAction(Intent.ACTION_USER_UNLOCKED); mContext.registerReceiverAsUser(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (Intent.ACTION_USER_REMOVED.equals(action)) { onUserRemoved(intent); - } else if (Intent.ACTION_USER_STARTED.equals(action)) { - onUserStarted(intent); + } else if (Intent.ACTION_USER_UNLOCKED.equals(action)) { + onUserUnlocked(intent); } } }, UserHandle.ALL, userFilter, null, null); @@ -513,7 +513,7 @@ public class AccountManagerService } } - private void onUserStarted(Intent intent) { + private void onUserUnlocked(Intent intent) { int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1); if (userId < 1) return; @@ -991,13 +991,9 @@ public class AccountManagerService for (UserInfo user : users) { if (user.isRestricted() && (parentUserId == user.restrictedProfileParentId)) { addSharedAccountAsUser(account, user.id); - try { - if (ActivityManagerNative.getDefault().isUserRunning(user.id, 0)) { - mMessageHandler.sendMessage(mMessageHandler.obtainMessage( - MESSAGE_COPY_SHARED_ACCOUNT, parentUserId, user.id, account)); - } - } catch (RemoteException re) { - // Shouldn't happen + if (mUserManager.isUserUnlocked(user.id)) { + mMessageHandler.sendMessage(mMessageHandler.obtainMessage( + MESSAGE_COPY_SHARED_ACCOUNT, parentUserId, user.id, account)); } } } @@ -1734,7 +1730,7 @@ public class AccountManagerService private boolean accountExistsCacheLocked(UserAccounts accounts, Account account) { if (accounts.accountCache.containsKey(account.type)) { - for (Account acc : getUserAccountsForCaller().accountCache.get(account.type)) { + for (Account acc : accounts.accountCache.get(account.type)) { if (acc.name.equals(account.name)) { return true; } diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 8c04fbc17e05..e3a0b5c48f29 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -1894,7 +1894,7 @@ public final class ActivityManagerService extends ActivityManagerNative case SYSTEM_USER_UNLOCK_MSG: { final int userId = msg.arg1; mSystemServiceManager.unlockUser(userId); - mRecentTasks.cleanupLocked(userId); + mRecentTasks.loadUserRecentsLocked(userId); installEncryptionUnawareProviders(userId); break; } @@ -2541,7 +2541,7 @@ public final class ActivityManagerService extends ActivityManagerNative } void onUserStoppedLocked(int userId) { - mRecentTasks.unloadUserRecentsLocked(userId); + mRecentTasks.unloadUserDataFromMemoryLocked(userId); } public void initPowerManagement() { @@ -8739,6 +8739,10 @@ public final class ActivityManagerService extends ActivityManagerNative android.Manifest.permission.GET_DETAILED_TASKS) == PackageManager.PERMISSION_GRANTED; + if (!isUserRunning(userId, ActivityManager.FLAG_AND_UNLOCKED)) { + Slog.i(TAG, "user " + userId + " is still locked. Cannot load recents"); + return Collections.emptyList(); + } mRecentTasks.loadUserRecentsLocked(userId); final int recentsCount = mRecentTasks.size(); @@ -12287,10 +12291,11 @@ public final class ActivityManagerService extends ActivityManagerNative + " from " + proc.initialIdlePss + ")", true); } } - } else if (proc.setProcState < ActivityManager.PROCESS_STATE_HOME) { + } else if (proc.setProcState < ActivityManager.PROCESS_STATE_HOME + && proc.setProcState > ActivityManager.PROCESS_STATE_NONEXISTENT) { proc.notCachedSinceIdle = true; proc.initialIdlePss = 0; - proc.nextPssTime = ProcessList.computeNextPssTime(proc.curProcState, true, + proc.nextPssTime = ProcessList.computeNextPssTime(proc.setProcState, true, mTestPssMode, isSleeping(), now); } } @@ -12560,7 +12565,7 @@ public final class ActivityManagerService extends ActivityManagerNative // Make sure we have the current profile info, since it is needed for security checks. mUserController.onSystemReady(); - mRecentTasks.onSystemReady(); + mRecentTasks.onSystemReadyLocked(); // Check to see if there are any update receivers to run. if (!mDidUpdate) { if (mWaitingUpdate) { @@ -17212,6 +17217,15 @@ public final class ActivityManagerService extends ActivityManagerNative ProxyInfo proxy = intent.getParcelableExtra(Proxy.EXTRA_PROXY_INFO); mHandler.sendMessage(mHandler.obtainMessage(UPDATE_HTTP_PROXY_MSG, proxy)); break; + case android.hardware.Camera.ACTION_NEW_PICTURE: + case android.hardware.Camera.ACTION_NEW_VIDEO: + // These broadcasts are no longer allowed by the system, since they can + // cause significant thrashing at a crictical point (using the camera). + // Apps should use JobScehduler to monitor for media provider changes. + Slog.w(TAG, action + " no longer allowed; dropping from " + + UserHandle.formatUid(callingUid)); + // Lie; we don't want to crash the app. + return ActivityManager.BROADCAST_SUCCESS; } } @@ -17807,36 +17821,42 @@ public final class ActivityManagerService extends ActivityManagerNative final long origId = Binder.clearCallingIdentity(); final ActivityStack stack = mStackSupervisor.getStack(fromStackId); if (stack != null) { - if (fromStackId == DOCKED_STACK_ID) { - - // We are moving all tasks from the docked stack to the fullscreen stack, which - // is dismissing the docked stack, so resize all other stacks to fullscreen here - // already so we don't end up with resize trashing. - for (int i = FIRST_STATIC_STACK_ID; i <= LAST_STATIC_STACK_ID; i++) { - if (StackId.isResizeableByDockedStack(i)) { - ActivityStack otherStack = mStackSupervisor.getStack(i); - if (otherStack != null) { - mStackSupervisor.resizeStackLocked(i, - null, null, null, PRESERVE_WINDOWS, - true /* allowResizeInDockedMode */); + mWindowManager.deferSurfaceLayout(); + try { + if (fromStackId == DOCKED_STACK_ID) { + + // We are moving all tasks from the docked stack to the fullscreen stack, + // which is dismissing the docked stack, so resize all other stacks to + // fullscreen here already so we don't end up with resize trashing. + for (int i = FIRST_STATIC_STACK_ID; i <= LAST_STATIC_STACK_ID; i++) { + if (StackId.isResizeableByDockedStack(i)) { + ActivityStack otherStack = mStackSupervisor.getStack(i); + if (otherStack != null) { + mStackSupervisor.resizeStackLocked(i, + null, null, null, PRESERVE_WINDOWS, + true /* allowResizeInDockedMode */); + } } } } - } - final ArrayList<TaskRecord> tasks = stack.getAllTasks(); - final int size = tasks.size(); - if (onTop) { - for (int i = 0; i < size; i++) { - mStackSupervisor.moveTaskToStackLocked(tasks.get(i).taskId, - FULLSCREEN_WORKSPACE_STACK_ID, ON_TOP, !FORCE_FOCUS, - "moveTasksToFullscreenStack", ANIMATE); - } - } else { - for (int i = size - 1; i >= 0; i--) { - mStackSupervisor.positionTaskInStackLocked(tasks.get(i).taskId, - FULLSCREEN_WORKSPACE_STACK_ID, 0); + final ArrayList<TaskRecord> tasks = stack.getAllTasks(); + final int size = tasks.size(); + if (onTop) { + for (int i = 0; i < size; i++) { + mStackSupervisor.moveTaskToStackLocked(tasks.get(i).taskId, + FULLSCREEN_WORKSPACE_STACK_ID, onTop, !FORCE_FOCUS, + "moveTasksToFullscreenStack", ANIMATE); + } + } else { + for (int i = size - 1; i >= 0; i--) { + mStackSupervisor.positionTaskInStackLocked(tasks.get(i).taskId, + FULLSCREEN_WORKSPACE_STACK_ID, 0); + } } + } finally { + mWindowManager.continueSurfaceLayout(); } + } Binder.restoreCallingIdentity(origId); } @@ -18629,8 +18649,15 @@ public final class ActivityManagerService extends ActivityManagerNative } } if ((cr.flags&Context.BIND_NOT_FOREGROUND) == 0) { - if (client.curSchedGroup == Process.THREAD_GROUP_DEFAULT) { - schedGroup = Process.THREAD_GROUP_DEFAULT; + // This will treat important bound services identically to + // the top app, which may behave differently than generic + // foreground work. + if (client.curSchedGroup > schedGroup) { + if ((cr.flags&Context.BIND_IMPORTANT) != 0) { + schedGroup = client.curSchedGroup; + } else { + schedGroup = Process.THREAD_GROUP_DEFAULT; + } } if (clientProcState <= ActivityManager.PROCESS_STATE_TOP) { if (clientProcState == ActivityManager.PROCESS_STATE_TOP) { @@ -18694,11 +18721,15 @@ public final class ActivityManagerService extends ActivityManagerNative final ActivityRecord a = cr.activity; if ((cr.flags&Context.BIND_ADJUST_WITH_ACTIVITY) != 0) { if (a != null && adj > ProcessList.FOREGROUND_APP_ADJ && - (a.visible || a.state == ActivityState.RESUMED - || a.state == ActivityState.PAUSING)) { + (a.visible || a.state == ActivityState.RESUMED || + a.state == ActivityState.PAUSING)) { adj = ProcessList.FOREGROUND_APP_ADJ; if ((cr.flags&Context.BIND_NOT_FOREGROUND) == 0) { - schedGroup = Process.THREAD_GROUP_DEFAULT; + if ((cr.flags&Context.BIND_IMPORTANT) != 0) { + schedGroup = Process.THREAD_GROUP_TOP_APP; + } else { + schedGroup = Process.THREAD_GROUP_DEFAULT; + } } app.cached = false; app.adjType = "service"; @@ -18778,7 +18809,7 @@ public final class ActivityManagerService extends ActivityManagerNative if (procState > clientProcState) { procState = clientProcState; } - if (client.curSchedGroup == Process.THREAD_GROUP_DEFAULT) { + if (client.curSchedGroup > schedGroup) { schedGroup = Process.THREAD_GROUP_DEFAULT; } } @@ -20481,6 +20512,10 @@ public final class ActivityManagerService extends ActivityManagerNative Slog.w(TAG, "No user info for user #" + targetUserId); return false; } + if (!targetUserInfo.supportsSwitchTo()) { + Slog.w(TAG, "Cannot switch to User #" + targetUserId + ": not supported"); + return false; + } if (targetUserInfo.isManagedProfile()) { Slog.w(TAG, "Cannot switch to User #" + targetUserId + ": not a full user"); return false; diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 9562f94f5015..af5f6b336e72 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -119,6 +119,7 @@ import static android.app.ActivityManager.StackId.PINNED_STACK_ID; import static android.content.Intent.FLAG_ACTIVITY_MULTIPLE_TASK; import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK; import static android.content.pm.ActivityInfo.FLAG_SHOW_FOR_ALL_USERS; +import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZEABLE; import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE; import static android.content.pm.PackageManager.PERMISSION_GRANTED; import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER; @@ -719,14 +720,14 @@ public final class ActivityStackSupervisor implements DisplayListener { } int getNextTaskIdForUserLocked(int userId) { - mRecentTasks.loadUserRecentsLocked(userId); final int currentTaskId = mCurTaskIdForUser.get(userId, userId * MAX_TASK_IDS_PER_USER); // for a userId u, a taskId can only be in the range // [u*MAX_TASK_IDS_PER_USER, (u+1)*MAX_TASK_IDS_PER_USER-1], so if MAX_TASK_IDS_PER_USER // was 10, user 0 could only have taskIds 0 to 9, user 1: 10 to 19, user 2: 20 to 29, so on. int candidateTaskId = currentTaskId; - while (anyTaskForIdLocked(candidateTaskId, !RESTORE_FROM_RECENTS, - INVALID_STACK_ID) != null) { + while (mRecentTasks.taskIdTakenForUserLocked(candidateTaskId, userId) + || anyTaskForIdLocked(candidateTaskId, !RESTORE_FROM_RECENTS, + INVALID_STACK_ID) != null) { candidateTaskId++; if (candidateTaskId == (userId + 1) * MAX_TASK_IDS_PER_USER) { // Wrap around as there will be smaller task ids that are available now. @@ -2226,6 +2227,11 @@ public final class ActivityStackSupervisor implements DisplayListener { return; } + if (stackId == FREEFORM_WORKSPACE_STACK_ID && !mService.mSupportsFreeformWindowManagement) { + throw new IllegalArgumentException("moveTaskToStack:" + + "Attempt to move task " + taskId + " to unsupported freeform stack"); + } + final ActivityRecord topActivity = task.getTopActivity(); final int sourceStackId = task.stack != null ? task.stack.mStackId : INVALID_STACK_ID; final boolean mightReplaceWindow = @@ -2260,10 +2266,13 @@ public final class ActivityStackSupervisor implements DisplayListener { // Make sure the task has the appropriate bounds/size for the stack it is in. if (stackId == FULLSCREEN_WORKSPACE_STACK_ID && task.mBounds != null) { kept = resizeTaskLocked(task, stack.mBounds, RESIZE_MODE_SYSTEM, !mightReplaceWindow); - } else if (stackId == FREEFORM_WORKSPACE_STACK_ID - && task.mBounds == null && task.mLastNonFullscreenBounds != null) { - kept = resizeTaskLocked(task, task.mLastNonFullscreenBounds, - RESIZE_MODE_SYSTEM, !mightReplaceWindow); + } else if (stackId == FREEFORM_WORKSPACE_STACK_ID) { + Rect bounds = task.getLaunchBounds(); + if (bounds == null) { + stack.layoutTaskInStack(task, null); + bounds = task.mBounds; + } + kept = resizeTaskLocked(task, bounds, RESIZE_MODE_FORCED, !mightReplaceWindow); } else if (stackId == DOCKED_STACK_ID || stackId == PINNED_STACK_ID) { kept = resizeTaskLocked(task, stack.mBounds, RESIZE_MODE_SYSTEM, !mightReplaceWindow); } @@ -2362,6 +2371,8 @@ public final class ActivityStackSupervisor implements DisplayListener { stack.positionTask(task, position); // The task might have already been running and its visibility needs to be synchronized with // the visibility of the stack / windows. + stack.ensureActivityConfigurationLocked(task.topRunningActivityLocked(), 0, + !PRESERVE_WINDOWS); stack.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS); resumeFocusedStackTopActivityLocked(); } @@ -3242,9 +3253,9 @@ public final class ActivityStackSupervisor implements DisplayListener { return; } - if (!task.canGoInDockedStack() || task.inCropWindowsResizeMode()) { + if (!task.canGoInDockedStack() || task.mResizeMode == RESIZE_MODE_FORCE_RESIZEABLE) { // Display warning toast if we tried to put a non-dockable task in the docked stack or - // the task is running in cropped window mode. + // the task was forced to be resizable by the system. mWindowManager.scheduleShowNonResizeableDockToast(task.taskId); } } diff --git a/services/core/java/com/android/server/am/ActivityStartInterceptor.java b/services/core/java/com/android/server/am/ActivityStartInterceptor.java index 9b2bca009da6..e4b4c2dcfad7 100644 --- a/services/core/java/com/android/server/am/ActivityStartInterceptor.java +++ b/services/core/java/com/android/server/am/ActivityStartInterceptor.java @@ -98,15 +98,23 @@ class ActivityStartInterceptor { mAInfo = aInfo; mResolvedType = resolvedType; mInTask = inTask; - interceptQuietProfileIfNeeded(); - interceptSuspendPackageIfNeed(); + if (interceptSuspendPackageIfNeed()) { + // Skip the rest of interceptions as the package is suspended by device admin so + // no user action can undo this. + return; + } + if (interceptQuietProfileIfNeeded()) { + // If work profile is turned off, skip the work challenge since the profile can only + // be unlocked when profile's user is running. + return; + } interceptWorkProfileChallengeIfNeeded(); } - private void interceptQuietProfileIfNeeded() { + private boolean interceptQuietProfileIfNeeded() { // Do not intercept if the user has not turned off the profile if (!mUserManager.isQuietModeEnabled(UserHandle.of(mUserId))) { - return; + return false; } mIntent = UnlaunchableAppActivity.createInQuietModeDialogIntent(mUserId); mCallingPid = mRealCallingPid; @@ -115,15 +123,15 @@ class ActivityStartInterceptor { final UserInfo parent = mUserManager.getProfileParent(mUserId); mRInfo = mSupervisor.resolveIntent(mIntent, mResolvedType, parent.id); - mAInfo = mSupervisor.resolveActivity(mIntent, mRInfo, mStartFlags, - null /*profilerInfo*/); + mAInfo = mSupervisor.resolveActivity(mIntent, mRInfo, mStartFlags, null /*profilerInfo*/); + return true; } - private void interceptSuspendPackageIfNeed() { + private boolean interceptSuspendPackageIfNeed() { // Do not intercept if the admin did not suspend the package if (mAInfo == null || mAInfo.applicationInfo == null || (mAInfo.applicationInfo.flags & FLAG_SUSPENDED) == 0) { - return; + return false; } mIntent = UnlaunchableAppActivity.createPackageSuspendedDialogIntent(mAInfo.packageName, mUserId); @@ -137,15 +145,15 @@ class ActivityStartInterceptor { } else { mRInfo = mSupervisor.resolveIntent(mIntent, mResolvedType, mUserId); } - mAInfo = mSupervisor.resolveActivity(mIntent, mRInfo, mStartFlags, - null /*profilerInfo*/); + mAInfo = mSupervisor.resolveActivity(mIntent, mRInfo, mStartFlags, null /*profilerInfo*/); + return true; } - private void interceptWorkProfileChallengeIfNeeded() { + private boolean interceptWorkProfileChallengeIfNeeded() { final Intent interceptingIntent = interceptWithConfirmCredentialsIfNeeded(mIntent, mResolvedType, mAInfo, mCallingPackage, mUserId); if (interceptingIntent == null) { - return; + return false; } mIntent = interceptingIntent; mCallingPid = mRealCallingPid; @@ -161,8 +169,8 @@ class ActivityStartInterceptor { final UserInfo parent = mUserManager.getProfileParent(mUserId); mRInfo = mSupervisor.resolveIntent(mIntent, mResolvedType, parent.id); - mAInfo = mSupervisor.resolveActivity(mIntent, mRInfo, mStartFlags, - null /*profilerInfo*/); + mAInfo = mSupervisor.resolveActivity(mIntent, mRInfo, mStartFlags, null /*profilerInfo*/); + return true; } /** diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index 1166ae18387a..9c7eb9562721 100644 --- a/services/core/java/com/android/server/am/ActivityStarter.java +++ b/services/core/java/com/android/server/am/ActivityStarter.java @@ -608,7 +608,13 @@ class ActivityStarter { // app in a locked managed profile from an unlocked parent allow it to resolve // as user will be sent via confirm credentials to unlock the profile. UserManager userManager = UserManager.get(mService.mContext); - UserInfo parent = userManager.getProfileParent(userId); + UserInfo parent = null; + long token = Binder.clearCallingIdentity(); + try { + parent = userManager.getProfileParent(userId); + } finally { + Binder.restoreCallingIdentity(token); + } if (parent != null && userManager.isUserUnlocked(parent.getUserHandle()) && !userManager.isUserUnlocked(userInfo.getUserHandle())) { @@ -1037,6 +1043,9 @@ class ActivityStarter { // make sure it becomes visible as it starts (this will also trigger entry // animation). An example of this are PIP activities. mTargetStack.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS); + // Go ahead and tell window manager to execute app transition for this activity + // since the app transition will not be triggered through the resume channel. + mWindowManager.executeAppTransition(); } } else { mTargetStack.addRecentActivityLocked(mStartActivity); diff --git a/services/core/java/com/android/server/am/RecentTasks.java b/services/core/java/com/android/server/am/RecentTasks.java index 9c139d524bc1..7209814312af 100644 --- a/services/core/java/com/android/server/am/RecentTasks.java +++ b/services/core/java/com/android/server/am/RecentTasks.java @@ -37,8 +37,12 @@ import android.content.pm.PackageManager; import android.graphics.Bitmap; import android.os.Environment; import android.os.RemoteException; +import android.os.SystemClock; import android.os.UserHandle; +import android.provider.Settings.System; +import android.util.ArraySet; import android.util.Slog; +import android.util.SparseArray; import android.util.SparseBooleanArray; import java.io.File; @@ -59,12 +63,22 @@ class RecentTasks extends ArrayList<TaskRecord> { // Maximum number recent bitmaps to keep in memory. private static final int MAX_RECENT_BITMAPS = 3; + private static final int DEFAULT_INITIAL_CAPACITY = 5; /** * Save recent tasks information across reboots. */ private final TaskPersister mTaskPersister; - private final SparseBooleanArray mUsersWithRecentsLoaded = new SparseBooleanArray(5); + private final ActivityManagerService mService; + private final SparseBooleanArray mUsersWithRecentsLoaded = new SparseBooleanArray( + DEFAULT_INITIAL_CAPACITY); + + /** + * Stores for each user task ids that are taken by tasks residing in persistent storage. These + * tasks may or may not currently be in memory. + */ + final SparseArray<SparseBooleanArray> mPersistedTaskIds = new SparseArray<>( + DEFAULT_INITIAL_CAPACITY); // Mainly to avoid object recreation on multiple calls. private final ArrayList<TaskRecord> mTmpRecents = new ArrayList<TaskRecord>(); @@ -75,6 +89,7 @@ class RecentTasks extends ArrayList<TaskRecord> { RecentTasks(ActivityManagerService service, ActivityStackSupervisor mStackSupervisor) { File systemDir = Environment.getDataSystemDirectory(); + mService = service; mTaskPersister = new TaskPersister(systemDir, mStackSupervisor, service, this); mStackSupervisor.setRecentTasks(this); } @@ -87,6 +102,8 @@ class RecentTasks extends ArrayList<TaskRecord> { */ void loadUserRecentsLocked(int userId) { if (!mUsersWithRecentsLoaded.get(userId)) { + // Load the task ids if not loaded. + loadPersistedTaskIdsForUserLocked(userId); Slog.i(TAG, "Loading recents for user " + userId + " into memory."); addAll(mTaskPersister.restoreTasksForUserLocked(userId)); cleanupLocked(userId); @@ -94,21 +111,49 @@ class RecentTasks extends ArrayList<TaskRecord> { } } + private void loadPersistedTaskIdsForUserLocked(int userId) { + // An empty instead of a null set here means that no persistent taskIds were present + // on file when we loaded them. + if (mPersistedTaskIds.get(userId) == null) { + mPersistedTaskIds.put(userId, mTaskPersister.loadPersistedTaskIdsForUser(userId)); + } + } + + boolean taskIdTakenForUserLocked(int taskId, int userId) { + loadPersistedTaskIdsForUserLocked(userId); + return mPersistedTaskIds.get(userId).get(taskId); + } + void notifyTaskPersisterLocked(TaskRecord task, boolean flush) { if (task != null && task.stack != null && task.stack.isHomeStack()) { // Never persist the home stack. return; } + syncPersistentTaskIdsLocked(); mTaskPersister.wakeup(task, flush); } - void onSystemReady() { - clear(); - loadUserRecentsLocked(UserHandle.USER_SYSTEM); - startPersisting(); + private void syncPersistentTaskIdsLocked() { + for (int i = mPersistedTaskIds.size() - 1; i >= 0; i--) { + int userId = mPersistedTaskIds.keyAt(i); + if (mUsersWithRecentsLoaded.get(userId)) { + // Recents are loaded only after task ids are loaded. Therefore, the set of taskids + // referenced here should not be null. + mPersistedTaskIds.valueAt(i).clear(); + } + } + for (int i = size() - 1; i >= 0; i--) { + TaskRecord task = get(i); + if (task.isPersistable && (task.stack == null || !task.stack.isHomeStack())) { + // Set of persisted taskIds for task.userId should not be null here + mPersistedTaskIds.get(task.userId).put(task.taskId, true); + } + } } - void startPersisting() { + + void onSystemReadyLocked() { + clear(); mTaskPersister.startPersisting(); } @@ -125,11 +170,14 @@ class RecentTasks extends ArrayList<TaskRecord> { } void flush() { + synchronized (mService) { + syncPersistentTaskIdsLocked(); + } mTaskPersister.flush(); } /** - * Returns all userIds for which recents from storage are loaded + * Returns all userIds for which recents from persistent storage are loaded into this list. * * @return an array of userIds. */ @@ -149,12 +197,7 @@ class RecentTasks extends ArrayList<TaskRecord> { return usersWithRecentsLoaded; } - /** - * Removes recent tasks for this user if they are loaded, does not do anything otherwise. - * - * @param userId the user id. - */ - void unloadUserRecentsLocked(int userId) { + private void unloadUserRecentsLocked(int userId) { if (mUsersWithRecentsLoaded.get(userId)) { Slog.i(TAG, "Unloading recents for user " + userId + " from memory."); mUsersWithRecentsLoaded.delete(userId); @@ -162,6 +205,18 @@ class RecentTasks extends ArrayList<TaskRecord> { } } + /** + * Removes recent tasks and any other state kept in memory for the passed in user. Does not + * touch the information present on persistent storage. + * + * @param userId the id of the user + */ + void unloadUserDataFromMemoryLocked(int userId) { + unloadUserRecentsLocked(userId); + mPersistedTaskIds.delete(userId); + mTaskPersister.unloadUserDataFromMemory(userId); + } + TaskRecord taskForIdLocked(int id) { final int recentsCount = size(); for (int i = 0; i < recentsCount; i++) { diff --git a/services/core/java/com/android/server/am/TaskPersister.java b/services/core/java/com/android/server/am/TaskPersister.java index 283939e29229..11fd3bc61ca6 100644 --- a/services/core/java/com/android/server/am/TaskPersister.java +++ b/services/core/java/com/android/server/am/TaskPersister.java @@ -16,6 +16,9 @@ package com.android.server.am; +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.app.ActivityManager; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Debug; @@ -26,11 +29,13 @@ import android.os.SystemClock; import android.util.ArraySet; import android.util.AtomicFile; import android.util.Slog; +import android.util.SparseArray; +import android.util.SparseBooleanArray; import android.util.Xml; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.FastXmlSerializer; import com.android.internal.util.XmlUtils; - import libcore.io.IoUtils; import org.xmlpull.v1.XmlPullParser; @@ -38,9 +43,12 @@ import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlSerializer; import java.io.BufferedReader; +import java.io.BufferedWriter; import java.io.File; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.FileReader; +import java.io.FileWriter; import java.io.IOException; import java.io.StringWriter; import java.util.ArrayList; @@ -71,6 +79,7 @@ public class TaskPersister { private static final String TASKS_DIRNAME = "recent_tasks"; private static final String TASK_EXTENSION = ".xml"; private static final String IMAGES_DIRNAME = "recent_images"; + private static final String PERSISTED_TASK_IDS_FILENAME = "persisted_taskIds.txt"; static final String IMAGE_EXTENSION = ".png"; private static final String TAG_TASK = "task"; @@ -78,6 +87,7 @@ public class TaskPersister { private final ActivityManagerService mService; private final ActivityStackSupervisor mStackSupervisor; private final RecentTasks mRecentTasks; + private final SparseArray<SparseBooleanArray> mTaskIdsInFile = new SparseArray<>(); /** * Value determines write delay mode as follows: < 0 We are Flushing. No delays between writes @@ -170,6 +180,64 @@ public class TaskPersister { } } + @NonNull + SparseBooleanArray loadPersistedTaskIdsForUser(int userId) { + if (mTaskIdsInFile.get(userId) != null) { + return mTaskIdsInFile.get(userId).clone(); + } + final SparseBooleanArray persistedTaskIds = new SparseBooleanArray(); + BufferedReader reader = null; + String line; + try { + reader = new BufferedReader(new FileReader(getUserPersistedTaskIdsFile(userId))); + while ((line = reader.readLine()) != null) { + for (String taskIdString : line.split("\\s+")) { + int id = Integer.parseInt(taskIdString); + persistedTaskIds.put(id, true); + } + } + } catch (FileNotFoundException e) { + // File doesn't exist. Ignore. + } catch (Exception e) { + Slog.e(TAG, "Error while reading taskIds file for user " + userId, e); + } finally { + IoUtils.closeQuietly(reader); + } + mTaskIdsInFile.put(userId, persistedTaskIds); + return persistedTaskIds.clone(); + } + + private void maybeWritePersistedTaskIdsForUser(@NonNull SparseBooleanArray taskIds, + int userId) { + if (userId < 0) { + return; + } + SparseBooleanArray persistedIdsInFile = mTaskIdsInFile.get(userId); + if (persistedIdsInFile != null && persistedIdsInFile.equals(taskIds)) { + return; + } + final File persistedTaskIdsFile = getUserPersistedTaskIdsFile(userId); + BufferedWriter writer = null; + try { + writer = new BufferedWriter(new FileWriter(persistedTaskIdsFile)); + for (int i = 0; i < taskIds.size(); i++) { + if (taskIds.valueAt(i)) { + writer.write(String.valueOf(taskIds.keyAt(i))); + writer.newLine(); + } + } + } catch (Exception e) { + Slog.e(TAG, "Error while writing taskIds file for user " + userId, e); + } finally { + IoUtils.closeQuietly(writer); + } + mTaskIdsInFile.put(userId, taskIds.clone()); + } + + void unloadUserDataFromMemory(int userId) { + mTaskIdsInFile.delete(userId); + } + void wakeup(TaskRecord task, boolean flush) { synchronized (this) { if (task != null) { @@ -336,14 +404,16 @@ public class TaskPersister { File[] recentFiles = userTasksDir.listFiles(); if (recentFiles == null) { - Slog.e(TAG, "restoreTasksForUser: Unable to list files from " + userTasksDir); + Slog.e(TAG, "restoreTasksForUserLocked: Unable to list files from " + userTasksDir); return tasks; } for (int taskNdx = 0; taskNdx < recentFiles.length; ++taskNdx) { File taskFile = recentFiles[taskNdx]; - if (DEBUG) Slog.d(TAG, "restoreTasksForUser: userId=" + userId - + ", taskFile=" + taskFile.getName()); + if (DEBUG) { + Slog.d(TAG, "restoreTasksForUserLocked: userId=" + userId + + ", taskFile=" + taskFile.getName()); + } BufferedReader reader = null; boolean deleteFile = false; try { @@ -366,20 +436,29 @@ public class TaskPersister { // out the stuff we just read, if we don't write it we will // read the same thing again. // mWriteQueue.add(new TaskWriteQueueItem(task)); + final int taskId = task.taskId; - mStackSupervisor.setNextTaskIdForUserLocked(taskId, userId); - // Check if it's a valid user id. Don't add tasks for removed users. - if (userId == task.userId) { + if (mStackSupervisor.anyTaskForIdLocked(taskId, + /* restoreFromRecents= */ false, 0) != null) { + // Should not happen. + Slog.wtf(TAG, "Existing task with taskId " + taskId + "found"); + } else if (userId != task.userId) { + // Should not happen. + Slog.wtf(TAG, "Task with userId " + task.userId + " found in " + + userTasksDir.getAbsolutePath()); + } else { + // Looks fine. + mStackSupervisor.setNextTaskIdForUserLocked(taskId, userId); task.isPersistable = true; tasks.add(task); recoveredTaskIds.add(taskId); } } else { - Slog.e(TAG, "restoreTasksForUser: Unable to restore taskFile=" + Slog.e(TAG, "restoreTasksForUserLocked: Unable to restore taskFile=" + taskFile + ": " + fileToString(taskFile)); } } else { - Slog.wtf(TAG, "restoreTasksForUser: Unknown xml event=" + event + Slog.wtf(TAG, "restoreTasksForUserLocked: Unknown xml event=" + event + " name=" + name); } } @@ -454,6 +533,20 @@ public class TaskPersister { } } + private void writeTaskIdsFiles() { + int candidateUserIds[]; + synchronized (mService) { + candidateUserIds = mRecentTasks.usersWithRecentsLoadedLocked(); + } + SparseBooleanArray taskIdsToSave; + for (int userId : candidateUserIds) { + synchronized (mService) { + taskIdsToSave = mRecentTasks.mPersistedTaskIds.get(userId).clone(); + } + maybeWritePersistedTaskIdsForUser(taskIdsToSave, userId); + } + } + private void removeObsoleteFiles(ArraySet<Integer> persistentTaskIds) { int[] candidateUserIds; synchronized (mService) { @@ -472,8 +565,12 @@ public class TaskPersister { return BitmapFactory.decodeFile(filename); } + static File getUserPersistedTaskIdsFile(int userId) { + return new File(Environment.getDataSystemDeDirectory(userId), PERSISTED_TASK_IDS_FILENAME); + } + static File getUserTasksDir(int userId) { - File userTasksDir = new File(Environment.getUserSystemDirectory(userId), TASKS_DIRNAME); + File userTasksDir = new File(Environment.getDataSystemCeDirectory(userId), TASKS_DIRNAME); if (!userTasksDir.exists()) { if (!userTasksDir.mkdir()) { @@ -485,7 +582,7 @@ public class TaskPersister { } static File getUserImagesDir(int userId) { - File userImagesDir = new File(Environment.getUserSystemDirectory(userId), IMAGES_DIRNAME); + File userImagesDir = new File(Environment.getDataSystemCeDirectory(userId), IMAGES_DIRNAME); if (!userImagesDir.exists()) { if (!userImagesDir.mkdir()) { @@ -535,6 +632,7 @@ public class TaskPersister { } removeObsoleteFiles(persistentTaskIds); } + writeTaskIdsFiles(); // If mNextWriteTime, then don't delay between each call to saveToXml(). final WriteQueueItem item; diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java index 4e6dc3aecefd..addffd33d746 100644 --- a/services/core/java/com/android/server/am/UserController.java +++ b/services/core/java/com/android/server/am/UserController.java @@ -68,6 +68,7 @@ import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserHandle; import android.os.UserManager; +import android.os.UserManagerInternal; import android.os.storage.IMountService; import android.os.storage.StorageManager; import android.provider.Settings; @@ -82,6 +83,7 @@ import com.android.internal.R; import com.android.internal.annotations.GuardedBy; import com.android.internal.util.ArrayUtils; import com.android.internal.widget.LockPatternUtils; +import com.android.server.LocalServices; import com.android.server.pm.UserManagerService; import java.io.PrintWriter; @@ -561,6 +563,10 @@ final class UserController { continue; } UserInfo userInfo = getUserInfo(oldUserId); + if (userInfo.isEphemeral()) { + LocalServices.getService(UserManagerInternal.class) + .onEphemeralUserStop(oldUserId); + } if (userInfo.isGuest() || userInfo.isEphemeral()) { // This is a user to be stopped. stopUsersLocked(oldUserId, true, null); @@ -1375,6 +1381,11 @@ final class UserController { * intercept activity launches for work apps when the Work Challenge is present. */ boolean shouldConfirmCredentials(int userId) { + synchronized (mService) { + if (mStartedUsers.get(userId) == null) { + return false; + } + } if (!mLockPatternUtils.isSeparateProfileChallengeEnabled(userId)) { return false; } diff --git a/services/core/java/com/android/server/audio/RecordingActivityMonitor.java b/services/core/java/com/android/server/audio/RecordingActivityMonitor.java index a6325a4814b4..4b0a14241d6b 100644 --- a/services/core/java/com/android/server/audio/RecordingActivityMonitor.java +++ b/services/core/java/com/android/server/audio/RecordingActivityMonitor.java @@ -16,6 +16,7 @@ package com.android.server.audio; +import android.media.AudioFormat; import android.media.AudioManager; import android.media.AudioRecordConfiguration; import android.media.AudioSystem; @@ -48,11 +49,12 @@ public final class RecordingActivityMonitor implements AudioSystem.AudioRecordin /** * Implementation of android.media.AudioSystem.AudioRecordingCallback */ - public void onRecordingConfigurationChanged(int event, int session, int source) { + public void onRecordingConfigurationChanged(int event, int session, int source, + int[] recordingFormat) { if (MediaRecorder.isSystemOnlyAudioSource(source)) { return; } - if (updateSnapshot(event, session, source)) { + if (updateSnapshot(event, session, source, recordingFormat)) { final Iterator<RecMonitorClient> clientIterator = mClients.iterator(); synchronized(mClients) { while (clientIterator.hasNext()) { @@ -110,15 +112,30 @@ public final class RecordingActivityMonitor implements AudioSystem.AudioRecordin * @param event * @param session * @param source + * @param recordingFormat see + * {@link AudioSystem.AudioRecordingCallback#onRecordingConfigurationChanged(int, int, int, int[])} + * for the definition of the contents of the array * @return true if the list of active recording sessions has been modified, false otherwise. */ - private boolean updateSnapshot(int event, int session, int source) { + private boolean updateSnapshot(int event, int session, int source, int[] recordingFormat) { synchronized(mRecordConfigs) { switch (event) { case AudioManager.RECORD_CONFIG_EVENT_STOP: // return failure if an unknown recording session stopped return (mRecordConfigs.remove(new Integer(session)) != null); case AudioManager.RECORD_CONFIG_EVENT_START: + final AudioFormat clientFormat = new AudioFormat.Builder() + .setEncoding(recordingFormat[0]) + // FIXME this doesn't support index-based masks + .setChannelMask(recordingFormat[1]) + .setSampleRate(recordingFormat[2]) + .build(); + final AudioFormat deviceFormat = new AudioFormat.Builder() + .setEncoding(recordingFormat[3]) + // FIXME this doesn't support index-based masks + .setChannelMask(recordingFormat[4]) + .setSampleRate(recordingFormat[5]) + .build(); if (mRecordConfigs.containsKey(new Integer(session))) { // start of session that's already tracked, not worth an update // TO DO in the future when tracking record format: there might be a record @@ -126,7 +143,8 @@ public final class RecordingActivityMonitor implements AudioSystem.AudioRecordin return false; } else { mRecordConfigs.put(new Integer(session), - new AudioRecordConfiguration(session, source)); + new AudioRecordConfiguration(session, source, + clientFormat, deviceFormat)); return true; } default: diff --git a/services/core/java/com/android/server/connectivity/MetricsLoggerService.java b/services/core/java/com/android/server/connectivity/MetricsLoggerService.java new file mode 100644 index 000000000000..f6dc9b98c136 --- /dev/null +++ b/services/core/java/com/android/server/connectivity/MetricsLoggerService.java @@ -0,0 +1,177 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.server.connectivity; + +import com.android.server.SystemService; + +import android.content.Context; +import android.net.ConnectivityMetricsEvent; +import android.net.ConnectivityMetricsLogger; +import android.net.IConnectivityMetricsLogger; +import android.net.IConnectivityMetricsLoggerSubscriber; +import android.os.IBinder; +import android.os.RemoteException; +import android.util.ArrayMap; +import android.util.Log; + +import java.util.ArrayList; +import java.util.List; + +/** {@hide} */ +public class MetricsLoggerService extends SystemService { + private static String TAG = "ConnectivityMetricsLoggerService"; + private static final boolean DBG = true; + private static final boolean VDBG = false; + + public MetricsLoggerService(Context context) { + super(context); + } + + @Override + public void onStart() { + } + + @Override + public void onBootPhase(int phase) { + if (phase == SystemService.PHASE_SYSTEM_SERVICES_READY) { + Log.d(TAG, "onBootPhase: PHASE_SYSTEM_SERVICES_READY"); + publishBinderService(ConnectivityMetricsLogger.CONNECTIVITY_METRICS_LOGGER_SERVICE, + mBinder); + } + } + + private final int MAX_NUMBER_OF_EVENTS = 100; + private final int MAX_TIME_OFFSET = 15*60*1000; // 15 minutes + private final List<ConnectivityMetricsEvent> mEvents = new ArrayList<>(); + private long mLastSentEventTimeMillis = System.currentTimeMillis(); + + private final void enforceConnectivityInternalPermission() { + getContext().enforceCallingPermission( + android.Manifest.permission.CONNECTIVITY_INTERNAL, + "MetricsLoggerService"); + } + + /** + * Implementation of the IConnectivityMetricsLogger interface. + */ + private final IConnectivityMetricsLogger.Stub mBinder = new IConnectivityMetricsLogger.Stub() { + + private final ArrayMap<IConnectivityMetricsLoggerSubscriber, + IBinder.DeathRecipient> mSubscribers = new ArrayMap<>(); + + + private ConnectivityMetricsEvent[] prepareEventsToSendIfReady() { + ConnectivityMetricsEvent[] eventsToSend = null; + final long currentTimeMillis = System.currentTimeMillis(); + final long timeOffset = currentTimeMillis - mLastSentEventTimeMillis; + if (timeOffset >= MAX_TIME_OFFSET + || timeOffset < 0 // system time has changed + || mEvents.size() >= MAX_NUMBER_OF_EVENTS) { + // batch events + mLastSentEventTimeMillis = currentTimeMillis; + eventsToSend = new ConnectivityMetricsEvent[mEvents.size()]; + mEvents.toArray(eventsToSend); + mEvents.clear(); + } + return eventsToSend; + } + + private void maybeSendEventsToSubscribers(ConnectivityMetricsEvent[] eventsToSend) { + if (eventsToSend == null || eventsToSend.length == 0) return; + synchronized (mSubscribers) { + for (IConnectivityMetricsLoggerSubscriber s : mSubscribers.keySet()) { + try { + s.onEvents(eventsToSend); + } catch (RemoteException ex) { + Log.e(TAG, "RemoteException " + ex); + } + } + } + } + + public void logEvent(ConnectivityMetricsEvent event) { + ConnectivityMetricsEvent[] events = new ConnectivityMetricsEvent[]{event}; + logEvents(events); + } + + public void logEvents(ConnectivityMetricsEvent[] events) { + enforceConnectivityInternalPermission(); + ConnectivityMetricsEvent[] eventsToSend; + + if (VDBG) { + for (ConnectivityMetricsEvent e : events) { + Log.v(TAG, "writeEvent(" + e.toString() + ")"); + } + } + + synchronized (mEvents) { + for (ConnectivityMetricsEvent e : events) { + mEvents.add(e); + } + + eventsToSend = prepareEventsToSendIfReady(); + } + + maybeSendEventsToSubscribers(eventsToSend); + } + + public boolean subscribe(IConnectivityMetricsLoggerSubscriber subscriber) { + enforceConnectivityInternalPermission(); + if (VDBG) Log.v(TAG, "subscribe"); + + synchronized (mSubscribers) { + if (mSubscribers.containsKey(subscriber)) { + Log.e(TAG, "subscriber is already subscribed"); + return false; + } + final IConnectivityMetricsLoggerSubscriber s = subscriber; + IBinder.DeathRecipient dr = new IBinder.DeathRecipient() { + @Override + public void binderDied() { + if (VDBG) Log.v(TAG, "subscriber died"); + synchronized (mSubscribers) { + mSubscribers.remove(s); + } + } + }; + + try { + subscriber.asBinder().linkToDeath(dr, 0); + mSubscribers.put(subscriber, dr); + } catch (RemoteException e) { + Log.e(TAG, "subscribe failed: " + e); + return false; + } + } + + return true; + } + + public void unsubscribe(IConnectivityMetricsLoggerSubscriber subscriber) { + enforceConnectivityInternalPermission(); + if (VDBG) Log.v(TAG, "unsubscribe"); + synchronized (mSubscribers) { + IBinder.DeathRecipient dr = mSubscribers.remove(subscriber); + if (dr == null) { + Log.e(TAG, "subscriber is not subscribed"); + return; + } + subscriber.asBinder().unlinkToDeath(dr, 0); + } + } + }; +} diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java index 0d974344a432..95a98751c7d0 100644 --- a/services/core/java/com/android/server/content/SyncManager.java +++ b/services/core/java/com/android/server/content/SyncManager.java @@ -453,48 +453,10 @@ public class SyncManager { } } } - ensureDefaultPeriodicSyncsH(); } }); } - private void ensureDefaultPeriodicSyncsH() { - - long defaultPeriod = SyncStorageEngine.DEFAULT_POLL_FREQUENCY_SECONDS; - long defaultFlex = SyncStorageEngine.calculateDefaultFlexTime(defaultPeriod); - - List<AuthorityInfo> authorities = mSyncStorageEngine.getAllAuthorities(); - List<SyncOperation> syncs = getAllPendingSyncsFromCache(); - for (AuthorityInfo authority: authorities) { - boolean foundPeriodicSync = false; - for (SyncOperation op: syncs) { - if (op.isPeriodic && authority.target.matchesSpec(op.target)) { - foundPeriodicSync = true; - break; - } - } - if (!foundPeriodicSync) { - EndPoint target = authority.target; - final RegisteredServicesCache.ServiceInfo<SyncAdapterType> - syncAdapterInfo = mSyncAdapters.getServiceInfo( - SyncAdapterType.newKey( - target.provider, target.account.type), - target.userId); - if (syncAdapterInfo == null) { - continue; - } - scheduleSyncOperationH( - new SyncOperation(target, syncAdapterInfo.uid, - syncAdapterInfo.componentName.getPackageName(), - SyncOperation.REASON_PERIODIC, SyncStorageEngine.SOURCE_PERIODIC, - new Bundle(), syncAdapterInfo.type.allowParallelSyncs(), - true /* periodic */, SyncOperation.NO_JOB_ID, defaultPeriod * 1000L, - defaultFlex * 1000L) - ); - } - } - } - private synchronized void verifyJobScheduler() { if (mJobScheduler != null) { return; @@ -1357,7 +1319,7 @@ public class SyncManager { } getJobScheduler().scheduleAsPackage(b.build(), syncOperation.owningPackage, - syncOperation.target.userId); + syncOperation.target.userId, "sync"); } /** @@ -2271,6 +2233,7 @@ public class SyncManager { void checkIfDeviceReady() { if (mProvisioned && mBootCompleted) { synchronized(this) { + mSyncStorageEngine.restoreAllPeriodicSyncs(); // Dispatch any stashed messages. obtainMessage(MESSAGE_RELEASE_MESSAGES_FROM_QUEUE).sendToTarget(); } @@ -2622,7 +2585,6 @@ public class SyncManager { } if (mBootCompleted) { doDatabaseCleanup(); - mSyncStorageEngine.restoreAllPeriodicSyncs(); } AccountAndUser[] accounts = mRunningAccounts; diff --git a/services/core/java/com/android/server/content/SyncOperation.java b/services/core/java/com/android/server/content/SyncOperation.java index 957b0871715c..804be4ea1ae7 100644 --- a/services/core/java/com/android/server/content/SyncOperation.java +++ b/services/core/java/com/android/server/content/SyncOperation.java @@ -17,6 +17,7 @@ package com.android.server.content; import android.accounts.Account; +import android.app.job.JobInfo; import android.content.pm.PackageManager; import android.content.ContentResolver; import android.os.Bundle; @@ -320,11 +321,11 @@ public class SyncOperation { int findPriority() { if (isInitialization()) { - return 2; + return JobInfo.PRIORITY_SYNC_INITIALIZATION; } else if (isExpedited()) { - return 1; + return JobInfo.PRIORITY_SYNC_EXPEDITED; } - return 0; + return JobInfo.PRIORITY_DEFAULT; } private String toKey() { diff --git a/services/core/java/com/android/server/content/SyncStorageEngine.java b/services/core/java/com/android/server/content/SyncStorageEngine.java index 05aabf1f17b3..bc3fc6a47aef 100644 --- a/services/core/java/com/android/server/content/SyncStorageEngine.java +++ b/services/core/java/com/android/server/content/SyncStorageEngine.java @@ -80,7 +80,7 @@ public class SyncStorageEngine extends Handler { private static final String XML_TAG_LISTEN_FOR_TICKLES = "listenForTickles"; /** Default time for a periodic sync. */ - static final long DEFAULT_POLL_FREQUENCY_SECONDS = 60 * 60 * 24; // One day + private static final long DEFAULT_POLL_FREQUENCY_SECONDS = 60 * 60 * 24; // One day /** Percentage of period that is flex by default, if no flexMillis is set. */ private static final double DEFAULT_FLEX_PERCENT_SYNC = 0.04; @@ -857,16 +857,6 @@ public class SyncStorageEngine extends Handler { } } - List<AuthorityInfo> getAllAuthorities() { - List<AuthorityInfo> authorities = new ArrayList<AuthorityInfo>(); - synchronized (mAuthorities) { - for (int i = 0; i < mAuthorities.size(); i++) { - authorities.add(mAuthorities.valueAt(i)); - } - } - return authorities; - } - /** * Returns true if there is currently a sync operation being actively processed for the given * target. diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java index 13e764828c34..e9d684a6154e 100644 --- a/services/core/java/com/android/server/fingerprint/FingerprintService.java +++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java @@ -62,6 +62,7 @@ import android.hardware.fingerprint.IFingerprintDaemon; import android.hardware.fingerprint.IFingerprintDaemonCallback; import android.hardware.fingerprint.IFingerprintServiceReceiver; +import static android.Manifest.permission.INTERACT_ACROSS_USERS; import static android.app.ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND; import static android.Manifest.permission.MANAGE_FINGERPRINT; import static android.Manifest.permission.RESET_FINGERPRINT_LOCKOUT; @@ -504,6 +505,9 @@ public class FingerprintService extends SystemService implements IBinder.DeathRe } public boolean hasEnrolledFingerprints(int userId) { + if (userId != Binder.getCallingUid()) { + checkPermission(INTERACT_ACROSS_USERS); + } return mFingerprintUtils.getFingerprintsForUser(mContext, userId).size() > 0; } diff --git a/services/core/java/com/android/server/job/JobSchedulerService.java b/services/core/java/com/android/server/job/JobSchedulerService.java index 811c94720a36..f1d7b36a98b6 100644 --- a/services/core/java/com/android/server/job/JobSchedulerService.java +++ b/services/core/java/com/android/server/job/JobSchedulerService.java @@ -49,14 +49,14 @@ import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; import android.os.UserHandle; -import android.os.Process; -import android.util.ArraySet; import android.util.Slog; import android.util.SparseArray; +import android.util.SparseBooleanArray; import com.android.internal.app.IBatteryStats; import com.android.server.DeviceIdleController; import com.android.server.LocalServices; +import com.android.server.job.JobStore.JobStatusFunctor; import com.android.server.job.controllers.AppIdleController; import com.android.server.job.controllers.BatteryController; import com.android.server.job.controllers.ConnectivityController; @@ -80,11 +80,17 @@ import com.android.server.job.controllers.TimeController; */ public final class JobSchedulerService extends com.android.server.SystemService implements StateChangedListener, JobCompletedListener { + static final String TAG = "JobSchedulerService"; public static final boolean DEBUG = false; + /** The number of concurrent jobs we run at one time. */ private static final int MAX_JOB_CONTEXTS_COUNT = ActivityManager.isLowRamDeviceStatic() ? 3 : 6; - static final String TAG = "JobSchedulerService"; + /** Enforce a per-app limit on scheduled jobs? */ + private static final boolean ENFORCE_MAX_JOBS = false; + /** The maximum number of jobs that we allow an unprivileged app to schedule */ + private static final int MAX_JOBS_PER_APP = 100; + /** Global local for all job scheduler state. */ final Object mLock = new Object(); /** Master list of jobs. */ @@ -156,11 +162,16 @@ public final class JobSchedulerService extends com.android.server.SystemService boolean mDeviceIdleMode; /** - * What we last reported to DeviceIdleController about wheter we are active. + * What we last reported to DeviceIdleController about whether we are active. */ boolean mReportedActive; /** + * Which uids are currently in the foreground. + */ + final SparseBooleanArray mForegroundUids = new SparseBooleanArray(); + + /** * Cleans up outstanding jobs when a package is removed. Even if it's being replaced later we * still clean up. On reinstall the package will have a new uid. */ @@ -196,9 +207,11 @@ public final class JobSchedulerService extends com.android.server.SystemService final private IUidObserver mUidObserver = new IUidObserver.Stub() { @Override public void onUidStateChanged(int uid, int procState) throws RemoteException { + updateUidState(uid, procState); } @Override public void onUidGone(int uid) throws RemoteException { + updateUidState(uid, ActivityManager.PROCESS_STATE_CACHED_EMPTY); } @Override public void onUidActive(int uid) throws RemoteException { @@ -233,11 +246,12 @@ public final class JobSchedulerService extends com.android.server.SystemService * @return Result of this operation. See <code>JobScheduler#RESULT_*</code> return codes. */ public int schedule(JobInfo job, int uId) { - return scheduleAsPackage(job, uId, null, -1); + return scheduleAsPackage(job, uId, null, -1, null); } - public int scheduleAsPackage(JobInfo job, int uId, String packageName, int userId) { - JobStatus jobStatus = JobStatus.createFromJobInfo(job, uId, packageName, userId); + public int scheduleAsPackage(JobInfo job, int uId, String packageName, int userId, + String tag) { + JobStatus jobStatus = JobStatus.createFromJobInfo(job, uId, packageName, userId, tag); try { if (ActivityManagerNative.getDefault().getAppStartMode(uId, job.getService().getPackageName()) == ActivityManager.APP_START_MODE_DISABLED) { @@ -250,6 +264,15 @@ public final class JobSchedulerService extends com.android.server.SystemService if (DEBUG) Slog.d(TAG, "SCHEDULE: " + jobStatus.toShortString()); JobStatus toCancel; synchronized (mLock) { + // Jobs on behalf of others don't apply to the per-app job cap + if (ENFORCE_MAX_JOBS && packageName == null) { + if (mJobs.countJobsForUid(uId) > MAX_JOBS_PER_APP) { + Slog.w(TAG, "Too many jobs for uid " + uId); + throw new IllegalStateException("Apps may not schedule more than " + + MAX_JOBS_PER_APP + " distinct jobs"); + } + } + toCancel = mJobs.getJobByUidAndJobId(uId, job.getId()); } startTrackingJob(jobStatus, toCancel); @@ -261,17 +284,15 @@ public final class JobSchedulerService extends com.android.server.SystemService } public List<JobInfo> getPendingJobs(int uid) { - ArrayList<JobInfo> outList = new ArrayList<JobInfo>(); synchronized (mLock) { - ArraySet<JobStatus> jobs = mJobs.getJobs(); - for (int i=0; i<jobs.size(); i++) { - JobStatus job = jobs.valueAt(i); - if (job.getUid() == uid) { - outList.add(job.getJob()); - } + List<JobStatus> jobs = mJobs.getJobsByUid(uid); + ArrayList<JobInfo> outList = new ArrayList<JobInfo>(jobs.size()); + for (int i = jobs.size() - 1; i >= 0; i--) { + JobStatus job = jobs.get(i); + outList.add(job.getJob()); } + return outList; } - return outList; } void cancelJobsForUser(int userHandle) { @@ -343,6 +364,25 @@ public final class JobSchedulerService extends com.android.server.SystemService } } + void updateUidState(int uid, int procState) { + synchronized (mLock) { + boolean foreground = procState <= ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE; + boolean changed = false; + if (foreground) { + if (!mForegroundUids.get(uid)) { + changed = true; + mForegroundUids.put(uid, true); + } + } else { + int index = mForegroundUids.indexOfKey(uid); + if (index >= 0) { + mForegroundUids.removeAt(index); + changed = true; + } + } + } + } + void updateIdleMode(boolean enabled) { boolean changed = false; boolean rocking; @@ -452,7 +492,8 @@ public final class JobSchedulerService extends com.android.server.SystemService mPowerManager = (PowerManager)getContext().getSystemService(Context.POWER_SERVICE); try { ActivityManagerNative.getDefault().registerUidObserver(mUidObserver, - ActivityManager.UID_OBSERVER_IDLE); + ActivityManager.UID_OBSERVER_PROCSTATE | ActivityManager.UID_OBSERVER_GONE + | ActivityManager.UID_OBSERVER_IDLE); } catch (RemoteException e) { // ignored; both services live in system_server } @@ -471,14 +512,16 @@ public final class JobSchedulerService extends com.android.server.SystemService getContext().getMainLooper())); } // Attach jobs to their controllers. - ArraySet<JobStatus> jobs = mJobs.getJobs(); - for (int i=0; i<jobs.size(); i++) { - JobStatus job = jobs.valueAt(i); - for (int controller=0; controller<mControllers.size(); controller++) { - mControllers.get(controller).deviceIdleModeChanged(mDeviceIdleMode); - mControllers.get(controller).maybeStartTrackingJobLocked(job, null); + mJobs.forEachJob(new JobStatusFunctor() { + @Override + public void process(JobStatus job) { + for (int controller = 0; controller < mControllers.size(); controller++) { + final StateController sc = mControllers.get(controller); + sc.deviceIdleModeChanged(mDeviceIdleMode); + sc.maybeStartTrackingJobLocked(job, null); + } } - } + }); // GO GO GO! mHandler.obtainMessage(MSG_CHECK_JOB).sendToTarget(); } @@ -741,32 +784,50 @@ public final class JobSchedulerService extends com.android.server.SystemService * as many as we can. */ private void queueReadyJobsForExecutionLockedH() { - ArraySet<JobStatus> jobs = mJobs.getJobs(); - mPendingJobs.clear(); if (DEBUG) { Slog.d(TAG, "queuing all ready jobs for execution:"); } - for (int i=0; i<jobs.size(); i++) { - JobStatus job = jobs.valueAt(i); + mPendingJobs.clear(); + mJobs.forEachJob(mReadyQueueFunctor); + mReadyQueueFunctor.postProcess(); + + if (DEBUG) { + final int queuedJobs = mPendingJobs.size(); + if (queuedJobs == 0) { + Slog.d(TAG, "No jobs pending."); + } else { + Slog.d(TAG, queuedJobs + " jobs queued."); + } + } + } + + class ReadyJobQueueFunctor implements JobStatusFunctor { + ArrayList<JobStatus> newReadyJobs; + + @Override + public void process(JobStatus job) { if (isReadyToBeExecutedLocked(job)) { if (DEBUG) { Slog.d(TAG, " queued " + job.toShortString()); } - mPendingJobs.add(job); + if (newReadyJobs == null) { + newReadyJobs = new ArrayList<JobStatus>(); + } + newReadyJobs.add(job); } else if (areJobConstraintsNotSatisfiedLocked(job)) { stopJobOnServiceContextLocked(job, JobParameters.REASON_CONSTRAINTS_NOT_SATISFIED); } } - if (DEBUG) { - final int queuedJobs = mPendingJobs.size(); - if (queuedJobs == 0) { - Slog.d(TAG, "No jobs pending."); - } else { - Slog.d(TAG, queuedJobs + " jobs queued."); + + public void postProcess() { + if (newReadyJobs != null) { + mPendingJobs.addAll(newReadyJobs); } + newReadyJobs = null; } } + private final ReadyJobQueueFunctor mReadyQueueFunctor = new ReadyJobQueueFunctor(); /** * The state of at least one job has changed. Here is where we could enforce various @@ -777,18 +838,21 @@ public final class JobSchedulerService extends com.android.server.SystemService * If more than 4 jobs total are ready we send them all off. * TODO: It would be nice to consolidate these sort of high-level policies somewhere. */ - private void maybeQueueReadyJobsForExecutionLockedH() { - mPendingJobs.clear(); - int chargingCount = 0; - int idleCount = 0; - int backoffCount = 0; - int connectivityCount = 0; - int contentCount = 0; - List<JobStatus> runnableJobs = null; - ArraySet<JobStatus> jobs = mJobs.getJobs(); - if (DEBUG) Slog.d(TAG, "Maybe queuing ready jobs..."); - for (int i=0; i<jobs.size(); i++) { - JobStatus job = jobs.valueAt(i); + class MaybeReadyJobQueueFunctor implements JobStatusFunctor { + int chargingCount; + int idleCount; + int backoffCount; + int connectivityCount; + int contentCount; + List<JobStatus> runnableJobs; + + public MaybeReadyJobQueueFunctor() { + reset(); + } + + // Functor method invoked for each job via JobStore.forEachJob() + @Override + public void process(JobStatus job) { if (isReadyToBeExecutedLocked(job)) { try { if (ActivityManagerNative.getDefault().getAppStartMode(job.getUid(), @@ -797,7 +861,7 @@ public final class JobSchedulerService extends com.android.server.SystemService Slog.w(TAG, "Aborting job " + job.getUid() + ":" + job.getJob().toString() + " -- package not allowed to start"); mHandler.obtainMessage(MSG_STOP_JOB, job).sendToTarget(); - continue; + return; } } catch (RemoteException e) { } @@ -825,24 +889,46 @@ public final class JobSchedulerService extends com.android.server.SystemService JobParameters.REASON_CONSTRAINTS_NOT_SATISFIED); } } - if (backoffCount > 0 || - idleCount >= MIN_IDLE_COUNT || - connectivityCount >= MIN_CONNECTIVITY_COUNT || - chargingCount >= MIN_CHARGING_COUNT || - contentCount >= MIN_CONTENT_COUNT || - (runnableJobs != null && runnableJobs.size() >= MIN_READY_JOBS_COUNT)) { - if (DEBUG) { - Slog.d(TAG, "maybeQueueReadyJobsForExecutionLockedH: Running jobs."); - } - for (int i=0; i<runnableJobs.size(); i++) { - mPendingJobs.add(runnableJobs.get(i)); - } - } else { - if (DEBUG) { - Slog.d(TAG, "maybeQueueReadyJobsForExecutionLockedH: Not running anything."); + + public void postProcess() { + if (backoffCount > 0 || + idleCount >= MIN_IDLE_COUNT || + connectivityCount >= MIN_CONNECTIVITY_COUNT || + chargingCount >= MIN_CHARGING_COUNT || + contentCount >= MIN_CONTENT_COUNT || + (runnableJobs != null && runnableJobs.size() >= MIN_READY_JOBS_COUNT)) { + if (DEBUG) { + Slog.d(TAG, "maybeQueueReadyJobsForExecutionLockedH: Running jobs."); + } + mPendingJobs.addAll(runnableJobs); + } else { + if (DEBUG) { + Slog.d(TAG, "maybeQueueReadyJobsForExecutionLockedH: Not running anything."); + } } + + // Be ready for next time + reset(); + } + + private void reset() { + chargingCount = 0; + idleCount = 0; + backoffCount = 0; + connectivityCount = 0; + contentCount = 0; + runnableJobs = null; } } + private final MaybeReadyJobQueueFunctor mMaybeQueueFunctor = new MaybeReadyJobQueueFunctor(); + + private void maybeQueueReadyJobsForExecutionLockedH() { + if (DEBUG) Slog.d(TAG, "Maybe queuing ready jobs..."); + + mPendingJobs.clear(); + mJobs.forEachJob(mMaybeQueueFunctor); + mMaybeQueueFunctor.postProcess(); + } /** * Criteria for moving a job into the pending queue: @@ -893,6 +979,17 @@ public final class JobSchedulerService extends com.android.server.SystemService } } + private int evaluateJobPriorityLocked(JobStatus job) { + int priority = job.getPriority(); + if (priority >= JobInfo.PRIORITY_FOREGROUND_APP) { + return priority; + } + if (mForegroundUids.get(job.getSourceUid())) { + return JobInfo.PRIORITY_FOREGROUND_APP; + } + return priority; + } + /** * Takes jobs from pending queue and runs them on available contexts. * If no contexts are available, preempts lower priority jobs to @@ -929,6 +1026,8 @@ public final class JobSchedulerService extends com.android.server.SystemService continue; } + nextPending.lastEvaluatedPriority = evaluateJobPriorityLocked(nextPending); + // Find a context for nextPending. The context should be available OR // it should have lowest priority among all running jobs // (sharing the same Uid as nextPending) @@ -950,11 +1049,11 @@ public final class JobSchedulerService extends com.android.server.SystemService if (job.getUid() != nextPending.getUid()) { continue; } - if (job.getPriority() >= nextPending.getPriority()) { + if (evaluateJobPriorityLocked(job) >= nextPending.lastEvaluatedPriority) { continue; } - if (minPriority > nextPending.getPriority()) { - minPriority = nextPending.getPriority(); + if (minPriority > nextPending.lastEvaluatedPriority) { + minPriority = nextPending.lastEvaluatedPriority; minPriorityContextId = i; } } @@ -978,18 +1077,18 @@ public final class JobSchedulerService extends com.android.server.SystemService mActiveServices.get(i).preemptExecutingJob(); preservePreferredUid = true; } else { + final JobStatus pendingJob = contextIdToJobMap[i]; if (DEBUG) { Slog.d(TAG, "About to run job on context " - + String.valueOf(i) + ", job: " + contextIdToJobMap[i]); + + String.valueOf(i) + ", job: " + pendingJob); } for (int ic=0; ic<mControllers.size(); ic++) { - StateController controller = mControllers.get(ic); - controller.prepareForExecutionLocked(contextIdToJobMap[i]); + mControllers.get(ic).prepareForExecutionLocked(pendingJob); } - if (!mActiveServices.get(i).executeRunnableJob(contextIdToJobMap[i])) { - Slog.d(TAG, "Error executing " + contextIdToJobMap[i]); + if (!mActiveServices.get(i).executeRunnableJob(pendingJob)) { + Slog.d(TAG, "Error executing " + pendingJob); } - mPendingJobs.remove(contextIdToJobMap[i]); + mPendingJobs.remove(pendingJob); } } if (!preservePreferredUid) { @@ -1088,19 +1187,29 @@ public final class JobSchedulerService extends com.android.server.SystemService } @Override - public int scheduleAsPackage(JobInfo job, String packageName, int userId) + public int scheduleAsPackage(JobInfo job, String packageName, int userId, String tag) throws RemoteException { + final int callerUid = Binder.getCallingUid(); if (DEBUG) { - Slog.d(TAG, "Scheduling job: " + job.toString() + " on behalf of " + packageName); + Slog.d(TAG, "Caller uid " + callerUid + " scheduling job: " + job.toString() + + " on behalf of " + packageName); } - final int uid = Binder.getCallingUid(); - if (uid != Process.SYSTEM_UID) { - throw new IllegalArgumentException("Only system process is allowed" - + "to set packageName"); + + if (packageName == null) { + throw new NullPointerException("Must specify a package for scheduleAsPackage()"); } + + int mayScheduleForOthers = getContext().checkCallingOrSelfPermission( + android.Manifest.permission.UPDATE_DEVICE_STATS); + if (mayScheduleForOthers != PackageManager.PERMISSION_GRANTED) { + throw new SecurityException("Caller uid " + callerUid + + " not permitted to schedule jobs for other apps"); + } + long ident = Binder.clearCallingIdentity(); try { - return JobSchedulerService.this.scheduleAsPackage(job, uid, packageName, userId); + return JobSchedulerService.this.scheduleAsPackage(job, callerUid, + packageName, userId, tag); } finally { Binder.restoreCallingIdentity(ident); } @@ -1183,7 +1292,7 @@ public final class JobSchedulerService extends com.android.server.SystemService return s.toString(); } - void dumpInternal(PrintWriter pw) { + void dumpInternal(final PrintWriter pw) { final long now = SystemClock.elapsedRealtime(); synchronized (mLock) { pw.print("Started users: "); @@ -1193,24 +1302,27 @@ public final class JobSchedulerService extends com.android.server.SystemService pw.println(); pw.println("Registered jobs:"); if (mJobs.size() > 0) { - ArraySet<JobStatus> jobs = mJobs.getJobs(); - for (int i=0; i<jobs.size(); i++) { - JobStatus job = jobs.valueAt(i); - pw.print(" Job #"); pw.print(i); pw.print(": "); - pw.println(job.toShortString()); - job.dump(pw, " "); - pw.print(" Ready: "); - pw.print(mHandler.isReadyToBeExecutedLocked(job)); - pw.print(" (job="); - pw.print(job.isReady()); - pw.print(" pending="); - pw.print(mPendingJobs.contains(job)); - pw.print(" active="); - pw.print(isCurrentlyActiveLocked(job)); - pw.print(" user="); - pw.print(mStartedUsers.contains(job.getUserId())); - pw.println(")"); - } + mJobs.forEachJob(new JobStatusFunctor() { + private int index = 0; + + @Override + public void process(JobStatus job) { + pw.print(" Job #"); pw.print(index++); pw.print(": "); + pw.println(job.toShortString()); + job.dump(pw, " "); + pw.print(" Ready: "); + pw.print(mHandler.isReadyToBeExecutedLocked(job)); + pw.print(" (job="); + pw.print(job.isReady()); + pw.print(" pending="); + pw.print(mPendingJobs.contains(job)); + pw.print(" active="); + pw.print(isCurrentlyActiveLocked(job)); + pw.print(" user="); + pw.print(mStartedUsers.contains(job.getUserId())); + pw.println(")"); + } + }); } else { pw.println(" None."); } @@ -1219,7 +1331,22 @@ public final class JobSchedulerService extends com.android.server.SystemService mControllers.get(i).dumpControllerStateLocked(pw); } pw.println(); - pw.println(printPendingQueue()); + pw.println("Foreground uids:"); + for (int i=0; i<mForegroundUids.size(); i++) { + pw.print(" "); pw.println(UserHandle.formatUid(mForegroundUids.keyAt(i))); + } + pw.println(); + pw.println("Pending queue:"); + for (int i=0; i<mPendingJobs.size(); i++) { + JobStatus job = mPendingJobs.get(i); + pw.print(" Pending #"); pw.print(i); pw.print(": "); + pw.println(job.toShortString()); + int priority = evaluateJobPriorityLocked(job); + if (priority != JobInfo.PRIORITY_DEFAULT) { + pw.print(" Evaluated priority: "); pw.println(priority); + } + pw.print(" Tag: "); pw.println(job.getTag()); + } pw.println(); pw.println("Active jobs:"); for (int i=0; i<mActiveServices.size(); i++) { @@ -1235,6 +1362,10 @@ public final class JobSchedulerService extends com.android.server.SystemService pw.print(" fromnow="); pw.println(timeout-now); jsc.getRunningJob().dump(pw, " "); + int priority = evaluateJobPriorityLocked(jsc.getRunningJob()); + if (priority != JobInfo.PRIORITY_DEFAULT) { + pw.print(" Evaluated priority: "); pw.println(priority); + } } } pw.println(); diff --git a/services/core/java/com/android/server/job/JobServiceContext.java b/services/core/java/com/android/server/job/JobServiceContext.java index 48549ce5a113..4239248549ce 100644 --- a/services/core/java/com/android/server/job/JobServiceContext.java +++ b/services/core/java/com/android/server/job/JobServiceContext.java @@ -204,7 +204,7 @@ public class JobServiceContext extends IJobCallback.Stub implements ServiceConne return false; } try { - mBatteryStats.noteJobStart(job.getName(), job.getSourceUid()); + mBatteryStats.noteJobStart(job.getBatteryName(), job.getSourceUid()); } catch (RemoteException e) { // Whatever. } @@ -369,6 +369,13 @@ public class JobServiceContext extends IJobCallback.Stub implements ServiceConne } break; case MSG_CANCEL: + if (mVerb == VERB_FINISHED) { + if (DEBUG) { + Slog.d(TAG, + "Trying to process cancel for torn-down context, ignoring."); + } + return; + } mParams.setStopReason(message.arg1); if (message.arg1 == JobParameters.REASON_PREEMPT) { mPreferredUid = mRunningJob != null ? mRunningJob.getUid() : @@ -478,12 +485,6 @@ public class JobServiceContext extends IJobCallback.Stub implements ServiceConne * _ENDING -> No point in doing anything here, so we ignore. */ private void handleCancelH() { - if (mRunningJob == null) { - if (DEBUG) { - Slog.d(TAG, "Trying to process cancel for torn-down context, ignoring."); - } - return; - } if (JobSchedulerService.DEBUG) { Slog.d(TAG, "Handling cancel for: " + mRunningJob.getJobId() + " " + VERB_STRINGS[mVerb]); @@ -511,7 +512,6 @@ public class JobServiceContext extends IJobCallback.Stub implements ServiceConne /** Process MSG_TIMEOUT here. */ private void handleOpTimeoutH() { - mParams.setStopReason(JobParameters.REASON_TIMEOUT); switch (mVerb) { case VERB_BINDING: Slog.e(TAG, "Time-out while trying to bind " + mRunningJob.toShortString() + @@ -536,6 +536,7 @@ public class JobServiceContext extends IJobCallback.Stub implements ServiceConne // Not an error - client ran out of time. Slog.i(TAG, "Client timed out while executing (no jobFinished received)." + " sending onStop. " + mRunningJob.toShortString()); + mParams.setStopReason(JobParameters.REASON_TIMEOUT); sendStopMessageH(); break; default: @@ -580,7 +581,8 @@ public class JobServiceContext extends IJobCallback.Stub implements ServiceConne } completedJob = mRunningJob; try { - mBatteryStats.noteJobFinish(mRunningJob.getName(), mRunningJob.getSourceUid()); + mBatteryStats.noteJobFinish(mRunningJob.getBatteryName(), + mRunningJob.getSourceUid()); } catch (RemoteException e) { // Whatever. } diff --git a/services/core/java/com/android/server/job/JobStore.java b/services/core/java/com/android/server/job/JobStore.java index 6020247c3df1..4268dab01a92 100644 --- a/services/core/java/com/android/server/job/JobStore.java +++ b/services/core/java/com/android/server/job/JobStore.java @@ -29,6 +29,7 @@ import android.util.AtomicFile; import android.util.ArraySet; import android.util.Pair; import android.util.Slog; +import android.util.SparseArray; import android.util.Xml; import com.android.internal.annotations.VisibleForTesting; @@ -68,8 +69,8 @@ public class JobStore { /** Threshold to adjust how often we want to write to the db. */ private static final int MAX_OPS_BEFORE_WRITE = 1; - final ArraySet<JobStatus> mJobSet; final Object mLock; + final JobSet mJobSet; // per-caller-uid tracking final Context mContext; private int mDirtyOperations; @@ -114,7 +115,7 @@ public class JobStore { jobDir.mkdirs(); mJobsFile = new AtomicFile(new File(jobDir, "jobs.xml")); - mJobSet = new ArraySet<JobStatus>(); + mJobSet = new JobSet(); readJobMapFromDisk(mJobSet); } @@ -137,19 +138,6 @@ public class JobStore { return replaced; } - /** - * Whether this jobStatus object already exists in the JobStore. - */ - public boolean containsJobIdForUid(int jobId, int uId) { - for (int i=mJobSet.size()-1; i>=0; i--) { - JobStatus ts = mJobSet.valueAt(i); - if (ts.getUid() == uId && ts.getJobId() == jobId) { - return true; - } - } - return false; - } - boolean containsJob(JobStatus jobStatus) { return mJobSet.contains(jobStatus); } @@ -158,6 +146,10 @@ public class JobStore { return mJobSet.size(); } + public int countJobsForUid(int uid) { + return mJobSet.countJobsForUid(uid); + } + /** * Remove the provided job. Will also delete the job if it was persisted. * @param writeBack If true, the job will be deleted (if it was persisted) immediately. @@ -188,14 +180,7 @@ public class JobStore { * @return A list of all the jobs scheduled by the provided user. Never null. */ public List<JobStatus> getJobsByUser(int userHandle) { - List<JobStatus> matchingJobs = new ArrayList<JobStatus>(); - for (int i=mJobSet.size()-1; i>=0; i--) { - JobStatus ts = mJobSet.valueAt(i); - if (UserHandle.getUserId(ts.getUid()) == userHandle) { - matchingJobs.add(ts); - } - } - return matchingJobs; + return mJobSet.getJobsByUser(userHandle); } /** @@ -203,14 +188,7 @@ public class JobStore { * @return All JobStatus objects for a given uid from the master list. Never null. */ public List<JobStatus> getJobsByUid(int uid) { - List<JobStatus> matchingJobs = new ArrayList<JobStatus>(); - for (int i=mJobSet.size()-1; i>=0; i--) { - JobStatus ts = mJobSet.valueAt(i); - if (ts.getUid() == uid) { - matchingJobs.add(ts); - } - } - return matchingJobs; + return mJobSet.getJobsByUid(uid); } /** @@ -219,20 +197,21 @@ public class JobStore { * @return the JobStatus that matches the provided uId and jobId, or null if none found. */ public JobStatus getJobByUidAndJobId(int uid, int jobId) { - for (int i=mJobSet.size()-1; i>=0; i--) { - JobStatus ts = mJobSet.valueAt(i); - if (ts.getUid() == uid && ts.getJobId() == jobId) { - return ts; - } - } - return null; + return mJobSet.get(uid, jobId); } /** - * @return The live array of JobStatus objects. + * Iterate over the set of all jobs, invoking the supplied functor on each. This is for + * customers who need to examine each job; we'd much rather not have to generate + * transient unified collections for them to iterate over and then discard, or creating + * iterators every time a client needs to perform a sweep. */ - public ArraySet<JobStatus> getJobs() { - return mJobSet; + public void forEachJob(JobStatusFunctor functor) { + mJobSet.forEachJob(functor); + } + + public interface JobStatusFunctor { + public void process(JobStatus jobStatus); } /** Version of the db schema. */ @@ -261,7 +240,7 @@ public class JobStore { } @VisibleForTesting - public void readJobMapFromDisk(ArraySet<JobStatus> jobSet) { + public void readJobMapFromDisk(JobSet jobSet) { new ReadJobMapFromDiskRunnable(jobSet).run(); } @@ -273,21 +252,19 @@ public class JobStore { @Override public void run() { final long startElapsed = SystemClock.elapsedRealtime(); - List<JobStatus> mStoreCopy = new ArrayList<JobStatus>(); + final List<JobStatus> storeCopy = new ArrayList<JobStatus>(); synchronized (mLock) { - // Copy over the jobs so we can release the lock before writing. - for (int i=0; i<mJobSet.size(); i++) { - JobStatus jobStatus = mJobSet.valueAt(i); - - if (!jobStatus.isPersisted()){ - continue; + // Clone the jobs so we can release the lock before writing. + mJobSet.forEachJob(new JobStatusFunctor() { + @Override + public void process(JobStatus job) { + if (job.isPersisted()) { + storeCopy.add(new JobStatus(job)); + } } - - JobStatus copy = new JobStatus(jobStatus); - mStoreCopy.add(copy); - } + }); } - writeJobsMapImpl(mStoreCopy); + writeJobsMapImpl(storeCopy); if (JobSchedulerService.DEBUG) { Slog.v(TAG, "Finished writing, took " + (SystemClock.elapsedRealtime() - startElapsed) + "ms"); @@ -346,6 +323,9 @@ public class JobStore { if (jobStatus.getSourcePackageName() != null) { out.attribute(null, "sourcePackageName", jobStatus.getSourcePackageName()); } + if (jobStatus.getSourceTag() != null) { + out.attribute(null, "sourceTag", jobStatus.getSourceTag()); + } out.attribute(null, "sourceUserId", String.valueOf(jobStatus.getSourceUserId())); out.attribute(null, "uid", Integer.toString(jobStatus.getUid())); out.attribute(null, "priority", String.valueOf(jobStatus.getPriority())); @@ -440,13 +420,13 @@ public class JobStore { * need to go through {@link JobStore#add(com.android.server.job.controllers.JobStatus)}. */ private class ReadJobMapFromDiskRunnable implements Runnable { - private final ArraySet<JobStatus> jobSet; + private final JobSet jobSet; /** * @param jobSet Reference to the (empty) set of JobStatus objects that back the JobStore, * so that after disk read we can populate it directly. */ - ReadJobMapFromDiskRunnable(ArraySet<JobStatus> jobSet) { + ReadJobMapFromDiskRunnable(JobSet jobSet) { this.jobSet = jobSet; } @@ -565,6 +545,8 @@ public class JobStore { final String sourcePackageName = parser.getAttributeValue(null, "sourcePackageName"); + final String sourceTag = parser.getAttributeValue(null, "sourceTag"); + int eventType; // Read out constraints tag. do { @@ -679,7 +661,7 @@ public class JobStore { parser.nextTag(); // Consume </extras> JobStatus js = new JobStatus( - jobBuilder.build(), uid, sourcePackageName, sourceUserId, + jobBuilder.build(), uid, sourcePackageName, sourceUserId, sourceTag, elapsedRuntimes.first, elapsedRuntimes.second); return js; } @@ -759,4 +741,122 @@ public class JobStore { return Pair.create(earliestRunTimeElapsed, latestRunTimeElapsed); } } + + static class JobSet { + // Key is the getUid() originator of the jobs in each sheaf + private SparseArray<ArraySet<JobStatus>> mJobs; + + public JobSet() { + mJobs = new SparseArray<ArraySet<JobStatus>>(); + } + + public List<JobStatus> getJobsByUid(int uid) { + ArrayList<JobStatus> matchingJobs = new ArrayList<JobStatus>(); + ArraySet<JobStatus> jobs = mJobs.get(uid); + if (jobs != null) { + matchingJobs.addAll(jobs); + } + return matchingJobs; + } + + // By user, not by uid, so we need to traverse by key and check + public List<JobStatus> getJobsByUser(int userId) { + ArrayList<JobStatus> result = new ArrayList<JobStatus>(); + for (int i = mJobs.size() - 1; i >= 0; i--) { + if (UserHandle.getUserId(mJobs.keyAt(i)) == userId) { + ArraySet<JobStatus> jobs = mJobs.get(i); + if (jobs != null) { + result.addAll(jobs); + } + } + } + return result; + } + + public boolean add(JobStatus job) { + final int uid = job.getUid(); + ArraySet<JobStatus> jobs = mJobs.get(uid); + if (jobs == null) { + jobs = new ArraySet<JobStatus>(); + mJobs.put(uid, jobs); + } + return jobs.add(job); + } + + public boolean remove(JobStatus job) { + final int uid = job.getUid(); + ArraySet<JobStatus> jobs = mJobs.get(uid); + boolean didRemove = (jobs != null) ? jobs.remove(job) : false; + if (didRemove && jobs.size() == 0) { + // no more jobs for this uid; let the now-empty set object be GC'd. + mJobs.remove(uid); + } + return didRemove; + } + + public boolean contains(JobStatus job) { + final int uid = job.getUid(); + ArraySet<JobStatus> jobs = mJobs.get(uid); + return jobs != null && jobs.contains(job); + } + + public JobStatus get(int uid, int jobId) { + ArraySet<JobStatus> jobs = mJobs.get(uid); + if (jobs != null) { + for (int i = jobs.size() - 1; i >= 0; i--) { + JobStatus job = jobs.valueAt(i); + if (job.getJobId() == jobId) { + return job; + } + } + } + return null; + } + + // Inefficient; use only for testing + public List<JobStatus> getAllJobs() { + ArrayList<JobStatus> allJobs = new ArrayList<JobStatus>(size()); + for (int i = mJobs.size(); i >= 0; i--) { + allJobs.addAll(mJobs.valueAt(i)); + } + return allJobs; + } + + public void clear() { + mJobs.clear(); + } + + public int size() { + int total = 0; + for (int i = mJobs.size() - 1; i >= 0; i--) { + total += mJobs.valueAt(i).size(); + } + return total; + } + + // We only want to count the jobs that this uid has scheduled on its own + // behalf, not those that the app has scheduled on someone else's behalf. + public int countJobsForUid(int uid) { + int total = 0; + ArraySet<JobStatus> jobs = mJobs.get(uid); + if (jobs != null) { + for (int i = jobs.size() - 1; i >= 0; i--) { + JobStatus job = jobs.valueAt(i); + if (job.getUid() == job.getSourceUid()) { + total++; + } + } + } + return total; + } + + public void forEachJob(JobStatusFunctor functor) { + for (int uidIndex = mJobs.size() - 1; uidIndex >= 0; uidIndex--) { + ArraySet<JobStatus> jobs = mJobs.valueAt(uidIndex); + for (int i = jobs.size() - 1; i >= 0; i--) { + functor.process(jobs.valueAt(i)); + } + } + } + } } diff --git a/services/core/java/com/android/server/job/controllers/JobStatus.java b/services/core/java/com/android/server/job/controllers/JobStatus.java index f83506909bd6..e6fbc39b6dc6 100644 --- a/services/core/java/com/android/server/job/controllers/JobStatus.java +++ b/services/core/java/com/android/server/job/controllers/JobStatus.java @@ -58,12 +58,14 @@ public final class JobStatus { final JobInfo job; /** Uid of the package requesting this job. */ final int callingUid; - final String name; - final String tag; + final String batteryName; final String sourcePackageName; final int sourceUserId; final int sourceUid; + final String sourceTag; + + final String tag; /** * Earliest point in the future at which this job will be eligible to run. A value of 0 @@ -87,6 +89,8 @@ public final class JobStatus { public ArraySet<Uri> changedUris; public ArraySet<String> changedAuthorities; + public int lastEvaluatedPriority; + /** * For use only by ContentObserverController: state it is maintaining about content URIs * being observed. @@ -99,12 +103,10 @@ public final class JobStatus { } private JobStatus(JobInfo job, int callingUid, String sourcePackageName, - int sourceUserId, int numFailures, long earliestRunTimeElapsedMillis, + int sourceUserId, String tag, int numFailures, long earliestRunTimeElapsedMillis, long latestRunTimeElapsedMillis) { this.job = job; this.callingUid = callingUid; - this.name = job.getService().flattenToShortString(); - this.tag = "*job*/" + this.name; int tempSourceUid = -1; if (sourceUserId != -1 && sourcePackageName != null) { @@ -119,11 +121,24 @@ public final class JobStatus { this.sourceUid = callingUid; this.sourceUserId = UserHandle.getUserId(callingUid); this.sourcePackageName = job.getService().getPackageName(); + this.sourceTag = null; } else { this.sourceUid = tempSourceUid; this.sourceUserId = sourceUserId; this.sourcePackageName = sourcePackageName; + this.sourceTag = tag; + } + + if (this.sourceTag != null) { + StringBuilder sb = new StringBuilder(); + sb.append(job.getService().getPackageName()); + sb.append('/'); + sb.append(this.sourceTag); + this.batteryName = sb.toString(); + } else { + this.batteryName = job.getService().flattenToShortString(); } + this.tag = "*job*/" + this.batteryName; this.earliestRunTimeElapsedMillis = earliestRunTimeElapsedMillis; this.latestRunTimeElapsedMillis = latestRunTimeElapsedMillis; @@ -158,8 +173,8 @@ public final class JobStatus { public JobStatus(JobStatus jobStatus) { this(jobStatus.getJob(), jobStatus.getUid(), jobStatus.getSourcePackageName(), jobStatus.getSourceUserId(), - jobStatus.getNumFailures(), jobStatus.getEarliestRunTime(), - jobStatus.getLatestRunTimeElapsed()); + jobStatus.getSourceTag(), jobStatus.getNumFailures(), + jobStatus.getEarliestRunTime(), jobStatus.getLatestRunTimeElapsed()); } /** @@ -169,18 +184,18 @@ public final class JobStatus { * wallclock runtime rather than resetting it on every boot. * We consider a freshly loaded job to no longer be in back-off. */ - public JobStatus(JobInfo job, int callingUid, String sourcePackageName, - int sourceUserId, long earliestRunTimeElapsedMillis, long latestRunTimeElapsedMillis) { - this(job, callingUid, sourcePackageName, sourceUserId, 0, earliestRunTimeElapsedMillis, - latestRunTimeElapsedMillis); + public JobStatus(JobInfo job, int callingUid, String sourcePackageName, int sourceUserId, + String sourceTag, long earliestRunTimeElapsedMillis, long latestRunTimeElapsedMillis) { + this(job, callingUid, sourcePackageName, sourceUserId, sourceTag, 0, + earliestRunTimeElapsedMillis, latestRunTimeElapsedMillis); } /** Create a new job to be rescheduled with the provided parameters. */ public JobStatus(JobStatus rescheduling, long newEarliestRuntimeElapsedMillis, long newLatestRuntimeElapsedMillis, int backoffAttempt) { this(rescheduling.job, rescheduling.getUid(), - rescheduling.getSourcePackageName(), - rescheduling.getSourceUserId(), backoffAttempt, newEarliestRuntimeElapsedMillis, + rescheduling.getSourcePackageName(), rescheduling.getSourceUserId(), + rescheduling.getSourceTag(), backoffAttempt, newEarliestRuntimeElapsedMillis, newLatestRuntimeElapsedMillis); } @@ -192,7 +207,7 @@ public final class JobStatus { * @param sourceUserId User id for whom this job is scheduled. -1 indicates this is same as the */ public static JobStatus createFromJobInfo(JobInfo job, int callingUid, String sourcePackageName, - int sourceUserId) { + int sourceUserId, String tag) { final long elapsedNow = SystemClock.elapsedRealtime(); final long earliestRunTimeElapsedMillis, latestRunTimeElapsedMillis; if (job.isPeriodic()) { @@ -204,7 +219,7 @@ public final class JobStatus { latestRunTimeElapsedMillis = job.hasLateConstraint() ? elapsedNow + job.getMaxExecutionDelayMillis() : NO_LATEST_RUNTIME; } - return new JobStatus(job, callingUid, sourcePackageName, sourceUserId, 0, + return new JobStatus(job, callingUid, sourcePackageName, sourceUserId, tag, 0, earliestRunTimeElapsedMillis, latestRunTimeElapsedMillis); } @@ -240,12 +255,16 @@ public final class JobStatus { return UserHandle.getUserId(callingUid); } + public String getSourceTag() { + return sourceTag; + } + public int getUid() { return callingUid; } - public String getName() { - return name; + public String getBatteryName() { + return batteryName; } public String getTag() { diff --git a/services/core/java/com/android/server/location/GnssLocationProvider.java b/services/core/java/com/android/server/location/GnssLocationProvider.java index 7fb1783e2e03..ed68abe4a9a8 100644 --- a/services/core/java/com/android/server/location/GnssLocationProvider.java +++ b/services/core/java/com/android/server/location/GnssLocationProvider.java @@ -508,18 +508,18 @@ public class GnssLocationProvider implements LocationProviderInterface { }; private void subscriptionOrSimChanged(Context context) { - Log.d(TAG, "received SIM related action: "); + if (DEBUG) Log.d(TAG, "received SIM related action: "); TelephonyManager phone = (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE); String mccMnc = phone.getSimOperator(); if (!TextUtils.isEmpty(mccMnc)) { - Log.d(TAG, "SIM MCC/MNC is available: " + mccMnc); + if (DEBUG) Log.d(TAG, "SIM MCC/MNC is available: " + mccMnc); synchronized (mLock) { reloadGpsProperties(context, mProperties); mNIHandler.setSuplEsEnabled(mSuplEsEnabled); } } else { - Log.d(TAG, "SIM MCC/MNC is still not available"); + if (DEBUG) Log.d(TAG, "SIM MCC/MNC is still not available"); } } @@ -569,7 +569,7 @@ public class GnssLocationProvider implements LocationProviderInterface { } private void reloadGpsProperties(Context context, Properties properties) { - Log.d(TAG, "Reset GPS properties, previous size = " + properties.size()); + if (DEBUG) Log.d(TAG, "Reset GPS properties, previous size = " + properties.size()); loadPropertiesFromResource(context, properties); boolean isPropertiesLoadedFromFile = false; final String gpsHardware = SystemProperties.get("ro.hardware.gps"); @@ -582,7 +582,7 @@ public class GnssLocationProvider implements LocationProviderInterface { if (!isPropertiesLoadedFromFile) { loadPropertiesFromFile(DEFAULT_PROPERTIES_FILE, properties); } - Log.d(TAG, "GPS properties reloaded, size = " + properties.size()); + if (DEBUG) Log.d(TAG, "GPS properties reloaded, size = " + properties.size()); // TODO: we should get rid of C2K specific setting. setSuplHostPort(properties.getProperty("SUPL_HOST"), @@ -603,7 +603,7 @@ public class GnssLocationProvider implements LocationProviderInterface { ByteArrayOutputStream baos = new ByteArrayOutputStream(4096); properties.store(baos, null); native_configuration_update(baos.toString()); - Log.d(TAG, "final config = " + baos.toString()); + if (DEBUG) Log.d(TAG, "final config = " + baos.toString()); } catch (IOException ex) { Log.e(TAG, "failed to dump properties contents"); } @@ -628,7 +628,7 @@ public class GnssLocationProvider implements LocationProviderInterface { String[] configValues = context.getResources().getStringArray( com.android.internal.R.array.config_gpsParameters); for (String item : configValues) { - Log.d(TAG, "GpsParamsResource: " + item); + if (DEBUG) Log.d(TAG, "GpsParamsResource: " + item); // We need to support "KEY =", but not "=VALUE". String[] split = item.split("="); if (split.length == 2) { @@ -917,11 +917,13 @@ public class GnssLocationProvider implements LocationProviderInterface { long certainty = mNtpTime.getCacheCertainty(); long now = System.currentTimeMillis(); - Log.d(TAG, "NTP server returned: " - + time + " (" + new Date(time) - + ") reference: " + timeReference - + " certainty: " + certainty - + " system time offset: " + (time - now)); + if (DEBUG) { + Log.d(TAG, "NTP server returned: " + + time + " (" + new Date(time) + + ") reference: " + timeReference + + " certainty: " + certainty + + " system time offset: " + (time - now)); + } native_inject_time(time, timeReference, (int) certainty); delay = NTP_INTERVAL; @@ -1633,7 +1635,7 @@ public class GnssLocationProvider implements LocationProviderInterface { if (DEBUG) Log.d(TAG, "GPS_AGPS_DATA_CONN_FAILED"); break; default: - Log.d(TAG, "Received Unknown AGPS status: " + status); + if (DEBUG) Log.d(TAG, "Received Unknown AGPS status: " + status); } } diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index 246da2e10de5..862c061c6b9c 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -868,6 +868,38 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } } + public void prepare() { + try { + mCb.onPrepare(); + } catch (RemoteException e) { + Slog.e(TAG, "Remote failure in prepare.", e); + } + } + + public void prepareFromMediaId(String mediaId, Bundle extras) { + try { + mCb.onPrepareFromMediaId(mediaId, extras); + } catch (RemoteException e) { + Slog.e(TAG, "Remote failure in prepareFromMediaId.", e); + } + } + + public void prepareFromSearch(String query, Bundle extras) { + try { + mCb.onPrepareFromSearch(query, extras); + } catch (RemoteException e) { + Slog.e(TAG, "Remote failure in prepareFromSearch.", e); + } + } + + public void prepareFromUri(Uri uri, Bundle extras) { + try { + mCb.onPrepareFromUri(uri, extras); + } catch (RemoteException e) { + Slog.e(TAG, "Remote failure in prepareFromUri.", e); + } + } + public void play() { try { mCb.onPlay(); @@ -880,7 +912,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { try { mCb.onPlayFromMediaId(mediaId, extras); } catch (RemoteException e) { - Slog.e(TAG, "Remote failure in playUri.", e); + Slog.e(TAG, "Remote failure in playFromMediaId.", e); } } @@ -1100,6 +1132,27 @@ public class MediaSessionRecord implements IBinder.DeathRecipient { } @Override + public void prepare() throws RemoteException { + mSessionCb.prepare(); + } + + @Override + public void prepareFromMediaId(String mediaId, Bundle extras) + throws RemoteException { + mSessionCb.prepareFromMediaId(mediaId, extras); + } + + @Override + public void prepareFromSearch(String query, Bundle extras) throws RemoteException { + mSessionCb.prepareFromSearch(query, extras); + } + + @Override + public void prepareFromUri(Uri uri, Bundle extras) throws RemoteException { + mSessionCb.prepareFromUri(uri, extras); + } + + @Override public void play() throws RemoteException { mSessionCb.play(); } diff --git a/services/core/java/com/android/server/net/IpConfigStore.java b/services/core/java/com/android/server/net/IpConfigStore.java index 90e26d848837..9f1435acd4c7 100644 --- a/services/core/java/com/android/server/net/IpConfigStore.java +++ b/services/core/java/com/android/server/net/IpConfigStore.java @@ -59,8 +59,12 @@ public class IpConfigStore { protected static final int IPCONFIG_FILE_VERSION = 2; + public IpConfigStore(DelayedDiskWrite writer) { + mWriter = writer; + } + public IpConfigStore() { - mWriter = new DelayedDiskWrite(); + this(new DelayedDiskWrite()); } private boolean writeConfig(DataOutputStream out, int configKey, diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java index 34214332a987..fc40f9f9a7de 100644 --- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java +++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java @@ -240,8 +240,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { private static final String ATTR_APP_ID = "appId"; private static final String ATTR_POLICY = "policy"; - private static final String TAG_ALLOW_BACKGROUND = TAG + ":allowBackground"; - private static final String ACTION_ALLOW_BACKGROUND = "com.android.server.net.action.ALLOW_BACKGROUND"; private static final String ACTION_SNOOZE_WARNING = @@ -844,11 +842,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } } - // ongoing notification when restricting background data - if (mRestrictBackground) { - enqueueRestrictedNotification(TAG_ALLOW_BACKGROUND); - } - // cancel stale notifications that we didn't renew above for (int i = beforeNotifs.size()-1; i >= 0; i--) { final String tag = beforeNotifs.valueAt(i); @@ -1026,42 +1019,6 @@ public class NetworkPolicyManagerService extends INetworkPolicyManager.Stub { } } - /** - * Show ongoing notification to reflect that {@link #mRestrictBackground} - * has been enabled. - */ - private void enqueueRestrictedNotification(String tag) { - final Resources res = mContext.getResources(); - final Notification.Builder builder = new Notification.Builder(mContext); - - final CharSequence title = res.getText(R.string.data_usage_restricted_title); - final CharSequence body = res.getString(R.string.data_usage_restricted_body); - - builder.setOnlyAlertOnce(true); - builder.setOngoing(true); - builder.setSmallIcon(R.drawable.stat_notify_error); - builder.setTicker(title); - builder.setContentTitle(title); - builder.setContentText(body); - builder.setColor(mContext.getColor( - com.android.internal.R.color.system_notification_accent_color)); - - final Intent intent = buildAllowBackgroundDataIntent(); - builder.setContentIntent( - PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)); - - // TODO: move to NotificationManager once we can mock it - try { - final String packageName = mContext.getPackageName(); - final int[] idReceived = new int[1]; - mNotifManager.enqueueNotificationWithTag(packageName, packageName, tag, - 0x0, builder.getNotification(), idReceived, UserHandle.USER_ALL); - mActiveNotifs.add(tag); - } catch (RemoteException e) { - // ignored; service lives in system_server - } - } - private void cancelNotification(String tag) { // TODO: move to NotificationManager once we can mock it try { diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java index 95198a316d47..c337c573ffb4 100644 --- a/services/core/java/com/android/server/notification/NotificationManagerService.java +++ b/services/core/java/com/android/server/notification/NotificationManagerService.java @@ -2307,7 +2307,7 @@ public class NotificationManagerService extends SystemService { synchronized (mNotificationList) { final StatusBarNotification n = r.sbn; - Slog.d(TAG, "EnqueueNotificationRunnable.run for: " + n.getKey()); + if (DBG) Slog.d(TAG, "EnqueueNotificationRunnable.run for: " + n.getKey()); NotificationRecord old = mNotificationsByKey.get(n.getKey()); if (old != null) { // Retain ranking information from previous record @@ -2328,7 +2328,7 @@ public class NotificationManagerService extends SystemService { handleGroupedNotificationLocked(r, old, callingUid, callingPid); boolean ignoreNotification = removeUnusedGroupedNotificationLocked(r, old, callingUid, callingPid); - Slog.d(TAG, "ignoreNotification is " + ignoreNotification); + if (DBG) Slog.d(TAG, "ignoreNotification is " + ignoreNotification); // This conditional is a dirty hack to limit the logging done on // behalf of the download manager without affecting other apps. diff --git a/services/core/java/com/android/server/notification/NotificationRecord.java b/services/core/java/com/android/server/notification/NotificationRecord.java index 25d17f60a054..6c5685df503d 100644 --- a/services/core/java/com/android/server/notification/NotificationRecord.java +++ b/services/core/java/com/android/server/notification/NotificationRecord.java @@ -227,12 +227,14 @@ public final class NotificationRecord { final int N = notification.actions.length; for (int i=0; i<N; i++) { final Notification.Action action = notification.actions[i]; - pw.println(String.format("%s [%d] \"%s\" -> %s", - prefix, - i, - action.title, - action.actionIntent.toString() - )); + if (action != null) { + pw.println(String.format("%s [%d] \"%s\" -> %s", + prefix, + i, + action.title, + action.actionIntent == null ? "null" : action.actionIntent.toString() + )); + } } pw.println(prefix + " }"); } diff --git a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java index e7c2f6f117a8..9a5a183233e2 100644 --- a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java +++ b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java @@ -35,6 +35,7 @@ import android.provider.CalendarContract; import android.provider.ContactsContract; import android.provider.MediaStore; import android.provider.Telephony.Sms.Intents; +import android.telephony.TelephonyManager; import android.security.Credentials; import android.util.ArraySet; import android.util.Log; @@ -584,6 +585,16 @@ final class DefaultPermissionGrantPolicy { grantRuntimePermissionsLPw(printSpoolerPackage, LOCATION_PERMISSIONS, true, userId); } + // EmergencyInfo + Intent emergencyInfoIntent = new Intent(TelephonyManager.ACTION_EMERGENCY_ASSISTANCE); + PackageParser.Package emergencyInfoPckg = getDefaultSystemHandlerActivityPackageLPr( + emergencyInfoIntent, userId); + if (emergencyInfoPckg != null + && doesPackageSupportRuntimePermissions(emergencyInfoPckg)) { + grantRuntimePermissionsLPw(emergencyInfoPckg, CONTACTS_PERMISSIONS, true, userId); + grantRuntimePermissionsLPw(emergencyInfoPckg, PHONE_PERMISSIONS, true, userId); + } + mService.mSettings.onDefaultRuntimePermissionsGrantedLPr(userId); } } diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index abbad21d4c7b..9b70802a750b 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -5001,8 +5001,9 @@ public class PackageManagerService extends IPackageManager.Stub { // cross-profile app linking works only towards the parent. final UserInfo parent = getProfileParent(sourceUserId); synchronized(mPackages) { + int flags = updateFlagsForResolve(0, parent.id, intent); CrossProfileDomainInfo xpDomainInfo = getCrossProfileDomainPreferredLpr( - intent, resolvedType, 0, sourceUserId, parent.id); + intent, resolvedType, flags, sourceUserId, parent.id); return xpDomainInfo != null; } } @@ -6829,17 +6830,37 @@ public class PackageManagerService extends IPackageManager.Stub { // Extract pacakges only if profile-guided compilation is enabled because // otherwise BackgroundDexOptService will not dexopt them later. - if (mUseJitProfiles) { - List<PackageParser.Package> pkgs; - synchronized (mPackages) { - pkgs = PackageManagerServiceUtils.getPackagesForDexopt(mPackages.values(), this); + if (!mUseJitProfiles || !isUpgrade()) { + return; + } + + List<PackageParser.Package> pkgs; + synchronized (mPackages) { + pkgs = PackageManagerServiceUtils.getPackagesForDexopt(mPackages.values(), this); + } + + int curr = 0; + int total = pkgs.size(); + for (PackageParser.Package pkg : pkgs) { + curr++; + + if (DEBUG_DEXOPT) { + Log.i(TAG, "Extracting app " + curr + " of " + total + ": " + pkg.packageName); } - for (PackageParser.Package pkg : pkgs) { - if (PackageDexOptimizer.canOptimizePackage(pkg)) { - performDexOpt(pkg.packageName, null /* instructionSet */, - false /* useProfiles */, true /* extractOnly */, false /* force */); + + if (!isFirstBoot()) { + try { + ActivityManagerNative.getDefault().showBootMessage( + mContext.getResources().getString(R.string.android_upgrading_apk, + curr, total), true); + } catch (RemoteException e) { } } + + if (PackageDexOptimizer.canOptimizePackage(pkg)) { + performDexOpt(pkg.packageName, null /* instructionSet */, + false /* useProfiles */, true /* extractOnly */, false /* force */); + } } } @@ -11546,20 +11567,41 @@ public class PackageManagerService extends IPackageManager.Stub { boolean onSd = (installFlags & PackageManager.INSTALL_EXTERNAL) != 0; // reader synchronized (mPackages) { - PackageParser.Package pkg = mPackages.get(packageName); - if (pkg != null) { - if ((installFlags & PackageManager.INSTALL_REPLACE_EXISTING) != 0) { - // Check for downgrading. - if ((installFlags & PackageManager.INSTALL_ALLOW_DOWNGRADE) == 0) { - try { - checkDowngrade(pkg, pkgLite); - } catch (PackageManagerException e) { - Slog.w(TAG, "Downgrade detected: " + e.getMessage()); - return PackageHelper.RECOMMEND_FAILED_VERSION_DOWNGRADE; - } + // Currently installed package which the new package is attempting to replace or + // null if no such package is installed. + PackageParser.Package installedPkg = mPackages.get(packageName); + // Package which currently owns the data which the new package will own if installed. + // If an app is unstalled while keeping data (e.g., adb uninstall -k), installedPkg + // will be null whereas dataOwnerPkg will contain information about the package + // which was uninstalled while keeping its data. + PackageParser.Package dataOwnerPkg = installedPkg; + if (dataOwnerPkg == null) { + PackageSetting ps = mSettings.mPackages.get(packageName); + if (ps != null) { + dataOwnerPkg = ps.pkg; + } + } + + if (dataOwnerPkg != null) { + // If installed, the package will get access to data left on the device by its + // predecessor. As a security measure, this is permited only if this is not a + // version downgrade or if the predecessor package is marked as debuggable and + // a downgrade is explicitly requested. + if (((dataOwnerPkg.applicationInfo.flags & ApplicationInfo.FLAG_DEBUGGABLE) == 0) + || ((installFlags & PackageManager.INSTALL_ALLOW_DOWNGRADE) == 0)) { + try { + checkDowngrade(dataOwnerPkg, pkgLite); + } catch (PackageManagerException e) { + Slog.w(TAG, "Downgrade detected: " + e.getMessage()); + return PackageHelper.RECOMMEND_FAILED_VERSION_DOWNGRADE; } + } + } + + if (installedPkg != null) { + if ((installFlags & PackageManager.INSTALL_REPLACE_EXISTING) != 0) { // Check for updated system application. - if ((pkg.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { + if ((installedPkg.applicationInfo.flags & ApplicationInfo.FLAG_SYSTEM) != 0) { if (onSd) { Slog.w(TAG, "Cannot install update to system app on sdcard"); return PackageHelper.RECOMMEND_FAILED_INVALID_LOCATION; @@ -11578,7 +11620,7 @@ public class PackageManagerService extends IPackageManager.Stub { // App explictly prefers external. Let policy decide } else { // Prefer previous location - if (isExternal(pkg)) { + if (isExternal(installedPkg)) { return PackageHelper.RECOMMEND_INSTALL_EXTERNAL; } return PackageHelper.RECOMMEND_INSTALL_INTERNAL; diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java index 690cb98a4e17..dd13809f8a90 100644 --- a/services/core/java/com/android/server/pm/Settings.java +++ b/services/core/java/com/android/server/pm/Settings.java @@ -4434,7 +4434,7 @@ final class Settings { if ((perm.info.flags&PermissionInfo.FLAG_COSTS_MONEY) != 0) { pw.print(", COSTS_MONEY"); } - if ((perm.info.flags&PermissionInfo.FLAG_HIDDEN) != 0) { + if ((perm.info.flags&PermissionInfo.FLAG_REMOVED) != 0) { pw.print(", HIDDEN"); } if ((perm.info.flags&PermissionInfo.FLAG_INSTALLED) != 0) { @@ -4611,7 +4611,7 @@ final class Settings { if (p.perm != null) { pw.print(" perm="); pw.println(p.perm); if ((p.perm.info.flags & PermissionInfo.FLAG_INSTALLED) == 0 - || (p.perm.info.flags & PermissionInfo.FLAG_HIDDEN) != 0) { + || (p.perm.info.flags & PermissionInfo.FLAG_REMOVED) != 0) { pw.print(" flags=0x"); pw.println(Integer.toHexString(p.perm.info.flags)); } } diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java index d5ed04a94f37..549026090a49 100644 --- a/services/core/java/com/android/server/pm/UserManagerService.java +++ b/services/core/java/com/android/server/pm/UserManagerService.java @@ -2982,6 +2982,22 @@ public class UserManagerService extends IUserManager.Stub { } @Override + public void onEphemeralUserStop(int userId) { + synchronized (mUsersLock) { + UserInfo userInfo = getUserInfoLU(userId); + if (userInfo != null && userInfo.isEphemeral()) { + // Do not allow switching back to the ephemeral user again as the user is going + // to be deleted. + userInfo.flags |= UserInfo.FLAG_DISABLED; + if (userInfo.isGuest()) { + // Indicate that the guest will be deleted after it stops. + userInfo.guestToRemove = true; + } + } + } + } + + @Override public UserInfo createUserEvenWhenDisallowed(String name, int flags) { UserInfo user = createUserInternalUnchecked(name, flags, UserHandle.USER_NULL); // Keep this in sync with UserManager.createUser diff --git a/services/core/java/com/android/server/policy/GlobalActions.java b/services/core/java/com/android/server/policy/GlobalActions.java index a0f20aa0f5b1..5ef518e21c58 100644 --- a/services/core/java/com/android/server/policy/GlobalActions.java +++ b/services/core/java/com/android/server/policy/GlobalActions.java @@ -18,6 +18,8 @@ package com.android.server.policy; import com.android.internal.app.AlertController; import com.android.internal.app.AlertController.AlertParams; +import com.android.internal.logging.MetricsLogger; +import com.android.internal.logging.MetricsProto.MetricsEvent; import com.android.internal.telephony.TelephonyIntents; import com.android.internal.telephony.TelephonyProperties; import com.android.internal.R; @@ -388,6 +390,8 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac public void run() { try { // Take an "interactive" bugreport. + MetricsLogger.action(mContext, + MetricsEvent.ACTION_BUGREPORT_FROM_POWER_MENU_INTERACTIVE); ActivityManagerNative.getDefault().requestBugReport( ActivityManager.BUGREPORT_OPTION_INTERACTIVE); } catch (RemoteException e) { @@ -405,6 +409,7 @@ class GlobalActions implements DialogInterface.OnDismissListener, DialogInterfac } try { // Take a "full" bugreport. + MetricsLogger.action(mContext, MetricsEvent.ACTION_BUGREPORT_FROM_POWER_MENU_FULL); ActivityManagerNative.getDefault().requestBugReport( ActivityManager.BUGREPORT_OPTION_FULL); } catch (RemoteException e) { diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java index 716b96fb4791..e1a029964279 100644 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -25,6 +25,9 @@ import static android.content.pm.PackageManager.FEATURE_TELEVISION; import static android.content.pm.PackageManager.FEATURE_WATCH; import static android.content.res.Configuration.UI_MODE_TYPE_CAR; import static android.content.res.Configuration.UI_MODE_TYPE_MASK; +import static android.view.WindowManager.DOCKED_TOP; +import static android.view.WindowManager.DOCKED_LEFT; +import static android.view.WindowManager.DOCKED_RIGHT; import static android.view.WindowManager.LayoutParams.*; import static android.view.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_COVERED; import static android.view.WindowManagerPolicy.WindowManagerFuncs.CAMERA_LENS_COVER_ABSENT; @@ -573,6 +576,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { boolean mConsumeSearchKeyUp; boolean mAssistKeyLongPressed; boolean mPendingMetaAction; + boolean mForceShowSystemBars; // support for activating the lock screen while the screen is on boolean mAllowLockscreenWhenOn; @@ -3605,7 +3609,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { } @Override - public void getInsetHintLw(WindowManager.LayoutParams attrs, int displayRotation, + public boolean getInsetHintLw(WindowManager.LayoutParams attrs, int displayRotation, Rect outContentInsets, Rect outStableInsets, Rect outOutsets) { final int fl = PolicyControl.getWindowFlags(null, attrs); final int sysuiVis = PolicyControl.getSystemUiVisibility(null, attrs); @@ -3660,10 +3664,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { outStableInsets.set(mStableLeft, mStableTop, availRight - mStableRight, availBottom - mStableBottom); - return; + return mForceShowSystemBars; } outContentInsets.setEmpty(); outStableInsets.setEmpty(); + return mForceShowSystemBars; } private boolean shouldUseOutsets(WindowManager.LayoutParams attrs, int fl) { @@ -6099,6 +6104,23 @@ public class PhoneWindowManager implements WindowManagerPolicy { } } + @Override + public boolean isNavBarForcedShownLw(WindowState windowState) { + return mForceShowSystemBars + && !windowState.getFrameLw().equals(windowState.getDisplayFrameLw()); + } + + @Override + public boolean isDockSideAllowed(int dockSide) { + + // We do not allow all dock sides at which the navigation bar touches the docked stack. + if (!mNavigationBarCanMove) { + return dockSide == DOCKED_TOP || dockSide == DOCKED_LEFT || dockSide == DOCKED_RIGHT; + } else { + return dockSide == DOCKED_TOP || dockSide == DOCKED_LEFT; + } + } + void sendCloseSystemWindows() { PhoneWindow.sendCloseSystemWindows(mContext, null); } @@ -6980,8 +7002,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { // We need to force system bars when the docked stack is visible, when the freeform stack // is visible but also when we are resizing for the transitions when docked stack // visibility changes. - final boolean forceShowSystemBars = dockedStackVisible || freeformStackVisible || resizing; - final boolean forceOpaqueSystemBars = forceShowSystemBars && !mForceStatusBarFromKeyguard; + mForceShowSystemBars = dockedStackVisible || freeformStackVisible || resizing; + final boolean forceOpaqueSystemBars = mForceShowSystemBars && !mForceStatusBarFromKeyguard; // apply translucent bar vis flags WindowState transWin = isStatusBarKeyguard() && !mHideLockScreen @@ -7029,11 +7051,11 @@ public class PhoneWindowManager implements WindowManagerPolicy { (vis & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) != 0; final boolean transientStatusBarAllowed = mStatusBar != null - && (statusBarHasFocus || (!forceShowSystemBars + && (statusBarHasFocus || (!mForceShowSystemBars && (hideStatusBarWM || (hideStatusBarSysui && immersiveSticky)))); final boolean transientNavBarAllowed = mNavigationBar != null - && !forceShowSystemBars && hideNavBarSysui && immersiveSticky; + && !mForceShowSystemBars && hideNavBarSysui && immersiveSticky; final long now = SystemClock.uptimeMillis(); final boolean pendingPanic = mPendingPanicGestureUptime != 0 @@ -7050,7 +7072,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { && !transientStatusBarAllowed && hideStatusBarSysui; final boolean denyTransientNav = mNavigationBarController.isTransientShowRequested() && !transientNavBarAllowed; - if (denyTransientStatus || denyTransientNav || forceShowSystemBars) { + if (denyTransientStatus || denyTransientNav || mForceShowSystemBars) { // clear the clearable flags instead clearClearableFlagsLw(); vis &= ~View.SYSTEM_UI_CLEARABLE_FLAGS; diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java index dbaa598fb1b2..f901f9565fcc 100644 --- a/services/core/java/com/android/server/power/PowerManagerService.java +++ b/services/core/java/com/android/server/power/PowerManagerService.java @@ -2703,12 +2703,9 @@ public final class PowerManagerService extends SystemService if (reason == null) { reason = ""; } - if (reason.equals(PowerManager.REBOOT_RECOVERY)) { - // If we are rebooting to go into recovery, instead of - // setting sys.powerctl directly we'll start the - // pre-recovery service which will do some preparation for - // recovery and then reboot for us. - SystemProperties.set("ctl.start", "pre-recovery"); + if (reason.equals(PowerManager.REBOOT_RECOVERY) + || reason.equals(PowerManager.REBOOT_RECOVERY_UPDATE)) { + SystemProperties.set("sys.powerctl", "reboot,recovery"); } else { SystemProperties.set("sys.powerctl", "reboot," + reason); } @@ -3421,7 +3418,8 @@ public final class PowerManagerService extends SystemService @Override // Binder call public void reboot(boolean confirm, String reason, boolean wait) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.REBOOT, null); - if (PowerManager.REBOOT_RECOVERY.equals(reason)) { + if (PowerManager.REBOOT_RECOVERY.equals(reason) + || PowerManager.REBOOT_RECOVERY_UPDATE.equals(reason)) { mContext.enforceCallingOrSelfPermission(android.Manifest.permission.RECOVERY, null); } diff --git a/services/core/java/com/android/server/power/ShutdownThread.java b/services/core/java/com/android/server/power/ShutdownThread.java index ac6a28e91ca8..bcafddc3e999 100644 --- a/services/core/java/com/android/server/power/ShutdownThread.java +++ b/services/core/java/com/android/server/power/ShutdownThread.java @@ -32,8 +32,10 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; +import android.os.FileUtils; import android.os.Handler; import android.os.PowerManager; +import android.os.RecoverySystem; import android.os.RemoteException; import android.os.ServiceManager; import android.os.SystemClock; @@ -81,13 +83,9 @@ public final class ShutdownThread extends Thread { private static Object sIsStartedGuard = new Object(); private static boolean sIsStarted = false; - // uncrypt status files - private static final String UNCRYPT_STATUS_FILE = "/cache/recovery/uncrypt_status"; - private static final String UNCRYPT_PACKAGE_FILE = "/cache/recovery/uncrypt_file"; - private static boolean mReboot; private static boolean mRebootSafeMode; - private static boolean mRebootUpdate; + private static boolean mRebootHasProgressBar; private static String mReason; // Provides shutdown assurance in case the system_server is killed @@ -96,6 +94,9 @@ public final class ShutdownThread extends Thread { // Indicates whether we are rebooting into safe mode public static final String REBOOT_SAFEMODE_PROPERTY = "persist.sys.safemode"; + // Indicates whether we should stay in safe mode until ro.build.date.utc is newer than this + public static final String AUDIT_SAFEMODE_PROPERTY = "persist.sys.audit_safemode"; + // static instance of this thread private static final ShutdownThread sInstance = new ShutdownThread(); @@ -213,7 +214,7 @@ public final class ShutdownThread extends Thread { public static void reboot(final Context context, String reason, boolean confirm) { mReboot = true; mRebootSafeMode = false; - mRebootUpdate = false; + mRebootHasProgressBar = false; mReason = reason; shutdownInner(context, confirm); } @@ -233,7 +234,7 @@ public final class ShutdownThread extends Thread { mReboot = true; mRebootSafeMode = true; - mRebootUpdate = false; + mRebootHasProgressBar = false; mReason = null; shutdownInner(context, confirm); } @@ -250,10 +251,19 @@ public final class ShutdownThread extends Thread { // Throw up a system dialog to indicate the device is rebooting / shutting down. ProgressDialog pd = new ProgressDialog(context); - // Path 1: Reboot to recovery and install the update - // Condition: mReason == REBOOT_RECOVERY and mRebootUpdate == True - // (mRebootUpdate is set by checking if /cache/recovery/uncrypt_file exists.) - // UI: progress bar + // Path 1: Reboot to recovery for update + // Condition: mReason == REBOOT_RECOVERY_UPDATE + // + // Path 1a: uncrypt needed + // Condition: if /cache/recovery/uncrypt_file exists but + // /cache/recovery/block.map doesn't. + // UI: determinate progress bar (mRebootHasProgressBar == True) + // + // * Path 1a is expected to be removed once the GmsCore shipped on + // device always calls uncrypt prior to reboot. + // + // Path 1b: uncrypt already done + // UI: spinning circle only (no progress bar) // // Path 2: Reboot to recovery for factory reset // Condition: mReason == REBOOT_RECOVERY @@ -262,24 +272,31 @@ public final class ShutdownThread extends Thread { // Path 3: Regular reboot / shutdown // Condition: Otherwise // UI: spinning circle only (no progress bar) - if (PowerManager.REBOOT_RECOVERY.equals(mReason)) { - mRebootUpdate = new File(UNCRYPT_PACKAGE_FILE).exists(); - if (mRebootUpdate) { - pd.setTitle(context.getText(com.android.internal.R.string.reboot_to_update_title)); - pd.setMessage(context.getText( - com.android.internal.R.string.reboot_to_update_prepare)); + if (PowerManager.REBOOT_RECOVERY_UPDATE.equals(mReason)) { + // We need the progress bar if uncrypt will be invoked during the + // reboot, which might be time-consuming. + mRebootHasProgressBar = RecoverySystem.UNCRYPT_PACKAGE_FILE.exists() + && !(RecoverySystem.BLOCK_MAP_FILE.exists()); + pd.setTitle(context.getText(com.android.internal.R.string.reboot_to_update_title)); + if (mRebootHasProgressBar) { pd.setMax(100); - pd.setProgressNumberFormat(null); - pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.setProgress(0); pd.setIndeterminate(false); - } else { - // Factory reset path. Set the dialog message accordingly. - pd.setTitle(context.getText(com.android.internal.R.string.reboot_to_reset_title)); + pd.setProgressNumberFormat(null); + pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.setMessage(context.getText( - com.android.internal.R.string.reboot_to_reset_message)); + com.android.internal.R.string.reboot_to_update_prepare)); + } else { pd.setIndeterminate(true); + pd.setMessage(context.getText( + com.android.internal.R.string.reboot_to_update_reboot)); } + } else if (PowerManager.REBOOT_RECOVERY.equals(mReason)) { + // Factory reset path. Set the dialog message accordingly. + pd.setTitle(context.getText(com.android.internal.R.string.reboot_to_reset_title)); + pd.setMessage(context.getText( + com.android.internal.R.string.reboot_to_reset_message)); + pd.setIndeterminate(true); } else { pd.setTitle(context.getText(com.android.internal.R.string.power_off)); pd.setMessage(context.getText(com.android.internal.R.string.shutdown_progress)); @@ -379,7 +396,7 @@ public final class ShutdownThread extends Thread { if (delay <= 0) { Log.w(TAG, "Shutdown broadcast timed out"); break; - } else if (mRebootUpdate) { + } else if (mRebootHasProgressBar) { int status = (int)((MAX_BROADCAST_TIME - delay) * 1.0 * BROADCAST_STOP_PERCENT / MAX_BROADCAST_TIME); sInstance.setRebootProgress(status, null); @@ -390,7 +407,7 @@ public final class ShutdownThread extends Thread { } } } - if (mRebootUpdate) { + if (mRebootHasProgressBar) { sInstance.setRebootProgress(BROADCAST_STOP_PERCENT, null); } @@ -404,7 +421,7 @@ public final class ShutdownThread extends Thread { } catch (RemoteException e) { } } - if (mRebootUpdate) { + if (mRebootHasProgressBar) { sInstance.setRebootProgress(ACTIVITY_MANAGER_STOP_PERCENT, null); } @@ -415,13 +432,13 @@ public final class ShutdownThread extends Thread { if (pm != null) { pm.shutdown(); } - if (mRebootUpdate) { + if (mRebootHasProgressBar) { sInstance.setRebootProgress(PACKAGE_MANAGER_STOP_PERCENT, null); } // Shutdown radios. shutdownRadios(MAX_RADIO_WAIT_TIME); - if (mRebootUpdate) { + if (mRebootHasProgressBar) { sInstance.setRebootProgress(RADIO_STOP_PERCENT, null); } @@ -455,7 +472,7 @@ public final class ShutdownThread extends Thread { if (delay <= 0) { Log.w(TAG, "Shutdown wait timed out"); break; - } else if (mRebootUpdate) { + } else if (mRebootHasProgressBar) { int status = (int)((MAX_SHUTDOWN_WAIT_TIME - delay) * 1.0 * (MOUNT_SERVICE_STOP_PERCENT - RADIO_STOP_PERCENT) / MAX_SHUTDOWN_WAIT_TIME); @@ -468,10 +485,11 @@ public final class ShutdownThread extends Thread { } } } - if (mRebootUpdate) { + if (mRebootHasProgressBar) { sInstance.setRebootProgress(MOUNT_SERVICE_STOP_PERCENT, null); - // If it's to reboot to install update, invoke uncrypt via init service. + // If it's to reboot to install an update and uncrypt hasn't been + // done yet, trigger it now. uncrypt(); } @@ -549,7 +567,7 @@ public final class ShutdownThread extends Thread { long delay = endTime - SystemClock.elapsedRealtime(); while (delay > 0) { - if (mRebootUpdate) { + if (mRebootHasProgressBar) { int status = (int)((timeout - delay) * 1.0 * (RADIO_STOP_PERCENT - PACKAGE_MANAGER_STOP_PERCENT) / timeout); status += PACKAGE_MANAGER_STOP_PERCENT; @@ -651,66 +669,40 @@ public final class ShutdownThread extends Thread { private void uncrypt() { Log.i(TAG, "Calling uncrypt and monitoring the progress..."); + final RecoverySystem.ProgressListener progressListener = + new RecoverySystem.ProgressListener() { + @Override + public void onProgress(int status) { + if (status >= 0 && status < 100) { + // Scale down to [MOUNT_SERVICE_STOP_PERCENT, 100). + status = (int)(status * (100.0 - MOUNT_SERVICE_STOP_PERCENT) / 100); + status += MOUNT_SERVICE_STOP_PERCENT; + CharSequence msg = mContext.getText( + com.android.internal.R.string.reboot_to_update_package); + sInstance.setRebootProgress(status, msg); + } else if (status == 100) { + CharSequence msg = mContext.getText( + com.android.internal.R.string.reboot_to_update_reboot); + sInstance.setRebootProgress(status, msg); + } else { + // Ignored + } + } + }; + final boolean[] done = new boolean[1]; done[0] = false; Thread t = new Thread() { @Override public void run() { - // Create the status pipe file to communicate with /system/bin/uncrypt. - new File(UNCRYPT_STATUS_FILE).delete(); + RecoverySystem rs = (RecoverySystem) mContext.getSystemService( + Context.RECOVERY_SERVICE); + String filename = null; try { - Os.mkfifo(UNCRYPT_STATUS_FILE, 0600); - } catch (ErrnoException e) { - Log.w(TAG, "ErrnoException when creating named pipe \"" + UNCRYPT_STATUS_FILE + - "\": " + e.getMessage()); - } - - SystemProperties.set("ctl.start", "uncrypt"); - - // Read the status from the pipe. - try (BufferedReader reader = new BufferedReader( - new FileReader(UNCRYPT_STATUS_FILE))) { - - int lastStatus = Integer.MIN_VALUE; - while (true) { - String str = reader.readLine(); - try { - int status = Integer.parseInt(str); - - // Avoid flooding the log with the same message. - if (status == lastStatus && lastStatus != Integer.MIN_VALUE) { - continue; - } - lastStatus = status; - - if (status >= 0 && status < 100) { - // Update status - Log.d(TAG, "uncrypt read status: " + status); - // Scale down to [MOUNT_SERVICE_STOP_PERCENT, 100). - status = (int)(status * (100.0 - MOUNT_SERVICE_STOP_PERCENT) / 100); - status += MOUNT_SERVICE_STOP_PERCENT; - CharSequence msg = mContext.getText( - com.android.internal.R.string.reboot_to_update_package); - sInstance.setRebootProgress(status, msg); - } else if (status == 100) { - Log.d(TAG, "uncrypt successfully finished."); - CharSequence msg = mContext.getText( - com.android.internal.R.string.reboot_to_update_reboot); - sInstance.setRebootProgress(status, msg); - break; - } else { - // Error in /system/bin/uncrypt. Or it's rebooting to recovery - // to perform other operations (e.g. factory reset). - Log.d(TAG, "uncrypt failed with status: " + status); - break; - } - } catch (NumberFormatException unused) { - Log.d(TAG, "uncrypt invalid status received: " + str); - break; - } - } - } catch (IOException unused) { - Log.w(TAG, "IOException when reading \"" + UNCRYPT_STATUS_FILE + "\"."); + filename = FileUtils.readTextFile(RecoverySystem.UNCRYPT_PACKAGE_FILE, 0, null); + rs.processPackage(mContext, new File(filename), progressListener); + } catch (IOException e) { + Log.e(TAG, "Error uncrypting file", e); } done[0] = true; } diff --git a/services/core/java/com/android/server/tv/TvInputHardwareManager.java b/services/core/java/com/android/server/tv/TvInputHardwareManager.java index 4e96d71d7e18..bf281d6fb471 100644 --- a/services/core/java/com/android/server/tv/TvInputHardwareManager.java +++ b/services/core/java/com/android/server/tv/TvInputHardwareManager.java @@ -24,6 +24,7 @@ import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.PackageManager; import android.hardware.hdmi.HdmiControlManager; import android.hardware.hdmi.HdmiDeviceInfo; import android.hardware.hdmi.HdmiHotplugEvent; @@ -45,6 +46,7 @@ import android.media.tv.ITvInputHardwareCallback; import android.media.tv.TvInputHardwareInfo; import android.media.tv.TvInputInfo; import android.media.tv.TvStreamConfig; +import android.os.Binder; import android.os.Handler; import android.os.IBinder; import android.os.Message; @@ -57,9 +59,13 @@ import android.util.SparseBooleanArray; import android.view.KeyEvent; import android.view.Surface; +import com.android.internal.util.IndentingPrintWriter; import com.android.server.SystemService; +import java.io.FileDescriptor; +import java.io.PrintWriter; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.Iterator; import java.util.LinkedList; @@ -549,6 +555,70 @@ class TvInputHardwareManager implements TvInputHal.Callback { return (float) mCurrentIndex / (float) mCurrentMaxIndex; } + public void dump(FileDescriptor fd, final PrintWriter writer, String[] args) { + final IndentingPrintWriter pw = new IndentingPrintWriter(writer, " "); + if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP) + != PackageManager.PERMISSION_GRANTED) { + pw.println("Permission Denial: can't dump TvInputHardwareManager from pid=" + + Binder.getCallingPid() + ", uid=" + Binder.getCallingUid()); + return; + } + + synchronized (mLock) { + pw.println("TvInputHardwareManager Info:"); + pw.increaseIndent(); + pw.println("mConnections: deviceId -> Connection"); + pw.increaseIndent(); + for (int i = 0; i < mConnections.size(); i++) { + int deviceId = mConnections.keyAt(i); + Connection mConnection = mConnections.valueAt(i); + pw.println(deviceId + ": " + mConnection); + + } + pw.decreaseIndent(); + + pw.println("mHardwareList:"); + pw.increaseIndent(); + for (TvInputHardwareInfo tvInputHardwareInfo : mHardwareList) { + pw.println(tvInputHardwareInfo); + } + pw.decreaseIndent(); + + pw.println("mHdmiDeviceList:"); + pw.increaseIndent(); + for (HdmiDeviceInfo hdmiDeviceInfo : mHdmiDeviceList) { + pw.println(hdmiDeviceInfo); + } + pw.decreaseIndent(); + + pw.println("mHardwareInputIdMap: deviceId -> inputId"); + pw.increaseIndent(); + for (int i = 0 ; i < mHardwareInputIdMap.size(); i++) { + int deviceId = mHardwareInputIdMap.keyAt(i); + String inputId = mHardwareInputIdMap.valueAt(i); + pw.println(deviceId + ": " + inputId); + } + pw.decreaseIndent(); + + pw.println("mHdmiInputIdMap: id -> inputId"); + pw.increaseIndent(); + for (int i = 0; i < mHdmiInputIdMap.size(); i++) { + int id = mHdmiInputIdMap.keyAt(i); + String inputId = mHdmiInputIdMap.valueAt(i); + pw.println(id + ": " + inputId); + } + pw.decreaseIndent(); + + pw.println("mInputMap: inputId -> inputInfo"); + pw.increaseIndent(); + for(Map.Entry<String, TvInputInfo> entry : mInputMap.entrySet()) { + pw.println(entry.getKey() + ": " + entry.getValue()); + } + pw.decreaseIndent(); + pw.decreaseIndent(); + } + } + private class Connection implements IBinder.DeathRecipient { private final TvInputHardwareInfo mHardwareInfo; private TvInputInfo mInfo; @@ -641,6 +711,17 @@ class TvInputHardwareManager implements TvInputHal.Callback { resetLocked(null, null, null, null, null); } } + + public String toString() { + return "Connection{" + + " mHardwareInfo: " + mHardwareInfo + + ", mInfo: " + mInfo + + ", mCallback: " + mCallback + + ", mConfigs: " + Arrays.toString(mConfigs) + + ", mCallingUid: " + mCallingUid + + ", mResolvedUserId: " + mResolvedUserId + + " }"; + } } private class TvInputHardwareImpl extends ITvInputHardware.Stub { diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java index 628c6270f1d6..8a2729eec805 100644 --- a/services/core/java/com/android/server/tv/TvInputManagerService.java +++ b/services/core/java/com/android/server/tv/TvInputManagerService.java @@ -1923,6 +1923,7 @@ public final class TvInputManagerService extends SystemService { pw.decreaseIndent(); } } + mTvInputHardwareManager.dump(fd, writer, args); } } diff --git a/services/core/java/com/android/server/twilight/TwilightService.java b/services/core/java/com/android/server/twilight/TwilightService.java index ac1ab64a1e81..6158c929a296 100644 --- a/services/core/java/com/android/server/twilight/TwilightService.java +++ b/services/core/java/com/android/server/twilight/TwilightService.java @@ -115,14 +115,14 @@ public final class TwilightService extends SystemService { getContext().registerReceiver(mReceiver, filter); publishLocalService(TwilightManager.class, mService); - getContext().getContentResolver().registerContentObserver( - Secure.getUriFor(Secure.TWILIGHT_MODE), false, mContentObserver, mCurrentUser); - mContentObserver.onChange(true); } @Override public void onBootPhase(int phase) { if (phase == PHASE_BOOT_COMPLETED) { + getContext().getContentResolver().registerContentObserver( + Secure.getUriFor(Secure.TWILIGHT_MODE), false, mContentObserver, mCurrentUser); + mContentObserver.onChange(true); mBootCompleted = true; sendBroadcast(); } diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java index 7378bded4ce4..77db2752a1a8 100644 --- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java +++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java @@ -104,7 +104,7 @@ import libcore.io.IoUtils; public class WallpaperManagerService extends IWallpaperManager.Stub { static final String TAG = "WallpaperManagerService"; - static final boolean DEBUG = true; + static final boolean DEBUG = false; final Object mLock = new Object(); diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateService.java b/services/core/java/com/android/server/webkit/WebViewUpdateService.java index f3b120f944fd..bc5d73fed4c8 100644 --- a/services/core/java/com/android/server/webkit/WebViewUpdateService.java +++ b/services/core/java/com/android/server/webkit/WebViewUpdateService.java @@ -23,13 +23,18 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ApplicationInfo; +import android.content.pm.IPackageDeleteObserver; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.Signature; +import android.content.pm.UserInfo; import android.os.Binder; +import android.os.PatternMatcher; import android.os.Process; import android.os.RemoteException; +import android.os.ResultReceiver; import android.os.UserHandle; +import android.os.UserManager; import android.provider.Settings; import android.provider.Settings.Global; import android.util.AndroidRuntimeException; @@ -41,6 +46,7 @@ import android.webkit.WebViewFactory; import com.android.server.SystemService; +import java.io.FileDescriptor; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; @@ -102,6 +108,27 @@ public class WebViewUpdateService extends SystemService { return; } + // Ensure that we only heed PACKAGE_CHANGED intents if they change an entire + // package, not just a component + if (intent.getAction().equals(Intent.ACTION_PACKAGE_CHANGED)) { + if (!WebViewFactory.entirePackageChanged(intent)) { + return; + } + } + + if (intent.getAction().equals(Intent.ACTION_USER_ADDED)) { + int userId = + intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL); + handleNewUser(userId); + return; + } + + updateFallbackState(context, intent); + + // TODO(gsennton) for now don't update WebView on PACKAGE_CHANGED as this will + // change the current behaviour even more, instead do this in a follow-up. + if (intent.getAction().equals(Intent.ACTION_PACKAGE_CHANGED)) return; + for (WebViewProviderInfo provider : WebViewFactory.getWebViewPackages()) { String webviewPackage = "package:" + provider.packageName; @@ -154,12 +181,167 @@ public class WebViewUpdateService extends SystemService { IntentFilter filter = new IntentFilter(); filter.addAction(Intent.ACTION_PACKAGE_ADDED); filter.addAction(Intent.ACTION_PACKAGE_REMOVED); + filter.addAction(Intent.ACTION_PACKAGE_CHANGED); filter.addDataScheme("package"); + // Make sure we only receive intents for WebView packages from our config file. + for (WebViewProviderInfo provider : WebViewFactory.getWebViewPackages()) { + filter.addDataSchemeSpecificPart(provider.packageName, PatternMatcher.PATTERN_LITERAL); + } getContext().registerReceiver(mWebViewUpdatedReceiver, filter); + IntentFilter userAddedFilter = new IntentFilter(); + userAddedFilter.addAction(Intent.ACTION_USER_ADDED); + getContext().registerReceiver(mWebViewUpdatedReceiver, userAddedFilter); + publishBinderService("webviewupdate", new BinderService()); } + private static boolean existsValidNonFallbackProvider(WebViewProviderInfo[] providers) { + for (WebViewProviderInfo provider : providers) { + if (provider.isAvailableByDefault() && provider.isEnabled() + && provider.isValidProvider() && !provider.isFallbackPackage()) { + return true; + } + } + return false; + } + + private static void enablePackageForUser(String packageName, boolean enable, int userId) { + try { + AppGlobals.getPackageManager().setApplicationEnabledSetting( + packageName, + enable ? PackageManager.COMPONENT_ENABLED_STATE_DEFAULT : + PackageManager.COMPONENT_ENABLED_STATE_DISABLED_USER, 0, + userId, null); + } catch (RemoteException e) { + Slog.w(TAG, "Tried to disable " + packageName + " for user " + userId + ": " + e); + } + } + + /** + * Called when a new user has been added to update the state of its fallback package. + */ + void handleNewUser(int userId) { + if (!isFallbackLogicEnabled()) return; + + WebViewProviderInfo[] webviewProviders = WebViewFactory.getWebViewPackages(); + WebViewProviderInfo fallbackProvider = getFallbackProvider(webviewProviders); + if (fallbackProvider == null) return; + boolean existsValidNonFallbackProvider = + existsValidNonFallbackProvider(webviewProviders); + + enablePackageForUser(fallbackProvider.packageName, !existsValidNonFallbackProvider, + userId); + } + + /** + * Handle the enabled-state of our fallback package, i.e. if there exists some non-fallback + * package that is valid (and available by default) then disable the fallback package, + * otherwise, enable the fallback package. + */ + void updateFallbackState(final Context context, final Intent intent) { + if (!isFallbackLogicEnabled()) return; + + WebViewProviderInfo[] webviewProviders = WebViewFactory.getWebViewPackages(); + + if (intent != null && (intent.getAction().equals(Intent.ACTION_PACKAGE_ADDED) + || intent.getAction().equals(Intent.ACTION_PACKAGE_CHANGED))) { + // A package was changed / updated / downgraded, early out if it is not one of the + // webview packages that are available by default. + String changedPackage = null; + for (WebViewProviderInfo provider : webviewProviders) { + String webviewPackage = "package:" + provider.packageName; + if (webviewPackage.equals(intent.getDataString())) { + if (provider.isAvailableByDefault()) { + changedPackage = provider.packageName; + } + break; + } + } + if (changedPackage == null) return; + } + + // If there exists a valid and enabled non-fallback package - disable the fallback + // package, otherwise, enable it. + WebViewProviderInfo fallbackProvider = getFallbackProvider(webviewProviders); + if (fallbackProvider == null) return; + boolean existsValidNonFallbackProvider = existsValidNonFallbackProvider(webviewProviders); + + if (existsValidNonFallbackProvider + // During an OTA the primary user's WebView state might differ from other users', so + // ignore the state of that user during boot. + && (fallbackProvider.isEnabled() || intent == null)) { + // Uninstall and disable fallback package for all users. + context.getPackageManager().deletePackage(fallbackProvider.packageName, + new IPackageDeleteObserver.Stub() { + public void packageDeleted(String packageName, int returnCode) { + // Ignore returnCode since the deletion could fail, e.g. we might be trying + // to delete a non-updated system-package (and we should still disable the + // package) + UserManager userManager = + (UserManager)context.getSystemService(Context.USER_SERVICE); + // Disable the fallback package for all users. + for(UserInfo userInfo : userManager.getUsers()) { + enablePackageForUser(packageName, false, userInfo.id); + } + } + }, PackageManager.DELETE_SYSTEM_APP | PackageManager.DELETE_ALL_USERS); + } else if (!existsValidNonFallbackProvider + // During an OTA the primary user's WebView state might differ from other users', so + // ignore the state of that user during boot. + && (!fallbackProvider.isEnabled() || intent==null)) { + // Enable the fallback package for all users. + UserManager userManager = + (UserManager)context.getSystemService(Context.USER_SERVICE); + for(UserInfo userInfo : userManager.getUsers()) { + enablePackageForUser(fallbackProvider.packageName, true, userInfo.id); + } + } + } + + private static boolean isFallbackLogicEnabled() { + // Note that this is enabled by default (i.e. if the setting hasn't been set). + return Settings.Global.getInt(AppGlobals.getInitialApplication().getContentResolver(), + Settings.Global.WEBVIEW_FALLBACK_LOGIC_ENABLED, 1) == 1; + } + + private static void enableFallbackLogic(boolean enable) { + Settings.Global.putInt(AppGlobals.getInitialApplication().getContentResolver(), + Settings.Global.WEBVIEW_FALLBACK_LOGIC_ENABLED, enable ? 1 : 0); + } + + /** + * Returns the only fallback provider, or null if there is none. + */ + private static WebViewProviderInfo getFallbackProvider(WebViewProviderInfo[] webviewPackages) { + for (WebViewProviderInfo provider : webviewPackages) { + if (provider.isFallbackPackage()) { + return provider; + } + } + return null; + } + + private static boolean containsAvailableNonFallbackProvider( + WebViewProviderInfo[] webviewPackages) { + for (WebViewProviderInfo provider : webviewPackages) { + if (provider.isAvailableByDefault() && provider.isEnabled() + && provider.isValidProvider() && !provider.isFallbackPackage()) { + return true; + } + } + return false; + } + + private static boolean isFallbackPackage(String packageName) { + if (packageName == null || !isFallbackLogicEnabled()) return false; + + WebViewProviderInfo[] webviewPackages = WebViewFactory.getWebViewPackages(); + WebViewProviderInfo fallbackProvider = getFallbackProvider(webviewPackages); + return (fallbackProvider != null + && packageName.equals(fallbackProvider.packageName)); + } + /** * Perform any WebView loading preparations that must happen at boot from the system server, * after the package manager has started or after an update to the webview is installed. @@ -167,6 +349,7 @@ public class WebViewUpdateService extends SystemService { * Currently, this means spawning the child processes which will create the relro files. */ public void prepareWebViewInSystemServer() { + updateFallbackState(getContext(), null); try { synchronized(this) { updateValidWebViewPackages(); @@ -182,8 +365,10 @@ public class WebViewUpdateService extends SystemService { /** * Change WebView provider and provider setting and kill packages using the old provider. + * Return the new provider (in case we are in the middle of creating relro files this new + * provider will not be in use directly, but will when the relros are done). */ - private void changeProviderAndSetting(String newProviderName) { + private String changeProviderAndSetting(String newProviderName) { PackageInfo oldPackage = null; PackageInfo newPackage = null; synchronized(this) { @@ -195,14 +380,14 @@ public class WebViewUpdateService extends SystemService { if (oldPackage != null && newPackage.packageName.equals(oldPackage.packageName)) { // If we don't perform the user change, revert the settings change. updateUserSetting(newPackage.packageName); - return; + return newPackage.packageName; } } catch (WebViewFactory.MissingWebViewPackageException e) { Slog.e(TAG, "Tried to change WebView provider but failed to fetch WebView package " + e); // If we don't perform the user change but don't have an installed WebView package, // we will have changed the setting and it will be used when a package is available. - return; + return newProviderName; } onWebViewProviderChanged(newPackage); } @@ -214,7 +399,7 @@ public class WebViewUpdateService extends SystemService { } } catch (RemoteException e) { } - return; + return newPackage.packageName; } /** @@ -349,6 +534,14 @@ public class WebViewUpdateService extends SystemService { private class BinderService extends IWebViewUpdateService.Stub { + @Override + public void onShellCommand(FileDescriptor in, FileDescriptor out, + FileDescriptor err, String[] args, ResultReceiver resultReceiver) { + (new WebViewUpdateServiceShellCommand(this)).exec( + this, in, out, err, args, resultReceiver); + } + + /** * The shared relro process calls this to notify us that it's done trying to create a relro * file. This method gets called even if the relro creation has failed or the process @@ -364,9 +557,14 @@ public class WebViewUpdateService extends SystemService { return; } - synchronized (WebViewUpdateService.this) { - mNumRelroCreationsFinished++; - checkIfRelrosDoneLocked(); + long callingId = Binder.clearCallingIdentity(); + try { + synchronized (WebViewUpdateService.this) { + mNumRelroCreationsFinished++; + checkIfRelrosDoneLocked(); + } + } finally { + Binder.restoreCallingIdentity(callingId); } } @@ -423,7 +621,7 @@ public class WebViewUpdateService extends SystemService { * This is called from DeveloperSettings when the user changes WebView provider. */ @Override // Binder call - public void changeProviderAndSetting(String newProvider) { + public String changeProviderAndSetting(String newProvider) { if (getContext().checkCallingPermission( android.Manifest.permission.WRITE_SECURE_SETTINGS) != PackageManager.PERMISSION_GRANTED) { @@ -435,7 +633,7 @@ public class WebViewUpdateService extends SystemService { throw new SecurityException(msg); } - WebViewUpdateService.this.changeProviderAndSetting(newProvider); + return WebViewUpdateService.this.changeProviderAndSetting(newProvider); } @Override // Binder call @@ -453,5 +651,26 @@ public class WebViewUpdateService extends SystemService { return WebViewUpdateService.this.mCurrentWebViewPackage.packageName; } } + + @Override // Binder call + public boolean isFallbackPackage(String packageName) { + return WebViewUpdateService.isFallbackPackage(packageName); + } + + @Override // Binder call + public void enableFallbackLogic(boolean enable) { + if (getContext().checkCallingPermission( + android.Manifest.permission.WRITE_SECURE_SETTINGS) + != PackageManager.PERMISSION_GRANTED) { + String msg = "Permission Denial: enableFallbackLogic() from pid=" + + Binder.getCallingPid() + + ", uid=" + Binder.getCallingUid() + + " requires " + android.Manifest.permission.WRITE_SECURE_SETTINGS; + Slog.w(TAG, msg); + throw new SecurityException(msg); + } + + WebViewUpdateService.enableFallbackLogic(enable); + } } } diff --git a/services/core/java/com/android/server/webkit/WebViewUpdateServiceShellCommand.java b/services/core/java/com/android/server/webkit/WebViewUpdateServiceShellCommand.java new file mode 100644 index 000000000000..a9461e82a596 --- /dev/null +++ b/services/core/java/com/android/server/webkit/WebViewUpdateServiceShellCommand.java @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.server.webkit; + +import android.os.RemoteException; +import android.os.ShellCommand; +import android.webkit.IWebViewUpdateService; + +import java.io.PrintWriter; + +class WebViewUpdateServiceShellCommand extends ShellCommand { + final IWebViewUpdateService mInterface; + + WebViewUpdateServiceShellCommand(IWebViewUpdateService service) { + mInterface = service; + } + + @Override + public int onCommand(String cmd) { + if (cmd == null) { + return handleDefaultCommands(cmd); + } + + final PrintWriter pw = getOutPrintWriter(); + try { + // TODO(gsennton) add command for changing WebView provider + switch(cmd) { + case "enable-redundant-packages": + return enableFallbackLogic(false); + case "disable-redundant-packages": + return enableFallbackLogic(true); + default: + return handleDefaultCommands(cmd); + } + } catch (RemoteException e) { + pw.println("Remote exception: " + e); + } + return -1; + } + + private int enableFallbackLogic(boolean enable) throws RemoteException { + final PrintWriter pw = getOutPrintWriter(); + mInterface.enableFallbackLogic(enable); + pw.println("Success"); + return 0; + } + + @Override + public void onHelp() { + PrintWriter pw = getOutPrintWriter(); + pw.println("WebView updater commands:"); + pw.println(" help"); + pw.println(" Print this help text."); + pw.println(""); + pw.println(" enable-redundant-packages"); + pw.println(" Allow a fallback package to be installed and enabled even when a"); + pw.println(" more-preferred package is available. This command is useful when testing"); + pw.println(" fallback packages."); + pw.println(" disable-redundant-packages"); + pw.println(" Disallow installing and enabling fallback packages when a more-preferred"); + pw.println(" package is available."); + pw.println(); + } +} diff --git a/services/core/java/com/android/server/wm/AppWindowAnimator.java b/services/core/java/com/android/server/wm/AppWindowAnimator.java index fa5ee72f6a8e..a81fba00f7a0 100644 --- a/services/core/java/com/android/server/wm/AppWindowAnimator.java +++ b/services/core/java/com/android/server/wm/AppWindowAnimator.java @@ -153,6 +153,13 @@ public class AppWindowAnimator { } else { mClearProlongedAnimation = true; } + + // Since we are finally starting our animation, we don't need the logic anymore to prevent + // the app from showing again if we just moved between stacks. See + // {@link WindowState#notifyMovedInStack}. + for (int i = mAppToken.allAppWindows.size() - 1; i >= 0; i--) { + mAppToken.allAppWindows.get(i).resetJustMovedInStack(); + } } public void setDummyAnimation() { diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java index 25de75a55926..a589f894e3bc 100644 --- a/services/core/java/com/android/server/wm/Session.java +++ b/services/core/java/com/android/server/wm/Session.java @@ -369,7 +369,12 @@ final class Session extends IWindowSession.Stub if (DEBUG_TASK_POSITIONING) Slog.d( TAG_WM, "startMovingTask: {" + startX + "," + startY + "}"); - return mService.startMovingTask(window, startX, startY); + long ident = Binder.clearCallingIdentity(); + try { + return mService.startMovingTask(window, startX, startY); + } finally { + Binder.restoreCallingIdentity(ident); + } } public void reportDropResult(IWindow window, boolean consumed) { diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java index 325005bb2206..c7b559904209 100644 --- a/services/core/java/com/android/server/wm/Task.java +++ b/services/core/java/com/android/server/wm/Task.java @@ -20,6 +20,7 @@ import static android.app.ActivityManager.StackId.DOCKED_STACK_ID; import static android.app.ActivityManager.StackId.FREEFORM_WORKSPACE_STACK_ID; import static android.app.ActivityManager.StackId.FULLSCREEN_WORKSPACE_STACK_ID; import static android.app.ActivityManager.StackId.HOME_STACK_ID; +import static android.content.pm.ActivityInfo.RESIZE_MODE_FORCE_RESIZEABLE; import static android.content.pm.ActivityInfo.RESIZE_MODE_UNRESIZEABLE; import static android.content.res.Configuration.ORIENTATION_LANDSCAPE; import static android.app.ActivityManager.RESIZE_MODE_SYSTEM_SCREEN_ROTATION; @@ -134,12 +135,6 @@ class Task implements DimLayer.DimLayerUser { mShowNonResizeableDockToast = false; - if (isResizeable()) { - Slog.wtf(TAG, - "Trying to show non-resizeable toast when task is resizeable task=" + this); - return; - } - if (mResizeMode == RESIZE_MODE_UNRESIZEABLE) { final String text = mService.mContext.getString(R.string.dock_non_resizeble_failed_to_dock_text); @@ -148,7 +143,7 @@ class Task implements DimLayer.DimLayerUser { } final int dockSide = mStack.getDockSide(); - if (!inCropWindowsResizeMode() || dockSide == DOCKED_INVALID) { + if (mResizeMode != RESIZE_MODE_FORCE_RESIZEABLE || dockSide == DOCKED_INVALID) { return; } @@ -176,7 +171,7 @@ class Task implements DimLayer.DimLayerUser { yOffset = mTmpRect2.bottom - mTmpRect.bottom; } final String text = - mService.mContext.getString(R.string.dock_cropped_windows_text); + mService.mContext.getString(R.string.dock_forced_resizable); mService.mH.obtainMessage(SHOW_NON_RESIZEABLE_DOCK_TOAST, xOffset, yOffset, text).sendToTarget(); } @@ -247,7 +242,15 @@ class Task implements DimLayer.DimLayerUser { mStack.removeTask(this); } stack.positionTask(this, position, showForAllUsers()); - setBounds(bounds, config); + resizeLocked(bounds, config, false /* force */); + + for (int activityNdx = mAppTokens.size() - 1; activityNdx >= 0; --activityNdx) { + final ArrayList<WindowState> windows = mAppTokens.get(activityNdx).allAppWindows; + for (int winNdx = windows.size() - 1; winNdx >= 0; --winNdx) { + final WindowState win = windows.get(winNdx); + win.notifyMovedInStack(); + } + } } boolean removeAppToken(AppWindowToken wtoken) { @@ -272,7 +275,7 @@ class Task implements DimLayer.DimLayerUser { } /** Set the task bounds. Passing in null sets the bounds to fullscreen. */ - int setBounds(Rect bounds, Configuration config) { + private int setBounds(Rect bounds, Configuration config) { if (config == null) { config = Configuration.EMPTY; } @@ -598,13 +601,21 @@ class Task implements DimLayer.DimLayerUser { void resizeWindows() { final ArrayList<WindowState> resizingWindows = mService.mResizingWindows; for (int activityNdx = mAppTokens.size() - 1; activityNdx >= 0; --activityNdx) { - final ArrayList<WindowState> windows = mAppTokens.get(activityNdx).allAppWindows; + final AppWindowToken atoken = mAppTokens.get(activityNdx); + + // Some windows won't go through the resizing process, if they don't have a surface, so + // destroy all saved surfaces here. + atoken.destroySavedSurfaces(); + final ArrayList<WindowState> windows = atoken.allAppWindows; for (int winNdx = windows.size() - 1; winNdx >= 0; --winNdx) { final WindowState win = windows.get(winNdx); if (win.mHasSurface && !resizingWindows.contains(win)) { if (DEBUG_RESIZE) Slog.d(TAG, "resizeWindows: Resizing " + win); resizingWindows.add(win); } + if (win.isGoneForLayoutLw()) { + win.mResizedWhileGone = true; + } } } } diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java index 06e5ac5d440e..07a6514de5f1 100644 --- a/services/core/java/com/android/server/wm/TaskStack.java +++ b/services/core/java/com/android/server/wm/TaskStack.java @@ -352,6 +352,7 @@ public class TaskStack implements DimLayer.DimLayerUser, mDisplayContent.rotateBounds(mRotation, newRotation, mTmpRect2); if (mStackId == DOCKED_STACK_ID) { + repositionDockedStackAfterRotation(mTmpRect2); snapDockedStackAfterRotation(mTmpRect2); } @@ -363,6 +364,43 @@ public class TaskStack implements DimLayer.DimLayerUser, } /** + * Some dock sides are not allowed by the policy. This method queries the policy and moves + * the docked stack around if needed. + * + * @param inOutBounds the bounds of the docked stack to adjust + */ + private void repositionDockedStackAfterRotation(Rect inOutBounds) { + int dockSide = getDockSide(inOutBounds); + if (mService.mPolicy.isDockSideAllowed(dockSide)) { + return; + } + mDisplayContent.getLogicalDisplayRect(mTmpRect); + dockSide = DockedDividerUtils.invertDockSide(dockSide); + switch (dockSide) { + case DOCKED_LEFT: + int movement = inOutBounds.left; + inOutBounds.left -= movement; + inOutBounds.right -= movement; + break; + case DOCKED_RIGHT: + movement = mTmpRect.right - inOutBounds.right; + inOutBounds.left += movement; + inOutBounds.right += movement; + break; + case DOCKED_TOP: + movement = inOutBounds.top; + inOutBounds.top -= movement; + inOutBounds.bottom -= movement; + break; + case DOCKED_BOTTOM: + movement = mTmpRect.bottom - inOutBounds.bottom; + inOutBounds.top += movement; + inOutBounds.bottom += movement; + break; + } + } + + /** * Snaps the bounds after rotation to the closest snap target for the docked stack. */ private void snapDockedStackAfterRotation(Rect outBounds) { diff --git a/services/core/java/com/android/server/wm/WindowAnimator.java b/services/core/java/com/android/server/wm/WindowAnimator.java index 38d0711e42b3..85bddee5e1dc 100644 --- a/services/core/java/com/android/server/wm/WindowAnimator.java +++ b/services/core/java/com/android/server/wm/WindowAnimator.java @@ -530,7 +530,7 @@ public class WindowAnimator { for (int i = windows.size() - 1; i >= 0; i--) { final WindowState win = windows.get(i); WindowStateAnimator winAnimator = win.mWinAnimator; - if (winAnimator.mSurfaceController == null) { + if (winAnimator.mSurfaceController == null || !winAnimator.hasSurface()) { continue; } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 142715e89c6c..daeecfcfb1ab 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -320,6 +320,8 @@ public class WindowManagerService extends IWindowManager.Stub private static final float DRAG_SHADOW_ALPHA_TRANSPARENT = .7071f; + private static final String PROPERTY_BUILD_DATE_UTC = "ro.build.date.utc"; + final private KeyguardDisableHandler mKeyguardDisableHandler; final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @@ -1996,8 +1998,10 @@ public class WindowManagerService extends IWindowManager.Stub prepareWindowReplacementTransition(atoken); if (displayContent.isDefaultDisplay) { - mPolicy.getInsetHintLw(win.mAttrs, mRotation, outContentInsets, outStableInsets, - outOutsets); + if (mPolicy.getInsetHintLw(win.mAttrs, mRotation, outContentInsets, outStableInsets, + outOutsets)) { + res |= WindowManagerGlobal.ADD_FLAG_ALWAYS_CONSUME_NAV_BAR; + } } else { outContentInsets.setEmpty(); outStableInsets.setEmpty(); @@ -2758,6 +2762,12 @@ public class WindowManagerService extends IWindowManager.Stub winAnimator.mReportSurfaceResized = false; result |= WindowManagerGlobal.RELAYOUT_RES_SURFACE_RESIZED; } + if (mPolicy.isNavBarForcedShownLw(win)) { + result |= WindowManagerGlobal.RELAYOUT_RES_CONSUME_ALWAYS_NAV_BAR; + } + if (!win.isGoneForLayoutLw()) { + win.mResizedWhileGone = false; + } outFrame.set(win.mCompatFrame); outOverscanInsets.set(win.mOverscanInsets); outContentInsets.set(win.mContentInsets); @@ -3736,7 +3746,8 @@ public class WindowManagerService extends IWindowManager.Stub } for (final WindowState win : mWindowMap.values()) { final Task task = win.getTask(); - if (task != null && mTmpTaskIds.get(task.mTaskId, -1) != -1) { + if (task != null && mTmpTaskIds.get(task.mTaskId, -1) != -1 + && task.inFreeformWorkspace()) { final AppWindowToken appToken = win.mAppToken; if (appToken != null && appToken.mAppAnimator != null) { appToken.mAppAnimator.startProlongAnimation(scaleUp ? @@ -7458,8 +7469,22 @@ public class WindowManagerService extends IWindowManager.Stub || volumeDownState > 0; try { if (SystemProperties.getInt(ShutdownThread.REBOOT_SAFEMODE_PROPERTY, 0) != 0) { - mSafeMode = true; - SystemProperties.set(ShutdownThread.REBOOT_SAFEMODE_PROPERTY, ""); + int auditSafeMode = SystemProperties.getInt(ShutdownThread.AUDIT_SAFEMODE_PROPERTY, 0); + + if (auditSafeMode == 0) { + mSafeMode = true; + SystemProperties.set(ShutdownThread.REBOOT_SAFEMODE_PROPERTY, ""); + } else { + // stay in safe mode until we have updated to a newer build + int buildDate = SystemProperties.getInt(PROPERTY_BUILD_DATE_UTC, 0); + + if (auditSafeMode >= buildDate) { + mSafeMode = true; + } else { + SystemProperties.set(ShutdownThread.REBOOT_SAFEMODE_PROPERTY, ""); + SystemProperties.set(ShutdownThread.AUDIT_SAFEMODE_PROPERTY, ""); + } + } } } catch (IllegalArgumentException e) { } @@ -8164,7 +8189,7 @@ public class WindowManagerService extends IWindowManager.Stub break; case SHOW_NON_RESIZEABLE_DOCK_TOAST: { final Toast toast = Toast.makeText( - mContext, (String) msg.obj, Toast.LENGTH_LONG); + mContext, (String) msg.obj, Toast.LENGTH_SHORT); final int gravity = toast.getGravity(); final int xOffset = toast.getXOffset() + msg.arg1; final int yOffset = toast.getYOffset() + msg.arg2; @@ -10663,6 +10688,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void waitForAllWindowsDrawn(Runnable callback, long timeout) { + boolean allWindowsDrawn = false; synchronized (mWindowMap) { mWaitingForDrawnCallback = callback; final WindowList windows = getDefaultWindowListLocked(); @@ -10683,13 +10709,16 @@ public class WindowManagerService extends IWindowManager.Stub } } mWindowPlacerLocked.requestTraversal(); + mH.removeMessages(H.WAITING_FOR_DRAWN_TIMEOUT); + if (mWaitingForDrawn.isEmpty()) { + allWindowsDrawn = true; + } else { + mH.sendEmptyMessageDelayed(H.WAITING_FOR_DRAWN_TIMEOUT, timeout); + checkDrawnWindowsLocked(); + } } - mH.removeMessages(H.WAITING_FOR_DRAWN_TIMEOUT); - if (mWaitingForDrawn.isEmpty()) { + if (allWindowsDrawn) { callback.run(); - } else { - mH.sendEmptyMessageDelayed(H.WAITING_FOR_DRAWN_TIMEOUT, timeout); - checkDrawnWindowsLocked(); } } diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java index f30c8d3f751b..44ed7e2314b5 100644 --- a/services/core/java/com/android/server/wm/WindowState.java +++ b/services/core/java/com/android/server/wm/WindowState.java @@ -448,6 +448,16 @@ final class WindowState implements WindowManagerPolicy.WindowState { final private Rect mTmpRect = new Rect(); + /** + * See {@link #notifyMovedInStack}. + */ + private boolean mJustMovedInStack; + + /** + * Whether the window was resized by us while it was gone for layout. + */ + boolean mResizedWhileGone = false; + WindowState(WindowManagerService service, Session s, IWindow c, WindowToken token, WindowState attachedWindow, int appOp, int seq, WindowManager.LayoutParams a, int viewVisibility, final DisplayContent displayContent) { @@ -1235,7 +1245,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { return mViewVisibility == View.GONE || !mRelayoutCalled || (atoken == null && mRootToken.hidden) - || (atoken != null && (atoken.hiddenRequested || atoken.hidden)) + || (atoken != null && atoken.hiddenRequested) || mAttachedHidden || (mAnimatingExit && !isAnimatingLw()) || mDestroying; @@ -1374,6 +1384,39 @@ final class WindowState implements WindowManagerPolicy.WindowState { } } + /** + * Notifies this window that the corresponding task has just moved in the stack. + * <p> + * This is used to fix the following: If we moved in the stack, and if the last clip rect was + * empty, meaning that our task was completely offscreen, we need to keep it invisible because + * the actual app transition that updates the visibility is delayed by a few transactions. + * Instead of messing around with the ordering and timing how transitions and transactions are + * executed, we introduce this little hack which prevents this window of getting visible again + * with the wrong bounds until the app transitions has started. + * <p> + * This method notifies the window about that we just moved in the stack so we can apply this + * logic in {@link WindowStateAnimator#updateSurfaceWindowCrop} + */ + void notifyMovedInStack() { + mJustMovedInStack = true; + } + + /** + * See {@link #notifyMovedInStack}. + * + * @return Whether we just got moved in the corresponding stack. + */ + boolean hasJustMovedInStack() { + return mJustMovedInStack; + } + + /** + * Resets that we just moved in the corresponding stack. See {@link #notifyMovedInStack}. + */ + void resetJustMovedInStack() { + mJustMovedInStack = false; + } + private final class DeadWindowEventReceiver extends InputEventReceiver { DeadWindowEventReceiver(InputChannel inputChannel) { super(inputChannel, mService.mH.getLooper()); @@ -1836,6 +1879,12 @@ final class WindowState implements WindowManagerPolicy.WindowState { return false; } + if (mResizedWhileGone) { + // Somebody resized our window while we were gone for layout, which means that the + // client got an old size, so we have an outdated surface here. + return false; + } + if (DEBUG_DISABLE_SAVING_SURFACES) { return false; } @@ -2106,7 +2155,7 @@ final class WindowState implements WindowManagerPolicy.WindowState { Configuration newConfig) throws RemoteException { mClient.resized(frame, overscanInsets, contentInsets, visibleInsets, stableInsets, outsets, reportDraw, newConfig, getBackdropFrame(frame), - isDragResizeChanged() /* forceRelayout */); + isDragResizeChanged() /* forceRelayout */, mPolicy.isNavBarForcedShownLw(this)); mDragResizingChangeReported = true; } diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java index 0828417f4103..2d8a4c9aedf5 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -1191,6 +1191,11 @@ class WindowStateAnimator { w.transformFromScreenToSurfaceSpace(clipRect); + // See {@link WindowState#notifyMovedInStack} for why this is necessary. + if (w.hasJustMovedInStack() && mLastClipRect.isEmpty() && !clipRect.isEmpty()) { + clipRect.setEmpty(); + } + if (!clipRect.equals(mLastClipRect)) { mLastClipRect.set(clipRect); mSurfaceController.setCropInTransaction(clipRect, recoveringMemory); diff --git a/services/core/java/com/android/server/wm/WindowSurfaceController.java b/services/core/java/com/android/server/wm/WindowSurfaceController.java index 93164def3177..0db6f3a8771d 100644 --- a/services/core/java/com/android/server/wm/WindowSurfaceController.java +++ b/services/core/java/com/android/server/wm/WindowSurfaceController.java @@ -62,7 +62,7 @@ class WindowSurfaceController { // However, we need to somehow handle the situation where the cropping would completely hide // the window. We achieve this by explicitly hiding the surface and not letting it be shown. private boolean mHiddenForCrop = false; - + private boolean mHiddenForOtherReasons = false; private final String title; public WindowSurfaceController(SurfaceSession s, @@ -95,6 +95,11 @@ class WindowSurfaceController { void hideInTransaction(String reason) { if (SHOW_TRANSACTIONS) logSurface("HIDE ( " + reason + " )", null); + mHiddenForOtherReasons = true; + updateVisibility(); + } + + private void hideSurface() { if (mSurfaceControl != null) { mSurfaceShown = false; try { @@ -152,9 +157,10 @@ class WindowSurfaceController { if (clipRect.width() > 0 && clipRect.height() > 0) { mSurfaceControl.setWindowCrop(clipRect); mHiddenForCrop = false; + updateVisibility(); } else { - hideInTransaction("setCrop"); mHiddenForCrop = true; + updateVisibility(); } } catch (RuntimeException e) { Slog.w(TAG, "Error setting crop surface of " + this @@ -317,11 +323,26 @@ class WindowSurfaceController { "SHOW (performLayout)", null); if (DEBUG_VISIBILITY) Slog.v(TAG, "Showing " + this + " during relayout"); + mHiddenForOtherReasons = false; + return updateVisibility(); + } - if (mHiddenForCrop) { + private boolean updateVisibility() { + if (mHiddenForCrop || mHiddenForOtherReasons) { + if (mSurfaceShown) { + hideSurface(); + } return false; + } else { + if (!mSurfaceShown) { + return showSurface(); + } else { + return true; + } } + } + private boolean showSurface() { try { mSurfaceShown = true; mSurfaceControl.show(); diff --git a/services/core/jni/Android.mk b/services/core/jni/Android.mk index bb571c3d0631..5e5c6d9321e3 100644 --- a/services/core/jni/Android.mk +++ b/services/core/jni/Android.mk @@ -17,6 +17,7 @@ LOCAL_SRC_FILES += \ $(LOCAL_REL_DIR)/com_android_server_AssetAtlasService.cpp \ $(LOCAL_REL_DIR)/com_android_server_connectivity_Vpn.cpp \ $(LOCAL_REL_DIR)/com_android_server_ConsumerIrService.cpp \ + $(LOCAL_REL_DIR)/com_android_server_HardwarePropertiesManagerService.cpp \ $(LOCAL_REL_DIR)/com_android_server_hdmi_HdmiCecController.cpp \ $(LOCAL_REL_DIR)/com_android_server_input_InputApplicationHandle.cpp \ $(LOCAL_REL_DIR)/com_android_server_input_InputManagerService.cpp \ diff --git a/core/jni/android_os_HardwarePropertiesManager.cpp b/services/core/jni/com_android_server_HardwarePropertiesManagerService.cpp index dc1ba48097b8..214d9882c499 100644 --- a/core/jni/android_os_HardwarePropertiesManager.cpp +++ b/services/core/jni/com_android_server_HardwarePropertiesManagerService.cpp @@ -14,7 +14,7 @@ * limitations under the License. */ -#define LOG_TAG "HardwarePropertiesManager-JNI" +#define LOG_TAG "HardwarePropertiesManagerService-JNI" #include "JNIHelp.h" #include "jni.h" @@ -137,7 +137,7 @@ static jobjectArray nativeGetCpuUsages(JNIEnv *env, jclass /* clazz */) { // ---------------------------------------------------------------------------- -static const JNINativeMethod gHardwarePropertiesManagerMethods[] = { +static const JNINativeMethod gHardwarePropertiesManagerServiceMethods[] = { /* name, signature, funcPtr */ { "nativeInit", "()V", (void*) nativeInit }, @@ -149,11 +149,11 @@ static const JNINativeMethod gHardwarePropertiesManagerMethods[] = { (void*) nativeGetCpuUsages } }; -int register_android_os_HardwarePropertiesManager(JNIEnv* env) { +int register_android_server_HardwarePropertiesManagerService(JNIEnv* env) { gHardwarePropertiesModule = nullptr; - int res = jniRegisterNativeMethods(env, "android/os/HardwarePropertiesManager", - gHardwarePropertiesManagerMethods, - NELEM(gHardwarePropertiesManagerMethods)); + int res = jniRegisterNativeMethods(env, "com/android/server/HardwarePropertiesManagerService", + gHardwarePropertiesManagerServiceMethods, + NELEM(gHardwarePropertiesManagerServiceMethods)); jclass clazz = env->FindClass("android/os/CpuUsageInfo"); gCpuUsageInfoClassInfo.clazz = MakeGlobalRefOrDie(env, clazz); gCpuUsageInfoClassInfo.initMethod = GetMethodIDOrDie(env, gCpuUsageInfoClassInfo.clazz, diff --git a/services/core/jni/onload.cpp b/services/core/jni/onload.cpp index ef5c56c1bcfa..be99673a4cb5 100644 --- a/services/core/jni/onload.cpp +++ b/services/core/jni/onload.cpp @@ -44,6 +44,7 @@ int register_android_server_hdmi_HdmiCecController(JNIEnv* env); int register_android_server_tv_TvInputHal(JNIEnv* env); int register_android_server_PersistentDataBlockService(JNIEnv* env); int register_android_server_Watchdog(JNIEnv* env); +int register_android_server_HardwarePropertiesManagerService(JNIEnv* env); }; using namespace android; @@ -83,6 +84,7 @@ extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */) register_android_server_tv_TvInputHal(env); register_android_server_PersistentDataBlockService(env); register_android_server_Watchdog(env); + register_android_server_HardwarePropertiesManagerService(env); return JNI_VERSION_1_4; diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java index 33225eba9565..60c3a35017d4 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java @@ -2053,31 +2053,31 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { return null; } enforceFullCrossUsersPermission(userHandle); - Intent resolveIntent = new Intent(); - resolveIntent.setComponent(adminName); - List<ResolveInfo> infos = mContext.getPackageManager().queryBroadcastReceiversAsUser( - resolveIntent, - PackageManager.GET_META_DATA | PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS | - PackageManager.MATCH_ENCRYPTION_AWARE_AND_UNAWARE, - userHandle); - if (infos == null || infos.size() <= 0) { + ActivityInfo ai = null; + try { + ai = mIPackageManager.getReceiverInfo(adminName, + PackageManager.GET_META_DATA | + PackageManager.GET_DISABLED_UNTIL_USED_COMPONENTS | + PackageManager.MATCH_ENCRYPTION_AWARE_AND_UNAWARE, userHandle); + } catch (RemoteException e) { + // shouldn't happen. + } + if (ai == null) { throw new IllegalArgumentException("Unknown admin: " + adminName); } - final ResolveInfo ri = infos.get(0); - - if (!permission.BIND_DEVICE_ADMIN.equals(ri.activityInfo.permission)) { + if (!permission.BIND_DEVICE_ADMIN.equals(ai.permission)) { final String message = "DeviceAdminReceiver " + adminName + " must be protected with " + permission.BIND_DEVICE_ADMIN; Slog.w(LOG_TAG, message); if (throwForMissiongPermission && - ri.activityInfo.applicationInfo.targetSdkVersion > Build.VERSION_CODES.M) { + ai.applicationInfo.targetSdkVersion > Build.VERSION_CODES.M) { throw new IllegalArgumentException(message); } } try { - return new DeviceAdminInfo(mContext, ri); + return new DeviceAdminInfo(mContext, ai); } catch (XmlPullParserException | IOException e) { Slog.w(LOG_TAG, "Bad device admin requested for user=" + userHandle + ": " + adminName, e); @@ -4090,16 +4090,24 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { } @Override - public boolean installKeyPair(ComponentName who, byte[] privKey, byte[] cert, String alias) { + public boolean installKeyPair(ComponentName who, byte[] privKey, byte[] cert, String alias, + boolean requestAccess) { enforceCanManageInstalledKeys(who); - final UserHandle userHandle = new UserHandle(UserHandle.getCallingUserId()); + final int callingUid = mInjector.binderGetCallingUid(); final long id = mInjector.binderClearCallingIdentity(); try { - final KeyChainConnection keyChainConnection = KeyChain.bindAsUser(mContext, userHandle); + final KeyChainConnection keyChainConnection = + KeyChain.bindAsUser(mContext, UserHandle.getUserHandleForUid(callingUid)); try { IKeyChainService keyChain = keyChainConnection.getService(); - return keyChain.installKeyPair(privKey, cert, alias); + if (!keyChain.installKeyPair(privKey, cert, alias)) { + return false; + } + if (requestAccess) { + keyChain.setGrant(callingUid, alias, true); + } + return true; } catch (RemoteException e) { Log.e(LOG_TAG, "Installing certificate", e); } finally { @@ -4970,7 +4978,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { Preconditions.checkNotNull(who, "ComponentName is null"); // Allow setting this policy to true only if there is a split system user. if (forceEphemeralUsers && !mInjector.userManagerIsSplitSystemUser()) { - throw new IllegalArgumentException( + throw new UnsupportedOperationException( "Cannot force ephemeral users on systems without split system user."); } boolean removeAllUsers = false; @@ -6743,57 +6751,6 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { } } - @Override - public UserHandle createUser(ComponentName who, String name) { - Preconditions.checkNotNull(who, "ComponentName is null"); - synchronized (this) { - getActiveAdminForCallerLocked(who, DeviceAdminInfo.USES_POLICY_DEVICE_OWNER); - - long id = mInjector.binderClearCallingIdentity(); - try { - UserInfo userInfo = mUserManager.createUser(name, 0 /* flags */); - if (userInfo != null) { - return userInfo.getUserHandle(); - } - return null; - } finally { - mInjector.binderRestoreCallingIdentity(id); - } - } - } - - @Override - public UserHandle createAndInitializeUser(ComponentName who, String name, - String ownerName, ComponentName profileOwnerComponent, Bundle adminExtras) { - UserHandle user = createUser(who, name); - if (user == null) { - return null; - } - long id = mInjector.binderClearCallingIdentity(); - try { - String profileOwnerPkg = profileOwnerComponent.getPackageName(); - - final int userHandle = user.getIdentifier(); - try { - // Install the profile owner if not present. - if (!mIPackageManager.isPackageAvailable(profileOwnerPkg, userHandle)) { - mIPackageManager.installExistingPackageAsUser(profileOwnerPkg, userHandle); - } - - // Start user in background. - mInjector.getIActivityManager().startUserInBackground(userHandle); - } catch (RemoteException e) { - Slog.e(LOG_TAG, "Failed to make remote calls for configureUser", e); - } - - setActiveAdmin(profileOwnerComponent, true, userHandle, adminExtras); - setProfileOwner(profileOwnerComponent, ownerName, userHandle); - return user; - } finally { - mInjector.binderRestoreCallingIdentity(id); - } - } - private void sendAdminEnabledBroadcastLocked(int userHandle) { DevicePolicyData policyData = getUserData(userHandle); if (policyData.mAdminBroadcastPending) { @@ -7785,9 +7742,11 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { if (mUserSetupComplete.equals(uri)) { updateUserSetupComplete(); } else if (mDeviceProvisioned.equals(uri)) { - // Set PROPERTY_DEVICE_OWNER_PRESENT, for the SUW case where setting the property - // is delayed until device is marked as provisioned. - setDeviceOwnerSystemPropertyLocked(); + synchronized (DevicePolicyManagerService.this) { + // Set PROPERTY_DEVICE_OWNER_PRESENT, for the SUW case where setting the property + // is delayed until device is marked as provisioned. + setDeviceOwnerSystemPropertyLocked(); + } } } } @@ -8484,7 +8443,7 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { return false; } - private void disableDeviceLoggingIfNotCompliant() { + private synchronized void disableDeviceLoggingIfNotCompliant() { if (!isDeviceOwnerManagedSingleUserDevice()) { mInjector.securityLogSetLoggingEnabledProperty(false); Slog.w(LOG_TAG, "Device logging turned off as it's no longer a single user device."); @@ -8497,6 +8456,9 @@ public class DevicePolicyManagerService extends IDevicePolicyManager.Stub { ensureDeviceOwnerManagingSingleUser(admin); synchronized (this) { + if (enabled == mInjector.securityLogGetLoggingEnabledProperty()) { + return; + } mInjector.securityLogSetLoggingEnabledProperty(enabled); if (enabled) { mSecurityLogMonitor.start(); diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/SecurityLogMonitor.java b/services/devicepolicy/java/com/android/server/devicepolicy/SecurityLogMonitor.java index f2d6180d34a3..cacc671df393 100644 --- a/services/devicepolicy/java/com/android/server/devicepolicy/SecurityLogMonitor.java +++ b/services/devicepolicy/java/com/android/server/devicepolicy/SecurityLogMonitor.java @@ -28,6 +28,8 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.Lock; +import java.util.concurrent.locks.ReentrantLock; import android.os.Process; @@ -42,6 +44,8 @@ import android.os.Process; class SecurityLogMonitor implements Runnable { private final DevicePolicyManagerService mService; + private final Lock mLock = new ReentrantLock(); + SecurityLogMonitor(DevicePolicyManagerService service) { mService = service; } @@ -68,36 +72,50 @@ class SecurityLogMonitor implements Runnable { */ private static final long POLLING_INTERVAL_MILLISECONDS = TimeUnit.MINUTES.toMillis(1); - @GuardedBy("this") + @GuardedBy("mLock") private Thread mMonitorThread = null; - @GuardedBy("this") + @GuardedBy("mLock") private ArrayList<SecurityEvent> mPendingLogs = new ArrayList<SecurityEvent>(); - @GuardedBy("this") + @GuardedBy("mLock") private boolean mAllowedToRetrieve = false; // When DO will be allowed to retrieves the log, in milliseconds. - @GuardedBy("this") + @GuardedBy("mLock") private long mNextAllowedRetrivalTimeMillis = -1; - synchronized void start() { - if (mMonitorThread == null) { - mPendingLogs = new ArrayList<SecurityEvent>(); - mAllowedToRetrieve = false; - mNextAllowedRetrivalTimeMillis = -1; + void start() { + mLock.lock(); + try { + if (mMonitorThread == null) { + mPendingLogs = new ArrayList<SecurityEvent>(); + mAllowedToRetrieve = false; + mNextAllowedRetrivalTimeMillis = -1; - mMonitorThread = new Thread(this); - mMonitorThread.start(); + mMonitorThread = new Thread(this); + mMonitorThread.start(); + } + } finally { + mLock.unlock(); } } - synchronized void stop() { - if (mMonitorThread != null) { - mMonitorThread.interrupt(); - try { - mMonitorThread.join(TimeUnit.SECONDS.toMillis(5)); - } catch (InterruptedException e) { - Log.e(TAG, "Interrupted while waiting for thread to stop", e); + void stop() { + mLock.lock(); + try { + if (mMonitorThread != null) { + mMonitorThread.interrupt(); + try { + mMonitorThread.join(TimeUnit.SECONDS.toMillis(5)); + } catch (InterruptedException e) { + Log.e(TAG, "Interrupted while waiting for thread to stop", e); + } + // Reset state and clear buffer + mPendingLogs = new ArrayList<SecurityEvent>(); + mAllowedToRetrieve = false; + mNextAllowedRetrivalTimeMillis = -1; + mMonitorThread = null; } - mMonitorThread = null; + } finally { + mLock.unlock(); } } @@ -105,16 +123,21 @@ class SecurityLogMonitor implements Runnable { * Returns the new batch of logs since the last call to this method. Returns null if * rate limit is exceeded. */ - synchronized List<SecurityEvent> retrieveLogs() { - if (mAllowedToRetrieve) { - mAllowedToRetrieve = false; - mNextAllowedRetrivalTimeMillis = System.currentTimeMillis() - + RATE_LIMIT_INTERVAL_MILLISECONDS; - List<SecurityEvent> result = mPendingLogs; - mPendingLogs = new ArrayList<SecurityEvent>(); - return result; - } else { - return null; + List<SecurityEvent> retrieveLogs() { + mLock.lock(); + try { + if (mAllowedToRetrieve) { + mAllowedToRetrieve = false; + mNextAllowedRetrivalTimeMillis = System.currentTimeMillis() + + RATE_LIMIT_INTERVAL_MILLISECONDS; + List<SecurityEvent> result = mPendingLogs; + mPendingLogs = new ArrayList<SecurityEvent>(); + return result; + } else { + return null; + } + } finally { + mLock.unlock(); } } @@ -141,7 +164,8 @@ class SecurityLogMonitor implements Runnable { } if (!logs.isEmpty()) { if (DEBUG) Slog.d(TAG, "processing new logs"); - synchronized (this) { + mLock.lockInterruptibly(); + try { mPendingLogs.addAll(logs); if (mPendingLogs.size() > BUFFER_ENTRIES_MAXIMUM_LEVEL) { // Truncate buffer down to half of BUFFER_ENTRIES_MAXIMUM_LEVEL @@ -149,6 +173,8 @@ class SecurityLogMonitor implements Runnable { mPendingLogs.size() - (BUFFER_ENTRIES_MAXIMUM_LEVEL / 2), mPendingLogs.size())); } + } finally { + mLock.unlock(); } lastLogTimestampNanos = logs.get(logs.size() - 1).getTimeNanos(); logs.clear(); @@ -163,18 +189,13 @@ class SecurityLogMonitor implements Runnable { } } if (DEBUG) Slog.d(TAG, "MonitorThread exit."); - synchronized (this) { - // Reset state and clear buffer - mPendingLogs = new ArrayList<SecurityEvent>(); - mAllowedToRetrieve = false; - mNextAllowedRetrivalTimeMillis = -1; - } } - private void notifyDeviceOwnerIfNeeded() { + private void notifyDeviceOwnerIfNeeded() throws InterruptedException { boolean shouldNotifyDO = false; boolean allowToRetrieveNow = false; - synchronized (this) { + mLock.lockInterruptibly(); + try { int logSize = mPendingLogs.size(); if (logSize >= BUFFER_ENTRIES_NOTIFICATION_LEVEL) { // Allow DO to retrieve logs if too many pending logs @@ -188,6 +209,8 @@ class SecurityLogMonitor implements Runnable { } shouldNotifyDO = (!mAllowedToRetrieve) && allowToRetrieveNow; mAllowedToRetrieve = allowToRetrieveNow; + } finally { + mLock.unlock(); } if (shouldNotifyDO) { if (DEBUG) Slog.d(TAG, "notify DO"); @@ -195,4 +218,4 @@ class SecurityLogMonitor implements Runnable { null); } } -}
\ No newline at end of file +} diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index ac972a9c6863..d08f68a0654e 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -59,6 +59,7 @@ import com.android.server.am.ActivityManagerService; import com.android.server.audio.AudioService; import com.android.server.camera.CameraService; import com.android.server.clipboard.ClipboardService; +import com.android.server.connectivity.MetricsLoggerService; import com.android.server.content.ContentService; import com.android.server.devicepolicy.DevicePolicyManagerService; import com.android.server.display.DisplayManagerService; @@ -341,8 +342,8 @@ public final class SystemServer { // always make sure uncrypt gets executed properly when needed. // If '/cache/recovery/block.map' hasn't been created, stop the // reboot which will fail for sure, and get a chance to capture a - // bugreport when that's still feasible. (Bug; 26444951) - if (PowerManager.REBOOT_RECOVERY.equals(reason)) { + // bugreport when that's still feasible. (Bug: 26444951) + if (PowerManager.REBOOT_RECOVERY_UPDATE.equals(reason)) { File packageFile = new File(UNCRYPT_PACKAGE_FILE); if (packageFile.exists()) { String filename = null; @@ -488,6 +489,7 @@ public final class SystemServer { MmsServiceBroker mmsService = null; EntropyMixer entropyMixer = null; VrManagerService vrManagerService = null; + HardwarePropertiesManagerService hardwarePropertiesService = null; boolean disableStorage = SystemProperties.getBoolean("config.disable_storage", false); boolean disableBluetooth = SystemProperties.getBoolean("config.disable_bluetooth", false); @@ -601,6 +603,10 @@ public final class SystemServer { } else { mSystemServiceManager.startService(BluetoothService.class); } + + traceBeginAndSlog("ConnectivityMetricsLoggerService"); + mSystemServiceManager.startService(MetricsLoggerService.class); + Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } catch (RuntimeException e) { Slog.e("System", "******************************************"); Slog.e("System", "************ Failure starting core service", e); @@ -832,6 +838,10 @@ public final class SystemServer { Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } + if (!disableNonCoreServices) { + mSystemServiceManager.startService(RecoverySystemService.class); + } + /* * MountService has a few dependencies: Notification Manager and * AppWidget Provider. Make sure MountService is completely started @@ -962,6 +972,17 @@ public final class SystemServer { Slog.e(TAG, "Failure starting SerialService", e); } Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); + + Trace.traceBegin(Trace.TRACE_TAG_SYSTEM_SERVER, + "StartHardwarePropertiesManagerService"); + try { + hardwarePropertiesService = new HardwarePropertiesManagerService(context); + ServiceManager.addService(Context.HARDWARE_PROPERTIES_SERVICE, + hardwarePropertiesService); + } catch (Throwable e) { + Slog.e(TAG, "Failure starting HardwarePropertiesManagerService", e); + } + Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER); } mSystemServiceManager.startService(TwilightService.class); diff --git a/services/net/java/android/net/ip/IpManager.java b/services/net/java/android/net/ip/IpManager.java index 61f2c8afcf58..2a90c60656ab 100644 --- a/services/net/java/android/net/ip/IpManager.java +++ b/services/net/java/android/net/ip/IpManager.java @@ -24,6 +24,7 @@ import android.net.InterfaceConfiguration; import android.net.LinkAddress; import android.net.LinkProperties; import android.net.LinkProperties.ProvisioningChange; +import android.net.ProxyInfo; import android.net.RouteInfo; import android.net.StaticIpConfiguration; import android.net.dhcp.DhcpClient; @@ -31,6 +32,7 @@ import android.os.INetworkManagementService; import android.os.Message; import android.os.RemoteException; import android.os.ServiceManager; +import android.text.TextUtils; import android.util.Log; import android.util.SparseArray; @@ -64,6 +66,9 @@ public class IpManager extends StateMachine { private static final boolean DBG = true; private static final boolean VDBG = false; + private static final boolean NO_CALLBACKS = false; + private static final boolean SEND_CALLBACKS = true; + // For message logging. private static final Class[] sMessageClasses = { IpManager.class, DhcpClient.class }; private static final SparseArray<String> sWhatToString = @@ -104,6 +109,35 @@ public class IpManager extends StateMachine { public void onQuit() {} } + public static class WaitForProvisioningCallback extends Callback { + private LinkProperties mCallbackLinkProperties; + + public LinkProperties waitForProvisioning() { + synchronized (this) { + try { + wait(); + } catch (InterruptedException e) {} + return mCallbackLinkProperties; + } + } + + @Override + public void onProvisioningSuccess(LinkProperties newLp) { + synchronized (this) { + mCallbackLinkProperties = newLp; + notify(); + } + } + + @Override + public void onProvisioningFailure(LinkProperties newLp) { + synchronized (this) { + mCallbackLinkProperties = null; + notify(); + } + } + } + /** * This class encapsulates parameters to be passed to * IpManager#startProvisioning(). A defensive copy is made by IpManager @@ -168,6 +202,8 @@ public class IpManager extends StateMachine { private static final int EVENT_PRE_DHCP_ACTION_COMPLETE = 4; // Sent by NetlinkTracker to communicate netlink events. private static final int EVENT_NETLINK_LINKPROPERTIES_CHANGED = 5; + private static final int CMD_UPDATE_TCP_BUFFER_SIZES = 6; + private static final int CMD_UPDATE_HTTP_PROXY = 7; private static final int MAX_LOG_RECORDS = 1000; @@ -189,10 +225,12 @@ public class IpManager extends StateMachine { /** * Non-final member variables accessed only from within our StateMachine. */ + private ProvisioningConfiguration mConfiguration; private IpReachabilityMonitor mIpReachabilityMonitor; private DhcpClient mDhcpClient; private DhcpResults mDhcpResults; - private ProvisioningConfiguration mConfiguration; + private String mTcpBufferSizes; + private ProxyInfo mHttpProxy; /** * Member variables accessed both from within the StateMachine thread @@ -301,6 +339,26 @@ public class IpManager extends StateMachine { sendMessage(EVENT_PRE_DHCP_ACTION_COMPLETE); } + /** + * Set the TCP buffer sizes to use. + * + * This may be called, repeatedly, at any time before or after a call to + * #startProvisioning(). The setting is cleared upon calling #stop(). + */ + public void setTcpBufferSizes(String tcpBufferSizes) { + sendMessage(CMD_UPDATE_TCP_BUFFER_SIZES, tcpBufferSizes); + } + + /** + * Set the HTTP Proxy configuration to use. + * + * This may be called, repeatedly, at any time before or after a call to + * #startProvisioning(). The setting is cleared upon calling #stop(). + */ + public void setHttpProxy(ProxyInfo proxyInfo) { + sendMessage(CMD_UPDATE_HTTP_PROXY, proxyInfo); + } + public LinkProperties getLinkProperties() { synchronized (mLock) { return new LinkProperties(mLinkProperties); @@ -344,8 +402,10 @@ public class IpManager extends StateMachine { // assigned to the interface, etc. private void resetLinkProperties() { mNetlinkTracker.clearLinkProperties(); - mDhcpResults = null; mConfiguration = null; + mDhcpResults = null; + mTcpBufferSizes = ""; + mHttpProxy = null; synchronized (mLock) { mLinkProperties = new LinkProperties(); @@ -502,13 +562,33 @@ public class IpManager extends StateMachine { newLp.setDomains(mDhcpResults.domains); } + // [4] Add in TCP buffer sizes and HTTP Proxy config, if available. + if (!TextUtils.isEmpty(mTcpBufferSizes)) { + newLp.setTcpBufferSizes(mTcpBufferSizes); + } + if (mHttpProxy != null) { + newLp.setHttpProxy(mHttpProxy); + } + if (VDBG) { Log.d(mTag, "newLp{" + newLp + "}"); } - return newLp; } + // Returns false if we have lost provisioning, true otherwise. + private boolean handleLinkPropertiesUpdate(boolean sendCallbacks) { + final LinkProperties newLp = assembleLinkProperties(); + if (linkPropertiesUnchanged(newLp)) { + return true; + } + final ProvisioningChange delta = setLinkProperties(newLp); + if (sendCallbacks) { + dispatchCallback(delta, newLp); + } + return (delta != ProvisioningChange.LOST_PROVISIONING); + } + private void clearIPv4Address() { try { final InterfaceConfiguration ifcg = new InterfaceConfiguration(); @@ -587,7 +667,17 @@ public class IpManager extends StateMachine { break; case EVENT_NETLINK_LINKPROPERTIES_CHANGED: - setLinkProperties(assembleLinkProperties()); + handleLinkPropertiesUpdate(NO_CALLBACKS); + break; + + case CMD_UPDATE_TCP_BUFFER_SIZES: + mTcpBufferSizes = (String) msg.obj; + handleLinkPropertiesUpdate(NO_CALLBACKS); + break; + + case CMD_UPDATE_HTTP_PROXY: + mHttpProxy = (ProxyInfo) msg.obj; + handleLinkPropertiesUpdate(NO_CALLBACKS); break; case DhcpClient.CMD_ON_QUIT: @@ -718,18 +808,23 @@ public class IpManager extends StateMachine { } break; - case EVENT_NETLINK_LINKPROPERTIES_CHANGED: { - final LinkProperties newLp = assembleLinkProperties(); - if (linkPropertiesUnchanged(newLp)) { - break; - } - final ProvisioningChange delta = setLinkProperties(newLp); - dispatchCallback(delta, newLp); - if (delta == ProvisioningChange.LOST_PROVISIONING) { + case EVENT_NETLINK_LINKPROPERTIES_CHANGED: + if (!handleLinkPropertiesUpdate(SEND_CALLBACKS)) { transitionTo(mStoppedState); } break; - } + + case CMD_UPDATE_TCP_BUFFER_SIZES: + mTcpBufferSizes = (String) msg.obj; + // This cannot possibly change provisioning state. + handleLinkPropertiesUpdate(SEND_CALLBACKS); + break; + + case CMD_UPDATE_HTTP_PROXY: + mHttpProxy = (ProxyInfo) msg.obj; + // This cannot possibly change provisioning state. + handleLinkPropertiesUpdate(SEND_CALLBACKS); + break; case DhcpClient.CMD_PRE_DHCP_ACTION: if (VDBG) { Log.d(mTag, "onPreDhcpAction()"); } diff --git a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmTestBase.java b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmTestBase.java index ca436442d75a..c80ca6c996a2 100644 --- a/services/tests/servicestests/src/com/android/server/devicepolicy/DpmTestBase.java +++ b/services/tests/servicestests/src/com/android/server/devicepolicy/DpmTestBase.java @@ -154,8 +154,10 @@ public abstract class DpmTestBase extends AndroidTestCase { aci.packageName = admin.getPackageName(); aci.name = admin.getClassName(); - doReturn(realResolveInfo).when(mMockContext.packageManager).queryBroadcastReceiversAsUser( - MockUtils.checkIntentComponent(admin), + // Note we don't set up queryBroadcastReceivers. We don't use it in DPMS. + + doReturn(aci).when(mMockContext.ipackageManager).getReceiverInfo( + eq(admin), anyInt(), eq(UserHandle.getUserId(packageUid))); diff --git a/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java b/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java index c7860368289a..edbff83736ad 100644 --- a/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java +++ b/services/tests/servicestests/src/com/android/server/job/JobStoreTest.java @@ -12,6 +12,7 @@ import android.test.RenamingDelegatingContext; import android.util.Log; import android.util.ArraySet; +import com.android.server.job.JobStore.JobSet; import com.android.server.job.controllers.JobStatus; import java.util.Iterator; @@ -58,15 +59,15 @@ public class JobStoreTest extends AndroidTestCase { .setMinimumLatency(runFromMillis) .setPersisted(true) .build(); - final JobStatus ts = JobStatus.createFromJobInfo(task, SOME_UID, null, -1); + final JobStatus ts = JobStatus.createFromJobInfo(task, SOME_UID, null, -1, null); mTaskStoreUnderTest.add(ts); Thread.sleep(IO_WAIT); // Manually load tasks from xml file. - final ArraySet<JobStatus> jobStatusSet = new ArraySet<JobStatus>(); + final JobSet jobStatusSet = new JobSet(); mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet); assertEquals("Didn't get expected number of persisted tasks.", 1, jobStatusSet.size()); - final JobStatus loadedTaskStatus = jobStatusSet.iterator().next(); + final JobStatus loadedTaskStatus = jobStatusSet.getAllJobs().get(0); assertTasksEqual(task, loadedTaskStatus.getJob()); assertTrue("JobStore#contains invalid.", mTaskStoreUnderTest.containsJob(ts)); assertEquals("Different uids.", SOME_UID, loadedTaskStatus.getUid()); @@ -91,16 +92,16 @@ public class JobStoreTest extends AndroidTestCase { .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED) .setPersisted(true) .build(); - final JobStatus taskStatus1 = JobStatus.createFromJobInfo(task1, SOME_UID, null, -1); - final JobStatus taskStatus2 = JobStatus.createFromJobInfo(task2, SOME_UID, null, -1); + final JobStatus taskStatus1 = JobStatus.createFromJobInfo(task1, SOME_UID, null, -1, null); + final JobStatus taskStatus2 = JobStatus.createFromJobInfo(task2, SOME_UID, null, -1, null); mTaskStoreUnderTest.add(taskStatus1); mTaskStoreUnderTest.add(taskStatus2); Thread.sleep(IO_WAIT); - final ArraySet<JobStatus> jobStatusSet = new ArraySet<JobStatus>(); + final JobSet jobStatusSet = new JobSet(); mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet); assertEquals("Incorrect # of persisted tasks.", 2, jobStatusSet.size()); - Iterator<JobStatus> it = jobStatusSet.iterator(); + Iterator<JobStatus> it = jobStatusSet.getAllJobs().iterator(); JobStatus loaded1 = it.next(); JobStatus loaded2 = it.next(); @@ -140,15 +141,15 @@ public class JobStoreTest extends AndroidTestCase { extras.putInt("into", 3); b.setExtras(extras); final JobInfo task = b.build(); - JobStatus taskStatus = JobStatus.createFromJobInfo(task, SOME_UID, null, -1); + JobStatus taskStatus = JobStatus.createFromJobInfo(task, SOME_UID, null, -1, null); mTaskStoreUnderTest.add(taskStatus); Thread.sleep(IO_WAIT); - final ArraySet<JobStatus> jobStatusSet = new ArraySet<JobStatus>(); + final JobSet jobStatusSet = new JobSet(); mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet); assertEquals("Incorrect # of persisted tasks.", 1, jobStatusSet.size()); - JobStatus loaded = jobStatusSet.iterator().next(); + JobStatus loaded = jobStatusSet.getAllJobs().iterator().next(); assertTasksEqual(task, loaded.getJob()); } public void testWritingTaskWithSourcePackage() throws Exception { @@ -158,15 +159,15 @@ public class JobStoreTest extends AndroidTestCase { .setRequiresCharging(true) .setPersisted(true); JobStatus taskStatus = JobStatus.createFromJobInfo(b.build(), SOME_UID, - "com.google.android.gms", 0); + "com.google.android.gms", 0, null); mTaskStoreUnderTest.add(taskStatus); Thread.sleep(IO_WAIT); - final ArraySet<JobStatus> jobStatusSet = new ArraySet<JobStatus>(); + final JobSet jobStatusSet = new JobSet(); mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet); assertEquals("Incorrect # of persisted tasks.", 1, jobStatusSet.size()); - JobStatus loaded = jobStatusSet.iterator().next(); + JobStatus loaded = jobStatusSet.getAllJobs().iterator().next(); assertEquals("Source package not equal.", loaded.getSourcePackageName(), taskStatus.getSourcePackageName()); assertEquals("Source user not equal.", loaded.getSourceUserId(), @@ -179,15 +180,15 @@ public class JobStoreTest extends AndroidTestCase { .setPeriodic(5*60*60*1000, 1*60*60*1000) .setRequiresCharging(true) .setPersisted(true); - JobStatus taskStatus = JobStatus.createFromJobInfo(b.build(), SOME_UID, null, -1); + JobStatus taskStatus = JobStatus.createFromJobInfo(b.build(), SOME_UID, null, -1, null); mTaskStoreUnderTest.add(taskStatus); Thread.sleep(IO_WAIT); - final ArraySet<JobStatus> jobStatusSet = new ArraySet<JobStatus>(); + final JobSet jobStatusSet = new JobSet(); mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet); assertEquals("Incorrect # of persisted tasks.", 1, jobStatusSet.size()); - JobStatus loaded = jobStatusSet.iterator().next(); + JobStatus loaded = jobStatusSet.getAllJobs().iterator().next(); assertEquals("Period not equal.", loaded.getJob().getIntervalMillis(), taskStatus.getJob().getIntervalMillis()); assertEquals("Flex not equal.", loaded.getJob().getFlexMillis(), @@ -205,16 +206,16 @@ public class JobStoreTest extends AndroidTestCase { final long invalidEarlyRuntimeElapsedMillis = invalidLateRuntimeElapsedMillis - TWO_HOURS; // Early is (late - period). final JobStatus js = new JobStatus(b.build(), SOME_UID, "somePackage", - 0 /* sourceUserId */, + 0 /* sourceUserId */, "someTag", invalidEarlyRuntimeElapsedMillis, invalidLateRuntimeElapsedMillis); mTaskStoreUnderTest.add(js); Thread.sleep(IO_WAIT); - final ArraySet<JobStatus> jobStatusSet = new ArraySet<JobStatus>(); + final JobSet jobStatusSet = new JobSet(); mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet); assertEquals("Incorrect # of persisted tasks.", 1, jobStatusSet.size()); - JobStatus loaded = jobStatusSet.iterator().next(); + JobStatus loaded = jobStatusSet.getAllJobs().iterator().next(); // Assert early runtime was clamped to be under now + period. We can do <= here b/c we'll // call SystemClock.elapsedRealtime after doing the disk i/o. @@ -231,12 +232,12 @@ public class JobStoreTest extends AndroidTestCase { .setOverrideDeadline(5000) .setPriority(42) .setPersisted(true); - final JobStatus js = JobStatus.createFromJobInfo(b.build(), SOME_UID, null, -1); + final JobStatus js = JobStatus.createFromJobInfo(b.build(), SOME_UID, null, -1, null); mTaskStoreUnderTest.add(js); Thread.sleep(IO_WAIT); - final ArraySet<JobStatus> jobStatusSet = new ArraySet<JobStatus>(); + final JobSet jobStatusSet = new JobSet(); mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet); - JobStatus loaded = jobStatusSet.iterator().next(); + JobStatus loaded = jobStatusSet.getAllJobs().iterator().next(); assertEquals("Priority not correctly persisted.", 42, loaded.getPriority()); } @@ -247,18 +248,18 @@ public class JobStoreTest extends AndroidTestCase { JobInfo.Builder b = new Builder(42, mComponent) .setOverrideDeadline(10000) .setPersisted(false); - JobStatus jsNonPersisted = JobStatus.createFromJobInfo(b.build(), SOME_UID, null, -1); + JobStatus jsNonPersisted = JobStatus.createFromJobInfo(b.build(), SOME_UID, null, -1, null); mTaskStoreUnderTest.add(jsNonPersisted); b = new Builder(43, mComponent) .setOverrideDeadline(10000) .setPersisted(true); - JobStatus jsPersisted = JobStatus.createFromJobInfo(b.build(), SOME_UID, null, -1); + JobStatus jsPersisted = JobStatus.createFromJobInfo(b.build(), SOME_UID, null, -1, null); mTaskStoreUnderTest.add(jsPersisted); Thread.sleep(IO_WAIT); - final ArraySet<JobStatus> jobStatusSet = new ArraySet<JobStatus>(); + final JobSet jobStatusSet = new JobSet(); mTaskStoreUnderTest.readJobMapFromDisk(jobStatusSet); assertEquals("Job count is incorrect.", 1, jobStatusSet.size()); - JobStatus jobStatus = jobStatusSet.iterator().next(); + JobStatus jobStatus = jobStatusSet.getAllJobs().iterator().next(); assertEquals("Wrong job persisted.", 43, jobStatus.getJobId()); } diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java index 8e891bfcbabc..8b250f4c18d8 100644 --- a/services/usage/java/com/android/server/usage/UsageStatsService.java +++ b/services/usage/java/com/android/server/usage/UsageStatsService.java @@ -151,6 +151,8 @@ public class UsageStatsService extends SystemService implements private ArrayList<UsageStatsManagerInternal.AppIdleStateChangeListener> mPackageAccessListeners = new ArrayList<>(); + private List<String> mCarrierPrivilegedApps; + public UsageStatsService(Context context) { super(context); } @@ -170,10 +172,18 @@ public class UsageStatsService extends SystemService implements + mUsageStatsDir.getAbsolutePath()); } - IntentFilter userActions = new IntentFilter(Intent.ACTION_USER_REMOVED); - userActions.addAction(Intent.ACTION_USER_STARTED); - getContext().registerReceiverAsUser(new UserActionsReceiver(), UserHandle.ALL, userActions, - null, null); + IntentFilter filter = new IntentFilter(Intent.ACTION_USER_REMOVED); + filter.addAction(Intent.ACTION_USER_STARTED); + getContext().registerReceiverAsUser(new UserActionsReceiver(), UserHandle.ALL, filter, + null, mHandler); + + IntentFilter packageFilter = new IntentFilter(); + packageFilter.addAction(Intent.ACTION_PACKAGE_ADDED); + packageFilter.addAction(Intent.ACTION_PACKAGE_CHANGED); + packageFilter.addDataScheme("package"); + + getContext().registerReceiverAsUser(new PackageReceiver(), UserHandle.ALL, packageFilter, + null, mHandler); mAppIdleEnabled = getContext().getResources().getBoolean( com.android.internal.R.bool.config_enableAutoPowerModes); @@ -232,15 +242,15 @@ public class UsageStatsService extends SystemService implements } private class UserActionsReceiver extends BroadcastReceiver { - @Override public void onReceive(Context context, Intent intent) { final int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, -1); - if (Intent.ACTION_USER_REMOVED.equals(intent.getAction())) { + final String action = intent.getAction(); + if (Intent.ACTION_USER_REMOVED.equals(action)) { if (userId >= 0) { mHandler.obtainMessage(MSG_REMOVE_USER, userId, 0).sendToTarget(); } - } else if (Intent.ACTION_USER_STARTED.equals(intent.getAction())) { + } else if (Intent.ACTION_USER_STARTED.equals(action)) { if (userId >=0) { postCheckIdleStates(userId); } @@ -248,6 +258,17 @@ public class UsageStatsService extends SystemService implements } } + private class PackageReceiver extends BroadcastReceiver { + @Override + public void onReceive(Context context, Intent intent) { + final String action = intent.getAction(); + if (Intent.ACTION_PACKAGE_ADDED.equals(action) + || Intent.ACTION_PACKAGE_CHANGED.equals(action)) { + clearCarrierPrivilegedApps(); + } + } + } + private class DeviceStateReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { @@ -890,9 +911,30 @@ public class UsageStatsService extends SystemService implements } private boolean isCarrierApp(String packageName) { - TelephonyManager telephonyManager = getContext().getSystemService(TelephonyManager.class); - return telephonyManager.checkCarrierPrivilegesForPackageAnyPhone(packageName) - == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS; + synchronized (mLock) { + if (mCarrierPrivilegedApps == null) { + fetchCarrierPrivilegedAppsLocked(); + } + } + return mCarrierPrivilegedApps.contains(packageName); + } + + void clearCarrierPrivilegedApps() { + if (DEBUG) { + Slog.i(TAG, "Clearing carrier privileged apps list"); + } + synchronized (mLock) { + mCarrierPrivilegedApps = null; // Need to be refetched. + } + } + + private void fetchCarrierPrivilegedAppsLocked() { + TelephonyManager telephonyManager = + getContext().getSystemService(TelephonyManager.class); + mCarrierPrivilegedApps = telephonyManager.getPackagesWithCarrierPrivileges(); + if (DEBUG) { + Slog.d(TAG, "apps with carrier privilege " + mCarrierPrivilegedApps); + } } private boolean isActiveNetworkScorer(String packageName) { @@ -963,6 +1005,9 @@ public class UsageStatsService extends SystemService implements } pw.println(); + pw.println("Carrier privileged apps: " + mCarrierPrivilegedApps); + + pw.println(); pw.println("Settings:"); pw.print(" mAppIdleDurationMillis="); @@ -1257,6 +1302,17 @@ public class UsageStatsService extends SystemService implements } @Override + public void onCarrierPrivilegedAppsChanged() { + if (DEBUG) { + Slog.i(TAG, "Carrier privileged apps changed"); + } + getContext().enforceCallingOrSelfPermission( + android.Manifest.permission.BIND_CARRIER_SERVICES, + "onCarrierPrivilegedAppsChanged can only be called by privileged apps."); + UsageStatsService.this.clearCarrierPrivilegedApps(); + } + + @Override protected void dump(FileDescriptor fd, PrintWriter pw, String[] args) { if (getContext().checkCallingOrSelfPermission(android.Manifest.permission.DUMP) != PackageManager.PERMISSION_GRANTED) { diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java index b4c4bf8b5ef3..e05f00d646f0 100644 --- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java +++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerHelper.java @@ -199,6 +199,7 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener { } modelData.setHandle(handle[0]); modelData.setLoaded(); + Slog.d(TAG, "Generic sound model loaded with handle:" + handle[0]); } modelData.setCallback(callback); modelData.setRecognitionConfig(recognitionConfig); @@ -227,7 +228,7 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener { synchronized (mLock) { if (DBG) { - Slog.d(TAG, "startRecognition for keyphraseId=" + keyphraseId + Slog.d(TAG, "startKeyphraseRecognition for keyphraseId=" + keyphraseId + " soundModel=" + soundModel + ", listener=" + listener.asBinder() + ", recognitionConfig=" + recognitionConfig); Slog.d(TAG, "moduleProperties=" + mModuleProperties); @@ -243,13 +244,13 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener { } if (mModuleProperties == null) { - Slog.w(TAG, "Attempting startRecognition without the capability"); + Slog.w(TAG, "Attempting startKeyphraseRecognition without the capability"); return STATUS_ERROR; } if (mModule == null) { mModule = SoundTrigger.attachModule(mModuleProperties.id, this, null); if (mModule == null) { - Slog.w(TAG, "startRecognition cannot attach to sound trigger module"); + Slog.w(TAG, "startKeyphraseRecognition cannot attach to sound trigger module"); return STATUS_ERROR; } } @@ -348,26 +349,29 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener { } if (currentCallback == null || !modelData.isModelStarted()) { - // startRecognition hasn't been called or it failed. - Slog.w(TAG, "Attempting stopRecognition without a successful startRecognition"); + // startGenericRecognition hasn't been called or it failed. + Slog.w(TAG, "Attempting stopGenericRecognition without a successful" + + " startGenericRecognition"); return STATUS_ERROR; } if (currentCallback.asBinder() != listener.asBinder()) { // We don't allow a different listener to stop the recognition than the one // that started it. - Slog.w(TAG, "Attempting stopRecognition for another recognition"); + Slog.w(TAG, "Attempting stopGenericRecognition for another recognition"); return STATUS_ERROR; } - int status = stopGenericRecognitionLocked(modelData, false /* don't notify for synchronous calls */); + int status = stopGenericRecognitionLocked(modelData, + false /* don't notify for synchronous calls */); if (status != SoundTrigger.STATUS_OK) { + Slog.w(TAG, "stopGenericRecognition failed: " + status); return status; } // We leave the sound model loaded but not started, this helps us when we start // back. // Also clear the internal state once the recognition has been stopped. - modelData.clearState(); + modelData.setLoaded(); modelData.clearCallback(); if (!computeRecognitionRunning()) { internalClearGlobalStateLocked(); @@ -471,6 +475,66 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener { return mModuleProperties; } + int unloadKeyphraseSoundModel(int keyphraseId) { + if (mModule == null || mCurrentKeyphraseModelHandle == INVALID_VALUE) { + return STATUS_ERROR; + } + if (mKeyphraseId != keyphraseId) { + Slog.w(TAG, "Given sound model is not the one loaded."); + return STATUS_ERROR; + } + + synchronized (mLock) { + // Stop recognition if it's the current one. + mRequested = false; + int status = updateRecognitionLocked(false /* don't notify */); + if (status != SoundTrigger.STATUS_OK) { + Slog.w(TAG, "Stop recognition failed for keyphrase ID:" + status); + } + + status = mModule.unloadSoundModel(mCurrentKeyphraseModelHandle); + if (status != SoundTrigger.STATUS_OK) { + Slog.w(TAG, "unloadKeyphraseSoundModel call failed with " + status); + } + internalClearKeyphraseSoundModelLocked(); + return status; + } + } + + int unloadGenericSoundModel(UUID modelId) { + if (modelId == null || mModule == null) { + return STATUS_ERROR; + } + ModelData modelData = mGenericModelDataMap.get(modelId); + if (modelData == null) { + Slog.w(TAG, "Unload error: Attempting unload invalid generic model with id:" + modelId); + return STATUS_ERROR; + } + synchronized (mLock) { + if (!modelData.isModelLoaded()) { + // Nothing to do here. + Slog.i(TAG, "Unload: Given generic model is not loaded:" + modelId); + return STATUS_OK; + } + if (modelData.isModelStarted()) { + int status = stopGenericRecognitionLocked(modelData, + false /* don't notify for synchronous calls */); + if (status != SoundTrigger.STATUS_OK) { + Slog.w(TAG, "stopGenericRecognition failed: " + status); + } + } + + int status = mModule.unloadSoundModel(modelData.getHandle()); + if (status != SoundTrigger.STATUS_OK) { + Slog.w(TAG, "unloadGenericSoundModel() call failed with " + status); + Slog.w(TAG, "unloadGenericSoundModel() force-marking model as unloaded."); + } + mGenericModelDataMap.remove(modelId); + if (DBG) dumpGenericModelState(); + return status; + } + } + //---- SoundTrigger.StatusListener methods @Override public void onRecognition(RecognitionEvent event) { @@ -509,7 +573,7 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener { } private boolean isKeyphraseRecognitionEvent(RecognitionEvent event) { - return mCurrentKeyphraseModelHandle == event.soundModelHandle; + return event instanceof KeyphraseRecognitionEvent; } private void onGenericRecognitionSuccessLocked(GenericRecognitionEvent event) { @@ -531,9 +595,9 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener { } try { - callback.onDetected((GenericRecognitionEvent) event); + callback.onGenericSoundTriggerDetected((GenericRecognitionEvent) event); } catch (RemoteException e) { - Slog.w(TAG, "RemoteException in onDetected", e); + Slog.w(TAG, "RemoteException in onGenericSoundTriggerDetected", e); } model.setStopped(); @@ -651,10 +715,10 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener { try { if (mKeyphraseListener != null) { - mKeyphraseListener.onDetected((KeyphraseRecognitionEvent) event); + mKeyphraseListener.onKeyphraseDetected((KeyphraseRecognitionEvent) event); } } catch (RemoteException e) { - Slog.w(TAG, "RemoteException in onDetected", e); + Slog.w(TAG, "RemoteException in onKeyphraseDetected", e); } mKeyphraseStarted = false; @@ -703,7 +767,7 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener { int status = mModule.startRecognition(mCurrentKeyphraseModelHandle, mRecognitionConfig); if (status != SoundTrigger.STATUS_OK) { - Slog.w(TAG, "startRecognition failed with " + status); + Slog.w(TAG, "startKeyphraseRecognition failed with " + status); // Notify of error if needed. if (notify) { try { @@ -903,7 +967,7 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener { int status = mModule.startRecognition(handle, config); if (status != SoundTrigger.STATUS_OK) { - Slog.w(TAG, "startRecognition failed with " + status); + Slog.w(TAG, "startGenericRecognition failed with " + status); // Notify of error if needed. if (notify) { try { @@ -913,6 +977,7 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener { } } } else { + Slog.i(TAG, "startRecognition successful."); modelData.setStarted(); // Notify of resume if needed. if (notify) { @@ -923,6 +988,7 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener { } } } + if (DBG) dumpGenericModelState(); return status; } @@ -951,9 +1017,17 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener { } } } + if (DBG) dumpGenericModelState(); return status; } + private void dumpGenericModelState() { + for (UUID modelId : mGenericModelDataMap.keySet()) { + ModelData modelData = mGenericModelDataMap.get(modelId); + Slog.i(TAG, "Model :" + modelData.toString()); + } + } + // Computes whether we have any recognition running at all (voice or generic). Sets // the mRecognitionRunning variable with the result. private boolean computeRecognitionRunning() { @@ -1069,5 +1143,18 @@ public class SoundTriggerHelper implements SoundTrigger.StatusListener { synchronized RecognitionConfig getRecognitionConfig() { return mRecognitionConfig; } + + String stateToString() { + switch(mModelState) { + case MODEL_NOTLOADED: return "NOT_LOADED"; + case MODEL_LOADED: return "LOADED"; + case MODEL_STARTED: return "STARTED"; + } + return "Unknown state"; + } + + public String toString() { + return "Handle: " + mModelHandle + "ModelState: " + stateToString(); + } } } diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerInternal.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerInternal.java index 772287624f6a..113431f2de7e 100644 --- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerInternal.java +++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerInternal.java @@ -75,5 +75,7 @@ public abstract class SoundTriggerInternal { public abstract ModuleProperties getModuleProperties(); + public abstract int unloadKeyphraseModel(int keyphaseId); + public abstract void dump(FileDescriptor fd, PrintWriter pw, String[] args); } diff --git a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java index 251f3146f8cc..a4c1210ba188 100644 --- a/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java +++ b/services/voiceinteraction/java/com/android/server/soundtrigger/SoundTriggerService.java @@ -122,10 +122,10 @@ public class SoundTriggerService extends SystemService { public int startRecognition(ParcelUuid parcelUuid, IRecognitionStatusCallback callback, RecognitionConfig config) { enforceCallingPermission(Manifest.permission.MANAGE_SOUND_TRIGGER); + if (!isInitialized()) return STATUS_ERROR; if (DEBUG) { Slog.i(TAG, "startRecognition(): Uuid : " + parcelUuid); } - if (!isInitialized()) return STATUS_ERROR; GenericSoundModel model = getSoundModel(parcelUuid); if (model == null) { @@ -173,6 +173,8 @@ public class SoundTriggerService extends SystemService { if (DEBUG) { Slog.i(TAG, "deleteSoundModel(): id = " + soundModelId); } + // Unload the model if it is loaded. + mSoundTriggerHelper.unloadGenericSoundModel(soundModelId.getUuid()); mDbHelper.deleteGenericSoundModel(soundModelId.getUuid()); } } @@ -216,6 +218,12 @@ public class SoundTriggerService extends SystemService { } @Override + public int unloadKeyphraseModel(int keyphraseId) { + if (!isInitialized()) return STATUS_ERROR; + return mSoundTriggerHelper.unloadKeyphraseSoundModel(keyphraseId); + } + + @Override public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { if (!isInitialized()) return; mSoundTriggerHelper.dump(fd, pw, args); diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java index 4a54643b3cf5..6ab0b998bd6c 100644 --- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java +++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java @@ -760,6 +760,10 @@ public class VoiceInteractionManagerService extends SystemService { final long caller = Binder.clearCallingIdentity(); boolean deleted = false; try { + int unloadStatus = mSoundTriggerInternal.unloadKeyphraseModel(keyphraseId); + if (unloadStatus != SoundTriggerInternal.STATUS_OK) { + Slog.w(TAG, "Unable to unload keyphrase sound model:" + unloadStatus); + } deleted = mDbHelper.deleteKeyphraseSoundModel(keyphraseId, callingUid, bcp47Locale); return deleted ? SoundTriggerInternal.STATUS_OK : SoundTriggerInternal.STATUS_ERROR; } finally { diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java index fa7a59d76f09..4547c6a6c153 100644 --- a/telecomm/java/android/telecom/Connection.java +++ b/telecomm/java/android/telecom/Connection.java @@ -297,6 +297,24 @@ public abstract class Connection extends Conferenceable { */ public static final String EXTRA_CALL_SUBJECT = "android.telecom.extra.CALL_SUBJECT"; + /** + * Connection event used to inform Telecom that it should play the on hold tone. This is used + * to play a tone when the peer puts the current call on hold. Sent to Telecom via + * {@link #sendConnectionEvent(String)}. + * @hide + */ + public static final String EVENT_ON_HOLD_TONE_START = + "android.telecom.event.ON_HOLD_TONE_START"; + + /** + * Connection event used to inform Telecom that it should stop the on hold tone. This is used + * to stop a tone when the peer puts the current call on hold. Sent to Telecom via + * {@link #sendConnectionEvent(String)}. + * @hide + */ + public static final String EVENT_ON_HOLD_TONE_END = + "android.telecom.event.ON_HOLD_TONE_END"; + // Flag controlling whether PII is emitted into the logs private static final boolean PII_DEBUG = Log.isLoggable(android.util.Log.DEBUG); @@ -447,6 +465,8 @@ public abstract class Connection extends Conferenceable { public void onConferenceStarted() {} public void onConferenceMergeFailed(Connection c) {} public void onExtrasChanged(Connection c, Bundle extras) {} + /** @hide */ + public void onConnectionEvent(Connection c, String event) {} } /** @@ -1986,4 +2006,16 @@ public abstract class Connection extends Conferenceable { l.onConferenceStarted(); } } + + /** + * Sends a connection event to Telecom. + * + * @param event The connection event. + * @hide + */ + protected void sendConnectionEvent(String event) { + for (Listener l : mListeners) { + l.onConnectionEvent(this, event); + } + } } diff --git a/telecomm/java/android/telecom/ConnectionService.java b/telecomm/java/android/telecom/ConnectionService.java index b4a7ce0f56b1..56d94917fc03 100644 --- a/telecomm/java/android/telecom/ConnectionService.java +++ b/telecomm/java/android/telecom/ConnectionService.java @@ -613,6 +613,14 @@ public abstract class ConnectionService extends Service { mAdapter.setExtras(id, extras); } } + + @Override + public void onConnectionEvent(Connection connection, String event) { + String id = mIdByConnection.get(connection); + if (id != null) { + mAdapter.onConnectionEvent(id, event); + } + } }; /** {@inheritDoc} */ diff --git a/telecomm/java/android/telecom/ConnectionServiceAdapter.java b/telecomm/java/android/telecom/ConnectionServiceAdapter.java index 456251476862..30fc5ad1e4b6 100644 --- a/telecomm/java/android/telecom/ConnectionServiceAdapter.java +++ b/telecomm/java/android/telecom/ConnectionServiceAdapter.java @@ -412,4 +412,20 @@ final class ConnectionServiceAdapter implements DeathRecipient { } } } + + /** + * Informs Telecom of a connection level event. + * + * @param callId The unique ID of the call. + * @param event The event. + */ + void onConnectionEvent(String callId, String event) { + Log.v(this, "onConnectionEvent: %s", event); + for (IConnectionServiceAdapter adapter : mAdapters) { + try { + adapter.onConnectionEvent(callId, event); + } catch (RemoteException ignored) { + } + } + } } diff --git a/telecomm/java/android/telecom/ConnectionServiceAdapterServant.java b/telecomm/java/android/telecom/ConnectionServiceAdapterServant.java index 293dc1199923..6a8c1cb281ba 100644 --- a/telecomm/java/android/telecom/ConnectionServiceAdapterServant.java +++ b/telecomm/java/android/telecom/ConnectionServiceAdapterServant.java @@ -62,6 +62,7 @@ final class ConnectionServiceAdapterServant { private static final int MSG_ON_POST_DIAL_CHAR = 22; private static final int MSG_SET_CONFERENCE_MERGE_FAILED = 23; private static final int MSG_SET_EXTRAS = 24; + private static final int MSG_ON_CONNECTION_EVENT = 25; private final IConnectionServiceAdapter mDelegate; @@ -239,6 +240,16 @@ final class ConnectionServiceAdapterServant { } finally { args.recycle(); } + break; + } + case MSG_ON_CONNECTION_EVENT: { + SomeArgs args = (SomeArgs) msg.obj; + try { + mDelegate.onConnectionEvent((String) args.arg1, (String) args.arg2); + } finally { + args.recycle(); + } + break; } } } @@ -419,6 +430,14 @@ final class ConnectionServiceAdapterServant { args.arg2 = extras; mHandler.obtainMessage(MSG_SET_EXTRAS, args).sendToTarget(); } + + @Override + public final void onConnectionEvent(String connectionId, String event) { + SomeArgs args = SomeArgs.obtain(); + args.arg1 = connectionId; + args.arg2 = event; + mHandler.obtainMessage(MSG_ON_CONNECTION_EVENT, args).sendToTarget(); + } }; public ConnectionServiceAdapterServant(IConnectionServiceAdapter delegate) { diff --git a/telecomm/java/android/telecom/RemoteConnection.java b/telecomm/java/android/telecom/RemoteConnection.java index f9609590a697..01858080d7d7 100644 --- a/telecomm/java/android/telecom/RemoteConnection.java +++ b/telecomm/java/android/telecom/RemoteConnection.java @@ -209,6 +209,15 @@ public final class RemoteConnection { * @param extras The extras containing other information associated with the connection. */ public void onExtrasChanged(RemoteConnection connection, @Nullable Bundle extras) {} + + /** + * Handles a connection event propagated to this {@link RemoteConnection}. + * + * @param connection The {@code RemoteConnection} invoking this method. + * @param event The connection event. + * @hide + */ + public void onConnectionEvent(RemoteConnection connection, String event) {} } /** @@ -1291,6 +1300,20 @@ public final class RemoteConnection { } } + /** @hide */ + void onConnectionEvent(final String event) { + for (CallbackRecord record : mCallbackRecords) { + final RemoteConnection connection = this; + final Callback callback = record.getCallback(); + record.getHandler().post(new Runnable() { + @Override + public void run() { + callback.onConnectionEvent(connection, event); + } + }); + } + } + /** * Create a RemoteConnection represents a failure, and which will be in * {@link Connection#STATE_DISCONNECTED}. Attempting to use it for anything will almost diff --git a/telecomm/java/android/telecom/RemoteConnectionService.java b/telecomm/java/android/telecom/RemoteConnectionService.java index dc0de0c462cf..b85382feae60 100644 --- a/telecomm/java/android/telecom/RemoteConnectionService.java +++ b/telecomm/java/android/telecom/RemoteConnectionService.java @@ -330,6 +330,13 @@ final class RemoteConnectionService { .setExtras(extras); } } + + @Override + public void onConnectionEvent(String callId, String event) { + if (mConnectionById.containsKey(callId)) { + findConnectionForAction(callId, "onConnectionEvent").onConnectionEvent(event); + } + } }; private final ConnectionServiceAdapterServant mServant = diff --git a/telecomm/java/com/android/internal/telecom/IConnectionServiceAdapter.aidl b/telecomm/java/com/android/internal/telecom/IConnectionServiceAdapter.aidl index 76474447d191..569c24469368 100644 --- a/telecomm/java/com/android/internal/telecom/IConnectionServiceAdapter.aidl +++ b/telecomm/java/com/android/internal/telecom/IConnectionServiceAdapter.aidl @@ -86,4 +86,6 @@ oneway interface IConnectionServiceAdapter { void addExistingConnection(String callId, in ParcelableConnection connection); void setExtras(String callId, in Bundle extras); + + void onConnectionEvent(String callId, String event); } diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index fcb42a48048f..e90be91e3248 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -47,6 +47,7 @@ import com.android.internal.telephony.TelephonyProperties; import java.io.FileInputStream; import java.io.IOException; +import java.util.Collections; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -2931,10 +2932,27 @@ public class TelephonyManager { * @return an IccOpenLogicalChannelResponse object. */ public IccOpenLogicalChannelResponse iccOpenLogicalChannel(String AID) { + return iccOpenLogicalChannel(getDefaultSubscription(), AID); + } + + /** + * Opens a logical channel to the ICC card. + * + * Input parameters equivalent to TS 27.007 AT+CCHO command. + * + * <p>Requires Permission: + * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} + * Or the calling app has carrier privileges. @see #hasCarrierPrivileges + * + * @param subId The subscription to use. + * @param AID Application id. See ETSI 102.221 and 101.220. + * @return an IccOpenLogicalChannelResponse object. + */ + public IccOpenLogicalChannelResponse iccOpenLogicalChannel(int subId, String AID) { try { ITelephony telephony = getITelephony(); if (telephony != null) - return telephony.iccOpenLogicalChannel(AID); + return telephony.iccOpenLogicalChannel(subId, AID); } catch (RemoteException ex) { } catch (NullPointerException ex) { } @@ -2955,10 +2973,28 @@ public class TelephonyManager { * @return true if the channel was closed successfully. */ public boolean iccCloseLogicalChannel(int channel) { + return iccCloseLogicalChannel(getDefaultSubscription(), channel); + } + + /** + * Closes a previously opened logical channel to the ICC card. + * + * Input parameters equivalent to TS 27.007 AT+CCHC command. + * + * <p>Requires Permission: + * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} + * Or the calling app has carrier privileges. @see #hasCarrierPrivileges + * + * @param subId The subscription to use. + * @param channel is the channel id to be closed as retruned by a successful + * iccOpenLogicalChannel. + * @return true if the channel was closed successfully. + */ + public boolean iccCloseLogicalChannel(int subId, int channel) { try { ITelephony telephony = getITelephony(); if (telephony != null) - return telephony.iccCloseLogicalChannel(channel); + return telephony.iccCloseLogicalChannel(subId, channel); } catch (RemoteException ex) { } catch (NullPointerException ex) { } @@ -2988,10 +3024,38 @@ public class TelephonyManager { */ public String iccTransmitApduLogicalChannel(int channel, int cla, int instruction, int p1, int p2, int p3, String data) { + return iccTransmitApduLogicalChannel(getDefaultSubscription(), channel, cla, + instruction, p1, p2, p3, data); + } + + /** + * Transmit an APDU to the ICC card over a logical channel. + * + * Input parameters equivalent to TS 27.007 AT+CGLA command. + * + * <p>Requires Permission: + * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} + * Or the calling app has carrier privileges. @see #hasCarrierPrivileges + * + * @param subId The subscription to use. + * @param channel is the channel id to be closed as returned by a successful + * iccOpenLogicalChannel. + * @param cla Class of the APDU command. + * @param instruction Instruction of the APDU command. + * @param p1 P1 value of the APDU command. + * @param p2 P2 value of the APDU command. + * @param p3 P3 value of the APDU command. If p3 is negative a 4 byte APDU + * is sent to the SIM. + * @param data Data to be sent with the APDU. + * @return The APDU response from the ICC card with the status appended at + * the end. + */ + public String iccTransmitApduLogicalChannel(int subId, int channel, int cla, + int instruction, int p1, int p2, int p3, String data) { try { ITelephony telephony = getITelephony(); if (telephony != null) - return telephony.iccTransmitApduLogicalChannel(channel, cla, + return telephony.iccTransmitApduLogicalChannel(subId, channel, cla, instruction, p1, p2, p3, data); } catch (RemoteException ex) { } catch (NullPointerException ex) { @@ -3020,10 +3084,36 @@ public class TelephonyManager { */ public String iccTransmitApduBasicChannel(int cla, int instruction, int p1, int p2, int p3, String data) { + return iccTransmitApduBasicChannel(getDefaultSubscription(), cla, + instruction, p1, p2, p3, data); + } + + /** + * Transmit an APDU to the ICC card over the basic channel. + * + * Input parameters equivalent to TS 27.007 AT+CSIM command. + * + * <p>Requires Permission: + * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} + * Or the calling app has carrier privileges. @see #hasCarrierPrivileges + * + * @param subId The subscription to use. + * @param cla Class of the APDU command. + * @param instruction Instruction of the APDU command. + * @param p1 P1 value of the APDU command. + * @param p2 P2 value of the APDU command. + * @param p3 P3 value of the APDU command. If p3 is negative a 4 byte APDU + * is sent to the SIM. + * @param data Data to be sent with the APDU. + * @return The APDU response from the ICC card with the status appended at + * the end. + */ + public String iccTransmitApduBasicChannel(int subId, int cla, + int instruction, int p1, int p2, int p3, String data) { try { ITelephony telephony = getITelephony(); if (telephony != null) - return telephony.iccTransmitApduBasicChannel(cla, + return telephony.iccTransmitApduBasicChannel(subId, cla, instruction, p1, p2, p3, data); } catch (RemoteException ex) { } catch (NullPointerException ex) { @@ -3048,10 +3138,31 @@ public class TelephonyManager { */ public byte[] iccExchangeSimIO(int fileID, int command, int p1, int p2, int p3, String filePath) { + return iccExchangeSimIO(getDefaultSubscription(), fileID, command, p1, p2, p3, filePath); + } + + /** + * Returns the response APDU for a command APDU sent through SIM_IO. + * + * <p>Requires Permission: + * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} + * Or the calling app has carrier privileges. @see #hasCarrierPrivileges + * + * @param subId The subscription to use. + * @param fileID + * @param command + * @param p1 P1 value of the APDU command. + * @param p2 P2 value of the APDU command. + * @param p3 P3 value of the APDU command. + * @param filePath + * @return The APDU response. + */ + public byte[] iccExchangeSimIO(int subId, int fileID, int command, int p1, int p2, + int p3, String filePath) { try { ITelephony telephony = getITelephony(); if (telephony != null) - return telephony.iccExchangeSimIO(fileID, command, p1, p2, p3, filePath); + return telephony.iccExchangeSimIO(subId, fileID, command, p1, p2, p3, filePath); } catch (RemoteException ex) { } catch (NullPointerException ex) { } @@ -3073,10 +3184,29 @@ public class TelephonyManager { * returns an empty string. */ public String sendEnvelopeWithStatus(String content) { + return sendEnvelopeWithStatus(getDefaultSubscription(), content); + } + + /** + * Send ENVELOPE to the SIM and return the response. + * + * <p>Requires Permission: + * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} + * Or the calling app has carrier privileges. @see #hasCarrierPrivileges + * + * @param subId The subscription to use. + * @param content String containing SAT/USAT response in hexadecimal + * format starting with command tag. See TS 102 223 for + * details. + * @return The APDU response from the ICC card in hexadecimal format + * with the last 4 bytes being the status word. If the command fails, + * returns an empty string. + */ + public String sendEnvelopeWithStatus(int subId, String content) { try { ITelephony telephony = getITelephony(); if (telephony != null) - return telephony.sendEnvelopeWithStatus(content); + return telephony.sendEnvelopeWithStatus(subId, content); } catch (RemoteException ex) { } catch (NullPointerException ex) { } @@ -3637,8 +3767,20 @@ public class TelephonyManager { * @return true on success; false on any failure. */ public boolean setPreferredNetworkTypeToGlobal() { - return setPreferredNetworkType(getDefaultSubscription(), - RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA); + return setPreferredNetworkTypeToGlobal(getDefaultSubscription()); + } + + /** + * Set the preferred network type to global mode which includes LTE, CDMA, EvDo and GSM/WCDMA. + * + * <p> + * Requires that the calling app has carrier privileges. + * @see #hasCarrierPrivileges + * + * @return true on success; false on any failure. + */ + public boolean setPreferredNetworkTypeToGlobal(int subId) { + return setPreferredNetworkType(subId, RILConstants.NETWORK_MODE_LTE_CDMA_EVDO_GSM_WCDMA); } /** @@ -3685,10 +3827,26 @@ public class TelephonyManager { * @return true if the app has carrier privileges. */ public boolean hasCarrierPrivileges() { + return hasCarrierPrivileges(getDefaultSubscription()); + } + + /** + * Has the calling application been granted carrier privileges by the carrier. + * + * If any of the packages in the calling UID has carrier privileges, the + * call will return true. This access is granted by the owner of the UICC + * card and does not depend on the registered carrier. + * + * @param subId The subscription to use. + * @return true if the app has carrier privileges. + */ + public boolean hasCarrierPrivileges(int subId) { try { ITelephony telephony = getITelephony(); - if (telephony != null) - return telephony.getCarrierPrivilegeStatus() == CARRIER_PRIVILEGE_STATUS_HAS_ACCESS; + if (telephony != null) { + return telephony.getCarrierPrivilegeStatus(subId) == + CARRIER_PRIVILEGE_STATUS_HAS_ACCESS; + } } catch (RemoteException ex) { Rlog.e(TAG, "hasCarrierPrivileges RemoteException", ex); } catch (NullPointerException ex) { @@ -3712,10 +3870,29 @@ public class TelephonyManager { * @return true if the operation was executed correctly. */ public boolean setOperatorBrandOverride(String brand) { + return setOperatorBrandOverride(getDefaultSubscription(), brand); + } + + /** + * Override the branding for the current ICCID. + * + * Once set, whenever the SIM is present in the device, the service + * provider name (SPN) and the operator name will both be replaced by the + * brand value input. To unset the value, the same function should be + * called with a null brand value. + * + * <p>Requires that the calling app has carrier privileges. + * @see #hasCarrierPrivileges + * + * @param subId The subscription to use. + * @param brand The brand name to display/set. + * @return true if the operation was executed correctly. + */ + public boolean setOperatorBrandOverride(int subId, String brand) { try { ITelephony telephony = getITelephony(); if (telephony != null) - return telephony.setOperatorBrandOverride(brand); + return telephony.setOperatorBrandOverride(subId, brand); } catch (RemoteException ex) { Rlog.e(TAG, "setOperatorBrandOverride RemoteException", ex); } catch (NullPointerException ex) { @@ -3746,10 +3923,37 @@ public class TelephonyManager { public boolean setRoamingOverride(List<String> gsmRoamingList, List<String> gsmNonRoamingList, List<String> cdmaRoamingList, List<String> cdmaNonRoamingList) { + return setRoamingOverride(getDefaultSubscription(), gsmRoamingList, gsmNonRoamingList, + cdmaRoamingList, cdmaNonRoamingList); + } + + /** + * Override the roaming preference for the current ICCID. + * + * Using this call, the carrier app (see #hasCarrierPrivileges) can override + * the platform's notion of a network operator being considered roaming or not. + * The change only affects the ICCID that was active when this call was made. + * + * If null is passed as any of the input, the corresponding value is deleted. + * + * <p>Requires that the caller have carrier privilege. See #hasCarrierPrivileges. + * + * @param subId for which the roaming overrides apply. + * @param gsmRoamingList - List of MCCMNCs to be considered roaming for 3GPP RATs. + * @param gsmNonRoamingList - List of MCCMNCs to be considered not roaming for 3GPP RATs. + * @param cdmaRoamingList - List of SIDs to be considered roaming for 3GPP2 RATs. + * @param cdmaNonRoamingList - List of SIDs to be considered not roaming for 3GPP2 RATs. + * @return true if the operation was executed correctly. + * + * @hide + */ + public boolean setRoamingOverride(int subId, List<String> gsmRoamingList, + List<String> gsmNonRoamingList, List<String> cdmaRoamingList, + List<String> cdmaNonRoamingList) { try { ITelephony telephony = getITelephony(); if (telephony != null) - return telephony.setRoamingOverride(gsmRoamingList, gsmNonRoamingList, + return telephony.setRoamingOverride(subId, gsmRoamingList, gsmNonRoamingList, cdmaRoamingList, cdmaNonRoamingList); } catch (RemoteException ex) { Rlog.e(TAG, "setRoamingOverride RemoteException", ex); @@ -3857,6 +4061,21 @@ public class TelephonyManager { } /** @hide */ + public List<String> getPackagesWithCarrierPrivileges() { + try { + ITelephony telephony = getITelephony(); + if (telephony != null) { + return telephony.getPackagesWithCarrierPrivileges(); + } + } catch (RemoteException ex) { + Rlog.e(TAG, "getPackagesWithCarrierPrivileges RemoteException", ex); + } catch (NullPointerException ex) { + Rlog.e(TAG, "getPackagesWithCarrierPrivileges NPE", ex); + } + return Collections.EMPTY_LIST; + } + + /** @hide */ @SystemApi public void dial(String number) { try { diff --git a/telephony/java/com/android/ims/ImsReasonInfo.java b/telephony/java/com/android/ims/ImsReasonInfo.java index c909c6dc518e..4aa5b98ff364 100644 --- a/telephony/java/com/android/ims/ImsReasonInfo.java +++ b/telephony/java/com/android/ims/ImsReasonInfo.java @@ -249,12 +249,33 @@ public class ImsReasonInfo implements Parcelable { public static final int CODE_SUPP_SVC_REINVITE_COLLISION = 1203; /** + * DPD Procedure received no response or send failed + */ + public static final int CODE_IWLAN_DPD_FAILURE = 1300; + + /** + * Establishment of the ePDG Tunnel Failed + */ + public static final int CODE_EPDG_TUNNEL_ESTABLISH_FAILURE = 1400; + + /** + * Re-keying of the ePDG Tunnel Failed; may not always result in teardown + */ + public static final int CODE_EPDG_TUNNEL_REKEY_FAILURE = 1401; + + /** + * Connection to the packet gateway is lost + */ + public static final int CODE_EPDG_TUNNEL_LOST_CONNECTION = 1402; + + /** * Network string error messages. * mExtraMessage may have these values. */ public static final String EXTRA_MSG_SERVICE_NOT_AUTHORIZED = "Forbidden. Not Authorized for Service"; + // For main reason code public int mCode; // For the extra code value; it depends on the code value. diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 62f294c3a197..2727319ad0a6 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -538,27 +538,30 @@ interface ITelephony { * * Input parameters equivalent to TS 27.007 AT+CCHO command. * + * @param subId The subscription to use. * @param AID Application id. See ETSI 102.221 and 101.220. * @return an IccOpenLogicalChannelResponse object. */ - IccOpenLogicalChannelResponse iccOpenLogicalChannel(String AID); + IccOpenLogicalChannelResponse iccOpenLogicalChannel(int subId, String AID); /** * Closes a previously opened logical channel to the ICC card. * * Input parameters equivalent to TS 27.007 AT+CCHC command. * + * @param subId The subscription to use. * @param channel is the channel id to be closed as retruned by a * successful iccOpenLogicalChannel. * @return true if the channel was closed successfully. */ - boolean iccCloseLogicalChannel(int channel); + boolean iccCloseLogicalChannel(int subId, int channel); /** * Transmit an APDU to the ICC card over a logical channel. * * Input parameters equivalent to TS 27.007 AT+CGLA command. * + * @param subId The subscription to use. * @param channel is the channel id to be closed as retruned by a * successful iccOpenLogicalChannel. * @param cla Class of the APDU command. @@ -571,7 +574,7 @@ interface ITelephony { * @return The APDU response from the ICC card with the status appended at * the end. */ - String iccTransmitApduLogicalChannel(int channel, int cla, int instruction, + String iccTransmitApduLogicalChannel(int subId, int channel, int cla, int instruction, int p1, int p2, int p3, String data); /** @@ -579,6 +582,7 @@ interface ITelephony { * * Input parameters equivalent to TS 27.007 AT+CSIM command. * + * @param subId The subscription to use. * @param cla Class of the APDU command. * @param instruction Instruction of the APDU command. * @param p1 P1 value of the APDU command. @@ -589,12 +593,13 @@ interface ITelephony { * @return The APDU response from the ICC card with the status appended at * the end. */ - String iccTransmitApduBasicChannel(int cla, int instruction, + String iccTransmitApduBasicChannel(int subId, int cla, int instruction, int p1, int p2, int p3, String data); /** * Returns the response APDU for a command APDU sent through SIM_IO. * + * @param subId The subscription to use. * @param fileID * @param command * @param p1 P1 value of the APDU command. @@ -603,12 +608,13 @@ interface ITelephony { * @param filePath * @return The APDU response. */ - byte[] iccExchangeSimIO(int fileID, int command, int p1, int p2, int p3, + byte[] iccExchangeSimIO(int subId, int fileID, int command, int p1, int p2, int p3, String filePath); /** * Send ENVELOPE to the SIM and returns the response. * + * @param subId The subscription to use. * @param contents String containing SAT/USAT response in hexadecimal * format starting with command tag. See TS 102 223 for * details. @@ -616,7 +622,7 @@ interface ITelephony { * being the status word. If the command fails, returns an empty * string. */ - String sendEnvelopeWithStatus(String content); + String sendEnvelopeWithStatus(int subId, String content); /** * Read one of the NV items defined in {@link RadioNVItems} / {@code ril_nv_items.h}. @@ -768,9 +774,10 @@ interface ITelephony { * * TODO: Add a link to documentation. * + * @param subId The subscription to use. * @return carrier privilege status defined in TelephonyManager. */ - int getCarrierPrivilegeStatus(); + int getCarrierPrivilegeStatus(int subId); /** * Similar to above, but check for the package whose name is pkgName. @@ -842,10 +849,11 @@ interface ITelephony { * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} * or has to be carrier app - see #hasCarrierPrivileges. * + * @param subId The subscription to use. * @param brand The brand name to display/set. * @return true if the operation was executed correctly. */ - boolean setOperatorBrandOverride(String brand); + boolean setOperatorBrandOverride(int subId, String brand); /** * Override the roaming indicator for the current ICCID. @@ -858,13 +866,14 @@ interface ITelephony { * * <p>Requires that the caller have carrier privilege. See #hasCarrierPrivileges. * + * @param subId for which the roaming overrides apply. * @param gsmRoamingList - List of MCCMNCs to be considered roaming for 3GPP RATs. * @param gsmNonRoamingList - List of MCCMNCs to be considered not roaming for 3GPP RATs. * @param cdmaRoamingList - List of SIDs to be considered roaming for 3GPP2 RATs. * @param cdmaNonRoamingList - List of SIDs to be considered not roaming for 3GPP2 RATs. * @return true if the operation was executed correctly. */ - boolean setRoamingOverride(in List<String> gsmRoamingList, + boolean setRoamingOverride(int subId, in List<String> gsmRoamingList, in List<String> gsmNonRoamingList, in List<String> cdmaRoamingList, in List<String> cdmaNonRoamingList); @@ -1028,4 +1037,9 @@ interface ITelephony { * @return {@code true} if the vibration is set for this PhoneAccount, {@code false} otherwise. */ boolean isVoicemailVibrationEnabled(in PhoneAccountHandle accountHandle); + + /** + * Returns a list of packages that have carrier privileges. + */ + List<String> getPackagesWithCarrierPrivileges(); } diff --git a/tests/NetworkSecurityConfigTest/src/android/security/net/config/NetworkSecurityConfigTests.java b/tests/NetworkSecurityConfigTest/src/android/security/net/config/NetworkSecurityConfigTests.java index 9f48d56cb56b..eda3f5e21f71 100644 --- a/tests/NetworkSecurityConfigTest/src/android/security/net/config/NetworkSecurityConfigTests.java +++ b/tests/NetworkSecurityConfigTest/src/android/security/net/config/NetworkSecurityConfigTests.java @@ -17,19 +17,28 @@ package android.security.net.config; import android.app.Activity; +import android.os.Build; import android.test.ActivityUnitTestCase; import android.util.ArraySet; import android.util.Pair; +import java.io.ByteArrayInputStream; import java.io.IOException; import java.net.Socket; import java.net.URL; +import java.security.cert.Certificate; +import java.security.cert.CertificateFactory; +import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.Collections; +import java.util.HashSet; +import java.util.Set; import javax.net.ssl.HttpsURLConnection; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLHandshakeException; import javax.net.ssl.TrustManager; +import com.android.org.conscrypt.TrustedCertificateStore; + public class NetworkSecurityConfigTests extends ActivityUnitTestCase<Activity> { public NetworkSecurityConfigTests() { @@ -40,6 +49,51 @@ public class NetworkSecurityConfigTests extends ActivityUnitTestCase<Activity> { private static final byte[] G2_SPKI_SHA256 = hexToBytes("ec722969cb64200ab6638f68ac538e40abab5b19a6485661042a1061c4612776"); + private static final byte[] TEST_CA_BYTES + = hexToBytes( + "3082036130820249a003020102020900bd54597d6750ea62300d06092a86" + + "4886f70d01010b05003047310b3009060355040613025553310b30090603" + + "5504080c0243413110300e060355040a0c07416e64726f69643119301706" + + "035504030c104e53436f6e6669672054657374204341301e170d31363032" + + "32343030313130325a170d3136303332353030313130325a3047310b3009" + + "060355040613025553310b300906035504080c0243413110300e06035504" + + "0a0c07416e64726f69643119301706035504030c104e53436f6e66696720" + + "5465737420434130820122300d06092a864886f70d01010105000382010f" + + "003082010a0282010100e15ce8fd5794029841e760d68d6e0159c9c67630" + + "089775bc728d83dae7e29e23fe5f6e113b789f4c5b22f052300ec6d5faa5" + + "724432e7bac96682792ef6e9617c939c4329dce8788cbdf3a11b621fac9e" + + "2edbec2d7e5e07296bbb544b89263137a6a31573a2362e05ca8ff9c886bf" + + "52df4ff93c45475145a40a83f2670e23669220a5a4bf2c6860edb78d3022" + + "192fb5dc5e8c118f70870f89da292dfe522751462f020ed556653c8b07f8" + + "89712a6e8196c457a637439e3073d7d917ab55aa51a146826367f7b5922a" + + "64fb2f95099de21eb98341fa76faa79ffbda123fe5b8adc614b16174e8b0" + + "dfdac2bbc4d526d2487ad2b009d53996ec23ffbd732112efa66b02030100" + + "01a350304e301d0603551d0e04160414f66e1a95486c879edd60a5756bc2" + + "f1f4677e128e301f0603551d23041830168014f66e1a95486c879edd60a5" + + "756bc2f1f4677e128e300c0603551d13040530030101ff300d06092a8648" + + "86f70d01010b05000382010100d2856130dccae24e5f8901900d94bc642f" + + "85466ab7cfa1066399077a168cd4b56603a9e2af9d2e58aec13101e338a4" + + "8e95e9c7a84d7991f0d381d4965eaada1b80fbbd8277445f449babe64f53" + + "ba625387460b592a1a97b14b8251115e6610350021a6e716ae22b905f8d4" + + "eae24e668e71b12ab51fd2f2bb600e074487dec720c3db14dbca504844b6" + + "933bb0248283ea95464747689c37d706d4839c7d0e9bd86abf98ddce5d36" + + "8b38bfe5062353e28d5be378827fade1caa6bba3df9cd9ebf83d839eae52" + + "780181f31973f15f982686ba6d899f7b644fd1f26c8ebb99f4c986faaf4c" + + "1b9e3d9d391943ce3fb9fa2e631bd66b8ef3d47fd85acf09ea3a30f15f"); + + private static final X509Certificate TEST_CA_CERT; + + static { + try { + CertificateFactory factory = CertificateFactory.getInstance("X.509"); + Certificate cert = factory.generateCertificate(new ByteArrayInputStream(TEST_CA_BYTES)); + TEST_CA_CERT = (X509Certificate) cert; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private static byte[] hexToBytes(String s) { int len = s.length(); byte[] data = new byte[len / 2]; @@ -51,7 +105,6 @@ public class NetworkSecurityConfigTests extends ActivityUnitTestCase<Activity> { } - /** * Return a NetworkSecurityConfig that has an empty TrustAnchor set. This should always cause a * SSLHandshakeException when used for a connection. @@ -174,7 +227,7 @@ public class NetworkSecurityConfigTests extends ActivityUnitTestCase<Activity> { public void testConfigBuilderUsesParents() throws Exception { // Check that a builder with a parent uses the parent's values when non is set. NetworkSecurityConfig config = new NetworkSecurityConfig.Builder() - .setParent(NetworkSecurityConfig.getDefaultBuilder()) + .setParent(NetworkSecurityConfig.getDefaultBuilder(Build.VERSION_CODES.N)) .build(); assert(!config.getTrustAnchors().isEmpty()); } @@ -208,4 +261,38 @@ public class NetworkSecurityConfigTests extends ActivityUnitTestCase<Activity> { TestUtils.assertUrlConnectionSucceeds(context, "developer.android.com", 443); TestUtils.assertUrlConnectionFails(context, "google.com", 443); } + + public void testUserAddedCaOptIn() throws Exception { + TrustedCertificateStore store = new TrustedCertificateStore(); + try { + // Install the test CA. + store.installCertificate(TEST_CA_CERT); + NetworkSecurityConfig preNConfig = + NetworkSecurityConfig.getDefaultBuilder(Build.VERSION_CODES.M).build(); + NetworkSecurityConfig nConfig = + NetworkSecurityConfig.getDefaultBuilder(Build.VERSION_CODES.N).build(); + Set<TrustAnchor> preNAnchors = preNConfig.getTrustAnchors(); + Set<TrustAnchor> nAnchors = nConfig.getTrustAnchors(); + Set<X509Certificate> preNCerts = new HashSet<X509Certificate>(); + for (TrustAnchor anchor : preNAnchors) { + preNCerts.add(anchor.certificate); + } + Set<X509Certificate> nCerts = new HashSet<X509Certificate>(); + for (TrustAnchor anchor : nAnchors) { + nCerts.add(anchor.certificate); + } + assertTrue(preNCerts.contains(TEST_CA_CERT)); + assertFalse(nCerts.contains(TEST_CA_CERT)); + } finally { + // Delete the user added CA. We don't know the alias so just delete them all. + for (String alias : store.aliases()) { + if (store.isUser(alias)) { + try { + store.deleteCertificateEntry(alias); + } catch (Exception ignored) { + } + } + } + } + } } diff --git a/tests/SoundTriggerTestApp/AndroidManifest.xml b/tests/SoundTriggerTestApp/AndroidManifest.xml index a72b3ddb7c0c..dc4cdb59b8db 100644 --- a/tests/SoundTriggerTestApp/AndroidManifest.xml +++ b/tests/SoundTriggerTestApp/AndroidManifest.xml @@ -2,10 +2,12 @@ package="com.android.test.soundtrigger"> <uses-permission android:name="android.permission.MANAGE_SOUND_TRIGGER" /> + <uses-permission android:name="android.permission.WAKE_LOCk" /> <application> <activity android:name="TestSoundTriggerActivity" android:label="SoundTrigger Test Application" + android:screenOrientation="portrait" android:theme="@android:style/Theme.Material"> <!-- <intent-filter> diff --git a/tests/SoundTriggerTestApp/src/com/android/test/soundtrigger/TestSoundTriggerActivity.java b/tests/SoundTriggerTestApp/src/com/android/test/soundtrigger/TestSoundTriggerActivity.java index 3149783506de..4770c056814c 100644 --- a/tests/SoundTriggerTestApp/src/com/android/test/soundtrigger/TestSoundTriggerActivity.java +++ b/tests/SoundTriggerTestApp/src/com/android/test/soundtrigger/TestSoundTriggerActivity.java @@ -28,6 +28,8 @@ import android.media.soundtrigger.SoundTriggerManager; import android.text.Editable; import android.text.method.ScrollingMovementMethod; import android.os.Bundle; +import android.os.Handler; +import android.os.PowerManager; import android.os.UserManager; import android.util.Log; import android.view.View; @@ -54,6 +56,8 @@ public class TestSoundTriggerActivity extends Activity { private TextView mDebugView = null; private int mSelectedModelId = 1; private ScrollView mScrollView = null; + private PowerManager.WakeLock mScreenWakelock; + private Handler mHandler; @Override protected void onCreate(Bundle savedInstanceState) { @@ -66,6 +70,7 @@ public class TestSoundTriggerActivity extends Activity { mDebugView.setMovementMethod(new ScrollingMovementMethod()); mSoundTriggerUtil = new SoundTriggerUtil(this); mRandom = new Random(); + mHandler = new Handler(); } private void postMessage(String msg) { @@ -85,24 +90,43 @@ public class TestSoundTriggerActivity extends Activity { }); } - private UUID getSelectedUuid() { + private synchronized UUID getSelectedUuid() { if (mSelectedModelId == 2) return mModelUuid2; if (mSelectedModelId == 3) return mModelUuid3; return mModelUuid1; // Default. } - private void setDetector(SoundTriggerDetector detector) { - if (mSelectedModelId == 2) mDetector2 = detector; - if (mSelectedModelId == 3) mDetector3 = detector; + private synchronized void setDetector(SoundTriggerDetector detector) { + if (mSelectedModelId == 2) { + mDetector2 = detector; + return; + } + if (mSelectedModelId == 3) { + mDetector3 = detector; + return; + } mDetector1 = detector; } - private SoundTriggerDetector getDetector() { + private synchronized SoundTriggerDetector getDetector() { if (mSelectedModelId == 2) return mDetector2; if (mSelectedModelId == 3) return mDetector3; return mDetector1; } + private void screenWakeup() { + PowerManager pm = ((PowerManager)getSystemService(POWER_SERVICE)); + if (mScreenWakelock == null) { + mScreenWakelock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "TAG"); + } + mScreenWakelock.acquire(); + } + + private void screenRelease() { + PowerManager pm = ((PowerManager)getSystemService(POWER_SERVICE)); + mScreenWakelock.release(); + } + /** * Called when the user clicks the enroll button. * Performs a fresh enrollment. @@ -139,7 +163,7 @@ public class TestSoundTriggerActivity extends Activity { Toast.makeText(this, "Sound model not found!!!", Toast.LENGTH_SHORT).show(); return; } - boolean status = mSoundTriggerUtil.deleteSoundModel(mModelUuid1); + boolean status = mSoundTriggerUtil.deleteSoundModel(modelUuid); if (status) { Toast.makeText(this, "Successfully deleted model UUID=" + soundModel.uuid, Toast.LENGTH_SHORT) @@ -180,7 +204,10 @@ public class TestSoundTriggerActivity extends Activity { UUID modelUuid = getSelectedUuid(); SoundTriggerDetector detector = getDetector(); if (detector == null) { - Log.i(TAG, "Created an instance of the SoundTriggerDetector."); + Log.i(TAG, "Created an instance of the SoundTriggerDetector for model #" + + mSelectedModelId); + postMessage("Created an instance of the SoundTriggerDetector for model #" + + mSelectedModelId); detector = mSoundTriggerUtil.createSoundTriggerDetector(modelUuid, new DetectorCallback()); setDetector(detector); @@ -189,6 +216,7 @@ public class TestSoundTriggerActivity extends Activity { if (!detector.startRecognition( SoundTriggerDetector.RECOGNITION_FLAG_ALLOW_MULTIPLE_TRIGGERS)) { Log.e(TAG, "Fast failure attempting to start recognition."); + postMessage("Fast failure attempting to start recognition:" + mSelectedModelId); } } @@ -196,30 +224,38 @@ public class TestSoundTriggerActivity extends Activity { SoundTriggerDetector detector = getDetector(); if (detector == null) { Log.e(TAG, "Stop called on null detector."); + postMessage("Error: Stop called on null detector."); return; } postMessage("Triggering stop recognition for model: " + mSelectedModelId); if (!detector.stopRecognition()) { Log.e(TAG, "Fast failure attempting to stop recognition."); + postMessage("Fast failure attempting to stop recognition: " + mSelectedModelId); } } - public void onRadioButtonClicked(View view) { + public synchronized void onRadioButtonClicked(View view) { // Is the button now checked? boolean checked = ((RadioButton) view).isChecked(); // Check which radio button was clicked switch(view.getId()) { case R.id.model_one: - if (checked) mSelectedModelId = 1; - postMessage("Selected model one."); + if (checked) { + mSelectedModelId = 1; + postMessage("Selected model one."); + } break; case R.id.model_two: - if (checked) mSelectedModelId = 2; - postMessage("Selected model two."); + if (checked) { + mSelectedModelId = 2; + postMessage("Selected model two."); + } break; case R.id.model_three: - if (checked) mSelectedModelId = 3; - postMessage("Selected model three."); + if (checked) { + mSelectedModelId = 3; + postMessage("Selected model three."); + } break; } } @@ -232,6 +268,13 @@ public class TestSoundTriggerActivity extends Activity { public void onDetected(SoundTriggerDetector.EventPayload event) { postMessage("onDetected(): " + eventPayloadToString(event)); + screenWakeup(); + mHandler.postDelayed(new Runnable() { + @Override + public void run() { + screenRelease(); + } + }, 1000L); } public void onError() { diff --git a/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java index 746ef3675f87..7412bc269c28 100644 --- a/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java +++ b/tools/layoutlib/bridge/src/android/graphics/FontFamily_Delegate.java @@ -284,9 +284,9 @@ public class FontFamily_Delegate { } @LayoutlibDelegate - /*package*/ static boolean nAddFontWeightStyle(long nativeFamily, - ByteBuffer buffer, final List<FontListParser.Axis> axes, - final int weight, final boolean isItalic) { + /*package*/ static boolean nAddFontWeightStyle(long nativeFamily, ByteBuffer font, + int ttcIndex, List<FontListParser.Axis> listOfAxis, + int weight, boolean isItalic) { assert false : "The only client of this method has been overriden."; return false; } diff --git a/tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java b/tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java index 4901f72b23d6..94f3f546d0c3 100644 --- a/tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java +++ b/tools/layoutlib/bridge/src/android/view/AttachInfo_Accessor.java @@ -45,4 +45,10 @@ public class AttachInfo_Accessor { public static void dispatchOnPreDraw(View view) { view.mAttachInfo.mTreeObserver.dispatchOnPreDraw(); } + + public static void detachFromWindow(View view) { + if (view != null) { + view.dispatchDetachedFromWindow(); + } + } } diff --git a/tools/layoutlib/bridge/src/android/view/HandlerActionQueue_Delegate.java b/tools/layoutlib/bridge/src/android/view/HandlerActionQueue_Delegate.java new file mode 100644 index 000000000000..e580ed0e14f7 --- /dev/null +++ b/tools/layoutlib/bridge/src/android/view/HandlerActionQueue_Delegate.java @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.view; + +import com.android.tools.layoutlib.annotations.LayoutlibDelegate; + +/** + * Delegate used to provide new implementation of a select few methods of + * {@link HandlerActionQueue} + * + * Through the layoutlib_create tool, the original methods of ViewRootImpl.RunQueue have been + * replaced by calls to methods of the same name in this delegate class. + * + */ +public class HandlerActionQueue_Delegate { + + @LayoutlibDelegate + /*package*/ static void postDelayed(HandlerActionQueue thisQueue, Runnable action, long + delayMillis) { + // The actual HandlerActionQueue is never run and therefore never cleared. This method + // avoids runnables to be added to the RunQueue so they do not leak resources. + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeRenderSession.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeRenderSession.java index 2ac212c312c0..fea633e7036d 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeRenderSession.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeRenderSession.java @@ -208,6 +208,9 @@ public class BridgeRenderSession extends RenderSession { @Override public void dispose() { + if (mSession != null) { + mSession.dispose(); + } } /*package*/ BridgeRenderSession(RenderSessionImpl scene, Result lastResult) { diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java index 01c3c500855d..5c74caf2695d 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java @@ -184,15 +184,6 @@ public class BridgeIInputMethodManager implements IInputMethodManager { } @Override - public InputBindResult startInput( - /* @InputMethodClient.StartInputReason */ int startInputReason, - IInputMethodClient client, IInputContext inputContext, EditorInfo attribute, - int controlFlags) throws RemoteException { - // TODO Auto-generated method stub - return null; - } - - @Override public boolean switchToLastInputMethod(IBinder arg0) throws RemoteException { // TODO Auto-generated method stub return false; @@ -228,7 +219,7 @@ public class BridgeIInputMethodManager implements IInputMethodManager { } @Override - public InputBindResult windowGainedFocus( + public InputBindResult startInputOrWindowGainedFocus( /* @InputMethodClient.StartInputReason */ int startInputReason, IInputMethodClient client, IBinder windowToken, int controlFlags, int softInputMode, int windowFlags, EditorInfo attribute, IInputContext inputContext) diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java index 2000fbc0fa47..533a10a6b13a 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeWindow.java @@ -50,7 +50,8 @@ public final class BridgeWindow implements IWindow { @Override public void resized(Rect rect, Rect rect2, Rect rect3, Rect rect4, Rect rect5, Rect rect6, - boolean b, Configuration configuration, Rect rect7, boolean b2) throws RemoteException { + boolean b, Configuration configuration, Rect rect7, boolean b2, boolean b3) + throws RemoteException { // pass for now. } diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java index ec50cfe55651..99af226e4c4c 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java @@ -1396,4 +1396,21 @@ public class RenderSessionImpl extends RenderAction<SessionParams> { public RenderSession getSession() { return mScene; } + + public void dispose() { + AttachInfo_Accessor.detachFromWindow(mViewRoot); + if (mCanvas != null) { + mCanvas.release(); + mCanvas = null; + } + if (mViewInfoList != null) { + mViewInfoList.clear(); + } + if (mSystemViewInfoList != null) { + mSystemViewInfoList.clear(); + } + mImage = null; + mViewRoot = null; + mContentRoot = null; + } } diff --git a/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java index fe16a3ed8459..6b23da71861a 100644 --- a/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java +++ b/tools/layoutlib/bridge/tests/src/com/android/layoutlib/bridge/intensive/Main.java @@ -291,7 +291,6 @@ public class Main { @Test public void testActivity() throws ClassNotFoundException { renderAndVerify("activity.xml", "activity.png"); - } /** Test allwidgets.xml */ @@ -431,6 +430,8 @@ public class Main { ImageUtils.requireSimilar(goldenImagePath, session.getImage()); } catch (IOException e) { getLogger().error(e, e.getMessage()); + } finally { + session.dispose(); } } diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java index 9e390f68f128..8a23e4b9d3da 100644 --- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java @@ -178,6 +178,7 @@ public final class CreateInfo implements ICreateInfo { "android.view.Choreographer#scheduleVsyncLocked", "android.view.Display#updateDisplayInfoLocked", "android.view.Display#getWindowManager", + "android.view.HandlerActionQueue#postDelayed", "android.view.LayoutInflater#rInflate", "android.view.LayoutInflater#parseInclude", "android.view.View#getWindowToken", diff --git a/wifi/java/android/net/wifi/WifiScanner.java b/wifi/java/android/net/wifi/WifiScanner.java index 2373754d41a0..69e179ddfaf5 100644 --- a/wifi/java/android/net/wifi/WifiScanner.java +++ b/wifi/java/android/net/wifi/WifiScanner.java @@ -30,7 +30,9 @@ import android.os.RemoteException; import android.util.Log; import android.util.SparseArray; +import com.android.internal.annotations.VisibleForTesting; import com.android.internal.util.AsyncChannel; +import com.android.internal.util.Preconditions; import com.android.internal.util.Protocol; import java.util.List; @@ -78,6 +80,8 @@ public class WifiScanner { public static final int REASON_INVALID_REQUEST = -3; /** Invalid request */ public static final int REASON_NOT_AUTHORIZED = -4; + /** An outstanding request with the same listener hasn't finished yet. */ + public static final int REASON_DUPLICATE_REQEUST = -5; /** @hide */ public static final String GET_AVAILABLE_CHANNELS_EXTRA = "Channels"; @@ -460,8 +464,11 @@ public class WifiScanner { * scans should also not share this object. */ public void startBackgroundScan(ScanSettings settings, ScanListener listener) { + Preconditions.checkNotNull(listener, "listener cannot be null"); + int key = addListener(listener); + if (key == INVALID_KEY) return; validateChannel(); - sAsyncChannel.sendMessage(CMD_START_BACKGROUND_SCAN, 0, putListener(listener), settings); + sAsyncChannel.sendMessage(CMD_START_BACKGROUND_SCAN, 0, key, settings); } /** * stop an ongoing wifi scan @@ -469,8 +476,11 @@ public class WifiScanner { * #startBackgroundScan} */ public void stopBackgroundScan(ScanListener listener) { + Preconditions.checkNotNull(listener, "listener cannot be null"); + int key = removeListener(listener); + if (key == INVALID_KEY) return; validateChannel(); - sAsyncChannel.sendMessage(CMD_STOP_BACKGROUND_SCAN, 0, removeListener(listener)); + sAsyncChannel.sendMessage(CMD_STOP_BACKGROUND_SCAN, 0, key); } /** * reports currently available scan results on appropriate listeners @@ -491,8 +501,11 @@ public class WifiScanner { * scans should also not share this object. */ public void startScan(ScanSettings settings, ScanListener listener) { + Preconditions.checkNotNull(listener, "listener cannot be null"); + int key = addListener(listener); + if (key == INVALID_KEY) return; validateChannel(); - sAsyncChannel.sendMessage(CMD_START_SINGLE_SCAN, 0, putListener(listener), settings); + sAsyncChannel.sendMessage(CMD_START_SINGLE_SCAN, 0, key, settings); } /** @@ -501,8 +514,11 @@ public class WifiScanner { * @param listener */ public void stopScan(ScanListener listener) { + Preconditions.checkNotNull(listener, "listener cannot be null"); + int key = removeListener(listener); + if (key == INVALID_KEY) return; validateChannel(); - sAsyncChannel.sendMessage(CMD_STOP_SINGLE_SCAN, 0, removeListener(listener)); + sAsyncChannel.sendMessage(CMD_STOP_SINGLE_SCAN, 0, key); } /** specifies information about an access point of interest */ @@ -634,8 +650,11 @@ public class WifiScanner { * provided on {@link #stopTrackingWifiChange} */ public void startTrackingWifiChange(WifiChangeListener listener) { + Preconditions.checkNotNull(listener, "listener cannot be null"); + int key = addListener(listener); + if (key == INVALID_KEY) return; validateChannel(); - sAsyncChannel.sendMessage(CMD_START_TRACKING_CHANGE, 0, putListener(listener)); + sAsyncChannel.sendMessage(CMD_START_TRACKING_CHANGE, 0, key); } /** @@ -644,8 +663,10 @@ public class WifiScanner { * #stopTrackingWifiChange} */ public void stopTrackingWifiChange(WifiChangeListener listener) { + int key = removeListener(listener); + if (key == INVALID_KEY) return; validateChannel(); - sAsyncChannel.sendMessage(CMD_STOP_TRACKING_CHANGE, 0, removeListener(listener)); + sAsyncChannel.sendMessage(CMD_STOP_TRACKING_CHANGE, 0, key); } /** @hide */ @@ -730,11 +751,14 @@ public class WifiScanner { */ public void startTrackingBssids(BssidInfo[] bssidInfos, int apLostThreshold, BssidListener listener) { + Preconditions.checkNotNull(listener, "listener cannot be null"); + int key = addListener(listener); + if (key == INVALID_KEY) return; validateChannel(); HotlistSettings settings = new HotlistSettings(); settings.bssidInfos = bssidInfos; settings.apLostThreshold = apLostThreshold; - sAsyncChannel.sendMessage(CMD_SET_HOTLIST, 0, putListener(listener), settings); + sAsyncChannel.sendMessage(CMD_SET_HOTLIST, 0, key, settings); } /** @@ -742,8 +766,11 @@ public class WifiScanner { * @param listener same object provided in {@link #startTrackingBssids} */ public void stopTrackingBssids(BssidListener listener) { + Preconditions.checkNotNull(listener, "listener cannot be null"); + int key = removeListener(listener); + if (key == INVALID_KEY) return; validateChannel(); - sAsyncChannel.sendMessage(CMD_RESET_HOTLIST, 0, removeListener(listener)); + sAsyncChannel.sendMessage(CMD_RESET_HOTLIST, 0, key); } @@ -812,7 +839,7 @@ public class WifiScanner { private static final Object sThreadRefLock = new Object(); private static int sThreadRefCount; - private static HandlerThread sHandlerThread; + private static Handler sInternalHandler; /** * Create a new WifiScanner instance. @@ -824,12 +851,29 @@ public class WifiScanner { * @hide */ public WifiScanner(Context context, IWifiScanner service) { + this(context, service, null, true); + } + + /** + * Create a new WifiScanner instance. + * + * @param context The application context. + * @param service The IWifiScanner Binder interface + * @param looper Looper for running WifiScanner operations. If null, a handler thread will be + * created for running WifiScanner operations. + * @param waitForConnection If true, this will not return until a connection to Wifi Scanner + * service is established. + * @hide + */ + @VisibleForTesting + public WifiScanner(Context context, IWifiScanner service, Looper looper, + boolean waitForConnection) { mContext = context; mService = service; - init(); + init(looper, waitForConnection); } - private void init() { + private void init(Looper looper, boolean waitForConnection) { synchronized (sThreadRefLock) { if (++sThreadRefCount == 1) { Messenger messenger = null; @@ -846,17 +890,23 @@ public class WifiScanner { return; } - sHandlerThread = new HandlerThread("WifiScanner"); sAsyncChannel = new AsyncChannel(); sConnected = new CountDownLatch(1); - sHandlerThread.start(); - Handler handler = new ServiceHandler(sHandlerThread.getLooper()); - sAsyncChannel.connect(mContext, handler, messenger); - try { - sConnected.await(); - } catch (InterruptedException e) { - Log.e(TAG, "interrupted wait at init"); + if (looper == null) { + HandlerThread thread = new HandlerThread("WifiScanner"); + thread.start(); + sInternalHandler = new ServiceHandler(thread.getLooper()); + } else { + sInternalHandler = new ServiceHandler(looper); + } + sAsyncChannel.connect(mContext, sInternalHandler, messenger); + if (waitForConnection) { + try { + sConnected.await(); + } catch (InterruptedException e) { + Log.e(TAG, "interrupted wait at init"); + } } } } @@ -867,6 +917,30 @@ public class WifiScanner { "No permission to access and change wifi or a bad initialization"); } + // Add a listener into listener map. If the listener already exists, return INVALID_KEY and + // send an error message to internal handler; Otherwise add the listener to the listener map and + // return the key of the listener. + private int addListener(ActionListener listener) { + synchronized (sListenerMap) { + boolean keyExists = (getListenerKey(listener) != INVALID_KEY); + // Note we need to put the listener into listener map even if it's a duplicate as the + // internal handler will need the key to find the listener. In case of duplicates, + // removing duplicate key logic will be handled in internal handler. + int key = putListener(listener); + if (keyExists) { + if (DBG) Log.d(TAG, "listener key already exists"); + OperationResult operationResult = new OperationResult(REASON_DUPLICATE_REQEUST, + "Outstanding request with same key not stopped yet"); + Message message = Message.obtain(sInternalHandler, CMD_OP_FAILED, 0, key, + operationResult); + message.sendToTarget(); + return INVALID_KEY; + } else { + return key; + } + } + } + private static int putListener(Object listener) { if (listener == null) return INVALID_KEY; int key; @@ -910,7 +984,10 @@ public class WifiScanner { private static int removeListener(Object listener) { int key = getListenerKey(listener); - if (key == INVALID_KEY) return key; + if (key == INVALID_KEY) { + Log.e(TAG, "listener cannot be found"); + return key; + } synchronized (sListenerMapLock) { sListenerMap.remove(key); return key; diff --git a/wifi/java/android/net/wifi/WifiWakeReasonAndCounts.java b/wifi/java/android/net/wifi/WifiWakeReasonAndCounts.java index 17cc29fe4f80..f5cad139bd23 100644 --- a/wifi/java/android/net/wifi/WifiWakeReasonAndCounts.java +++ b/wifi/java/android/net/wifi/WifiWakeReasonAndCounts.java @@ -16,8 +16,8 @@ package android.net.wifi; -import android.os.Parcelable; import android.os.Parcel; +import android.os.Parcelable; /** * A class representing wifi wake reason accounting. @@ -52,6 +52,8 @@ public class WifiWakeReasonAndCounts implements Parcelable { public int ipv4RxMulticast; public int ipv6Multicast; public int otherRxMulticast; + public int[] cmdEventWakeCntArray; + public int[] driverFWLocalWakeCntArray; /* {@hide} */ public WifiWakeReasonAndCounts () { @@ -78,6 +80,13 @@ public class WifiWakeReasonAndCounts implements Parcelable { sb.append(" ipv4RxMulticast ").append(ipv4RxMulticast); sb.append(" ipv6Multicast ").append(ipv6Multicast); sb.append(" otherRxMulticast ").append(otherRxMulticast); + for (int i = 0; i < cmdEventWakeCntArray.length; i++) { + sb.append(" cmdEventWakeCntArray[" + i + "] " + cmdEventWakeCntArray[i]); + } + for (int i = 0; i < driverFWLocalWakeCntArray.length; i++) { + sb.append(" driverFWLocalWakeCntArray[" + i + "] " + driverFWLocalWakeCntArray[i]); + } + return sb.toString(); } @@ -111,6 +120,8 @@ public class WifiWakeReasonAndCounts implements Parcelable { dest.writeInt(ipv4RxMulticast); dest.writeInt(ipv6Multicast); dest.writeInt(otherRxMulticast); + dest.writeIntArray(cmdEventWakeCntArray); + dest.writeIntArray(driverFWLocalWakeCntArray); } /* Implement the Parcelable interface @@ -137,6 +148,8 @@ public class WifiWakeReasonAndCounts implements Parcelable { counts.ipv4RxMulticast = in.readInt(); counts.ipv6Multicast = in.readInt(); counts.otherRxMulticast = in.readInt(); + in.readIntArray(counts.cmdEventWakeCntArray); + in.readIntArray(counts.driverFWLocalWakeCntArray); return counts; } /* Implement the Parcelable interface |